Skip to main content
Edge voice workflows use three layers of dependencies. Each layer must be satisfied or compile/sync fails with an actionable error (for example: ”… is not installed on the compile server”).
LayerWherePurpose
1. Compile serverDjango / cyberwave-backendValidates imports and (for Wake Word) downloads weights before shipping wf_*.py
2. Edge worker imagecyberwaveos/edge-ml-workerRuns generated Python; install matching cyberwave[...] extras
3. Catalog / emittersedge-syncmodel_requirementsTells operators which one SDK extra to install per node or STT model
Do not install ml-all on Raspberry Pi unless you need every vision + STT + VAD runtime in one image. Catalog entries declare one minimal extra each (ml-stt, ml-stt-faster, …). Use ml-all only for CI/dev fat images.

Workflow nodes

NodeCompile server (base.txt)Edge SDK extramodel_requirements
Audio Track— (no ML import)zenoh on worker; microphone on capture host
Audio Assistantsilero-vad (+ torch transitive)ml-audioedge_package: ml-audio
Wake Word Engineopenwakeword, onnxruntimeml-wakewordedge_package: ml-wakeword
Call Model — STTpywhispercpp and/or faster-whisperFrom catalog metadataPer selected ML model
Fuzzy Matcherrapidfuzzfuzzy-matchedge_package: fuzzy-match
Twinhttpx (base)Base cyberwave
Virtual Controllerpaho-mqtt (base)Base cyberwave
Compile checks mirror the Wake Word pattern: WorkflowCodeAssembler calls provision_*_for_compile() before emitting edge worker source.

SDK extras (cyberwave-python)

Defined in cyberwave-sdks/cyberwave-python/pyproject.toml. Install on edge with pip install 'cyberwave[<extra>]' or pip install 'cyberwave-edge-core[<extra>]' (thin passthrough).
ExtraPackagesUsed by
ml-audiosilero-vadAudio Assistant
ml-wakewordopenwakeword, onnxruntimeWake Word Engine
ml-sttpywhispercppCall Model — Whisper.cpp catalog models
ml-stt-fasterfaster-whisperCall Model — Faster Whisper catalog models
fuzzy-matchrapidfuzzFuzzy Matcher
zenoheclipse-zenohAudio Track worker hook
microphonesounddevice, av, …Host mic capture (driver side)
ml-allml-all-vision + ml-all-audio (includes torchaudio)CI/dev only
ml-all-audioopenwakeword, onnxruntime, pywhispercpp, faster-whisper, silero-vad, torchaudio, rapidfuzzFat audio image (avoid on Pi)
ml-all-visionultralytics, onnxruntime, opencv-python, tflite-runtimeVision-only fat image

Catalog STT models (edge_package)

Each public STT catalog entry sets metadata.edge_package to one extra (never ml-all).
Catalog modeledge_runtimeedge_packageWeight path (edge_model_path)
Whisper Tiny EN Q5_1whisper_cppml-sttmodels/whisper/ggml-tiny.en-q5_1.bin
Whisper Base EN Q5_1whisper_cppml-sttmodels/whisper/ggml-base.en-q5_1.bin
Whisper Small EN Q5_1whisper_cppml-sttmodels/whisper/ggml-small.en-q5_1.bin
Whisper Tiny Multilingual Q5_1whisper_cppml-sttmodels/whisper/ggml-tiny-q5_1.bin
Whisper Base Multilingual Q5_1whisper_cppml-sttmodels/whisper/ggml-base-q5_1.bin
Faster Whisper Tiny ENfaster_whisperml-stt-fastermodels/whisper/faster-whisper-tiny.en
Faster Whisper Base ENfaster_whisperml-stt-fastermodels/whisper/faster-whisper-base.en
Faster Whisper Small ENfaster_whisperml-stt-fastermodels/whisper/faster-whisper-small.en
Faster Whisper also sets faster_whisper_model_id (tiny.en, base.en, small.en) for CTranslate2. Hybrid models may fall back to the cloud whisper node when not running on edge. See Call Model STT on edge.

Compile server setup (Django)

Packages are listed in cyberwave-backend/requirements/base.txt:
openwakeword>=0.6.0
onnxruntime>=1.16.0
rapidfuzz>=3.0.0
silero-vad>=6.0
pywhispercpp==1.4.1
faster-whisper>=1.1.1
After changing base.txt, rebuild the Django Docker image:
cd cyberwave-backend
docker compose -f local.yml build django
docker compose -f local.yml up -d django
Without rebuild, compile fails with errors like:
  • “Wake Word Engine but openwakeword is not installed on the compile server”
  • “Fuzzy Matcher but rapidfuzz is not installed …”
  • “Audio Assistant but silero-vad (or torch) is not installed …”
  • “whisper.cpp but pywhispercpp is not installed …”
  • “faster-whisper is not installed …”

Edge worker image

Default cyberwaveos/edge-ml-worker installs a fat extra set for dev: ml,ml-onnx,ml-stt,ml-stt-faster,ml-audio,fuzzy-match,zenoh,image,schedule plus openwakeword via --no-deps (Python 3.12). For Raspberry Pi, rebuild a slim image with only what your workflow uses:
# whisper.cpp Tiny + VAD + wake word + fuzzy (no faster-whisper, no YOLO)
docker build \
  --build-arg CYBERWAVE_SDK_EXTRAS=ml-stt,ml-audio,fuzzy-match,zenoh,schedule \
  -f cyberwave-edge-runtime/runtime-services/workers/edge-ml-worker/Dockerfile .
# Faster Whisper STT only
docker build \
  --build-arg CYBERWAVE_SDK_EXTRAS=ml-stt-faster,ml-audio,zenoh,schedule \
  -f cyberwave-edge-runtime/runtime-services/workers/edge-ml-worker/Dockerfile .

Typical voice pipeline (extras needed)

audio_track          → zenoh (+ microphone on capture host)
  → audio_assistant  → ml-audio
  → wake_word_engine → ml-wakeword
  → call_model (STT) → ml-stt OR ml-stt-faster (per catalog model)
  → fuzzy_matcher    → fuzzy-match
twin                 → base cyberwave
virtual_controller   → base cyberwave
Install the union of extras used in your graph — not ml-all.

Audio in Workflows

PCM format and pipeline overview

Call Model STT

Whisper.cpp vs Faster Whisper on edge

Wake Word compile

Compile-time model download

Edge model cache

Weight download on device