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" log_entry = { "timestamp": current_time, "level": "INFO", "message": "Health check successful", "status": "healthy", "service": "chat-api", "version": "1.0.0", "environment": os.getenv("ENVIRONMENT", "development") } return log_entry