Fetching metadata from the HF Docker repository...
Oct 14 16 days ago 15:04 生图失败:账号配额耗尽当场出池并换号,失败卡片收掉「查看官网对话」 xiaolongmr
上游「你已达到 Free 套餐的图像生成请求上限」这类只回文字、本轮没生图的终局答复,
以前被一律当成 content_policy_violation 抛给用户:账号留在池子里、本地配额对免费号是
「未知」算不到 0 → 后续每个请求都再挑中它,每个用户都吃一次同样的报错。
- conversation.py:新增 is_image_quota_exhausted_message()(中/英文原话)→ 命中时
code=image_quota_exhausted(429/rate_limit_error)、can_view_official=False;号池层
换号重试(预算 max(2, image_poll_max_attempts),本机该配置是 1,直接用等于零换号)。
- account_service.py:新增 mark_image_quota_exhausted() —— 当场置「限流 / quota=0 /
image_quota_unknown=False」,由既有 account-limited-watcher 远程复核后自动回池。
- 号池被这类账号掏空时仍抛内部英文 no available image quota(站长按这串配了报错文案规则)。
- 前端:StoredImage.canViewOfficial ← task.can_view_official(page.tsx 三处映射 + 变更检测,
image-results.tsx 按钮条件加 canViewOfficial !== false;老记录没这字段 = 保持旧行为)。
- 测试:test_image_upstream_note.py +8(配额识别、号池分类、换号拿到图、整池掏空仍报错、
端到端落库断言 can_view_official is False);test_account_image_capabilities.py +2。
全量 pytest 20 failed / 954 passed,FAILED 清单与基线 full-test-6.log 逐行一致。 01:59 修复:「生成后清理官网对话」开启时取证静默失效 xiaolongmr
真机现场(HF zlcy/li):该站开着「生成后清理官网对话」,出图成功后走清理分支
直接隐藏会话(隐藏 == 官方删除,分享链接必 404),且这条路径完全绕过取证登记
(其 finally 分支里 `and not config.cleanup_shared_conversations` 早已把它排除)。
结果:取证永不登记 → 用户点「查看官网对话」只能走兜底登记(拿不到账号信息)→
一直报「上游账号已不可用」。另两个站没开这个开关,所以正常。
- conversation.py 清理分支:取证开启时改为登记进保留台账、隐藏推迟到保留期结束由
_release 统一执行(连隐藏带删链接),清理意图只是延后;登记带上热 token。
- share_evidence_service._release:没有链接且完全没有账号信息(修复前的老记录/兜底
登记)→ 直接结案 released(unreachable),不再永久 orphan 退避刷日志;有活链接仍
保持重试。
- 设置页「共享号池设置」文案:取证开启时提示隐藏会推迟到保留期结束。
测试:新增 protocol 生命周期用例(清理+取证 → 不隐藏、登记带 token)+ 回收结案
两条用例;全量 895 passed / 20 failed 与基线逐行 diff 一致(零回归);tsc/eslint 干净。 01:37 取证修复:台账固化出图热 token,账号被删也能生成/回收分享链接 xiaolongmr
- register_conversation 新增 access_token:出图那一刻把上游 token 存进台账。
之前只记邮箱、事后按邮箱反查号池,账号被删出号池/轮换 token 后反查落空,
前端表现为「这条会话所属的上游账号已不可用」(HF 部署后复现)。
- _resolve_access_token 顺序:账号池按邮箱反查(拿最新轮换 token)→ 登记
时固化的热 token 兜底;token 只落服务端台账,describe() 白名单不回前端。
- 区分两类失败文案:登记时无账号信息 vs 账号已不在池中,并加
share_evidence_account_unresolved 诊断日志。
- 回收路径(_release)同样吃到热 token 兜底。
测试:test_share_evidence +4(热 token 兜底/池优先/补登 token/无信息文案),
全量 888 passed 零新增失败(4 个 *_http 集成项为后端未启动所致,带后端重跑全过)。 01:21 官网来源取证 + 生图终局判定 + 对话卡片渲染 xiaolongmr
- 官网来源取证:每张结果图可生成 chatgpt.com 官方匿名分享链接自证「确实是官网出的图」;
出图即固化(独立线程,不占积分/额度/并发槽),到期按保留时长自动回收并隐藏上游会话
- 生图失败判定:识别内容策略拒绝(is_error 终局文本)不再白等到超时;同一张图按 id 去重,
修 n=1 出两张重复图;失败卡片补「ChatGPT 官网原话」与「查看官网」
- 提示词比例追加:默认开启,仅用户主动选比例时追加(智能比例不受影响)
- 对话渲染:app_block 裸 JSON 转 html 围栏、官网 DIL 卡片/问卷降级渲染、多题勾选统一作答、
思考摘要不展示
- 内容审核:良性复合词白名单(灵感爆炸/色彩爆炸/爆炸头等),修设计海报误拦
测试:全量 888 passed / 20 failed(与基线一致,零新增);tsc、eslint、next build 均干净 Oct 13 17 days ago 07:19 报错文案映射与 AI 归纳 + 上传限流换号 + Skills 批量删除 xiaolongmr
后台报错文案
- 新增 error_message_service:按关键词子串(任一命中 OR、不区分大小写)把上游原始报错
映射成管理员配置的大白话,只影响前台展示,原始报错仍进后台日志。
- 未命中时记入「未配置报错」待办,并在列表里附候选关键词,便于一键建规则。
- 新增 POST /api/error-messages/summarize:粘贴报错即可让模型归纳出
「关键词 + 大白话」,模型不可用时退化为本地正则抽取。
- 提示词写入本项目上下文:匹配为任一命中语义、上游报文格式
`{接口路径} failed: status={状态码}, body={...}`、路径须带区分步骤片段、
禁止 file_id/uuid 等易变片段,避免归纳出过宽规则(如裸 /backend-api/files 会吞掉 429 限流)。
- 关键词清洗:新增 _sanitize_keyword / _strip_volatile_path / _GENERIC_TOKENS,
剔除 JSON 语法碎片(引号、花括号、冒号)与 error_code 等通用字段名。
- 三类报错出口统一走映射:协议层 error_response、生图任务、可编辑文件任务。
- 前端设置页新增「报错文案」卡片:粘贴框 + AI 归纳按钮 + 内联结果卡片
(关键词/大白话就地可改、可就地保存)、规则列表、未配置报错列表。
- 修复「点添加规则没反应」:store 拆成 coerce(编辑态,保留空行)与
normalize(保存态,丢弃无效项)两档归一化,编辑态不再误丢刚加的空行。
- 修复「归纳结果看不见」:高亮延长到 6 秒并加绿底/绿边/徽标,结果面板就地可操作。
生图上传限流换号
- 新增 is_account_scoped_upload_error:识别 upload_protection_limit_exceeded /
429 上传类失败。这类限制是单账号配额,换号几乎必成,不再当作终态失败。
- 号池因上传限流被逐个排除到池空时,给出准确原因而非笼统的「生成失败」。
- 被限流换掉的账号不触发账号清理(只加入本轮排除集合并归还并发槽)。
Skills
- 新增 POST /api/admin/skills/batch-delete,一次删多个… Oct 10 20 days ago 23:38 对话 复制编辑和暂停 xiaolongmr
Oct 9 21 days ago 02:34 10.9 xiaolongmr
Oct 8 22 days ago 04:10 Make image poll retry attempts configurable xiaolongmr
Oct 7 23 days ago 12:00 1.07 xiaolongmr
Sep 30 30 days ago 05:07 测试 xiaolongmr
Sep 28 17:10 添加chat xiaolongmr
07:56 添加编辑 xiaolongmr
Aug 30 17:45 api调用默认返回url xiaolongmr
08:57 内部测试 xiaolongmr
Aug 27 08:43 完善健康检查与多模态账号故障转移 xiaolongmr
07:47 迁移上游账号认证与管理能力 xiaolongmr
02:03 迁移上游 v1.8.0 核心能力 xiaolongmr
Aug 26 14:27 Merge upstream v1.6.0 feature baseline xiaolongmr
Aug 25 04:03 整合功能更新并排除本地恢复产物 xiaolongmr
Aug 3 01:14 页面优化 xiaolongmr
Jul 31 01:15 添加4kapi支持 xiaolongmr
Jul 28 17:29 添加api的功能 xiaolongmr
Jul 5 15:31 添加 Free 号池死号清理和图片拖拽导入 xiaolongmr
Jul 1 03:11 Merge remote-tracking branch 'origin/main' HouYunFei
03:10 feat: add option to remove local conversation after image generation HouYunFei
Jun 30 12:22 Merge branch 'fork/RuruoB/fix/session-resource-leak' HouYunFei
Jun 25 16:50 Update image UI and deployment settings xiaolongmr
Jun 22 16:46 feat: pass reasoning effort through chat requests Jun 21 08:40 fix: close curl_cffi Session to prevent memory leak ruruo
OpenAIBackendAPI creates a curl_cffi.requests.Session in __init__ but
never closes it. Each Session wraps a libcurl handle (~50KB of C-allocated
memory invisible to Python's GC). The account-watcher refreshes ~378
accounts every 5 minutes, leaking ~210MB/hour — observed RSS grew from
50MB to 3.7GB over 16 hours.
Changes:
- Add close(), __del__, __enter__, __exit__ to OpenAIBackendAPI
(idempotent via _closed flag, safe via getattr for partial init)
- Wrap all 8 call sites with try/finally to ensure session cleanup:
- account_service.fetch_remote_info (x2, the primary leak source)
- conversation.stream_text_deltas (generator — must use finally, not __del__)
- conversation._generate_single_image retry loop
- image_task_service._run_resume_poll
- openai_search.handle
- openai_v1_models.list_models
- editable_file_task_service (background task) Jun 14 16:36 Fix account pool quota and conversation cleanup xiaolongmr
15:30 Add shared account pool controls xiaolongmr
Jun 13 03:49 Merge branch 'fork/zyxtoworld/web-search-openai-compat' HouYunFei
03:14 Merge mask image edit support HouYunFei +1: Codex
Co-Authored-By: Codex <noreply@openai.com> Jun 11 16:44 Reset memory when uploading new reference images xiaolongmr
16:17 Fix memory image result polling xiaolongmr
15:56 Add persistent image memory mode xiaolongmr
Jun 10 18:08 Fix image credit metering and proxy URLs xiaolongmr
Jun 8 18:46 Add web search compatibility support Jun 6 05:15 feat: 生图冗余倍率配置与前端界面 861052359
Jun 5 19:30 feat: 图片编辑支持 mask 遮罩,合成到 alpha 通道 861052359
Jun 2 20:44 feat: 图片生成并行化与重试机制增强 - 重构为 _generate_single_image 支持单张图片独立生成
- 新增 stream_image_outputs_with_pool 并行生成多张图片
- 轮询超时自动换账号重试(最多4次)
- 连接超时(curl 28)同账号递增等待重试
- 传递 progress_callback 到图片生成流程 10:39 feat: 提高图片会话获取成功率,减少注册cloudflare,登录重试机制 - 新增REAL_IMAGE_FILE_ID_RE精确匹配图片文件ID
- 新增对话查找功能(_list_recent_conversations, find_conversation_by_prompt)
- 新增内容政策错误检测(_find_content_policy_error_in_conversation)
- 增强超时异常处理(区分ImagePollTimeoutError和ImageContentPolicyError)
- 减少注册时cloudflare验证出现的概率
- 登录状态无效时尝试重新登录
- 新增utils/pkce.py和utils/sentinel.py工具模块
- 更新.gitignore添加调试输出目录忽略规则 May 30 23:10 Merge pull request #212 from thynomex/codex/fix-issue-208-multi-image kunkun
修复 gpt-image-2 网页端多图只返回单张的问题 14:18 Fix multi-image ChatGPT image results thynome
13:16 Improve vision input handling and text sanitization thynome
11:32 Support remote image inputs in chat and Responses APIs Codex
11:14 feat(ai): 新增ChatGPT搜索接口支持 HouYunFei
- 在API路由中注册/v1/search端点
- 添加SearchRequest模型验证搜索请求参数
- 集成openai_search模块到依赖注入容器
- 实现完整的搜索功能包括会话创建、执行和结果获取
- 添加搜索相关的常量定义和正则表达式
- 创建搜索会话准备、运行和等待结果的核心方法
- 实现搜索结果解析和源数据提取逻辑
- 添加URL清理和搜索值查找辅助方法
- 创建测试脚本验证搜索功能
- 更新版本号至1.3.0并修改变更日志 May 29 17:08 Add chat completion cache and request dedupe thynome
15:32 feat(accounts): 新增账号级代理功能并修复图像生成错误处理 HouYunFei
- 新增账号级代理配置选项
- 修复503异常信息显示问题
- 解决前端邮箱域名输入换行问题
- 实现图像生成错误消息的安全过滤机制
- 添加图像生成错误的统一响应处理
- 优化注册页面邮箱配置输入验证逻辑
- 更新版本号至1.2.3 14:05 feat(image): 新增Codex链路生图支持2k/4k分辨率 HouYunFei
- 新增Codex链路生图功能,支持2k和4k分辨率
- 支持RT刷新账号信息
- 简化了Codex图像响应处理逻辑,移除流式处理相关代码
- 直接获取图像结果并返回,提高图像生成效率
- 移除原有的事件类型统计和上游错误处理代码
- 更新版本号至1.2.2并更新变更日志