Spaces:
Runtime error
Runtime error
File size: 1,461 Bytes
36ed17a 03beb83 36ed17a 03beb83 36ed17a 03beb83 36ed17a 03beb83 36ed17a 03beb83 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.schemas.chat import ChatMessage, ChatResponse
from app.crud.chat_crud import create_chat_message
from app.tasks.chat_task import process_chat_message
from src.number_manipulation import add_random_number
from app.db.database import get_db
from aiocache import caches
router = APIRouter()
@router.post("/chat", response_model=ChatResponse)
async def chat(message: ChatMessage, db: AsyncSession = Depends(get_db)):
cache = caches.get("default")
cache_key = f"chat:{message.user_input}:{message.content}"
# Attempt to retrieve the cached response
cached_response = await cache.get(cache_key)
if cached_response:
return ChatResponse(**cached_response)
# Process user input if not cached
processed_value = add_random_number(message.user_input)
message_id = await create_chat_message(
db=db,
content=message.content,
user_input=message.user_input,
processed_value=processed_value,
)
# Trigger background task
process_chat_message.delay(message.content)
# Prepare the response data
response_data = {
"message_id": message_id,
"status": "Message received",
"processed_value": processed_value,
}
# Cache the response data
await cache.set(cache_key, response_data, ttl=300) # Cache for 5 minutes
return ChatResponse(**response_data)
|