Fetching metadata from the HF Docker repository... 14 days ago
-
生图求解增加进程内 V8 兜底,单容器部署无需外部 solver
xiaolongmr
上游 chatgpt.com 只接受在真实页面上下文里算出的 Turnstile,缺失或质量不够时
f/conversation 返回伪装成 404 的 {"detail":"Model not found"}。此前唯一可行路线是
外部 sentinel_solver 服务(常驻无头 Chromium),但 HF Space 等单容器环境跑不了
第二个容器,导致线上生图必然 404。
本次移植 py-mini-racer 路线,在进程内嵌 V8 直接跑上游真实 sentinel SDK:
- 新增 utils/sentinel_v8.py:加载 assets/sentinel/{sdk.js,shims.js},
按指纹缓存 V8 上下文,全局锁保证不可跨线程并发
- 新增 assets/sentinel/{sdk.js,shims.js}:上游 SDK 与浏览器环境 shim,
sdk.js 构建时打补丁暴露内部求解函数(__reg / __solve_dx)
- services/sentinel_solver_client.py:求解优先级改为
外部服务 → 进程内 V8 → 旧手写 VM;solver_user_agent() 在外部服务
探测不到 UA 时回落内置 Chromium UA,避免与 V8 shim 环境不一致
- pyproject.toml:新增 mini-racer>=0.14.1(导入名仍是 py_mini_racer)
- Dockerfile:COPY assets 进镜像
实测:solver_url 置空时 V8 自动接管,算出 1076 字符 turnstile token,
与外部浏览器路线的 1200 字符量级一致;两条路线在账号层面均返回 404,
说明该 404 与被测账号本身相关,与求解方式无关。
已知边界:V8 目前只覆盖 Turnstile(dx),so 仍需外部求解服务。