Skip to main content
audio.cpp to lokalny serwer inferencji audio napisany w C++ i zbudowany na ggml: synteza mowy, rozpoznawanie mowy, wyrównanie (alignment), diaryzacja, separacja i nie tylko, w ponad 80 rodzinach modeli. GoModel ma dla niego dedykowany typ providera audiocpp. To provider wyłącznie audio. /v1/audio/speech i /v1/audio/transcriptions są do niego kierowane; czat, /responses i /v1/embeddings zwracają invalid_request_error, ponieważ audiocpp_server nie ma takich endpointów. Najpierw uruchom serwer z konfiguracją wymieniającą modele, które udostępnia:

Konfiguracja

Bazowy URL jest wymagany i rejestruje providera – domyślny port audiocpp_server (8080) koliduje z portem samego GoModel, więc nie ma wartości domyślnej:
AUDIOCPP_API_KEY jest opcjonalny i zwykle nieustawiony: audio.cpp nie ma własnego uwierzytelniania. Ustaw go tylko wtedy, gdy reverse proxy przed serwerem oczekuje bearer tokena.
Te przykłady zakładają, że GoModel działa w Dockerze, a audio.cpp na hoście – stąd host.docker.internal. Jeśli GoModel działa bezpośrednio na hoście, użyj http://localhost:8099. Końcowe /v1 jest akceptowane i obcinane, więc oba zapisy wskazują ten sam serwer. Uruchamiasz kilka instancji? Zarejestruj każdą pod nazwą z sufiksem: AUDIOCPP_GPU_BASE_URL=... tworzy providera audiocpp-gpu.

Weryfikacja

Głosy to nazwy audio.cpp, a nie OpenAI

voice wskazuje preset głosu audio.cpp, id głosu z cache’u lub plik wav w skonfigurowanej bibliotece głosów – audio.cpp nie ma stałego zestawu głosów, więc alloy/nova/… z OpenAI nic dla niego nie znaczą. Listę głosów oferowanych przez model uzyskasz przez GET /p/audiocpp/audio/voices?model=<id>. voice jest wymagane w /v1/audio/speech, tak jak w API OpenAI. Aby audio.cpp zastosował zamiast tego skonfigurowany dla modelu default_voice_preset, wywołaj trasę przez passthrough: POST /p/audiocpp/audio/speech. Parametry klonowania (voice_ref, reference_text, seed, max_tokens, options, …) są przekazywane bez zmian, więc własne pola requestu audio.cpp działają przez standardowy endpoint – z jednym wyjątkiem: voice_ref wskazującym ścieżkę po stronie serwera (zobacz niżej):

Formaty audio

Synteza zwraca WAV niezależnie od żądanego response_format, chyba że serwer zbudowano z modułem frontendu MP3. Odpowiedź jest oznaczona typem, który audio.cpp faktycznie zwrócił (audio/wav), a nie tym, o który poproszono. Pliki do transkrypcji muszą być w formacie WAV; serwer odrzuca inne kontenery, chyba że zbudowano go z modułem frontendu audio_decode, który dodaje MP3 i FLAC.

Transkrypcja bez uploadu

audio.cpp potrafi też odczytywać audio z maszyny, na której działa, a jego trasa live przyjmuje surowe PCM bez żadnego pliku. Żadna z tych form nie jest dostępna na /v1/audio/transcriptions: obie pozwalają wywołującemu wybrać, co odczytuje host audio.cpp lub jak długo trzyma model, a uprawnienie do modelu nie oznacza uprawnienia do żadnej z nich. Pozostają na natywnej powierzchni opisanej niżej, którą operator włącza świadomie i udostępnia tylko zaufanym wywołującym. Z tego samego powodu voice_ref w /v1/audio/speech musi zawierać audio inline w base64; {"type": "path"} i sama ścieżka w postaci tekstu są odrzucane i dostępne tylko przez passthrough.

Streaming

Dla modelu skonfigurowanego z "mode": "streaming" stream=true zwraca zdarzenia transkrypcji audio.cpp w kształcie OpenAI (transcript.text.delta, transcript.text.done, [DONE]). GoModel przekazuje strumień zdarzeń bez zmian, ale najpierw odczytuje go do końca, więc nie skraca to niczego od początku do końca – to trasa live opisana niżej emituje tekst, gdy mówca nadal mówi.

Natywne endpointy

Trasy audio.cpp bez odpowiednika w OpenAI są dostępne przez passthrough pod /p/audiocpp/..., gdy operator je włączy:
W odróżnieniu od większości typów providerów nie jest to domyślnie włączone: ta powierzchnia jest nieprzezroczysta, więc request, który do niej trafia, nie jest sprawdzany względem allowlisty modeli wywołującego, a audio.cpp udostępnia tam zarządzanie modelami (/models/load, /tasks/unload_models) i ścieżki plików lokalnych serwera. Włączaj ją tylko dla zaufanych wywołujących. Prefiks /v1 jest opcjonalny (/p/audiocpp/audio/voices i /p/audiocpp/v1/audio/voices to ta sama trasa); /health jest obsługiwane z katalogu głównego serwera. Trasa live to ta, która transkrybuje mowę w trakcie nagrywania – nie ma pliku, a audio nigdy nie musi istnieć na dysku:
To -T - utrzymuje tryb na żywo: --data-binary @- opróżnia stdin przed otwarciem połączenia, co z powrotem zamienia nagrywanie w upload pliku. To, czy częściowy tekst pojawia się w trakcie nagrywania, zależy od modelu, a nie od trasy.

Metadane modeli

GET /v1/models raportuje to, co audio.cpp mówi o każdym skonfigurowanym modelu:
  • Rodzina – rodzina modeli audio.cpp (pocket_tts, moonshine_asr, …).
  • Tryb – audio_speech dla modelu tts i audio_transcription dla modelu asr. Modele zarejestrowane do innych zadań (align, diaryzacja, separacja, …) pozostają na liście bez trybu: GoModel nie ma endpointu, do którego mógłby je kierować, więc są dostępne przez passthrough.
  • Możliwości – streaming dla modelu skonfigurowanego z "mode": "streaming".
To wartości domyślne, a nie ostateczne decyzje: wszystko, co zadeklarujesz w metadanych modeli providera, ma pierwszeństwo – zobacz Metadane modeli.
Ostatnia modyfikacja 24 października 2026