Voice Support Loop (Container Edition)

Voice AI Tools

A container bundle for a self-hosted voice customer support loop: speech to text (faster-whisper), matching against a YAML knowledge base, and speech synthesis (Kokoro) strung into one loop; a web interface is included (microphone recording, audio file upload and text synthesis as three entry points) along with a Traditional Chinese quickstart, and questions the knowledge base does not match can optionally be answered by connecting an OpenAI-compatible endpoint.

SubscriptionUS$49 per month
Last run2026-11-02
In practice
Readiness5 / 5
What you need
Few changes needed3 / 5

Who it is for

Teams and contractors building a voice customer support or voice assistant prototype: people who want a starting point where transcribe, match against a knowledge base and synthesise speech are already strung into one loop that can be self-hosted on their own machine; the knowledge base is maintained as YAML, and an LLM can be connected when more intelligence is wanted.

How to start

$ sh scripts/quickstart/init-env.sh
$ docker compose up -d --wait

Browse the files

Files in the product repository at the pinned commit. A few house files are left out of the zip.

File overview161 paths
▸configuration5
grafana/
loki.yaml
opentelemetry-collector.yaml
prometheus.yaml
tempo.yaml
▸docs16
CNAME
api.md
configuration.md
index.md
installation.md
openapi.json
troubleshooting.md
usage/
▸examples3
javascript/
youtube/
▸packages5
speaches-cli/
▸quickstart4
agent/
▸realtime-console5
dist/
▸scripts5
create_kokoro_v1_onnx_model_repos.py
create_piper_model_repos.py
performance_benchmark.py
quickstart/
realtime_transcription_client.py
▸src59
speaches/
▸tests19
__init__.py
api_chat_test.py
api_model_test.py
api_timestamp_granularities_test.py
auth_test.py
conftest.py
diarization_test.py
model_manager_test.py
openai_timestamp_granularities_test.py
openai_transcription_test.py
…
▫ATTRIBUTION.md
▫CLAUDE.md
▫Dockerfile
▫LICENSE
▫LICENSE-99LL.md
▫PRODUCT.md
▫QUICKSTART.md
▫README.md
▫SECURITY.md
▫Taskfile.yaml
▫audio.wav
▫compose.cpu.yaml
▫compose.cuda-cdi.yaml
▫compose.cuda.yaml
▫compose.observability.yaml
▫compose.upstream.yaml
▫compose.yaml
▫contributing.md
▫delivery-manifest.txt
▫flake.lock
▫flake.nix
▫mkdocs.yml
▫model_aliases.json
▫pyproject.toml
▫pyrefly.toml
▫renovate.json5
▫ruff.toml
▫uv.lock
▫Config and hidden files 12

Latest passing run

Clone → Checkout → Toolchain → Build images → Voice loop

Pre-purchase Disclosure

What you are buying

A containerised self-hosted voice customer support loop: it turns an incoming call’s speech into text, matches it against a YAML knowledge base, and replies with synthesised speech; a web interface is included, with a microphone, an audio file upload and a text synthesis entry point.

Derived from speaches, an MIT-licensed open-source speech engine (speech recognition by faster-whisper, speech synthesis by Kokoro); the customer support loop service, the knowledge base, the web interface, the compose orchestration and the Traditional Chinese documentation are ours. Delivery is a frozen snapshot: one zip file, taken from the product repository at revision fa7cc1a.

Known limitations

  • No TLS: it listens on port 8080 over plain HTTP by default, and serving it publicly needs your own reverse proxy and certificate
  • Microphone recording in the browser is limited to localhost or HTTPS (a browser rule); the audio upload and text synthesis entry points are unaffected
  • With no LLM connected, a question the knowledge base does not match gets a fixed “transferring you to a person” reply; having an LLM answer needs your own OpenAI-compatible endpoint and key
  • The knowledge base is copied into the image at build time, so changing the file needs a rebuild to take effect; the speech model cache is wiped by down -v
  • The first start fetches over the network: it pulls the engine image, reaches PyPI to build the agent image, and downloads the speech models from Hugging Face
  • Pinned to the delivered snapshot; it does not follow upstream.

The liability cap, the scope of what is promised and the statutory floor are governed by the Terms of Service.

Vetting record

