Tłumaczenie automatyczne · Oryginał angielski

Modele mowy

Soniqo obsługuje dwie rodzime rodziny modeli MLX do przemówień konwersacyjnych: PersonaPlex 7B oraz VoiceChat 11B. Zarówno spożywać mowy i generować model audio bezpośrednio, ale korzystają z różnych architektur duplex i kontraktów runtime.

Wybierz model

WzórModel rozmowyNajlepsze dopasowanie
PersonaPlex 7BRównoczesny podwójny z Moshi, Depformer i MimiOverlapping słuchać / mówić zachowanie i 18 głosów do wyboru
VoiceChat 11BCiągłe, trójsynchroniczne duplex z FastConformer, Nemotron- H, EAR- TTS i kodekiem neuronowym80 ms strumieniowe ramki, wydarzenia tekstowe / funkcyjne, i checkpoint- native mowy

To są modele przemówień. Hibiki mapuje także mowę bezpośrednio do mowy, ale jej zadaniem jest strumieniowanie tłumaczenia mowy, więc jest udokumentowana oddzielnie.

PersonaPlex 7B

Full- duplex Speech- to- mowy model dialogu oparty na architekturze Moshi (Kyutai). PersonaPlex 7B generuje odpowiedzi mówione bezpośrednio z mówionego wejścia - nie wymaga pośredni rurociąg tekstowy. Model statków z presetami głosu 18 i jest dostępny w 8- bit (zalecane) i 4-bit kwantyzacji. 8- bit jest domyślny - to 30% szybciej i tworzy spójne odpowiedzi, podczas gdy 4- bit degraduje jakość wyjściową.

VoiceChat 11B

Odniesienie do przemowy duplex-to- mowy: SALM- Duplex: Efektywny i bezpośredni model duplex dla Modeling mowy-to- Język (Przemówienie 2025), cytowany przez NVIDIAjest w górę rzeki VoiceChat Karta modelowa.

M5 Pro, 48 GB, Release 80 ms live cadence, protected-head INT5: trzy sterowane przejazdy mierzone w całości RTF 0.94, 0.92oraz 0.92, z około 8.70 Pik GB RSS. Po raz pierwszy powiedział tekst przybył 44.3–46.7 ms i pierwszy odtwarzalny dźwięk w 74.0–76.4 ms. Są to dane z gorącego obliczenia, nie uczone odwrotnej biorąc latencji; zoptymalizowane INT8 wydajność nie została jeszcze ponownie zmierzona.

VoiceChat jest innym rodzimym MLX Czas na przemówienie do mowy w speech-swift. Łączy w sobie postrzeganie fastConformer, Nemotron- H duplex tekstu / kanałów funkcji, samodzielny tekst-uwarunkowany EAR- TTS, i 22.05 kHz kodek neuronowy. Sesja akceptuje 16 kHz mono audio w sposób ciągły i zwraca zdarzenia tekstowe plus jeden 1,764-próbka ramka wyjściowa co 80 Pani.

Stosowanie VoiceChatModel.load(from:), start a VoiceChatSession, i karmić audio z pushAudioKompletny pakiet musi zawierać encoder/, llm/oraz tts/; odrzucane są tylko pakiety starsze rozumienia.

Bieżąca wydajność

INT5 podtrzymuje przepustowość agregatu poniżej RTF 1 w przypadku badania M5 Pro. Wszystkie trzy biegi również trzymane w całości / ramka p95 poniżej 80 ms 76.2–78.6 ms; Dlatego też terminarz pozostaje wąski. Traktuj początku obrotu modelu i sprzęt oblicza latencję jako oddzielne pomiary.

Żywe VoiceChat CLI

Porozmawiaj z Soniqo przy użyciu kompletnej głowy zabezpieczonej INT5 wiązka zasilana przez NVIDIA Nemotron VoiceChat 11B. Polecenie utrzymuje przechwytywanie i odtwarzanie na jednym AVAudioEngine dla Apple AEC, strumieniuje podpisy użytkowników pakietu RNN- T i gra 22.05 kHz model audio podczas dalszego słuchania.

