Automatische vertaling · Engels origineel
Speech-to-speech modellen
Soniqo ondersteunt twee native MLX modelfamilies voor conversational speech-to-speech: PersonaPlex 7B en VoiceChat 11B. Beide gebruiken spraak en genereren modelaudio rechtstreeks, maar ze gebruiken verschillende duplexarchitecturen en runtime contracten.
Kies een model
| Model | Conversatiemodel | Beste pasvorm |
|---|---|---|
| PersonaPlex 7B | Gelijktijdige volledige duplex met Moshi, Depformer en Mimi | Overlappend luisteren/sprekend gedrag en 18 selecteerbare stemmen |
| VoiceChat 11B | Continue, frame-synchrone duplex met FastConformer, Nemotron-H, EAR-TTS, en een neurale codec | 80 ms streaming frames, tekst/functie gebeurtenissen, en checkpoint-native speech |
Dit zijn conversationele speech-to-speech modellen. Hibiki brengt ook spraak rechtstreeks in beeld, maar zijn taak is het streamen van spraakvertalingen, zodat het apart wordt gedocumenteerd.
PersonaPlex 7B
Volledig-duplex spraak-naar-spraak dialoog model gebaseerd op de Moshi architectuur (Kyutai). PersonaPlex 7B genereert gesproken reacties direct uit gesproken ingang . . geen tussenliggende tekst pijplijn vereist. Het model wordt geleverd met 18 stem presets en is beschikbaar in 8-bit (aanbevolen) en 4 -bit quantization. 8-bit is de standaard Het is 30% sneller en geeft coherente reacties, terwijl 4-bit de outputkwaliteit degradeert.
VoiceChat 11B
Duplex-speech-to-speechreferentie: SALM-Duplex: efficiënte en directe duplexmodellering voor spraak-tot-spraaktaalmodel (Interspeech 2025), geciteerd door NVIDIA's upstream VoiceChat modelkaart.
M5 Pro, 48 GB, loslaten, 80 ms live cadans, beschermd hoofd INT5: drie gecontroleerde runs gemeten vol-pipeline RTF 0.94, 0.92en 0.92, met ongeveer 8.70 GB piek RSS. Eerste gesproken tekst aangekomen in 44.3–46.7 ms en eerste afspeelbare audio in 74.0–76.4 ms. Dat zijn hot compute cijfers, niet geleerd turn-taking latency; geoptimaliseerd INT8 de prestaties zijn nog niet opnieuw gemeten.
VoiceChat is de andere inheemse MLX speech-to-speech runtime in speech-swift. Het combineert causale FastConform perceptie, Nemotron-H duplex tekst/functionele kanalen, standalone tekst-conditioned EAR-TTS en een 22.05 kHz neurale codec. Een sessie accepteert 16 kHz mono audio continu en geeft tekstgebeurtenissen plus één 1.764-sample output frame elke 80 ms.
Gebruik VoiceChatModel.load(from:), start een VoiceChatSession, en voer audio met pushAudio. Een complete bundel moet encoder/, llm/ en tts/ bevatten; oudere bundels die alleen begrip hebben, worden afgewezen.
INT5 ondersteunt de totale doorvoer onder RTF 1 op de geteste M5 Pro. Alle drie runs ook gehouden totaal/frame p95 onder 80 Ms. 76.2–78.6 ms; deadline headroom blijft daarom smal. Behandel model draaiingang en hardware berekenen latency als afzonderlijke metingen.
Levend VoiceChat CLI
Praat met Soniqo met behulp van de volledige beschermde kop INT5 bundel, aangedreven door NVIDIA Nemotron VoiceChat 11B. Het commando houdt opname en afspelen op één AVAudioEngine voor Apple AEC, streamt de RNN-T gebruikerstitels van de bundel en speelt 22.05 kHz modelaudio af terwijl u blijft luisteren.
De standaard-prompt Soniqo is gebaseerd op mogelijkheden: deze CLI kan vragen converseren en beantwoorden, maar kan geen toegang krijgen tot agenda's, herinneringen, apps, accounts, apparaten of externe diensten. Voor deze verzoeken Soniqo zegt duidelijk dat het de actie niet kan uitvoeren, vraagt niet om een bevestiging die het niet kan vervullen, en geeft kort aan wat de gebruiker in plaats daarvan kan doen.
speech voice-chat
speech voice-chat --input question.wav --output response.wav
Configureerbaar MCP gereedschap
MCP is uitgeschakeld tenzij --mcp-config wordt geleverd. Het provider-neutrale JSON-bestand kan elke stdio MCP server starten en expliciet kiezen welke ontdekte tools VoiceChat bereiken. Het opzettelijk smalle Apple Reminders voorbeeld stelt lijst, aanmaak en update workflows bloot; aangepaste configuraties kunnen andere servertools inschakelen:
speech voice-chat \
--mcp-config Examples/VoiceChatMCP/apple-reminders.json
Het gebundelde voorbeeld pinnen een EventKit-backed provider achter een apple-reminders-eventkit adapter. VoiceChat stelt alleen de canonieke list_reminders, create_reminder en update_reminder-bewerkingen bloot, niet de verwijdering, lijstmutatie, agenda of subtaken van de provider. Lijstontdekking blijft privé bij de adapter. Een herinnering en de datum waarop deze moet worden uitgevoerd worden, worden in één EventKits opgeslagen, waardoor de vroegere partiële schrijffout die een onopgelete herinnering achter zou kunnen laten, vermeden wordt. De provider kan zijn kleine Swift helper bij het eerste gebruik compileren, dus startup heeft een aparte 60-seconde vergoeding; normale tooloproepen houden de 15-second standaard.
Alleen enabledTools worden getoond aan het model, met een maximum van vijf per sessie. Hulpmiddelen zijn schrijfmachines tenzij de configuratie ze expliciet weergeeft in readOnlyTools. Schrijft standaard naar --mcp-write-policy allow, zodat één complete native call onmiddellijk uitvoert en het echte providerresultaat het antwoord voortstuwt; de herinneringsdemo voegt geen tweede bevestigingsbocht toe. Een identiek voltooid schrijven wordt nog steeds onderdrukt tot verse akoestische activiteit. Gebruik confirm voor expliciete modelgemedieerde bevestiging of deny om schrijven uit te schakelen.
Er is geen transcript router, reguliere-expressie matcher, slot extractor, herinnering concept status, argument reparatie, gesproken-name resolver, of scripted assistent speech. De checkpoint alleen selecteert de tool en argumenten. De coördinator valideert ingeschakelde-tool lidmaatschap en JSON types, past beleid toe, roept MCP, en geeft gestructureerd succes of mislukking terug via het getrainde functie-respons kanaal. Foute provider resultaten, ongeldige argumenten, geweigerde schrijf-en niet-beschikbare tools schorsen nieuwe functie begint totdat het checkpoint opent een gesproken assistent turn; dit voorkomt een stille direct-retry lus tijdens het verlaten van later opnieuw modelgestuurde. De Herinnerings facade vereist alleen dat er een nieuwe functie wordt gestart totdat de checkpoint een gesproken assistent draait; dit voorkomt dat er een stille onmiddellijk-retry lus wordt uitgevoerd terwijl het later opnieuw model wordt gecontroleerd. name voor het aanmaken en platmaken van alle EventKit lijsten in één list_reminders lees. Het presenteert lange provider UUID's als stabiele, sessie-gescoopte referenties zoals r1, dan lost een exacte model-returned referentie voor update_reminder uitvoering. Dit is verliesloze ID-compressie, geen transcript of intent matching. Ontbrekende of ongeldige waarden gaan terug naar het model voor een natuurlijke verduidelijking; ze worden nooit stilletjes afgeleid uit het weergegeven transcript.
Model-native call JSON draait asynchroon op een cache-stilte inbedding. Zodra een oproep is geopend, slaat het geforceerd-PAD-sms-kanaal zijn ongebruikte over 131,072-row projectie. Na EOTC bevriest het tweefasenpad de gedeelde taal en de EAR-TTS tijdlijn terwijl het externe resultaat nog in behandeling is, bijpassend NVIDIA's referentie wrapper; microfoon frames blijven door waarneming en RNN-T, maar worden niet ingevoegd als synthetische PAD-posities. Bekende resultaat tokens spelen in begrensd 16-token causaal-prefill brokken. De sessie levert tussen call tokens en resultaat batches, extern MCP I/O draait in een aparte taak, en live microfoon perceptie plus RNN-T titels blijven in aanmerking komen gedurende. Beveiligde gebruiker spraak opnieuw in de gedeelde tijdlijn op niet meer dan een oude semantische frame per live callback; het huidige frame blijft in de wachtrij, verlopen replay audio is gedempt, en stationaire EAR-TTS posities synchroniseren later in begrensd acht-frame brokken. De live lus leest coherente functie en MCP status snapshots elke 160 ms in plaats van meerdere actorgesprekken na elk microfoonframe. Het interactieve dashboard rapporteert de actieve gereedschapsfase; de gestructureerde benchmark registreert native decodering, MCP ronde reis, resultaatsynchronisatie, model/cache berekening, en live interleave Gewoon gesprek en inspringen houden NVIDIA's 40-frame veiligheid terugval; een reeds voorgestelde native tool candidate kan committen na acht lege frames.
Op een lege M5 Pro met 48 GB, drie native herinneringslijst zinnen bereikt model-geauthoriseerde post-tool speech 3.56–4.00 seconden na het einde van de invoer met een vaste 200 Ms provider. Inheemse JSON nam 1.15–1.28 seconden voor 27–31 stappen; de 67-getoken resultaat duurde 0.58–0.72 seconden in vijf voorvullingen. Een gerichte aanpassing regressie vereist 67 native steps / 5.25 seconden wanneer het model een realistische EventKit UUID herhaalde, versus 37 stappen / over 2.29 seconden met de verliesloos opgelost r1 referentie45% minder token stappen en ongeveer 56% minder decoderen tijd. Een aparte twee-seconden-provider stress hield provider-wacht microfoon werk op 19.6 ms p95 en 19.8 ms maximum, dus externe I/O voegt antwoordvertraging toe zonder het vastleggen vast te houden. Een uiteindelijke cleanrun gemeten 118 ms microfoon-service p95 en 139 ms p95 laatheid voorbij de 80 ms invoerdeadlines; deze laatste stelt korte resultaat-synchronisatie-uitbarstingen in de wachtrij bloot die verborgen zijn door voorgrond RTF. De lokale EventKit heeft zichzelf gemeten 358 ms na eenmalig MCP startup. Een geteste create-frase werd correct getranscribeerd, maar geselecteerd voor gewone spraak in plaats van een native call; dit blijft de kwaliteit van de modeltoolselectie, geen verborgen runtime router.
De concurrency grens is de gedeelde Nemotron-H KV-cache: gewone resultaatgerichte spraak kan geen tweede onafhankelijke causale toekomst vormen terwijl functietekens worden gegenereerd of opnieuw worden afgespeeld. Soniqo hervat coherente, model-geauthoriseerde spraak na <SPECIAL_22> sluit de gereedschapsrespons. Volledig overlappende willekeurige spraak zou een speculatieve tweede cache en merge beleid vereisen, of een afzonderlijk getrainde functie decoder.
Kind MCP servers erven alleen PATH, HOME, tijdelijk-map en lokale variabelen. In de kaart env van de server moeten de gegevens expliciet worden doorgegeven; niet-gerelateerde ouder-procesgeheimen worden niet doorgestuurd. Het geconfigureerde commando draait nog steeds lokaal met het huidige bestandssysteem en de toestemmingen van de gebruiker, dus gebruik alleen vertrouwde MCP configuratiebestanden en serverpakketten.
De 8-bit functie projectie is ongeveer 518 MB. Tijdens gewone toespraak, VoiceChat evalueert slechts een gecached 36 KB PAD/tool-start-sonde. Als de tool-start wint voor de draaigrens, alleen de 4,096-value hidden-state candidate wordt behouden; full-vocabulaire verificatie loopt wanneer geleerde BOS aankomt of het definitieve RNN-T veiligheidseindpunt vervalt. Voor een generiek native call, geverifieerde oproep JSON draait dan op volledige taal-model snelheid op een perceptie inbedden gecached vanaf een seconde van stilte in plaats van eenmaal per 80 ms microfoon frame. MCP Het resultaat is bekend, VoiceChat herspeelt het in begrensde 16-token causaal-prefill brokken, het behoud van de getrainde functie feedback en taal/speech cache toestand zonder één 11B decoderen per resultaat token. De sessie levert tussen gegenereerde aanroep tokens en respons-prefill brokken dus live microfoon waarneming, RNN-T bijschriften, en aanhoudende-spraak onderbreking detectie blijven; aparte oproep en response grenzen omzetten misvormde PAD-alleen werk in een expliciete retry in plaats van een permanente stal.
Afspelen prebuffert standaard drie 80 ms frames (240 ms). Na een speaker gap, wacht het op een acht-frame herstel kussen voordat herstart. Voice verfijning daalt van acht naar twee stappen na de eerste 88 ms callback of wanneer drie frames wachtrij; een 120 ms cellback, zes wachtrij frames, of invoer resynchronization gaat rechtstreeks naar een noodstap. Alleen akoestische furfurther changes .Preception, RNN-T, en taalstaat blijven intact. Als de wachtrij nog steeds zijn standaard acht-frames / 640 ms limiet bereikt, alleen de minimale oudste microfoon audio nodig om verse invoer toe te geven wordt weggegooid. Aanhoudende overbelasting wordt behandeld als een herstel episode, en een gebruiker draai al bevestigd door RNN- T blijft gewapend in plaats van worden gewist door herhaalde resets. Overgeslagen woorden zijn nog steeds gemarkeerd en kunnen herhaling vereisen.
Het dashboard maakt gebruik van mensgerichte metrics: behind is microfoonaudio in de wachtrij, RTF 0.93× het rollende gemiddelde over de nieuwste 120 microfoon callbacks van de muurtijd gedeeld door 80 ms audio (onder 1 blijft; boven 1 valt achter), en last 74 ms for 80 ms audio betekent dat de nieuwste callback 74 ms. Replay gebeurtenissen worden niet geteld als extra audio noemers. Omdat RTF is een venster, kan het hoog kort na een dure operatie, zelfs wanneer last Onder het gesprek, speaker gaps, old-audio skipsen microphone audio skipped Maak het herstel expliciet. PLEASE REPEAT verschijnt alleen wanneer microfoon audio daadwerkelijk werd overgeslagen.
Microfoonmodus maakt gebruik van de NVIDIA-stijl RNN-T turn-taking standaard. De transcript hoofd behandelt de eerste voorspelling op elke 80 ms frame als blanco of niet-blanc. Twee eerste spraakframes en drie op latere beurten blijven aanhoudende-activiteit fallbacks, terwijl een herkende lexical token onmiddellijk armen een stationaire draai, zodat een volledige .ja ja of nee? wie ben jij? kan niet verschijnen in de titel en dan wachten op meer spraak. Punctuatie en onbekende labels niet gebruiken die snelkoppeling. VoiceChat's geleerde BOS/E-voorspellingen blijven de normale lage-latency beslissingen. Veert lege frames (3.2 seconden) dwingen BOS alleen als het geleerde hoofd nooit een reactie opent, en veertig nieuwe niet-blanch frames bieden de bijbehorende RNN- T EOS veiligheid terug. De speech counter resets wanneer Soniqo start, zodat activiteit van de voltooide gebruiker niet onmiddellijk kan draaien. --no-rnnt-turn-taking BOS/EOS-beslissingen geheel aan de geleerde taalkop overlaten. Het dashboard rapporteert RNN-T-sloop-ins apart van de afspeelonderruns.
De RNN-T frontend komt overeen met NeMo's reflectie padding op elke rollerende microfoon-vensterrand. Dit verwijdert een zero-padding mismatch die marginale hebzuchtige token beslissingen kan veranderen; het vervangt niet de compacte 1.024-token transcript hoofd van het controlepunt door een algemene groot-vocabulaire ASR.
In normale modus wordt modelnative BOS onderdrukt totdat de spraak van de gebruiker bevestigd is, dus Soniqo spreekt niet als eerste. --greet geeft expliciet toestemming voor de eerste begroeting. Na een hoorbare antwoordinhoud blijft leeg PAD gedurende ten minste 16 frames binnen de open turn en voor drie frames per content token wanneer dat langer is. De eerste overmatige lege PAD sluit de logische turn. Deze inhoudsschaal bewaart vertraagde woorden die een vaste 1,28-seconde cutoff kunnen dempen.
Interactieve modus maakt gebruik van een vast dashboard in het alternatieve scherm van de terminal, dus status-updates hertekenen in plaats van scrollback te vullen. Gebruik --plain voor alleen-toevoegen uitvoer.
Voor lokale diagnose, --debug-timeline tijdstempels elke gebruiker en Soniqo zin en plaatst de parsed native call argumenten, MCP start/aanvulling, en resultaatcache synchronisatie in dezelfde chronologie. Het markeert ook pronunciation ended in het uiteindelijke auditieve gegenereerde-PCM venster; dit is model-output tijd, niet luidspreker-apparaat voltooiing. De demo laat opzettelijk historische fase-timing blokken weg; gedetailleerde native-decode, provider, cache, en microfoon-druk metrics blijven in voicechat-bench JSON. De tijdlijn kan toolargumenten onthullen, dus gebruik het niet in gedeelde logs. Fasetimers reset tussen inheemse decode en provider wachten.
Drie. M5 Pro 48 Gb-vrijgaveruns gemeten RTF 0.92, totaal p95 74.8–75.8 ms, eerste afspeelbare audio 74.2–74.9 ms, en over 8.74 GB piek RSS. Transcript en antwoord waren identiek over de loop.
Live sessies houden de onveranderlijke 37-frame speakerprompt plus 20 seconden van de recente EAR-TTS geschiedenis, terwijl Nemotron-H semantische gesprekstoestand apart houdt. PAD in de inhoud-geschaalde akoestische staart wordt normaal weergegeven; alleen later stille PAD vordert causaal in batches van acht. Dit voorkomt TTS aandacht en stationair werk van groei zonder gebonden zonder het gesproken antwoord te snijden; --live-speech-context-seconds 0 herstelt volledig TTS geschiedenis, en bestandsmodus blijft standaard exact volledige geschiedenis.
In een 63.6- tweede M5 Pro profiel met de inhoud-veilige staart, het levend pad gemeten aggregaat RTF 0.87, laatste venster RTF 0.71, 4.1 ms/frame-eindvenstersynthese, 8.72 GB piek RSS, en 23.67 GB piek fysieke voetafdruk. Speech-actieve acht-stap vensters bereikt RTF 1.05 en 1.12, dus de interactieve CLI maakt gebruik van een omkeerbare twee-staps terugval en een-stap noodmodus. Een-stap synthese wijst alle 31 RVQ-codeboeken in één enkele pas; het beschermt live opname maar is geen akoestische pariteit met het achtste-stap schema. Sequentiële en gestapelde idle-cache toestanden hadden minimale cosinus 0.9999999.
Voor audiodiagnose vergelijkt de benchmark de begrensde live codec-venster render met een continue full-context render. Een lange pauze aanwezig in beide werd gegenereerd door EAR-TTS of de codec, niet door de speaker wachtrij; een onderbreking gevonden alleen in de live render punten richting codec-window stiksels. Speaker gaten blijven een aparte afspeel-underflow metriek. Een toegewijde begin-pop detector scant de gegenereerde lead-in plus de eerste 50 ms van aanhoudende spraak en vlaggen monster jumps boven zowel 0,05 amplitude en zes keer de steady-speech p99 baseline. Scenario's kunnen maximum_suspect_onset_transients tot nul, terwijl perceptual luisteren de eindkwaliteitscontrole blijft.
PersonaPlex architectuur en gebruik
PersonaPlex is een multistream autoregressief model met drie kerncomponenten:
| Onderdeel | Gegevens |
|---|---|
| Temporal Transformer | 32 lagen, dim=4096, 32 hoofden, SwiGLU (hidden_scale=4.125), RoPE, 8-bit gequantiseerd (standaard) |
| Depformer | 6 lagen, dim=1024, 16 hoofden, MultiLinear (gewichts_per_step=true), dep_q=16 |
| Mimi Codec | 16 codebooks, 12,5 Hz framesnelheid, 24 kHz audio uitgang |
Het model verwerkt 17 streams tegelijkertijd: 1 tekststream + 8 gebruikers audiostreams + 8 agent audiostreams. Deze architectuur maakt een volledig duplex gesprek mogelijk waar het model tegelijkertijd kan luisteren en spreken.
Voice Presets
PersonaPlex bevat 18 ingebouwde stemvoorinstellingen in natuurlijke en gevarieerde stijlen:
| Categorie | Voorinstellingen |
|---|---|
| Natuurlijke vrouw | NATF0, NATF1, NATF2, NATF3 |
| Natuurlijke man | NATM0, NATM1, NATM2, NATM3 |
| Gevarieerd vrouwelijk | VARF0, VARF1, VARF2, VARF3, VARF4 |
| Variated man | VARM0, VARM1, VARM2, VARM3, VARM4 |
Innerlijke monoloog
PersonaPlex genereert bij elke stap twee parallelle streams: 8 audio codebook tokens voor de Mimi codec en één tekst token voor de interne monoloog van het model. De tekststream is wat het model is thinking .. terwijl het spreekt ..het kan iets afwijken van de uiteindelijke audio, maar in de praktijk weerspiegelt het de gesproken reactie dicht genoeg om te gebruiken als een live transcript.
De teksttekens komen terug als rauwe SentencePiece-item-ID's. Decodeer ze met de SentencePieceDecoder die PersonaPlex verscheept:
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
In de streamingmodus, respondStream zendt textTokens brokken uit omdat ze worden geproduceerd, ontcoderen ze incrementeel om een live-ondertitelweergave te sturen terwijl het audio nog steeds aan het genereren is. De --transcript CLI-vlag doet precies dit achter de schermen.
Waarom het belangrijk is: SentencePieceDecoder is gebouwd op de gedeelde AudioCommon.SentencePieceModel protobuf reader, dus PersonaPlex, OmnilingualASR en eventuele toekomstige op sentencePiece gebaseerde modeldecodering via dezelfde tokenizer-implementatie.Zie de SententiePieceModelreferentie.
Systeemprompts
Pas elke aangepaste systeemprompt als een gewone string .. geen externe tokenisatie nodig:
let response = model.respond(
userAudio: audio,
voice: .NATM0,
systemPrompt: "You enjoy having a good conversation."
)
Of gebruik een ingebouwde voorinstelling:
assistantfocusedBeknopte, directe reactiescustomer-serviceteacherPatiënt, verklarende leerstijl
CLI-gebruik
Genereer een gesproken antwoord van een audio-invoer:
# 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
Opties
| Optie | Omschrijving |
|---|---|
--input | Invoer audiobestand (WAV, vereist) |
--voice | Voice preset name (bijv., NATM0, VARF2) |
--system-prompt | Systeemprompt vooraf ingesteld: assistent, gefocust, klantenservice, leraar |
--system-prompt-text | Aangepaste systeemprompttekst (overschrijft --system-prompt) |
--max-steps | Maximale generatiestappen |
--stream | Audiodelen uitsturen tijdens de generatie |
--compile | Gebruik MLX gecompileerde gevolgtrekking voor snellere generatie |
--transcript | Het tekst transcript naast audio uitvoeren |
--json | JSON-uitvoer met metagegevens |
De bemonsteringsparameters kunnen ook worden overschreven:
| Optie | Standaard | Omschrijving |
|---|---|---|
--audio-temp | 0.8 | Audio token bemonsteringstemperatuur |
--audio-top-k | 250 | Audio token top-k bemonstering |
--text-temp | 0.7 | Temperatuur van de steekproeftekstton |
--text-top-k | 25 | Tekstteken boven-k-sampling |
Streaming
De --stream vlag maakt real-time audio-uitvoer mogelijk. Audio brokken worden uitgezonden als ze worden gegenereerd, zodat het afspelen kan beginnen voordat de volledige respons is voltooid. Dit is vooral handig voor interactieve toepassingen waar lage latentie belangrijk is.
Prestaties
| Metrisch | Waarde |
|---|---|
| Real-time factor (RTF) | ~1,4 (8-bits, bijna realtime) |
| Stap-latentie | ~112 ms/step op M2 Max (8-bit) |
| Modelgrootte (8-bits) | ~9,1 GB |
| Piek RAM (8-bit) | ~11 GB |
| Modelgrootte (4-bit) | 4,9 GB |
| Piek RAM (4-bit) | ~7 GB |
PersonaPlex 7B (8-bit) vereist ten minste 24 GB RAM. De 4-bits variant past op 16 GB apparaten maar produceert gedegradeerde output. Op 8 GB apparaten past geen van beide varianten. Gebruik --compile voor de beste prestaties op ondersteunde hardware.
Model Varianten
| Model | Grootte | HuggingFace |
|---|---|---|
| PersonaPlex-7B (8-bit) aanbevolen | 9,1 GB | aufklarer/PersonaPlex-7B-MLX-8bit |
| PersonaPlex-7B (4-bit) | 4,9 GB | aufklarer/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"))