Files
ds_zagres_ai/app/api/api.py
T
2025-05-09 15:41:16 +01:00

111 lines
2.4 KiB
Python

"""
FastAPI routes for the application.
"""
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel
from typing import List, Dict, Any, Optional
from app.services.chatbot_service import chatbot_service
router = APIRouter()
class MessageRequest(BaseModel):
"""Request model for sending a message."""
message: str
user_id: str = "default_user"
class MessageResponse(BaseModel):
"""Response model for a message."""
content: str
is_user: bool
timestamp: str
class ChatResponse(BaseModel):
"""Response model for a chat."""
chat_id: int
messages: List[MessageResponse]
@router.get("/health")
async def health_check():
"""
Health check endpoint.
Returns:
JSON response with health status.
"""
return {"status": "healthy"}
@router.post("/chat", response_model=ChatResponse)
async def create_chat(user_id: str = "default_user"):
"""
Create a new chat.
Args:
user_id: ID of the user creating the chat.
Returns:
Created chat.
"""
chat_id = chatbot_service.create_chat(user_id)
return {
"chat_id": chat_id,
"messages": []
}
@router.post("/chat/{chat_id}/message", response_model=MessageResponse)
async def send_message(chat_id: int, request: MessageRequest):
"""
Send a message to the chatbot.
Args:
chat_id: ID of the chat.
request: Message request.
Returns:
Bot response.
"""
try:
response = chatbot_service.get_response(chat_id, request.message)
# Get the last message (bot response)
messages = chatbot_service.get_chat_messages(chat_id)
last_message = messages[-1]
return last_message
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))
@router.get("/chat/{chat_id}", response_model=ChatResponse)
async def get_chat(chat_id: int):
"""
Get a chat by ID.
Args:
chat_id: ID of the chat.
Returns:
Chat with messages.
"""
try:
messages = chatbot_service.get_chat_messages(chat_id)
return {
"chat_id": chat_id,
"messages": messages
}
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))
def init_app(app):
"""
Initialize FastAPI application with routes.
Args:
app: FastAPI application instance.
"""
app.include_router(router, prefix="/api")