Domyślny sygnał Soniqo jest uziemiony na capability-: ten CLI może konwertować i odpowiadać na pytania, ale nie może uzyskać dostępu do kalendarzy, przypomnień, aplikacji, kont, urządzeń lub usług zewnętrznych. Dla tych żądań Soniqo wyraźnie mówi, że nie może wykonać działania, nie prosi o potwierdzenie, że nie jest w stanie wypełnić, i krótko sugeruje, co użytkownik może zrobić zamiast.

speech voice-chat

speech voice-chat --input question.wav --output response.wav

Konfigurowalne narzędzia MCP

MCP jest wyłączony, chyba że --mcp-config Jest dostarczany. Plik provider- neutralny JSON może uruchomić dowolny serwer stdio MCP i wyraźnie wybrać, które odkryte narzędzia dotrzeć do VoiceChat. Celowo wąski przykład Apple Reminders eksponuje listę, tworzyć i aktualizować przepływy pracy; niestandardowe konfiguracje mogą umożliwić inne narzędzia serwera:

speech voice-chat \
  --mcp-config Examples/VoiceChatMCP/apple-reminders.json

Przykład w pakiecie pins EventKit- backed dostawcy za apple-reminders-eventkit adapter. VoiceChat eksponuje tylko kanoniczne list_reminders, create_reminderoraz update_reminder operacji - nie usuwa, list- mutacja, kalendarz, lub podzadanie działania. Odkrycie listy pozostaje prywatne do adaptera. Przypominanie i jego termin płatności są popełniane w jednym EventKit zapisać, unikając dawnej niepowodzenia partycy- write, który może zostawić niedatowane przypomnienie. Dostawca może skompilować swoje małe Swift helper przy pierwszym użyciu, więc startup ma oddzielny 60-drugi dodatek; zwykłe wywołania narzędzia zachować 15- Drugi domyślny.

Tylko enabledTools są wyświetlane do modelu, z maksimum pięć na sesję. Narzędzia są zapisywane, chyba że konfiguracja wyraźnie wymienia je w readOnlyTools. Wpisuje domyślne --mcp-write-policy allow, więc jeden kompletny rodzime wywołanie wykonuje natychmiast, a jego prawdziwy wynik dostawcy napędza odpowiedź; demo przypomnienia nie dodaje drugiego zakrętu potwierdzenia. Identyczne zakończone zapis jest nadal tłumiony do świeżej aktywności akustycznej. Użyj confirm w przypadku wyraźnego potwierdzenia opartego na modelach lub deny aby wyłączyć pisanie.

Nie ma transkrypcji router, regularna ekspresja matcher, ekstraktor szczeliny, przypomnienia projekt stanu, argument naprawy, spoken- resolver, lub Scenated assistant mowy. Punkt kontrolny sam wybiera narzędzie i argumenty. Koordynator waliduje enabled- członkostwo narzędzia i typy JSON, stosuje politykę, wzywa MCP, i zwraca ustrukturyzowany sukces lub awarię poprzez przeszkolony kanał odpowiedzi funkcjonalności-. Nieprawidłowe argumenty dostawcy, odrzucone pisze, a niedostępne narzędzia zawieszają nową funkcję zaczyna się do momentu, gdy punkt kontrolny otwiera wypowiedziany asystent skręt; to zapobiega cichowi-retry pętli podczas pozostawiania później retries model- sterowane. Reminders facade wymaga tylko name dla tworzenia i spłaszczania wszystkich list EventKit w jednym list_reminders czytaj. Prezentuje długie UUID dostawcy jako stabilne, sesyjne odniesienia, takie jak r1, następnie rozwiązuje dokładne wzorc- zwrócone odniesienie przed update_reminder Wykonanie. Jest to kompresja ID bez strat, nie transkrypcja lub dopasowanie intencji. Brakujące lub nieprawidłowe wartości wracają do modelu dla naturalnego wyjaśnienia; nigdy nie są cicho wywnioskowane z wyświetlanego transkryptu.

