Spaces:
No application file
No application file
from fastapi import FastAPI, HTTPException, status | |
from fastapi.middleware.cors import CORSMiddleware | |
from fastapi.responses import JSONResponse | |
from pydantic import BaseModel | |
from .rag_core import get_response | |
from datetime import datetime | |
import uvicorn | |
app = FastAPI( | |
title="Artisan Support Chatbot", | |
description="REST API for the Artisan Support Chatbot", | |
version="1.0.0", | |
) | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
class ChatMessage(BaseModel): | |
message: str | |
session_id: str = "default_session" | |
class ChatResponse(BaseModel): | |
response: str | |
async def chat(message: ChatMessage): | |
try: | |
query = message.message | |
session_id = message.session_id | |
response = get_response(query, session_id) | |
return ChatResponse(response=response) | |
except Exception as e: | |
raise HTTPException( | |
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) | |
) | |
async def health_check(): | |
""" | |
Health check endpoint | |
""" | |
return {"status": "healthy", "timestamp": datetime.now()} | |
# Error handlers | |
async def http_exception_handler(request, exc): | |
return JSONResponse( | |
status_code=exc.status_code, | |
content={"detail": exc.detail, "code": f"ERROR_{exc.status_code}"}, | |
) | |
if __name__ == "__main__": | |
uvicorn.run("src.app:app", host="0.0.0.0", port=8000, reload=True) | |