70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from app.enums.celery_queue import CeleryQueue
|
|
from app.enums.generation_task import ChatGenerationTaskEventType
|
|
from app.services.generation.log_service import log_task_event
|
|
from app.services.generation.pipeline.owner_service import GenerationOwner, owner_type_of
|
|
|
|
|
|
async def enqueue_generation_create(
|
|
owner: GenerationOwner | None = None,
|
|
*,
|
|
reason: str,
|
|
owner_type: str | None = None,
|
|
owner_id: str | None = None,
|
|
generation_attempt_no: int | None = None,
|
|
generation_mode: str | None = None,
|
|
) -> None:
|
|
"""Commit caller-owned state before invoking this function.
|
|
|
|
Scalar owner fields are accepted so callers can avoid touching an ORM object after
|
|
commit. Existing callers may continue passing ``owner``.
|
|
"""
|
|
from app.tasks.generation_create_tasks import chatapi_create_generation_task
|
|
|
|
resolved_owner_type = owner_type or (owner_type_of(owner) if owner is not None else None)
|
|
resolved_owner_id = owner_id or (str(owner.id) if owner is not None else None)
|
|
resolved_attempt_no = int(
|
|
generation_attempt_no
|
|
or (getattr(owner, "generation_attempt_no", 1) if owner is not None else 1)
|
|
or 1
|
|
)
|
|
if not resolved_owner_type or not resolved_owner_id:
|
|
raise ValueError("投递生成任务缺少 owner_type 或 owner_id")
|
|
|
|
try:
|
|
chatapi_create_generation_task.apply_async(
|
|
args=[resolved_owner_id],
|
|
kwargs={
|
|
"owner_type": resolved_owner_type,
|
|
"generation_attempt_no": resolved_attempt_no,
|
|
},
|
|
queue=CeleryQueue.GEN_CHATAPI_CREATE.value,
|
|
task_id=(
|
|
f"generation-create:{resolved_owner_type}:{resolved_owner_id}:"
|
|
f"attempt:{resolved_attempt_no}"
|
|
),
|
|
)
|
|
await log_task_event(
|
|
owner,
|
|
owner_type=resolved_owner_type,
|
|
owner_id=resolved_owner_id,
|
|
generation_attempt_no=resolved_attempt_no,
|
|
generation_mode=generation_mode,
|
|
event_type=ChatGenerationTaskEventType.GENERATION_RECORD_ENQUEUE_SUCCESS.value,
|
|
message="资源生成创建任务已投递",
|
|
detail={"reason": reason, "queue": CeleryQueue.GEN_CHATAPI_CREATE.value},
|
|
)
|
|
except Exception as exc:
|
|
await log_task_event(
|
|
owner,
|
|
owner_type=resolved_owner_type,
|
|
owner_id=resolved_owner_id,
|
|
generation_attempt_no=resolved_attempt_no,
|
|
generation_mode=generation_mode,
|
|
event_type=ChatGenerationTaskEventType.GENERATION_RECORD_ENQUEUE_FAILED.value,
|
|
message=str(exc),
|
|
detail={"reason": reason, "queue": CeleryQueue.GEN_CHATAPI_CREATE.value},
|
|
)
|
|
raise
|