Model- native call JSON działa asynchronicznie na obudowanej ciszy osadzonej. Gdy połączenie jest otwarte, silny kanał tekstowy PAD pomija jego nieużywane 131,072-row projection. Po EOTC, dwufazowa ścieżka zamraża wspólny język i linię czasową EAR- TTS, podczas gdy zewnętrzny wynik jest w toku, dopasowując NVIDIAramki mikrofonu kontynuowane przez percepcję i RNN- T, ale nie są wstawiane jako pozycje syntetyczne PAD. Znany wynik tokens replay w ograniczonym 16-token caucal- prefill kawałki. Sesja kwitnie między żetonów wywołania i partii wyników, zewnętrzne MCP I / O działa w oddzielnym zadaniu, i percepcja mikrofonu na żywo plus RNN- T podpisy pozostają kwalifikowane przez cały. Zachowane mowy użytkownika reents-wchodzi w wspólną linię czasową nie więcej niż jeden stary semantyczny frame na live callback; aktualna frame pozostaje w kolejce, opóźniona powtórka audio jest muted, a bezczynności EAR- TTS pozycje synchronizacji później w ograniczonym ośmioramowy frame chunks. Pętla na żywo odczytuje spójną funkcję i MCP status migawki co 160 ms zamiast wykonywania kilku połączeń aktorów po każdej ramce mikrofonu. Interaktywna tablica rozdzielcza informuje o fazie aktywnego narzędzia; uporządkowany punkt odniesienia rejestruje natywną dekodę, MCP podróż w obie strony, synchronizacja wyników, obliczenie modelu / pamięci podręcznej oraz live interleave pozostałe oddzielnie. Zwykła rozmowa i barge- w zachować NVIDIA 40- rama bezpieczeństwa awaryjnego; już proponowany natywny kandydat narzędzia może zobowiązać się po ośmiu pustych ramkach.

Na próżno M5 Pro z 48 GB, trzy native przypomnienia-listy zwrotów osiągnęła model- autorski post-narzędzie mowy 3.56–4.00 sekundy po zakończeniu wejścia ze stałym 200 Ms provider. Native JSON wziął 1.15–1.28 sekund dla 27–31 kroki; 67-token wynik wziął 0.58–0.72 Sekundy w pięciu prefektur. Wymagana regresja aktualizacji 67 kroki / 5.25 sekundy, gdy model powtórzył realistyczny EventKit UUID, versus 37 kroki / około 2.29 Sekundy z bezstratnie rozwiązane r1 reference -45% mniej kroków token i około 56% mniej czasu dekodowania. Oddzielny dwusekundowy-dostawca stres utrzymywał provider- czekać mikrofon pracy w 19.6 ms p95 oraz 19.8 ms maximum, więc zewnętrzne I / O dodaje opóźnienie odpowiedzi bez trzymania przechwytywania. 118 ms microphone-service p95 oraz 139 ms p95 lateness beyond the 80 ms terminy wejścia; ten ostatni eksponuje krótkie wyniki-synchronizacja kolejki pękające ukryte przez pierwszoplanową RTF. Lokalny EventKit odczytał się zmierzony 358 ms po raz pierwszy MCP Uruchom. Jeden przetestowany plik został poprawnie zapisany, ale wybrana zwykła mowa zamiast rozmowy rodzimej; pozostaje to model narzędzie - jakość wyboru, a nie ukryty router runtime.

Granicą współwalutową jest wspólny Nemotron- H KV cache: zwykłe, zależne od rezultatu, mówienie nie może tworzyć drugiej niezależnej przyszłości przyczynowo-skutkowej, podczas gdy tokeny funkcji są generowane lub odtwarzane. Soniqo regeneruje spójną, autorską mowę po <SPECIAL_22> zamyka odpowiedź narzędzia. W pełni nakładające się na siebie arbitralne mowy wymagałyby spekulacyjnej drugiej pamięci podręcznej i połączenia polityki, lub oddzielnie wyszkolony dekoder funkcji.

Dziecięce serwery MCP dziedziczą tylko PATH, HOME, temporary-directory, i zmienne locale. Kredyty muszą być przekazywane wyraźnie w serwerze env mapa; niepowiązane tajemnice procesu rodzicielskiego nie są przekazywane. Konfigurowane polecenie nadal działa lokalnie z uprawnieniami systemu plików i aplikacji bieżącego użytkownika, więc używaj tylko zaufanych plików konfiguracyjnych MCP i pakietów serwerowych.

