T-576 增加生成和更新内容模式
This commit is contained in:
+54
-10
@@ -14,6 +14,24 @@ _USER_LOG_PATH_RE = re.compile(
|
||||
)
|
||||
|
||||
|
||||
def _generation_mode_label(mode):
|
||||
mode = appconfig.normalize_generate_mode(mode)
|
||||
return {
|
||||
"title": "只生成标题",
|
||||
"cover": "只生成封面",
|
||||
"title_cover": "生成标题和封面",
|
||||
}.get(mode, "只生成标题")
|
||||
|
||||
|
||||
def _update_mode_label(mode):
|
||||
mode = appconfig.normalize_update_mode(mode)
|
||||
return {
|
||||
"title": "只更新标题",
|
||||
"cover": "只更新封面",
|
||||
"title_cover": "更新标题和封面",
|
||||
}.get(mode, "只更新标题")
|
||||
|
||||
|
||||
class GenerateWorker(BaseWorker):
|
||||
"""Generate titles and covers for eligible collected or failed generation tasks."""
|
||||
|
||||
@@ -53,14 +71,15 @@ class GenerateWorker(BaseWorker):
|
||||
}
|
||||
self._account_by_alias = account_by_alias
|
||||
ai_cfg = appconfig.ai_config(self.config)
|
||||
generate_cover = bool(ai_cfg.get("generate_cover", False))
|
||||
generate_mode = appconfig.ai_generate_mode(self.config)
|
||||
generate_cover = appconfig.generate_mode_includes_cover(generate_mode)
|
||||
eligible = [
|
||||
task for task in self.tasks
|
||||
if ai.is_generatable_task(task, generate_cover=generate_cover)
|
||||
if ai.is_generatable_task(task, generate_mode=generate_mode)
|
||||
]
|
||||
component_totals = ai.generation_component_totals(
|
||||
eligible,
|
||||
generate_cover=generate_cover,
|
||||
generate_mode=generate_mode,
|
||||
)
|
||||
self._eligible_total = len(eligible)
|
||||
self._task_positions = {
|
||||
@@ -69,11 +88,13 @@ class GenerateWorker(BaseWorker):
|
||||
}
|
||||
batch_ids = self._batch_ids(eligible)
|
||||
self._run_id = self._create_run_log(eligible, batch_ids)
|
||||
mode_text = _generation_mode_label(generate_mode)
|
||||
if generate_cover:
|
||||
if appconfig.ai_backend(self.config) == "cmhub":
|
||||
concurrency = ai.cmhub_image_concurrency_plan(ai_cfg)
|
||||
start_message = "[开始] 本轮生成 {total} 条:标题{title_total},图片{cover_total};标题并发{title_concurrency},图片并发{image_concurrency},cmhub实际生图并发{request_concurrency},下载并发{download_concurrency};开始时间 {started_at}".format(
|
||||
start_message = "[开始] 本轮生成 {total} 条:本轮生成内容:{mode_text};标题{title_total},图片{cover_total};标题并发{title_concurrency},图片并发{image_concurrency},cmhub实际生图并发{request_concurrency},下载并发{download_concurrency};开始时间 {started_at}".format(
|
||||
total=len(eligible),
|
||||
mode_text=mode_text,
|
||||
title_total=component_totals["title_total"],
|
||||
cover_total=component_totals["cover_total"],
|
||||
title_concurrency=ai_cfg.get("title_concurrency", 1),
|
||||
@@ -83,8 +104,9 @@ class GenerateWorker(BaseWorker):
|
||||
started_at=self._run_started_at_text,
|
||||
)
|
||||
else:
|
||||
start_message = "[开始] 本轮生成 {total} 条:标题{title_total},图片{cover_total};标题并发{title_concurrency},图片并发{image_concurrency};开始时间 {started_at}".format(
|
||||
start_message = "[开始] 本轮生成 {total} 条:本轮生成内容:{mode_text};标题{title_total},图片{cover_total};标题并发{title_concurrency},图片并发{image_concurrency};开始时间 {started_at}".format(
|
||||
total=len(eligible),
|
||||
mode_text=mode_text,
|
||||
title_total=component_totals["title_total"],
|
||||
cover_total=component_totals["cover_total"],
|
||||
title_concurrency=ai_cfg.get("title_concurrency", 1),
|
||||
@@ -92,8 +114,9 @@ class GenerateWorker(BaseWorker):
|
||||
started_at=self._run_started_at_text,
|
||||
)
|
||||
else:
|
||||
start_message = "[开始] 本轮生成 {total} 条:本轮仅生成标题,不生成图片;标题{title_total};标题并发{title_concurrency};开始时间 {started_at}".format(
|
||||
start_message = "[开始] 本轮生成 {total} 条:本轮生成内容:{mode_text};标题{title_total};标题并发{title_concurrency};开始时间 {started_at}".format(
|
||||
total=len(eligible),
|
||||
mode_text=mode_text,
|
||||
title_total=component_totals["title_total"],
|
||||
title_concurrency=ai_cfg.get("title_concurrency", 1),
|
||||
started_at=self._run_started_at_text,
|
||||
@@ -112,6 +135,7 @@ class GenerateWorker(BaseWorker):
|
||||
"on_event": self._on_generation_event,
|
||||
"on_error": self._on_generation_error,
|
||||
"generate_cover": generate_cover,
|
||||
"generate_mode": generate_mode,
|
||||
},
|
||||
on_progress=self._emit_generate_progress,
|
||||
should_stop=self._should_stop_generation,
|
||||
@@ -130,6 +154,7 @@ class GenerateWorker(BaseWorker):
|
||||
"failed": len(eligible),
|
||||
"cancelled": self.should_cancel(),
|
||||
"generate_cover": generate_cover,
|
||||
"generate_mode": generate_mode,
|
||||
}
|
||||
user_error = self._user_log_detail(error) or "未知错误"
|
||||
self._log_run_event(
|
||||
@@ -550,6 +575,7 @@ class ApplyWorker(BaseWorker):
|
||||
preflight=True,
|
||||
close_success_tab=False,
|
||||
dry_run=False,
|
||||
update_mode=None,
|
||||
parallel_accounts=False,
|
||||
max_parallel_accounts=1,
|
||||
batch_size=None,
|
||||
@@ -562,6 +588,10 @@ class ApplyWorker(BaseWorker):
|
||||
self.preflight = preflight
|
||||
self.close_success_tab = close_success_tab
|
||||
self.dry_run = bool(dry_run)
|
||||
self.update_mode = appconfig.normalize_update_mode(
|
||||
update_mode,
|
||||
allow_cover_update=appconfig.shopee_update_config(config).get("allow_cover_update", False),
|
||||
)
|
||||
self.parallel_accounts = bool(parallel_accounts)
|
||||
self.max_parallel_accounts = max(1, int(max_parallel_accounts or 1))
|
||||
self.batch_size = None if batch_size is None else max(1, int(batch_size or 1))
|
||||
@@ -595,8 +625,9 @@ class ApplyWorker(BaseWorker):
|
||||
}
|
||||
self._run_id = self._create_run_log(eligible, batch_ids)
|
||||
self._log_run_event(
|
||||
"step=start result=start detail=运行开始:{mode},任务{total},每批最多{batch_size},批次{batch_count},{parallel}".format(
|
||||
"step=start result=start detail=运行开始:{mode},更新内容{update_mode},任务{total},每批最多{batch_size},批次{batch_count},{parallel}".format(
|
||||
mode="检查本轮更新" if self.dry_run else "真实更新",
|
||||
update_mode=_update_mode_label(self.update_mode),
|
||||
total=total,
|
||||
batch_size=batch_size,
|
||||
batch_count=len(batches),
|
||||
@@ -662,7 +693,16 @@ class ApplyWorker(BaseWorker):
|
||||
return (
|
||||
getattr(task, "stage", None) == "generated"
|
||||
and getattr(task, "status", None) in {"success", "pending", "failed"}
|
||||
and bool(getattr(task, "new_title", None) or getattr(task, "new_cover_path", None))
|
||||
and (
|
||||
(
|
||||
appconfig.update_mode_includes_title(self.update_mode)
|
||||
and bool(getattr(task, "new_title", None))
|
||||
)
|
||||
or (
|
||||
appconfig.update_mode_includes_cover(self.update_mode)
|
||||
and bool(getattr(task, "new_cover_path", None))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def _preflight_block(self, eligible, account_rows, account_by_alias):
|
||||
@@ -823,9 +863,9 @@ class ApplyWorker(BaseWorker):
|
||||
)
|
||||
return "skipped"
|
||||
action_parts = []
|
||||
if getattr(task, "new_title", None):
|
||||
if appconfig.update_mode_includes_title(self.update_mode) and getattr(task, "new_title", None):
|
||||
action_parts.append("标题")
|
||||
if getattr(task, "new_cover_path", None):
|
||||
if appconfig.update_mode_includes_cover(self.update_mode) and getattr(task, "new_cover_path", None):
|
||||
action_parts.append("封面")
|
||||
action_text = "+".join(action_parts) or "无变更"
|
||||
self._log_run_event(
|
||||
@@ -899,6 +939,7 @@ class ApplyWorker(BaseWorker):
|
||||
close_success_tab=self.close_success_tab,
|
||||
on_step=on_step,
|
||||
bring_to_front=bring_to_front,
|
||||
update_mode=self.update_mode,
|
||||
)
|
||||
committed = bool(result.get("committed")) and not result.get("error")
|
||||
error = result.get("error")
|
||||
@@ -1027,6 +1068,7 @@ class ApplyWorker(BaseWorker):
|
||||
"dry_run": self.dry_run,
|
||||
"batch_size": self._current_batch_size,
|
||||
"batch_count": self._batch_count,
|
||||
"update_mode": self.update_mode,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1064,6 +1106,7 @@ class ApplyWorker(BaseWorker):
|
||||
"parallel_accounts": self.parallel_accounts,
|
||||
"batch_size": self._current_batch_size,
|
||||
"batch_count": self._batch_count,
|
||||
"update_mode": self.update_mode,
|
||||
"run_id": self._run_id,
|
||||
}
|
||||
if blocked:
|
||||
@@ -1086,6 +1129,7 @@ class ApplyWorker(BaseWorker):
|
||||
"max_parallel_accounts": self.max_parallel_accounts,
|
||||
"batch_size": self._current_batch_size,
|
||||
"batch_count": self._batch_count,
|
||||
"update_mode": self.update_mode,
|
||||
},
|
||||
path=self.db_path,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user