buildersai / app /routes /chat.py
Kushal
Initial deployment: FastAPI backend with Docker
f3997d4
Raw
History Blame Contribute Delete
3.05 kB
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import Optional
from app.database.connection import get_db
from app.database.models import User
from app.schemas.chat import ChatRequest, ChatResponse, MessageResponse
from app.services.chat_service import ChatService
from app.middleware.auth import get_current_user_optional
router = APIRouter(prefix="/api/chat", tags=["chat"])
@router.post("", response_model=ChatResponse)
async def send_message(
request: ChatRequest,
db: Session = Depends(get_db),
current_user: Optional[User] = Depends(get_current_user_optional)
):
"""
Send a chat message and get response.
Args:
request: Chat request with message and optional session_id
db: Database session
current_user: Optional current user (None for guests)
Returns:
Chat response with message and metadata
Raises:
HTTPException: If processing fails
"""
user_id = current_user.id if current_user else None
try:
result = ChatService.process_message(
db=db,
message=request.message,
session_id=request.session_id,
user_id=user_id,
policy_ids=request.policy_ids
)
# Parse metadata
import json
meta = json.loads(result["message"].meta) if result["message"].meta else {}
return ChatResponse(
message=MessageResponse(
id=result["message"].id,
session_id=result["message"].session_id,
role=result["message"].role,
content=result["message"].content,
meta=meta,
created_at=result["message"].created_at
),
session_id=result["session_id"],
agent=result.get("agent")
)
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=str(e)
)
except Exception as e:
print(f"Error processing message: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Error processing message"
)
@router.get("/history/{session_id}")
async def get_chat_history(
session_id: str,
db: Session = Depends(get_db),
current_user: Optional[User] = Depends(get_current_user_optional)
):
"""
Get chat history for a session.
Args:
session_id: Session ID
db: Database session
current_user: Optional current user
Returns:
List of messages
"""
try:
messages = ChatService.get_chat_history(db, session_id)
return {"messages": messages}
except Exception as e:
print(f"Error getting chat history: {e}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Error retrieving chat history"
)