W 8-bit funkcja projekcja jest o 518 MB. Podczas zwykłego przemówienia, VoiceChat ocenia tylko buforowane 36 Sonda PAD / tool- start KB. Jeśli narzędzie-start wygrywa przed granicą obrotu, to tylko jego 4,096-value hidden- state candidate jest zachowany; full-słownikowy weryfikacja działa, gdy nauczony BOS przybywa lub końcowy punkt końcowy RNN- T bezpieczeństwa wygasa. Dla ogólnej rodzimej rozmowy, zweryfikowane połączenie JSON następnie działa na pełnej prędkości modelu językowego na percepcji osadzone z jednej sekundy ciszy zamiast raz na 80 ms mikrofon ramka. MCP wynik jest znany, VoiceChat odtwarza go w ograniczonym 16-token caucal- prefill kawałki, zachowując wyszkoloną funkcję sprzężenia zwrotnego i stanu języka / mowy cache bez jednego 11Dekodowanie B na żeton rezultatu. Sesja kwitnie między wygenerowanymi żetonami wywołania a częściami przedplomby odpowiedzi, więc percepcja mikrofonu na żywo, RNN- T podpisy, i podtrzymywane wykrywanie przerw mowy nadal; oddzielne granice wywołania i odpowiedzi przekształcają nieprawidłowo ukształtowane PAD- tylko pracy w wyraźne ponowne próby, a nie stałe stoisko.

Prebuforuje odtwarzanie trzech klatek 80 ms (240 ms) domyślnie. Po przerwie głośnika, czeka on na poduszkę odzyskiwania ośmioramowy przed ponownym uruchomieniem. Ulepszenie dźwięku spada z ośmiu do dwóch kroków po pierwszych 88 ms callback lub gdy kolejka trzech klatek; 120 ms callback, sześć klatek w kolejce, lub resynchronizacja wejścia idzie bezpośrednio do jednego etapu awaryjnego. Tylko akustyczne zmiany udoskonalenia - percepcja, RNN- T, a stan języka pozostaje nienaruszony. Jeśli kolejka nadal osiąga swoją domyślną wartość eight- frame / 640 ms limit, tylko najstarszy dźwięk mikrofonu potrzebny do przyjęcia świeżej wejścia jest odrzucony. Przeciążenie jest traktowane jako jeden epizod odzysku, a użytkownik skręt już potwierdzony przez RN- T pozostaje uzbrojony zamiast być usunięty przez powtarzane resets.

Deska rozdzielcza używa wskaźników ludzkich: behind jest w kolejce mikrofon audio, RTF 0.93× jest średnią z toczenia w stosunku do ostatnich wywołań mikrofonu 120 czasu ścianki podzieloną przez 80 ms audio (poniżej 1 utrzymuje się; powyżej 1 spada w tyle), oraz last 74 ms for 80 ms audio oznacza, że ostatnie wywołanie odebrało 74 ms. Zdarzenia replay nie są liczone jako dodatkowe mianowniki audio. Ponieważ RTF jest oknem, może pozostać wysoki krótko po jednej kosztownej operacji nawet wtedy, gdy last Pod rozmową, speaker gaps, old-audio skipsoraz microphone audio skipped wyraźnie określić odzyskiwanie środków. PLEASE REPEAT Pojawia się tylko wtedy, gdy mikrofon audio został faktycznie pominięty.

