nemotron-unified-rust-wyoming
Docker app from Marco T's Nemotron Unified's Repository
Overview
Readme
View on GitHubNemotron Unified Rust Wyoming
Deutscher Speech-to-Text-Server für Home Assistant und Unraid auf linux/amd64 mit CPU/AVX2. Rust verarbeitet Wyoming-TCP, Sitzungen und Audiolimits. Die sichere sherpa-onnx-Anbindung lädt NVIDIA Nemotron Labs Unified ASR 0.6B als geprüften L37-Export mit INT8-Encoder über ONNX Runtime. Python wird nur für Entwicklung und Tests benötigt.
Entwicklungsstand, kein offizieller v1.0.0-Release. Repository-Ziel: https://github.com/marco-taylor/nemotron-unified-rust-wyoming. Die öffentliche Historie ist bereinigt; Veröffentlichungs- und Imageprüfungen stehen in docs/PHASE6.md. Die Cargo-Paketversion 1.0.0 bezeichnet noch keinen veröffentlichten Release.
Funktionen und Grenzen
Der Server lädt das Modell einmal und verarbeitet wiederholte Wyoming-Anfragen. Unterstützt werden describe/info, transcribe, audio-start, audio-chunk, audio-stop, finale transcript-Antworten und gerahmte Fehler. Audio: PCM-S16LE, 16 kHz, Mono. Begrenzte Verbindungen, Framegröße, Audiodauer und Zeitlimits schützen den Dienst. Native Inferenz wird serialisiert. Healthcheck prüft den laufenden Wyoming-Dienst; SIGTERM/SIGINT beenden ihn geordnet.
Nicht implementiert: internes Endpointing/VAD, Wyoming-Teiltranskripte, alternative L37-Kontexte, GPU-Provider, Resampling, automatische Sprachwahl, Hotwords, mDNS sowie Wyoming-TLS/Authentifizierung. Home Assistant muss das Sprachende mit audio-stop melden. INFERENCE_CHUNK_MS ändert die Audiozuführung, nicht den Modellkontext oder die algorithmische Latenz von 1,12 Sekunden. Nur im vertrauenswürdigen LAN verwenden.
Modelle bereitstellen
Das Image und das Git-Repository enthalten keine Modellgewichte. Ein zusammengehöriger L37-Runtime-Satz benötigt unter dem Host-Modellverzeichnis:
models/L37-runtime/encoder.int8.onnxmodels/L37-runtime/decoder.onnxmodels/L37-runtime/joiner.onnxmodels/L37-runtime/tokens.txt
Diese Pfade sind Beispiele relativ zum Checkout. Den eigenen Hostpfad read-only nach /models mounten; Lizenz und Herkunft bei den Gewichten aufbewahren. Vorhandene Gewichte weiterverwenden. Beschaffung, SHA256-Werte und reproduzierbarer Export: docs/MODELS.md. Kein automatischer Download oder Export beim Serverstart. Der geprüfte Runtime-Satz umfasst 726.885.887 Byte ohne Lizenzdateien.
Docker installieren
Voraussetzungen: Linux amd64, AVX2, Docker, vorbereitete Modelle und ungefähr 4 GiB RAM für den Container. Build und Export benötigen mehr Ressourcen.
Für reguläre Installationen folgt latest dem erfolgreich geprüften main-Build; dev bleibt als kompatibler Alias erhalten:
docker pull ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest
latest und dev wurden erfolgreich anonym gepullt und haben denselben geprüften linux/amd64-Digest; Ergebnisse: docs/LATEST.md. Für reproduzierbare Installationen den veröffentlichten sha-COMMIT-Tag oder Digest verwenden. Lokal bauen und Modellvorprüfung ausführen:
docker build --platform linux/amd64 -t ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest .
docker run --rm --network none --read-only \
-v /ABSOLUTER/MODELLPFAD:/models:ro \
ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest check-model
Der Build führt Release-Kompilierung, Formatprüfung, Rust-/Protokolltests und Clippy mit -D warnings aus. check-model prüft Dateien/Metadaten; vollständiges Graphladen und Inferenz erfordern einen Serverstart.
Compose: ./.env.example nach ./.env kopieren, MODEL_DIR auf den vorhandenen absoluten Hostpfad setzen, freien HOST_PORT und PUBLISH_ADDRESS prüfen. IMAGE=ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latest für reguläre Installation und optionalen lokalen Build verwenden.
cp .env.example .env
docker compose config
docker compose pull
docker compose up -d --no-build
./docker-compose.yml enthält nur diesen Dienst. Bestehende Dienste werden durch die Anleitung nicht automatisch migriert. Für einen bewusst lokalen Build stattdessen docker compose build ausführen.
Unraid und Home Assistant
Unraid-Anleitung: docs/UNRAID.md. Die Vorlage config/unraid-template.xml bietet Bridge-Netz, read-only Modelle, standardmäßig Hostport 10310 → Containerport 10300 sowie alle 19 wirksamen Variablen mit deutschen Beschreibungen.
In Home Assistant: Einstellungen → Geräte & Dienste → Integration hinzufügen → Wyoming Protocol; LAN-IP des Unraid-Hosts und den veröffentlichten Hostport eintragen. In einer deutschen Assist-Testpipeline den STT-Dienst nemotron-unified-l37-int8 auswählen. Details und Abnahme: docs/HOME_ASSISTANT.md. Bestehende Pipelines bleiben manuell verwaltet.
Alle 19 wirksamen Variablen
Vollständige Wertebereiche, Defaults und Wirkung: docs/PHASE5_2.md und docs/CONFIGURATION.md; maschinenlesbar in config/variables.json. 17 Variablen verarbeitet Rust, 2 der Container-Entrypoint.
| Variablen | Standard |
|---|---|
PUID, PGID |
99, 100 |
WYOMING_HOST, WYOMING_PORT |
0.0.0.0, 10300 |
LANGUAGE, STT_DEVICE |
de, cpu |
MODEL_DIR |
/models im Container |
ENCODER_PATH, DECODER_PATH, JOINER_PATH, TOKENS_PATH |
leer → Standarddateien unter MODEL_DIR |
THREADS |
2 (zulässig: 1, 2, 4) |
MAX_AUDIO_SECONDS, MAX_AUDIO_CHUNK_BYTES |
120, 320000 |
MAX_CONNECTIONS, CLIENT_TIMEOUT_SECONDS |
8, 30 |
INFERENCE_CHUNK_MS |
20 |
LOG_LEVEL, LOG_TRANSCRIPTS |
info, false |
PUID/PGID wechseln vor Modellzugriff auf die konfigurierte Identität. Der Bootstrap benötigt ausschließlich SETUID/SETGID; der Server läuft ohne effektive Capabilities mit NoNewPrivs. Kein automatisches chown/chmod an Modellen. Alternativ mit passenden --user 99:100 und Variablen vollständig ohne Bootstrap-Capabilities starten. Fehlerhafte Werte werden mit Variablennamen abgewiesen. Optionale Modell-Einzelpfade dürfen leer sein.
IMAGE, HOST_PORT und PUBLISH_ADDRESS sind Compose-Hilfswerte. Compose verwendet MODEL_DIR als Host-Mountquelle und setzt im Container /models. SHERPA_ONNX_LIB_DIR und LD_LIBRARY_PATH sind technische Imagewerte, keine zusätzlichen Nutzer-Tuningoptionen.
Icons
| Icon | Zweck | GitHub-Dateipfad | Größe | Abmessungen |
|---|---|---|---|---|
| Low-Q | Einziger Standard für Unraid CA und Docker | assets/icons/nemotron-lowq.png | 82.756 Byte | 256 × 256 |
| HQ | Hochwertige Alternative, kein Unraid-Standard | assets/icons/nemotron-hq.png | 1.560.271 Byte | 1254 × 1254 |
Die XML-Vorlage und das Image-Label net.unraid.docker.icon verwenden ausschließlich Low-Q. Beide PNGs haben transparente Pixel und wurden unverändert kopiert. Low-Q erfüllt die Performancevorgaben ohne weitere Komprimierung. Die neuen Quelldateien icons/nemotron-stt-hq.png und icons/nemotron-stt-lowq.png bleiben lokal unverändert erhalten. Die neuen Grafiken zeigen kein erkennbares NVIDIA-Augenlogo oder NVIDIA-Wortlogo und keine ®-/™-Symbole. Die alten Bilder sind aus der öffentlichen Historie ausgeschlossen; die ursprüngliche Historie ist ausschließlich lokal gesichert. Öffentliche Raw-Links und Migration gespeicherter Unraid-Icon-URLs: docs/UNRAID.md. Beide Raw-Icons sind öffentlich erreichbar und wurden per SHA256 geprüft.
Entwicklung, Tests und Lizenzen
Bedienung: serve (Standard), healthcheck, check-model, --help, --version; Benchmarkdiagnose über benchmark. CLI-Overrides: --model DIR, --threads 1|2|4, --bind HOST:PORT. Auch überschriebene Umgebungswerte müssen gültig sein.
Tests und Belege: docs/TESTS.md, docs/PHASE5_1.md, docs/PHASE5_2.md und docs/PHASE6.md. CI-/GHCR-Ablauf: docs/RELEASE.md. Die kurze echte deutsche Referenzaufnahme prüft die technische Kette; allgemeine Befehlsqualität, Assist-/Satellite-Abnahme und Langzeitlast bleiben offen.
Eigener Code: ./LICENSE (MIT). sherpa-onnx: Apache-2.0; ONNX Runtime: MIT; NVIDIA-Modell: getrennt OpenMDW-1.1. Abhängigkeiten und Herkunft: ./THIRD_PARTY_NOTICES.md. Kein offizielles NVIDIA-Projekt und keine behauptete Unterstützung durch NVIDIA.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/marco-taylor/nemotron-unified-rust-wyoming:latestRuntime arguments
- Network
bridge- Privileged
- false
- Extra Params
--read-only --cap-drop=ALL --cap-add=SETUID --cap-add=SETGID --security-opt=no-new-privileges:true --memory=4g --cpus=4 --pids-limit=128 --stop-timeout=60 --tmpfs /tmp:size=16m,noexec,nosuid,nodev --log-opt max-size=10m --log-opt max-file=3
Template configuration
Freien LAN-Hostport wählen; Target an WYOMING_PORT anpassen, falls dieser geändert wird.
- Target
- 10300
- Default
- 10310
- Value
- 10310
Schreibgeschützter Modellmount; PUID/PGID (Standard 99:100) muss lesen können.
- Target
- /models
- Default
- /mnt/user/appdata/nemotron-unified-rust-wyoming/models/L37-runtime
- Value
- /mnt/user/appdata/nemotron-unified-rust-wyoming/models/L37-runtime
IPv4 oder IPv6 im Container; für Docker-Bridge 0.0.0.0 verwenden.
- Target
- WYOMING_HOST
- Default
- 0.0.0.0
- Value
- 0.0.0.0
1 bis 65535; Container-Portabbildung bei Änderung ebenfalls anpassen.
- Target
- WYOMING_PORT
- Default
- 10300
- Value
- 10300
Deutsch (de); andere Sprachen werden in diesem Server abgewiesen.
- Target
- LANGUAGE
- Default
- de
- Value
- de
Dieses Image unterstützt ausschließlich CPU; GPU/CUDA werden abgewiesen.
- Target
- STT_DEVICE
- Default
- cpu
- Value
- cpu
Basis für relative Modellpfade; muss zum schreibgeschützten Modellmount passen.
- Target
- MODEL_DIR
- Default
- /models
- Value
- /models
Leer: encoder.int8.onnx unter MODEL_DIR; sonst relativer oder absoluter Containerpfad.
- Target
- ENCODER_PATH
Leer: decoder.onnx unter MODEL_DIR; alle Dateien aus demselben Export verwenden.
- Target
- DECODER_PATH
Leer: joiner.onnx unter MODEL_DIR; relativer oder absoluter Containerpfad.
- Target
- JOINER_PATH
Leer: tokens.txt unter MODEL_DIR; passend zum exportierten Modell.
- Target
- TOKENS_PATH
1, 2 oder 4; für Intel N100 werden 2 empfohlen. Kein hartes Prozess-Threadlimit.
- Target
- THREADS
- Default
- 2
- Value
- 2
1 bis 120 Sekunden pro Anfrage; Überschreitung verwirft die Sitzung.
- Target
- MAX_AUDIO_SECONDS
- Default
- 120
- Value
- 120
Gerade Zahl von 640 bis 320000 Byte; Grenze vor der Payload-Allokation.
- Target
- MAX_AUDIO_CHUNK_BYTES
- Default
- 320000
- Value
- 320000
1 bis 32; begrenzt Sitzungen und Queue. Native Inferenz bleibt serialisiert.
- Target
- MAX_CONNECTIONS
- Default
- 8
- Value
- 8
1 bis 300 Sekunden; absolute Framefrist und Socket-Schreibtimeout.
- Target
- CLIENT_TIMEOUT_SECONDS
- Default
- 30
- Value
- 30
10 bis 560 ms; teilt empfangene Chunks maximal so groß auf. Ändert nicht L37-Kontext oder algorithmische Latenz.
- Target
- INFERENCE_CHUNK_MS
- Default
- 20
- Value
- 20
error, warn, info oder debug; Großschreibung erlaubt. Betrifft Rust-Logs, nicht native ORT-Fehler.
- Target
- LOG_LEVEL
- Default
- info
- Value
- info
true oder false; nur bei info/debug. Enthält möglicherweise persönliche Sprachinhalte.
- Target
- LOG_TRANSCRIPTS
- Default
- false
- Value
- false
Server-UID nach kurzem Bootstrap, 1 bis 2147483647 ohne führende Nullen. Kein chown am Modellmount.
- Target
- PUID
- Default
- 99
- Value
- 99
Primäre Server-GID, 1 bis 2147483647 ohne führende Nullen. Modelldateien müssen für diese Identität lesbar sein.
- Target
- PGID
- Default
- 100
- Value
- 100