Spaces:
Sleeping
Sleeping
| 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() | |
| 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)}") |