Tryb mikrofonu domyślnie używa NVIDIA- stylu RNN- T. Głowica transkrypcji traktuje swoje pierwsze przewidywanie na każdy 80 ms ramka jako puste lub nie-puste. Dwie początkowe ramki mowy i trzy na późniejszych zakrętach pozostają podtrzymywane-działania awaryjne, podczas gdy jeden rozpoznany leksyczny token natychmiast broni bezczynności skrętu, więc kompletny "tak" lub "kim jesteś?" nie może pojawić się w podpisie i czekać na więcej mowy. Punktualizacja i nieznanych etykiet nie używać tego skrótu. VoiceChatBOS- / EOS przewiduje pozostaje normalne decyzje o niskiej opóźnienia.40 pustych ramkach (3.2 seconds) wymusić BOS tylko wtedy, gdy uczona głowa nigdy nie otworzy odpowiedzi, a czterdzieści świeżych, nieślepych klatek zapewni dopasowanie awaryjnego zabezpieczenia RNN- T EOS. Licznik mowy resetuje, gdy Soniqo uruchamia, tak więc aktywność z zakończonego zakrętu użytkownika nie może natychmiast odciąć odpowiedzi. Każda klatka audio nadal dociera do modelu duplex; --no-rnnt-turn-taking pozostawienie decyzji BOS / EOS całkowicie do uczonej głowy języka. Deska rozdzielcza informuje RNN- T barge- ins oddzielnie od podłączania odtwarzania.

Front RNN- T pasuje do wyściełania odbijającego NeMo na każdej krawędzi okna microphone. Usuwa to niedopasowanie zero- pasujące, które może zmienić marginalne decyzje symbolu; nie zastępuje kompaktowego punktu kontrolnego 1,024-token transcript head z ogólnym dużym słownikiem ASR.

W trybie normalnym, model- natywny BOS jest tłumiony do czasu potwierdzenia mowy użytkownika, więc Soniqo nie mówi pierwszy. --greet wyraźnie pozwala na początkowe powitanie. Po dźwiękowej treści odpowiedzi, pusty PAD pozostaje wewnątrz otwartego zakrętu dla co najmniej 16 ramki i dla trzech klatek na token treści, gdy jest to dłuższe. Pierwszy nadmiar pustego PAD zamyka logiczny obrót. Ten content- skaled tail zachowuje opóźnione słowa, które stały 1.28- drugi wycięcie może wyciszyć.

Tryb interaktywny wykorzystuje stałą tablicę rozdzielczą na alternatywnym ekranie terminala, więc aktualizacje stanu ponownie rysują na miejscu zamiast napełniać scrollback. Użyj --plain dla wyjścia tylko dla append- only.

W przypadku miejscowej diagnozy, --debug-timeline znaczniki czasu dla każdego użytkownika i wyrażenia Soniqo i wprowadza przemyślane argumenty rodzime wywołania, start / zakończenie MCP, i synchronizacja result-cache w tej samej chronologii. pronunciation ended w końcowym oknie generowanym akustycznie - PCM; jest to czas wyjścia modelu-, a nie ukończenie urządzenia głośnikowego. Demo celowo pomija historyczne bloki faze- czasu; szczegółowe native- dekode, dostawca, cache, i mikrophone- ciśnienia metrics pozostają w voicechat-bench JSON. Czas może ujawnić argumenty narzędzia, więc nie używać go w dziennikach wspólnych. Czasowniki fazy resetować między rodzimym dekodowaniem i dostawcy czekać.

Zmierzone z live captions

Trzy M5 Pro 48 Zmierzone operacje wydania GB RTF 0.92, total- frame p95 74.8–75.8 ms, pierwszy odtwarzalny dźwięk 74.2–74.9 ms, i około 8.74 Pik GB RSS. Transcript i odpowiedź były identyczne w całym biegu.

Sesje na żywo utrzymują niezmienny głośnik 37- frame prompt plus 20 sekundy najnowszej historii EAR- TTS, podczas gdy Nemotron- H utrzymuje semantyczny stan rozmowy oddzielnie. PAD wewnątrz akustycznego ogona jest renderowana normalnie; tylko później cichy PAD postępuje przyczynowo w partiach po osiem. To zapobiega uwagę TTS i bezczynności pracy z rosnącą bez konieczności cięcia odpowiedzi; --live-speech-context-seconds 0 Przywraca pełną historię TTS, a tryb plików pozostaje domyślnie dokładną historią pełną.

