feat: complete T-533 incremental generation

This commit is contained in:
chengma
2026-07-06 17:57:39 +08:00
parent be182b91cf
commit 46995b301d
8 changed files with 434 additions and 72 deletions
+18 -8
View File
@@ -37,10 +37,16 @@ class GenerateWorker(BaseWorker):
if str(account.alias).strip()
}
self._account_by_alias = account_by_alias
ai_cfg = appconfig.ai_config(self.config)
generate_cover = bool(ai_cfg.get("generate_cover", False))
eligible = [
task for task in self.tasks
if ai.is_generatable_task(task)
if ai.is_generatable_task(task, generate_cover=generate_cover)
]
component_totals = ai.generation_component_totals(
eligible,
generate_cover=generate_cover,
)
self._eligible_total = len(eligible)
self._task_positions = {
getattr(task, "id", None): index
@@ -48,17 +54,18 @@ class GenerateWorker(BaseWorker):
}
batch_ids = self._batch_ids(eligible)
self._run_id = self._create_run_log(eligible, batch_ids)
ai_cfg = appconfig.ai_config(self.config)
generate_cover = bool(ai_cfg.get("generate_cover", False))
if generate_cover:
start_message = "[开始] 本轮生成 {total} 条:标题{total},图片{total};标题并发{title_concurrency},图片并发{image_concurrency}".format(
start_message = "[开始] 本轮生成 {total} 条:标题{title_total},图片{cover_total};标题并发{title_concurrency},图片并发{image_concurrency}".format(
total=len(eligible),
title_total=component_totals["title_total"],
cover_total=component_totals["cover_total"],
title_concurrency=ai_cfg.get("title_concurrency", 1),
image_concurrency=ai_cfg.get("image_concurrency", 1),
)
else:
start_message = "[开始] 本轮生成 {total} 条:本轮仅生成标题,不生成图片;标题并发{title_concurrency}".format(
start_message = "[开始] 本轮生成 {total} 条:本轮仅生成标题,不生成图片;标题{title_total};标题并发{title_concurrency}".format(
total=len(eligible),
title_total=component_totals["title_total"],
title_concurrency=ai_cfg.get("title_concurrency", 1),
)
self._log_run_event(start_message)
@@ -85,9 +92,10 @@ class GenerateWorker(BaseWorker):
"ok": False,
"error": error,
"total": len(eligible),
"title_total": component_totals["title_total"],
"title_done": 0,
"cover_done": 0,
"cover_total": len(eligible) if generate_cover else 0,
"cover_total": component_totals["cover_total"] if generate_cover else 0,
"generated_done": 0,
"failed": len(eligible),
"cancelled": self.should_cancel(),
@@ -160,6 +168,8 @@ class GenerateWorker(BaseWorker):
if phase == "title":
if result == "start" and step == "title_submit":
return f"[标题] {self._task_progress_label(task)} 开始生成"
if result == "skipped":
return f"[标题] {self._task_progress_label(task)} 已有标题,跳过生文"
if result == "success" and step == "title_done":
return f"[标题] {self._task_progress_label(task)} 成功"
if result == "success" and step == "db_write":
@@ -251,12 +261,13 @@ class GenerateWorker(BaseWorker):
return f"[完成] AI 生成完成:{progress}"
def _summary_text(self, summary):
title_total = summary.get("title_total", summary.get("total", 0))
cover_total = summary.get("cover_total", summary.get("total", 0))
return "标题{title}/{total},图片{cover}/{cover_total},失败{failed}".format(
title=summary.get("title_done", 0),
cover=summary.get("cover_done", 0),
cover_total=cover_total,
total=summary.get("total", 0),
total=title_total,
failed=summary.get("failed", 0),
)
@@ -1994,4 +2005,3 @@ class AIModelTestWorker(BaseWorker):
def _elapsed_ms(self, started):
return _elapsed_ms(started)