# from fastapi import FastAPI, HTTPException, Request # from fastapi.middleware.cors import CORSMiddleware # from rag_engine import GetRagResponse, ExtractStructure # import uvicorn # import os # from dotenv import load_dotenv # load_dotenv() # App = FastAPI() # App.add_middleware( # CORSMiddleware, # allow_origins=["*"], # allow_methods=["*"], # allow_headers=["*"], # ) # @App.get("/") # def HealthCheck(): # return {"status": "Online"} # # --- CHAT ENDPOINT --- # @App.post("/chat") # @App.post("/api/chat") # async def ChatRoute(request: Request): # # 1. Read JSON body flexibly # try: # data = await request.json() # except: # raise HTTPException(status_code=400, detail="Invalid JSON") # # 2. Look for ANY common key # user_text = data.get("message") or data.get("Msg") or data.get("query") or data.get("question") # if not user_text: # raise HTTPException(status_code=422, detail="No message found. Please send JSON with 'message' key.") # # 3. Process # try: # return GetRagResponse(user_text) # except Exception as e: # print(f"Error: {e}") # return {"answer": "Sorry, the backend encountered an error processing your request.", "sources": []} # # --- EXTRACT ENDPOINT --- # @App.post("/extract") # @App.post("/api/extract") # async def ExtractRoute(request: Request): # # 1. Read JSON # try: # data = await request.json() # except: # raise HTTPException(status_code=400, detail="Invalid JSON") # # 2. Look for ANY common key # user_text = data.get("message") or data.get("Cmd") or data.get("instruction") or data.get("query") # if not user_text: # raise HTTPException(status_code=422, detail="No command found. Please send JSON with 'message' key.") # # 3. Process # try: # return ExtractStructure(user_text) # except Exception as e: # print(f"Error: {e}") # return {"data": [], "sources": []} # if __name__ == "__main__": # # Listen on all interfaces # uvicorn.run(App, host="0.0.0.0", port=8000) from fastapi import FastAPI, HTTPException, Request from fastapi.middleware.cors import CORSMiddleware # 1. IMPORT THE INGESTION LOGIC from ingestion import IngestDocuments from rag_engine import GetRagResponse, ExtractStructure import uvicorn import os from dotenv import load_dotenv load_dotenv() App = FastAPI() App.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) @App.get("/") def HealthCheck(): return {"status": "Online", "platform": "Hugging Face Spaces"} # --- INGEST ENDPOINT --- @App.post("/ingest") @App.post("/api/ingest") async def TriggerIngest(): print("--- INGESTION TRIGGERED BY API ---") try: # This actually runs the code inside ingestion.py IngestDocuments() return {"status": "Success", "message": "Ingestion process finished. Embeddings loaded."} except Exception as e: print(f"INGESTION FAILED: {e}") return {"status": "Error", "message": str(e)} # --- CHAT ENDPOINT --- @App.post("/chat") @App.post("/api/chat") async def ChatRoute(request: Request): try: data = await request.json() except: raise HTTPException(status_code=400, detail="Invalid JSON") user_text = data.get("message") or data.get("Msg") or data.get("query") or data.get("question") if not user_text: raise HTTPException(status_code=422, detail="No message found.") return GetRagResponse(user_text) # --- EXTRACT ENDPOINT --- @App.post("/extract") @App.post("/api/extract") async def ExtractRoute(request: Request): try: data = await request.json() except: raise HTTPException(status_code=400, detail="Invalid JSON") user_text = data.get("message") or data.get("Cmd") or data.get("instruction") or data.get("query") if not user_text: raise HTTPException(status_code=422, detail="No command found.") return ExtractStructure(user_text) if __name__ == "__main__": # PORT TO 7860 (REQUIRED FOR HUGGING FACE DOCKER) uvicorn.run(App, host="0.0.0.0", port=7860)