import{S as cv,i as pv,s as dv,e as o,k as c,w as m,t as l,M as mv,c as r,d as t,m as p,a,x as f,h as n,b as d,N as et,G as s,g as u,y as v,q as h,o as M,B as y,v as fv}from"../../chunks/vendor-hf-doc-builder.js";import{T as uv}from"../../chunks/Tip-hf-doc-builder.js";import{I as L}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as w}from"../../chunks/CodeBlock-hf-doc-builder.js";function vv(st){let T,q,g,B;return{c(){T=l("Si vous utilisez un GPU, vous pouvez augmenter la taille du mod\xE8le \xE0 utiliser, ce qui permettra d'obtenir une meilleure pr\xE9cision de transcription tout en respectant le seuil de latence requis. Il suffit de remplacer l'identifiant du mod\xE8le par : "),q=o("code"),g=l('"openai/whisper-small.en"'),B=l(".")},l(_){T=n(_,"Si vous utilisez un GPU, vous pouvez augmenter la taille du mod\xE8le \xE0 utiliser, ce qui permettra d'obtenir une meilleure pr\xE9cision de transcription tout en respectant le seuil de latence requis. Il suffit de remplacer l'identifiant du mod\xE8le par : "),q=r(_,"CODE",{});var U=a(q);g=n(U,'"openai/whisper-small.en"'),U.forEach(t),B=n(_,".")},m(_,U){u(_,T,U),u(_,q,U),s(q,g),u(_,B,U)},d(_){_&&t(T),_&&t(q),_&&t(B)}}}function hv(st){let T;return{c(){T=l("Notez que la premi\xE8re fois que vous appelez cette fonction, les poids du mod\xE8le sont t\xE9l\xE9charg\xE9s, ce qui peut prendre un certain temps en fonction de votre connexion internet.")},l(q){T=n(q,"Notez que la premi\xE8re fois que vous appelez cette fonction, les poids du mod\xE8le sont t\xE9l\xE9charg\xE9s, ce qui peut prendre un certain temps en fonction de votre connexion internet.")},m(q,g){u(q,T,g)},d(q){q&&t(T)}}}function Mv(st){let T,q,g,B,_,U,Fr,$t,Or,Wn,be,Kr,Ct,ea,sa,Gn,tt,ta,Sn,Fe,kt,ld,Vn,ie,we,Nt,Oe,la,Zt,na,zn,lt,oa,Hn,nt,ra,Ln,ue,Je,xt,Ke,aa,At,ia,Qn,W,ua,Bt,ca,pa,Wt,da,ma,Gt,fa,va,Rn,ot,ha,Pn,ce,Ee,St,es,Ma,Vt,ya,Yn,Te,ba,zt,wa,Ja,Xn,Q,Ea,Ht,Ta,qa,Lt,_a,ja,Dn,pe,qe,Qt,ss,ga,Rt,Ua,Fn,_e,Ia,Pt,$a,Ca,On,rt,ka,Kn,de,je,Yt,ts,Na,Xt,Za,eo,b,xa,at,Aa,Ba,ls,Wa,Ga,Dt,Sa,Va,Ft,za,Ha,Ot,La,Qa,Kt,Ra,Pa,el,Ya,Xa,sl,Da,Fa,ns,Oa,Ka,so,it,ei,to,I,si,tl,ti,li,ll,ni,oi,os,ri,ai,nl,ii,ui,lo,rs,ol,nd,no,ge,ci,rl,pi,di,oo,as,al,od,ro,$,mi,il,fi,vi,ul,hi,Mi,cl,yi,bi,pl,wi,Ji,ao,is,dl,rd,io,R,Ei,us,ml,Ti,qi,fl,_i,ji,uo,P,gi,vl,Ui,Ii,hl,$i,Ci,co,cs,po,Ue,ki,Ml,Ni,Zi,mo,ps,fo,C,xi,yl,Ai,Bi,bl,Wi,Gi,wl,Si,Vi,Jl,El,zi,Hi,vo,ds,ho,ms,Mo,ut,Li,yo,Y,Qi,Tl,Ri,Pi,fs,ql,Yi,Xi,bo,k,Di,_l,Fi,Oi,jl,Ki,eu,gl,su,tu,Ul,lu,nu,wo,G,ou,Il,ru,au,$l,iu,uu,Cl,cu,pu,Jo,X,du,kl,mu,fu,vs,Nl,vu,hu,Eo,hs,To,D,Mu,Zl,yu,bu,xl,wu,Ju,qo,Ms,_o,ys,jo,Ie,Eu,Al,Tu,qu,go,me,$e,Bl,bs,_u,Wl,ju,Uo,S,gu,Gl,Uu,Iu,ws,Sl,$u,Cu,Js,Vl,ku,Nu,Io,Es,$o,Ce,Co,F,Zu,zl,xu,Au,Hl,Bu,Wu,ko,V,Gu,Ll,Su,Vu,Ql,zu,Hu,fe,Lu,Rl,Qu,Ru,Pu,No,Ts,Zo,ct,Yu,xo,qs,Ao,_s,Bo,z,Xu,Pl,Du,Fu,Yl,Ou,Ku,Xl,ec,sc,Wo,ve,ke,Dl,js,tc,Fl,lc,Go,H,nc,Ol,oc,rc,Kl,ac,ic,gs,uc,cc,So,N,pc,en,dc,mc,Ne,fc,sn,vc,hc,tn,Mc,yc,ln,bc,wc,Vo,Us,nn,ad,zo,J,Jc,on,Ec,Tc,Is,qc,_c,$s,jc,gc,rn,Uc,Ic,an,$c,Cc,un,kc,Nc,cn,Zc,xc,Ho,Cs,pn,id,Lo,Z,Ac,dn,Bc,Wc,mn,Gc,Sc,fn,Vc,zc,vn,Hc,Lc,Qo,ks,Ro,pt,Qc,Po,Ns,Yo,Zs,Xo,Ze,Rc,hn,Pc,Yc,Do,he,xe,Mn,xs,Xc,yn,Dc,Fo,Ae,Fc,As,Oc,Kc,Oo,Bs,Ko,dt,ep,er,Ws,sr,O,sp,bn,tp,lp,mt,np,op,tr,Gs,lr,ft,rp,nr,Ss,or,vt,ap,rr,Me,Be,wn,Vs,ip,Jn,up,ar,We,cp,En,pp,dp,ir,zs,ur,ht,mp,cr,K,Tn,fp,vp,Mt,qn,hp,Mp,yp,_n,bp,pr,yt,wp,dr,ye,Ge,jn,Hs,Jp,gn,Ep,mr,bt,Tp,fr,x,qp,Ls,Un,_p,jp,In,gp,Up,$n,Ip,$p,Cn,Cp,kp,vr,A,Np,Qs,Zp,xp,kn,Ap,Bp,Nn,Wp,Gp,Rs,Sp,Vp,hr,Ps,Mr,Se,zp,Zn,Hp,Lp,yr,Ys,br,Xs,xn,ud,wr,Ve,Jr,ze,Qp,Ds,Rp,Pp,Er,He,Yp,An,Xp,Dp,Tr,Fs,qr,wt,Fp,_r,Le,Op,Os,Kp,ed,jr;return U=new L({}),Oe=new L({}),Ke=new L({}),es=new L({}),ss=new L({}),ts=new L({}),cs=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBaW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjAlMjJjdWRhJTNBMCUyMiUyMGlmJTIwdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSUyMGVsc2UlMjAlMjJjcHUlMjIlMEElMEFjbGFzc2lmaWVyJTIwJTNEJTIwcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIyYXVkaW8tY2xhc3NpZmljYXRpb24lMjIlMkMlMjBtb2RlbCUzRCUyMk1JVCUyRmFzdC1maW5ldHVuZWQtc3BlZWNoLWNvbW1hbmRzLXYyJTIyJTJDJTIwZGV2aWNlJTNEZGV2aWNlJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
<span class="hljs-keyword">import</span> torch

device = <span class="hljs-string">&quot;cuda:0&quot;</span> <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> <span class="hljs-string">&quot;cpu&quot;</span>

classifier = pipeline(
    <span class="hljs-string">&quot;audio-classification&quot;</span>, model=<span class="hljs-string">&quot;MIT/ast-finetuned-speech-commands-v2&quot;</span>, device=device
)`}}),ps=new w({props:{code:"Y2xhc3NpZmllci5tb2RlbC5jb25maWcuaWQybGFiZWw=",highlighted:"classifier.model.config.id2label"}}),ds=new w({props:{code:"Y2xhc3NpZmllci5tb2RlbC5jb25maWcuaWQybGFiZWwlNUIyNyU1RA==",highlighted:'classifier.model.config.id2label[<span class="hljs-number">27</span>]'}}),ms=new w({props:{code:"J21hcnZpbic=",highlighted:'<span class="hljs-symbol">&#x27;marvin</span>&#x27;'}}),hs=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5waXBlbGluZXMuYXVkaW9fdXRpbHMlMjBpbXBvcnQlMjBmZm1wZWdfbWljcm9waG9uZV9saXZlJTBBJTBBJTBBZGVmJTIwbGF1bmNoX2ZuKCUwQSUyMCUyMCUyMCUyMHdha2Vfd29yZCUzRCUyMm1hcnZpbiUyMiUyQyUwQSUyMCUyMCUyMCUyMHByb2JfdGhyZXNob2xkJTNEMC41JTJDJTBBJTIwJTIwJTIwJTIwY2h1bmtfbGVuZ3RoX3MlM0QyLjAlMkMlMEElMjAlMjAlMjAlMjBzdHJlYW1fY2h1bmtfcyUzRDAuMjUlMkMlMEElMjAlMjAlMjAlMjBkZWJ1ZyUzREZhbHNlJTJDJTBBKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwd2FrZV93b3JkJTIwbm90JTIwaW4lMjBjbGFzc2lmaWVyLm1vZGVsLmNvbmZpZy5sYWJlbDJpZC5rZXlzKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByYWlzZSUyMFZhbHVlRXJyb3IoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZiUyMldha2UlMjB3b3JkJTIwJTdCd2FrZV93b3JkJTdEJTIwbm90JTIwaW4lMjBzZXQlMjBvZiUyMHZhbGlkJTIwY2xhc3MlMjBsYWJlbHMlMkMlMjBwaWNrJTIwYSUyMHdha2UlMjB3b3JkJTIwaW4lMjB0aGUlMjBzZXQlMjAlN0JjbGFzc2lmaWVyLm1vZGVsLmNvbmZpZy5sYWJlbDJpZC5rZXlzKCklN0QuJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMHNhbXBsaW5nX3JhdGUlMjAlM0QlMjBjbGFzc2lmaWVyLmZlYXR1cmVfZXh0cmFjdG9yLnNhbXBsaW5nX3JhdGUlMEElMEElMjAlMjAlMjAlMjBtaWMlMjAlM0QlMjBmZm1wZWdfbWljcm9waG9uZV9saXZlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNhbXBsaW5nX3JhdGUlM0RzYW1wbGluZ19yYXRlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2h1bmtfbGVuZ3RoX3MlM0RjaHVua19sZW5ndGhfcyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cmVhbV9jaHVua19zJTNEc3RyZWFtX2NodW5rX3MlMkMlMEElMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwcHJpbnQoJTIyTGlzdGVuaW5nJTIwZm9yJTIwd2FrZSUyMHdvcmQuLi4lMjIpJTBBJTIwJTIwJTIwJTIwZm9yJTIwcHJlZGljdGlvbiUyMGluJTIwY2xhc3NpZmllcihtaWMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZGljdGlvbiUyMCUzRCUyMHByZWRpY3Rpb24lNUIwJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBkZWJ1ZyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KHByZWRpY3Rpb24pJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBwcmVkaWN0aW9uJTVCJTIybGFiZWwlMjIlNUQlMjAlM0QlM0QlMjB3YWtlX3dvcmQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHByZWRpY3Rpb24lNUIlMjJzY29yZSUyMiU1RCUyMCUzRSUyMHByb2JfdGhyZXNob2xkJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwVHJ1ZQ==",highlighted:`<span class="hljs-keyword">from</span> transformers.pipelines.audio_utils <span class="hljs-keyword">import</span> ffmpeg_microphone_live


<span class="hljs-keyword">def</span> <span class="hljs-title function_">launch_fn</span>(<span class="hljs-params">
    wake_word=<span class="hljs-string">&quot;marvin&quot;</span>,
    prob_threshold=<span class="hljs-number">0.5</span>,
    chunk_length_s=<span class="hljs-number">2.0</span>,
    stream_chunk_s=<span class="hljs-number">0.25</span>,
    debug=<span class="hljs-literal">False</span>,
</span>):
    <span class="hljs-keyword">if</span> wake_word <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> classifier.model.config.label2id.keys():
        <span class="hljs-keyword">raise</span> ValueError(
            <span class="hljs-string">f&quot;Wake word <span class="hljs-subst">{wake_word}</span> not in set of valid class labels, pick a wake word in the set <span class="hljs-subst">{classifier.model.config.label2id.keys()}</span>.&quot;</span>
        )

    sampling_rate = classifier.feature_extractor.sampling_rate

    mic = ffmpeg_microphone_live(
        sampling_rate=sampling_rate,
        chunk_length_s=chunk_length_s,
        stream_chunk_s=stream_chunk_s,
    )

    <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;Listening for wake word...&quot;</span>)
    <span class="hljs-keyword">for</span> prediction <span class="hljs-keyword">in</span> classifier(mic):
        prediction = prediction[<span class="hljs-number">0</span>]
        <span class="hljs-keyword">if</span> debug:
            <span class="hljs-built_in">print</span>(prediction)
        <span class="hljs-keyword">if</span> prediction[<span class="hljs-string">&quot;label&quot;</span>] == wake_word:
            <span class="hljs-keyword">if</span> prediction[<span class="hljs-string">&quot;score&quot;</span>] &gt; prob_threshold:
                <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>`}}),Ms=new w({props:{code:"bGF1bmNoX2ZuKGRlYnVnJTNEVHJ1ZSk=",highlighted:'launch_fn(debug=<span class="hljs-literal">True</span>)'}}),ys=new w({props:{code:"TGlzdGVuaW5nJTIwZm9yJTIwd2FrZSUyMHdvcmQuLi4lMEElN0Inc2NvcmUnJTNBJTIwMC4wNTUzMjYxMDc4ODk0MTM4MzQlMkMlMjAnbGFiZWwnJTNBJTIwJ29uZSclN0QlMEElN0Inc2NvcmUnJTNBJTIwMC4wNTk5OTg1NjgxNDc0MjA4OCUyQyUyMCdsYWJlbCclM0ElMjAnb2ZmJyU3RCUwQSU3QidzY29yZSclM0ElMjAwLjEyODI3NDg0MzA5NjczMzElMkMlMjAnbGFiZWwnJTNBJTIwJ2ZpdmUnJTdEJTBBJTdCJ3Njb3JlJyUzQSUyMDAuMDczMTAxMTAzMzA1ODE2NjUlMkMlMjAnbGFiZWwnJTNBJTIwJ2ZvbGxvdyclN0QlMEElN0Inc2NvcmUnJTNBJTIwMC4wNjYzNDgwOTgyMTg0NDEwMSUyQyUyMCdsYWJlbCclM0ElMjAnZm9sbG93JyU3RCUwQSU3QidzY29yZSclM0ElMjAwLjA1OTkyNjQyNDE3NTUwMDg3JTJDJTIwJ2xhYmVsJyUzQSUyMCd0cmVlJyU3RCUwQSU3QidzY29yZSclM0ElMjAwLjA1OTkyNjQyNDE3NTUwMDg3JTJDJTIwJ2xhYmVsJyUzQSUyMCd0cmVlJyU3RCUwQSU3QidzY29yZSclM0ElMjAwLjk5OTkxMzIxNTYzNzIwNyUyQyUyMCdsYWJlbCclM0ElMjAnbWFydmluJyU3RA==",highlighted:`Listening for wake word...
{&#x27;score&#x27;: 0.055326107889413834, &#x27;label&#x27;: &#x27;one&#x27;}
{&#x27;score&#x27;: 0.05999856814742088, &#x27;label&#x27;: &#x27;off&#x27;}
{&#x27;score&#x27;: 0.1282748430967331, &#x27;label&#x27;: &#x27;five&#x27;}
{&#x27;score&#x27;: 0.07310110330581665, &#x27;label&#x27;: &#x27;follow&#x27;}
{&#x27;score&#x27;: 0.06634809821844101, &#x27;label&#x27;: &#x27;follow&#x27;}
{&#x27;score&#x27;: 0.05992642417550087, &#x27;label&#x27;: &#x27;tree&#x27;}
{&#x27;score&#x27;: 0.05992642417550087, &#x27;label&#x27;: &#x27;tree&#x27;}
{&#x27;score&#x27;: 0.999913215637207, &#x27;label&#x27;: &#x27;marvin&#x27;}`}}),bs=new L({}),Es=new w({props:{code:"dHJhbnNjcmliZXIlMjAlM0QlMjBwaXBlbGluZSglMEElMjAlMjAlMjAlMjAlMjJhdXRvbWF0aWMtc3BlZWNoLXJlY29nbml0aW9uJTIyJTJDJTIwbW9kZWwlM0QlMjJvcGVuYWklMkZ3aGlzcGVyLWJhc2UuZW4lMjIlMkMlMjBkZXZpY2UlM0RkZXZpY2UlMEEp",highlighted:`transcriber = pipeline(
    <span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>, model=<span class="hljs-string">&quot;openai/whisper-base.en&quot;</span>, device=device
)`}}),Ce=new uv({props:{$$slots:{default:[vv]},$$scope:{ctx:st}}}),Ts=new w({props:{code:"aW1wb3J0JTIwc3lzJTBBJTBBJTBBZGVmJTIwdHJhbnNjcmliZShjaHVua19sZW5ndGhfcyUzRDUuMCUyQyUyMHN0cmVhbV9jaHVua19zJTNEMS4wKSUzQSUwQSUyMCUyMCUyMCUyMHNhbXBsaW5nX3JhdGUlMjAlM0QlMjB0cmFuc2NyaWJlci5mZWF0dXJlX2V4dHJhY3Rvci5zYW1wbGluZ19yYXRlJTBBJTBBJTIwJTIwJTIwJTIwbWljJTIwJTNEJTIwZmZtcGVnX21pY3JvcGhvbmVfbGl2ZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzYW1wbGluZ19yYXRlJTNEc2FtcGxpbmdfcmF0ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNodW5rX2xlbmd0aF9zJTNEY2h1bmtfbGVuZ3RoX3MlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdHJlYW1fY2h1bmtfcyUzRHN0cmVhbV9jaHVua19zJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMHByaW50KCUyMlN0YXJ0JTIwc3BlYWtpbmcuLi4lMjIpJTBBJTIwJTIwJTIwJTIwZm9yJTIwaXRlbSUyMGluJTIwdHJhbnNjcmliZXIobWljJTJDJTIwZ2VuZXJhdGVfa3dhcmdzJTNEJTdCJTIybWF4X25ld190b2tlbnMlMjIlM0ElMjAxMjglN0QpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3lzLnN0ZG91dC53cml0ZSglMjIlNUMwMzMlNUJLJTIyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KGl0ZW0lNUIlMjJ0ZXh0JTIyJTVEJTJDJTIwZW5kJTNEJTIyJTVDciUyMiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG5vdCUyMGl0ZW0lNUIlMjJwYXJ0aWFsJTIyJTVEJTVCMCU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJyZWFrJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwaXRlbSU1QiUyMnRleHQlMjIlNUQ=",highlighted:`<span class="hljs-keyword">import</span> sys


<span class="hljs-keyword">def</span> <span class="hljs-title function_">transcribe</span>(<span class="hljs-params">chunk_length_s=<span class="hljs-number">5.0</span>, stream_chunk_s=<span class="hljs-number">1.0</span></span>):
    sampling_rate = transcriber.feature_extractor.sampling_rate

    mic = ffmpeg_microphone_live(
        sampling_rate=sampling_rate,
        chunk_length_s=chunk_length_s,
        stream_chunk_s=stream_chunk_s,
    )

    <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;Start speaking...&quot;</span>)
    <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> transcriber(mic, generate_kwargs={<span class="hljs-string">&quot;max_new_tokens&quot;</span>: <span class="hljs-number">128</span>}):
        sys.stdout.write(<span class="hljs-string">&quot;\\033[K&quot;</span>)
        <span class="hljs-built_in">print</span>(item[<span class="hljs-string">&quot;text&quot;</span>], end=<span class="hljs-string">&quot;\\r&quot;</span>)
        <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> item[<span class="hljs-string">&quot;partial&quot;</span>][<span class="hljs-number">0</span>]:
            <span class="hljs-keyword">break</span>

    <span class="hljs-keyword">return</span> item[<span class="hljs-string">&quot;text&quot;</span>]`}}),qs=new w({props:{code:"dHJhbnNjcmliZSgp",highlighted:"transcribe()"}}),_s=new w({props:{code:"U3RhcnQlMjBzcGVha2luZy4uLiUwQSUyMEhleSUyQyUyMHRoaXMlMjBpcyUyMGElMjB0ZXN0JTIwd2l0aCUyMHRoZSUyMHdoaXNwZXIlMjBtb2RlbC4=",highlighted:`Start speaking...
 Hey, this is a test with the whisper model.`}}),js=new L({}),ks=new w({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMEhmRm9sZGVyJTBBaW1wb3J0JTIwcmVxdWVzdHMlMEElMEElMEFkZWYlMjBxdWVyeSh0ZXh0JTJDJTIwbW9kZWxfaWQlM0QlMjJ0aWl1YWUlMkZmYWxjb24tN2ItaW5zdHJ1Y3QlMjIpJTNBJTBBJTIwJTIwJTIwJTIwYXBpX3VybCUyMCUzRCUyMGYlMjJodHRwcyUzQSUyRiUyRmFwaS1pbmZlcmVuY2UuaHVnZ2luZ2ZhY2UuY28lMkZtb2RlbHMlMkYlN0Jtb2RlbF9pZCU3RCUyMiUwQSUyMCUyMCUyMCUyMGhlYWRlcnMlMjAlM0QlMjAlN0IlMjJBdXRob3JpemF0aW9uJTIyJTNBJTIwZiUyMkJlYXJlciUyMCU3QkhmRm9sZGVyKCkuZ2V0X3Rva2VuKCklN0QlMjIlN0QlMEElMjAlMjAlMjAlMjBwYXlsb2FkJTIwJTNEJTIwJTdCJTIyaW5wdXRzJTIyJTNBJTIwdGV4dCU3RCUwQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJRdWVyeWluZy4uLiUzQSUyMCU3QnRleHQlN0QlMjIpJTBBJTIwJTIwJTIwJTIwcmVzcG9uc2UlMjAlM0QlMjByZXF1ZXN0cy5wb3N0KGFwaV91cmwlMkMlMjBoZWFkZXJzJTNEaGVhZGVycyUyQyUyMGpzb24lM0RwYXlsb2FkKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHJlc3BvbnNlLmpzb24oKSU1QjAlNUQlNUIlMjJnZW5lcmF0ZWRfdGV4dCUyMiU1RCU1Qmxlbih0ZXh0KSUyMCUyQiUyMDElMjAlM0ElNUQ=",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> HfFolder
<span class="hljs-keyword">import</span> requests


<span class="hljs-keyword">def</span> <span class="hljs-title function_">query</span>(<span class="hljs-params">text, model_id=<span class="hljs-string">&quot;tiiuae/falcon-7b-instruct&quot;</span></span>):
    api_url = <span class="hljs-string">f&quot;https://api-inference.huggingface.co/models/<span class="hljs-subst">{model_id}</span>&quot;</span>
    headers = {<span class="hljs-string">&quot;Authorization&quot;</span>: <span class="hljs-string">f&quot;Bearer <span class="hljs-subst">{HfFolder().get_token()}</span>&quot;</span>}
    payload = {<span class="hljs-string">&quot;inputs&quot;</span>: text}

    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Querying...: <span class="hljs-subst">{text}</span>&quot;</span>)
    response = requests.post(api_url, headers=headers, json=payload)
    <span class="hljs-keyword">return</span> response.json()[<span class="hljs-number">0</span>][<span class="hljs-string">&quot;generated_text&quot;</span>][<span class="hljs-built_in">len</span>(text) + <span class="hljs-number">1</span> :]`}}),Ns=new w({props:{code:"cXVlcnkoJTIyV2hhdCUyMGRvZXMlMjBIdWdnaW5nJTIwRmFjZSUyMGRvJTNGJTIyKQ==",highlighted:'query(<span class="hljs-string">&quot;What does Hugging Face do?&quot;</span>)'}}),Zs=new w({props:{code:"J0h1Z2dpbmclMjBGYWNlJTIwaXMlMjBhJTIwY29tcGFueSUyMHRoYXQlMjBwcm92aWRlcyUyMG5hdHVyYWwlMjBsYW5ndWFnZSUyMHByb2Nlc3NpbmclMjBhbmQlMjBtYWNoaW5lJTIwbGVhcm5pbmclMjB0b29scyUyMGZvciUyMGRldmVsb3BlcnMuJTIwVGhleSc=",highlighted:'<span class="hljs-comment">&#x27;Hugging Face is a company that provides natural language processing and machine learning tools for developers. They&#x27;</span>'}}),xs=new L({}),Bs=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNwZWVjaFQ1UHJvY2Vzc29yJTJDJTIwU3BlZWNoVDVGb3JUZXh0VG9TcGVlY2glMkMlMjBTcGVlY2hUNUhpZmlHYW4lMEElMEFwcm9jZXNzb3IlMjAlM0QlMjBTcGVlY2hUNVByb2Nlc3Nvci5mcm9tX3ByZXRyYWluZWQoJTIybWljcm9zb2Z0JTJGc3BlZWNodDVfdHRzJTIyKSUwQSUwQW1vZGVsJTIwJTNEJTIwU3BlZWNoVDVGb3JUZXh0VG9TcGVlY2guZnJvbV9wcmV0cmFpbmVkKCUyMm1pY3Jvc29mdCUyRnNwZWVjaHQ1X3R0cyUyMikudG8oZGV2aWNlKSUwQXZvY29kZXIlMjAlM0QlMjBTcGVlY2hUNUhpZmlHYW4uZnJvbV9wcmV0cmFpbmVkKCUyMm1pY3Jvc29mdCUyRnNwZWVjaHQ1X2hpZmlnYW4lMjIpLnRvKGRldmljZSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan

processor = SpeechT5Processor.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_tts&quot;</span>)

model = SpeechT5ForTextToSpeech.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_tts&quot;</span>).to(device)
vocoder = SpeechT5HifiGan.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_hifigan&quot;</span>).to(device)`}}),Ws=new w({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZW1iZWRkaW5nc19kYXRhc2V0JTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMk1hdHRoaWpzJTJGY211LWFyY3RpYy14dmVjdG9ycyUyMiUyQyUyMHNwbGl0JTNEJTIydmFsaWRhdGlvbiUyMiklMEFzcGVha2VyX2VtYmVkZGluZ3MlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW1iZWRkaW5nc19kYXRhc2V0JTVCNzMwNiU1RCU1QiUyMnh2ZWN0b3IlMjIlNUQpLnVuc3F1ZWV6ZSgwKQ==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

embeddings_dataset = load_dataset(<span class="hljs-string">&quot;Matthijs/cmu-arctic-xvectors&quot;</span>, split=<span class="hljs-string">&quot;validation&quot;</span>)
speaker_embeddings = torch.tensor(embeddings_dataset[<span class="hljs-number">7306</span>][<span class="hljs-string">&quot;xvector&quot;</span>]).unsqueeze(<span class="hljs-number">0</span>)`}}),Gs=new w({props:{code:"ZGVmJTIwc3ludGhlc2lzZSh0ZXh0KSUzQSUwQSUyMCUyMCUyMCUyMGlucHV0cyUyMCUzRCUyMHByb2Nlc3Nvcih0ZXh0JTNEdGV4dCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTIwJTIwJTIwJTIwc3BlZWNoJTIwJTNEJTIwbW9kZWwuZ2VuZXJhdGVfc3BlZWNoKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RC50byhkZXZpY2UpJTJDJTIwc3BlYWtlcl9lbWJlZGRpbmdzLnRvKGRldmljZSklMkMlMjB2b2NvZGVyJTNEdm9jb2RlciUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzcGVlY2guY3B1KCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">synthesise</span>(<span class="hljs-params">text</span>):
    inputs = processor(text=text, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
    speech = model.generate_speech(
        inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].to(device), speaker_embeddings.to(device), vocoder=vocoder
    )
    <span class="hljs-keyword">return</span> speech.cpu()`}}),Ss=new w({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBYXVkaW8lMjAlM0QlMjBzeW50aGVzaXNlKCUwQSUyMCUyMCUyMCUyMCUyMkh1Z2dpbmclMjBGYWNlJTIwaXMlMjBhJTIwY29tcGFueSUyMHRoYXQlMjBwcm92aWRlcyUyMG5hdHVyYWwlMjBsYW5ndWFnZSUyMHByb2Nlc3NpbmclMjBhbmQlMjBtYWNoaW5lJTIwbGVhcm5pbmclMjB0b29scyUyMGZvciUyMGRldmVsb3BlcnMuJTIyJTBBKSUwQSUwQUF1ZGlvKGF1ZGlvJTJDJTIwcmF0ZSUzRDE2MDAwKQ==",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

audio = synthesise(
    <span class="hljs-string">&quot;Hugging Face is a company that provides natural language processing and machine learning tools for developers.&quot;</span>
)

Audio(audio, rate=<span class="hljs-number">16000</span>)`}}),Vs=new L({}),zs=new w({props:{code:"bGF1bmNoX2ZuKCklMEF0cmFuc2NyaXB0aW9uJTIwJTNEJTIwdHJhbnNjcmliZSgpJTBBcmVzcG9uc2UlMjAlM0QlMjBxdWVyeSh0cmFuc2NyaXB0aW9uKSUwQWF1ZGlvJTIwJTNEJTIwc3ludGhlc2lzZShyZXNwb25zZSklMEElMEFBdWRpbyhhdWRpbyUyQyUyMHJhdGUlM0QxNjAwMCUyQyUyMGF1dG9wbGF5JTNEVHJ1ZSk=",highlighted:`launch_fn()
transcription = transcribe()
response = query(transcription)
audio = synthesise(response)

Audio(audio, rate=<span class="hljs-number">16000</span>, autoplay=<span class="hljs-literal">True</span>)`}}),Hs=new L({}),Ps=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEhmQWdlbnQlMEElMEFhZ2VudCUyMCUzRCUyMEhmQWdlbnQoJTBBJTIwJTIwJTIwJTIwdXJsX2VuZHBvaW50JTNEJTIyaHR0cHMlM0ElMkYlMkZhcGktaW5mZXJlbmNlLmh1Z2dpbmdmYWNlLmNvJTJGbW9kZWxzJTJGYmlnY29kZSUyRnN0YXJjb2RlciUyMiUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> HfAgent

