Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| from app.llm.gemini import GeminiProvider | |
| from app.rag.retriever import retrieve_documents | |
| from typing import List, Optional | |
| router = APIRouter() | |
| llm_provider = GeminiProvider() | |
| class ChatRequest(BaseModel): | |
| message: str | |
| history: Optional[List[dict]] = [] | |
| user_role: str = "general" | |
| class ChatResponse(BaseModel): | |
| reply: str | |
| async def chat(request: ChatRequest): | |
| try: | |
| search_query = f"Trả lời cho đối tượng {request.user_role}: {request.message}" | |
| context_docs = retrieve_documents(search_query) # Tìm bằng query đã mở rộng | |
| context_text = "\n\n".join(context_docs) if context_docs else "Không có tài liệu cụ thể." | |
| reply_text = llm_provider.generate_response( | |
| context=context_text, | |
| question=request.message, | |
| history=request.history, | |
| user_role=request.user_role | |
| ) | |
| return ChatResponse(reply=reply_text) | |
| except Exception as e: | |
| print(f"Error processing chat: {str(e)}") | |
| raise HTTPException(status_code=500, detail="Lỗi hệ thống khi xử lý tin nhắn") |