Awtomatikong salin · Orihinal sa Ingles

Mga Modelo sa Pagsasalita-to-Speech

Sinusuportahan ng Soniqo ang dalawang katutubong MLX modelong pamilya para sa usapang pagsasalita-to-speech: PersonaPlex 7B at VoiceChat 11B. Pareho silang gumagamit ng pagsasalita at gumagawa ng modelong audio nang direkta, ngunit gumagamit sila ng iba't ibang arkitekturang duplex at mga kontratang runtime.

Pumili ng modelo

Huwaran Ang huwaran sa pag - uusap Pinakaangkop
PersonaPlex 7BSidomultaneous full duplex na may Moshi, Depiner, at Mimi Labis - labis na pakikinig/magsalita ng paggawi at 18 piling tinig
VoiceChat 11BContinuous, frame-synchronous duplex kasama ang FastConformer, Nemotron-H, TNT-TTS, at isang neural codec80 ms drop frames, text/function events, at checkpoint-native speech

Ito ay mga komparatibong speech-to-speech na modelo. Hibiki Gayundin ang tuwirang pagsasalita sa pamamagitan ng mapa, subalit ang atas nito ay dumadaloy na salin ng pananalita, kaya ito'y pinatutunayan nang hiwalay.

PersonaPlex 7B

Buong-duplex na speech-to-speech na diyalogo modelo batay sa modelong bidyo Moshi arkitektura (Kyutai). PersonaPlex 7 Ang B ay gumagawa ng binibigkas na mga sagot mula mismo sa binibigkas na input — walang intermediate text pipeline na kailangan. 18 mga preset ng tinig at makukuha sa 8--bit (ibinibigkas) at 4-bit quanization. 8-bit ang default — ito ay 30% mas mabilis at lumilikha ng magkakaugnay na mga pagtugon, samantalang ang 4-bit ay nagpapahina sa kalidad ng output.

VoiceChat 11B

Duplex speech-to-speech reference: SALM-Duplex: Diksyunaryo at Direksyon Duplex Pagmomodelo para sa Wikang Pagsasalita-to-Speech (Interspeech 2025), na binanggit ng NVIDIA's terial VoiceChat model card.

M5 Pro, 48 GB, Paglaya, 80 Ang mga m ay nabubuhay nang matatag, protektadong-ulo INT5: Sinukat ng tatlong kontroladong run ang buong-pipeline RTF 0.94, 0.92, at 0.92, may kinalaman sa 8.70 Ang pinakamataas na bilang ng GB na RSS. ay unang dumating sa binibigkas na teksto 44.3–46.7 mga m at ang mga audio sa unang playable 74.0–76.4 Ang mga ito ay mga hot compute na bilang, hindi pinag-aaralan ang turncy; optimized na mga bilang INT8 ang pagtatanghal ay hindi pa naisasauli sa dati.

VoiceChat ang isa pang katutubo MLX oras ng pagsasalita-to-speech sa speech-swift. Pinagsasama nito ang causal FastConformer perception, Nemotron-H duplex text/function channels, standale text-conditioned EXTS, at isang standing-TTS 22.05 Tinatanggap ng isang sesyon ang kHz neural codec 16 kHz mono audio nang patuluyan at nagbabalik ng mga pangyayari sa teksto at isa pa 1,764-sample output frame bawat isa 80 Mga m.

Gamitin VoiceChatModel.load(from:), simulan ang isang VoiceChatSession, at kumain ng audio pushAudio. Ang isang buong bungkos ay dapat maglaman encoder/, llm/, at tts/; kinatatakwil ang mas lumang pang-unawa-lamang mga bungkos.

Kasalukuyang pagtatanghal

INT5 Ang mga tagatustos ay nag - aalis ng tubig sa ilalim RTF 1 tungkol sa pagsubok M5 Pro. Ang lahat ng tatlong ito ay may kabuuang bilang din/frame p95 sa ibaba 80 mga m, sa 76.2–78.6 Ang mga m; ang deadline headroom samakatuwid ay nananatiling makitid. Treatise model turn beging at hardware compency bilang hiwalay na mga sukat.

Mabuhay VoiceChat CLI

