import json import warnings from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from fastapi.middleware.cors import CORSMiddleware # Import routes # from routes import collections, ingestion, sessions, chat, system from Redis.sessions import Redis_session_router from Redis.sessions_new import redis_session_route_new from Redis.sessions_old import Redis_session_router_old from Routes.main_chat_bot import main_chatbot_route from Routes.generate_report import Report_Generation_Router from s3.file_insertion_s3 import s3_bucket_router from backend.main import login_apis_router from vector_db.retrival_qa_agent import RetrievalQA_router from Routes.main_agent_chat_bot_v2 import main_chatbot_route_v2 from vector_db import qdrant_crud from vector_db.qdrant_crud import Qdrant_router from agent_tools.autovis_tool import Autoviz_router from main_chat.main_chat import main_chat_router_v3 from DB_store_backup.agentic_context_convoid_management import Db_store_router # Suppress warnings warnings.filterwarnings("ignore", message="Qdrant client version.*is incompatible.*") app = FastAPI(title="Combined AI Agent with Qdrant Collections and Redis Session Management") # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) print([route.path for route in app.routes]) # Include routers app.include_router(main_chatbot_route) app.include_router(Report_Generation_Router) app.include_router(Redis_session_router) app.include_router(redis_session_route_new) # app.include_router(Redis_session_router_old) app.include_router(Db_store_router) app.include_router(s3_bucket_router) app.include_router(Autoviz_router) app.include_router(main_chat_router_v3) app.include_router(Qdrant_router) app.include_router(RetrievalQA_router) app.include_router(main_chatbot_route_v2) #==================================login and user management routes================================== app.include_router(login_apis_router) # ------------------- MIDDLEWARE ------------------- @app.middleware("http") async def add_success_flag(request: Request, call_next): response = await call_next(request) # Only modify JSON responses if "application/json" in response.headers.get("content-type", ""): try: body = b"".join([chunk async for chunk in response.body_iterator]) data = json.loads(body.decode()) # Add success flag data["success"] = 200 <= response.status_code < 300 # Build new JSONResponse (auto handles Content-Length) response = JSONResponse( content=data, status_code=response.status_code, headers={k: v for k, v in response.headers.items() if k.lower() != "content-length"}, ) except Exception: # fallback if response is not JSON parseable pass return response