Spaces:
Sleeping
Sleeping
| 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 | |
| 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 | |
| } | |
| } | |
| 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} | |
| async def get_profile(): | |
| return { | |
| "success": True, | |
| "profile": { | |
| "user_id": "user_123", | |
| "name": "Spiritual Seeker", | |
| "preferences": ["prayer", "scripture_study"] | |
| } | |
| } | |