Makipag - usap Soniqo paggamit ng kumpletong protektadong-ulo INT5 bungkos, pinatatakbo ng NVIDIA Nemotron VoiceChat 11B. Ang utos ay patuloy na bumibihag at naglalaro ng playback sa isang AVAudioEngine para sa Apple AEC, dinadaanan ang RNN-T na mga kapsiyon ng tagagamit, at mga dula 22.05 kHz model audio habang patuloy na nakikinig.

Ang default Soniqo advanced ay may kakayahang-grounded: itong CLI ay maaaring makipag-usap at sumagot sa mga tanong, ngunit hindi ito maka-access sa mga kalendaryo, paalaala, apps, accounts, devices, o panlabas na serbisyo. Para sa mga humihiling ng Soniqo

speech voice-chat

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

Mga kasangkapang MCP

Ang MCP ay may kapansanan malibang --mcp-config ay ibinibigay. Ang provider-neutral JSON file ay maaaring maglunsad ng anumang stdio MCP server at malinaw na pumili ng mga kasangkapan na nakadiskubre ng VoiceChat. Ang sadyang makitid na Apple Reminders halimbawa ay naglalantad ng talaan, lumikha, at update workflows; ang mga configres ay maaaring makatulong sa iba pang mga kasangkapang server:

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

Ang nakabulot na halimbawa ay nag - iinkorte ng isang ventKit-backed provider sa likod ng isang browser apple-reminders-eventkit Ang pag-aangkop. VoiceChat ay naglalantad lamang ng kanonikal na list_reminders, create_reminder, at update_reminder ang delete, listahan-mutasyon, kalendaryo, o mga subtask aksyon ng provider.Ang pagkakatuklas ng listahan ay nananatiling pribado sa nag-aangkop. Ang isang paalala at ang kaukulang petsa nito ay ginagawa sa isang EventKit na pag-iipon, na iniiwasan ang dating particular-sulat na kabiguan na maaaring mag-iwan ng isang hindi naihandang paalala.Ang provider ay maaaring magtipon ng maliit na bakterya nito. Swift katulong sa unang gamit, kaya ang startup ay may hiwalay na standing 60- Pangalawang allowance; normal na mga tawag sa kagamitan ay nagpapanatili sa 15- Pangalawang default.

Tanging ang enabledTools Ang mga kagamitan ay isinusulat sa modelo, na may pinakamaraming lima bawat sesyon, maliban na lamang kung malinaw na nakatala ang mga ito sa mga listahan readOnlyTools. Isulat ang default sa --mcp-write-policy allow, kaya ang isang kumpletong katutubong tawag na slaims kaagad at ang tunay na provider na resulta nito ay nagpapatakbo ng tugon; ang mga paalaala demo ay hindi nagdaragdag ng ikalawang turnment turn.Ang isang magkatulad na natapos na sulat ay sinupil pa rin hanggang sa bagong akustikong gawain. confirm para sa maliwanag na modelo-mediated na kumpil o deny upang sirain ang sulat.

Walang transcripted roker, regular-expression paterner, slot recoptor, regulator draft state, recifled-name finander, o scripted assistant speech. Ang checkpoint lamang ang pumipili ng kasangkapan at mga argumento. Ang mga coordinator configurations ay nagpapangyari sa-tool na maging miyembro at JSON types, naglalapat ng patakaran, nag-uumpisa ang MCP, at nagbabalik ng organisadong tagumpay o kabiguan sa pamamagitan ng sinanay na work-response channel. Ang mga resulta ng provider, hindi tanggap na mga argumento, hindi tanggap ang mga sulat, at mga kasangkapan ay nagsisimula ng bagong stainterpointition hanggang sa pamamagitan ng isang assistant na openscreadyturedrewrewreadly prescleclecrement habang ang mga prescrement na ito ay nangangailangan lamang ng prainment. name para sa paglalang at pag - uuri sa lahat ng talaan ng mga Pangyayari list_reminders Ito ay naghaharap ng mahabang provider na mga UUID bilang matatag, sesyon-scoped na mga reperensiya gaya ng r1, pagkatapos ay lutasin ang isang eksaktong model- returned reference bago update_reminder Ito ay ang pagkawala ng ID compression, hindi transcript o layon na magtugma.Ang nawawala o hindi tanggap na mga halaga ay bumabalik sa modelo para sa natural na paglilinaw; ang mga ito ay hindi kailanman tahimik na naililipat mula sa naka-sign na transcription.

