ggml: Text-to-Speech, Speech-to-Text,
Alignment, Diarisierung, Separation und mehr, über 80+ Modellfamilien hinweg.
GoModel hat dafür einen eigenen Provider-Typ audiocpp.
Es handelt sich um einen reinen Audio-Provider. /v1/audio/speech und
/v1/audio/transcriptions werden zu ihm geroutet; Chat, /responses und
/v1/embeddings liefern invalid_request_error, weil audiocpp_server keine
solchen Endpunkte hat.
Starten Sie zuerst den Server mit einer Konfiguration, die die bereitgestellten
Modelle benennt:
Konfiguration
Die Basis-URL ist erforderlich und registriert den Provider — der Standardport vonaudiocpp_server (8080) kollidiert mit dem von GoModel, daher gibt es keinen
Standardwert:
AUDIOCPP_API_KEY ist optional und in der Regel nicht gesetzt: audio.cpp hat keine
eigene Authentifizierung. Setzen Sie ihn nur, wenn ein Reverse Proxy vor dem Server
ein Bearer-Token erwartet.
Diese Beispiele gehen davon aus, dass GoModel in Docker läuft und audio.cpp auf
dem Host — daher
host.docker.internal. Läuft GoModel direkt auf dem Host,
verwenden Sie http://localhost:8099. Ein abschließendes /v1 wird akzeptiert
und entfernt, sodass beide Schreibweisen denselben Server ansprechen. Sie
betreiben mehrere Instanzen? Registrieren Sie jede unter einem Namen mit Suffix:
AUDIOCPP_GPU_BASE_URL=... erzeugt den Provider audiocpp-gpu.Überprüfen
Stimmen sind audio.cpp-Namen, keine OpenAI-Namen
voice benennt ein Stimm-Preset von audio.cpp, eine gecachte Voice-ID oder eine
WAV-Datei in der konfigurierten Stimmbibliothek — audio.cpp hat keinen festen
Stimmensatz, daher bedeuten OpenAIs alloy/nova/… für audio.cpp nichts. Welche
Stimmen ein Modell anbietet, listen Sie mit
GET /p/audiocpp/audio/voices?model=<id> auf.
voice ist bei /v1/audio/speech erforderlich, wie in der OpenAI-API. Damit
audio.cpp stattdessen das konfigurierte default_voice_preset eines Modells
anwendet, rufen Sie die Route über Passthrough auf: POST /p/audiocpp/audio/speech.
Parameter für das Klonen von Stimmen (voice_ref, reference_text, seed,
max_tokens, options, …) werden unverändert weitergeleitet, sodass die eigenen
Request-Felder von audio.cpp über den Standard-Endpunkt funktionieren — mit einer
Ausnahme: eine voice_ref, die einen serverseitigen Pfad benennt (siehe unten):
Audioformate
Die Synthese liefert WAV zurück, unabhängig davon, welchesresponse_format
angefordert wurde, es sei denn, der Server wurde mit dem MP3-Frontend-Modul gebaut.
Die Response wird mit dem Typ gekennzeichnet, den audio.cpp tatsächlich
zurückgegeben hat (audio/wav), nicht mit dem angeforderten.
Uploads für Transkriptionen müssen WAV sein; der Server lehnt andere Container ab,
es sei denn, er wurde mit dem Frontend-Modul audio_decode gebaut, das MP3 und FLAC
hinzufügt.
Transkribieren ohne Upload
audio.cpp kann Audio auch von dem Rechner lesen, auf dem es läuft, und seine Live-Route überträgt rohes PCM ganz ohne Datei. Keine dieser beiden Formen wird auf/v1/audio/transcriptions angeboten: Beide lassen den Aufrufer bestimmen, was der
audio.cpp-Host liest bzw. wie lange er ein Modell belegt, und die Berechtigung für
ein Modell ist keine Berechtigung für eines davon. Sie bleiben auf der unten
beschriebenen nativen Oberfläche, die ein Betreiber bewusst aktiviert und nur
vertrauenswürdigen Aufrufern zugänglich macht.
Aus demselben Grund muss eine voice_ref auf /v1/audio/speech Inline-Audio als
Base64 enthalten; {"type": "path"} und ein reiner Pfad-String werden abgelehnt und
sind nur über Passthrough verfügbar.
Streaming
Für ein Modell, das mit"mode": "streaming" konfiguriert ist, liefert
stream=true die OpenAI-artigen Transkript-Events von audio.cpp
(transcript.text.delta, transcript.text.done, [DONE]). GoModel gibt den
Event-Stream unverändert weiter, liest ihn aber zuvor vollständig ein; das verkürzt
also durchgängig nichts — erst die unten beschriebene Live-Route gibt Text aus,
während der Sprecher noch spricht.
Native Endpunkte
Die Routen von audio.cpp ohne OpenAI-Entsprechung sind über Passthrough unter/p/audiocpp/... erreichbar,
sobald ein Betreiber dies explizit aktiviert:
/models/load, /tasks/unload_models) und serverlokale
Dateipfade bereit. Aktivieren Sie sie nur für vertrauenswürdige Aufrufer.
Das Präfix /v1 ist optional (/p/audiocpp/audio/voices und
/p/audiocpp/v1/audio/voices sind dieselbe Route); /health wird vom Server-Root
bereitgestellt.
Die Live-Route transkribiert Sprache bereits während der Aufnahme — es gibt keine
Datei, und das Audio muss nie auf der Festplatte existieren:
-T - sorgt dafür, dass es live bleibt: --data-binary @- liest stdin vollständig
ein, bevor die Verbindung geöffnet wird, und macht die Aufnahme damit wieder zu
einem Datei-Upload. Ob Teiltext während der Aufnahme erscheint, ist eine
Eigenschaft des Modells, nicht der Route.
Modell-Metadaten
GET /v1/models meldet, was audio.cpp über jedes konfigurierte Modell angibt:
- Family — die Modellfamilie von audio.cpp (
pocket_tts,moonshine_asr, …). - Mode —
audio_speechfür eintts-Modell undaudio_transcriptionfür einasr-Modell. Modelle, die für andere Aufgaben registriert sind (align, Diarisierung, Separation, …), bleiben ohne Modus gelistet: GoModel hat keinen Endpunkt, zu dem es sie routen könnte; sie werden stattdessen über Passthrough erreicht. - Capabilities —
streamingfür ein Modell, das mit"mode": "streaming"konfiguriert ist.