ai / backend /app /routes /chatbot_route.py
Ahmed Tarek
Add application file
61d9463
from fastapi import APIRouter, HTTPException
from backend.app.schemas.chatbot import ChatResponse , ChatRequest
from backend.app.helper.dependencies import events_vector_db, travels_vector_db
from backend.app.helper.dependencies import embedding_model , assistant
router = APIRouter()
@router.post("/chatbot/", response_model=ChatResponse)
async def process_chat(request: ChatRequest):
try:
req_type = None
chat_result = {}
if request.message == "" or request.message is None:
pass
elif request.message == "##delete_ses$0sion%()@RFFJOBC":
assistant.delete_session(request.session_id)
return ChatResponse(
response="Session deleted successfully.",
recommendations=[],
session_id=request.session_id,
type='unknown'
)
else :
chat_result = assistant.extract_requirements(
request.message,
session_id=request.session_id
)
recommendations = []
if chat_result.get('search_queries'):
# print("Search Queries:", chat_result['search_queries'] )
req_type = chat_result.get('new_requirements', {}).get('type')
db = events_vector_db if req_type.lower() == 'event' else travels_vector_db
# Search both queries
results_primary = db.search_by_query(chat_result['search_queries'][0], embedding_model, top_k=request.NoOfItems)
results_secondary = db.search_by_query(chat_result['search_queries'][1], embedding_model, top_k=request.NoOfItems)
# Combine & deduplicate
combined = results_primary + results_secondary
seen_ids = set()
for result in sorted(combined, key=lambda x: x['similarity_score'], reverse=True):
if result['id'] not in seen_ids:
recommendations.append(str(result['id']))
seen_ids.add(result['id'])
if len(recommendations) >= request.NoOfItems:
break
return ChatResponse(
response=chat_result['response'] if chat_result.get('response') else "",
recommendations=recommendations,
session_id=request.session_id,
type=req_type.lower() if req_type else 'unknown'
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Chat processing error: {str(e)}")