# api/routes/models.py from fastapi import APIRouter, Depends, HTTPException from typing import Dict from openai import OpenAIError from ..deps import get_db from ...datamodel import Model from ...utils import test_model router = APIRouter() @router.get("/") async def list_models( user_id: str, db=Depends(get_db) ) -> Dict: """List all models for a user""" response = db.get(Model, filters={"user_id": user_id}) return { "status": True, "data": response.data } @router.get("/{model_id}") async def get_model( model_id: int, user_id: str, db=Depends(get_db) ) -> Dict: """Get a specific model""" response = db.get( Model, filters={"id": model_id, "user_id": user_id} ) if not response.status or not response.data: raise HTTPException(status_code=404, detail="Model not found") return { "status": True, "data": response.data[0] } @router.post("/") async def create_model( model: Model, db=Depends(get_db) ) -> Dict: """Create a new model""" response = db.upsert(model) if not response.status: raise HTTPException(status_code=400, detail=response.message) return { "status": True, "data": response.data } @router.delete("/{model_id}") async def delete_model( model_id: int, user_id: str, db=Depends(get_db) ) -> Dict: """Delete a model""" response = db.delete( filters={"id": model_id, "user_id": user_id}, model_class=Model ) return { "status": True, "message": "Model deleted successfully" } @router.post("/test") async def test_model_endpoint(model: Model) -> Dict: """Test a model configuration""" try: response = test_model(model) return { "status": True, "message": "Model tested successfully", "data": response } except OpenAIError as e: raise HTTPException( status_code=400, detail=f"OpenAI API error: {str(e)}" ) except Exception as e: raise HTTPException( status_code=500, detail=f"Error testing model: {str(e)}" )