models_api.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from typing import Any, List
  2. from fastapi import APIRouter, Depends, HTTPException
  3. from sqlalchemy.orm import Session
  4. from backend.app.api import deps
  5. from backend.app.core.database import get_db
  6. from backend.app.models import sql_models
  7. from backend.app.schemas import schemas
  8. from backend.app.services.llm_agent import test_connection
  9. router = APIRouter()
  10. @router.get("", response_model=List[schemas.ModelConfig])
  11. def read_models(
  12. db: Session = Depends(get_db),
  13. skip: int = 0,
  14. limit: int = 100,
  15. current_user: sql_models.User = Depends(deps.get_current_user)
  16. ) -> Any:
  17. return db.query(sql_models.ModelConfig).offset(skip).limit(limit).all()
  18. @router.post("", response_model=schemas.ModelConfig)
  19. def create_model(
  20. *,
  21. db: Session = Depends(get_db),
  22. model_in: schemas.ModelConfigCreate,
  23. current_user: sql_models.User = Depends(deps.get_current_user)
  24. ) -> Any:
  25. model = sql_models.ModelConfig(**model_in.model_dump())
  26. db.add(model)
  27. db.commit()
  28. db.refresh(model)
  29. return model
  30. @router.put("/{id}", response_model=schemas.ModelConfig)
  31. def update_model(
  32. *,
  33. db: Session = Depends(get_db),
  34. id: int,
  35. model_in: schemas.ModelConfigCreate,
  36. current_user: sql_models.User = Depends(deps.get_current_user)
  37. ) -> Any:
  38. model = db.query(sql_models.ModelConfig).filter(sql_models.ModelConfig.id == id).first()
  39. if not model:
  40. raise HTTPException(status_code=404, detail="Model config not found")
  41. for key, value in model_in.model_dump().items():
  42. setattr(model, key, value)
  43. db.commit()
  44. db.refresh(model)
  45. return model
  46. @router.delete("/{id}", response_model=schemas.ModelConfig)
  47. def delete_model(
  48. *,
  49. db: Session = Depends(get_db),
  50. id: int,
  51. current_user: sql_models.User = Depends(deps.get_current_user)
  52. ) -> Any:
  53. model = db.query(sql_models.ModelConfig).filter(sql_models.ModelConfig.id == id).first()
  54. if not model:
  55. raise HTTPException(status_code=404, detail="Model config not found")
  56. db.delete(model)
  57. db.commit()
  58. return model
  59. @router.post("/test")
  60. async def test_model_config(
  61. *,
  62. model_in: schemas.ModelConfigCreate,
  63. current_user: sql_models.User = Depends(deps.get_current_user)
  64. ) -> Any:
  65. try:
  66. result = await test_connection(
  67. base_url=model_in.base_url,
  68. api_key=model_in.api_key,
  69. model_name=model_in.model_name
  70. )
  71. return {"status": "success", "message": result}
  72. except Exception as e:
  73. raise HTTPException(status_code=400, detail=str(e))