Skip to content

v1.5.0 — Standalone engine-hardening; drop Redis self-registration

Choose a tag to compare

@fakehec fakehec released this 25 Sep 07:19
· 2 commits to main since this release

Engine-hardening sweep. The server is now standalone — one process, one
VoxCPM2 model, an OpenAI-compatible API and a /health. Run one, or several
behind any load balancer. Same engine (nano-vllm-voxcpm) and model
(openbmb/VoxCPM2) as 1.4.x.

Added

  • Engine circuit breaker (ENGINE_FAIL_THRESHOLD): consecutive 5xx mark the
    node not-ready so /health returns 503 instead of serving from a dead engine;
    4xx never trip it; a later success closes it.
  • In-process recovery self-probe (ENGINE_PROBE_SECONDS) so a transient
    failure self-heals without a manual restart. Zero cost while healthy.
  • Correct HTTP status codes: oversized text → 413, GPU OOM → 503 (busy, not
    broken — and it does not trip the breaker), malformed JSON → 400. Tracebacks
    stripped from error bodies.
  • Voice preload + lazy load + LRU cap (VOICE_PRELOAD, VOICE_CACHE_MAX).
  • Reference-sample trimming (REF_MAX_SECONDS) so a long cloning upload
    can't OOM the node.
  • Text normalization before synthesis (line breaks, unterminated sentences).
  • On-disk cache sweep (CACHE_SWEEP_SECONDS) so CACHE_TTL_MINUTES is a
    real retention bound.
  • Response integrity headers: X-Audio-Duration, X-Audio-SHA256,
    Content-Digest (RFC 9530).
  • Optional offline mode (UTTERA_OFFLINE=1), OFF by default.

Changed

  • Cache key MD5 → SHA-256.
  • CACHE_TTL_MINUTES default 10080 (7 days) → 60 (1 hour): synthesized
    audio may contain personal data; short retention is the privacy-friendly
    default.

Removed

  • The optional Redis self-registration loop and its env vars. Use a reverse
    proxy or load balancer for discovery.

Validated end-to-end on an RTX 5090 (Blackwell): synthesis, cache
MISS/HIT/BYPASS, lazy voice load, adhoc cloning, streaming, 413/422/400,
circuit breaker + recovery probe.