83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
"""
|
|
Model listing and cost estimation endpoints.
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from typing import Optional, Dict, Any
|
|
|
|
from ...services.video_studio import VideoStudioService
|
|
from ...utils.auth import get_current_user, require_authenticated_user
|
|
from ...utils.logger_utils import get_service_logger
|
|
|
|
logger = get_service_logger("video_studio.endpoints.models")
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/models")
|
|
async def list_available_models(
|
|
operation_type: Optional[str] = None,
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
) -> Dict[str, Any]:
|
|
"""
|
|
List available AI models for video generation.
|
|
|
|
Optionally filter by operation type (text-to-video, image-to-video, avatar, enhancement).
|
|
"""
|
|
try:
|
|
user_id = require_authenticated_user(current_user)
|
|
|
|
video_service = VideoStudioService()
|
|
|
|
models = video_service.get_available_models(operation_type)
|
|
|
|
logger.info(f"[VideoStudio] Listed models for user={user_id}, operation={operation_type}")
|
|
|
|
return {
|
|
"success": True,
|
|
"models": models,
|
|
"operation_type": operation_type,
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"[VideoStudio] Error listing models: {e}", exc_info=True)
|
|
raise HTTPException(status_code=500, detail=f"Failed to list models: {str(e)}")
|
|
|
|
|
|
@router.get("/cost-estimate")
|
|
async def estimate_cost(
|
|
operation_type: str,
|
|
duration: Optional[int] = None,
|
|
resolution: Optional[str] = None,
|
|
model: Optional[str] = None,
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
) -> Dict[str, Any]:
|
|
"""
|
|
Estimate cost for video generation operations.
|
|
|
|
Provides real-time cost estimates before generation.
|
|
"""
|
|
try:
|
|
user_id = require_authenticated_user(current_user)
|
|
|
|
video_service = VideoStudioService()
|
|
|
|
estimate = video_service.estimate_cost(
|
|
operation_type=operation_type,
|
|
duration=duration,
|
|
resolution=resolution,
|
|
model=model,
|
|
)
|
|
|
|
logger.info(f"[VideoStudio] Cost estimate for user={user_id}: {estimate}")
|
|
|
|
return {
|
|
"success": True,
|
|
"estimate": estimate,
|
|
"operation_type": operation_type,
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"[VideoStudio] Error estimating cost: {e}", exc_info=True)
|
|
raise HTTPException(status_code=500, detail=f"Failed to estimate cost: {str(e)}")
|