Spaces:
Running
Running
| from fastapi import FastAPI, HTTPException | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel | |
| from typing import Optional | |
| import sys | |
| import os | |
| import uuid | |
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) | |
| from rag_chain_pg import ask_pg, clear_history_pg | |
| app = FastAPI(title="Chatbot Lịch Sử Việt Nam API") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| print("Đang khởi tạo chatbot...") | |
| print("✅ Chatbot đã sẵn sàng!") | |
| class ChatRequest(BaseModel): | |
| message: str | |
| session_id: Optional[str] = None | |
| class ChatResponse(BaseModel): | |
| answer: str | |
| sources: list[str] | |
| session_id: str | |
| async def root(): | |
| return {"status": "ok", "message": "Chatbot Lịch Sử API đang hoạt động!"} | |
| async def chat(request: ChatRequest): | |
| if not request.message.strip(): | |
| raise HTTPException(status_code=400, detail="Câu hỏi không được để trống") | |
| session_id = request.session_id or str(uuid.uuid4()) | |
| result = ask_pg(request.message, session_id=session_id) | |
| return ChatResponse( | |
| answer=result['answer'], | |
| sources=result.get('sources', []), | |
| session_id=session_id | |
| ) | |
| async def clear_session(session_id: str = "default"): | |
| clear_history_pg(session_id) | |
| return {"message": f"Đã xóa lịch sử session: {session_id}"} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| print("\n🚀 Khởi động API server...") | |
| print("📝 API docs: http://localhost:8000/docs") | |
| uvicorn.run(app, host="0.0.0.0", port=8000, reload=True) |