| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from fastapi import APIRouter, HTTPException, UploadFile, File, Form
- from app.services.qa import get_answer, ask_rag
- from app.schemas.chat import ChatRequest, AskRequest, ChatResponse, AskResponse
- import time
- from datetime import datetime
- 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 = Form("default_session"), question: str = Form(...), 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 AskResponse(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():
- current_time = datetime.utcnow().isoformat() + "Z" # UTC time with 'Z' suffix
- log_entry = {
- "timestamp": current_time,
- "level": "INFO",
- "message": "Health check successful",
- "status": "healthy",
- "service": "chat-api",
- "version": "1.0.0", # Example version, adjust as needed
- }
- return log_entry
|