W 63.6- Sekunda. M5 Profil Pro z ogonem bezpiecznym dla środowiska, ścieżka live mierzona agregat RTF 0.87, okno końcowe RTF 0.71, 4.1 Synteza okna końcowego ms / frame, 8.72 GB szczyt RSS, oraz 23.67 Ślad fizyczny GB. Osiemstopniowe okna aktywne. RTF 1.05 oraz 1.12, więc interaktywny CLI wykorzystuje odwracalny dwuetapowy zapas i jednoetapowy tryb awaryjny. 31 Kodebooki RVQ w jednej przepustce; chroni on wychwytywanie na żywo, ale nie jest akustyczną parytetem z harmonogramem ośmiostopniowym. Sekwencyjne i ząbkowane stany podręcznego podręcznego ma minimum cosinusa 0.9999999.

Dla rozpoznania dźwięku, wskaźnik porównuje ograniczony live codec- window render z ciągłym pełnym kontekstem renderowania. Długa pauza obecna w obu została wygenerowana przez EAR- TTS lub kodeka, nie przez kolejkę głośnika; nieciągłość wykryta tylko w punktach renderowania na żywo w kierunku zszywania okna kodekowego. Luki głośnika pozostają oddzielnym playback-underflow metryc. Odrębny onset- pop detektor skanuje wygenerowany lead- w plus pierwszy 50 ms trwałej mowy i flagi próbki skoki powyżej zarówno 0.05 amplitude i sześć razy Steady- mowy p99 podstawowy. Scenarios może ustawić maximum_suspect_onset_transients do zera, podczas gdy percepcyjne słuchanie pozostaje ostatecznym sprawdzianem jakości.

Architektura i wykorzystanie PersonaPlex

PersonaPlex jest wielostrumieniowym modelem autoregresyjnym z trzema komponentami rdzennymi:

SkładnikSzczegóły
Transformator temporalny32 warstwy, dim = 4096, 32 głowice, SwiGLU (hidden _ scale = 4.125), RoPE, 8- bitowe kwantyfikowane (domyślnie)
Depformer6 warstw, dim = 1024, 16 głowic, MultiLinear (waga _ per _ step = true), dep _ q = 16
Mimi Codec16 kodebooków, 12,5 Hz częstotliwości ramki, wyjście audio 24 kHz

Procesy modelu Strumienie 17 jednocześnie: strumień tekstowy 1 + strumienie audio użytkownika 8 oraz strumienie audio agenta 8. Architektura ta umożliwia konwersację w pełnym duplex, gdzie model może słuchać i mówić jednocześnie.

Parametry głosu

PersonaPlex zawiera 18 wbudowany w ustawienia głosowe w różnych stylach naturalnych i zróżnicowanych:

KategoriaZałączniki
Naturalna kobietaNATF0, NATF1, NATF2, NATF3
Naturalny mężczyznaNATM0, NATM1, NATM2, NATM3
Zmienna kobietaVARF0, VARF1, VARF2, VARF3, VARF4
Zróżnicowany mężczyznaVARM0, VARM1, VARM2, VARM3, VARM4

Monolog wewnętrzny

PersonaPlex generuje dwa równoległe strumienie na każdym kroku: 8 kodebook audio dla kodeka Mimi i jeden token tekstowy dla wewnętrznego monologu modelu. Strumień tekstowy jest tym, co model "myśli", jak mówi - może nieznacznie odbiegać od końcowego dźwięku, ale w praktyce odzwierciedla odpowiedź mówioną na tyle blisko, aby używać jako transkrypt na żywo.

Tokeny tekstowe wracają jako surowe identyfikatory części SentencePiece. Odkodować je z SentencePieceDecoder że PersonaPlex statki:

import PersonaPlex
import AudioCommon

let model = try await PersonaPlexModel.fromPretrained()
let decoder = model.tokenizer  // SentencePieceDecoder?

let result = model.respond(userAudio: userSamples, voice: .NATM0)
let transcript = decoder?.decode(result.textTokens) ?? ""
print(transcript)        // "Sure, I can help with that..."
playAudio(result.audio)  // 24 kHz mono Float32

W trybie strumieniowym, respondStream emity textTokens kawałki, ponieważ są produkowane - dekodować je stopniowo, aby napędzać obraz na żywo, podczas gdy dźwięk jest nadal generowanie. --transcript Flaga CLI robi dokładnie to za kulisami.

