#!/usr/bin/env python3 """ Model Catalog API Router API برای دسترسی به کاتالوگ مدلهای AI """ from fastapi import APIRouter, Query, HTTPException from fastapi.responses import HTMLResponse, FileResponse from typing import List, Dict, Any, Optional import sys import os # اضافه کردن مسیر root sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) from backend.services.advanced_model_manager import get_model_manager, ModelInfo router = APIRouter(prefix="/api/models", tags=["Model Catalog"]) @router.get("/catalog", response_model=List[Dict[str, Any]]) async def get_model_catalog( category: Optional[str] = Query(None, description="Filter by category"), size: Optional[str] = Query(None, description="Filter by size"), max_size_mb: Optional[int] = Query(None, description="Max size in MB"), language: Optional[str] = Query(None, description="Filter by language"), free_only: bool = Query(True, description="Free models only"), no_auth: bool = Query(True, description="No authentication required"), min_performance: float = Query(0.0, description="Minimum performance score"), limit: int = Query(100, description="Max results") ): """ دریافت لیست مدلها با فیلترهای مختلف ### مثال: ``` GET /api/models/catalog?category=sentiment&max_size_mb=500&limit=10 ``` """ manager = get_model_manager() models = manager.filter_models( category=category, size=size, max_size_mb=max_size_mb, language=language, free_only=free_only, no_auth=no_auth, min_performance=min_performance ) # Convert to dict و محدود کردن به limit return [model.to_dict() for model in models[:limit]] @router.get("/model/{model_id}", response_model=Dict[str, Any]) async def get_model_details(model_id: str): """ دریافت جزئیات کامل یک مدل ### مثال: ``` GET /api/models/model/cryptobert ``` """ manager = get_model_manager() model = manager.get_model_by_id(model_id) if not model: raise HTTPException(status_code=404, detail=f"Model {model_id} not found") return model.to_dict() @router.get("/search") async def search_models( q: str = Query(..., description="Search query"), limit: int = Query(10, description="Max results") ): """ جستجو در مدلها ### مثال: ``` GET /api/models/search?q=crypto&limit=5 ``` """ manager = get_model_manager() results = manager.search_models(q) return { "query": q, "total": len(results), "results": [model.to_dict() for model in results[:limit]] } @router.get("/best/{category}") async def get_best_models( category: str, top_n: int = Query(3, description="Number of top models"), max_size_mb: Optional[int] = Query(None, description="Max size in MB") ): """ دریافت بهترین مدلها در یک category ### مثال: ``` GET /api/models/best/sentiment?top_n=5&max_size_mb=500 ``` """ manager = get_model_manager() try: models = manager.get_best_models( category=category, top_n=top_n, max_size_mb=max_size_mb ) return { "category": category, "count": len(models), "models": [model.to_dict() for model in models] } except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/recommend") async def recommend_models( use_case: str = Query(..., description="Use case (e.g., twitter, news, trading)"), max_models: int = Query(5, description="Max recommendations"), max_size_mb: Optional[int] = Query(None, description="Max size in MB") ): """ توصیه مدلها بر اساس use case ### مثال: ``` GET /api/models/recommend?use_case=twitter&max_models=3 ``` """ manager = get_model_manager() models = manager.recommend_models( use_case=use_case, max_models=max_models, max_size_mb=max_size_mb ) return { "use_case": use_case, "count": len(models), "recommendations": [model.to_dict() for model in models] } @router.get("/stats") async def get_catalog_stats(): """ آمار کامل کاتالوگ مدلها ### مثال: ``` GET /api/models/stats ``` """ manager = get_model_manager() return manager.get_model_stats() @router.get("/categories") async def get_categories(): """ لیست categories با آمار ### مثال: ``` GET /api/models/categories ``` """ manager = get_model_manager() return { "categories": manager.get_categories() } @router.get("/ui", response_class=HTMLResponse) async def model_catalog_ui(): """ رابط کاربری HTML برای مرور مدلها """ return """
Comprehensive catalog of 25+ AI models for crypto & finance