from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel from functools import lru_cache from clients.groq_client import GroqClient app = FastAPI() # ✅ Allowed origins origins = [ "http://localhost:4200", "https://mosesmangabo.vercel.app", "https://chatbot-bridge-service.onrender.com" "https://eng-musa-chatbotbridge.hf.space" ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], # allow all HTTP methods (GET, POST, etc.) allow_headers=["*"], # allow all headers ) class QueryRequest(BaseModel): query: str # Lazy singleton for GroqClient @lru_cache(maxsize=1) def get_groq_client(): return GroqClient() @app.post("/chat") async def chat_endpoint(request: QueryRequest): try: groq_client = get_groq_client() response = groq_client.ask(request.query) if response.startswith("Error while"): return {"status_code": 500, "response": response, "next_questions": []} return { "status_code": 200, "response": response, "next_questions": groq_client.get_next_questions(), } except Exception as e: return {"status_code": 500, "response": f"Internal error: {e}", "next_questions": []} @app.get("/") def healthcheck(): return {"status": "ok"} #python -m uvicorn main:app --reload