4.5 KiB
4.5 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | ||||
|---|---|---|---|---|---|---|---|---|---|
| T-553 | cmhub 生图超时口径调优(连接 66 秒,读取 900 秒) | 7 |
|
DONE | 2026-07-08 |
问题 / 背景
cmhub 生图偶发超时或连接失败。当前桌面端口径是:
ai.cmhub.connect_timeout默认10秒,慢网络、服务端连接队列或代理环境下容易过早报「连接 cmhub 超时」。- cmhub 生图请求和随后
image_url下载的读取等待固定650秒。如果 cmhub 线上 Nginx/Gunicorn 允许请求等待到900秒,桌面端会先于服务端超时,产生“服务端仍在生成或已扣点,本地先失败”的歧义。 - 生图是非幂等接口,读超时后不能自动重发,否则可能重复扣点。
cmhub 项目侧建议:桌面端连接超时提高到 60/120 秒量级;生图 read timeout 与线上 Nginx/Gunicorn 对齐到 900 秒。本项目第一版取中间偏保守值:连接超时默认 66 秒,生图读取等待 900 秒。
方案
-
cmhub 连接超时默认改为 66 秒
DEFAULT_CONFIG.ai.cmhub.connect_timeout从10改为66。cmhub_config()对缺失值使用66。- ⑤设置页 cmhub「连接超时(秒)」默认值改为
66,范围仍保持1..3600。 - 兼容旧配置:如果旧
data/config.json中该值缺失或仍是旧默认10,迁到66,确保已安装用户升级后也生效;若用户明确配置了其它正整数,保留用户配置。用户确实需要更短连接超时时,仍可在⑤设置页手工改小并保存。
-
cmhub 生图读取等待改为 900 秒
CMHUB_IMAGE_READ_TIMEOUT_SECONDS从650改为900。- 生图请求
POST /api/v1/generate/image的read_timeout使用900。 - 随后的
image_url下载读取等待、curl--max-time同步使用900,保持现有统一口径。 - ⑤设置页「返回超时」只读展示改为「标题 600 秒 / 图片 900 秒」。
-
保持非幂等安全边界
- 生图读超时仍不可自动重发;只允许连接超时、
rate_limited、upstream_error按现有规则处理。 - 下载失败仍只复用已返回的同一个
image_url做下载层重试,不重新调用 cmhub 生图接口。 - 不把图片并发默认值调高;用户排障时仍建议先把图片并发降到 1 或 2,稳定后再试 3。
- 生图读超时仍不可自动重发;只允许连接超时、
验收要点
- 新默认配置中
ai.cmhub.connect_timeout == 66。 - ⑤设置页 cmhub 连接超时默认显示
66。 - cmhub 生图请求 timeout 为
(connect_timeout, 900)。 - cmhub 图片下载 requests timeout 为
(connect_timeout, 900)。 - curl 下载参数
--max-time为900。 - ⑤设置页「返回超时」显示「标题 600 秒 / 图片 900 秒」。
- 生图读超时仍不自动重发;相关单测继续覆盖“不重复扣点”的行为。
- 更新
docs/04-architecture.md、docs/cmhub-integration-design.md、docs/02-requirements.md的超时口径。
边界(不改什么)
只改 cmhub 连接超时默认值、生图读取等待常量、⑤设置页显示文案、相关单测和文档;不改 cmhub API 协议、Base URL/Key/别名配置结构、标题读取等待 600 秒、图片并发上限 5、下载线程池语义、DB、Excel、Shopee/CDP 更新流程,也不增加生图读超时重试。
执行记录
- 2026-07-08:完成 T-553。
- 代码:
app/appconfig.py新增CMHUB_CONNECT_TIMEOUT_DEFAULT=66和旧默认10的读取迁移逻辑;读取旧data/config.json时缺失或旧默认10会归一为66,但用户后续显式保存10仍会保留,避免堵死高级调试。 - 代码:
app/ai.py将CMHUB_IMAGE_READ_TIMEOUT_SECONDS从650改为900,生图请求、requests 下载与 curl--max-time继续共用该常量;生图读超时仍不自动重发。 - 代码:
app/gui/tabs/settings.py的 cmhub 连接超时默认值改为66,⑤设置页「返回超时」通过常量展示为「标题 600 秒 / 图片 900 秒」。 - 测试:
tests/test_appconfig.py覆盖新默认 66、旧默认 10 读取迁移、显式保存 10 保留;tests/test_ai.py覆盖生图请求/下载/curl/read timeout 的 900 秒口径;tests/test_gui.py更新设置页展示断言。 - 验证:
python -m ruff check app tests main.py通过;py -3.10 -m compileall app main.py通过;git diff --check通过;py -3.10 -m unittest tests.test_appconfig tests.test_ai tests.test_gui通过(160 tests);py -3.10 -m unittest discover -s tests通过(257 tests)。