|
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() |
|
|
|
|
|
|
|
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_headers=["*"], |
|
) |
|
|
|
|
|
class QueryRequest(BaseModel): |
|
query: str |
|
|
|
|
|
@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"} |
|
|
|
|
|
|