生成项目任务/chat任务软删|生成资源管控回收|生成资源token验签API预处理
This commit is contained in:
@@ -22,6 +22,7 @@ async def _cleanup_urls():
|
||||
.where(
|
||||
GenerationRecord.video_url_expires_at.isnot(None),
|
||||
GenerationRecord.video_url_expires_at < now,
|
||||
GenerationRecord.deleted_at.is_(None),
|
||||
)
|
||||
.values(video_url_expires_at=None)
|
||||
)
|
||||
|
||||
@@ -106,7 +106,10 @@ def _build_optimized_prompt_by_params(task: ChatGenerationTask) -> str:
|
||||
|
||||
async def _run(task_id: str):
|
||||
async with async_session() as db:
|
||||
result = await db.execute(select(ChatGenerationTask).where(ChatGenerationTask.id == task_id))
|
||||
result = await db.execute(select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
))
|
||||
task = result.scalar_one_or_none()
|
||||
|
||||
if not task or task.generation_mode != "chatapi_async":
|
||||
@@ -230,7 +233,10 @@ async def _run(task_id: str):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
result = await db.execute(select(ChatGenerationTask).where(ChatGenerationTask.id == task_id))
|
||||
result = await db.execute(select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
))
|
||||
task = result.scalar_one_or_none()
|
||||
|
||||
if task:
|
||||
|
||||
@@ -8,6 +8,7 @@ from app.models.chat_generation_task import ChatGenerationTask
|
||||
from app.services.error_codes import extract_error_message
|
||||
from app.services.generation_download_service import download_generation_result
|
||||
from app.services.generation_log_service import log_task_event
|
||||
from app.services.resource_accounting_service import record_chat_task_generated_resource
|
||||
from app.tasks.celery_app import celery_app
|
||||
|
||||
|
||||
@@ -57,14 +58,22 @@ async def _reload_task(db, task_id: str) -> ChatGenerationTask | None:
|
||||
- 继续访问旧 task 有概率触发异步懒加载异常。
|
||||
"""
|
||||
result = await db.execute(
|
||||
select(ChatGenerationTask).where(ChatGenerationTask.id == task_id)
|
||||
select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
)
|
||||
)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def _run(task_id: str):
|
||||
async with async_session() as db:
|
||||
result = await db.execute(select(ChatGenerationTask).where(ChatGenerationTask.id == task_id))
|
||||
result = await db.execute(
|
||||
select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
)
|
||||
)
|
||||
task = result.scalar_one_or_none()
|
||||
if not task or task.generation_mode != "chatapi_async":
|
||||
return
|
||||
@@ -104,17 +113,28 @@ async def _run(task_id: str):
|
||||
to_stage="downloading",
|
||||
)
|
||||
|
||||
local_url = await download_generation_result(task)
|
||||
downloaded = await download_generation_result(task)
|
||||
|
||||
if task.gen_type == "image":
|
||||
task.image_url = local_url
|
||||
task.image_url = downloaded.url
|
||||
else:
|
||||
task.video_url = local_url
|
||||
task.video_url = downloaded.url
|
||||
|
||||
task.status = "completed"
|
||||
task.pipeline_stage = "done"
|
||||
task.generated_at = datetime.now(timezone.utc)
|
||||
task.retry_count = 0
|
||||
|
||||
await record_chat_task_generated_resource(
|
||||
db,
|
||||
task,
|
||||
resource_url=downloaded.url,
|
||||
storage_path=downloaded.storage_path,
|
||||
file_size_bytes=downloaded.file_size_bytes,
|
||||
remote_url=task.remote_result_url,
|
||||
generated_at=task.generated_at,
|
||||
)
|
||||
|
||||
await db.commit()
|
||||
|
||||
await log_task_event(
|
||||
@@ -122,6 +142,10 @@ async def _run(task_id: str):
|
||||
event_type="DOWNLOAD_SUCCESS",
|
||||
to_status="completed",
|
||||
to_stage="done",
|
||||
detail={
|
||||
"resource_url": downloaded.url,
|
||||
"file_size_bytes": downloaded.file_size_bytes,
|
||||
},
|
||||
)
|
||||
|
||||
except Exception as exc:
|
||||
@@ -173,4 +197,4 @@ else:
|
||||
def apply_async(self, *args, **kwargs):
|
||||
raise RuntimeError("Celery is disabled")
|
||||
|
||||
download_generation_result_task = _DisabledTask()
|
||||
download_generation_result_task = _DisabledTask()
|
||||
|
||||
@@ -38,14 +38,20 @@ async def _reload_task(db, task_id: str) -> ChatGenerationTask | None:
|
||||
- 所以 poll/download 的异常分支统一 rollback 后重新 select。
|
||||
"""
|
||||
result = await db.execute(
|
||||
select(ChatGenerationTask).where(ChatGenerationTask.id == task_id)
|
||||
select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
)
|
||||
)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def _run(task_id: str):
|
||||
async with async_session() as db:
|
||||
result = await db.execute(select(ChatGenerationTask).where(ChatGenerationTask.id == task_id))
|
||||
result = await db.execute(select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.id == task_id,
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
))
|
||||
task = result.scalar_one_or_none()
|
||||
if not task or task.generation_mode != "chatapi_async":
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user