feat: 完成T-301 AI生成接口
新增app/ai.py,按config/ai_models.json读取默认文本和图片模型,提供gen_title与gen_cover通用HTTP接口。 支持chat JSON与images_edits multipart、失败重试、错误脱敏、图片URL/base64解析、resolution resize和jpg_quality保存。 新增tests/test_ai.py覆盖文本重试、缺字段错误不泄露Key、封面JPEG保存;同步任务看板、API、技术栈、架构、current-state和progress,并记录Tab①真机冒烟结果。
This commit is contained in:
+11
-6
@@ -218,25 +218,30 @@ apply_task(account, task) -> dict # 对已生成任务:换标题+
|
||||
|
||||
`login_status()` 不自动登录;无 Shopee tab 时打开卖家中心根地址 `https://<region_host>/`(默认 `https://seller.shopee.tw/`)用于检测/人工登录。判断规则:最终 URL 是登录页 → `LOGIN_PAGE`;缺少 `SPC_ST`/`SPC_U` → `NO_SESSION_COOKIE`;有会话 Cookie → 已登录。
|
||||
|
||||
## ai 模块(`app/ai.py`,待建,外部 AI,服务商待定)
|
||||
## ai 模块(`app/ai.py`,已建,外部 AI,通用 HTTP)
|
||||
|
||||
```python
|
||||
gen_title(title_prompt, old_title, retry=2) -> str
|
||||
# 文本生成:提示词 + 旧标题 → 新标题
|
||||
class AIError(RuntimeError): ...
|
||||
|
||||
gen_cover(cover_prompt, old_cover_path, out_path, resolution, jpg_quality, retry=2) -> str
|
||||
# 图像生成(image-to-image):提示词 + 旧封面 → 新封面,按 resolution 生成、jpg_quality 存盘,返回路径
|
||||
gen_title(title_prompt, old_title, retry=None, config=None, models_path="config/ai_models.json") -> str
|
||||
# 文本生成:读取 default_text_model,chat JSON 请求;提示词 + 旧标题 → 新标题
|
||||
|
||||
gen_cover(cover_prompt, old_cover_path, out_path, resolution=None, jpg_quality=None, retry=None, config=None, models_path="config/ai_models.json") -> str
|
||||
# 图像生成(image-to-image):读取 default_image_model;chat 多模态 JSON 或 images_edits multipart;
|
||||
# 支持返回 url / data URL / b64_json,按 resolution resize 并以 jpg_quality 保存 JPEG,返回路径
|
||||
|
||||
generate_batch(tasks, prompts, ai_cfg, on_progress, should_stop) -> None
|
||||
# 编排:先以 title_concurrency 线程池并发跑 gen_title,再以 image_concurrency 并发跑 gen_cover
|
||||
# 每条完成即 db.set_generated(实时落库);should_stop() 为真则取消未开始项
|
||||
# on_progress(标题完成数, 封面完成数, 失败数) 回调刷新进度
|
||||
# T-303 实现
|
||||
```
|
||||
|
||||
要点:
|
||||
|
||||
- 标题用 `default_text_model`、封面用 `default_image_model`(`appconfig.get_model` 取定义,含 url/key/api_type)。
|
||||
- 连接超时 = 模型 `connect_timeout_seconds`;**返回超时 = `appconfig.response_timeout()`(随分辨率:512/1k/2k/4k → 180/240/360/600)**。
|
||||
- `api_type=chat/auto` 走 OpenAI-compatible chat JSON;`api_type=images_edits` 走 multipart form。
|
||||
- 连接超时参考模型 `connect_timeout_seconds`;**返回超时 = 模型 `timeout_seconds` 或 `appconfig.response_timeout()`(随分辨率:512/1k/2k/4k → 180/240/360/600)**。
|
||||
- 并发数/重试/分辨率/jpg 质量来自 `appconfig.ai_config()`;Key 本地明文存储,但不入日志、不导出。
|
||||
- 标题快、图片慢:分两段、各用各自并发数;失败按 `retry` 重试,仍失败记 error 不阻塞其余。
|
||||
- 调用有成本与失败可能:超时、限流、内容安全拒绝都要返回明确错误。
|
||||
|
||||
Reference in New Issue
Block a user