Ang Model-native call JSON ay tumatakbo bilangynchronouslyly sa isang cached tahimik na embending. Minsang bukas ang isang tawag, ang sapilitang-PAD text channel ay nilalampasan ang hindi ginagamit na empirikal nito 131,072-row projection. Pagkatapos ng EOTC, ang dalawang-phase path ay pinagyeyelo ang pinagsaluhang wika at previder-TTS timeline habang ang panlabas na resulta ay naka-spendge, magkapares NVIDIA''s reference pambalot; ang mga frame ng mikropono ay nagpapatuloy sa pamamagitan ng perception at RNN-T ngunit hindi isiningit bilang sintetikong mga posisyon ng PAD. Ang kilalang resulta ay nag-ebolb muli ng mga tokens sa mga naka-arted 16-Tokken causal-prefill na mga tipak, ang sesyon ay nagbibigay sa pagitan ng mga tawag na mga patlang at ang resulta'y mga pack, panlabas na mga panlabas MCP Ang I/O ay tumatakbo sa isang hiwalay na gawain, at live confession platform platforms platform pa rin ang RNN-T morps. Ang retailed user speech re-enter ang partite timeline sa hindi hihigit sa isang lumang semantic frame kada live callback; ang kasalukuyang frame ay nananatiling queued, ang stained replay audio ay pipid, at ang mga naka-stack na mga posisyon ng CARTS ay nag-erecord sa kalaunan sa pagtatali ng walong-frame fixed. Ang live loop ay nagbabasa ng work at ang live loop revision. MCP Ang katayuan sa lipunan ay nakaiimpluwensiya sa bawat isa 160 Sa halip na gumawa ng ilang tawag sa bawat mikropono, iniuulat ng interactive dashboard ang aktibong phase ng kagamitan; ang organisadong benmark ay nagtatala ng mga katutubong decode, MCP round trip, resulta ng pagtutugma, model/cache compute, at live interleave Tumatagal nang magkahiwalay. NVIDIA' 40-frame safety fallback; ang isang dati nang-proposed na katutubong kagamitang kandidato ay maaaring gawin pagkatapos ng walong blankong frames.

Sa isang bakante M5 Gumamit ng problema 48 GB, ang tatlong katutubong mga pariralang pang-alaala-list ay umabot sa model-authored post-tool na pagsasalita 3.56–4.00 mga segundo pagkatapos ng dulo ng input na may nakatakdang 200 Ang Katutubong si JSON ay kumuha ng provider. 1.15–1.28 mga segundo para sa 27–31 mga hakbang; ang 67-Nagbunga ang lindol 0.58–0.72 Mga segundo sa limang prefill. Isang nakatutok na update regression ang kailangan 67 Mga katutubong hakbang / 5.25 mga segundo nang ulitin ng modelo ang isang makatotohanang EventKit UUD, laban 37 Mga hakbang / tungkol sa 2.29 mga segundo na walang - lunas r1 reference advision45% mas kaunting maliliit na hakbang at tungkol sa 56% oras ng decode. Isang hiwalay na two-second-provider stress ang nagpapanatili sa provider-wait na trabaho ng mikropono sa provier-wait 19.6 ms p95 at 19.8 Pinakamalalim na ms, kaya ang panlabas na I/O ay nagdaragdag ng pagkaantala sa pagtugon nang hindi nahahawakan ang paghuli. 118 ms mikropono-service p95 at 139 ms p95 Pagiging huli sa kabila pa roon 80 Ang mga ms input deadlines; ang huli ay naglalantad ng maikling resulta-sync queueing splits na nakatago sa pamamagitan ng scaper RTF. Ang lokal na ventKit ay nagbabasa ng kanyang sarili na sinusukat 358 mga m pagkatapos ng isa-panahon MCP Ang isang sinubok na pariralang panglikha ay isinalin ng tama ngunit piniling ordinaryong pananalita sa halip na katutubong tawag; ito ay nananatiling modelong kagamitan-selection na kalidad, hindi isang nakatagong runtime roker.

Ang convolusional na hangganan ay ang kabahaging Nemotron-H KV cache: ang ordinaryong resultang-kombinasyong pagsasalita ay hindi maaaring bumuo ng ikalawang independiyenteng causal na kinabukasan habang ang mga function mean ay nililikha o muling nilalaro. Soniqo recombinations confirmed, model-authored speech matapos ang <SPECIAL_22> ay nagsasara ng tugong lubos.

