Files

48 lines
1.6 KiB
Python
Raw Permalink Normal View History

import logging
from typing import List
from fastapi import APIRouter, HTTPException
from app.schemas.system import ModelInfo, ProcessorInfo
from app.services import facefusion_bridge, file_manager
logger = logging.getLogger(__name__)
router = APIRouter(prefix='/api/v1', tags=['processors'])
@router.get('/processors', response_model=List[ProcessorInfo])
async def list_processors():
"""List available processors and their models."""
try:
processor_names = facefusion_bridge.get_available_processors()
result = []
for name in processor_names:
result.append(ProcessorInfo(name=name, models=[]))
return result
except Exception as e:
logger.error(f'Failed to list processors: {e}')
raise HTTPException(status_code=500, detail=str(e))
@router.get('/models', response_model=List[ModelInfo])
async def list_models():
"""List downloaded model files."""
models = file_manager.list_model_files()
return [ModelInfo(name=name, path=path, size_bytes=size) for name, path, size in models]
@router.post('/models/download')
async def download_models(processors: List[str] = None):
"""Trigger model download for specified processors."""
try:
success = facefusion_bridge.force_download_models(processors)
if success:
return {'status': 'ok', 'message': 'Models downloaded successfully'}
raise HTTPException(status_code=500, detail='Some models failed to download')
except HTTPException:
raise
except Exception as e:
logger.error(f'Model download failed: {e}')
raise HTTPException(status_code=500, detail=str(e))