feat: add image upstream deadline
This commit is contained in:
+26
@@ -1648,3 +1648,29 @@
|
||||
- 验收补充迟到 worker 场景:reaper 已判失败并退点后,迟到 worker 返回成功也不能改回 `succeeded`、不能覆盖结果、不能再次改账。
|
||||
- 验证:仅文档更新;提交前用 `git diff --check`、`Select-String` 复核。
|
||||
- 下一步:提交本轮文档;后续领取 T-612。
|
||||
|
||||
## 2026-07-08 实施:T-612 生图同步接口止血
|
||||
|
||||
- 状态:DONE。
|
||||
- 代码变更:
|
||||
- `config/settings.py` / `.env.example`:新增 `AI_IMAGE_UPSTREAM_DEADLINE_SECONDS`,默认 180 秒。
|
||||
- `apps/ai/providers/utils.py`:新增生图上游读取硬截止计算,实际读取超时为 `min(AiModel.timeout_seconds 或分辨率默认值, AI_IMAGE_UPSTREAM_DEADLINE_SECONDS)`。
|
||||
- `apps/ai/providers/openai_compatible.py`:所有 `generate_image` Provider 的上游请求和上游返回图片 URL 下载改用生图硬截止;`generate_text` 继续使用原 `AiModel.timeout_seconds` / 分辨率默认超时,不受 T-612 截断。
|
||||
- `apps/api/generation.py`:`requests.Timeout` 统一映射为 `upstream_timeout`,HTTP 502,并复用既有失败退点路径。
|
||||
- `apps/ai/tests.py` / `apps/api/tests.py`:新增生图超时截断、文本不受影响、上游超时后退回预扣点数并标记调用失败的目标测试。
|
||||
- 文档变更:
|
||||
- `docs/06-tasks.md`:T-612 标记为 DONE,下一个任务更新为 T-613。
|
||||
- `docs/env.md`、`docs/deployment.md`、`docs/04-architecture.md`、`docs/api.md`:同步环境变量、部署超时链、API 错误码和退款口径。
|
||||
- `README.md`、`docs/00-ai-start-here.md`、`docs/current-state.md`:同步当前阶段、最新验证和下一步。
|
||||
- 验证:
|
||||
- `py -3.12 -m py_compile config\settings.py apps\ai\providers\utils.py apps\ai\providers\openai_compatible.py apps\api\generation.py apps\ai\tests.py apps\api\tests.py`:通过。
|
||||
- `py -3.12 manage.py check`:通过,0 issues。
|
||||
- `py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
|
||||
- `py -3.12 manage.py test apps.ai.tests.ProviderUtilsTests.test_image_request_timeout_caps_read_timeout_to_deadline apps.ai.tests.ChatCompletionsProviderTests.test_generate_image_caps_post_and_download_timeouts apps.ai.tests.ChatCompletionsProviderTests.test_generate_text_does_not_use_image_deadline --keepdb --noinput --verbosity 2`:首次发现 text/image 超时方法调用接反,修正后重跑通过,3 tests OK。
|
||||
- `py -3.12 manage.py test apps.api.tests.GenerateApiTests.test_image_upstream_timeout_refunds_precharged_points_and_marks_call_failed --keepdb --noinput --verbosity 2`:通过。
|
||||
- `py -3.12 manage.py test apps.api.tests.GenerateApiTests --keepdb --noinput --verbosity 2`:通过,17 tests OK。
|
||||
- `.\init.ps1`:收尾验证通过(Python 3.12.3,依赖已满足,`manage.py check` 0 issues,打印启动命令)。
|
||||
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
||||
- 已知测试环境现象:测试期仍保留 allauth `account.EmailAddress` 条件唯一约束在 MySQL 上不可创建的既有 `models.W036` 警告。
|
||||
- 决策:T-612 只给旧同步生图接口加硬截止和明确错误码,不引入 gevent,不改变文本生成超时口径;真正解决长耗时与客户端轮询体验仍放到 T-613~T-615。
|
||||
- 下一步:领取 T-613,抽生成核心 service,为 T-614 生图异步任务化复用同一套审核、计费、上游和退点逻辑。
|
||||
|
||||
Reference in New Issue
Block a user