ai_chat_api / routers /text_router.py
Soumik Bose
Add local wheel with LFS
a2e3298
from fastapi import APIRouter, HTTPException
from fastapi.responses import StreamingResponse, JSONResponse
import logging
from models.schemas import ChatRequest, ErrorResponse
from services.text_service import text_service
logger = logging.getLogger("text-router")
router = APIRouter(prefix="/v1/text", tags=["Text Generation"])
@router.post("/chat/completions")
async def create_chat_completion(request: ChatRequest):
"""
Create a chat completion using the text model
Supports:
- Standard completions
- Streaming responses
- JSON extraction mode
"""
if not text_service.is_ready():
raise HTTPException(status_code=503, detail="Text model not ready")
try:
messages = [msg.model_dump() for msg in request.messages]
result = await text_service.generate_completion(
messages=messages,
temperature=request.temperature,
max_tokens=request.max_tokens,
stream=request.stream,
return_json=request.returnJson
)
if request.stream:
return StreamingResponse(result, media_type="text/event-stream")
return JSONResponse(content=result)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
logger.error(f"Chat completion error: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/health")
async def text_health():
"""Check text model health status"""
return {
"status": "healthy" if text_service.is_ready() else "initializing",
"model_ready": text_service.is_ready()
}