32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from datetime import datetime
|
|
|
|
from app.config import settings
|
|
from app.models.chat_generation_task import ChatGenerationTask
|
|
from app.services.image_gen import download_image
|
|
from app.services.provider_limit import provider_limit
|
|
from app.services.video_gen import download_video
|
|
|
|
|
|
async def download_generation_result(record: ChatGenerationTask) -> str:
|
|
if not record.remote_result_url:
|
|
raise ValueError("缺少远程结果URL")
|
|
|
|
date_dir = datetime.now().strftime("%Y/%m/%d")
|
|
if record.gen_type == "image":
|
|
dest_dir = os.path.join(settings.STORAGE_IMAGE_LOCAL_PATH, date_dir)
|
|
os.makedirs(dest_dir, exist_ok=True)
|
|
dest = os.path.join(dest_dir, f"{record.id}.png")
|
|
async with provider_limit("result_download", settings.RESULT_DOWNLOAD_MAX_CONCURRENCY):
|
|
await download_image(record.remote_result_url, dest)
|
|
return f"/images/{date_dir}/{record.id}.png"
|
|
|
|
dest_dir = os.path.join(settings.STORAGE_LOCAL_PATH, date_dir)
|
|
os.makedirs(dest_dir, exist_ok=True)
|
|
dest = os.path.join(dest_dir, f"{record.id}.mp4")
|
|
async with provider_limit("result_download", settings.RESULT_DOWNLOAD_MAX_CONCURRENCY):
|
|
await download_video(record.remote_result_url, dest)
|
|
return f"/videos/{date_dir}/{record.id}.mp4"
|