# api/routes/chat_ai.py from fastapi import APIRouter, Depends, HTTPException from api.models.requests import ChatRequest, ChatMessage,SurveyRequest from api.models.responses import ChatResponse,SurveyAgentResponse from api.dependencies.auth import get_api_key from src.llm.orchestrator import DroneBot, Message # Adjust import as needed from src.llm.agent.flight_assesment import DroneAssessmentAgent import json from logger import logger router = APIRouter( prefix="/chat", tags=["chat"] ) @router.post("/booking-assistant", response_model=ChatResponse) async def chat_ai( request: ChatRequest, _: str = Depends(get_api_key) ): """Chat with DroneBot using query and history.""" try: logger.info(f"Starting chat request with query: {request.query}") logger.info(f"History length: {len(request.history)}") # Extract customer metadata if provided customer_metadata = request.customer_metadata if customer_metadata: logger.info(f"Customer metadata provided: {list(customer_metadata.keys())}") else: logger.info("No customer metadata provided") # Convert to internal Message format history = [Message(role=msg.role, content=msg.content) for msg in request.history] logger.info(f"Converted history to internal format: {len(history)} messages") # Initialize DroneBot with history and customer metadata logger.info("Initializing DroneBot...") logger.info(f"History: {history}") bot = DroneBot(history=history, use_openai_as_fallback=True, customer_metadata=customer_metadata) logger.info("DroneBot initialized successfully") # Get response from DroneBot logger.info("Calling DroneBot.chat()...") result = bot.chat(request.query) logger.info(f"DroneBot response received: {result}") final_message_json = json.loads(result["final_message"]) # If JSON parsing fails, create a fallback structure # message = { # "message": final_message_json, # "options": None, # "requires_selection": False, # "end": "in_progress", # "form": {} # } logger.info("Created fallback message structure") logger.info(f"Final message to return: {final_message_json}") return ChatResponse( status="success", message=final_message_json ) except HTTPException: logger.error("Re-raising HTTPException") raise except Exception as e: logger.error(f"Unexpected error in chat_ai: {str(e)}", exc_info=True) raise HTTPException( status_code=500, detail=str(e) ) @router.post("/analyse-survey", response_model=SurveyAgentResponse) async def run_survey_agent( request: SurveyRequest, _: str = Depends(get_api_key) ): """Chat with DroneBot using query and history.""" try: booking_form_input = request.booking_form_input #from test2 import booking_form_input agent = DroneAssessmentAgent() result = await agent.run(booking_form_input) return SurveyAgentResponse( status="success", result=result ) except Exception as e: raise HTTPException( status_code=500, detail=str(e) )