myrmidon / python /src /server /api_routes /agent_chat_api.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
2.5 kB
"""
Agent Chat API - Polling-based chat with SSE proxy to AI agents
"""
import logging
import uuid
from datetime import datetime
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
logger = logging.getLogger(__name__)
# Create router
router = APIRouter(prefix="/api/agent-chat", tags=["agent-chat"])
# Simple in-memory session storage
sessions: dict[str, dict] = {}
# Request/Response models
class CreateSessionRequest(BaseModel):
project_id: str | None = None
agent_type: str = "rag"
class ChatMessage(BaseModel):
id: str
content: str
sender: str
timestamp: datetime
agent_type: str | None = None
# REST Endpoints (minimal for frontend compatibility)
@router.post("/sessions")
async def create_session(request: CreateSessionRequest):
"""Create a new chat session."""
session_id = str(uuid.uuid4())
sessions[session_id] = {
"id": session_id,
"session_id": session_id, # Frontend expects this
"project_id": request.project_id,
"agent_type": request.agent_type,
"messages": [],
"created_at": datetime.now().isoformat(),
}
logger.info(f"Created chat session {session_id} with agent_type: {request.agent_type}")
return {"session_id": session_id}
@router.get("/sessions/{session_id}")
async def get_session(session_id: str):
"""Get session information."""
if session_id not in sessions:
raise HTTPException(status_code=404, detail="Session not found")
return sessions[session_id]
@router.get("/sessions/{session_id}/messages")
async def get_messages(session_id: str):
"""Get messages for a session (for polling)."""
if session_id not in sessions:
raise HTTPException(status_code=404, detail="Session not found")
return sessions[session_id].get("messages", [])
@router.post("/sessions/{session_id}/messages")
async def send_message(session_id: str, request: dict):
"""REST endpoint for sending messages."""
if session_id not in sessions:
raise HTTPException(status_code=404, detail="Session not found")
# Store user message
user_msg = {
"id": str(uuid.uuid4()),
"content": request.get("message", ""),
"sender": "user",
"timestamp": datetime.now().isoformat(),
}
sessions[session_id]["messages"].append(user_msg)
# Note: Agent responses would be processed here if agents service was enabled
# For now, just return success
return {"status": "sent"}