from fastapi import APIRouter, HTTPException from pydantic import BaseModel from app.services.llm import llm_service router = APIRouter() class ChatRequest(BaseModel): message: str context: dict | None = None class ChatResponse(BaseModel): success: bool response: dict @router.post("/chat", response_model=ChatResponse) async def chat_endpoint(request: ChatRequest): if not request.message: raise HTTPException(status_code=400, detail="Message is required") # Use Orchestrator to handle routing and intelligence from app.services.orchestrator import orchestrator result = await orchestrator.process_message("user_123", request.message) # Map backend trace to frontend TraceStep format formatted_trace = [] for step in result.get("trace", []): action = step.get("thought", "") if step.get("tool_calls"): tools = ", ".join([tc["name"] for tc in step["tool_calls"]]) action = f"Thinking about using tools: {tools}. {action}" formatted_trace.append({ "agent": step["agent"], "action": action }) return { "success": True, "response": { "role": result["role"], "content": result["content"], "agent": result.get("agent", "ORA"), "trace": formatted_trace } } @router.get("/memory/episodes") async def get_episodes(): from app.services.memory import memory_service episodes = await memory_service.retrieve_episodes("user_123", "", limit=10) return {"success": True, "episodes": episodes} @router.get("/user/profile") async def get_profile(): return { "success": True, "profile": { "user_id": "user_123", "name": "Spiritual Seeker", "preferences": ["prayer", "scripture_study"] } }