This commit is contained in:
2026-07-21 19:22:50 +08:00
parent b374a541ea
commit 7683ebb186
65 changed files with 5067 additions and 1741 deletions
@@ -125,6 +125,7 @@ FLOW_CONFIG = ModuleGenerationFlowConfig(
cancel_chat_task_error_message="拆镜复刻步骤被重新生成或删除,旧生成任务已取消",
material_video_url_editable=False,
step_io_schema_version=STEP_IO_SCHEMA_VERSION,
expected_flow_version="v1",
)
@@ -434,12 +435,19 @@ async def project_to_detail_out(db: AsyncSession, project: ModuleGenerationProje
user_result = await db.execute(select(User.username).where(User.id == project.user_id).limit(1))
user_name = user_result.scalar_one_or_none()
flow_version = str(getattr(project, "flow_version", None) or "v1")
video_prompt_config = dict(video_prompt_input.get("video_config") or {})
video_prompt_engine_snapshot = dict(video_prompt_config.get("engine_snapshot") or {})
return ShotReplicateTaskDetailOut(
id=project.id,
project_id=project.id,
user_id=project.user_id,
user_name=user_name,
module=project.module,
flow_version=flow_version,
step_count=3 if flow_version == "v2" else 5,
step_io_schema_version=("hot_opening_step_io_v2" if project.module == "hot_opening_replicate" else "shot_replicate_step_io_v2") if flow_version == "v2" else STEP_IO_SCHEMA_VERSION,
title=project.title,
status=project.status,
current_step_code=project.current_step_code,
@@ -454,6 +462,8 @@ async def project_to_detail_out(db: AsyncSession, project: ModuleGenerationProje
source_project_name=material_input.get("source_project_name"),
target_project_name=material_input.get("target_project_name"),
core_content_point=material_input.get("core_content_point"),
project_description=material_input.get("project_description"),
video_config=None if flow_version == "v2" else material_input.get("video_config"),
),
image_generation=ShotReplicateImageGenerationOut(
prompt_step_id=image_prompt_step.id if image_prompt_step else None,
@@ -477,9 +487,9 @@ async def project_to_detail_out(db: AsyncSession, project: ModuleGenerationProje
schema_config_source=schema_config_source,
schema_config_version=schema_config_version,
schema_config_is_fallback=schema_config_is_fallback,
engine_id=video_snapshot.get("id") or video_generate_input.get("engine_id"),
engine_name=video_snapshot.get("name") or video_generate_input.get("engine_name"),
params=video_generate_input.get("params") or video_generate_input,
engine_id=video_snapshot.get("id") or video_generate_input.get("engine_id") or video_prompt_config.get("engine_id"),
engine_name=video_snapshot.get("name") or video_generate_input.get("engine_name") or video_prompt_engine_snapshot.get("name"),
params=video_generate_input.get("params") or video_prompt_config or video_generate_input,
chat_task_id=video_generate_step.chat_task_id if video_generate_step else None,
status=video_chat.status if video_chat else (video_generate_step.status if video_generate_step else None),
result_video_url=build_resource_signed_url(video_url) if video_url else None,
@@ -606,6 +616,8 @@ async def list_shot_replicate_projects(
id=project.id,
project_id=project.id,
module=project.module,
flow_version=str(getattr(project, "flow_version", None) or "v1"),
step_count=3 if str(getattr(project, "flow_version", None) or "v1") == "v2" else 5,
title=project.title,
status=project.status,
current_step_code=project.current_step_code,
@@ -1497,6 +1509,9 @@ async def generate_video_from_prompt(
async def handle_chat_generation_task_completed(db: AsyncSession, task: ChatGenerationTask) -> None:
if not task or task.generation_mode != GENERATION_MODE:
return
from app.services.module_generation_v2.flow_service import handle_chat_generation_task_finished_v2
if await handle_chat_generation_task_finished_v2(db, task=task):
return
meta_result = await db.execute(
select(ModuleGenerationStep.id, ModuleGenerationStep.project_id).where(
ModuleGenerationStep.chat_task_id == task.id,
@@ -1579,6 +1594,9 @@ async def handle_chat_generation_task_completed(db: AsyncSession, task: ChatGene
async def handle_chat_generation_task_failed(db: AsyncSession, task: ChatGenerationTask) -> None:
if not task or task.generation_mode != GENERATION_MODE:
return
from app.services.module_generation_v2.flow_service import handle_chat_generation_task_finished_v2
if await handle_chat_generation_task_finished_v2(db, task=task):
return
meta_result = await db.execute(
select(ModuleGenerationStep.id, ModuleGenerationStep.project_id).where(
ModuleGenerationStep.chat_task_id == task.id,