Dlaczego to ma znaczenie? SentencePieceDecoder jest zbudowany na wspólnej AudioCommon.SentencePieceModel czytnik protobuf, więc PersonaPlex, OmnilingualaASR i każdy przyszły model SentencePiece- oparty na dekodzie przez ten sam tokenizer implementacji. Zobacz SentencePieceModel reference.

Prompy systemowe

Podaj dowolny niestandardowy sygnał systemowy jako zwykły ciąg znaków - nie jest potrzebna zewnętrzna tokenizacja:

let response = model.respond(
    userAudio: audio,
    voice: .NATM0,
    systemPrompt: "You enjoy having a good conversation."
)

Lub użyć built- in preset:

Zastosowanie CLI

Generuj odpowiedź wypowiedzianą z wejścia audio:

# Basic speech-to-speech
.build/release/speech respond --input question.wav

# Choose a voice preset
.build/release/speech respond --input question.wav --voice NATM0

# Stream audio output during generation
.build/release/speech respond --input question.wav --stream

# Custom system prompt text
.build/release/speech respond --input question.wav --system-prompt-text "You enjoy having a good conversation."

# Use a preset system prompt
.build/release/speech respond --input question.wav --system-prompt customer-service

# Get transcript alongside audio
.build/release/speech respond --input question.wav --transcript

# JSON output with metadata
.build/release/speech respond --input question.wav --json

Opcje

OpcjaOpis
--inputPlik wejściowy audio (WAV, wymagany)
--voiceNazwa presetu głosu (np.: NATM0, VARF2)
--system-promptKonfiguracja: asystent, zorientowany, klient-serwis, nauczyciel
--system-prompt-textNiestandardowy tekst systemowy (nadświetla --system-prompt)
--max-stepsEtapy maksymalnej generacji
--streamEmit audio fragmentów podczas generacji
--compileUżyj MLX skompilowanego wniosku dla szybszej generacji
--transcriptWyjście zapisu tekstu obok dźwięku
--jsonWyjście JSON z metadanymi

Parametry pobierania próbek mogą być również przekroczone:

OpcjaDomyślneOpis
--audio-temp0.8Temperatura próbkowania tokena dźwiękowego
--audio-top-k250Pobieranie próbek toponitu audio top- k
--text-temp0.7Temperatura próbkowania tokena tekstowego
--text-top-k25Próbka top- k tomp- k toxeName

Strumieniowanie

W --stream flaga umożliwia wyjście audio w czasie rzeczywistym. Odłamki audio są emitowane w miarę ich generowania, więc odtwarzanie może rozpocząć się przed pełną odpowiedzią. Jest to szczególnie przydatne w przypadku interaktywnych aplikacji, w których liczy się niska opóźnienie.

Wydajność

MetricWartość
Współczynnik czasu rzeczywistego (RTF)~ 1.4 (8- bit, w pobliżu czasu rzeczywistego)
Stopniowe opóźnienie~ 112 ms / step on M2 Max (8- bit)
Wielkość modelu (8- bit)- 9.1 GB
Szczyt RAM (8- bit)- 11 GB
Rozmiar modelu (4- bit)- 4,9 GB
Szczyt RAM (4- bit)~ 7 GB
Ważne

PersonaPlex 7B (8-bit) wymaga co najmniej 24 GB RAM. 4-bitowy wariant pasuje 16 Urządzenia GB, ale produkuje zdegradowane wyjście. 8 Urządzenia GB, żaden wariant nie będzie pasował. --compile dla najlepszej wydajności na obsługiwanym sprzęcie.

Warianty modelu

WzórRozmiarHuggingFace
PersonaPlex-7B (8- bit) zalecane9.1 GBaufklarer / PersonaPlex-7B-MLX-8bit
PersonaPlex-7B (4- bit)4.9 GBaufklarer / PersonaPlex-7B-MLX-4bit

Swift API

import PersonaPlex
import AudioCommon

let model = try await PersonaPlexModel.fromPretrained()
let response = model.respond(
    userAudio: userSamples,
    voice: .NATM0,
    systemPrompt: "You are a helpful assistant."
)
try WAVWriter.write(samples: response.audio, sampleRate: 24000, to: URL(filePath: "answer.wav"))