Maskinoversettelse · Engelsk original
Tale-til-tale modeller
Soniqo støtter to innfødte MLX modellfamilier for samtaletale-til-speech: PersonaPlex 7B og VoiceChat 11B. Begge bruker tale og genererer modelllyd direkte, men de bruker ulike tosidige arkitekturer og løpskontrakter.
Velg en modell
| Modell | Kontaktmodell | Beste passform |
|---|---|---|
| PersonaPlex 7B | Simultan full dupleks med Moshi, Depformer, og Mimi | Overlappende lytte/speak atferd og 18 valgbare stemmer |
| VoiceChat 11B | Kontinuerlig, rammesynkron dupleks med FastConformer, Nemotron-H, EAR-TTS og en neural codec | 80 ms streaming rammer, tekst/funksjon hendelser og kontrollpunkt-nativ tale |
Dette er tale-til-speech-modeller. Hibiki kartlegger også tale direkte til tale, men oppgaven er å streame taleoversettelse, så det dokumenteres separat.
PersonaPlex 7B
Full-duplex tale-til-speech dialogmodell basert på Moshi arkitektur (Kyutai). PersonaPlex 7B genererer tale svar direkte fra talte inngang - ingen mellomliggende tekst rørledning kreves. Modellen skip med 18 stemmeinnstillinger og er tilgjengelig i 8-bit (anbefalt) og 4-bits kvantisering. 8-bit er standard - det er 30% raskere og gir sammenhengende svar, mens 4-bits nedgraderer utdatakvalitet.
VoiceChat 11B
Duplex tale-til-speech referanse: SALM-Duplex: Effektiv og direkte duplex modellering for tale-til -tale språkmodell (interspeech 2025), sitert av NVIDIA er oppstrøms VoiceChat modellkort.
M5 Pro, 48 GB, Release, 80 ms live cadence, beskyttet-hode INT5: tre kontrollerte løp målt helpipelinje RTF 0,94, 0,92 og 0,92 med ca. 8,70 GB topp RSS. Første talte tekst kom i 44,3 - 46,7 ms og første spillbare lyd i 74,0-76,4 ms. Disse er varme beregningsfigurer, ikke lært dreietakende latens; optimalisert INT8 ytelsen er ennå ikke blitt målt på nytt.
VoiceChat er den andre innfødte MLX tale-til-speech-kjøretid i speech-swift. Den kombinerer årsak FastConformer-oppfattelse, Nemotron-H duplex tekst/funksjonskanaler, frittstående tekst-kondisjonert EAR-TTS og en 22.05 kHz nevral codec. En sesjon aksepterer 16 kHz mono-lyd kontinuerlig og returnerer teksthendelser pluss en 1.764-prøveutgangsramme hver 80 ms.
Bruk VoiceChatModel.load(from:), start en VoiceChatSession, og mate lyd med pushAudio. En komplett pakke må inneholde encoder/, llm/ og tts/
INT5 opprettholder aggregert gjennomstrømning under RTF 1 på testet M5 Pro. Alle tre løpene holdt også total/frame p95 under 80 ms, ved 76,2-78,6 ms; deadline hoderom forblir derfor smal. Behandle modell dreiestart og maskinvare beregning latens som separate målinger.
Live VoiceChat CLI
Tal med Soniqo ved å bruke det komplette beskyttede hodet INT5 bundten, drevet av NVIDIA Nemotron VoiceChat 11B. Kommandoen fortsetter å fange og spille av på én AVAudioEngine for Apple AEC, strømmer buntens RNN-T brukertekster, og spiller 22.05 kHz-modelllyd mens den fortsetter å lytte.
Standarden Soniqo spør er evne-grunnlagt: denne CLI kan konversere og svare på spørsmål, men den kan ikke få tilgang til kalendere, påminnelser, apper, kontoer, enheter eller eksterne tjenester. For disse forespørsler Soniqo klart sier det ikke kan utføre handlingen, ber ikke om en bekreftelse det ikke kan oppfylle, og antyder kort hva brukeren kan gjøre i stedet.
speech voice-chat
speech voice-chat --input question.wav --output response.wav
Konfigurerbare MCP verktøy
MCP er deaktivert med mindre --mcp-config er levert. Leverandør-nøytral JSON-filen kan lansere en stdio MCP-server og velger eksplisitt hvilke verktøy som er oppdaget når VoiceChat. Den bevisst smale Apple Reminders-eksemplet eksponerer liste, opprette og oppdater arbeidsflyter; tilpassede konfigurasjoner kan aktivere andre serververktøy:
speech voice-chat \
--mcp-config Examples/VoiceChatMCP/apple-reminders.json
Det pakkede eksempelet pins en EventKit-støttet leverandør bak en apple-reminders-eventkit adapter. VoiceChat avslører bare kanonisk list_reminders, create_reminder, og update_reminder operasjoner - ikke leverandørens slette, listemutasjon, kalender eller underoppgavehandlinger. Listefunn forblir privat til adapteren. En påminnelse og dens forfallsdato er forpliktet i én EventKit lagre, unngå tidligere delvis skrivefeil som kan etterlate en uklassifisert påminnelse bak. Leverandøren kan kompilere sin lille Swift hjelper på første bruk, så oppstart har en separat 60-second-støtte; normale verktøysamtaler holde 15 -second standard.
Bare enabledTools vises til modellen, med maksimalt fem per økt. Verktøy skrives med mindre konfigurasjonen eksplisitt lister dem i readOnlyTools. Skriver standard til --mcp-write-policy allow, så ett fullstendig innfødt oppringing kjører umiddelbart og dets virkelige leverandør resultat driver svaret; påmindelsesdemoen legger ikke til en andre bekreftelse. En identisk ferdig skriving er fortsatt undertrykt til frisk akustisk aktivitet. Bruk confirm for eksplisent modellmediert bekreftelse eller deny for å deaktivere skriving.
Det er ingen transkripsjonsrouter, regulær-uttrykks-matcher, spilleautomatutdrag, påminnelses-utkast til tilstand, argumentreparasjon, tale-navnsoppløser eller skriptadministrasjonstale. Sjekkpunktet alene velger verktøyet og argumentene. Koordinatoren validerer aktivert-verktøymedlemskap og JSON- typer, bruker retningslinjer, ringer MCP, og returnerer strukturert suksess eller feil gjennom den trente funksjonsresponskanalen. Feil leverandørresultater, ugyldige argumenter, nektet skriver og utilgjengelige verktøy avbryter ny funksjon inntil kontrollpunktet åpner en talet assistentsving. Dette hindrer en stille umiddelbart-reparasjonssløyfe mens etterlater senere retries-modell-kontrollert. Påminnelsesfasaden krever bare en ny funksjon som åpnes. name for opprettelse og planlegger alle EventKit-lister i én list_reminders Les. Det presenterer lange leverandør UUIDs som stabile, sesjon-synkroniserte referanser som r1, deretter løser en nøyaktig modell-omvendt referanse før update_reminder kjøring. Dette er tapsfri ID-kompresjon, ikke transkripsjon eller intensjon matching. Manglende eller ugyldige verdier går tilbake til modellen for en naturlig avklaring; de er aldri lydløst merket fra den viste transkripsjonen.
Modell-nativt ring JSON kjører asynkront på en cached stillhet einnbygging. Når et anrop er åpent, den tvangs-PAD tekstkanalen hopper over sin ubrukte 131,072-row-projeksjon. Etter EOTC fryser tofasestien det delte språket og EAR-TTS-tidlinjen mens det eksterne resultatet venter, samsvarer NVIDIA referanseomslag; mikrofonrammer fortsetter gjennom oppfatning og RNN-T, men er ikke satt inn som syntetiske PAD-posisjoner. Kjente resultatsymboler gjenspilles i avgrenset 16-token årsak-prefyll biter. Sesjonen gir mellom anrop tokens og resultat satser, eksterne MCP I/O kjører i en separat oppgave, og levende mikrofonoppfattelse pluss RNN-T-tekster forblir kvalifisert gjennom hele. Oppholdt brukertale går inn i den delte tidslinjen på ikke mer enn én gammel semantisk ramme per levende tilbakekallelse; den aktuelle rammen forblir kølig, utløpt replay lyd er dempet, og inaktive EAR-TTS-posisjoner synkroniser senere i avgrenset åtte-rammebiter. Den live loop leser sammenhengende funksjon og MCP Statusbildebilder hver 160 ms i stedet for å gjøre flere skuespillersamtaler etter hver mikrofonramme. Den interaktive dashboard rapporterer den aktive verktøyfasen; den strukturerte benchmark records innfødte dekode, MCP rundtur, resultatsynkronisering, modell/cache-beregning, og live interleave Rest separat. Vanlig samtale og strege-in holde NVIDIA 40-frame sikkerhetsreservasjon; en allerede foreslått innfødt verktøykandidat kan forplikte seg etter åtte tomme rammer.
På en ledig M5 Pro med 48 GB, tre innfødte påminnelse-liste fraser nådde modell-autorisert post-tool tale 3.56–4.00 sekunder etter slutten av inngangen med en fast 200 ms leverandør. Native JSON tok 1.15–1.28 sekunder for 27–31 trinn; 67-token resultat tok 0.58–0.72 sekunder i fem forhåndsfyll. En fokusert oppdatering regresjon kreves 67 innfødte trinn / 5.25 sekunder når modellen gjentatte en realistisk EventKit UUID, versus 37 trinn / om 2.29 sekunder med tapsløst løst r1 referanser45% færre token-trinn og om 56% mindre dekodetid. En separat to-sekunders stress holdt leverandør-vent mikrofon arbeid på 19.6 ms p95 og 19.8 ms maksimum, så ekstern I/O legger til svarforsinkelse uten å holde fangst. En endelig ren kjøre målt 118 ms mikrofon-service p95 og 139 ms p95 senaness utenfor 80 ms inngangsfrister; sistnevnte eksponerer korte resultat-sync-køling sprekker skjult av forgrunn RTF. Den lokale EventKit leste seg selv målt 358 ms etter en gang MCP oppstart. En testet opprette frase ble transkribert riktig, men valgt ordinær tale i stedet for et innfødt kall. Dette forblir modell verktøyvalg kvalitet, ikke en skjult kjøretid ruter.
Konvalusjonsgrensen er den delte Nemotron-H KV-bufferen: vanlig resultatkondisjonert tale kan ikke danne en annen uavhengig årsaks fremtid mens funksjonssymbolene genereres eller spilles på nytt. Soniqo gjenopptar sammenhengende, modellert tale etter <SPECIAL_22> lukker verktøyresponsen. Full overlapping av vilkårlig tale vil kreve en spekulativ andre cache og flette policy, eller en separat trent funksjonsdekoder.
Barn MCP servere arver bare PATH, HOME, midlertidige kataloger og lokale variabler. Pålitelighetene må sendes eksplisitt i serverens env kart; ikke-relaterte morprosesshemmeligheter videresendes ikke. Den konfigurerte kommandoen kjører fortsatt lokalt med den aktuelle brukerens filsystem og programrettigheter, så bruk bare pålitelig MCP konfigurasjonsfiler og serverpakker.
Den 8-bit funksjonsprojeksjon handler om 518 MB. Under ordinær tale, VoiceChat vurderer bare en cache 36 KB PAD/tool-start-sonde. Hvis verktøystart vinner før vendegrensen, er det bare dens 4,096-verdi skjult-state kandidat holdes; full-vocabulary verifisering kjører når lært BOS kommer eller det endelige RNN-T sikkerhets endepunktet utløper. For et generisk innfødt kall, verifisert oppringing JSON deretter kjører med full språk-modell hastighet på en oppfatning innesluttet cache fra ett sekund av stillhet i stedet for én gang per 80 ms mikrofonramme. En gang MCP Resultatet er kjent, VoiceChat Replays det i bundet 16-token årsaks-fyll biter, bevare den utdannede funksjonen tilbakemelding og språk/speech cache tilstand uten én 11B dekoder per resultattoken. Sesjonen gir mellom genererte anropstoken og respons-prefillbiter så levende mikrofonoppfattelse, RNN-T-tekster og vedvarende avbruddsdetektering fortsetter; separate anrops- og responsgrenser konverterer feilformet PAD-beskyttet arbeid til en eksplisitt omprøve i stedet for en permanent bode.
Avspilling prebufferer tre 80 ms rammer (240 ms) som standard. Etter en høyttaler gap, det venter på en åtte-rammes gjenopprettingspute før omstart. Stemmeraffinering faller fra åtte til to trinn etter de første 88 ms tilbakekallelse eller når tre rammer kø; en 120 ms tilbaketrekking, seks kølige rammer, eller inngang resynkronisering går direkte til ett nødtrinn. Bare akustiske raffinering endringer - perception, RNN-T og språktilstand forblir intakt. Hvis køen fortsatt når sin standard åtte-ramme / 640 ms grense, bare den minste eldste mikrofon lyd som trengs for å innrømme frisk inngang er kassert. Overbelastningen behandles som en gjenopprettingsepisode, og en brukersving allerede bekreftet av RNN- T forblir bevæpnet i stedet for å bli slettet ved gjentatte tilbakestillinger.
Dashboardet bruker menneske-vendende metrikk: behind er køet mikrofon lyd, RTF 0.93× er den rullende gjennomsnittet over den nyeste 120 mikrofon tilbakekallinger av vegg tid delt av 80 ms av lyd (nedenfor 1 holder opp; over 1 faller bak), og last 74 ms for 80 ms audio betyr det siste tilbakekallet tok 74 ms. Replay hendelser regnes ikke som ekstra lydnevnere. Siden RTF er et vindu, kan det forbli høy kort etter en dyr operasjon selv når last har gjenopprettet seg. Under samtalen, speaker gaps, old-audio skips, og microphone audio skipped gjør gjenoppretting eksplisitt. PLEASE REPEAT Det vises først når mikrofonlyd faktisk ble hoppet.
Mikrofonmodus bruker NVIDIA-stil RNN-T-drevet som standard. Transkripsjonshodet behandler sin første prediksjon på hver 80 ms-ramme som tom eller ikke-blank. To initiale talerammer og tre senere svinger forblir vedvarende aktivitetsspalter, mens ett gjenkjent leksikon umiddelbart skyter en inaktiv dreie så en fullstendig \"ja\" eller \"Hvem er du?\" kan ikke vises i tekstteksten og deretter vente på mer tale. Teiknsetting og ukjente etiketter bruker ikke den snarveien. VoiceChat«s lærde BOS/EOS-prognosene» er de normale beslutninger om lav latens. 40 tomme rammer (3.2 seconds) tvinge BOS bare hvis det lærde hodet aldri åpner en respons, og førti friske ikke-blank rammer gir den matchende RNN-T EOS-sikkerhetsreservasjonen. Tale teller tilbakestilles når Soniqo starter, så aktivitet fra den ferdige brukerens tur kan ikke umiddelbart kutte responsen. Hver lydramme når fortsatt dupleksmodellen; bruk --no-rnnt-turn-taking å forlate BOS/EOS beslutninger helt til det lærde språkhodet. Dashboard rapporterer RNN-T-pige-ins separat fra avspillingsunderkjøringer.
RNN-T frontend matcher NeMos refleksjonsfyll ved hver rullende mikrofon-vinduskant. Dette fjerner en null-fyllende feil som kan endre marginale grådige token-beslutninger; det erstatter ikke kontrollpunktets kompakte 1.024-token transkripsjonshode med en generell stor-vocabulær ASR.
I normal modus blir modell-native BOS undertrykt til bruker tale er bekreftet, så Soniqo ikke snakker først. --greet tillater eksplisitt den første hilsen. Etter hørbar svarinnhold, blanke PAD forblir inne i den åpne svingen i minst 16 rammer og for tre rammer per innholdstoken når det er lengre. Den første overflødige tomme PAD lukker den logiske dreiingen. Denne innholdsskala halen bevarer forsinkede ord som en fast 1.28 sekunders avklipp kan dempe.
Interaktiv modus bruker et fast dashboard i terminalens alternative skjerm, så statusoppdateringer trekkes på nytt i stedet for å fylle tilbakerulling. Bruk --plain for å legge til kun utdata.
For lokal diagnose, --debug-timeline tidsstempler hver bruker og Soniqo fras og setter inn de tolkede innfødte samtaleargumentene, MCP start/fullføring, og resultat-kache synkronisering i den samme kronologien. Det markerer også pronunciation ended ved det endelige hørbare genererte PCM-vinduet; dette er modellutgangstid, ikke høyttaler-avslutting. Demoen med vilje omits historiske fasetimeringsblokker; detaljerte native-dekoder, leverandør, cache og mikrofontrykk metrikk forblir i voicechat-bench JSON. Tidslinja kan eksponere verktøyargumenter, så ikke bruke det i felles logger. Phase timers tilbakestille mellom innfødte dekode og leverandør vente.
Tre M5 Pro 48 GB utgivelseskjøringer målt RTF 0,92, totalramme p95 74.8-75.8 ms, første spillbar lyd 74.2-74.9 ms, og rundt 8,74 GB topp RSS. Transkript og svar var identiske på tvers av løpene.
Live sesjoner holder den immutable 37-rammehøyttalerprompten pluss 20 sekunder i den nylige EAR-TTS-historien, mens Nemotron-H holder semantiske samtaletilstanden separat. PAD inne i den innholds-skalerte akustiske halen blir gjort normalt; bare senere stille PAD-framskridelser forårsaket i partier på åtte. Dette hindrer TTS oppmerksomhet og inaktivt arbeid fra å vokse uten å kutte det talede svaret; --live-speech-context-seconds 0 gjenoppretter full TTS historie, og filmodus forblir nøyaktig full-historisk som standard.
I en 63.6-sekund M5 Pro profil med den innholdssikre halen, den levende stien målt aggregat RTF 0.87, sluttvindu RTF 0.71, 4.1 ms/frame final-window syntese, 8.72 GB topp RSS, og 23.67 GB topp fysisk fotavtrykk. Tale-aktive åtte-trinns vinduer nådd RTF 1.05 og 1.12, så den interaktive CLI bruker en reversibel to-trinns reserve og en-trinns nødmodus. 31 RVQ-kodebøker i et enkelt pass; det beskytter live fangst, men er ikke akustisk paritet med åtte-trinns tidsplan. Sequencial og satset inaktiv-kache-tilstander hadde minimal cosinus 0.9999999.
For lyddiagnose sammenligner referansen den avgrensede live codec-vinduet med en kontinuerlig full-context-gjengivelse. En lang pause i begge ble generert av EAR-TTS eller codec, ikke av høyttalerkøen; en utsettelse som bare finnes i levende gjengivelsespunkter mot kodek-vindusmasker. Høyttalerlucks forblir en separat avspillingsunderstrømsmetode. En dedikert start-pop-detektor skanner den genererte lead-in pluss de første 50 ms vedvarende tale- og flaggprøvehopp over både 0,05 amplitude og seks ganger den steady-speech p99 baseline. Scenarios kan sette maximum_suspect_onset_transients til null, mens perceptuell lytting forblir den endelige kvalitetsjekken.
PersonaPlex arkitektur og bruk
PersonaPlex er en multi-strøms autoregressiv modell med tre kjernekomponenter:
| Komponent | Detaljer |
|---|---|
| Temporal Transformer | 32 lag, dim=4096, 32 hoder, SwigLU (hidden_scale=4.125), RoPE, 8-bits kvantisert (standard) |
| Depformer | 6 lag, dim=1024, 16 hoder, MultiLinear (vekter_per_step=true), dep_q=16 |
| Mimi Codec | 16 kodebøker, 12,5 Hz rammehastighet, 24 kHz lydutgang |
Modellen behandler 17 strømmer samtidig: 1 tekststrøm + 8 brukerlydstrømmer + 8 agent lydstrømmer. Denne arkitekturen muliggjør full duplex samtale der modellen kan lytte og snakke samtidig.
Stemmeforutsetninger
PersonaPlex inneholder 18 innebygde stemmeinnstillinger på tvers av naturlige og varierte stiler:
| Kategori | Forvalg |
|---|---|
| Naturlig kvinne | NATF0, NATF1, NATF2, NATF3 |
| Naturlig Mann | NATM0, NATM1, NATM2, NATM3 |
| Varieret kvinne | VARF0, VARF1, VARF2, VARF3, VARF4 |
| Varierte Mann | VARM0, VARM1, VARM2, VARM3, VARM4 |
Indre Monologue
PersonaPlex genererer to parallelle bekker i hvert trinn: 8 lydkodeboksymboler for Mimi-kodeken og ett tekstsymbol for modellens interne monolog. Tekststrømmen er hva modellen er «tenking» som den snakker — den kan avvike litt fra den endelige lyden, men i praksis speiler den talede responsen tett nok til å bruke som en live-transkripsjon.
Teksten tokens kommer tilbake som rå setningPiece stykke IDs. Kode dem med SentencePieceDecoder som PersonaPlex skip:
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
I streamingmodus, respondStream sender textTokens biter som de produseres - dekode dem gradvis for å kjøre en live bildetekstvisning mens lyden fortsatt genererer. --transcript CLI flagg gjør nøyaktig dette bak scenene.
Hvorfor det betyr noe: SentencePieceDecoder er bygget på den delte AudioCommon.SentencePieceModel protobuf leseren, så PersonaPlex, OmnilingualASR og enhver fremtid SentencePiece-basert modelldekode gjennom den samme tokenizer-implementasjonen. Se SentenencePiecesModel referanse.
Systemprompter
Passer et tilpasset system som en vanlig streng - ingen ekstern tokenisering nødvendig:
let response = model.respond(
userAudio: audio,
voice: .NATM0,
systemPrompt: "You enjoy having a good conversation."
)
Eller bruk innebygde forhåndsinnstillinger:
assistant— generell brukshjelpelig assistent (standard)focused— Koncis, direkte svarcustomer-service— Politikk, løsningsorientert støttemiddelteacher- pasient, forklarende undervisningsstil
CLI bruk
Opprette et talesvar fra et lydinndata:
# 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
Alternativer
| Mulighet | Beskrivelse |
|---|---|
--input | Inndatalydfil (WAV, kreves) |
--voice | Stemmeforvalgt navn (f.eks. NATM0, VARF2) |
--system-prompt | Forhåndsinnstilling av systemet: assistent, fokusert, kundeservice, lærer |
--system-prompt-text | Egendefinert systemprompttekst (overstyrer --system-prompt) |
--max-steps | Maksimalt generasjonssteg |
--stream | Emit lydbiter under generasjon |
--compile | Bruk MLX kompilert inferens for raskere generasjon |
--transcript | Utskriv teksttranskripsjonen sammen med lyd |
--json | JSON-utgang med metadata |
Prøveparametre kan også overstyres:
| Mulighet | Standard | Beskrivelse |
|---|---|---|
--audio-temp | 0.8 | Audio token prøvetaking temperatur |
--audio-top-k | 250 | Audio token topp-k prøvetaking |
--text-temp | 0.7 | Prøvetemperatur på teksttoken |
--text-top-k | 25 | Tekst token topp-k prøvetaking |
Streaming
--stream flagget muliggjør sanntid lydutgang. Lydbiter sendes ut som de genereres, så avspilling kan begynne før full respons er fullført. Dette er spesielt nyttig for interaktive programmer der lav latens spiller rolle.
Ytelse
| Metrisk | Verdi |
|---|---|
| Sanntidsfaktor (RTF) | ~1.4 (8-biters, nær sanntid) |
| Trinn latency | ~112 ms/trinn på M2 Max (8-bit) |
| Modellstørrelse (8-bits) | ~9.1 GB |
| Peak RAM (8-bit) | ~11 GB |
| Modellstørrelse (4-bits) | ~4.9 GB |
| Peak RAM (4-bit) | ~7 GB |
PersonaPlex 7B (8-bit) krever minst 24 GB RAM. 4-bits varianten passer på 16 GB enheter, men produserer degradert utgang. På 8 GB enheter vil ingen variant passe. Bruk --compile for best ytelse på støttet maskinvare.
Modell Varianter
| Modell | Størrelse | HuggingFace |
|---|---|---|
| PersonaPlex-7B (8-bit) anbefales | 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"))