zeekayandHanzo Dev 7dc4714dcc ci: read the pin token at the path KMS serves
The Ship it step asked for /v1/kms/orgs/<org>/secrets/deploy/UNIVERSE_PIN_TOKEN
and read .secret.value. KMS serves /v1/kms/secrets/deploy/... and answers .value:
the org is carried by the caller credential, not by the path. Measured, both
hosts agree — the served path answers 403 unauthenticated, the /orgs/ form 404s.

So 0.1.2 built, pushed, and then died at the pin with curl exit 22 — the image
is in the registry and the fleet still serves 0.1.1, which is the exact failure
the step was added to prevent, reproduced by the step itself.

0.1.3 carries no service change; the version moves because the guard refuses to
rebuild a published tag, and because a pin step is only proven by a release that
pins itself.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-07 21:02:51 -07:00

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 — multipart file + 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.

S
Description
CPU speech service: STT (faster-whisper) + TTS (kokoro) behind api.hanzo.ai /v1/audio
Readme Apache-2.0
361 KiB
Languages
Go 98.8%
Dockerfile 1.2%