| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- from fastapi import APIRouter, HTTPException, UploadFile, File, Query
- from app.services.qa import get_answer, ask_rag
- from app.schemas.chat import ChatRequest, ChatResponse
- import time
- router = APIRouter()
- @router.post("/chat/")
- async def chat(request: ChatRequest, session_id: str = "default_session"):
- start_time = time.time()
-
- try:
- answer = get_answer(session_id, request.message)
- latency_ms = int((time.time() - start_time) * 1000)
- return ChatResponse(answer=answer, latency_ms=latency_ms)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Ollama call failed with error: {str(e)}")
- @router.post("/ask/")
- async def ask(session_id: str = Query("default_session"), question: str = Query(...), file: UploadFile = File(None)):
- start_time = time.time()
-
- try:
- file_content = None
- file_name = None
- if file:
- file_content = await file.read()
- file_name = file.filename
- if not file_name.endswith(('.txt', '.md')):
- raise HTTPException(status_code=400, detail="Only .txt or .md files are supported")
-
- result = ask_rag(session_id, question, file_content, file_name)
- latency_ms = int((time.time() - start_time) * 1000)
- return {"answer": result["answer"], "sources": result["sources"], "latency_ms": latency_ms}
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Ollama call failed with error: {str(e)}")
- @router.get("/health")
- async def health():
- return {"status": "healthy"}
|