Fetching metadata from the HF Docker repository... 15 days ago
-
区分「上游 CDN 拦截」与「token 失效」,修复导入账号报 403
xiaolongmr
导入账号时报 /backend-api/accounts/check failed: HTTP 403。实测确认这不是
账号问题:同一个 token 本地直连 200,HF 容器内 403;补 sentinel token 后本地
依然 200,说明与请求内容无关,只与出口 IP 有关(容器出口被 Cloudflare 拦,
响应体是 HTML 拦截页,与此前 share_evidence_release_failed 的 403 形态一致)。
原代码把任何非 401 失败都当成单纯刷新失败,账号虽未被判死,但错误文案会让人
误以为号坏了。
改动:
- openai_backend_api:新增 UpstreamBlockedError;_get_default_account() 增加
CDN 拦截识别(content-type/body 形态)与一次退避重试,403+HTML 抛
UpstreamBlockedError,403+JSON 仍抛 RuntimeError。
- account_service.refresh_accounts():单独捕获 UpstreamBlockedError,账号保持
原样、不计失效,错误文案改为可读的「上游 CDN 拦截…非账号问题」,新增
blocked 计数随结果返回。
- api/accounts.py:导入响应透出 blocked 字段。
- api/system.py:新增管理员诊断接口 POST /api/upstream/probe,可从容器出口
直连指定路由并回报 status / cf-ray / body / 是否 CF 拦截页。 -
补齐 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,否则仍回落本地兜底。 -
修复 2026-10-14 后 /backend-api/f/conversation 伪装成 404 的报错
xiaolongmr
chatgpt.com 自 2026-10-14 起对低质量 sentinel 请求返回伪装成 404 的
"Model not found":chrome110 的 TLS 指纹被判低可信,且图片链路必须带齐
Turnstile/SO 头。对齐上游修复:
- TLS impersonation 由 chrome110 升到 chrome146(curl_cffi>=0.13 才支持,
本机已升级到 0.16.3);账号 fp 里残留的 chrome110 等旧 impersonate 统一
清除后回落 chrome146,保证 TLS 与 UA 一致
- _image_headers 补上 OpenAI-Sentinel-Turnstile-Token / OpenAI-Sentinel-SO-Token
(之前只有 Proof-Token),404 正好出在图片接口 /backend-api/f/conversation
- 新增 _sentinel_user_agent(),POW/legacy token 里的 UA 收敛到与发请求浏览器
一致(预留接入 sentinel 求解服务的入口)
16 days ago
-
官网来源取证 + 生图终局判定 + 对话卡片渲染
xiaolongmr
- 官网来源取证:每张结果图可生成 chatgpt.com 官方匿名分享链接自证「确实是官网出的图」;
出图即固化(独立线程,不占积分/额度/并发槽),到期按保留时长自动回收并隐藏上游会话
- 生图失败判定:识别内容策略拒绝(is_error 终局文本)不再白等到超时;同一张图按 id 去重,
修 n=1 出两张重复图;失败卡片补「ChatGPT 官网原话」与「查看官网」
- 提示词比例追加:默认开启,仅用户主动选比例时追加(智能比例不受影响)
- 对话渲染:app_block 裸 JSON 转 html 围栏、官网 DIL 卡片/问卷降级渲染、多题勾选统一作答、
思考摘要不展示
- 内容审核:良性复合词白名单(灵感爆炸/色彩爆炸/爆炸头等),修设计海报误拦
测试:全量 888 passed / 20 failed(与基线一致,零新增);tsc、eslint、next build 均干净
18 days ago
-
签到积分账本与有效期 + 内容审核反绕过加固 + 签到文案配置化
xiaolongmr
签到积分
- 新增 checkin_credit_remaining 真账本:仅 source=checkin 入账,仅在基础池扣减点冲减
- 新增 checkin_credit_valid_days(0=永久,>0 发放成带 expires_at 的限时券,上限 3650)
- 保存设置时若该值变化,自动重算已发放的签到积分(保留各批次原节奏)
- 弹窗「我的积分」底部提示:签到赠送剩余可用 N 积分,有 M 积分将于 K 天后到期,请及时使用~
内容审核
- 繁简归一(services/_zh_t2s.py)、17 语词表、HTML实体/百分号/Unicode/Base64 变形解码
- 否定语境豁免、良性复合词、组合规则间距窗口、ASCII 词边界、弱词机制
其他
- 签到页文案(公告/弹窗/页脚/二维码)改为后台配置 checkin_content
- 新增回归 test/test_checkin_credit_ledger.py
20 days ago
-
10.10
xiaolongmr
23 days ago
-
1.07
xiaolongmr
30 days ago
-
测试
xiaolongmr
-
添加编辑
xiaolongmr
-
api调用默认返回url
xiaolongmr
-
优化1
xiaolongmr
-
迁移上游 v1.8.0 核心能力
xiaolongmr
-
整合功能更新并排除本地恢复产物
xiaolongmr
-
页面优化
xiaolongmr
-
添加4kapi支持
xiaolongmr
-
添加api的功能
xiaolongmr
-
新版本
xiaolongmr
-
Update image UI and deployment settings
xiaolongmr
-
Add shared account pool controls
xiaolongmr
-
Fix memory image result polling
xiaolongmr
-
Add persistent image memory mode
xiaolongmr
-
init: CHATSAM public version with data persistence and keep-alive