ORA / app /api /routes.py
Abdalkaderdev's picture
Initial ORA deployment
5e0532d
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"]
}
}