import logging import time from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import JSONResponse from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db from app.schemas.api_v3.image import ( ApiImageGenerateRequest, ApiImageGenerateResponse, ) from app.services.api_v3 import auth_service, generation_service logger = logging.getLogger("videogen") router = APIRouter(prefix="/images", tags=["api-v3-images"]) @router.post( "", summary="生成图片", description="同步生成图片,等待完成后直接返回结果", ) async def generate_image( req: ApiImageGenerateRequest, key_context: auth_service.ApiKeyContext = Depends(auth_service.get_api_key_dependency), db: AsyncSession = Depends(get_db), ) -> JSONResponse: """同步生成图片。""" start_time = time.perf_counter() try: result = await generation_service.generate_image_sync( db=db, key=key_context.api_key, callable_models=key_context.callable_models, req=req, start_time=start_time, ) data = result.model_dump() # 处理 datetime 序列化 if data.get("created"): data["created"] = data["created"] if isinstance(data["created"], int) else int(data["created"]) return JSONResponse( content={"code": 0, "data": data, "message": "ok"}, status_code=200, ) except HTTPException: raise except Exception as exc: logger.exception("API image generation failed") raise HTTPException( status_code=status.HTTP_504_GATEWAY_TIMEOUT, detail=f"图片生成失败: {str(exc)[:200]}", )