""" RAG Debug API endpoints for testing and debugging """ from fastapi import APIRouter, Depends, HTTPException, Query from typing import Dict, Any, Optional import logging from app.core.security import get_current_user from app.core.config import settings from app.modules.rag.main import RAGModule from app.models.user import User logger = logging.getLogger(__name__) # Create router router = APIRouter() @router.get("/collections") async def list_collections(current_user: User = Depends(get_current_user)): """List all available RAG collections""" try: from app.services.qdrant_stats_service import qdrant_stats_service # Get collections from Qdrant (same as main RAG API) stats_data = await qdrant_stats_service.get_collections_stats() collections = stats_data.get("collections", []) # Extract collection names collection_names = [col["name"] for col in collections] return {"collections": collection_names, "count": len(collection_names)} except Exception as e: logger.error(f"List collections error: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/search") async def debug_search( query: str = Query(..., description="Search query"), max_results: int = Query(10, ge=1, le=50, description="Maximum number of results"), score_threshold: float = Query( 0.3, ge=0.0, le=1.0, description="Minimum score threshold" ), collection_name: Optional[str] = Query( None, description="Collection name to search" ), config: Optional[Dict[str, Any]] = None, current_user: User = Depends(get_current_user), ): """Debug search endpoint with detailed information""" try: # Get configuration app_config = settings # Initialize RAG module with BGE-M3 configuration rag_config = {"embedding_model": "BAAI/bge-m3"} rag_module = RAGModule(app_config, config=rag_config) # Get available collections if none specified if not collection_name: collections = await rag_module.list_collections() if collections: collection_name = collections[0] # Use first collection else: return { "results": [], "debug_info": { "error": "No collections available", "collections_found": 0, }, "search_time_ms": 0, } # Perform search results = await rag_module.search( query=query, max_results=max_results, score_threshold=score_threshold, collection_name=collection_name, config=config or {}, ) return results except Exception as e: logger.error(f"Debug search error: {e}") return { "results": [], "debug_info": { "error": str(e), "query": query, "collection_name": collection_name, }, "search_time_ms": 0, }