ICEFROG96's picture
Deploy Hugging Face Space
0ed4a65
Raw
History Blame Contribute Delete
2.21 kB
import sys
import traceback
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=[
"http://localhost:5173",
"http://127.0.0.1:5173",
"http://localhost:4173",
"http://127.0.0.1:4173",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
chatbot_ask = None
chatbot_import_error = None
class ChatQuery(BaseModel):
question: str
def get_chatbot_ask():
global chatbot_ask, chatbot_import_error
if chatbot_ask is not None:
return chatbot_ask
if chatbot_import_error is not None:
raise chatbot_import_error
try:
from Chatbot import ask as imported_chatbot_ask
chatbot_ask = imported_chatbot_ask
print("Chatbot module loaded successfully.", file=sys.stderr)
return chatbot_ask
except Exception as e:
chatbot_import_error = e
print(f"Chatbot module unavailable: {e}", file=sys.stderr)
traceback.print_exc()
raise
@app.get("/")
def root():
return {
"message": "Alzheimer's Chatbot API",
"chatbot_ready": chatbot_ask is not None and chatbot_import_error is None,
"chatbot_import_error": str(chatbot_import_error) if chatbot_import_error else None,
}
@app.get("/health")
def health():
return {
"status": "ok",
"chatbot_ready": chatbot_ask is not None and chatbot_import_error is None,
"chatbot_import_error": str(chatbot_import_error) if chatbot_import_error else None,
}
@app.post("/chatbot")
def chatbot(data: ChatQuery):
"""
Ask a question about Alzheimer's disease.
Uses a RAG pipeline over curated PDF documents.
"""
try:
chatbot_handler = get_chatbot_ask()
except Exception:
detail = "Chatbot service is unavailable because its ML dependencies failed to load."
if chatbot_import_error is not None:
detail = f"{detail} Root cause: {chatbot_import_error}"
raise HTTPException(status_code=503, detail=detail)
return chatbot_handler(data.question)