Ang mga batang MCP server ay nagmamana lamang ng mga mana PATH, HOME, temporary-directory, at locale variables.[kailangan ng sanggunian] Kailangang malinaw na ipasa ang mga sentials sa server's env Mapa; walang kaugnayang mga sekreto ng magulang-process ay hindi pasulong. Ang naka-ayos na utos ay tumatakbo pa rin sa lokal na may filesystem at application na mga pahintulot ng gumagamit, kaya gamitin lamang ang mga pinagkakatiwalaang MCP configuration file at mga paketeng server.

Ang 8- Ang function projection ay tungkol sa 518 MB. Sa panahon ng karaniwang pagsasalita, VoiceChat Pagtaya sa Isa lamang basyo 36 KB PAD/tool-start probe. Kung ang kasangkapan-bituin ay manalo bago ang hangganan ng pag-ikot, tanging ang kanyang tool-star 4,096-Ang mahalagang nakatagong kandidato ng frew-state ay pinananatili; full-vocabulary verification run kapag ang pinag-aralang BOS ay dumating o ang panghuling RNN-T safety endpoints. Para sa isang generic katutubong tawag, ang survified call na JSON pagkatapos ay tumatakbo sa ganap na language-model na bilis sa isang perception embending cached mula sa isang segundo ng katahimikan sa halip ng isang segundo sa halip na minsan sa bawat bawat isa 80 balangkas ng mikropono. MCP ang resulta, VoiceChat Muling i-play ito nang naka-drove 16-token causal-prefill na mga tipak, iniingatan ang sinanay na function feedback at wika/speech cache state nang walang isa man 11B decode per league tonift. Ang sesyon ay nagbibigay-direksyon sa pagitan ng mga nalikhang tawag na mga token at rerection-prefill na mga tipak kaya ang live confession, RNNN-T na mga kapsiyon, at suspensiyon ng surveilation ay nagpapatuloy; ang hiwalay na tawag at mga response entation ay gumagawa ng disformed PAD-lamang na trabaho sa isang maliwanag na retry sa halip na isang permanenteng strick.

Tatlong prebuffer ng playback 80 mga balangkas (mga kuwadro240 ms) sa pamamagitan ng default. Pagkatapos ng isang speaker gap, ito ay naghihintay ng isang walong-frame recovering cushion bago muling mag-restarting. ang voice cleance ay bumababa mula walo hanggang dalawang hakbang pagkatapos ng unang-panimulang hakbang pagkatapos ng ang bread 88 ms callback o kapag tatlong frames queue; a 120 Ang ms callback, anim na queued frames, o input resynchronization ay direktang napupunta sa isang emergency na hakbang. Ang akostikong pagbabagong-dalisay lamang angiperception, RNNN-T, at estado ng wika ay nananatiling buo. Kung ang queue ay umaabot pa rin sa default nitong walong-frame/.640 Ang limitasyon ng ms, tanging ang minimum na pinakamatandang audio ng mikropono na kinakailangan upang tanggapin ang sariwang input ay itinatapon. Ang surgerated ay ginagamot bilang isang episode ng paggaling, at ang isang user turn na nakumpirma na ng RNNN-T ay nananatiling armado sa halip na binura ng mga paulit ulit na reconstructure. Ang mga salita sa Skipped ay minarkahan pa rin at maaaring mangailangan ng pag-uulit.

Ang dashboard ay gumagamit ng human-facing metrics: behind ay queued mikropono audio, RTF 0.93× ay ang rolling means sa ibabaw ng pinakabagong 120 mikropono callbacks of wall time na hinati ng 80 ms of audio (sa ibaba 1 stand up; sa itaas 1 ay bumabagsak sa likuran), at sa itaas ZxQXZ. last 74 ms for 80 ms audio ay nangangahulugang ang pinakabagong callback ay kinuha 74 Ang mga larong replay ay hindi ibinibilang na ekstrang audio stampions. RTF ay isang bintana, maaari itong manatiling mataas sa sandali pagkatapos ng isang magastos na operasyon kahit na kung kailan last Sa ibaba ng usapan, speaker gaps, old-audio skips, at microphone audio skipped ang maliwanag na ipinakikita ng paggaling. PLEASE REPEAT ay lumilitaw lamang kapag ang audio ng mikropono ay aktuwal na natigil.

