from fastapi import FastAPI, Request from rag_core.business import answer_query, rescan_index from ui import app_ui import gradio as gr import logging from fastapi.responses import JSONResponse import json import os logging.info("🚀 Khởi động ứng dụng FastAPI...") app = FastAPI() @app.post("/ask") async def ask_api(req: Request): data = await req.json() query = data.get("query", "") logging.info(f"📥 API /ask nhận query: {query}") return answer_query(query) @app.post("/rescan") async def rescan_api(): logging.info("♻️ API /rescan được gọi") return rescan_index() @app.get("/get_structure_file") def get_structure_file(): path = "faiss_index/chunk_structure.json" if os.path.exists(path): try: with open(path, "r", encoding="utf-8") as f: data = json.load(f) return JSONResponse(content=data) except Exception as e: logging.error(f"❌ Lỗi đọc file JSON: {e}") return {"error": f"Lỗi đọc file: {str(e)}"} else: logging.warning("⚠️ File chunk_structure.json không tồn tại.") return {"error": "File không tồn tại."} # Mount Gradio UI vào FastAPI tại root app = gr.mount_gradio_app(app, app_ui, path="") logging.info("✅ Gradio UI đã mount vào root /")