agent = HfAgent(
    url_endpoint=<span class="hljs-string">&quot;https://api-inference.huggingface.co/models/bigcode/starcoder&quot;</span>
)`}}),Ys=new w({props:{code:"YWdlbnQucnVuKCUyMkdlbmVyYXRlJTIwYW4lMjBpbWFnZSUyMG9mJTIwYSUyMGNhdCUyMik=",highlighted:'agent.run(<span class="hljs-string">&quot;Generate an image of a cat&quot;</span>)'}}),Ve=new uv({props:{$$slots:{default:[hv]},$$scope:{ctx:st}}}),Fs=new w({props:{code:"bGF1bmNoX2ZuKCklMEF0cmFuc2NyaXB0aW9uJTIwJTNEJTIwdHJhbnNjcmliZSgpJTBBYWdlbnQucnVuKHRyYW5zY3JpcHRpb24p",highlighted:`launch_fn()
transcription = transcribe()
agent.run(transcription)`}}),{c(){T=o("meta"),q=c(),g=o("h1"),B=o("a"),_=o("span"),m(U.$$.fragment),Fr=c(),$t=o("span"),Or=l("Cr\xE9er un assistant vocal"),Wn=c(),be=o("p"),Kr=l("Dans cette section, nous allons rassembler trois mod\xE8les d\xE9j\xE0 vus pour construire un assistant vocal de bout en bout baptis\xE9 "),Ct=o("strong"),ea=l("Marvin"),sa=l(" \u{1F916}. Comme Alexa d\u2019Amazon ou Siri d\u2019Apple, Marvin est un assistant vocal r\xE9pondant \xE0 un mot d\xE9clencheur particulier, \xE9coutant ensuite une requ\xEAte vocale et r\xE9pond enfin par une r\xE9ponse vocale."),Gn=c(),tt=o("p"),ta=l("Nous pouvons d\xE9composer le pipeline de l\u2019assistant vocal en quatre \xE9tapes, chacune d\u2019entre elles n\xE9cessitant un mod\xE8le autonome :"),Sn=c(),Fe=o("div"),kt=o("img"),Vn=c(),ie=o("h3"),we=o("a"),Nt=o("span"),m(Oe.$$.fragment),la=c(),Zt=o("span"),na=l("1. D\xE9tection du mot d\xE9clencheur"),zn=c(),lt=o("p"),oa=l("Les assistants vocaux \xE9coutent en permanence les entr\xE9es audio provenant du microphone de votre appareil, mais ils ne se mettent en action que lorsqu\u2019un mot d\xE9clencheur (ou mot de r\xE9veil) particulier est prononc\xE9."),Hn=c(),nt=o("p"),ra=l("La t\xE2che de d\xE9tection des mots d\xE9clencheurs est g\xE9r\xE9e par un petit mod\xE8le de classification audio sur l\u2019appareil, qui est beaucoup plus petit et plus l\xE9ger que le mod\xE8le de reconnaissance vocale, ne comportant souvent que quelques millions de param\xE8tres, contre plusieurs centaines de millions pour la reconnaissance vocale. Il peut donc \xEAtre ex\xE9cut\xE9 en continu sur l\u2019appareil sans en \xE9puiser la batterie. Ce n\u2019est que lorsque le mot de r\xE9veil est d\xE9tect\xE9 que le mod\xE8le de reconnaissance vocale, plus grand, est lanc\xE9, avant d\u2019\xEAtre \xE0 nouveau arr\xEAt\xE9."),Ln=c(),ue=o("h3"),Je=o("a"),xt=o("span"),m(Ke.$$.fragment),aa=c(),At=o("span"),ia=l("2. Transcription de la parole"),Qn=c(),W=o("p"),ua=l("L\u2019\xE9tape suivante du processus consiste \xE0 transcrire la requ\xEAte vocale en texte. Dans la pratique, le transfert des fichiers audio de votre appareil local vers le "),Bt=o("em"),ca=l("cloud"),pa=l(" est lent en raison de la nature volumineuse des fichiers audio. Il est donc plus efficace de les transcrire directement \xE0 l\u2019aide d\u2019un mod\xE8le d\u2019ASR sur l\u2019appareil plut\xF4t qu\u2019\xE0 l\u2019aide d\u2019un mod\xE8le dans le "),Wt=o("em"),da=l("cloud"),ma=l(". Le mod\xE8le sur l\u2019appareil peut \xEAtre plus petit et donc moins pr\xE9cis qu\u2019un mod\xE8le h\xE9berg\xE9 dans le "),Gt=o("em"),fa=l("cloud"),va=l(", mais la vitesse d\u2019inf\xE9rence plus rapide en vaut la peine puisque nous pouvons ex\xE9cuter la reconnaissance vocale quasiment en temps r\xE9el, notre \xE9nonc\xE9 audio \xE9tant transcrit au fur et \xE0 mesure que nous le pronon\xE7ons."),Rn=c(),ot=o("p"),ha=l("Nous sommes maintenant tr\xE8s familiers avec le processus de reconnaissance vocale, donc cela devrait \xEAtre un jeu d\u2019enfant !"),Pn=c(),ce=o("h3"),Ee=o("a"),St=o("span"),m(es.$$.fragment),Ma=c(),Vt=o("span"),ya=l("3. Requ\xEAter le mod\xE8le de langage"),Yn=c(),Te=o("p"),ba=l("Maintenant que nous savons ce que l\u2019utilisateur a demand\xE9, nous devons g\xE9n\xE9rer une r\xE9ponse ! Les meilleurs mod\xE8les candidats pour cette t\xE2che sont les "),zt=o("em"),wa=l("grands mod\xE8les de langage (LLM)"),Ja=l(", car ils sont effectivement capables de comprendre la s\xE9mantique de la requ\xEAte textuelle et de g\xE9n\xE9rer une r\xE9ponse appropri\xE9e."),Xn=c(),Q=o("p"),Ea=l("Puisque notre requ\xEAte textuelle est petite (juste quelques "),Ht=o("em"),Ta=l("tokens"),qa=l("), et les mod\xE8les de langage volumineux (plusieurs milliards de param\xE8tres), la fa\xE7on la plus efficace d\u2019ex\xE9cuter l\u2019inf\xE9rence est d\u2019envoyer notre requ\xEAte textuelle de notre appareil \xE0 un LLM fonctionnant dans le "),Lt=o("em"),_a=l("cloud"),ja=l(", de g\xE9n\xE9rer une r\xE9ponse textuelle, et de renvoyer la r\xE9ponse \xE0 l\u2019appareil."),Dn=c(),pe=o("h3"),qe=o("a"),Qt=o("span"),m(ss.$$.fragment),ga=c(),Rt=o("span"),Ua=l("4. Synth\xE9tiser la r\xE9ponse"),Fn=c(),_e=o("p"),Ia=l("Enfin, nous utiliserons un mod\xE8le de synth\xE8se vocale pour synth\xE9tiser la r\xE9ponse textuelle sous forme de parole. Cette op\xE9ration s\u2019effectue sur l\u2019appareil, mais il est tout \xE0 fait possible d\u2019ex\xE9cuter un mod\xE8le de synth\xE8se vocale dans le "),Pt=o("em"),$a=l("cloud"),Ca=l(", en g\xE9n\xE9rant la sortie audio et en la transf\xE9rant vers l\u2019appareil."),On=c(),rt=o("p"),ka=l("Encore une fois, nous avons fait cela plusieurs fois maintenant, donc le processus sera tr\xE8s familier !"),Kn=c(),de=o("h2"),je=o("a"),Yt=o("span"),m(ts.$$.fragment),Na=c(),Xt=o("span"),Za=l("D\xE9tection des mots d\xE9clencheur"),eo=c(),b=o("p"),xa=l("La premi\xE8re \xE9tape du pipeline de l\u2019assistant vocal consiste \xE0 d\xE9tecter si le mot d\xE9clencheur a \xE9t\xE9 prononc\xE9, et nous devons donc trouver un mod\xE8le pr\xE9-entra\xEEn\xE9 appropri\xE9 pour cette t\xE2che ! Vous vous souviendrez de la section sur les "),at=o("a"),Aa=l("mod\xE8les pr\xE9-entra\xEEn\xE9s pour la classification audio"),Ba=l(" que "),ls=o("a"),Wa=l("Speech Commands"),Ga=l(" est un jeu de donn\xE9es de mots prononc\xE9s con\xE7u pour \xE9valuer les mod\xE8les de classification audio sur plus de 15 mots de commande simples comme "),Dt=o("code"),Sa=l("up"),Va=l(", "),Ft=o("code"),za=l("down"),Ha=l(", "),Ot=o("code"),La=l("yes"),Qa=l(" et "),Kt=o("code"),Ra=l("no"),Pa=l(", ainsi qu\u2019un label "),el=o("code"),Ya=l("silence"),Xa=l(" pour classer l\u2019absence de parole. Prenez une minute pour \xE9couter les \xE9chantillons sur le visualisateur de jeux de donn\xE9es du "),sl=o("em"),Da=l("Hub"),Fa=l(" et vous familiariser \xE0 nouveau avec le jeu de donn\xE9es : "),ns=o("a"),Oa=l("visualisateur"),Ka=l("."),so=c(),it=o("p"),ei=l("Nous pouvons utiliser un mod\xE8le de classification audio pr\xE9-entra\xEEn\xE9 sur le jeu de donn\xE9es Speech Commands et choisir l\u2019un de ces mots de commande simples comme mot d\xE9clencheur. Parmi plus de 15 mots de commande possibles, si le mod\xE8le pr\xE9dit avec la plus grande probabilit\xE9 le mot que nous avons choisi, nous pouvons \xEAtre quasiment certains que ce mot de d\xE9clencheur a \xE9t\xE9 prononc\xE9."),to=c(),I=o("p"),si=l("Rendez-vous sur le "),tl=o("em"),ti=l("Hub"),li=l(" et cliquez sur l\u2019onglet "),ll=o("em"),ni=l("Models"),oi=l(" : "),os=o("a"),ri=l("https://huggingface.co/models"),ai=l(". Cela va faire appara\xEEtre tous les mod\xE8les sur le "),nl=o("em"),ii=l("Hub"),ui=l(" :"),lo=c(),rs=o("div"),ol=o("img"),no=c(),ge=o("p"),ci=l("Vous remarquerez sur le c\xF4t\xE9 gauche que nous avons une s\xE9lection d\u2019onglets que nous pouvons s\xE9lectionner pour filtrer les mod\xE8les par t\xE2che, biblioth\xE8que, jeu de donn\xE9es, etc. Faites d\xE9filer vers le bas et s\xE9lectionnez la t\xE2che "),rl=o("em"),pi=l("Audio Classification"),di=l(" dans la liste des t\xE2ches audio :"),oo=c(),as=o("div"),al=o("img"),ro=c(),$=o("p"),mi=l("Nous sommes maintenant en pr\xE9sence d\u2019un sous-ensemble de plus de 500 mod\xE8les de classification audio sur le "),il=o("em"),fi=l("Hub"),vi=l(". Pour affiner cette s\xE9lection, nous pouvons filtrer les mod\xE8les par jeu de donn\xE9es. Cliquez sur l\u2019onglet "),ul=o("em"),hi=l("Datasets"),Mi=l(" et dans la barre de recherche, tapez "),cl=o("em"),yi=l("speech_commands"),bi=l(". Vous pouvez cliquer sur ce bouton pour filtrer tous les mod\xE8les de classification audio vers ceux qui ont \xE9t\xE9 "),pl=o("em"),wi=l("finetun\xE9"),Ji=l(" sur le jeu de donn\xE9es Speech Commands :"),ao=c(),is=o("div"),dl=o("img"),io=c(),R=o("p"),Ei=l("Bien , nous constatons que nous disposons de six mod\xE8les pr\xE9-entra\xEEn\xE9s pour ce jeu de donn\xE9es et cette t\xE2che sp\xE9cifiques (bien que de nouveaux mod\xE8les puissent \xEAtre ajout\xE9s si vous lisez \xE0 une date ult\xE9rieure !) Vous reconna\xEEtrez le premier de ces mod\xE8les comme le "),us=o("a"),ml=o("em"),Ti=l("Spectrogram Transformer"),qi=l(" que nous avons utilis\xE9 dans l\u2019exemple de l\u2019unit\xE9 4. Nous utiliserons \xE0 nouveau ce "),fl=o("em"),_i=l("checkpoint"),ji=l(" pour notre t\xE2che de d\xE9tection de mots d\xE9clencheur."),uo=c(),P=o("p"),gi=l("Chargeons le "),vl=o("em"),Ui=l("checkpoint"),Ii=l(" \xE0 l\u2019aide de la classe "),hl=o("code"),$i=l("pipeline"),Ci=l(" :"),co=c(),m(cs.$$.fragment),po=c(),Ue=o("p"),ki=l("Nous pouvons v\xE9rifier sur quelles \xE9tiquettes le mod\xE8le a \xE9t\xE9 entra\xEEn\xE9 en v\xE9rifiant l\u2019attribut "),Ml=o("code"),Ni=l("id2label"),Zi=l(" dans la configuration du mod\xE8le :"),mo=c(),m(ps.$$.fragment),fo=c(),C=o("p"),xi=l("Nous voyons que le mod\xE8le a \xE9t\xE9 entra\xEEn\xE9 sur 35 \xE9tiquettes de classe, y compris quelques mots d\xE9clencheurs simples que nous avons d\xE9crits ci-dessus, ainsi que quelques objets particuliers comme "),yl=o("code"),Ai=l("bed"),Bi=l(", "),bl=o("code"),Wi=l("house"),Gi=l(" et "),wl=o("code"),Si=l("cat"),Vi=l(". Nous voyons qu\u2019il y a un nom dans ces \xE9tiquettes de classe : id 27 correspond \xE0 l\u2019\xE9tiquette "),Jl=o("strong"),El=o("code"),zi=l("marvin"),Hi=l(" :"),vo=c(),m(ds.$$.fragment),ho=c(),m(ms.$$.fragment),Mo=c(),ut=o("p"),Li=l("Parfait ! Nous pouvons utiliser ce nom comme mot d\xE9lchencheur de notre assistant vocal, de la m\xEAme mani\xE8re qu\u2019on utilise \u201CAlexa\u201D pour l\u2019Alexa d\u2019Amazon, ou \u201CHey Siri\u201D pour le Siri d\u2019Apple. Parmi toutes les \xE9tiquettes possibles, si le mod\xE8le pr\xE9dit \u201Cmarvin\u201D avec la probabilit\xE9 de classe la plus \xE9lev\xE9e, nous pouvons \xEAtre s\xFBrs que le mot de r\xE9veil que nous avons choisi a \xE9t\xE9 prononc\xE9."),yo=c(),Y=o("p"),Qi=l("Nous devons maintenant d\xE9finir une fonction qui \xE9coute en permanence le microphone de notre appareil et qui transmet continuellement l\u2019audio au mod\xE8le de classification pour inf\xE9rence. Pour ce faire, nous allons utiliser une fonction d\u2019aide pratique fournie avec \u{1F917} "),Tl=o("em"),Ri=l("Transformers"),Pi=l(" appel\xE9e "),fs=o("a"),ql=o("code"),Yi=l("ffmpeg_microphone_live"),Xi=l("."),bo=c(),k=o("p"),Di=l("Cette fonction transmet de petits morceaux d\u2019audio d\u2019une longueur sp\xE9cifi\xE9e "),_l=o("code"),Fi=l("chunk_length_s"),Oi=l(" au classifieur. Pour s\u2019assurer que nous obtenons des fronti\xE8res lisses entre les morceaux d\u2019audio, nous lan\xE7ons une fen\xEAtre coulissante \xE0 travers notre audio avec un pas de "),jl=o("code"),Ki=l("chunk_length_s / 6"),eu=l(`.
Pour que nous n\u2019ayons pas \xE0 attendre que tout le premier morceau soit enregistr\xE9 avant de commencer l\u2019inf\xE9rence, nous d\xE9finissons \xE9galement une longueur d\u2019entr\xE9e audio temporaire minimale `),gl=o("code"),su=l("stream_chunk_s"),tu=l(" qui est transmise au mod\xE8le avant que le temps "),Ul=o("code"),lu=l("chunk_length_s"),nu=l(" ne soit atteint."),wo=c(),G=o("p"),ou=l("La fonction "),Il=o("code"),ru=l("ffmpeg_microphone_live"),au=l(" renvoie un objet "),$l=o("em"),iu=l("generator"),uu=l(", produisant une s\xE9quence de morceaux audio qui peuvent chacun \xEAtre transmis au mod\xE8le de classification pour faire une pr\xE9diction. Nous pouvons passer ce g\xE9n\xE9rateur directement au "),Cl=o("code"),cu=l("pipeline"),pu=l(", qui \xE0 son tour retourne une s\xE9quence de pr\xE9dictions de sortie, une pour chaque morceau d\u2019entr\xE9e audio. Nous pouvons inspecter les probabilit\xE9s des classes pour chaque morceau d\u2019audio, et arr\xEAter notre boucle de d\xE9tection de mot de r\xE9veil lorsque nous d\xE9tectons que le mot de r\xE9veil a \xE9t\xE9 prononc\xE9."),Jo=c(),X=o("p"),du=l("Nous utiliserons un crit\xE8re tr\xE8s simple pour d\xE9terminer si notre mot de r\xE9veil a \xE9t\xE9 prononc\xE9 : si l\u2019\xE9tiquette de classe ayant la probabilit\xE9 la plus \xE9lev\xE9e est celle de notre mot, et que cette probabilit\xE9 d\xE9passe un seuil "),kl=o("code"),mu=l("prob_threshold"),fu=l(", nous d\xE9clarons que le mot d\xE9clencheur a \xE9t\xE9 prononc\xE9. L\u2019utilisation d\u2019un seuil de probabilit\xE9 pour contr\xF4ler notre classifieur garantit que le mot d\xE9clencheur  n\u2019est pas pr\xE9dit par erreur si l\u2019entr\xE9e audio est un bruit, ce qui est typiquement le cas lorsque le mod\xE8le est tr\xE8s incertain et que toutes les probabilit\xE9s d\u2019\xE9tiquettes de classe sont faibles. Vous voudrez peut-\xEAtre ajuster ce seuil de probabilit\xE9 ou explorer des moyens plus sophistiqu\xE9s par le biais d\u2019une m\xE9trique bas\xE9e sur l\u2019"),vs=o("a"),Nl=o("em"),vu=l("entropie"),hu=l("."),Eo=c(),m(hs.$$.fragment),To=c(),D=o("p"),Mu=l("Essayons cette fonction pour voir comment elle fonctionne ! Nous allons mettre "),Zl=o("code"),yu=l("debug=True"),bu=l(" pour afficher la pr\xE9diction pour chaque morceau d\u2019audio. Laissons le mod\xE8le fonctionner pendant quelques secondes pour voir le type de pr\xE9dictions qu\u2019il fait lorsqu\u2019il n\u2019y a pas de parole, puis pronon\xE7ons clairement le mot de r\xE9veil "),xl=o("em"),wu=l("marvin"),Ju=l(" et regardons sa pr\xE9diction monter en fl\xE8che \xE0 pr\xE8s de 1 :"),qo=c(),m(Ms.$$.fragment),_o=c(),m(ys.$$.fragment),jo=c(),Ie=o("p"),Eu=l("G\xE9nial ! Comme nous nous y attendions, le mod\xE8le g\xE9n\xE8re des pr\xE9dictions erron\xE9es pendant les premi\xE8res secondes. Il n\u2019y a pas d\u2019entr\xE9e vocale, donc le mod\xE8le fait des pr\xE9dictions presque al\xE9atoires, mais avec une tr\xE8s faible probabilit\xE9. D\xE8s que nous pronon\xE7ons le mot de r\xE9veil, le mod\xE8le pr\xE9dit "),Al=o("em"),Tu=l("marvin"),qu=l(" avec une probabilit\xE9 proche de 1 et termine la boucle, signalant que le mot de r\xE9veil a \xE9t\xE9 d\xE9tect\xE9 et que le syst\xE8me ASR doit \xEAtre activ\xE9 !"),go=c(),me=o("h2"),$e=o("a"),Bl=o("span"),m(bs.$$.fragment),_u=c(),Wl=o("span"),ju=l("Transcription de la parole"),Uo=c(),S=o("p"),gu=l("Une fois de plus, nous utiliserons le mod\xE8le Whisper pour notre syst\xE8me de transcription de la parole. Plus pr\xE9cis\xE9ment, nous chargerons le "),Gl=o("em"),Uu=l("checkpoint"),Iu=c(),ws=o("a"),Sl=o("em"),$u=l("Whisper Base English"),Cu=l(", car il est suffisamment petit pour donner une bonne vitesse d\u2019inf\xE9rence avec une pr\xE9cision de transcription raisonnable. Nous utiliserons une astuce pour obtenir une transcription presque en temps r\xE9el en \xE9tant astucieux sur la fa\xE7on dont nous transmettons nos entr\xE9es audio au mod\xE8le. Comme auparavant, vous pouvez utiliser n\u2019importe quel mod\xE8le de reconnaissance vocale sur le "),Js=o("a"),Vl=o("em"),ku=l("Hub"),Nu=l(", y compris Wav2Vec2, MMS ASR ou d\u2019autres tailles de Whisper :"),Io=c(),m(Es.$$.fragment),$o=c(),m(Ce.$$.fragment),Co=c(),F=o("p"),Zu=l("Nous pouvons maintenant d\xE9finir une fonction pour enregistrer l\u2019entr\xE9e de notre microphone et transcrire le texte correspondant. Avec la fonction d\u2019aide "),zl=o("code"),xu=l("ffmpeg_microphone_live"),Au=l(", nous pouvons contr\xF4ler le degr\xE9 de \u201Ctemps r\xE9el\u201D de notre mod\xE8le de reconnaissance vocale. L\u2019utilisation d\u2019un "),Hl=o("code"),Bu=l("stream_chunk_s"),Wu=l(" plus petit se pr\xEAte \xE0 une reconnaissance vocale davantage en temps r\xE9el, puisque nous divisons notre audio d\u2019entr\xE9e en plus petits morceaux et que nous les transcrivons \xE0 la vol\xE9e. Cependant, cela se fait au d\xE9triment de la pr\xE9cision, puisqu\u2019il y a moins de contexte pour le mod\xE8le \xE0 d\xE9duire."),ko=c(),V=o("p"),Gu=l("Lors de la transcription de la parole, nous devons \xE9galement avoir une id\xE9e du moment o\xF9 l\u2019utilisateur "),Ll=o("strong"),Su=l("s\u2019arr\xEAte"),Vu=l(" de parler, afin de pouvoir mettre fin \xE0 l\u2019enregistrement. Pour des raisons de simplicit\xE9, nous mettrons fin \xE0 l\u2019enregistrement apr\xE8s le premier "),Ql=o("code"),zu=l("chunk_length_s"),Hu=l(" (qui est fix\xE9 \xE0 5 secondes par d\xE9faut), mais vous pouvez essayer d\u2019utiliser un mod\xE8le de "),fe=o("a"),Lu=l("d\xE9tection de l\u2019activit\xE9 vocale (VAD pour "),Rl=o("em"),Qu=l("voice activity detection"),Ru=l(")"),Pu=l(" pour pr\xE9dire quand l\u2019utilisateur s\u2019est arr\xEAt\xE9 de parler."),No=c(),m(Ts.$$.fragment),Zo=c(),ct=o("p"),Yu=l("Essayons et voyons comment nous nous d\xE9brouillerons ! Une fois que le microphone est activ\xE9, commencez \xE0 parler et regardez votre transcription appara\xEEtre en semi-temps r\xE9el :"),xo=c(),m(qs.$$.fragment),Ao=c(),m(_s.$$.fragment),Bo=c(),z=o("p"),Xu=l("Bien, vous pouvez ajuster la longueur maximale de l\u2019audio "),Pl=o("code"),Du=l("chunk_length_s"),Fu=l(" en fonction de la rapidit\xE9 ou de la lenteur avec laquelle vous parlez (augmentez-la si vous avez l\u2019impression de ne pas avoir assez de temps pour parler, diminuez-la si vous \xEAtes rest\xE9 dans l\u2019expectative \xE0 la fin), et le "),Yl=o("code"),Ou=l("stream_chunk_s"),Ku=l(" pour le facteur temps r\xE9el. Il suffit de passer ces arguments \xE0 la fonction "),Xl=o("code"),ec=l("transcribe"),sc=l("."),Wo=c(),ve=o("h2"),ke=o("a"),Dl=o("span"),m(js.$$.fragment),tc=c(),Fl=o("span"),lc=l("Requ\xEAter le mod\xE8le de langue"),Go=c(),H=o("p"),nc=l("Maintenant que notre requ\xEAte vocale a \xE9t\xE9 transcrite, nous voulons g\xE9n\xE9rer une r\xE9ponse significative. Pour ce faire, nous utiliserons un LLM h\xE9berg\xE9 sur le "),Ol=o("em"),oc=l("cloud"),rc=l(". Plus pr\xE9cis\xE9ment, nous choisissons un LLM sur le "),Kl=o("em"),ac=l("Hub"),ic=l(" et utilisons l\u2019"),gs=o("a"),uc=l("API Inference"),cc=l(" pour interroger facilement le mod\xE8le."),So=c(),N=o("p"),pc=l("Trouvons notre LLM sur le "),en=o("em"),dc=l("Hub"),mc=l(" en utilisant l\u2019"),Ne=o("a"),fc=l("\u{1F917} "),sn=o("em"),vc=l("Open LLM Leaderboard"),hc=l(", un "),tn=o("em"),Mc=l("Space"),yc=l(" qui classe les LLM par performance sur quatre t\xE2ches de g\xE9n\xE9ration. Nous effectuerons une recherche par \u201Cinstruct\u201D pour filtrer les mod\xE8les qui ont \xE9t\xE9 "),ln=o("em"),bc=l("finetun\xE9"),wc=l(" car devraient mieux fonctionner pour notre t\xE2che de requ\xEAtage :"),Vo=c(),Us=o("div"),nn=o("img"),zo=c(),J=o("p"),Jc=l("Nous utiliserons le "),on=o("em"),Ec=l("checkpoint"),Tc=c(),Is=o("a"),qc=l("tiiuae/falcon-7b-instruct"),_c=l(" par "),$s=o("a"),jc=l("TII"),gc=l(", un "),rn=o("em"),Uc=l("transformer"),Ic=l(" d\xE9codeur de param\xE8tres 7B "),an=o("em"),$c=l("finetun\xE9"),Cc=l(" sur un m\xE9lange de jeux de donn\xE9es de chat et d\u2019instructions. Vous pouvez utiliser n\u2019importe quel LLM du "),un=o("em"),kc=l("Hub"),Nc=l(" ayant l\u2019\u201D"),cn=o("em"),Zc=l("Hosted inference API"),xc=l("\u201D activ\xE9. Il suffit de regarder le widget sur le c\xF4t\xE9 droit de la carte du mod\xE8le :"),Ho=c(),Cs=o("div"),pn=o("img"),Lo=c(),Z=o("p"),Ac=l("L\u2019API Inference nous permet d\u2019envoyer une requ\xEAte HTTP depuis notre machine locale vers le LLM h\xE9berg\xE9 sur le "),dn=o("em"),Bc=l("Hub"),Wc=l(", et renvoie la r\xE9ponse sous la forme d\u2019un fichier "),mn=o("code"),Gc=l("json"),Sc=l(". Tout ce que nous devons fournir est notre "),fn=o("em"),Vc=l("token"),zc=l(" d\u2019authentification au "),vn=o("em"),Hc=l("Hub"),Lc=l(" et l\u2019identifiant du mod\xE8le du LLM que nous souhaitons interroger :"),Qo=c(),m(ks.$$.fragment),Ro=c(),pt=o("p"),Qc=l("Essayons-le avec une entr\xE9e de test !"),Po=c(),m(Ns.$$.fragment),Yo=c(),m(Zs.$$.fragment),Xo=c(),Ze=o("p"),Rc=l("Vous remarquerez \xE0 quel point l\u2019inf\xE9rence est rapide en utilisant l\u2019API Inference. Nous n\u2019avons qu\u2019\xE0 envoyer un petit nombre de "),hn=o("em"),Pc=l("tokens"),Yc=l(" de texte de notre machine locale au mod\xE8le h\xE9berg\xE9, le co\xFBt de communication est donc tr\xE8s faible. Le LLM est h\xE9berg\xE9 sur des GPU, de sorte que l\u2019inf\xE9rence s\u2019ex\xE9cute tr\xE8s rapidement. Enfin, la r\xE9ponse g\xE9n\xE9r\xE9e est transf\xE9r\xE9e du mod\xE8le \xE0 notre machine locale, toujours avec un faible co\xFBt de communication."),Do=c(),he=o("h2"),xe=o("a"),Mn=o("span"),m(xs.$$.fragment),Xc=c(),yn=o("span"),Dc=l("Synth\xE9tiser la parole"),Fo=c(),Ae=o("p"),Fc=l("Et maintenant, nous sommes pr\xEAts \xE0 obtenir la sortie vocale finale ! Une fois de plus, nous utiliserons le mod\xE8le "),As=o("a"),Oc=l("SpeechT5 TTS"),Kc=l(" de Microsoft mais vous pouvez utiliser n\u2019importe quel mod\xE8le TTS de votre choix. Chargeons le processeur et le mod\xE8le :"),Oo=c(),m(Bs.$$.fragment),Ko=c(),dt=o("p"),ep=l("Et aussi l\u2019ench\xE2ssement des locuteurs :"),er=c(),m(Ws.$$.fragment),sr=c(),O=o("p"),sp=l("Nous allons r\xE9utiliser la fonction "),bn=o("code"),tp=l("synthesise"),lp=l(" que nous avons d\xE9finie dans le chapitre "),mt=o("a"),np=l("pr\xE9c\xE9dent"),op=l(" :"),tr=c(),m(Gs.$$.fragment),lr=c(),ft=o("p"),rp=l("V\xE9rifions rapidement que cela fonctionne comme pr\xE9vu :"),nr=c(),m(Ss.$$.fragment),or=c(),vt=o("p"),ap=l("Joli travail \u{1F44D}"),rr=c(),Me=o("h2"),Be=o("a"),wn=o("span"),m(Vs.$$.fragment),ip=c(),Jn=o("span"),up=l("Marvin \u{1F916}"),ar=c(),We=o("p"),cp=l("Maintenant que nous avons d\xE9fini une fonction pour chacune des quatre \xE9tapes du pipeline de l\u2019assistant vocal, il ne reste plus qu\u2019\xE0 les assembler pour obtenir notre assistant vocal de bout en bout. Nous allons simplement concat\xE9ner les quatre \xE9tapes, en commen\xE7ant par la d\xE9tection du mot de r\xE9veil ("),En=o("code"),pp=l("launch_fn"),dp=l("), la transcription de la parole, le requ\xEAtage du LLM, et enfin la synth\xE8se de la parole."),ir=c(),m(zs.$$.fragment),ur=c(),ht=o("p"),mp=l("Essayez-le avec quelques demandes ! Voici quelques exemples pour vous aider \xE0 d\xE9marrer :"),cr=c(),K=o("ul"),Tn=o("li"),fp=l("*Quel est le pays le plus chaud du monde ?"),vp=c(),Mt=o("li"),qn=o("em"),hp=l("Comment fonctionnent les "),Mp=l("transformers* ?"),yp=c(),_n=o("li"),bp=l("*Connais-tu l\u2019espagnol ?"),pr=c(),yt=o("p"),wp=l("Et avec cela, nous avons notre assistant vocal complet, r\xE9alis\xE9 \xE0 l\u2019aide des outils audio que vous avez appris tout au long de ce cours, avec une pinc\xE9e de magie LLM \xE0 la fin. Il y a plusieurs extensions que nous pourrions faire pour am\xE9liorer l\u2019assistant vocal. Tout d\u2019abord, le mod\xE8le de classification audio classifie 35 \xE9tiquettes diff\xE9rentes. Nous pourrions utiliser un mod\xE8le de classification binaire plus petit et plus l\xE9ger qui pr\xE9dit uniquement si le mot de r\xE9veil a \xE9t\xE9 prononc\xE9 ou non. Deuxi\xE8mement, nous pr\xE9chargeons tous les mod\xE8les \xE0 l\u2019avance et les laissons tourner sur notre appareil. Si nous voulions \xE9conomiser de l\u2019\xE9nergie, nous ne chargerions chaque mod\xE8le qu\u2019au moment o\xF9 il est n\xE9cessaire, et nous le d\xE9chargerions par la suite. Troisi\xE8mement, il manque un mod\xE8le de d\xE9tection de l\u2019activit\xE9 vocale dans notre fonction de transcription, qui transcrit pendant une dur\xE9e fixe, parfois trop longue, parfois trop courte."),dr=c(),ye=o("h2"),Ge=o("a"),jn=o("span"),m(Hs.$$.fragment),Jp=c(),gn=o("span"),Ep=l("G\xE9n\xE9ralisation \u{1FA84}"),mr=c(),bt=o("p"),Tp=l("Jusqu\u2019\xE0 pr\xE9sent, nous avons vu comment g\xE9n\xE9rer des sorties vocales avec notre assistant vocal Marvin. Pour terminer, nous allons montrer comment nous pouvons g\xE9n\xE9raliser ces sorties vocales au texte, \xE0 l\u2019audio et \xE0 l\u2019image."),fr=c(),x=o("p"),qp=l("Nous utiliserons "),Ls=o("a"),Un=o("em"),_p=l("Transformers Agents"),jp=l(` pour cr\xE9er notre assistant.
`),In=o("em"),gp=l("Transformers Agents"),Up=l(" fournit une API de langage naturel au-dessus des biblioth\xE8ques \u{1F917} "),$n=o("em"),Ip=l("Transformers"),$p=l(" et "),Cn=o("em"),Cp=l("Diffusers"),kp=l(", interpr\xE9tant une entr\xE9e de langage naturel en utilisant un LLM avec des prompts soigneusement con\xE7us, et en utilisant un ensemble d\u2019outils pour fournir des sorties multimodales."),vr=c(),A=o("p"),Np=l("Allons-y et instan\xE7ons un agent. Il y a "),Qs=o("a"),Zp=l("trois LLM disponibles"),xp=l(" pour "),kn=o("em"),Ap=l("Transformers Agents"),Bp=l(", dont deux sont open-source et gratuits sur le "),Nn=o("em"),Wp=l("Hub"),Gp=l(". Le troisi\xE8me est un mod\xE8le d\u2019OpenAI qui n\xE9cessite une cl\xE9 API OpenAI. Nous utiliserons le mod\xE8le gratuit "),Rs=o("a"),Sp=l("Bigcode Starcoder"),Vp=l(" dans cet exemple, mais vous pouvez \xE9galement essayer l\u2019un ou l\u2019autre des autres LLM disponibles :"),hr=c(),m(Ps.$$.fragment),Mr=c(),Se=o("p"),zp=l("Pour utiliser l\u2019agent, il suffit d\u2019appeler "),Zn=o("code"),Hp=l("agent.run"),Lp=l(" avec notre prompt de texte. A titre d\u2019exemple, nous allons lui faire g\xE9n\xE9rer une image d\u2019un chat \u{1F408} (qui, esp\xE9rons-le, ait l\u2019air un peu mieux que cet emoji) :"),yr=c(),m(Ys.$$.fragment),br=c(),Xs=o("div"),xn=o("img"),wr=c(),m(Ve.$$.fragment),Jr=c(),ze=o("p"),Qp=l("C\u2019est aussi simple que cela ! L\u2019agent a interpr\xE9t\xE9 notre prompt et a utilis\xE9 "),Ds=o("a"),Rp=l("Stable Diffusion"),Pp=l(" pour g\xE9n\xE9rer l\u2019image, sans que nous ayons \xE0 nous soucier du chargement du mod\xE8le, de l\u2019\xE9criture de la fonction ou de l\u2019ex\xE9cution du code."),Er=c(),He=o("p"),Yp=l("Nous pouvons maintenant remplacer notre fonction de requ\xEAte LLM et l\u2019\xE9tape de synth\xE8se de texte par notre "),An=o("em"),Xp=l("Transformers Agent"),Dp=l(" dans notre assistant vocal, puisque l\u2019Agent va s\u2019occuper de ces deux \xE9tapes pour nous :"),Tr=c(),m(Fs.$$.fragment),qr=c(),wt=o("p"),Fp=l("Essayez de prononcer le m\xEAme prompt \u201CG\xE9n\xE9rer une image d\u2019un chat\u201D (en anglais \u201CGenerate an image of a cat\u201D) et voyez comment le syst\xE8me s\u2019en sort. Si vous posez \xE0 l\u2019agent une simple requ\xEAte de type question/r\xE9ponse, l\u2019agent r\xE9pondra par un texte. Vous pouvez l\u2019encourager \xE0 g\xE9n\xE9rer des sorties multimodales en lui demandant de renvoyer une image ou de la parole. Par exemple, vous pouvez lui demander de g\xE9n\xE9rer une image d\u2019un chat, la l\xE9gender et prononcer la l\xE9gende (\u201CGenerate an image of a cat, caption it, and speak the caption\u201D)."),_r=c(),Le=o("p"),Op=l("Bien que l\u2019agent soit plus flexible que notre premi\xE8re it\xE9ration de l\u2019assistant Marvin \u{1F916}, cette g\xE9n\xE9ralisation peut conduire \xE0 des performances inf\xE9rieures sur les requ\xEAtes standard de l\u2019assistant vocal. Pour r\xE9cup\xE9rer des performances, vous pouvez essayer d\u2019utiliser un LLM plus performant, comme celui d\u2019OpenAI, ou d\xE9finir un ensemble d\u2019"),Os=o("a"),Kp=l("outils personnalis\xE9s"),ed=l(" sp\xE9cifiques \xE0 la t\xE2che d\u2019assistant vocal."),this.h()},l(e){const i=mv('[data-svelte="svelte-1phssyn"]',document.head);T=r(i,"META",{name:!0,content:!0}),i.forEach(t),q=p(e),g=r(e,"H1",{class:!0});var Ks=a(g);B=r(Ks,"A",{id:!0,class:!0,href:!0});var Bn=a(B);_=r(Bn,"SPAN",{});var cd=a(_);f(U.$$.fragment,cd),cd.forEach(t),Bn.forEach(t),Fr=p(Ks),$t=r(Ks,"SPAN",{});var pd=a($t);Or=n(pd,"Cr\xE9er un assistant vocal"),pd.forEach(t),Ks.forEach(t),Wn=p(e),be=r(e,"P",{});var gr=a(be);Kr=n(gr,"Dans cette section, nous allons rassembler trois mod\xE8les d\xE9j\xE0 vus pour construire un assistant vocal de bout en bout baptis\xE9 "),Ct=r(gr,"STRONG",{});var dd=a(Ct);ea=n(dd,"Marvin"),dd.forEach(t),sa=n(gr," \u{1F916}. Comme Alexa d\u2019Amazon ou Siri d\u2019Apple, Marvin est un assistant vocal r\xE9pondant \xE0 un mot d\xE9clencheur particulier, \xE9coutant ensuite une requ\xEAte vocale et r\xE9pond enfin par une r\xE9ponse vocale."),gr.forEach(t),Gn=p(e),tt=r(e,"P",{});var md=a(tt);ta=n(md,"Nous pouvons d\xE9composer le pipeline de l\u2019assistant vocal en quatre \xE9tapes, chacune d\u2019entre elles n\xE9cessitant un mod\xE8le autonome :"),md.forEach(t),Sn=p(e),Fe=r(e,"DIV",{class:!0});var fd=a(Fe);kt=r(fd,"IMG",{src:!0}),fd.forEach(t),Vn=p(e),ie=r(e,"H3",{class:!0});var Ur=a(ie);we=r(Ur,"A",{id:!0,class:!0,href:!0});var vd=a(we);Nt=r(vd,"SPAN",{});var hd=a(Nt);f(Oe.$$.fragment,hd),hd.forEach(t),vd.forEach(t),la=p(Ur),Zt=r(Ur,"SPAN",{});var Md=a(Zt);na=n(Md,"1. D\xE9tection du mot d\xE9clencheur"),Md.forEach(t),Ur.forEach(t),zn=p(e),lt=r(e,"P",{});var yd=a(lt);oa=n(yd,"Les assistants vocaux \xE9coutent en permanence les entr\xE9es audio provenant du microphone de votre appareil, mais ils ne se mettent en action que lorsqu\u2019un mot d\xE9clencheur (ou mot de r\xE9veil) particulier est prononc\xE9."),yd.forEach(t),Hn=p(e),nt=r(e,"P",{});var bd=a(nt);ra=n(bd,"La t\xE2che de d\xE9tection des mots d\xE9clencheurs est g\xE9r\xE9e par un petit mod\xE8le de classification audio sur l\u2019appareil, qui est beaucoup plus petit et plus l\xE9ger que le mod\xE8le de reconnaissance vocale, ne comportant souvent que quelques millions de param\xE8tres, contre plusieurs centaines de millions pour la reconnaissance vocale. Il peut donc \xEAtre ex\xE9cut\xE9 en continu sur l\u2019appareil sans en \xE9puiser la batterie. Ce n\u2019est que lorsque le mot de r\xE9veil est d\xE9tect\xE9 que le mod\xE8le de reconnaissance vocale, plus grand, est lanc\xE9, avant d\u2019\xEAtre \xE0 nouveau arr\xEAt\xE9."),bd.forEach(t),Ln=p(e),ue=r(e,"H3",{class:!0});var Ir=a(ue);Je=r(Ir,"A",{id:!0,class:!0,href:!0});var wd=a(Je);xt=r(wd,"SPAN",{});var Jd=a(xt);f(Ke.$$.fragment,Jd),Jd.forEach(t),wd.forEach(t),aa=p(Ir),At=r(Ir,"SPAN",{});var Ed=a(At);ia=n(Ed,"2. Transcription de la parole"),Ed.forEach(t),Ir.forEach(t),Qn=p(e),W=r(e,"P",{});var Qe=a(W);ua=n(Qe,"L\u2019\xE9tape suivante du processus consiste \xE0 transcrire la requ\xEAte vocale en texte. Dans la pratique, le transfert des fichiers audio de votre appareil local vers le "),Bt=r(Qe,"EM",{});var Td=a(Bt);ca=n(Td,"cloud"),Td.forEach(t),pa=n(Qe," est lent en raison de la nature volumineuse des fichiers audio. Il est donc plus efficace de les transcrire directement \xE0 l\u2019aide d\u2019un mod\xE8le d\u2019ASR sur l\u2019appareil plut\xF4t qu\u2019\xE0 l\u2019aide d\u2019un mod\xE8le dans le "),Wt=r(Qe,"EM",{});var qd=a(Wt);da=n(qd,"cloud"),qd.forEach(t),ma=n(Qe,". Le mod\xE8le sur l\u2019appareil peut \xEAtre plus petit et donc moins pr\xE9cis qu\u2019un mod\xE8le h\xE9berg\xE9 dans le "),Gt=r(Qe,"EM",{});var _d=a(Gt);fa=n(_d,"cloud"),_d.forEach(t),va=n(Qe,", mais la vitesse d\u2019inf\xE9rence plus rapide en vaut la peine puisque nous pouvons ex\xE9cuter la reconnaissance vocale quasiment en temps r\xE9el, notre \xE9nonc\xE9 audio \xE9tant transcrit au fur et \xE0 mesure que nous le pronon\xE7ons."),Qe.forEach(t),Rn=p(e),ot=r(e,"P",{});var jd=a(ot);ha=n(jd,"Nous sommes maintenant tr\xE8s familiers avec le processus de reconnaissance vocale, donc cela devrait \xEAtre un jeu d\u2019enfant !"),jd.forEach(t),Pn=p(e),ce=r(e,"H3",{class:!0});var $r=a(ce);Ee=r($r,"A",{id:!0,class:!0,href:!0});var gd=a(Ee);St=r(gd,"SPAN",{});var Ud=a(St);f(es.$$.fragment,Ud),Ud.forEach(t),gd.forEach(t),Ma=p($r),Vt=r($r,"SPAN",{});var Id=a(Vt);ya=n(Id,"3. Requ\xEAter le mod\xE8le de langage"),Id.forEach(t),$r.forEach(t),Yn=p(e),Te=r(e,"P",{});var Cr=a(Te);ba=n(Cr,"Maintenant que nous savons ce que l\u2019utilisateur a demand\xE9, nous devons g\xE9n\xE9rer une r\xE9ponse ! Les meilleurs mod\xE8les candidats pour cette t\xE2che sont les "),zt=r(Cr,"EM",{});var $d=a(zt);wa=n($d,"grands mod\xE8les de langage (LLM)"),$d.forEach(t),Ja=n(Cr,", car ils sont effectivement capables de comprendre la s\xE9mantique de la requ\xEAte textuelle et de g\xE9n\xE9rer une r\xE9ponse appropri\xE9e."),Cr.forEach(t),Xn=p(e),Q=r(e,"P",{});var Jt=a(Q);Ea=n(Jt,"Puisque notre requ\xEAte textuelle est petite (juste quelques "),Ht=r(Jt,"EM",{});var Cd=a(Ht);Ta=n(Cd,"tokens"),Cd.forEach(t),qa=n(Jt,"), et les mod\xE8les de langage volumineux (plusieurs milliards de param\xE8tres), la fa\xE7on la plus efficace d\u2019ex\xE9cuter l\u2019inf\xE9rence est d\u2019envoyer notre requ\xEAte textuelle de notre appareil \xE0 un LLM fonctionnant dans le "),Lt=r(Jt,"EM",{});var kd=a(Lt);_a=n(kd,"cloud"),kd.forEach(t),ja=n(Jt,", de g\xE9n\xE9rer une r\xE9ponse textuelle, et de renvoyer la r\xE9ponse \xE0 l\u2019appareil."),Jt.forEach(t),Dn=p(e),pe=r(e,"H3",{class:!0});var kr=a(pe);qe=r(kr,"A",{id:!0,class:!0,href:!0});var Nd=a(qe);Qt=r(Nd,"SPAN",{});var Zd=a(Qt);f(ss.$$.fragment,Zd),Zd.forEach(t),Nd.forEach(t),ga=p(kr),Rt=r(kr,"SPAN",{});var xd=a(Rt);Ua=n(xd,"4. Synth\xE9tiser la r\xE9ponse"),xd.forEach(t),kr.forEach(t),Fn=p(e),_e=r(e,"P",{});var Nr=a(_e);Ia=n(Nr,"Enfin, nous utiliserons un mod\xE8le de synth\xE8se vocale pour synth\xE9tiser la r\xE9ponse textuelle sous forme de parole. Cette op\xE9ration s\u2019effectue sur l\u2019appareil, mais il est tout \xE0 fait possible d\u2019ex\xE9cuter un mod\xE8le de synth\xE8se vocale dans le "),Pt=r(Nr,"EM",{});var Ad=a(Pt);$a=n(Ad,"cloud"),Ad.forEach(t),Ca=n(Nr,", en g\xE9n\xE9rant la sortie audio et en la transf\xE9rant vers l\u2019appareil."),Nr.forEach(t),On=p(e),rt=r(e,"P",{});var Bd=a(rt);ka=n(Bd,"Encore une fois, nous avons fait cela plusieurs fois maintenant, donc le processus sera tr\xE8s familier !"),Bd.forEach(t),Kn=p(e),de=r(e,"H2",{class:!0});var Zr=a(de);je=r(Zr,"A",{id:!0,class:!0,href:!0});var Wd=a(je);Yt=r(Wd,"SPAN",{});var Gd=a(Yt);f(ts.$$.fragment,Gd),Gd.forEach(t),Wd.forEach(t),Na=p(Zr),Xt=r(Zr,"SPAN",{});var Sd=a(Xt);Za=n(Sd,"D\xE9tection des mots d\xE9clencheur"),Sd.forEach(t),Zr.forEach(t),eo=p(e),b=r(e,"P",{});var E=a(b);xa=n(E,"La premi\xE8re \xE9tape du pipeline de l\u2019assistant vocal consiste \xE0 d\xE9tecter si le mot d\xE9clencheur a \xE9t\xE9 prononc\xE9, et nous devons donc trouver un mod\xE8le pr\xE9-entra\xEEn\xE9 appropri\xE9 pour cette t\xE2che ! Vous vous souviendrez de la section sur les "),at=r(E,"A",{href:!0});var Vd=a(at);Aa=n(Vd,"mod\xE8les pr\xE9-entra\xEEn\xE9s pour la classification audio"),Vd.forEach(t),Ba=n(E," que "),ls=r(E,"A",{href:!0,rel:!0});var zd=a(ls);Wa=n(zd,"Speech Commands"),zd.forEach(t),Ga=n(E," est un jeu de donn\xE9es de mots prononc\xE9s con\xE7u pour \xE9valuer les mod\xE8les de classification audio sur plus de 15 mots de commande simples comme "),Dt=r(E,"CODE",{});var Hd=a(Dt);Sa=n(Hd,"up"),Hd.forEach(t),Va=n(E,", "),Ft=r(E,"CODE",{});var Ld=a(Ft);za=n(Ld,"down"),Ld.forEach(t),Ha=n(E,", "),Ot=r(E,"CODE",{});var Qd=a(Ot);La=n(Qd,"yes"),Qd.forEach(t),Qa=n(E," et "),Kt=r(E,"CODE",{});var Rd=a(Kt);Ra=n(Rd,"no"),Rd.forEach(t),Pa=n(E,", ainsi qu\u2019un label "),el=r(E,"CODE",{});var Pd=a(el);Ya=n(Pd,"silence"),Pd.forEach(t),Xa=n(E," pour classer l\u2019absence de parole. Prenez une minute pour \xE9couter les \xE9chantillons sur le visualisateur de jeux de donn\xE9es du "),sl=r(E,"EM",{});var Yd=a(sl);Da=n(Yd,"Hub"),Yd.forEach(t),Fa=n(E," et vous familiariser \xE0 nouveau avec le jeu de donn\xE9es : "),ns=r(E,"A",{href:!0,rel:!0});var Xd=a(ns);Oa=n(Xd,"visualisateur"),Xd.forEach(t),Ka=n(E,"."),E.forEach(t),so=p(e),it=r(e,"P",{});var Dd=a(it);ei=n(Dd,"Nous pouvons utiliser un mod\xE8le de classification audio pr\xE9-entra\xEEn\xE9 sur le jeu de donn\xE9es Speech Commands et choisir l\u2019un de ces mots de commande simples comme mot d\xE9clencheur. Parmi plus de 15 mots de commande possibles, si le mod\xE8le pr\xE9dit avec la plus grande probabilit\xE9 le mot que nous avons choisi, nous pouvons \xEAtre quasiment certains que ce mot de d\xE9clencheur a \xE9t\xE9 prononc\xE9."),Dd.forEach(t),to=p(e),I=r(e,"P",{});var ee=a(I);si=n(ee,"Rendez-vous sur le "),tl=r(ee,"EM",{});var Fd=a(tl);ti=n(Fd,"Hub"),Fd.forEach(t),li=n(ee," et cliquez sur l\u2019onglet "),ll=r(ee,"EM",{});var Od=a(ll);ni=n(Od,"Models"),Od.forEach(t),oi=n(ee," : "),os=r(ee,"A",{href:!0,rel:!0});var Kd=a(os);ri=n(Kd,"https://huggingface.co/models"),Kd.forEach(t),ai=n(ee,". Cela va faire appara\xEEtre tous les mod\xE8les sur le "),nl=r(ee,"EM",{});var em=a(nl);ii=n(em,"Hub"),em.forEach(t),ui=n(ee," :"),ee.forEach(t),lo=p(e),rs=r(e,"DIV",{class:!0});var sm=a(rs);ol=r(sm,"IMG",{src:!0}),sm.forEach(t),no=p(e),ge=r(e,"P",{});var xr=a(ge);ci=n(xr,"Vous remarquerez sur le c\xF4t\xE9 gauche que nous avons une s\xE9lection d\u2019onglets que nous pouvons s\xE9lectionner pour filtrer les mod\xE8les par t\xE2che, biblioth\xE8que, jeu de donn\xE9es, etc. Faites d\xE9filer vers le bas et s\xE9lectionnez la t\xE2che "),rl=r(xr,"EM",{});var tm=a(rl);pi=n(tm,"Audio Classification"),tm.forEach(t),di=n(xr," dans la liste des t\xE2ches audio :"),xr.forEach(t),oo=p(e),as=r(e,"DIV",{class:!0});var lm=a(as);al=r(lm,"IMG",{src:!0}),lm.forEach(t),ro=p(e),$=r(e,"P",{});var se=a($);mi=n(se,"Nous sommes maintenant en pr\xE9sence d\u2019un sous-ensemble de plus de 500 mod\xE8les de classification audio sur le "),il=r(se,"EM",{});var nm=a(il);fi=n(nm,"Hub"),nm.forEach(t),vi=n(se,". Pour affiner cette s\xE9lection, nous pouvons filtrer les mod\xE8les par jeu de donn\xE9es. Cliquez sur l\u2019onglet "),ul=r(se,"EM",{});var om=a(ul);hi=n(om,"Datasets"),om.forEach(t),Mi=n(se," et dans la barre de recherche, tapez "),cl=r(se,"EM",{});var rm=a(cl);yi=n(rm,"speech_commands"),rm.forEach(t),bi=n(se,". Vous pouvez cliquer sur ce bouton pour filtrer tous les mod\xE8les de classification audio vers ceux qui ont \xE9t\xE9 "),pl=r(se,"EM",{});var am=a(pl);wi=n(am,"finetun\xE9"),am.forEach(t),Ji=n(se," sur le jeu de donn\xE9es Speech Commands :"),se.forEach(t),ao=p(e),is=r(e,"DIV",{class:!0});var im=a(is);dl=r(im,"IMG",{src:!0}),im.forEach(t),io=p(e),R=r(e,"P",{});var Et=a(R);Ei=n(Et,"Bien , nous constatons que nous disposons de six mod\xE8les pr\xE9-entra\xEEn\xE9s pour ce jeu de donn\xE9es et cette t\xE2che sp\xE9cifiques (bien que de nouveaux mod\xE8les puissent \xEAtre ajout\xE9s si vous lisez \xE0 une date ult\xE9rieure !) Vous reconna\xEEtrez le premier de ces mod\xE8les comme le "),us=r(Et,"A",{href:!0,rel:!0});var um=a(us);ml=r(um,"EM",{});var cm=a(ml);Ti=n(cm,"Spectrogram Transformer"),cm.forEach(t),um.forEach(t),qi=n(Et," que nous avons utilis\xE9 dans l\u2019exemple de l\u2019unit\xE9 4. Nous utiliserons \xE0 nouveau ce "),fl=r(Et,"EM",{});var pm=a(fl);_i=n(pm,"checkpoint"),pm.forEach(t),ji=n(Et," pour notre t\xE2che de d\xE9tection de mots d\xE9clencheur."),Et.forEach(t),uo=p(e),P=r(e,"P",{});var Tt=a(P);gi=n(Tt,"Chargeons le "),vl=r(Tt,"EM",{});var dm=a(vl);Ui=n(dm,"checkpoint"),dm.forEach(t),Ii=n(Tt," \xE0 l\u2019aide de la classe "),hl=r(Tt,"CODE",{});var mm=a(hl);$i=n(mm,"pipeline"),mm.forEach(t),Ci=n(Tt," :"),Tt.forEach(t),co=p(e),f(cs.$$.fragment,e),po=p(e),Ue=r(e,"P",{});var Ar=a(Ue);ki=n(Ar,"Nous pouvons v\xE9rifier sur quelles \xE9tiquettes le mod\xE8le a \xE9t\xE9 entra\xEEn\xE9 en v\xE9rifiant l\u2019attribut "),Ml=r(Ar,"CODE",{});var fm=a(Ml);Ni=n(fm,"id2label"),fm.forEach(t),Zi=n(Ar," dans la configuration du mod\xE8le :"),Ar.forEach(t),mo=p(e),f(ps.$$.fragment,e),fo=p(e),C=r(e,"P",{});var te=a(C);xi=n(te,"Nous voyons que le mod\xE8le a \xE9t\xE9 entra\xEEn\xE9 sur 35 \xE9tiquettes de classe, y compris quelques mots d\xE9clencheurs simples que nous avons d\xE9crits ci-dessus, ainsi que quelques objets particuliers comme "),yl=r(te,"CODE",{});var vm=a(yl);Ai=n(vm,"bed"),vm.forEach(t),Bi=n(te,", "),bl=r(te,"CODE",{});var hm=a(bl);Wi=n(hm,"house"),hm.forEach(t),Gi=n(te," et "),wl=r(te,"CODE",{});var Mm=a(wl);Si=n(Mm,"cat"),Mm.forEach(t),Vi=n(te,". Nous voyons qu\u2019il y a un nom dans ces \xE9tiquettes de classe : id 27 correspond \xE0 l\u2019\xE9tiquette "),Jl=r(te,"STRONG",{});var ym=a(Jl);El=r(ym,"CODE",{});var bm=a(El);zi=n(bm,"marvin"),bm.forEach(t),ym.forEach(t),Hi=n(te," :"),te.forEach(t),vo=p(e),f(ds.$$.fragment,e),ho=p(e),f(ms.$$.fragment,e),Mo=p(e),ut=r(e,"P",{});var wm=a(ut);Li=n(wm,"Parfait ! Nous pouvons utiliser ce nom comme mot d\xE9lchencheur de notre assistant vocal, de la m\xEAme mani\xE8re qu\u2019on utilise \u201CAlexa\u201D pour l\u2019Alexa d\u2019Amazon, ou \u201CHey Siri\u201D pour le Siri d\u2019Apple. Parmi toutes les \xE9tiquettes possibles, si le mod\xE8le pr\xE9dit \u201Cmarvin\u201D avec la probabilit\xE9 de classe la plus \xE9lev\xE9e, nous pouvons \xEAtre s\xFBrs que le mot de r\xE9veil que nous avons choisi a \xE9t\xE9 prononc\xE9."),wm.forEach(t),yo=p(e),Y=r(e,"P",{});var qt=a(Y);Qi=n(qt,"Nous devons maintenant d\xE9finir une fonction qui \xE9coute en permanence le microphone de notre appareil et qui transmet continuellement l\u2019audio au mod\xE8le de classification pour inf\xE9rence. Pour ce faire, nous allons utiliser une fonction d\u2019aide pratique fournie avec \u{1F917} "),Tl=r(qt,"EM",{});var Jm=a(Tl);Ri=n(Jm,"Transformers"),Jm.forEach(t),Pi=n(qt," appel\xE9e "),fs=r(qt,"A",{href:!0,rel:!0});var Em=a(fs);ql=r(Em,"CODE",{});var Tm=a(ql);Yi=n(Tm,"ffmpeg_microphone_live"),Tm.forEach(t),Em.forEach(t),Xi=n(qt,"."),qt.forEach(t),bo=p(e),k=r(e,"P",{});var le=a(k);Di=n(le,"Cette fonction transmet de petits morceaux d\u2019audio d\u2019une longueur sp\xE9cifi\xE9e "),_l=r(le,"CODE",{});var qm=a(_l);Fi=n(qm,"chunk_length_s"),qm.forEach(t),Oi=n(le," au classifieur. Pour s\u2019assurer que nous obtenons des fronti\xE8res lisses entre les morceaux d\u2019audio, nous lan\xE7ons une fen\xEAtre coulissante \xE0 travers notre audio avec un pas de "),jl=r(le,"CODE",{});var _m=a(jl);Ki=n(_m,"chunk_length_s / 6"),_m.forEach(t),eu=n(le,`.
Pour que nous n\u2019ayons pas \xE0 attendre que tout le premier morceau soit enregistr\xE9 avant de commencer l\u2019inf\xE9rence, nous d\xE9finissons \xE9galement une longueur d\u2019entr\xE9e audio temporaire minimale `),gl=r(le,"CODE",{});var jm=a(gl);su=n(jm,"stream_chunk_s"),jm.forEach(t),tu=n(le," qui est transmise au mod\xE8le avant que le temps "),Ul=r(le,"CODE",{});var gm=a(Ul);lu=n(gm,"chunk_length_s"),gm.forEach(t),nu=n(le," ne soit atteint."),le.forEach(t),wo=p(e),G=r(e,"P",{});var Re=a(G);ou=n(Re,"La fonction "),Il=r(Re,"CODE",{});var Um=a(Il);ru=n(Um,"ffmpeg_microphone_live"),Um.forEach(t),au=n(Re," renvoie un objet "),$l=r(Re,"EM",{});var Im=a($l);iu=n(Im,"generator"),Im.forEach(t),uu=n(Re,", produisant une s\xE9quence de morceaux audio qui peuvent chacun \xEAtre transmis au mod\xE8le de classification pour faire une pr\xE9diction. Nous pouvons passer ce g\xE9n\xE9rateur directement au "),Cl=r(Re,"CODE",{});var $m=a(Cl);cu=n($m,"pipeline"),$m.forEach(t),pu=n(Re,", qui \xE0 son tour retourne une s\xE9quence de pr\xE9dictions de sortie, une pour chaque morceau d\u2019entr\xE9e audio. Nous pouvons inspecter les probabilit\xE9s des classes pour chaque morceau d\u2019audio, et arr\xEAter notre boucle de d\xE9tection de mot de r\xE9veil lorsque nous d\xE9tectons que le mot de r\xE9veil a \xE9t\xE9 prononc\xE9."),Re.forEach(t),Jo=p(e),X=r(e,"P",{});var _t=a(X);du=n(_t,"Nous utiliserons un crit\xE8re tr\xE8s simple pour d\xE9terminer si notre mot de r\xE9veil a \xE9t\xE9 prononc\xE9 : si l\u2019\xE9tiquette de classe ayant la probabilit\xE9 la plus \xE9lev\xE9e est celle de notre mot, et que cette probabilit\xE9 d\xE9passe un seuil "),kl=r(_t,"CODE",{});var Cm=a(kl);mu=n(Cm,"prob_threshold"),Cm.forEach(t),fu=n(_t,", nous d\xE9clarons que le mot d\xE9clencheur a \xE9t\xE9 prononc\xE9. L\u2019utilisation d\u2019un seuil de probabilit\xE9 pour contr\xF4ler notre classifieur garantit que le mot d\xE9clencheur  n\u2019est pas pr\xE9dit par erreur si l\u2019entr\xE9e audio est un bruit, ce qui est typiquement le cas lorsque le mod\xE8le est tr\xE8s incertain et que toutes les probabilit\xE9s d\u2019\xE9tiquettes de classe sont faibles. Vous voudrez peut-\xEAtre ajuster ce seuil de probabilit\xE9 ou explorer des moyens plus sophistiqu\xE9s par le biais d\u2019une m\xE9trique bas\xE9e sur l\u2019"),vs=r(_t,"A",{href:!0,rel:!0});var km=a(vs);Nl=r(km,"EM",{});var Nm=a(Nl);vu=n(Nm,"entropie"),Nm.forEach(t),km.forEach(t),hu=n(_t,"."),_t.forEach(t),Eo=p(e),f(hs.$$.fragment,e),To=p(e),D=r(e,"P",{});var jt=a(D);Mu=n(jt,"Essayons cette fonction pour voir comment elle fonctionne ! Nous allons mettre "),Zl=r(jt,"CODE",{});var Zm=a(Zl);yu=n(Zm,"debug=True"),Zm.forEach(t),bu=n(jt," pour afficher la pr\xE9diction pour chaque morceau d\u2019audio. Laissons le mod\xE8le fonctionner pendant quelques secondes pour voir le type de pr\xE9dictions qu\u2019il fait lorsqu\u2019il n\u2019y a pas de parole, puis pronon\xE7ons clairement le mot de r\xE9veil "),xl=r(jt,"EM",{});var xm=a(xl);wu=n(xm,"marvin"),xm.forEach(t),Ju=n(jt," et regardons sa pr\xE9diction monter en fl\xE8che \xE0 pr\xE8s de 1 :"),jt.forEach(t),qo=p(e),f(Ms.$$.fragment,e),_o=p(e),f(ys.$$.fragment,e),jo=p(e),Ie=r(e,"P",{});var Br=a(Ie);Eu=n(Br,"G\xE9nial ! Comme nous nous y attendions, le mod\xE8le g\xE9n\xE8re des pr\xE9dictions erron\xE9es pendant les premi\xE8res secondes. Il n\u2019y a pas d\u2019entr\xE9e vocale, donc le mod\xE8le fait des pr\xE9dictions presque al\xE9atoires, mais avec une tr\xE8s faible probabilit\xE9. D\xE8s que nous pronon\xE7ons le mot de r\xE9veil, le mod\xE8le pr\xE9dit "),Al=r(Br,"EM",{});var Am=a(Al);Tu=n(Am,"marvin"),Am.forEach(t),qu=n(Br," avec une probabilit\xE9 proche de 1 et termine la boucle, signalant que le mot de r\xE9veil a \xE9t\xE9 d\xE9tect\xE9 et que le syst\xE8me ASR doit \xEAtre activ\xE9 !"),Br.forEach(t),go=p(e),me=r(e,"H2",{class:!0});var Wr=a(me);$e=r(Wr,"A",{id:!0,class:!0,href:!0});var Bm=a($e);Bl=r(Bm,"SPAN",{});var Wm=a(Bl);f(bs.$$.fragment,Wm),Wm.forEach(t),Bm.forEach(t),_u=p(Wr),Wl=r(Wr,"SPAN",{});var Gm=a(Wl);ju=n(Gm,"Transcription de la parole"),Gm.forEach(t),Wr.forEach(t),Uo=p(e),S=r(e,"P",{});var Pe=a(S);gu=n(Pe,"Une fois de plus, nous utiliserons le mod\xE8le Whisper pour notre syst\xE8me de transcription de la parole. Plus pr\xE9cis\xE9ment, nous chargerons le "),Gl=r(Pe,"EM",{});var Sm=a(Gl);Uu=n(Sm,"checkpoint"),Sm.forEach(t),Iu=p(Pe),ws=r(Pe,"A",{href:!0,rel:!0});var Vm=a(ws);Sl=r(Vm,"EM",{});var zm=a(Sl);$u=n(zm,"Whisper Base English"),zm.forEach(t),Vm.forEach(t),Cu=n(Pe,", car il est suffisamment petit pour donner une bonne vitesse d\u2019inf\xE9rence avec une pr\xE9cision de transcription raisonnable. Nous utiliserons une astuce pour obtenir une transcription presque en temps r\xE9el en \xE9tant astucieux sur la fa\xE7on dont nous transmettons nos entr\xE9es audio au mod\xE8le. Comme auparavant, vous pouvez utiliser n\u2019importe quel mod\xE8le de reconnaissance vocale sur le "),Js=r(Pe,"A",{href:!0,rel:!0});var Hm=a(Js);Vl=r(Hm,"EM",{});var Lm=a(Vl);ku=n(Lm,"Hub"),Lm.forEach(t),Hm.forEach(t),Nu=n(Pe,", y compris Wav2Vec2, MMS ASR ou d\u2019autres tailles de Whisper :"),Pe.forEach(t),Io=p(e),f(Es.$$.fragment,e),$o=p(e),f(Ce.$$.fragment,e),Co=p(e),F=r(e,"P",{});var gt=a(F);Zu=n(gt,"Nous pouvons maintenant d\xE9finir une fonction pour enregistrer l\u2019entr\xE9e de notre microphone et transcrire le texte correspondant. Avec la fonction d\u2019aide "),zl=r(gt,"CODE",{});var Qm=a(zl);xu=n(Qm,"ffmpeg_microphone_live"),Qm.forEach(t),Au=n(gt,", nous pouvons contr\xF4ler le degr\xE9 de \u201Ctemps r\xE9el\u201D de notre mod\xE8le de reconnaissance vocale. L\u2019utilisation d\u2019un "),Hl=r(gt,"CODE",{});var Rm=a(Hl);Bu=n(Rm,"stream_chunk_s"),Rm.forEach(t),Wu=n(gt," plus petit se pr\xEAte \xE0 une reconnaissance vocale davantage en temps r\xE9el, puisque nous divisons notre audio d\u2019entr\xE9e en plus petits morceaux et que nous les transcrivons \xE0 la vol\xE9e. Cependant, cela se fait au d\xE9triment de la pr\xE9cision, puisqu\u2019il y a moins de contexte pour le mod\xE8le \xE0 d\xE9duire."),gt.forEach(t),ko=p(e),V=r(e,"P",{});var Ye=a(V);Gu=n(Ye,"Lors de la transcription de la parole, nous devons \xE9galement avoir une id\xE9e du moment o\xF9 l\u2019utilisateur "),Ll=r(Ye,"STRONG",{});var Pm=a(Ll);Su=n(Pm,"s\u2019arr\xEAte"),Pm.forEach(t),Vu=n(Ye," de parler, afin de pouvoir mettre fin \xE0 l\u2019enregistrement. Pour des raisons de simplicit\xE9, nous mettrons fin \xE0 l\u2019enregistrement apr\xE8s le premier "),Ql=r(Ye,"CODE",{});var Ym=a(Ql);zu=n(Ym,"chunk_length_s"),Ym.forEach(t),Hu=n(Ye," (qui est fix\xE9 \xE0 5 secondes par d\xE9faut), mais vous pouvez essayer d\u2019utiliser un mod\xE8le de "),fe=r(Ye,"A",{href:!0,rel:!0});var Gr=a(fe);Lu=n(Gr,"d\xE9tection de l\u2019activit\xE9 vocale (VAD pour "),Rl=r(Gr,"EM",{});var Xm=a(Rl);Qu=n(Xm,"voice activity detection"),Xm.forEach(t),Ru=n(Gr,")"),Gr.forEach(t),Pu=n(Ye," pour pr\xE9dire quand l\u2019utilisateur s\u2019est arr\xEAt\xE9 de parler."),Ye.forEach(t),No=p(e),f(Ts.$$.fragment,e),Zo=p(e),ct=r(e,"P",{});var Dm=a(ct);Yu=n(Dm,"Essayons et voyons comment nous nous d\xE9brouillerons ! Une fois que le microphone est activ\xE9, commencez \xE0 parler et regardez votre transcription appara\xEEtre en semi-temps r\xE9el :"),Dm.forEach(t),xo=p(e),f(qs.$$.fragment,e),Ao=p(e),f(_s.$$.fragment,e),Bo=p(e),z=r(e,"P",{});var Xe=a(z);Xu=n(Xe,"Bien, vous pouvez ajuster la longueur maximale de l\u2019audio "),Pl=r(Xe,"CODE",{});var Fm=a(Pl);Du=n(Fm,"chunk_length_s"),Fm.forEach(t),Fu=n(Xe," en fonction de la rapidit\xE9 ou de la lenteur avec laquelle vous parlez (augmentez-la si vous avez l\u2019impression de ne pas avoir assez de temps pour parler, diminuez-la si vous \xEAtes rest\xE9 dans l\u2019expectative \xE0 la fin), et le "),Yl=r(Xe,"CODE",{});var Om=a(Yl);Ou=n(Om,"stream_chunk_s"),Om.forEach(t),Ku=n(Xe," pour le facteur temps r\xE9el. Il suffit de passer ces arguments \xE0 la fonction "),Xl=r(Xe,"CODE",{});var Km=a(Xl);ec=n(Km,"transcribe"),Km.forEach(t),sc=n(Xe,"."),Xe.forEach(t),Wo=p(e),ve=r(e,"H2",{class:!0});var Sr=a(ve);ke=r(Sr,"A",{id:!0,class:!0,href:!0});var ef=a(ke);Dl=r(ef,"SPAN",{});var sf=a(Dl);f(js.$$.fragment,sf),sf.forEach(t),ef.forEach(t),tc=p(Sr),Fl=r(Sr,"SPAN",{});var tf=a(Fl);lc=n(tf,"Requ\xEAter le mod\xE8le de langue"),tf.forEach(t),Sr.forEach(t),Go=p(e),H=r(e,"P",{});var De=a(H);nc=n(De,"Maintenant que notre requ\xEAte vocale a \xE9t\xE9 transcrite, nous voulons g\xE9n\xE9rer une r\xE9ponse significative. Pour ce faire, nous utiliserons un LLM h\xE9berg\xE9 sur le "),Ol=r(De,"EM",{});var lf=a(Ol);oc=n(lf,"cloud"),lf.forEach(t),rc=n(De,". Plus pr\xE9cis\xE9ment, nous choisissons un LLM sur le "),Kl=r(De,"EM",{});var nf=a(Kl);ac=n(nf,"Hub"),nf.forEach(t),ic=n(De," et utilisons l\u2019"),gs=r(De,"A",{href:!0,rel:!0});var of=a(gs);uc=n(of,"API Inference"),of.forEach(t),cc=n(De," pour interroger facilement le mod\xE8le."),De.forEach(t),So=p(e),N=r(e,"P",{});var ne=a(N);pc=n(ne,"Trouvons notre LLM sur le "),en=r(ne,"EM",{});var rf=a(en);dc=n(rf,"Hub"),rf.forEach(t),mc=n(ne," en utilisant l\u2019"),Ne=r(ne,"A",{href:!0,rel:!0});var sd=a(Ne);fc=n(sd,"\u{1F917} "),sn=r(sd,"EM",{});var af=a(sn);vc=n(af,"Open LLM Leaderboard"),af.forEach(t),sd.forEach(t),hc=n(ne,", un "),tn=r(ne,"EM",{});var uf=a(tn);Mc=n(uf,"Space"),uf.forEach(t),yc=n(ne," qui classe les LLM par performance sur quatre t\xE2ches de g\xE9n\xE9ration. Nous effectuerons une recherche par \u201Cinstruct\u201D pour filtrer les mod\xE8les qui ont \xE9t\xE9 "),ln=r(ne,"EM",{});var cf=a(ln);bc=n(cf,"finetun\xE9"),cf.forEach(t),wc=n(ne," car devraient mieux fonctionner pour notre t\xE2che de requ\xEAtage :"),ne.forEach(t),Vo=p(e),Us=r(e,"DIV",{class:!0});var pf=a(Us);nn=r(pf,"IMG",{src:!0}),pf.forEach(t),zo=p(e),J=r(e,"P",{});var j=a(J);Jc=n(j,"Nous utiliserons le "),on=r(j,"EM",{});var df=a(on);Ec=n(df,"checkpoint"),df.forEach(t),Tc=p(j),Is=r(j,"A",{href:!0,rel:!0});var mf=a(Is);qc=n(mf,"tiiuae/falcon-7b-instruct"),mf.forEach(t),_c=n(j," par "),$s=r(j,"A",{href:!0,rel:!0});var ff=a($s);jc=n(ff,"TII"),ff.forEach(t),gc=n(j,", un "),rn=r(j,"EM",{});var vf=a(rn);Uc=n(vf,"transformer"),vf.forEach(t),Ic=n(j," d\xE9codeur de param\xE8tres 7B "),an=r(j,"EM",{});var hf=a(an);$c=n(hf,"finetun\xE9"),hf.forEach(t),Cc=n(j," sur un m\xE9lange de jeux de donn\xE9es de chat et d\u2019instructions. Vous pouvez utiliser n\u2019importe quel LLM du "),un=r(j,"EM",{});var Mf=a(un);kc=n(Mf,"Hub"),Mf.forEach(t),Nc=n(j," ayant l\u2019\u201D"),cn=r(j,"EM",{});var yf=a(cn);Zc=n(yf,"Hosted inference API"),yf.forEach(t),xc=n(j,"\u201D activ\xE9. Il suffit de regarder le widget sur le c\xF4t\xE9 droit de la carte du mod\xE8le :"),j.forEach(t),Ho=p(e),Cs=r(e,"DIV",{class:!0});var bf=a(Cs);pn=r(bf,"IMG",{src:!0}),bf.forEach(t),Lo=p(e),Z=r(e,"P",{});var oe=a(Z);Ac=n(oe,"L\u2019API Inference nous permet d\u2019envoyer une requ\xEAte HTTP depuis notre machine locale vers le LLM h\xE9berg\xE9 sur le "),dn=r(oe,"EM",{});var wf=a(dn);Bc=n(wf,"Hub"),wf.forEach(t),Wc=n(oe,", et renvoie la r\xE9ponse sous la forme d\u2019un fichier "),mn=r(oe,"CODE",{});var Jf=a(mn);Gc=n(Jf,"json"),Jf.forEach(t),Sc=n(oe,". Tout ce que nous devons fournir est notre "),fn=r(oe,"EM",{});var Ef=a(fn);Vc=n(Ef,"token"),Ef.forEach(t),zc=n(oe," d\u2019authentification au "),vn=r(oe,"EM",{});var Tf=a(vn);Hc=n(Tf,"Hub"),Tf.forEach(t),Lc=n(oe," et l\u2019identifiant du mod\xE8le du LLM que nous souhaitons interroger :"),oe.forEach(t),Qo=p(e),f(ks.$$.fragment,e),Ro=p(e),pt=r(e,"P",{});var qf=a(pt);Qc=n(qf,"Essayons-le avec une entr\xE9e de test !"),qf.forEach(t),Po=p(e),f(Ns.$$.fragment,e),Yo=p(e),f(Zs.$$.fragment,e),Xo=p(e),Ze=r(e,"P",{});var Vr=a(Ze);Rc=n(Vr,"Vous remarquerez \xE0 quel point l\u2019inf\xE9rence est rapide en utilisant l\u2019API Inference. Nous n\u2019avons qu\u2019\xE0 envoyer un petit nombre de "),hn=r(Vr,"EM",{});var _f=a(hn);Pc=n(_f,"tokens"),_f.forEach(t),Yc=n(Vr," de texte de notre machine locale au mod\xE8le h\xE9berg\xE9, le co\xFBt de communication est donc tr\xE8s faible. Le LLM est h\xE9berg\xE9 sur des GPU, de sorte que l\u2019inf\xE9rence s\u2019ex\xE9cute tr\xE8s rapidement. Enfin, la r\xE9ponse g\xE9n\xE9r\xE9e est transf\xE9r\xE9e du mod\xE8le \xE0 notre machine locale, toujours avec un faible co\xFBt de communication."),Vr.forEach(t),Do=p(e),he=r(e,"H2",{class:!0});var zr=a(he);xe=r(zr,"A",{id:!0,class:!0,href:!0});var jf=a(xe);Mn=r(jf,"SPAN",{});var gf=a(Mn);f(xs.$$.fragment,gf),gf.forEach(t),jf.forEach(t),Xc=p(zr),yn=r(zr,"SPAN",{});var Uf=a(yn);Dc=n(Uf,"Synth\xE9tiser la parole"),Uf.forEach(t),zr.forEach(t),Fo=p(e),Ae=r(e,"P",{});var Hr=a(Ae);Fc=n(Hr,"Et maintenant, nous sommes pr\xEAts \xE0 obtenir la sortie vocale finale ! Une fois de plus, nous utiliserons le mod\xE8le "),As=r(Hr,"A",{href:!0,rel:!0});var If=a(As);Oc=n(If,"SpeechT5 TTS"),If.forEach(t),Kc=n(Hr," de Microsoft mais vous pouvez utiliser n\u2019importe quel mod\xE8le TTS de votre choix. Chargeons le processeur et le mod\xE8le :"),Hr.forEach(t),Oo=p(e),f(Bs.$$.fragment,e),Ko=p(e),dt=r(e,"P",{});var $f=a(dt);ep=n($f,"Et aussi l\u2019ench\xE2ssement des locuteurs :"),$f.forEach(t),er=p(e),f(Ws.$$.fragment,e),sr=p(e),O=r(e,"P",{});var Ut=a(O);sp=n(Ut,"Nous allons r\xE9utiliser la fonction "),bn=r(Ut,"CODE",{});var Cf=a(bn);tp=n(Cf,"synthesise"),Cf.forEach(t),lp=n(Ut," que nous avons d\xE9finie dans le chapitre "),mt=r(Ut,"A",{href:!0});var kf=a(mt);np=n(kf,"pr\xE9c\xE9dent"),kf.forEach(t),op=n(Ut," :"),Ut.forEach(t),tr=p(e),f(Gs.$$.fragment,e),lr=p(e),ft=r(e,"P",{});var Nf=a(ft);rp=n(Nf,"V\xE9rifions rapidement que cela fonctionne comme pr\xE9vu :"),Nf.forEach(t),nr=p(e),f(Ss.$$.fragment,e),or=p(e),vt=r(e,"P",{});var Zf=a(vt);ap=n(Zf,"Joli travail \u{1F44D}"),Zf.forEach(t),rr=p(e),Me=r(e,"H2",{class:!0});var Lr=a(Me);Be=r(Lr,"A",{id:!0,class:!0,href:!0});var xf=a(Be);wn=r(xf,"SPAN",{});var Af=a(wn);f(Vs.$$.fragment,Af),Af.forEach(t),xf.forEach(t),ip=p(Lr),Jn=r(Lr,"SPAN",{});var Bf=a(Jn);up=n(Bf,"Marvin \u{1F916}"),Bf.forEach(t),Lr.forEach(t),ar=p(e),We=r(e,"P",{});var Qr=a(We);cp=n(Qr,"Maintenant que nous avons d\xE9fini une fonction pour chacune des quatre \xE9tapes du pipeline de l\u2019assistant vocal, il ne reste plus qu\u2019\xE0 les assembler pour obtenir notre assistant vocal de bout en bout. Nous allons simplement concat\xE9ner les quatre \xE9tapes, en commen\xE7ant par la d\xE9tection du mot de r\xE9veil ("),En=r(Qr,"CODE",{});var Wf=a(En);pp=n(Wf,"launch_fn"),Wf.forEach(t),dp=n(Qr,"), la transcription de la parole, le requ\xEAtage du LLM, et enfin la synth\xE8se de la parole."),Qr.forEach(t),ir=p(e),f(zs.$$.fragment,e),ur=p(e),ht=r(e,"P",{});var Gf=a(ht);mp=n(Gf,"Essayez-le avec quelques demandes ! Voici quelques exemples pour vous aider \xE0 d\xE9marrer :"),Gf.forEach(t),cr=p(e),K=r(e,"UL",{});var It=a(K);Tn=r(It,"LI",{});var Sf=a(Tn);fp=n(Sf,"*Quel est le pays le plus chaud du monde ?"),Sf.forEach(t),vp=p(It),Mt=r(It,"LI",{});var td=a(Mt);qn=r(td,"EM",{});var Vf=a(qn);hp=n(Vf,"Comment fonctionnent les "),Vf.forEach(t),Mp=n(td,"transformers* ?"),td.forEach(t),yp=p(It),_n=r(It,"LI",{});var zf=a(_n);bp=n(zf,"*Connais-tu l\u2019espagnol ?"),zf.forEach(t),It.forEach(t),pr=p(e),yt=r(e,"P",{});var Hf=a(yt);wp=n(Hf,"Et avec cela, nous avons notre assistant vocal complet, r\xE9alis\xE9 \xE0 l\u2019aide des outils audio que vous avez appris tout au long de ce cours, avec une pinc\xE9e de magie LLM \xE0 la fin. Il y a plusieurs extensions que nous pourrions faire pour am\xE9liorer l\u2019assistant vocal. Tout d\u2019abord, le mod\xE8le de classification audio classifie 35 \xE9tiquettes diff\xE9rentes. Nous pourrions utiliser un mod\xE8le de classification binaire plus petit et plus l\xE9ger qui pr\xE9dit uniquement si le mot de r\xE9veil a \xE9t\xE9 prononc\xE9 ou non. Deuxi\xE8mement, nous pr\xE9chargeons tous les mod\xE8les \xE0 l\u2019avance et les laissons tourner sur notre appareil. Si nous voulions \xE9conomiser de l\u2019\xE9nergie, nous ne chargerions chaque mod\xE8le qu\u2019au moment o\xF9 il est n\xE9cessaire, et nous le d\xE9chargerions par la suite. Troisi\xE8mement, il manque un mod\xE8le de d\xE9tection de l\u2019activit\xE9 vocale dans notre fonction de transcription, qui transcrit pendant une dur\xE9e fixe, parfois trop longue, parfois trop courte."),Hf.forEach(t),dr=p(e),ye=r(e,"H2",{class:!0});var Rr=a(ye);Ge=r(Rr,"A",{id:!0,class:!0,href:!0});var Lf=a(Ge);jn=r(Lf,"SPAN",{});var Qf=a(jn);f(Hs.$$.fragment,Qf),Qf.forEach(t),Lf.forEach(t),Jp=p(Rr),gn=r(Rr,"SPAN",{});var Rf=a(gn);Ep=n(Rf,"G\xE9n\xE9ralisation \u{1FA84}"),Rf.forEach(t),Rr.forEach(t),mr=p(e),bt=r(e,"P",{});var Pf=a(bt);Tp=n(Pf,"Jusqu\u2019\xE0 pr\xE9sent, nous avons vu comment g\xE9n\xE9rer des sorties vocales avec notre assistant vocal Marvin. Pour terminer, nous allons montrer comment nous pouvons g\xE9n\xE9raliser ces sorties vocales au texte, \xE0 l\u2019audio et \xE0 l\u2019image."),Pf.forEach(t),fr=p(e),x=r(e,"P",{});var re=a(x);qp=n(re,"Nous utiliserons "),Ls=r(re,"A",{href:!0,rel:!0});var Yf=a(Ls);Un=r(Yf,"EM",{});var Xf=a(Un);_p=n(Xf,"Transformers Agents"),Xf.forEach(t),Yf.forEach(t),jp=n(re,` pour cr\xE9er notre assistant.
`),In=r(re,"EM",{});var Df=a(In);gp=n(Df,"Transformers Agents"),Df.forEach(t),Up=n(re," fournit une API de langage naturel au-dessus des biblioth\xE8ques \u{1F917} "),$n=r(re,"EM",{});var Ff=a($n);Ip=n(Ff,"Transformers"),Ff.forEach(t),$p=n(re," et "),Cn=r(re,"EM",{});var Of=a(Cn);Cp=n(Of,"Diffusers"),Of.forEach(t),kp=n(re,", interpr\xE9tant une entr\xE9e de langage naturel en utilisant un LLM avec des prompts soigneusement con\xE7us, et en utilisant un ensemble d\u2019outils pour fournir des sorties multimodales."),re.forEach(t),vr=p(e),A=r(e,"P",{});var ae=a(A);Np=n(ae,"Allons-y et instan\xE7ons un agent. Il y a "),Qs=r(ae,"A",{href:!0,rel:!0});var Kf=a(Qs);Zp=n(Kf,"trois LLM disponibles"),Kf.forEach(t),xp=n(ae," pour "),kn=r(ae,"EM",{});var ev=a(kn);Ap=n(ev,"Transformers Agents"),ev.forEach(t),Bp=n(ae,", dont deux sont open-source et gratuits sur le "),Nn=r(ae,"EM",{});var sv=a(Nn);Wp=n(sv,"Hub"),sv.forEach(t),Gp=n(ae,". Le troisi\xE8me est un mod\xE8le d\u2019OpenAI qui n\xE9cessite une cl\xE9 API OpenAI. Nous utiliserons le mod\xE8le gratuit "),Rs=r(ae,"A",{href:!0,rel:!0});var tv=a(Rs);Sp=n(tv,"Bigcode Starcoder"),tv.forEach(t),Vp=n(ae," dans cet exemple, mais vous pouvez \xE9galement essayer l\u2019un ou l\u2019autre des autres LLM disponibles :"),ae.forEach(t),hr=p(e),f(Ps.$$.fragment,e),Mr=p(e),Se=r(e,"P",{});var Pr=a(Se);zp=n(Pr,"Pour utiliser l\u2019agent, il suffit d\u2019appeler "),Zn=r(Pr,"CODE",{});var lv=a(Zn);Hp=n(lv,"agent.run"),lv.forEach(t),Lp=n(Pr," avec notre prompt de texte. A titre d\u2019exemple, nous allons lui faire g\xE9n\xE9rer une image d\u2019un chat \u{1F408} (qui, esp\xE9rons-le, ait l\u2019air un peu mieux que cet emoji) :"),Pr.forEach(t),yr=p(e),f(Ys.$$.fragment,e),br=p(e),Xs=r(e,"DIV",{class:!0});var nv=a(Xs);xn=r(nv,"IMG",{src:!0}),nv.forEach(t),wr=p(e),f(Ve.$$.fragment,e),Jr=p(e),ze=r(e,"P",{});var Yr=a(ze);Qp=n(Yr,"C\u2019est aussi simple que cela ! L\u2019agent a interpr\xE9t\xE9 notre prompt et a utilis\xE9 "),Ds=r(Yr,"A",{href:!0,rel:!0});var ov=a(Ds);Rp=n(ov,"Stable Diffusion"),ov.forEach(t),Pp=n(Yr," pour g\xE9n\xE9rer l\u2019image, sans que nous ayons \xE0 nous soucier du chargement du mod\xE8le, de l\u2019\xE9criture de la fonction ou de l\u2019ex\xE9cution du code."),Yr.forEach(t),Er=p(e),He=r(e,"P",{});var Xr=a(He);Yp=n(Xr,"Nous pouvons maintenant remplacer notre fonction de requ\xEAte LLM et l\u2019\xE9tape de synth\xE8se de texte par notre "),An=r(Xr,"EM",{});var rv=a(An);Xp=n(rv,"Transformers Agent"),rv.forEach(t),Dp=n(Xr," dans notre assistant vocal, puisque l\u2019Agent va s\u2019occuper de ces deux \xE9tapes pour nous :"),Xr.forEach(t),Tr=p(e),f(Fs.$$.fragment,e),qr=p(e),wt=r(e,"P",{});var av=a(wt);Fp=n(av,"Essayez de prononcer le m\xEAme prompt \u201CG\xE9n\xE9rer une image d\u2019un chat\u201D (en anglais \u201CGenerate an image of a cat\u201D) et voyez comment le syst\xE8me s\u2019en sort. Si vous posez \xE0 l\u2019agent une simple requ\xEAte de type question/r\xE9ponse, l\u2019agent r\xE9pondra par un texte. Vous pouvez l\u2019encourager \xE0 g\xE9n\xE9rer des sorties multimodales en lui demandant de renvoyer une image ou de la parole. Par exemple, vous pouvez lui demander de g\xE9n\xE9rer une image d\u2019un chat, la l\xE9gender et prononcer la l\xE9gende (\u201CGenerate an image of a cat, caption it, and speak the caption\u201D)."),av.forEach(t),_r=p(e),Le=r(e,"P",{});var Dr=a(Le);Op=n(Dr,"Bien que l\u2019agent soit plus flexible que notre premi\xE8re it\xE9ration de l\u2019assistant Marvin \u{1F916}, cette g\xE9n\xE9ralisation peut conduire \xE0 des performances inf\xE9rieures sur les requ\xEAtes standard de l\u2019assistant vocal. Pour r\xE9cup\xE9rer des performances, vous pouvez essayer d\u2019utiliser un LLM plus performant, comme celui d\u2019OpenAI, ou d\xE9finir un ensemble d\u2019"),Os=r(Dr,"A",{href:!0,rel:!0});var iv=a(Os);Kp=n(iv,"outils personnalis\xE9s"),iv.forEach(t),ed=n(Dr," sp\xE9cifiques \xE0 la t\xE2che d\u2019assistant vocal."),Dr.forEach(t),this.h()},h(){d(T,"name","hf:doc:metadata"),d(T,"content",JSON.stringify(yv)),d(B,"id","crer-un-assistant-vocal"),d(B,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(B,"href","#crer-un-assistant-vocal"),d(g,"class","relative group"),et(kt.src,ld="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/voice_assistant.png")||d(kt,"src",ld),d(Fe,"class","flex justify-center"),d(we,"id","1-dtection-du-mot-dclencheur"),d(we,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(we,"href","#1-dtection-du-mot-dclencheur"),d(ie,"class","relative group"),d(Je,"id","2-transcription-de-la-parole"),d(Je,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(Je,"href","#2-transcription-de-la-parole"),d(ue,"class","relative group"),d(Ee,"id","3-requter-le-modle-de-langage"),d(Ee,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(Ee,"href","#3-requter-le-modle-de-langage"),d(ce,"class","relative group"),d(qe,"id","4-synthtiser-la-rponse"),d(qe,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(qe,"href","#4-synthtiser-la-rponse"),d(pe,"class","relative group"),d(je,"id","dtection-des-mots-dclencheur"),d(je,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(je,"href","#dtection-des-mots-dclencheur"),d(de,"class","relative group"),d(at,"href","../chapiter4/classification_models"),d(ls,"href","https://huggingface.co/datasets/speech_commands"),d(ls,"rel","nofollow"),d(ns,"href","https://huggingface.co/datasets/speech_commands/viewer/v0.01/train"),d(ns,"rel","nofollow"),d(os,"href","https://huggingface.co/models"),d(os,"rel","nofollow"),et(ol.src,nd="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/all_models.png")||d(ol,"src",nd),d(rs,"class","flex justify-center"),et(al.src,od="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/by_audio_classification.png")||d(al,"src",od),d(as,"class","flex justify-center"),et(dl.src,rd="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/by_speech_commands.png")||d(dl,"src",rd),d(is,"class","flex justify-center"),d(us,"href","https://huggingface.co/MIT/ast-finetuned-speech-commands-v2"),d(us,"rel","nofollow"),d(fs,"href","https://github.com/huggingface/transformers/blob/fb78769b9c053876ed7ae152ee995b0439a4462a/src/transformers/pipelines/audio_utils.py#L98"),d(fs,"rel","nofollow"),d(vs,"href","https://fr.wikipedia.org/wiki/Entropie_de_Shannon"),d(vs,"rel","nofollow"),d($e,"id","transcription-de-la-parole"),d($e,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d($e,"href","#transcription-de-la-parole"),d(me,"class","relative group"),d(ws,"href","https://huggingface.co/openai/whisper-base.en"),d(ws,"rel","nofollow"),d(Js,"href","https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&library=transformers&sort=trending"),d(Js,"rel","nofollow"),d(fe,"href","https://huggingface.co/models?pipeline_tag=voice-activity-detection&sort=trending"),d(fe,"rel","nofollow"),d(ke,"id","requter-le-modle-de-langue"),d(ke,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(ke,"href","#requter-le-modle-de-langue"),d(ve,"class","relative group"),d(gs,"href","https://huggingface.co/inference-api"),d(gs,"rel","nofollow"),d(Ne,"href","https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard"),d(Ne,"rel","nofollow"),et(nn.src,ad="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/llm_leaderboard.png")||d(nn,"src",ad),d(Us,"class","flex justify-center"),d(Is,"href","https://huggingface.co/tiiuae/falcon-7b-instruct"),d(Is,"rel","nofollow"),d($s,"href","https://www.tii.ae/"),d($s,"rel","nofollow"),et(pn.src,id="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/inference_api.png")||d(pn,"src",id),d(Cs,"class","flex justify-center"),d(xe,"id","synthtiser-la-parole"),d(xe,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(xe,"href","#synthtiser-la-parole"),d(he,"class","relative group"),d(As,"href","https://huggingface.co/microsoft/speecht5_tts"),d(As,"rel","nofollow"),d(mt,"href","speech-to-speech"),d(Be,"id","marvin"),d(Be,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(Be,"href","#marvin"),d(Me,"class","relative group"),d(Ge,"id","gnralisation"),d(Ge,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),d(Ge,"href","#gnralisation"),d(ye,"class","relative group"),d(Ls,"href","https://huggingface.co/docs/transformers/transformers_agents"),d(Ls,"rel","nofollow"),d(Qs,"href","https://huggingface.co/docs/transformers/transformers_agents#quickstart"),d(Qs,"rel","nofollow"),d(Rs,"href","https://huggingface.co/bigcode/starcoder"),d(Rs,"rel","nofollow"),et(xn.src,ud="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/generated_cat.png")||d(xn,"src",ud),d(Xs,"class","flex justify-center"),d(Ds,"href","https://huggingface.co/docs/diffusers/using-diffusers/conditional_image_generation"),d(Ds,"rel","nofollow"),d(Os,"href","https://huggingface.co/docs/transformers/transformers_agents#custom-tools"),d(Os,"rel","nofollow")},m(e,i){s(document.head,T),u(e,q,i),u(e,g,i),s(g,B),s(B,_),v(U,_,null),s(g,Fr),s(g,$t),s($t,Or),u(e,Wn,i),u(e,be,i),s(be,Kr),s(be,Ct),s(Ct,ea),s(be,sa),u(e,Gn,i),u(e,tt,i),s(tt,ta),u(e,Sn,i),u(e,Fe,i),s(Fe,kt),u(e,Vn,i),u(e,ie,i),s(ie,we),s(we,Nt),v(Oe,Nt,null),s(ie,la),s(ie,Zt),s(Zt,na),u(e,zn,i),u(e,lt,i),s(lt,oa),u(e,Hn,i),u(e,nt,i),s(nt,ra),u(e,Ln,i),u(e,ue,i),s(ue,Je),s(Je,xt),v(Ke,xt,null),s(ue,aa),s(ue,At),s(At,ia),u(e,Qn,i),u(e,W,i),s(W,ua),s(W,Bt),s(Bt,ca),s(W,pa),s(W,Wt),s(Wt,da),s(W,ma),s(W,Gt),s(Gt,fa),s(W,va),u(e,Rn,i),u(e,ot,i),s(ot,ha),u(e,Pn,i),u(e,ce,i),s(ce,Ee),s(Ee,St),v(es,St,null),s(ce,Ma),s(ce,Vt),s(Vt,ya),u(e,Yn,i),u(e,Te,i),s(Te,ba),s(Te,zt),s(zt,wa),s(Te,Ja),u(e,Xn,i),u(e,Q,i),s(Q,Ea),s(Q,Ht),s(Ht,Ta),s(Q,qa),s(Q,Lt),s(Lt,_a),s(Q,ja),u(e,Dn,i),u(e,pe,i),s(pe,qe),s(qe,Qt),v(ss,Qt,null),s(pe,ga),s(pe,Rt),s(Rt,Ua),u(e,Fn,i),u(e,_e,i),s(_e,Ia),s(_e,Pt),s(Pt,$a),s(_e,Ca),u(e,On,i),u(e,rt,i),s(rt,ka),u(e,Kn,i),u(e,de,i),s(de,je),s(je,Yt),v(ts,Yt,null),s(de,Na),s(de,Xt),s(Xt,Za),u(e,eo,i),u(e,b,i),s(b,xa),s(b,at),s(at,Aa),s(b,Ba),s(b,ls),s(ls,Wa),s(b,Ga),s(b,Dt),s(Dt,Sa),s(b,Va),s(b,Ft),s(Ft,za),s(b,Ha),s(b,Ot),s(Ot,La),s(b,Qa),s(b,Kt),s(Kt,Ra),s(b,Pa),s(b,el),s(el,Ya),s(b,Xa),s(b,sl),s(sl,Da),s(b,Fa),s(b,ns),s(ns,Oa),s(b,Ka),u(e,so,i),u(e,it,i),s(it,ei),u(e,to,i),u(e,I,i),s(I,si),s(I,tl),s(tl,ti),s(I,li),s(I,ll),s(ll,ni),s(I,oi),s(I,os),s(os,ri),s(I,ai),s(I,nl),s(nl,ii),s(I,ui),u(e,lo,i),u(e,rs,i),s(rs,ol),u(e,no,i),u(e,ge,i),s(ge,ci),s(ge,rl),s(rl,pi),s(ge,di),u(e,oo,i),u(e,as,i),s(as,al),u(e,ro,i),u(e,$,i),s($,mi),s($,il),s(il,fi),s($,vi),s($,ul),s(ul,hi),s($,Mi),s($,cl),s(cl,yi),s($,bi),s($,pl),s(pl,wi),s($,Ji),u(e,ao,i),u(e,is,i),s(is,dl),u(e,io,i),u(e,R,i),s(R,Ei),s(R,us),s(us,ml),s(ml,Ti),s(R,qi),s(R,fl),s(fl,_i),s(R,ji),u(e,uo,i),u(e,P,i),s(P,gi),s(P,vl),s(vl,Ui),s(P,Ii),s(P,hl),s(hl,$i),s(P,Ci),u(e,co,i),v(cs,e,i),u(e,po,i),u(e,Ue,i),s(Ue,ki),s(Ue,Ml),s(Ml,Ni),s(Ue,Zi),u(e,mo,i),v(ps,e,i),u(e,fo,i),u(e,C,i),s(C,xi),s(C,yl),s(yl,Ai),s(C,Bi),s(C,bl),s(bl,Wi),s(C,Gi),s(C,wl),s(wl,Si),s(C,Vi),s(C,Jl),s(Jl,El),s(El,zi),s(C,Hi),u(e,vo,i),v(ds,e,i),u(e,ho,i),v(ms,e,i),u(e,Mo,i),u(e,ut,i),s(ut,Li),u(e,yo,i),u(e,Y,i),s(Y,Qi),s(Y,Tl),s(Tl,Ri),s(Y,Pi),s(Y,fs),s(fs,ql),s(ql,Yi),s(Y,Xi),u(e,bo,i),u(e,k,i),s(k,Di),s(k,_l),s(_l,Fi),s(k,Oi),s(k,jl),s(jl,Ki),s(k,eu),s(k,gl),s(gl,su),s(k,tu),s(k,Ul),s(Ul,lu),s(k,nu),u(e,wo,i),u(e,G,i),s(G,ou),s(G,Il),s(Il,ru),s(G,au),s(G,$l),s($l,iu),s(G,uu),s(G,Cl),s(Cl,cu),s(G,pu),u(e,Jo,i),u(e,X,i),s(X,du),s(X,kl),s(kl,mu),s(X,fu),s(X,vs),s(vs,Nl),s(Nl,vu),s(X,hu),u(e,Eo,i),v(hs,e,i),u(e,To,i),u(e,D,i),s(D,Mu),s(D,Zl),s(Zl,yu),s(D,bu),s(D,xl),s(xl,wu),s(D,Ju),u(e,qo,i),v(Ms,e,i),u(e,_o,i),v(ys,e,i),u(e,jo,i),u(e,Ie,i),s(Ie,Eu),s(Ie,Al),s(Al,Tu),s(Ie,qu),u(e,go,i),u(e,me,i),s(me,$e),s($e,Bl),v(bs,Bl,null),s(me,_u),s(me,Wl),s(Wl,ju),u(e,Uo,i),u(e,S,i),s(S,gu),s(S,Gl),s(Gl,Uu),s(S,Iu),s(S,ws),s(ws,Sl),s(Sl,$u),s(S,Cu),s(S,Js),s(Js,Vl),s(Vl,ku),s(S,Nu),u(e,Io,i),v(Es,e,i),u(e,$o,i),v(Ce,e,i),u(e,Co,i),u(e,F,i),s(F,Zu),s(F,zl),s(zl,xu),s(F,Au),s(F,Hl),s(Hl,Bu),s(F,Wu),u(e,ko,i),u(e,V,i),s(V,Gu),s(V,Ll),s(Ll,Su),s(V,Vu),s(V,Ql),s(Ql,zu),s(V,Hu),s(V,fe),s(fe,Lu),s(fe,Rl),s(Rl,Qu),s(fe,Ru),s(V,Pu),u(e,No,i),v(Ts,e,i),u(e,Zo,i),u(e,ct,i),s(ct,Yu),u(e,xo,i),v(qs,e,i),u(e,Ao,i),v(_s,e,i),u(e,Bo,i),u(e,z,i),s(z,Xu),s(z,Pl),s(Pl,Du),s(z,Fu),s(z,Yl),s(Yl,Ou),s(z,Ku),s(z,Xl),s(Xl,ec),s(z,sc),u(e,Wo,i),u(e,ve,i),s(ve,ke),s(ke,Dl),v(js,Dl,null),s(ve,tc),s(ve,Fl),s(Fl,lc),u(e,Go,i),u(e,H,i),s(H,nc),s(H,Ol),s(Ol,oc),s(H,rc),s(H,Kl),s(Kl,ac),s(H,ic),s(H,gs),s(gs,uc),s(H,cc),u(e,So,i),u(e,N,i),s(N,pc),s(N,en),s(en,dc),s(N,mc),s(N,Ne),s(Ne,fc),s(Ne,sn),s(sn,vc),s(N,hc),s(N,tn),s(tn,Mc),s(N,yc),s(N,ln),s(ln,bc),s(N,wc),u(e,Vo,i),u(e,Us,i),s(Us,nn),u(e,zo,i),u(e,J,i),s(J,Jc),s(J,on),s(on,Ec),s(J,Tc),s(J,Is),s(Is,qc),s(J,_c),s(J,$s),s($s,jc),s(J,gc),s(J,rn),s(rn,Uc),s(J,Ic),s(J,an),s(an,$c),s(J,Cc),s(J,un),s(un,kc),s(J,Nc),s(J,cn),s(cn,Zc),s(J,xc),u(e,Ho,i),u(e,Cs,i),s(Cs,pn),u(e,Lo,i),u(e,Z,i),s(Z,Ac),s(Z,dn),s(dn,Bc),s(Z,Wc),s(Z,mn),s(mn,Gc),s(Z,Sc),s(Z,fn),s(fn,Vc),s(Z,zc),s(Z,vn),s(vn,Hc),s(Z,Lc),u(e,Qo,i),v(ks,e,i),u(e,Ro,i),u(e,pt,i),s(pt,Qc),u(e,Po,i),v(Ns,e,i),u(e,Yo,i),v(Zs,e,i),u(e,Xo,i),u(e,Ze,i),s(Ze,Rc),s(Ze,hn),s(hn,Pc),s(Ze,Yc),u(e,Do,i),u(e,he,i),s(he,xe),s(xe,Mn),v(xs,Mn,null),s(he,Xc),s(he,yn),s(yn,Dc),u(e,Fo,i),u(e,Ae,i),s(Ae,Fc),s(Ae,As),s(As,Oc),s(Ae,Kc),u(e,Oo,i),v(Bs,e,i),u(e,Ko,i),u(e,dt,i),s(dt,ep),u(e,er,i),v(Ws,e,i),u(e,sr,i),u(e,O,i),s(O,sp),s(O,bn),s(bn,tp),s(O,lp),s(O,mt),s(mt,np),s(O,op),u(e,tr,i),v(Gs,e,i),u(e,lr,i),u(e,ft,i),s(ft,rp),u(e,nr,i),v(Ss,e,i),u(e,or,i),u(e,vt,i),s(vt,ap),u(e,rr,i),u(e,Me,i),s(Me,Be),s(Be,wn),v(Vs,wn,null),s(Me,ip),s(Me,Jn),s(Jn,up),u(e,ar,i),u(e,We,i),s(We,cp),s(We,En),s(En,pp),s(We,dp),u(e,ir,i),v(zs,e,i),u(e,ur,i),u(e,ht,i),s(ht,mp),u(e,cr,i),u(e,K,i),s(K,Tn),s(Tn,fp),s(K,vp),s(K,Mt),s(Mt,qn),s(qn,hp),s(Mt,Mp),s(K,yp),s(K,_n),s(_n,bp),u(e,pr,i),u(e,yt,i),s(yt,wp),u(e,dr,i),u(e,ye,i),s(ye,Ge),s(Ge,jn),v(Hs,jn,null),s(ye,Jp),s(ye,gn),s(gn,Ep),u(e,mr,i),u(e,bt,i),s(bt,Tp),u(e,fr,i),u(e,x,i),s(x,qp),s(x,Ls),s(Ls,Un),s(Un,_p),s(x,jp),s(x,In),s(In,gp),s(x,Up),s(x,$n),s($n,Ip),s(x,$p),s(x,Cn),s(Cn,Cp),s(x,kp),u(e,vr,i),u(e,A,i),s(A,Np),s(A,Qs),s(Qs,Zp),s(A,xp),s(A,kn),s(kn,Ap),s(A,Bp),s(A,Nn),s(Nn,Wp),s(A,Gp),s(A,Rs),s(Rs,Sp),s(A,Vp),u(e,hr,i),v(Ps,e,i),u(e,Mr,i),u(e,Se,i),s(Se,zp),s(Se,Zn),s(Zn,Hp),s(Se,Lp),u(e,yr,i),v(Ys,e,i),u(e,br,i),u(e,Xs,i),s(Xs,xn),u(e,wr,i),v(Ve,e,i),u(e,Jr,i),u(e,ze,i),s(ze,Qp),s(ze,Ds),s(Ds,Rp),s(ze,Pp),u(e,Er,i),u(e,He,i),s(He,Yp),s(He,An),s(An,Xp),s(He,Dp),u(e,Tr,i),v(Fs,e,i),u(e,qr,i),u(e,wt,i),s(wt,Fp),u(e,_r,i),u(e,Le,i),s(Le,Op),s(Le,Os),s(Os,Kp),s(Le,ed),jr=!0},p(e,[i]){const Ks={};i&2&&(Ks.$$scope={dirty:i,ctx:e}),Ce.$set(Ks);const Bn={};i&2&&(Bn.$$scope={dirty:i,ctx:e}),Ve.$set(Bn)},i(e){jr||(h(U.$$.fragment,e),h(Oe.$$.fragment,e),h(Ke.$$.fragment,e),h(es.$$.fragment,e),h(ss.$$.fragment,e),h(ts.$$.fragment,e),h(cs.$$.fragment,e),h(ps.$$.fragment,e),h(ds.$$.fragment,e),h(ms.$$.fragment,e),h(hs.$$.fragment,e),h(Ms.$$.fragment,e),h(ys.$$.fragment,e),h(bs.$$.fragment,e),h(Es.$$.fragment,e),h(Ce.$$.fragment,e),h(Ts.$$.fragment,e),h(qs.$$.fragment,e),h(_s.$$.fragment,e),h(js.$$.fragment,e),h(ks.$$.fragment,e),h(Ns.$$.fragment,e),h(Zs.$$.fragment,e),h(xs.$$.fragment,e),h(Bs.$$.fragment,e),h(Ws.$$.fragment,e),h(Gs.$$.fragment,e),h(Ss.$$.fragment,e),h(Vs.$$.fragment,e),h(zs.$$.fragment,e),h(Hs.$$.fragment,e),h(Ps.$$.fragment,e),h(Ys.$$.fragment,e),h(Ve.$$.fragment,e),h(Fs.$$.fragment,e),jr=!0)},o(e){M(U.$$.fragment,e),M(Oe.$$.fragment,e),M(Ke.$$.fragment,e),M(es.$$.fragment,e),M(ss.$$.fragment,e),M(ts.$$.fragment,e),M(cs.$$.fragment,e),M(ps.$$.fragment,e),M(ds.$$.fragment,e),M(ms.$$.fragment,e),M(hs.$$.fragment,e),M(Ms.$$.fragment,e),M(ys.$$.fragment,e),M(bs.$$.fragment,e),M(Es.$$.fragment,e),M(Ce.$$.fragment,e),M(Ts.$$.fragment,e),M(qs.$$.fragment,e),M(_s.$$.fragment,e),M(js.$$.fragment,e),M(ks.$$.fragment,e),M(Ns.$$.fragment,e),M(Zs.$$.fragment,e),M(xs.$$.fragment,e),M(Bs.$$.fragment,e),M(Ws.$$.fragment,e),M(Gs.$$.fragment,e),M(Ss.$$.fragment,e),M(Vs.$$.fragment,e),M(zs.$$.fragment,e),M(Hs.$$.fragment,e),M(Ps.$$.fragment,e),M(Ys.$$.fragment,e),M(Ve.$$.fragment,e),M(Fs.$$.fragment,e),jr=!1},d(e){t(T),e&&t(q),e&&t(g),y(U),e&&t(Wn),e&&t(be),e&&t(Gn),e&&t(tt),e&&t(Sn),e&&t(Fe),e&&t(Vn),e&&t(ie),y(Oe),e&&t(zn),e&&t(lt),e&&t(Hn),e&&t(nt),e&&t(Ln),e&&t(ue),y(Ke),e&&t(Qn),e&&t(W),e&&t(Rn),e&&t(ot),e&&t(Pn),e&&t(ce),y(es),e&&t(Yn),e&&t(Te),e&&t(Xn),e&&t(Q),e&&t(Dn),e&&t(pe),y(ss),e&&t(Fn),e&&t(_e),e&&t(On),e&&t(rt),e&&t(Kn),e&&t(de),y(ts),e&&t(eo),e&&t(b),e&&t(so),e&&t(it),e&&t(to),e&&t(I),e&&t(lo),e&&t(rs),e&&t(no),e&&t(ge),e&&t(oo),e&&t(as),e&&t(ro),e&&t($),e&&t(ao),e&&t(is),e&&t(io),e&&t(R),e&&t(uo),e&&t(P),e&&t(co),y(cs,e),e&&t(po),e&&t(Ue),e&&t(mo),y(ps,e),e&&t(fo),e&&t(C),e&&t(vo),y(ds,e),e&&t(ho),y(ms,e),e&&t(Mo),e&&t(ut),e&&t(yo),e&&t(Y),e&&t(bo),e&&t(k),e&&t(wo),e&&t(G),e&&t(Jo),e&&t(X),e&&t(Eo),y(hs,e),e&&t(To),e&&t(D),e&&t(qo),y(Ms,e),e&&t(_o),y(ys,e),e&&t(jo),e&&t(Ie),e&&t(go),e&&t(me),y(bs),e&&t(Uo),e&&t(S),e&&t(Io),y(Es,e),e&&t($o),y(Ce,e),e&&t(Co),e&&t(F),e&&t(ko),e&&t(V),e&&t(No),y(Ts,e),e&&t(Zo),e&&t(ct),e&&t(xo),y(qs,e),e&&t(Ao),y(_s,e),e&&t(Bo),e&&t(z),e&&t(Wo),e&&t(ve),y(js),e&&t(Go),e&&t(H),e&&t(So),e&&t(N),e&&t(Vo),e&&t(Us),e&&t(zo),e&&t(J),e&&t(Ho),e&&t(Cs),e&&t(Lo),e&&t(Z),e&&t(Qo),y(ks,e),e&&t(Ro),e&&t(pt),e&&t(Po),y(Ns,e),e&&t(Yo),y(Zs,e),e&&t(Xo),e&&t(Ze),e&&t(Do),e&&t(he),y(xs),e&&t(Fo),e&&t(Ae),e&&t(Oo),y(Bs,e),e&&t(Ko),e&&t(dt),e&&t(er),y(Ws,e),e&&t(sr),e&&t(O),e&&t(tr),y(Gs,e),e&&t(lr),e&&t(ft),e&&t(nr),y(Ss,e),e&&t(or),e&&t(vt),e&&t(rr),e&&t(Me),y(Vs),e&&t(ar),e&&t(We),e&&t(ir),y(zs,e),e&&t(ur),e&&t(ht),e&&t(cr),e&&t(K),e&&t(pr),e&&t(yt),e&&t(dr),e&&t(ye),y(Hs),e&&t(mr),e&&t(bt),e&&t(fr),e&&t(x),e&&t(vr),e&&t(A),e&&t(hr),y(Ps,e),e&&t(Mr),e&&t(Se),e&&t(yr),y(Ys,e),e&&t(br),e&&t(Xs),e&&t(wr),y(Ve,e),e&&t(Jr),e&&t(ze),e&&t(Er),e&&t(He),e&&t(Tr),y(Fs,e),e&&t(qr),e&&t(wt),e&&t(_r),e&&t(Le)}}}const yv={local:"crer-un-assistant-vocal",sections:[{local:null,sections:[{local:"1-dtection-du-mot-dclencheur",title:"1. D\xE9tection du mot d\xE9clencheur"},{local:"2-transcription-de-la-parole",title:"2. Transcription de la parole"},{local:"3-requter-le-modle-de-langage",title:"3. Requ\xEAter le mod\xE8le de langage"},{local:"4-synthtiser-la-rponse",title:"4. Synth\xE9tiser la r\xE9ponse"}],title:null},{local:"dtection-des-mots-dclencheur",title:"D\xE9tection des mots d\xE9clencheur"},{local:"transcription-de-la-parole",title:"Transcription de la parole"},{local:"requter-le-modle-de-langue",title:"Requ\xEAter le mod\xE8le de langue"},{local:"synthtiser-la-parole",title:"Synth\xE9tiser la parole"},{local:"marvin",title:"Marvin \u{1F916}"},{local:"gnralisation",title:"G\xE9n\xE9ralisation \u{1FA84}"}],title:"Cr\xE9er un assistant vocal"};function bv(st){return fv(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class qv extends cv{constructor(T){super();pv(this,T,bv,Mv,dv,{})}}export{qv as default,yv as metadata};
