36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
"""Liveness / readiness endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from ocr_sprint import __version__
|
|
from ocr_sprint.pipeline import ocr as _ocr
|
|
from ocr_sprint.pipeline import table as _table
|
|
|
|
router = APIRouter(tags=["health"])
|
|
|
|
|
|
@router.get("/health")
|
|
async def health() -> dict[str, str]:
|
|
"""Lightweight liveness check — does NOT touch the OCR engine."""
|
|
return {"status": "ok", "version": __version__}
|
|
|
|
|
|
@router.get("/health/ready")
|
|
async def readiness() -> JSONResponse:
|
|
"""Readiness check — returns 200 when OCR models are loaded, 503 if still warming up."""
|
|
ocr_ready = _ocr._instance is not None
|
|
table_ready = _table._instance is not None
|
|
ready = ocr_ready and table_ready
|
|
payload = {
|
|
"status": "ready" if ready else "warming_up",
|
|
"version": __version__,
|
|
"models": {
|
|
"paddleocr": "ready" if ocr_ready else "loading",
|
|
"pp_structure": "ready" if table_ready else "loading",
|
|
},
|
|
}
|
|
return JSONResponse(content=payload, status_code=200 if ready else 503)
|