Ginagamit ng microphone mode ang NVIDIA-style RNNN-T turn-come sa pamamagitan ng default. Ang transcript head ay nagreresulta sa unang prediksiyon nito sa bawat isa 80 Ang mga ms ay nagreresulta bilang blanko o hindi-blank. ang dalawang mga panimulang balangkas ng pagsasalita at ang tatlo sa mga kalaunang ikot ay nananatiling mga suspek-activity fallbacks, habang ang isang kinikilalang lexical staken ay agad na nag-aalsa ng isang walang-malay na pagliko kaya ang isang kumpletong iskeyet na isenso o ixian? ang EXTH ay hindi maaaring lumitaw sa kapsiyon at pagkatapos ay maghintay ng higit pang pagsasalita. ang Punctuation at hindi alam na mga etiketa ay hindi gumagamit ng shortcut na iyon. VoiceChat'Ang mga pinag-aaralang prediksiyon ng BOS/EOS ay nananatiling normal na mababang-latensiya na mga desisyon. apatnapung blankong frames (EOS)3.2 Mga segundo) pwersa BOS lamang kung ang marunong na ulo ay hindi kailanman nagbubukas ng tugon, at apatnapung sariwang hindi-blank frames ay nagbibigay ng tugmang RNN-T EOS safety fallback. Ang speech counter reconstructed kapag ang speech counter revivals. Soniqo Nagsisimula, kaya ang gawain mula sa kompletong gumagamit ay hindi agad mapuputol ang pagtugon. Ang bawat audio frame ay umaabot pa rin sa modelong duplex; gamitin --no-rnnt-turn-taking Upang iwanan ang BOS/EOS ay lubos na nagpapasiya sa may pinag-aralang pinuno ng wika. Ang dashboard ay nag-uulat ng RNN-T gabara-ins hiwalay mula sa playback underruns.

Ang RNN-T frontend ay tumutugma sa repleksiyong pandingding ng NeMo sa bawat alun-gulong mikropono-window gilid. Ito ay nag-aalis ng zero-panding dismatch na maaaring bumago sa mga marginal na sakim na mga desisyon ng token's compact 1,024-token transcript head na may pangkalahatang malaki-vocabulary ASR.

Sa normal na mode, ang model-native BOS ay sinupil hanggang ang user speech ay nakumpirma, kaya ang Soniqo ay hindi unang nagsasalita. --greet Malinaw na pinapayagan ang simulang pagbati. Pagkatapos marinig ang nilalamang tugon, ang blankong PAD ay nananatili sa loob ng bukas na ikot para sa hindi bababa sa 16 frames at para sa tatlong frames kada nilalaman na may katiyakan kapag mas matagal. Ang unang sobrang brole na PAD ay nagsasara sa lohikal na pagliko. Ang nilalamang ito-scated tail ay nag-iingat ng mga naantalang salita na ang isang nakapirmeng 1.28-second cutoff ay maaaring mapipi.

Ang interactive mode ay gumagamit ng isang nakapirmeng dashboard sa salit-salit na screen ng terminal, kaya ang status updates ay muling nag-eere sa lugar sa halip na punan ang rollback. Gamitin ang --plain para sa append-lamang output.

Para sa lokal na pagsusuri, --debug-timeline ay nagreresulta sa bawat user at Soniqo na parirala at naglalagay ng parsed na katutubong mga argumento sa tawag, MCP start/completion, at resultang-cache conclusion sa parehong kronolohiya.Ito rin ay nagmarka ng mga marka. pronunciation ended Sa huling naririnig na nalikha-PCM window; ito ang model-output time, hindi speaker-device na pagkumpleto. Ang demo ay sadyang nag-aalis ng mga makasaysayang phase-tumining blocks; detalyadong katutubong-decode, provider, cache, at mikropono-pressure metrics ay nananatili sa mga kwadrado voicechat-bench Ang timeline ay maaaring maglantad ng mga argumento sa kagamitan, kaya huwag itong gamitin sa mga trosong pinagsaluhan.

Sinusukat sa Pamamagitan ng Buháy na mga pamagat

Ang tatlong M5 Pro 48 GB release ay may sukat na RTF 0.92, kabuuang-frame p95 74.8–75.8 ms, ang unang playable audio 74.2–74.9 ms, at mga 8.74 GB peak RS. Transcript at tugon ay magkatulad sa ibayo ng run.

