feat: add generation API endpoints

This commit is contained in:
QiuSW
2026-07-02 22:41:37 +08:00
parent 47e6aed7a8
commit 0f7798ec2f
17 changed files with 851 additions and 19 deletions
+23
View File
@@ -572,3 +572,26 @@
- 阻塞:无。
- 决策:生成/余额等对外 API 后续统一继承 `ExternalApiView`;充值下单/状态查询仍按用户端 session 流程另行实现,不使用该外部 API 基类。
- 下一步:领取 T-302 生成标题 / 图片接口。
## 2026-07-02 T-302 生成标题 / 图片接口
- 状态:DONE
- 变更:
- 新增 `apps/api/generation.py`:编排「别名解析 -> Provider 能力二次校验 -> 计费 -> 预扣 -> 调 Provider -> 成功确认 / 失败退点」,统一翻译 `insufficient_points`、`no_pricing_rule`、`model_not_allowed`、`bad_request`、`upstream_error`。
- 新增 `apps/api/serializers.py`:校验 `POST /api/v1/generate/title` 与 `POST /api/v1/generate/image` 请求参数,仅把 `parameters` 字段传给 Provider,不把整包请求透传。
- 新增 `apps/api/storage.py`:图片结果用 Django `default_storage` 存到 `MEDIA_ROOT/generated/images/...`,响应返回 `image_url`,调用记录只写 URL / 摘要,不写 provider raw 或 base64。
- 新增 `apps/api/urls.py` 并接入 `config/urls.py`:开放 `/api/v1/generate/title` 与 `/api/v1/generate/image`。
- `config/settings.py`:补 `MEDIA_ROOT` / `MEDIA_URL`。
- `apps/ai/aliases.py`:新增 `resolve_model_alias()`,用于默认别名场景拿到真实 alias 参与计费和调用记录;原 `resolve_alias()` 保持兼容。
- 扩展 `apps/api/tests.py`:覆盖标题成功扣点、图片存储返回 URL、余额不足不调上游、缺计费规则不扣点、别名能力不匹配、Provider 能力二次校验、上游失败退点、`AiCapabilityError` 返回 400 且退点。
- 同步更新 `README.md`、`docs/00-ai-start-here.md`、`docs/03-tech-stack.md`、`docs/04-architecture.md`、`docs/api.md`、`docs/06-tasks.md`、`docs/current-state.md`。
- 验证:
- `./init.ps1`:开工前通过。
- `py -3.12 -m py_compile apps\api\generation.py apps\api\serializers.py apps\api\storage.py apps\api\urls.py apps\api\views.py apps\api\tests.py apps\ai\aliases.py config\settings.py config\urls.py`:通过。
- `py -3.12 manage.py check`:通过,0 issues。
- `py -3.12 manage.py makemigrations --check`:通过,No changes detected。
- `py -3.12 manage.py test apps.api --noinput --keepdb --verbosity 2`:通过,16 tests OK。
- `py -3.12 manage.py test --noinput --keepdb --verbosity 2`:通过,60 tests OK,耗时 133.953s。
- 阻塞:无。真实上游标题/图片接口未跑,原因是当前环境未配置可用 `AI_KEY_ENCRYPTION_KEY` + AiModel/ModelAlias + 真实上游 key;图片同步真实耗时风险仍保留到 T-403 部署前校准。
- 决策:MVP 图片结果先用本地 media 存储返回 URL,不引入 S3 依赖;后续生产对象存储可替换 `default_storage`。
- 下一步:领取 T-303 余额查询接口。