Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException, Depends | |
| from sqlalchemy.orm import Session | |
| from .. import crud, database, schemas | |
| from ..services.vlm_service import vlm_manager | |
| from typing import Dict, Any | |
| router = APIRouter() | |
| def get_db(): | |
| db = database.SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |
| def get_available_models(db: Session = Depends(get_db)): | |
| """Get all available VLM models""" | |
| try: | |
| db_models = crud.get_models(db) | |
| models_info = [] | |
| for model in db_models: | |
| models_info.append({ | |
| "m_code": model.m_code, | |
| "label": model.label, | |
| "model_type": model.model_type, | |
| "is_available": model.is_available, | |
| "is_fallback": model.is_fallback, | |
| "config": model.config, | |
| "delete_count": model.delete_count | |
| }) | |
| # Add debug info about registered services | |
| registered_services = list(vlm_manager.services.keys()) | |
| return { | |
| "models": models_info, | |
| "debug": { | |
| "registered_services": registered_services, | |
| "total_services": len(registered_services), | |
| "available_db_models": [m.m_code for m in db_models if m.is_available] | |
| } | |
| } | |
| except Exception as e: | |
| raise HTTPException(500, f"Failed to get models: {str(e)}") | |
| def get_model_info(model_code: str, db: Session = Depends(get_db)): | |
| """Get specific model information""" | |
| try: | |
| db_model = crud.get_model(db, model_code) | |
| if not db_model: | |
| raise HTTPException(404, "Model not found") | |
| return { | |
| "m_code": db_model.m_code, | |
| "label": db_model.label, | |
| "model_type": db_model.model_type, | |
| "is_available": db_model.is_available, | |
| "config": db_model.config, | |
| "delete_count": db_model.delete_count | |
| } | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| raise HTTPException(500, f"Failed to get model info: {str(e)}") | |
| async def test_model(model_code: str, db: Session = Depends(get_db)): | |
| """Test a specific model with a sample image""" | |
| try: | |
| service = vlm_manager.services.get(model_code) | |
| if not service: | |
| raise HTTPException(404, "Model service not found") | |
| test_image_bytes = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDATx\x9cc```\x00\x00\x00\x04\x00\x01\xf6\x178\x00\x00\x00\x00IEND\xaeB`\x82' | |
| result = await service.generate_caption(test_image_bytes, "Describe this image.") | |
| return { | |
| "model": model_code, | |
| "test_result": result, | |
| "status": "success" | |
| } | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| raise HTTPException(500, f"Model test failed: {str(e)}") | |
| def toggle_model_availability(model_code: str, toggle_data: schemas.ModelToggleRequest, db: Session = Depends(get_db)): | |
| """Toggle model availability""" | |
| try: | |
| db_model = crud.get_model(db, model_code) | |
| if not db_model: | |
| raise HTTPException(404, "Model not found") | |
| new_availability = toggle_data.is_available | |
| db_model.is_available = new_availability | |
| db.commit() | |
| return { | |
| "model_code": model_code, | |
| "is_available": new_availability, | |
| "message": f"Model {model_code} availability set to {new_availability}" | |
| } | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| db.rollback() | |
| raise HTTPException(500, f"Failed to toggle model availability: {str(e)}") |