| | from fastapi import APIRouter, HTTPException, Depends |
| | from typing import Dict, Any, Optional |
| | from pydantic import BaseModel |
| | from datetime import datetime |
| | from ...core.rag.engine import RAGEngine, RAGConfig, RAGResponse |
| |
|
| | router = APIRouter() |
| |
|
| | class GenerateRequest(BaseModel): |
| | """Request model for RAG generation""" |
| | query: str |
| | context: Optional[Dict[str, Any]] = None |
| | config: Optional[Dict[str, Any]] = None |
| |
|
| | @router.post("/generate", response_model=RAGResponse) |
| | async def generate(request: GenerateRequest): |
| | """Generate response using RAG""" |
| | try: |
| | |
| | rag = RAGEngine(request.config) |
| | await rag.initialize() |
| | |
| | |
| | response = await rag.generate( |
| | query=request.query, |
| | context=request.context |
| | ) |
| | |
| | return response |
| | |
| | except Exception as e: |
| | raise HTTPException( |
| | status_code=500, |
| | detail=f"RAG generation failed: {str(e)}" |
| | ) |
| |
|
| | @router.post("/batch", response_model=Dict[str, RAGResponse]) |
| | async def batch_generate(requests: Dict[str, GenerateRequest]): |
| | """Batch generate responses""" |
| | try: |
| | |
| | rag = RAGEngine() |
| | await rag.initialize() |
| | |
| | |
| | results = {} |
| | for key, request in requests.items(): |
| | results[key] = await rag.generate( |
| | query=request.query, |
| | context=request.context |
| | ) |
| | |
| | return results |
| | |
| | except Exception as e: |
| | raise HTTPException( |
| | status_code=500, |
| | detail=f"Batch generation failed: {str(e)}" |
| | ) |
| |
|
| | @router.get("/config/validate") |
| | async def validate_config(config: Dict[str, Any]): |
| | """Validate RAG configuration""" |
| | try: |
| | rag = RAGEngine(config) |
| | is_valid = await rag.validate_config() |
| | |
| | return { |
| | "valid": is_valid, |
| | "config": config |
| | } |
| | |
| | except Exception as e: |
| | raise HTTPException( |
| | status_code=400, |
| | detail=f"Invalid configuration: {str(e)}" |
| | ) |
| |
|
| | @router.get("/health") |
| | async def health_check(): |
| | """Check RAG component health""" |
| | try: |
| | rag = RAGEngine() |
| | await rag.initialize() |
| | |
| | return { |
| | "status": "healthy", |
| | "timestamp": datetime.now() |
| | } |
| | |
| | except Exception as e: |
| | raise HTTPException( |
| | status_code=500, |
| | detail=f"Health check failed: {str(e)}" |
| | ) |