T-576 增加生成和更新内容模式

This commit is contained in:
chengma
2026-07-09 17:44:03 +08:00
parent 9827c8c6d8
commit ab87be8223
17 changed files with 679 additions and 183 deletions
+25 -11
View File
@@ -349,9 +349,10 @@ def _has_generated_cover(task):
return bool(str(getattr(task, "new_cover_path", "") or "").strip())
def generation_needs(task, generate_cover=False):
def generation_needs(task, generate_cover=False, generate_mode=None):
"""Return which AI components still need generation for this task."""
mode = appconfig.normalize_generate_mode(generate_mode, generate_cover=generate_cover)
stage = str(getattr(task, "stage", "") or "")
status = str(getattr(task, "status", "") or "")
if status in {"running", "skipped"}:
@@ -364,29 +365,36 @@ def generation_needs(task, generate_cover=False):
and _task_attempt_count(task, "apply_attempts") > 0
):
return {"title": False, "cover": False}
needs_title = not _has_generated_title(task)
needs_cover = bool(generate_cover) and not _has_generated_cover(task)
has_title = _has_generated_title(task)
needs_title = appconfig.generate_mode_includes_title(mode) and not has_title
needs_cover = False
if appconfig.generate_mode_includes_cover(mode) and not _has_generated_cover(task):
if mode == "cover":
needs_cover = has_title
else:
needs_cover = has_title or needs_title
return {"title": needs_title, "cover": needs_cover}
def is_generatable_task(task, generate_cover=False):
def is_generatable_task(task, generate_cover=False, generate_mode=None):
"""判断任务是否能由② AI生成执行或重试。"""
needs = generation_needs(task, generate_cover=generate_cover)
needs = generation_needs(task, generate_cover=generate_cover, generate_mode=generate_mode)
return bool(needs["title"] or needs["cover"])
def generation_component_totals(tasks, generate_cover=False):
def generation_component_totals(tasks, generate_cover=False, generate_mode=None):
"""Count task and component gaps for a generation run."""
mode = appconfig.normalize_generate_mode(generate_mode, generate_cover=generate_cover)
eligible = [
task for task in list(tasks)
if is_generatable_task(task, generate_cover=generate_cover)
if is_generatable_task(task, generate_mode=mode)
]
title_total = 0
cover_total = 0
for task in eligible:
needs = generation_needs(task, generate_cover=generate_cover)
needs = generation_needs(task, generate_mode=mode)
if needs["title"]:
title_total += 1
if needs["cover"]:
@@ -415,6 +423,7 @@ def generate_batch(tasks, prompts, ai_cfg=None, on_progress=None, should_stop=No
"jpg_quality",
"resolution",
"generate_cover",
"generate_mode",
}
}
)
@@ -428,14 +437,18 @@ def generate_batch(tasks, prompts, ai_cfg=None, on_progress=None, should_stop=No
on_error = runtime.get("on_error")
title_prompt = _prompt_value(prompts, "title")
cover_prompt = _prompt_value(prompts, "cover")
generate_cover = bool(generation_cfg.get("generate_cover", False))
generate_mode = appconfig.normalize_generate_mode(
generation_cfg.get("generate_mode"),
generate_cover=generation_cfg.get("generate_cover", False),
)
generate_cover = appconfig.generate_mode_includes_cover(generate_mode)
should_stop = should_stop or (lambda: False)
eligible = [
task for task in list(tasks)
if is_generatable_task(task, generate_cover=generate_cover)
if is_generatable_task(task, generate_mode=generate_mode)
]
needs_by_task = {
getattr(task, "id", None): generation_needs(task, generate_cover=generate_cover)
getattr(task, "id", None): generation_needs(task, generate_mode=generate_mode)
for task in eligible
}
title_tasks = [
@@ -457,6 +470,7 @@ def generate_batch(tasks, prompts, ai_cfg=None, on_progress=None, should_stop=No
"failed": 0,
"cancelled": False,
"generate_cover": generate_cover,
"generate_mode": generate_mode,
}
_emit_generation_progress(on_progress, summary)
title_results = {}