Ang mga sesyon ng live ay nagpapanatili sa mga immutable 37-frame speaker leader plus 20 segundo ng kamakailang kasaysayan ng CAR-TS, habang ang Nemotron-H ay nagpapanatili ng semantikong usapang estado nang hiwalay.Ang PAD sa loob ng nilalaman-scaled akustikal na buntot ay iginawad nang normal; mamaya lamang tahimik na PAD ad explosives causally sa mga direksyon ng walo.Ito ay pumipigil sa TTS na pagpansin at mga walang ginagawa sa paglaki nang hindi na pinagpuputol ang binibigkas na tugon; ngunit hindi na tugon; mamaya ay ang binibigkas na PAD ay ang binibigkas; --live-speech-context-seconds 0 Nagbabalik ng buo TTS kasaysayan, at ang file mode ay nananatiling eksaktong full-history sa pamamagitan ng default.

Sa Isang Kuwarto 63.6- Pangalawa M5 Profile na may nilalaman-ligtas na buntot, ang live na landas ay sumusukat ng aggregate RTF 0.87, panghuling-winning RTF 0.71, 4.1 ms/frame final-window synthesis, 8.72 GB peak RSS, at 23.67 GB peak pisikal na footprint. Ang pagsasalita-aktibong walong-paa ay umabot sa mga bintana RTF 1.05 at 1.12, kaya ang interactive CLI ay gumagamit ng isang reverseibleng two-steep fallback at one-steep emergency mode. Ang isang-paste synthesis ay nag-aatas sa lahat ng mga 31 Ang RVQ codebooks sa isang pass; ito ay nag-iingat ng live scatch ngunit ito ay hindi akustikong parsiyal na may walong-paste iskedyul. Sequential at naka-publish ng mga walang-hanggan-cache states ay may minimum na cosine 0.9999999.

Para sa audio diagnosis, ang benchmark ay naghahambing ng naka-taling live codec-winningow na isinalin sa isang patuloy na full-context na pag-render. Ang isang mahabang paghinto na naroroon sa parehong ito ay ginawa ng EXTS o ang codec, hindi sa pamamagitan ng speaker queue; isang dibersity na matatagpuan lamang sa live na pag-play ng mga puntos tungo sa codec-predow tahi. Ang speaker cluster ay nananatiling isang hiwalay na playback-underflow underflowed metric. Ang isang deadence-pop detector ay nagrerereresult. Ang mga after ay nagresult-op scan sa mga aft-in sa mga adflusion 50 Mga m ng patuloy na pagsasalita at mga bandila ang nakatikim ng mga pagtalon sa ibabaw ng dalawang ito 0.05 amplitude at anim na beses ng di-nagbabagong-speech p99 Maaaring magtakda ng mga eksena maximum_suspect_onset_transients hanggang sero, samantalang ang pakikinig ay nananatiling panghuling pagsusuri sa kalidad.

PersonaPlex arkitektura at gamit

PersonaPlex ay isang multi-stream autoregressive model na may tatlong mga pangunahing bahagi:

Nakikipagtulungan Mga Detalye
Temporal Transformer32 patong, dip=4096, 32 ulo, SwiGLU (nakatagong_scale=4.125), RoPE, 8-bit quanized (default)
Ipinronta6 patong, dip=1024, 16 heads, MultiLinear (sanhi ng bigat_per_steep=gre), dep_q=16
Mimi Codec16 codebook, 12.5 Hz frame rate, 24 kHz audio output

Ang modelong mga proseso 17 sapa Kasabay nito: 1 agos ng teksto + 8 gumagamit ng mga audio stream + 8 agent audiostreams. Ang arkitekturang ito ay nagpapangyari ng full-duplex na pag-uusap kung saan ang modelo ay maaaring sabay na makinig at magsalita.

Mga Presensiya ng Tinig

PersonaPlex ay kinabibilangan ng 18 natayong-in voice pressets sa ibayo ng natural at iba't ibang mga estilo:

Kategorya Mga Preset
Likas na BabaeNATF0, NATF1, NATF2, NATF3
Likas na LalakiNATM0, NATM1, NATM2, NATM3
Iba't Ibang BabaeVARF0, VARF1, VARF2, VARF3, VARF4
Iba't Ibang LalakiVARM0, VARM1, VARM2, VARM3, VARM4

Panloob na Monologue

