AgenticAI-RAG / api /routes.py
GreymanT's picture
Upload 80 files
8bf4d58 verified
"""API routes."""
import logging
from typing import Optional
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from src.core.orchestrator import get_orchestrator
from src.memory.long_term_memory import LongTermMemory
logger = logging.getLogger(__name__)
router = APIRouter()
# Request/Response models
class QueryRequest(BaseModel):
"""Query request model."""
query: str
tier: str = "basic" # "basic", "agent", or "advanced"
session_id: Optional[str] = None
class QueryResponse(BaseModel):
"""Query response model."""
success: bool
answer: Optional[str] = None
tier: str
error: Optional[str] = None
sources: Optional[list] = None
model: Optional[str] = None
agent: Optional[str] = None
class HealthResponse(BaseModel):
"""Health check response."""
status: str
version: str
@router.get("/health", response_model=HealthResponse)
async def health_check():
"""Health check endpoint."""
return {
"status": "healthy",
"version": "1.0.0",
}
@router.post("/query", response_model=QueryResponse)
async def query(request: QueryRequest):
"""
Main query endpoint supporting all tiers.
- **basic**: Simple RAG (retrieval + generation)
- **agent**: Agent with tools (calculator, web search, database)
- **advanced**: Multi-agent system with MCP servers
"""
try:
orchestrator = get_orchestrator()
response = await orchestrator.process_query(
query=request.query,
tier=request.tier,
session_id=request.session_id,
)
return QueryResponse(**response)
except Exception as e:
logger.error(f"Error processing query: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/agents")
async def get_agents():
"""Get status of all agents."""
try:
orchestrator = get_orchestrator()
status = orchestrator.get_agent_status()
return status
except Exception as e:
logger.error(f"Error getting agent status: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/system")
async def get_system_info():
"""Get system information."""
try:
orchestrator = get_orchestrator()
info = orchestrator.get_system_info()
return info
except Exception as e:
logger.error(f"Error getting system info: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/memory/{session_id}")
async def get_memory(session_id: str):
"""Get memory for a session."""
try:
long_term_memory = LongTermMemory()
memories = long_term_memory.get_session_memories(session_id, limit=50)
return {
"session_id": session_id,
"memories": memories,
"count": len(memories),
}
except Exception as e:
logger.error(f"Error getting memory: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.delete("/memory/{session_id}")
async def delete_memory(session_id: str):
"""Delete memory for a session."""
try:
long_term_memory = LongTermMemory()
deleted_count = long_term_memory.delete_session_memories(session_id)
return {
"session_id": session_id,
"deleted": deleted_count,
}
except Exception as e:
logger.error(f"Error deleting memory: {e}")
raise HTTPException(status_code=500, detail=str(e))