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"