T-576 增加生成和更新内容模式
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
Reference in New Issue
Block a user