"""STT-server — API FastAPI pour les clients STT. Endpoints : GET /healthz → état du service POST /v1/ask {text} → {reply} (requête AI, orchestrée vers LiteLLM) """ from __future__ import annotations import httpx from fastapi import FastAPI, HTTPException from pydantic import BaseModel from stt_server import __version__ from stt_server.brain import ask as brain_ask app = FastAPI(title="STT-server", version=__version__) class AskRequest(BaseModel): text: str class AskReply(BaseModel): reply: str @app.get("/healthz") async def healthz() -> dict: return {"status": "ok", "version": __version__} @app.post("/v1/ask", response_model=AskReply) async def v1_ask(req: AskRequest) -> AskReply: text = req.text.strip() if not text: raise HTTPException(status_code=400, detail="text vide") try: reply = await brain_ask(text) except httpx.HTTPError as e: raise HTTPException(status_code=502, detail=f"upstream LiteLLM : {e}") from e return AskReply(reply=reply) def run() -> None: """Entrypoint `stt-server` (dev local). En prod : uvicorn via le conteneur.""" import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) # noqa: S104 — service interne au cluster