Ang PersonaPlex ay lumilikha ng dalawang magkakahilerang sapa sa bawat hakbang: 8 audio codebook tokens for the Mimi codec at isang teksto na mawari para sa monologue ng modelo.Ang teksto stream ay kung ano ang modelo ay cifintual peripher habang ito ay nagsasalita – ito ay maaaring bahagyang mag-iba mula sa pangwakas na audio, ngunit sa pagsasagawa ay sumasalamin sa binibigkas na tugon nang malapit upang magamit bilang isang live na transcription.

Ang mga token ng teksto ay nagbabalik bilang hilaw na skriptionPiece na pirasong IDs.I-decode ang mga ito sa pamamagitan ng SentencePieceDecoder yaon pang PersonaPlex mga barko:

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

Sa pamamaraan ng pag - agos, ang respondStream ay naglalabas ng textTokens na mga tipak habang ginagawa ang mga ito — i - decode ang mga ito nang inkremental upang i - drive ang isang buháy na kapsiyon samantalang ang audio ay lumilikha pa. Ang --transcript flag ay eksaktong gumagawa nito sa likod ng mga eksena.

Kung bakit ito mahalaga: SentencePieceDecoder ay itinatayo sa pinagsaluhan AudioCommon.SentencePieceModel Ang mambabasa ng protobuf, kaya ang PersonaPlex, OmnilingualASR at ang anumang hinaharap na servicePiece-based model decode sa pamamagitan ng parehong tonizer pagpapatupad. Tingnan ang hinaharap na compilation. Tumutukoy sa TEKSPieceModel.

Ang Sistema ay Nag - uudyok

Idaan ang anumang sistema ng kaugalian na nag - uutos bilang isang simpleng tali — walang panlabas na patlang na kinakailangan:

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

O kaya'y gumamit ng set na ginawa-in:

Paggamit ng CLI

Ituro ang isang binibigkas na tugon mula sa isang audio input:

# 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

Mga Mapagpipilian

Mapagpipilian Paglalarawan
--input Kailangan ang input audio file (WAV)
--voiceVoice preset pangalan (hal.g., NATM0, VARF2)
--system-prompt Sistemang mabilis na preset: katulong, nakatutok, parokyano-service, guro
--system-prompt-text Ang sistema ng adwana ay nag-uumpisa ng teksto (overrides --system-prompt)
--max-steps Mga hakbang sa henerasyon ng Maximum
--streamEmit audio clusters sa buong panahon ng salinlahi
--compileGumamit ng MLX na tinipon para sa mas mabilis na salinlahi
--transcriptIsulat ang mga kopya sa tabi ng audio
--json Ang output ng katawan na may metadata

Maaari ring maging nangingibabaw ang sampling parameter:

Mapagpipilian Pagkawasak Paglalarawan
--audio-temp0.8 Isang kolektibong anino ng temperatura
--audio-top-k250 Isang komputasyonal na pang-itaas na halimbawa
--text-temp0.7Text na may palatandaang temperatura
--text-top-k25Text toll-k mga halimbawa

Pag - aaksaya

Ang --stream flag ay nagdudulot ng real-time audio output. ang mga seksyon ng audio habang ang mga ito ay nililikha, kaya ang playback ay maaaring magsimula bago ang ganap na pagtugon. Ito ay partikular na kapaki-pakinabang para sa interaktibong aplikasyon kung saan ang mababang mga bagay na latency.

Pag - aasikaso

Masalimuot Halaga
Real-time factor (RTF)°1.4 (8-bit, malapit sa real-time)
Hakbang na latency°112 ms/pag-akyat sa M2 Max (8-bit)
Modelong sukat (8-bit)°9.1 GB
Peak RAM (8-bit)°11 GB
Modelong sukat (4-bit)°4.9 GB
Peak RAM (4-bit)°7 GB
Mahalaga

Ang PersonaPlex 7B (8-bit) ay nangangailangan ng hindi bababa sa 24 GB ng RAM. Ang 4-bit variant ay umaakma sa 16 GB devices ngunit gumagawa ng mababang output. Sa 8 GB device, hindi rin magiging akma ang variant. Gamitin ang --compile para sa pinakamahusay na pagganap sa suportadong hardware.

Modelong mga Variante

Huwaran LakiHuggingFace
PersonaPlex-7B (8-bit) mungkahi9.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"))