import json import warnings from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from fastapi.middleware.cors import CORSMiddleware import os import json import warnings from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from fastapi.middleware.cors import CORSMiddleware import os # 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 report_generation.report_generation import Report_Generation_Router_v2 from s3.file_insertion_s3 import s3_bucket_router from s3.rough2 import test_router from backend.main import login_apis_router # from s3.r3 import s3_bucket_router1 from s3.r8 import s3_bucket_router1 from s3_viewer_backend.s3_viewer import s3_viewer_router # from vector_db.retrival_qa_agent import RetrievalQA_router from main_chat_2.main_chat import main_chat_router_v4 from main_chat5.main_chat_router import main_chat_router_v5 from main_chat_v6.main_chat_router import main_chat_router_v6 from report_generation.ppt_v2 import Report_Generation_Router_ppt_v2 from report_generation.pdf_v3 import Report_Generation_Router_pdf_v2 from report_generation.main_report_generation_router import Report_Generation_Unified from report_generation.save_report_to_s3 import Report_save_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_2.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(s3_viewer_router) app.include_router(s3_bucket_router1) app.include_router(main_chat_router_v4) app.include_router(test_router) # app.include_router(RetrievalQA_router) app.include_router(main_chatbot_route_v2) # app.include_router(Report_Generation_Router_v2) app.include_router(Report_Generation_Router_ppt_v2) app.include_router(Report_Generation_Router_pdf_v2) app.include_router(Report_save_router) app.include_router(main_chat_router_v5) app.include_router(Report_Generation_Unified) # app.include_router(main_chat_router_v6) #==================================login and user management routes================================== app.include_router(login_apis_router) #---------------------------Qdrant router ----------------------- # app.include_router(Qdrant_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