feat: cap cmhub image concurrency

This commit is contained in:
chengma
2026-07-07 21:00:43 +08:00
parent 2928624019
commit 3d902d4907
12 changed files with 601 additions and 95 deletions
+38
View File
@@ -1936,6 +1936,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
cfg["ai"] = appconfig.ai_config(cfg)
cfg["ai"]["backend"] = "direct"
cfg["ai"]["generate_cover"] = True
account = accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])
@@ -1989,6 +1990,33 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"level": "warning",
}
)
ai_cfg["on_event"](
{
"task": tasks[0],
"phase": "cover",
"step": "cover_request",
"result": "success",
"detail": "cmhub 已返回 image_url,耗时 91.2秒",
}
)
ai_cfg["on_event"](
{
"task": tasks[0],
"phase": "cover",
"step": "cover_download",
"result": "success",
"detail": "下载完成,1.3MB,耗时 12.4秒",
}
)
ai_cfg["on_event"](
{
"task": tasks[0],
"phase": "cover",
"step": "cover_save",
"result": "success",
"detail": "JPEG 已保存,耗时 1.1秒,文件 220.0KB",
}
)
ai_cfg["on_task_update"](tasks[0].id, {"stage": "generated"})
return {"ok": True, "total": 1, "title_done": 1, "cover_done": 1, "failed": 0}
@@ -2016,6 +2044,9 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertIn("[开始] 本轮生成 1 条", joined_logs)
self.assertIn("[图片] 1/1 商品 51100639510", joined_logs)
self.assertIn("准备重试 1/2", joined_logs)
self.assertIn("cmhub 已返回 image_url,耗时 91.2秒", joined_logs)
self.assertIn("下载完成,1.3MB,耗时 12.4秒", joined_logs)
self.assertIn("本地保存完成,JPEG 已保存,耗时 1.1秒,文件 220.0KB", joined_logs)
self.assertIn("token=***", joined_logs)
self.assertNotIn("SECRET-TOKEN", joined_logs)
self.assertIn("[完成] AI 生成完成:标题1/1,图片1/1,失败0", joined_logs)
@@ -2023,6 +2054,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
event_messages = "\n".join(event.message for event in events)
self.assertIn("[图片] 1/1 商品 51100639510", event_messages)
self.assertIn("准备重试 1/2", event_messages)
self.assertIn("下载完成,1.3MB,耗时 12.4秒", event_messages)
self.assert_removed(temp_dir)
@@ -2032,6 +2064,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
cfg["ai"] = appconfig.ai_config(cfg)
cfg["ai"]["backend"] = "cmhub"
cfg["ai"]["generate_cover"] = True
cfg["ai"]["image_concurrency"] = 10
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])
db.insert_tasks(
@@ -2096,6 +2129,9 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual(88, summary["points_balance"])
self.assertEqual(88, progress[-1]["points_balance"])
joined_logs = "\n".join(logs)
self.assertIn("图片并发10", joined_logs)
self.assertIn("cmhub实际生图并发5", joined_logs)
self.assertIn("下载并发5", joined_logs)
self.assertIn("[计费] 商品 51100639510", joined_logs)
self.assertIn("别名 title-standard", joined_logs)
self.assertIn("扣点 1", joined_logs)
@@ -2193,6 +2229,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
cfg["ai"] = appconfig.ai_config(cfg)
cfg["ai"]["backend"] = "direct"
cfg["ai"]["generate_cover"] = True
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])
@@ -2337,6 +2374,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
cfg["ai"] = appconfig.ai_config(cfg)
cfg["ai"]["backend"] = "direct"
cfg["ai"]["generate_cover"] = True
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])