Fetching metadata from the HF Docker repository... 14 days ago
-
求解服务页面语言改可配置,与出口地域对齐
xiaolongmr
原先把页面 locale 硬编码成 zh-CN,但求解服务出口实测在美国(104.238.221.29
洛杉矶),时区/语言与出口 IP 所在地矛盾本身就是一个可疑特征。改为
SENTINEL_SOLVER_LOCALE 环境变量(默认 en-US),并同步更新文档说明里
SENTINEL_SOLVER_TIMEZONE 的示例。
本次排查同时确认(与本次提交无关、仅记录结论):
- 号池 8 个账号 access_token 的 JWT sub 全部是 auth0| 前缀,amr 为空,
没有一个是 google-oauth2| —— 即"邮箱+验证码/脚本注册"体系,不是
「Continue with Google」真实登录号;
- 其中 6 个 duck.com 号连 chatgpt_plan_type claim 都没有,属未完成
onboarding 的残缺号;
- f/conversation 在同一账号上重复请求会稳定返回伪装 404
{"detail":"Model not found"},与 model / thinking_effort 取值无关。 -
补齐 sentinel SO token 并让求解服务支持指定 Chrome 版本
xiaolongmr
排查 2026-10-14 生图 404:定位到 404 实际发生在 /backend-api/f/conversation,
chat-requirements 的 prepare/finalize 两步本身可通、Turnstile 也能解出。
- prepare 响应里 so 也是 required(collector_dx + snapshot_dx),
chatgpt.com 对缺 SO token 的对话请求返回伪装成 404 的 "Model not found"。
- sentinel_solver_client 新增 solve_so(),调用求解服务 /v1/so 端点。
- _get_chat_requirements 解出 SO token 并随 finalize 提交,落进 ChatRequirements.so_token,
由 _image_headers / _conversation_headers 带成 OpenAI-Sentinel-SO-Token 头。
- sentinel_solver/app.py 支持 SENTINEL_SOLVER_CHROME_PATH:优先用指定 Chrome 可执行文件
(默认指向 chrome-for-testing 153.0.8010.12,与 Playwright chromium 1243 对齐),
找不到时回退 channel="chromium"。
注:本地实测仍 404,根因指向出口 IP 归属 CN(非代码问题),详见当日工作日志。 -
借鉴 MEIZU16 把 chat-requirements 改为 prepare/finalize 两步流程修复 404
xiaolongmr
chatgpt.com 自 2026-10-14 起,旧的「单步」chat-requirements 算出的 token 被判为低可信,
对话/生图接口统一返回伪装成 404 的 "Model not found"。
改动:
- 把 _get_chat_requirements 从单步 POST 改为 prepare + finalize 两步:先 prepare 拿 challenge
参数(proofofwork / turnstile / prepare_token),用真实浏览器(sentinel_solver 服务)解出
Turnstile,再 finalize 换回真正可用的 token。复用既有 _build_requirements 算
proofofwork/turnstile,文本对话与生图链路的所有调用方(2201/2251/2441/2846)自动生效。
- sentinel_solver/app.py 同步上游最新的 SENTINEL_SOLVER_TIMEZONE 配置(页面时区需与出口
IP 所在地一致,利于过 Cloudflare 校验),含 docstring、环境变量、上下文 timezone_id 与
/health 状态输出。
生效前提:必须实际运行 sentinel_solver 服务并配置 CHATGPT2API_SENTINEL_SOLVER_URL,
否则回落本地兜底求解器仍会 404。 -
借鉴 MEIZU16/chatgpt2api 完整方案修复 404:接入 sentinel 求解服务
xiaolongmr
404 根因(issue #416):2026-10-14 起 chatgpt.com 只接受在真实页面算出的
Turnstile/SO token,纯 Python 模拟被拒(403 或伪装成 404 的 "Model not found")。
TLS 升 chrome146 只能解决「低可信」那一截,强制要求 Turnstile 时必须靠真实浏览器。
- 新增 sentinel_solver/:常驻无头 Chromium 的 chatgpt.com 页面,通过 HTTP 替主服务
算 Turnstile/SO token(playwright + playwright-stealth,移植官方挑战 VM)
- 新增 services/sentinel_solver_client.py:后端调用求解服务;未配置或失败时回落本地
utils.turnstile 兜底(已跟不上新版,仅兜底)
- services/openai_backend_api.py:turnstile 改走 solve_turnstile;_sentinel_user_agent()
回落 solver_user_agent(),保证 requirements/proof token 的 UA 与求解页一致
- services/config.py:sentinel_solver_url / sentinel_solver_key(env 或 config.json)
- docker-compose.yml:加 sentinel-solver 服务,主服务注入 CHATGPT2API_SENTINEL_SOLVER_URL
生效前提:需实际运行求解服务并配置 CHATGPT2API_SENTINEL_SOLVER_URL,否则仍回落本地兜底。