Everything below was checked against the pinned commit 993994f. Every verdict carries its full reasoning, an evidence link and the checker; failures are published, not hidden — do not take our word for it, verify it yourself.

5 PASS1 WARN0 FAIL

Source ReviewPASS

The execution surface of the delivery was reviewed item by item: the files we built were reviewed line by line (the three compose services, the agent/app.py customer support loop, the knowledge base, the web interface and init-env.sh) — the agent has only two outbound connections, the speech engine inside the same compose network, and the LLM endpoint, which is only used after the buyer has filled in a key of their own (with the key left as PLACEHOLDER it is never called at all); audio ids are restricted by a regular expression to 32 hexadecimal digits plus an extension, to prevent path traversal. Upstream's Python source code was not read file by file; the basis is container isolation (the engine exposes no port outwards and only the agent opens one) and the fact that it works without any credentials.

Evidence ↗Checked in 2026Checked by claude-code build-product session B
Script SafetyPASS

The scripts executed on the buyer's delivery path were examined one by one: init-env.sh is ours (reviewed line by line, it writes a single .env and performs no network action); the engine is not built locally but taken directly from upstream's official CPU image pinned by digest (sha256:21e3df06…, multi-architecture amd64 / arm64); the model-init service only sends two POSTs to the engine's own API to download the models; the agent image is built from python:3.12-slim, and pip installs five packages at pinned versions (fastapi, uvicorn, httpx, pyyaml, python-multipart), with nothing of the curl-piped-into-a-shell kind. Upstream's Taskfile and flake.nix are for upstream's own development and are not on the delivery path.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-013-voiceai-support-loop/blob/839701c2e37a7f0fc940966501971d93d67e2d7a/quickstart/agent/DockerfileChecked in 2026Checked by claude-code build-product session B
RecencyPASS

At the time of vetting (2026) upstream was not archived; the pinned commit 993994f was the master HEAD on the day the product repository was opened, and this product is frozen and does not follow upstream.

Evidence ↗Checked in 2026Checked by claude-code build-product session B
LicensePASS

SPDX:LicenseRef-99LL-Product

Upstream's LICENSE was checked word for word (the evidence link points at the file itself at the pinned commit): the standard MIT text, Copyright (c) 2024 Fedir Zadniprovskyi — commercial use, modification, derivative works, redistribution and sale are all permitted, and the obligation is to retain the copyright notice and the full licence text (LICENSE and ATTRIBUTION.md are delivered with the zip). This is not determined by reading GitHub's licence field. For the product as a whole, the 99LL product licence template is attached: upstream's LICENSE is kept verbatim and LICENSE-99LL.md is added as the sale and liability terms for the part we built, with spdx recorded as LicenseRef-99LL-Product.

Evidence ↗Checked in 2026Checked by claude-code build-product session B
Dependency LicensesPASS

Upstream's Python dependencies are declared in pyproject.toml and uv.lock, and the five packages of our agent are installed at pinned versions inside its Dockerfile — all of them fetched by the buyer from PyPI at build time. The runtime components of the speech engine are packaged inside upstream's official image (pinned by digest) and pulled by the buyer from ghcr, so the distribution obligation rests with the publisher of that image.

Evidence ↗Checked in 2026Checked by claude-code build-product session B
Weights / Data LicenseWARN

This product distributes no model weights with the zip — the two default models (Systran/faster-whisper-tiny and speaches-ai/Kokoro-82M-v1.0-ONNX-int8) are downloaded by the buyer from Hugging Face at start-up, and the licence is established directly between the buyer and the model publisher (the original Whisper model is MIT and Kokoro-82M is Apache-2.0, as recorded on their respective Hugging Face pages). The licence status is flagged as uncertain, and the reason is written out honestly: we did not open the licence files of those two repositories and check them word for word one by one (a different standard from the check on upstream's LICENSE), and the buyer is free to swap in any model, in which case the licence is the buyer's own responsibility.

Evidence ↗Checked in 2026Checked by claude-code build-product session B
HEALTH VERIFIED

Last verified passing: 2026-11-02

Subscribe for everything
US$49/ monthwas US$99

A subscription unlocks the whole catalogue; you do not buy this one separately.See what is included

Sign in with Google first; if you are signed out you will be sent to the sign-in page. Your subscription is billed to that same email address.

Already subscribed? This downloads straight away. Otherwise you are sent to the pricing page, or to sign in first.