mirror of
https://github.com/hanzoai/speech.git
synced 2026-10-04 07:37:19 +00:00
da3529e4a9fb24bd3ad354a56ee9cda98e47839d
This lane ended at "push". cd.hanzo.ai does not watch the registry — it watches universe's values files — so an image that is built and never pinned is published and unreachable. 0.1.1 sat built while the fleet served 0.1.0 for exactly that reason, and the only thing that moved it was a human noticing. pin.sh is the fleet's one way to do it, and it resolves tag AND digest from a single registry lookup. Two lookups at two moments drift, and drift here does not fail — it succeeds at doing nothing: a reference carrying both resolves by DIGEST, so a pod reports the new tag and runs the old bytes. 0.1.2 carries no service change. The version moves because the guard above refuses to rebuild a published tag, and because this is the release that proves the new step: it is the first speech image whose pin is moved by the build rather than by hand. Co-authored-by: Hanzo Dev <[email protected]>
speech
CPU speech for the Hanzo platform: STT (faster-whisper, CTranslate2 int8) and TTS (kokoro-onnx, 82M) behind one OpenAI-shaped surface.
Routes
POST /v1/audio/transcriptions— multipartfile+model(+language,response_format) →{"text": …}POST /v1/audio/speech—{model, input, voice, response_format}→ audio bytes (mp3 default, wav native)GET /v1/models,GET /healthz
Trust model
No auth of its own, in-cluster only. api.hanzo.ai fronts it through the ai
plane, which authenticates and meters every caller — a provider row pointing at
http://speech.hanzo.svc/v1 is the whole integration. Weights bake into the
image at build; the container boots without the network.
Run
uv sync && uv run uvicorn main:app --port 8000
Phase 2 is /v1/realtime: websocket full-duplex (silero-vad segmentation,
partial transcripts, kokoro frames, barge-in) plus camera-frame relay into the
multimodal models.
Description
CPU speech service: STT (faster-whisper) + TTS (kokoro) behind api.hanzo.ai /v1/audio
361 KiB
Languages
Go
98.8%
Dockerfile
1.2%