import{S as ln,i as an,s as tn,e as i,k as c,w as f,t as a,M as on,c as o,d as l,m as d,a as n,x as y,h as t,b as u,G as s,g as p,y as J,L as nn,q as h,o as w,B as j,v as rn}from"../chunks/vendor-hf-doc-builder.js";import{I as xl}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as A}from"../chunks/CodeBlock-hf-doc-builder.js";function pn(Gi){let G,Os,N,Q,qe,ce,Ol,Ae,Ll,Ls,S,Kl,Ie,ea,sa,Ks,C,la,Ge,aa,ta,Ne,ia,oa,el,b,na,Xe,ra,pa,Re,ca,da,Ve,ua,ma,sl,m,Ma,We,fa,ya,$e,Ja,ha,Pe,wa,ja,Qe,Ta,ba,Se,_a,Ua,ll,de,al,ve,Ea,tl,X,He,Ia,va,Ye,ga,Ca,il,v,Fe,Ba,ka,De,za,Za,xe,qa,Aa,ol,R,Oe,Ga,Na,Le,Xa,Ra,nl,g,Ke,Va,Wa,es,$a,Pa,ss,Qa,Sa,rl,T,ls,Ha,Ya,as,Fa,Da,ts,xa,Oa,is,La,Ka,pl,H,et,os,st,lt,cl,ue,dl,_,at,ns,tt,it,rs,ot,nt,ps,rt,pt,ul,me,ml,ge,ct,Ml,V,Y,cs,Me,dt,ds,ut,fl,B,mt,us,Mt,ft,ms,yt,Jt,yl,fe,Jl,F,ht,Ms,wt,jt,hl,ye,wl,W,D,fs,Je,Tt,ys,bt,jl,x,_t,Js,Ut,Et,Tl,he,bl,O,It,hs,vt,gt,_l,we,Ul,L,Ct,ws,Bt,kt,El,je,Il,k,zt,js,Zt,qt,Ts,At,Gt,vl,Te,gl,M,Nt,bs,Xt,Rt,_s,Vt,Wt,Us,$t,Pt,Es,Qt,St,Cl,be,Bl,$,K,Is,_e,Ht,vs,Yt,kl,z,Ft,gs,Dt,xt,Cs,Ot,Lt,zl,ee,Kt,Bs,ei,si,Zl,U,li,ks,ai,ti,zs,ii,oi,Zs,ni,ri,ql,Z,pi,qs,ci,di,As,ui,mi,Al,se,Mi,Gs,fi,yi,Gl,E,le,Ns,Ji,hi,Xs,wi,ji,Ti,ae,Rs,bi,_i,Vs,Ui,Ei,Ii,te,Ws,vi,gi,$s,Ci,Bi,ki,ie,Ps,zi,Zi,Qs,qi,Ai,Nl;return ce=new xl({}),de=new A({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFBpcGVsaW5lJTBBJTBBJTBBY2xhc3MlMjBNeVBpcGVsaW5lKFBpcGVsaW5lKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9zYW5pdGl6ZV9wYXJhbWV0ZXJzKHNlbGYlMkMlMjAqKmt3YXJncyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzX2t3YXJncyUyMCUzRCUyMCU3QiU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwJTIybWF5YmVfYXJnJTIyJTIwaW4lMjBrd2FyZ3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzX2t3YXJncyU1QiUyMm1heWJlX2FyZyUyMiU1RCUyMCUzRCUyMGt3YXJncyU1QiUyMm1heWJlX2FyZyUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHByZXByb2Nlc3Nfa3dhcmdzJTJDJTIwJTdCJTdEJTJDJTIwJTdCJTdEJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcHJlcHJvY2VzcyhzZWxmJTJDJTIwaW5wdXRzJTJDJTIwbWF5YmVfYXJnJTNEMiklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbF9pbnB1dCUyMCUzRCUyMFRlbnNvcihpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIybW9kZWxfaW5wdXQlMjIlM0ElMjBtb2RlbF9pbnB1dCU3RCUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9mb3J3YXJkKHNlbGYlMkMlMjBtb2RlbF9pbnB1dHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwbW9kZWxfaW5wdXRzJTIwJTNEJTNEJTIwJTdCJTIybW9kZWxfaW5wdXQlMjIlM0ElMjBtb2RlbF9pbnB1dCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBzZWxmLm1vZGVsKCoqbW9kZWxfaW5wdXRzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME1heWJlJTIwJTdCJTIybG9naXRzJTIyJTNBJTIwVGVuc29yKC4uLiklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBvdXRwdXRzJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcG9zdHByb2Nlc3Moc2VsZiUyQyUyMG1vZGVsX291dHB1dHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVzdF9jbGFzcyUyMCUzRCUyMG1vZGVsX291dHB1dHMlNUIlMjJsb2dpdHMlMjIlNUQuc29mdG1heCgtMSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBiZXN0X2NsYXNz",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Pipeline


<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyPipeline</span>(<span class="hljs-title class_ inherited__">Pipeline</span>):
    <span class="hljs-keyword">def</span> <span class="hljs-title function_">_sanitize_parameters</span>(<span class="hljs-params">self, **kwargs</span>):
        preprocess_kwargs = {}
        <span class="hljs-keyword">if</span> <span class="hljs-string">&quot;maybe_arg&quot;</span> <span class="hljs-keyword">in</span> kwargs:
            preprocess_kwargs[<span class="hljs-string">&quot;maybe_arg&quot;</span>] = kwargs[<span class="hljs-string">&quot;maybe_arg&quot;</span>]
        <span class="hljs-keyword">return</span> preprocess_kwargs, {}, {}

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess</span>(<span class="hljs-params">self, inputs, maybe_arg=<span class="hljs-number">2</span></span>):
        model_input = Tensor(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>])
        <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;model_input&quot;</span>: model_input}

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">_forward</span>(<span class="hljs-params">self, model_inputs</span>):
        <span class="hljs-comment"># model_inputs == {&quot;model_input&quot;: model_input}</span>
        outputs = self.model(**model_inputs)
        <span class="hljs-comment"># Maybe {&quot;logits&quot;: Tensor(...)}</span>
        <span class="hljs-keyword">return</span> outputs

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">self, model_outputs</span>):
        best_class = model_outputs[<span class="hljs-string">&quot;logits&quot;</span>].softmax(-<span class="hljs-number">1</span>)
        <span class="hljs-keyword">return</span> best_class`}}),ue=new A({props:{code:"cGlwZSUyMCUzRCUyMHBpcGVsaW5lKCUyMm15LW5ldy10YXNrJTIyKSUwQXBpcGUoJTIyVGhpcyUyMGlzJTIwYSUyMHRlc3QlMjIpJTBBJTBBcGlwZSglMjJUaGlzJTIwaXMlMjBhJTIwdGVzdCUyMiUyQyUyMHRvcF9rJTNEMik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>pipe = pipeline(<span class="hljs-string">&quot;my-new-task&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>pipe(<span class="hljs-string">&quot;This is a test&quot;</span>)
[{<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;1-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.8</span>}, {<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;2-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.1</span>}, {<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;3-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.05</span>}
{<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;4-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.025</span>}, {<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;5-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.025</span>}]

<span class="hljs-meta">&gt;&gt;&gt; </span>pipe(<span class="hljs-string">&quot;This is a test&quot;</span>, top_k=<span class="hljs-number">2</span>)
[{<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;1-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.8</span>}, {<span class="hljs-string">&quot;label&quot;</span>: <span class="hljs-string">&quot;2-star&quot;</span>, <span class="hljs-string">&quot;score&quot;</span>: <span class="hljs-number">0.1</span>}]`}}),me=new A({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3Moc2VsZiUyQyUyMG1vZGVsX291dHB1dHMlMkMlMjB0b3BfayUzRDUpJTNBJTBBJTIwJTIwJTIwJTIwYmVzdF9jbGFzcyUyMCUzRCUyMG1vZGVsX291dHB1dHMlNUIlMjJsb2dpdHMlMjIlNUQuc29mdG1heCgtMSklMEElMjAlMjAlMjAlMjAlMjMlMjBBZGQlMjBsb2dpYyUyMHRvJTIwaGFuZGxlJTIwdG9wX2slMEElMjAlMjAlMjAlMjByZXR1cm4lMjBiZXN0X2NsYXNzJTBBJTBBJTBBZGVmJTIwX3Nhbml0aXplX3BhcmFtZXRlcnMoc2VsZiUyQyUyMCoqa3dhcmdzKSUzQSUwQSUyMCUyMCUyMCUyMHByZXByb2Nlc3Nfa3dhcmdzJTIwJTNEJTIwJTdCJTdEJTBBJTIwJTIwJTIwJTIwaWYlMjAlMjJtYXliZV9hcmclMjIlMjBpbiUyMGt3YXJncyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZXByb2Nlc3Nfa3dhcmdzJTVCJTIybWF5YmVfYXJnJTIyJTVEJTIwJTNEJTIwa3dhcmdzJTVCJTIybWF5YmVfYXJnJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwcG9zdHByb2Nlc3Nfa3dhcmdzJTIwJTNEJTIwJTdCJTdEJTBBJTIwJTIwJTIwJTIwaWYlMjAlMjJ0b3BfayUyMiUyMGluJTIwa3dhcmdzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcG9zdHByb2Nlc3Nfa3dhcmdzJTVCJTIydG9wX2slMjIlNUQlMjAlM0QlMjBrd2FyZ3MlNUIlMjJ0b3BfayUyMiU1RCUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHByZXByb2Nlc3Nfa3dhcmdzJTJDJTIwJTdCJTdEJTJDJTIwcG9zdHByb2Nlc3Nfa3dhcmdz",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">self, model_outputs, top_k=<span class="hljs-number">5</span></span>):
    best_class = model_outputs[<span class="hljs-string">&quot;logits&quot;</span>].softmax(-<span class="hljs-number">1</span>)
    <span class="hljs-comment"># Add logic to handle top_k</span>
    <span class="hljs-keyword">return</span> best_class


<span class="hljs-keyword">def</span> <span class="hljs-title function_">_sanitize_parameters</span>(<span class="hljs-params">self, **kwargs</span>):
    preprocess_kwargs = {}
    <span class="hljs-keyword">if</span> <span class="hljs-string">&quot;maybe_arg&quot;</span> <span class="hljs-keyword">in</span> kwargs:
        preprocess_kwargs[<span class="hljs-string">&quot;maybe_arg&quot;</span>] = kwargs[<span class="hljs-string">&quot;maybe_arg&quot;</span>]

    postprocess_kwargs = {}
    <span class="hljs-keyword">if</span> <span class="hljs-string">&quot;top_k&quot;</span> <span class="hljs-keyword">in</span> kwargs:
        postprocess_kwargs[<span class="hljs-string">&quot;top_k&quot;</span>] = kwargs[<span class="hljs-string">&quot;top_k&quot;</span>]
    <span class="hljs-keyword">return</span> preprocess_kwargs, {}, postprocess_kwargs`}}),Me=new xl({}),fe=new A({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5waXBlbGluZXMlMjBpbXBvcnQlMjBQSVBFTElORV9SRUdJU1RSWSUwQSUwQVBJUEVMSU5FX1JFR0lTVFJZLnJlZ2lzdGVyX3BpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCUyMm5ldy10YXNrJTIyJTJDJTBBJTIwJTIwJTIwJTIwcGlwZWxpbmVfY2xhc3MlM0RNeVBpcGVsaW5lJTJDJTBBJTIwJTIwJTIwJTIwcHRfbW9kZWwlM0RBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers.pipelines <span class="hljs-keyword">import</span> PIPELINE_REGISTRY

PIPELINE_REGISTRY.register_pipeline(
    <span class="hljs-string">&quot;new-task&quot;</span>,
    pipeline_class=MyPipeline,
    pt_model=AutoModelForSequenceClassification,
)`}}),ye=new A({props:{code:"UElQRUxJTkVfUkVHSVNUUlkucmVnaXN0ZXJfcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIybmV3LXRhc2slMjIlMkMlMEElMjAlMjAlMjAlMjBwaXBlbGluZV9jbGFzcyUzRE15UGlwZWxpbmUlMkMlMEElMjAlMjAlMjAlMjBwdF9tb2RlbCUzREF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMEElMjAlMjAlMjAlMjBkZWZhdWx0JTNEJTdCJTIycHQlMjIlM0ElMjAoJTIydXNlciUyRmF3ZXNvbWVfbW9kZWwlMjIlMkMlMjAlMjJhYmNkZWYlMjIpJTdEJTJDJTBBJTIwJTIwJTIwJTIwdHlwZSUzRCUyMnRleHQlMjIlMkMlMjAlMjAlMjMlMjBjdXJyZW50JTIwc3VwcG9ydCUyMHR5cGUlM0ElMjB0ZXh0JTJDJTIwYXVkaW8lMkMlMjBpbWFnZSUyQyUyMG11bHRpbW9kYWwlMEEp",highlighted:`PIPELINE_REGISTRY.register_pipeline(
    <span class="hljs-string">&quot;new-task&quot;</span>,
    pipeline_class=MyPipeline,
    pt_model=AutoModelForSequenceClassification,
    default={<span class="hljs-string">&quot;pt&quot;</span>: (<span class="hljs-string">&quot;user/awesome_model&quot;</span>, <span class="hljs-string">&quot;abcdef&quot;</span>)},
    <span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;text&quot;</span>,  <span class="hljs-comment"># current support type: text, audio, image, multimodal</span>
)`}}),Je=new xl({}),he=new A({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFBpcGVsaW5lJTBBJTBBJTBBZGVmJTIwc29mdG1heChvdXRwdXRzKSUzQSUwQSUyMCUyMCUyMCUyMG1heGVzJTIwJTNEJTIwbnAubWF4KG91dHB1dHMlMkMlMjBheGlzJTNELTElMkMlMjBrZWVwZGltcyUzRFRydWUpJTBBJTIwJTIwJTIwJTIwc2hpZnRlZF9leHAlMjAlM0QlMjBucC5leHAob3V0cHV0cyUyMC0lMjBtYXhlcyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzaGlmdGVkX2V4cCUyMCUyRiUyMHNoaWZ0ZWRfZXhwLnN1bShheGlzJTNELTElMkMlMjBrZWVwZGltcyUzRFRydWUpJTBBJTBBJTBBY2xhc3MlMjBQYWlyQ2xhc3NpZmljYXRpb25QaXBlbGluZShQaXBlbGluZSklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjBfc2FuaXRpemVfcGFyYW1ldGVycyhzZWxmJTJDJTIwKiprd2FyZ3MpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc19rd2FyZ3MlMjAlM0QlMjAlN0IlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMCUyMnNlY29uZF90ZXh0JTIyJTIwaW4lMjBrd2FyZ3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzX2t3YXJncyU1QiUyMnNlY29uZF90ZXh0JTIyJTVEJTIwJTNEJTIwa3dhcmdzJTVCJTIyc2Vjb25kX3RleHQlMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBwcmVwcm9jZXNzX2t3YXJncyUyQyUyMCU3QiU3RCUyQyUyMCU3QiU3RCUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHByZXByb2Nlc3Moc2VsZiUyQyUyMHRleHQlMkMlMjBzZWNvbmRfdGV4dCUzRE5vbmUpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwc2VsZi50b2tlbml6ZXIodGV4dCUyQyUyMHRleHRfcGFpciUzRHNlY29uZF90ZXh0JTJDJTIwcmV0dXJuX3RlbnNvcnMlM0RzZWxmLmZyYW1ld29yayklMEElMEElMjAlMjAlMjAlMjBkZWYlMjBfZm9yd2FyZChzZWxmJTJDJTIwbW9kZWxfaW5wdXRzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHNlbGYubW9kZWwoKiptb2RlbF9pbnB1dHMpJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcG9zdHByb2Nlc3Moc2VsZiUyQyUyMG1vZGVsX291dHB1dHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9naXRzJTIwJTNEJTIwbW9kZWxfb3V0cHV0cy5sb2dpdHMlNUIwJTVELm51bXB5KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9iYWJpbGl0aWVzJTIwJTNEJTIwc29mdG1heChsb2dpdHMpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVzdF9jbGFzcyUyMCUzRCUyMG5wLmFyZ21heChwcm9iYWJpbGl0aWVzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVsJTIwJTNEJTIwc2VsZi5tb2RlbC5jb25maWcuaWQybGFiZWwlNUJiZXN0X2NsYXNzJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2NvcmUlMjAlM0QlMjBwcm9iYWJpbGl0aWVzJTVCYmVzdF9jbGFzcyU1RC5pdGVtKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBsb2dpdHMudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJsYWJlbCUyMiUzQSUyMGxhYmVsJTJDJTIwJTIyc2NvcmUlMjIlM0ElMjBzY29yZSUyQyUyMCUyMmxvZ2l0cyUyMiUzQSUyMGxvZ2l0cyU3RA==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Pipeline


<span class="hljs-keyword">def</span> <span class="hljs-title function_">softmax</span>(<span class="hljs-params">outputs</span>):
    maxes = np.<span class="hljs-built_in">max</span>(outputs, axis=-<span class="hljs-number">1</span>, keepdims=<span class="hljs-literal">True</span>)
    shifted_exp = np.exp(outputs - maxes)
    <span class="hljs-keyword">return</span> shifted_exp / shifted_exp.<span class="hljs-built_in">sum</span>(axis=-<span class="hljs-number">1</span>, keepdims=<span class="hljs-literal">True</span>)


<span class="hljs-keyword">class</span> <span class="hljs-title class_">PairClassificationPipeline</span>(<span class="hljs-title class_ inherited__">Pipeline</span>):
    <span class="hljs-keyword">def</span> <span class="hljs-title function_">_sanitize_parameters</span>(<span class="hljs-params">self, **kwargs</span>):
        preprocess_kwargs = {}
        <span class="hljs-keyword">if</span> <span class="hljs-string">&quot;second_text&quot;</span> <span class="hljs-keyword">in</span> kwargs:
            preprocess_kwargs[<span class="hljs-string">&quot;second_text&quot;</span>] = kwargs[<span class="hljs-string">&quot;second_text&quot;</span>]
        <span class="hljs-keyword">return</span> preprocess_kwargs, {}, {}

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess</span>(<span class="hljs-params">self, text, second_text=<span class="hljs-literal">None</span></span>):
        <span class="hljs-keyword">return</span> self.tokenizer(text, text_pair=second_text, return_tensors=self.framework)

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">_forward</span>(<span class="hljs-params">self, model_inputs</span>):
        <span class="hljs-keyword">return</span> self.model(**model_inputs)

    <span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">self, model_outputs</span>):
        logits = model_outputs.logits[<span class="hljs-number">0</span>].numpy()
        probabilities = softmax(logits)

        best_class = np.argmax(probabilities)
        label = self.model.config.id2label[best_class]
        score = probabilities[best_class].item()
        logits = logits.tolist()
        <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;label&quot;</span>: label, <span class="hljs-string">&quot;score&quot;</span>: score, <span class="hljs-string">&quot;logits&quot;</span>: logits}`}}),we=new A({props:{code:"ZnJvbSUyMHBhaXJfY2xhc3NpZmljYXRpb24lMjBpbXBvcnQlMjBQYWlyQ2xhc3NpZmljYXRpb25QaXBlbGluZSUwQWZyb20lMjB0cmFuc2Zvcm1lcnMucGlwZWxpbmVzJTIwaW1wb3J0JTIwUElQRUxJTkVfUkVHSVNUUlklMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQVBJUEVMSU5FX1JFR0lTVFJZLnJlZ2lzdGVyX3BpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCUyMnBhaXItY2xhc3NpZmljYXRpb24lMjIlMkMlMEElMjAlMjAlMjAlMjBwaXBlbGluZV9jbGFzcyUzRFBhaXJDbGFzc2lmaWNhdGlvblBpcGVsaW5lJTJDJTBBJTIwJTIwJTIwJTIwcHRfbW9kZWwlM0RBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTJDJTBBJTIwJTIwJTIwJTIwdGZfbW9kZWwlM0RURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> pair_classification <span class="hljs-keyword">import</span> PairClassificationPipeline
<span class="hljs-keyword">from</span> transformers.pipelines <span class="hljs-keyword">import</span> PIPELINE_REGISTRY
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, TFAutoModelForSequenceClassification

PIPELINE_REGISTRY.register_pipeline(
    <span class="hljs-string">&quot;pair-classification&quot;</span>,
    pipeline_class=PairClassificationPipeline,
    pt_model=AutoModelForSequenceClassification,
    tf_model=TFAutoModelForSequenceClassification,
)`}}),je=new A({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUyMnBhaXItY2xhc3NpZmljYXRpb24lMjIlMkMlMjBtb2RlbCUzRCUyMnNndWdnZXIlMkZmaW5ldHVuZWQtYmVydC1tcnBjJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

classifier = pipeline(<span class="hljs-string">&quot;pair-classification&quot;</span>, model=<span class="hljs-string">&quot;sgugger/finetuned-bert-mrpc&quot;</span>)`}}),Te=new A({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMEElMEFyZXBvJTIwJTNEJTIwUmVwb3NpdG9yeSglMjJ0ZXN0LWR5bmFtaWMtcGlwZWxpbmUlMjIlMkMlMjBjbG9uZV9mcm9tJTNEJTIyJTdCeW91cl91c2VybmFtZSU3RCUyRnRlc3QtZHluYW1pYy1waXBlbGluZSUyMiklMEFjbGFzc2lmaWVyLnNhdmVfcHJldHJhaW5lZCglMjJ0ZXN0LWR5bmFtaWMtcGlwZWxpbmUlMjIpJTBBcmVwby5wdXNoX3RvX2h1Yigp",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository

repo = Repository(<span class="hljs-string">&quot;test-dynamic-pipeline&quot;</span>, clone_from=<span class="hljs-string">&quot;{your_username}/test-dynamic-pipeline&quot;</span>)
classifier.save_pretrained(<span class="hljs-string">&quot;test-dynamic-pipeline&quot;</span>)
repo.push_to_hub()`}}),be=new A({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKG1vZGVsJTNEJTIyJTdCeW91cl91c2VybmFtZSU3RCUyRnRlc3QtZHluYW1pYy1waXBlbGluZSUyMiUyQyUyMHRydXN0X3JlbW90ZV9jb2RlJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

classifier = pipeline(model=<span class="hljs-string">&quot;{your_username}/test-dynamic-pipeline&quot;</span>, trust_remote_code=<span class="hljs-literal">True</span>)`}}),_e=new xl({}),{c(){G=i("meta"),Os=c(),N=i("h1"),Q=i("a"),qe=i("span"),f(ce.$$.fragment),Ol=c(),Ae=i("span"),Ll=a("Come creare una pipeline personalizzata?"),Ls=c(),S=i("p"),Kl=a("In questa guida, scopriremo come creare una pipeline personalizzata e condividerla sull\u2019 "),Ie=i("a"),ea=a("Hub"),sa=a(` o aggiungerla nella libreria
Transformers.`),Ks=c(),C=i("p"),la=a(`Innanzitutto, \xE8 necessario decidere gli input grezzi che la pipeline sar\xE0 in grado di accettare. Possono essere strings, raw bytes,
dictionaries o qualsiasi cosa sia l\u2019input desiderato pi\xF9 probabile. Cerca di mantenere questi input il pi\xF9 possibile in Python
in quanto facilita la compatibilit\xE0 (anche con altri linguaggi tramite JSON). Questi saranno gli `),Ge=i("code"),aa=a("inputs"),ta=a(` della
pipeline (`),Ne=i("code"),ia=a("preprocess"),oa=a(")."),el=c(),b=i("p"),na=a("Poi definire gli "),Xe=i("code"),ra=a("outputs"),pa=a(". Stessa strategia degli "),Re=i("code"),ca=a("inputs"),da=a(`. Pi\xF9 \xE8 seplice e meglio \xE8. Questi saranno gli output del metodo
`),Ve=i("code"),ua=a("postprocess"),ma=a("."),sl=c(),m=i("p"),Ma=a("Si parte ereditando la classe base "),We=i("code"),fa=a("Pipeline"),ya=a(". con i 4 metodi che bisogna implementare "),$e=i("code"),Ja=a("preprocess"),ha=a(`,
`),Pe=i("code"),wa=a("_forward"),ja=a(", "),Qe=i("code"),Ta=a("postprocess"),ba=a(" e "),Se=i("code"),_a=a("_sanitize_parameters"),Ua=a("."),ll=c(),f(de.$$.fragment),al=c(),ve=i("p"),Ea=a(`La struttura di questa suddivisione consiste nel supportare in modo relativamente continuo CPU/GPU, supportando allo stesso tempo l\u2019esecuzione di
pre/postelaborazione sulla CPU su thread diversi.`),tl=c(),X=i("p"),He=i("code"),Ia=a("preprocess"),va=a(` prender\xE0 gli input originariamente definiti e li trasformer\xE0 in qualcosa di alimentabile dal modello. Potrebbe
contenere pi\xF9 informazioni e di solito \xE8 un `),Ye=i("code"),ga=a("Dict"),Ca=a("."),il=c(),v=i("p"),Fe=i("code"),Ba=a("_forward"),ka=a(" \xE8 il dettaglio dell\u2019implementazione e non \xE8 destinato a essere chiamato direttamente. "),De=i("code"),za=a("forward"),Za=a(` \xE8 il metodo preferito per assicurarsi che tutto funzioni correttamente perch\xE8 contiene delle slavaguardie. Se qualcosa \xE8
\xE8 collegato a un modello reale, appartiene al metodo `),xe=i("code"),qa=a("_forward"),Aa=a(", tutto il resto \xE8 nel preprocess/postprocess."),ol=c(),R=i("p"),Oe=i("code"),Ga=a("postprocess"),Na=a(" prende l\u2019otput di "),Le=i("code"),Xa=a("_forward"),Ra=a(" e lo trasforma nell\u2019output finale che era stato deciso in precedenza."),nl=c(),g=i("p"),Ke=i("code"),Va=a("_sanitize_parameters"),Wa=a(" esiste per consentire agli utenti di passare i parametri ogni volta che desiderano sia a inizialization time "),es=i("code"),$a=a("pipeline(...., maybe_arg=4)"),Pa=a(" che al call time "),ss=i("code"),Qa=a("pipe = pipeline(...); output = pipe(...., maybe_arg=4)"),Sa=a("."),rl=c(),T=i("p"),ls=i("code"),Ha=a("_sanitize_parameters"),Ya=a(" ritorna 3 dicts di kwargs che vengono passati direttamente a "),as=i("code"),Fa=a("preprocess"),Da=a(`,
`),ts=i("code"),xa=a("_forward"),Oa=a(" e "),is=i("code"),La=a("postprocess"),Ka=a(`. Non riempire nulla se il chiamante non ha chiamato con alcun parametro aggiuntivo. Questo
consente di mantenere gli argomenti predefiniti nella definizione della funzione, che \xE8 sempre pi\xF9 \u201Cnaturale\u201D.`),pl=c(),H=i("p"),et=a("Un esempio classico potrebbe essere l\u2019argomento "),os=i("code"),st=a("top_k"),lt=a(" nel post processing dei classification tasks."),cl=c(),f(ue.$$.fragment),dl=c(),_=i("p"),at=a("In order to achieve that, we\u2019ll update our "),ns=i("code"),tt=a("postprocess"),it=a(" method with a default parameter to "),rs=i("code"),ot=a("5"),nt=a(`. and edit
`),ps=i("code"),rt=a("_sanitize_parameters"),pt=a(" to allow this new parameter."),ul=c(),f(me.$$.fragment),ml=c(),ge=i("p"),ct=a(`Cercare di mantenere gli input/output molto semplici e idealmente serializzabili in JSON, in quanto ci\xF2 rende l\u2019uso della pipeline molto facile
senza richiedere agli utenti di comprendere nuovi tipi di oggetti. \xC8 anche relativamente comune supportare molti tipi di argomenti
per facilitarne l\u2019uso (ad esempio file audio, possono essere nomi di file, URL o byte puri).`),Ml=c(),V=i("h2"),Y=i("a"),cs=i("span"),f(Me.$$.fragment),dt=c(),ds=i("span"),ut=a("Aggiungilo alla lista dei tasks supportati"),fl=c(),B=i("p"),mt=a("Per registrar il tuo "),us=i("code"),Mt=a("new-task"),ft=a(" alla lista dei tasks supportati, devi aggiungerlo al "),ms=i("code"),yt=a("PIPELINE_REGISTRY"),Jt=a(":"),yl=c(),f(fe.$$.fragment),Jl=c(),F=i("p"),ht=a("Puoi specificare il modello di default che desideri, in questo caso dovrebbe essere accompagnato da una revisione specifica (che pu\xF2 essere il nome di un branch o l\u2019hash di un commit, in questo caso abbiamo preso "),Ms=i("code"),wt=a('"abcdef"'),jt=a(") e anche dal type:"),hl=c(),f(ye.$$.fragment),wl=c(),W=i("h2"),D=i("a"),fs=i("span"),f(Je.$$.fragment),Tt=c(),ys=i("span"),bt=a("Condividi la tua pipeline sull'Hub"),jl=c(),x=i("p"),_t=a("Per condividere la tua pipeline personalizzata sull\u2019Hub, devi solo salvare il codice della tua sottoclasse "),Js=i("code"),Ut=a("Pipeline"),Et=a(` in un file
python. Per esempio, supponiamo di voler utilizzare una pipeline personalizzata per la classificazione delle coppie di frasi come la seguente:`),Tl=c(),f(he.$$.fragment),bl=c(),O=i("p"),It=a("L\u2019implementazione \xE8 agnostica al framework, e lavorer\xE0 sia con modelli PyTorch che con TensorFlow. Se l\u2019abbiamo salvato in un file chiamato "),hs=i("code"),vt=a("pair_classification.py"),gt=a(", pu\xF2 essere successivamente importato e registrato in questo modo:"),_l=c(),f(we.$$.fragment),Ul=c(),L=i("p"),Ct=a("Una volta fatto, possiamo usarla con un modello pretrained. L\u2019istanza "),ws=i("code"),Bt=a("sgugger/finetuned-bert-mrpc"),kt=a(` \xE8 stata
fine-tuned sul dataset MRPC, che classifica le coppie di frasi come parafrasi o no.`),El=c(),f(je.$$.fragment),Il=c(),k=i("p"),zt=a("Successivamente possiamo condividerlo sull\u2019Hub usando il metodo "),js=i("code"),Zt=a("save_pretrained"),qt=a(" in un "),Ts=i("code"),At=a("Repository"),Gt=a(":"),vl=c(),f(Te.$$.fragment),gl=c(),M=i("p"),Nt=a("Questo codice copier\xE0 il file dove \xE8 stato definitp "),bs=i("code"),Xt=a("PairClassificationPipeline"),Rt=a(" all\u2019interno della cartella "),_s=i("code"),Vt=a('"test-dynamic-pipeline"'),Wt=a(`,
insieme al salvataggio del modello e del tokenizer della pipeline, prima di pushare il tutto nel repository
`),Us=i("code"),$t=a("{your_username}/test-dynamic-pipeline"),Pt=a(`. Dopodich\xE9 chiunque potr\xE0 utilizzarlo, purch\xE9 fornisca l\u2019opzione
`),Es=i("code"),Qt=a("trust_remote_code=True"),St=a(":"),Cl=c(),f(be.$$.fragment),Bl=c(),$=i("h2"),K=i("a"),Is=i("span"),f(_e.$$.fragment),Ht=c(),vs=i("span"),Yt=a("Aggiungere la pipeline a Transformers"),kl=c(),z=i("p"),Ft=a("Se vuoi contribuire con la tua pipeline a Transformers, dovrai aggiungere un modulo nel sottomodulo "),gs=i("code"),Dt=a("pipelines"),xt=a(`
con il codice della tua pipeline, quindi aggiungilo all\u2019elenco dei tasks definiti in `),Cs=i("code"),Ot=a("pipelines/__init__.py"),Lt=a("."),zl=c(),ee=i("p"),Kt=a("Poi hai bisogno di aggiungere i test. Crea un nuovo file "),Bs=i("code"),ei=a("tests/test_pipelines_MY_PIPELINE.py"),si=a(" con esempi ed altri test."),Zl=c(),U=i("p"),li=a("La funzione "),ks=i("code"),ai=a("run_pipeline_test"),ti=a(` sar\xE0 molto generica e su piccoli modelli casuali su ogni possibile
architettura, come definito da `),zs=i("code"),ii=a("model_mapping"),oi=a(" e "),Zs=i("code"),ni=a("tf_model_mapping"),ri=a("."),ql=c(),Z=i("p"),pi=a(`Questo \xE8 molto importante per testare la compatibilit\xE0 futura, nel senso che se qualcuno aggiunge un nuovo modello di
`),qs=i("code"),ci=a("XXXForQuestionAnswering"),di=a(` allora il test della pipeline tenter\xE0 di essere eseguito su di esso. Poich\xE9 i modelli sono casuali, \xE8
\xE8 impossibile controllare i valori effettivi, per questo esiste un aiuto `),As=i("code"),ui=a("ANY"),mi=a(" che tenter\xE0 solamente di far corrispondere l\u2019output della pipeline TYPE."),Al=c(),se=i("p"),Mi=a("Hai anche "),Gs=i("em"),fi=a("bisogno"),yi=a(" di implementare 2 (idealmente 4) test."),Gl=c(),E=i("ul"),le=i("li"),Ns=i("code"),Ji=a("test_small_model_pt"),hi=a(` : Definire 1 piccolo modello per questa pipeline (non importa se i risultati non hanno senso)
e testare i risultati della pipeline. I risultati dovrebbero essere gli stessi di `),Xs=i("code"),wi=a("test_small_model_tf"),ji=a("."),Ti=c(),ae=i("li"),Rs=i("code"),bi=a("test_small_model_tf"),_i=a(` : Definire 1 piccolo modello per questa pipeline (non importa se i risultati non hanno senso)
e testare i risultati della pipeline. I risultati dovrebbero essere gli stessi di `),Vs=i("code"),Ui=a("test_small_model_pt"),Ei=a("."),Ii=c(),te=i("li"),Ws=i("code"),vi=a("test_large_model_pt"),gi=a(" ("),$s=i("code"),Ci=a("optional"),Bi=a(`): Testare la pipeline su una pipeline reale in cui i risultati dovrebbero avere
senso. Questi test sono lenti e dovrebbero essere contrassegnati come tali. In questo caso l\u2019obiettivo \xE8 mostrare la pipeline e assicurarsi che non ci siano  derive nelle versioni future`),ki=c(),ie=i("li"),Ps=i("code"),zi=a("test_large_model_tf"),Zi=a(" ("),Qs=i("code"),qi=a("optional"),Ai=a(`): Testare la pipeline su una pipeline reale in cui i risultati dovrebbero avere
senso. Questi test sono lenti e dovrebbero essere contrassegnati come tali. In questo caso l\u2019obiettivo \xE8 mostrare la pipeline e assicurarsi
che non ci siano derive nelle versioni future`),this.h()},l(e){const r=on('[data-svelte="svelte-1phssyn"]',document.head);G=o(r,"META",{name:!0,content:!0}),r.forEach(l),Os=d(e),N=o(e,"H1",{class:!0});var Xl=n(N);Q=o(Xl,"A",{id:!0,class:!0,href:!0});var Ni=n(Q);qe=o(Ni,"SPAN",{});var Xi=n(qe);y(ce.$$.fragment,Xi),Xi.forEach(l),Ni.forEach(l),Ol=d(Xl),Ae=o(Xl,"SPAN",{});var Ri=n(Ae);Ll=t(Ri,"Come creare una pipeline personalizzata?"),Ri.forEach(l),Xl.forEach(l),Ls=d(e),S=o(e,"P",{});var Rl=n(S);Kl=t(Rl,"In questa guida, scopriremo come creare una pipeline personalizzata e condividerla sull\u2019 "),Ie=o(Rl,"A",{href:!0});var Vi=n(Ie);ea=t(Vi,"Hub"),Vi.forEach(l),sa=t(Rl,` o aggiungerla nella libreria
Transformers.`),Rl.forEach(l),Ks=d(e),C=o(e,"P",{});var Ce=n(C);la=t(Ce,`Innanzitutto, \xE8 necessario decidere gli input grezzi che la pipeline sar\xE0 in grado di accettare. Possono essere strings, raw bytes,
dictionaries o qualsiasi cosa sia l\u2019input desiderato pi\xF9 probabile. Cerca di mantenere questi input il pi\xF9 possibile in Python
in quanto facilita la compatibilit\xE0 (anche con altri linguaggi tramite JSON). Questi saranno gli `),Ge=o(Ce,"CODE",{});var Wi=n(Ge);aa=t(Wi,"inputs"),Wi.forEach(l),ta=t(Ce,` della
pipeline (`),Ne=o(Ce,"CODE",{});var $i=n(Ne);ia=t($i,"preprocess"),$i.forEach(l),oa=t(Ce,")."),Ce.forEach(l),el=d(e),b=o(e,"P",{});var oe=n(b);na=t(oe,"Poi definire gli "),Xe=o(oe,"CODE",{});var Pi=n(Xe);ra=t(Pi,"outputs"),Pi.forEach(l),pa=t(oe,". Stessa strategia degli "),Re=o(oe,"CODE",{});var Qi=n(Re);ca=t(Qi,"inputs"),Qi.forEach(l),da=t(oe,`. Pi\xF9 \xE8 seplice e meglio \xE8. Questi saranno gli output del metodo
`),Ve=o(oe,"CODE",{});var Si=n(Ve);ua=t(Si,"postprocess"),Si.forEach(l),ma=t(oe,"."),oe.forEach(l),sl=d(e),m=o(e,"P",{});var I=n(m);Ma=t(I,"Si parte ereditando la classe base "),We=o(I,"CODE",{});var Hi=n(We);fa=t(Hi,"Pipeline"),Hi.forEach(l),ya=t(I,". con i 4 metodi che bisogna implementare "),$e=o(I,"CODE",{});var Yi=n($e);Ja=t(Yi,"preprocess"),Yi.forEach(l),ha=t(I,`,
`),Pe=o(I,"CODE",{});var Fi=n(Pe);wa=t(Fi,"_forward"),Fi.forEach(l),ja=t(I,", "),Qe=o(I,"CODE",{});var Di=n(Qe);Ta=t(Di,"postprocess"),Di.forEach(l),ba=t(I," e "),Se=o(I,"CODE",{});var xi=n(Se);_a=t(xi,"_sanitize_parameters"),xi.forEach(l),Ua=t(I,"."),I.forEach(l),ll=d(e),y(de.$$.fragment,e),al=d(e),ve=o(e,"P",{});var Oi=n(ve);Ea=t(Oi,`La struttura di questa suddivisione consiste nel supportare in modo relativamente continuo CPU/GPU, supportando allo stesso tempo l\u2019esecuzione di
pre/postelaborazione sulla CPU su thread diversi.`),Oi.forEach(l),tl=d(e),X=o(e,"P",{});var Ss=n(X);He=o(Ss,"CODE",{});var Li=n(He);Ia=t(Li,"preprocess"),Li.forEach(l),va=t(Ss,` prender\xE0 gli input originariamente definiti e li trasformer\xE0 in qualcosa di alimentabile dal modello. Potrebbe
contenere pi\xF9 informazioni e di solito \xE8 un `),Ye=o(Ss,"CODE",{});var Ki=n(Ye);ga=t(Ki,"Dict"),Ki.forEach(l),Ca=t(Ss,"."),Ss.forEach(l),il=d(e),v=o(e,"P",{});var Ue=n(v);Fe=o(Ue,"CODE",{});var eo=n(Fe);Ba=t(eo,"_forward"),eo.forEach(l),ka=t(Ue," \xE8 il dettaglio dell\u2019implementazione e non \xE8 destinato a essere chiamato direttamente. "),De=o(Ue,"CODE",{});var so=n(De);za=t(so,"forward"),so.forEach(l),Za=t(Ue,` \xE8 il metodo preferito per assicurarsi che tutto funzioni correttamente perch\xE8 contiene delle slavaguardie. Se qualcosa \xE8
\xE8 collegato a un modello reale, appartiene al metodo `),xe=o(Ue,"CODE",{});var lo=n(xe);qa=t(lo,"_forward"),lo.forEach(l),Aa=t(Ue,", tutto il resto \xE8 nel preprocess/postprocess."),Ue.forEach(l),ol=d(e),R=o(e,"P",{});var Hs=n(R);Oe=o(Hs,"CODE",{});var ao=n(Oe);Ga=t(ao,"postprocess"),ao.forEach(l),Na=t(Hs," prende l\u2019otput di "),Le=o(Hs,"CODE",{});var to=n(Le);Xa=t(to,"_forward"),to.forEach(l),Ra=t(Hs," e lo trasforma nell\u2019output finale che era stato deciso in precedenza."),Hs.forEach(l),nl=d(e),g=o(e,"P",{});var Ee=n(g);Ke=o(Ee,"CODE",{});var io=n(Ke);Va=t(io,"_sanitize_parameters"),io.forEach(l),Wa=t(Ee," esiste per consentire agli utenti di passare i parametri ogni volta che desiderano sia a inizialization time "),es=o(Ee,"CODE",{});var oo=n(es);$a=t(oo,"pipeline(...., maybe_arg=4)"),oo.forEach(l),Pa=t(Ee," che al call time "),ss=o(Ee,"CODE",{});var no=n(ss);Qa=t(no,"pipe = pipeline(...); output = pipe(...., maybe_arg=4)"),no.forEach(l),Sa=t(Ee,"."),Ee.forEach(l),rl=d(e),T=o(e,"P",{});var P=n(T);ls=o(P,"CODE",{});var ro=n(ls);Ha=t(ro,"_sanitize_parameters"),ro.forEach(l),Ya=t(P," ritorna 3 dicts di kwargs che vengono passati direttamente a "),as=o(P,"CODE",{});var po=n(as);Fa=t(po,"preprocess"),po.forEach(l),Da=t(P,`,
`),ts=o(P,"CODE",{});var co=n(ts);xa=t(co,"_forward"),co.forEach(l),Oa=t(P," e "),is=o(P,"CODE",{});var uo=n(is);La=t(uo,"postprocess"),uo.forEach(l),Ka=t(P,`. Non riempire nulla se il chiamante non ha chiamato con alcun parametro aggiuntivo. Questo
consente di mantenere gli argomenti predefiniti nella definizione della funzione, che \xE8 sempre pi\xF9 \u201Cnaturale\u201D.`),P.forEach(l),pl=d(e),H=o(e,"P",{});var Vl=n(H);et=t(Vl,"Un esempio classico potrebbe essere l\u2019argomento "),os=o(Vl,"CODE",{});var mo=n(os);st=t(mo,"top_k"),mo.forEach(l),lt=t(Vl," nel post processing dei classification tasks."),Vl.forEach(l),cl=d(e),y(ue.$$.fragment,e),dl=d(e),_=o(e,"P",{});var ne=n(_);at=t(ne,"In order to achieve that, we\u2019ll update our "),ns=o(ne,"CODE",{});var Mo=n(ns);tt=t(Mo,"postprocess"),Mo.forEach(l),it=t(ne," method with a default parameter to "),rs=o(ne,"CODE",{});var fo=n(rs);ot=t(fo,"5"),fo.forEach(l),nt=t(ne,`. and edit
`),ps=o(ne,"CODE",{});var yo=n(ps);rt=t(yo,"_sanitize_parameters"),yo.forEach(l),pt=t(ne," to allow this new parameter."),ne.forEach(l),ul=d(e),y(me.$$.fragment,e),ml=d(e),ge=o(e,"P",{});var Jo=n(ge);ct=t(Jo,`Cercare di mantenere gli input/output molto semplici e idealmente serializzabili in JSON, in quanto ci\xF2 rende l\u2019uso della pipeline molto facile
senza richiedere agli utenti di comprendere nuovi tipi di oggetti. \xC8 anche relativamente comune supportare molti tipi di argomenti
per facilitarne l\u2019uso (ad esempio file audio, possono essere nomi di file, URL o byte puri).`),Jo.forEach(l),Ml=d(e),V=o(e,"H2",{class:!0});var Wl=n(V);Y=o(Wl,"A",{id:!0,class:!0,href:!0});var ho=n(Y);cs=o(ho,"SPAN",{});var wo=n(cs);y(Me.$$.fragment,wo),wo.forEach(l),ho.forEach(l),dt=d(Wl),ds=o(Wl,"SPAN",{});var jo=n(ds);ut=t(jo,"Aggiungilo alla lista dei tasks supportati"),jo.forEach(l),Wl.forEach(l),fl=d(e),B=o(e,"P",{});var Be=n(B);mt=t(Be,"Per registrar il tuo "),us=o(Be,"CODE",{});var To=n(us);Mt=t(To,"new-task"),To.forEach(l),ft=t(Be," alla lista dei tasks supportati, devi aggiungerlo al "),ms=o(Be,"CODE",{});var bo=n(ms);yt=t(bo,"PIPELINE_REGISTRY"),bo.forEach(l),Jt=t(Be,":"),Be.forEach(l),yl=d(e),y(fe.$$.fragment,e),Jl=d(e),F=o(e,"P",{});var $l=n(F);ht=t($l,"Puoi specificare il modello di default che desideri, in questo caso dovrebbe essere accompagnato da una revisione specifica (che pu\xF2 essere il nome di un branch o l\u2019hash di un commit, in questo caso abbiamo preso "),Ms=o($l,"CODE",{});var _o=n(Ms);wt=t(_o,'"abcdef"'),_o.forEach(l),jt=t($l,") e anche dal type:"),$l.forEach(l),hl=d(e),y(ye.$$.fragment,e),wl=d(e),W=o(e,"H2",{class:!0});var Pl=n(W);D=o(Pl,"A",{id:!0,class:!0,href:!0});var Uo=n(D);fs=o(Uo,"SPAN",{});var Eo=n(fs);y(Je.$$.fragment,Eo),Eo.forEach(l),Uo.forEach(l),Tt=d(Pl),ys=o(Pl,"SPAN",{});var Io=n(ys);bt=t(Io,"Condividi la tua pipeline sull'Hub"),Io.forEach(l),Pl.forEach(l),jl=d(e),x=o(e,"P",{});var Ql=n(x);_t=t(Ql,"Per condividere la tua pipeline personalizzata sull\u2019Hub, devi solo salvare il codice della tua sottoclasse "),Js=o(Ql,"CODE",{});var vo=n(Js);Ut=t(vo,"Pipeline"),vo.forEach(l),Et=t(Ql,` in un file
python. Per esempio, supponiamo di voler utilizzare una pipeline personalizzata per la classificazione delle coppie di frasi come la seguente:`),Ql.forEach(l),Tl=d(e),y(he.$$.fragment,e),bl=d(e),O=o(e,"P",{});var Sl=n(O);It=t(Sl,"L\u2019implementazione \xE8 agnostica al framework, e lavorer\xE0 sia con modelli PyTorch che con TensorFlow. Se l\u2019abbiamo salvato in un file chiamato "),hs=o(Sl,"CODE",{});var go=n(hs);vt=t(go,"pair_classification.py"),go.forEach(l),gt=t(Sl,", pu\xF2 essere successivamente importato e registrato in questo modo:"),Sl.forEach(l),_l=d(e),y(we.$$.fragment,e),Ul=d(e),L=o(e,"P",{});var Hl=n(L);Ct=t(Hl,"Una volta fatto, possiamo usarla con un modello pretrained. L\u2019istanza "),ws=o(Hl,"CODE",{});var Co=n(ws);Bt=t(Co,"sgugger/finetuned-bert-mrpc"),Co.forEach(l),kt=t(Hl,` \xE8 stata
fine-tuned sul dataset MRPC, che classifica le coppie di frasi come parafrasi o no.`),Hl.forEach(l),El=d(e),y(je.$$.fragment,e),Il=d(e),k=o(e,"P",{});var ke=n(k);zt=t(ke,"Successivamente possiamo condividerlo sull\u2019Hub usando il metodo "),js=o(ke,"CODE",{});var Bo=n(js);Zt=t(Bo,"save_pretrained"),Bo.forEach(l),qt=t(ke," in un "),Ts=o(ke,"CODE",{});var ko=n(Ts);At=t(ko,"Repository"),ko.forEach(l),Gt=t(ke,":"),ke.forEach(l),vl=d(e),y(Te.$$.fragment,e),gl=d(e),M=o(e,"P",{});var q=n(M);Nt=t(q,"Questo codice copier\xE0 il file dove \xE8 stato definitp "),bs=o(q,"CODE",{});var zo=n(bs);Xt=t(zo,"PairClassificationPipeline"),zo.forEach(l),Rt=t(q," all\u2019interno della cartella "),_s=o(q,"CODE",{});var Zo=n(_s);Vt=t(Zo,'"test-dynamic-pipeline"'),Zo.forEach(l),Wt=t(q,`,
insieme al salvataggio del modello e del tokenizer della pipeline, prima di pushare il tutto nel repository
`),Us=o(q,"CODE",{});var qo=n(Us);$t=t(qo,"{your_username}/test-dynamic-pipeline"),qo.forEach(l),Pt=t(q,`. Dopodich\xE9 chiunque potr\xE0 utilizzarlo, purch\xE9 fornisca l\u2019opzione
`),Es=o(q,"CODE",{});var Ao=n(Es);Qt=t(Ao,"trust_remote_code=True"),Ao.forEach(l),St=t(q,":"),q.forEach(l),Cl=d(e),y(be.$$.fragment,e),Bl=d(e),$=o(e,"H2",{class:!0});var Yl=n($);K=o(Yl,"A",{id:!0,class:!0,href:!0});var Go=n(K);Is=o(Go,"SPAN",{});var No=n(Is);y(_e.$$.fragment,No),No.forEach(l),Go.forEach(l),Ht=d(Yl),vs=o(Yl,"SPAN",{});var Xo=n(vs);Yt=t(Xo,"Aggiungere la pipeline a Transformers"),Xo.forEach(l),Yl.forEach(l),kl=d(e),z=o(e,"P",{});var ze=n(z);Ft=t(ze,"Se vuoi contribuire con la tua pipeline a Transformers, dovrai aggiungere un modulo nel sottomodulo "),gs=o(ze,"CODE",{});var Ro=n(gs);Dt=t(Ro,"pipelines"),Ro.forEach(l),xt=t(ze,`
con il codice della tua pipeline, quindi aggiungilo all\u2019elenco dei tasks definiti in `),Cs=o(ze,"CODE",{});var Vo=n(Cs);Ot=t(Vo,"pipelines/__init__.py"),Vo.forEach(l),Lt=t(ze,"."),ze.forEach(l),zl=d(e),ee=o(e,"P",{});var Fl=n(ee);Kt=t(Fl,"Poi hai bisogno di aggiungere i test. Crea un nuovo file "),Bs=o(Fl,"CODE",{});var Wo=n(Bs);ei=t(Wo,"tests/test_pipelines_MY_PIPELINE.py"),Wo.forEach(l),si=t(Fl," con esempi ed altri test."),Fl.forEach(l),Zl=d(e),U=o(e,"P",{});var re=n(U);li=t(re,"La funzione "),ks=o(re,"CODE",{});var $o=n(ks);ai=t($o,"run_pipeline_test"),$o.forEach(l),ti=t(re,` sar\xE0 molto generica e su piccoli modelli casuali su ogni possibile
architettura, come definito da `),zs=o(re,"CODE",{});var Po=n(zs);ii=t(Po,"model_mapping"),Po.forEach(l),oi=t(re," e "),Zs=o(re,"CODE",{});var Qo=n(Zs);ni=t(Qo,"tf_model_mapping"),Qo.forEach(l),ri=t(re,"."),re.forEach(l),ql=d(e),Z=o(e,"P",{});var Ze=n(Z);pi=t(Ze,`Questo \xE8 molto importante per testare la compatibilit\xE0 futura, nel senso che se qualcuno aggiunge un nuovo modello di
`),qs=o(Ze,"CODE",{});var So=n(qs);ci=t(So,"XXXForQuestionAnswering"),So.forEach(l),di=t(Ze,` allora il test della pipeline tenter\xE0 di essere eseguito su di esso. Poich\xE9 i modelli sono casuali, \xE8
\xE8 impossibile controllare i valori effettivi, per questo esiste un aiuto `),As=o(Ze,"CODE",{});var Ho=n(As);ui=t(Ho,"ANY"),Ho.forEach(l),mi=t(Ze," che tenter\xE0 solamente di far corrispondere l\u2019output della pipeline TYPE."),Ze.forEach(l),Al=d(e),se=o(e,"P",{});var Dl=n(se);Mi=t(Dl,"Hai anche "),Gs=o(Dl,"EM",{});var Yo=n(Gs);fi=t(Yo,"bisogno"),Yo.forEach(l),yi=t(Dl," di implementare 2 (idealmente 4) test."),Dl.forEach(l),Gl=d(e),E=o(e,"UL",{});var pe=n(E);le=o(pe,"LI",{});var Ys=n(le);Ns=o(Ys,"CODE",{});var Fo=n(Ns);Ji=t(Fo,"test_small_model_pt"),Fo.forEach(l),hi=t(Ys,` : Definire 1 piccolo modello per questa pipeline (non importa se i risultati non hanno senso)
e testare i risultati della pipeline. I risultati dovrebbero essere gli stessi di `),Xs=o(Ys,"CODE",{});var Do=n(Xs);wi=t(Do,"test_small_model_tf"),Do.forEach(l),ji=t(Ys,"."),Ys.forEach(l),Ti=d(pe),ae=o(pe,"LI",{});var Fs=n(ae);Rs=o(Fs,"CODE",{});var xo=n(Rs);bi=t(xo,"test_small_model_tf"),xo.forEach(l),_i=t(Fs,` : Definire 1 piccolo modello per questa pipeline (non importa se i risultati non hanno senso)
e testare i risultati della pipeline. I risultati dovrebbero essere gli stessi di `),Vs=o(Fs,"CODE",{});var Oo=n(Vs);Ui=t(Oo,"test_small_model_pt"),Oo.forEach(l),Ei=t(Fs,"."),Fs.forEach(l),Ii=d(pe),te=o(pe,"LI",{});var Ds=n(te);Ws=o(Ds,"CODE",{});var Lo=n(Ws);vi=t(Lo,"test_large_model_pt"),Lo.forEach(l),gi=t(Ds," ("),$s=o(Ds,"CODE",{});var Ko=n($s);Ci=t(Ko,"optional"),Ko.forEach(l),Bi=t(Ds,`): Testare la pipeline su una pipeline reale in cui i risultati dovrebbero avere
senso. Questi test sono lenti e dovrebbero essere contrassegnati come tali. In questo caso l\u2019obiettivo \xE8 mostrare la pipeline e assicurarsi che non ci siano  derive nelle versioni future`),Ds.forEach(l),ki=d(pe),ie=o(pe,"LI",{});var xs=n(ie);Ps=o(xs,"CODE",{});var en=n(Ps);zi=t(en,"test_large_model_tf"),en.forEach(l),Zi=t(xs," ("),Qs=o(xs,"CODE",{});var sn=n(Qs);qi=t(sn,"optional"),sn.forEach(l),Ai=t(xs,`): Testare la pipeline su una pipeline reale in cui i risultati dovrebbero avere
senso. Questi test sono lenti e dovrebbero essere contrassegnati come tali. In questo caso l\u2019obiettivo \xE8 mostrare la pipeline e assicurarsi
che non ci siano derive nelle versioni future`),xs.forEach(l),pe.forEach(l),this.h()},h(){u(G,"name","hf:doc:metadata"),u(G,"content",JSON.stringify(cn)),u(Q,"id","come-creare-una-pipeline-personalizzata"),u(Q,"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"),u(Q,"href","#come-creare-una-pipeline-personalizzata"),u(N,"class","relative group"),u(Ie,"href","hf.co/models"),u(Y,"id","aggiungilo-alla-lista-dei-tasks-supportati"),u(Y,"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"),u(Y,"href","#aggiungilo-alla-lista-dei-tasks-supportati"),u(V,"class","relative group"),u(D,"id","condividi-la-tua-pipeline-sullhub"),u(D,"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"),u(D,"href","#condividi-la-tua-pipeline-sullhub"),u(W,"class","relative group"),u(K,"id","aggiungere-la-pipeline-a-transformers"),u(K,"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"),u(K,"href","#aggiungere-la-pipeline-a-transformers"),u($,"class","relative group")},m(e,r){s(document.head,G),p(e,Os,r),p(e,N,r),s(N,Q),s(Q,qe),J(ce,qe,null),s(N,Ol),s(N,Ae),s(Ae,Ll),p(e,Ls,r),p(e,S,r),s(S,Kl),s(S,Ie),s(Ie,ea),s(S,sa),p(e,Ks,r),p(e,C,r),s(C,la),s(C,Ge),s(Ge,aa),s(C,ta),s(C,Ne),s(Ne,ia),s(C,oa),p(e,el,r),p(e,b,r),s(b,na),s(b,Xe),s(Xe,ra),s(b,pa),s(b,Re),s(Re,ca),s(b,da),s(b,Ve),s(Ve,ua),s(b,ma),p(e,sl,r),p(e,m,r),s(m,Ma),s(m,We),s(We,fa),s(m,ya),s(m,$e),s($e,Ja),s(m,ha),s(m,Pe),s(Pe,wa),s(m,ja),s(m,Qe),s(Qe,Ta),s(m,ba),s(m,Se),s(Se,_a),s(m,Ua),p(e,ll,r),J(de,e,r),p(e,al,r),p(e,ve,r),s(ve,Ea),p(e,tl,r),p(e,X,r),s(X,He),s(He,Ia),s(X,va),s(X,Ye),s(Ye,ga),s(X,Ca),p(e,il,r),p(e,v,r),s(v,Fe),s(Fe,Ba),s(v,ka),s(v,De),s(De,za),s(v,Za),s(v,xe),s(xe,qa),s(v,Aa),p(e,ol,r),p(e,R,r),s(R,Oe),s(Oe,Ga),s(R,Na),s(R,Le),s(Le,Xa),s(R,Ra),p(e,nl,r),p(e,g,r),s(g,Ke),s(Ke,Va),s(g,Wa),s(g,es),s(es,$a),s(g,Pa),s(g,ss),s(ss,Qa),s(g,Sa),p(e,rl,r),p(e,T,r),s(T,ls),s(ls,Ha),s(T,Ya),s(T,as),s(as,Fa),s(T,Da),s(T,ts),s(ts,xa),s(T,Oa),s(T,is),s(is,La),s(T,Ka),p(e,pl,r),p(e,H,r),s(H,et),s(H,os),s(os,st),s(H,lt),p(e,cl,r),J(ue,e,r),p(e,dl,r),p(e,_,r),s(_,at),s(_,ns),s(ns,tt),s(_,it),s(_,rs),s(rs,ot),s(_,nt),s(_,ps),s(ps,rt),s(_,pt),p(e,ul,r),J(me,e,r),p(e,ml,r),p(e,ge,r),s(ge,ct),p(e,Ml,r),p(e,V,r),s(V,Y),s(Y,cs),J(Me,cs,null),s(V,dt),s(V,ds),s(ds,ut),p(e,fl,r),p(e,B,r),s(B,mt),s(B,us),s(us,Mt),s(B,ft),s(B,ms),s(ms,yt),s(B,Jt),p(e,yl,r),J(fe,e,r),p(e,Jl,r),p(e,F,r),s(F,ht),s(F,Ms),s(Ms,wt),s(F,jt),p(e,hl,r),J(ye,e,r),p(e,wl,r),p(e,W,r),s(W,D),s(D,fs),J(Je,fs,null),s(W,Tt),s(W,ys),s(ys,bt),p(e,jl,r),p(e,x,r),s(x,_t),s(x,Js),s(Js,Ut),s(x,Et),p(e,Tl,r),J(he,e,r),p(e,bl,r),p(e,O,r),s(O,It),s(O,hs),s(hs,vt),s(O,gt),p(e,_l,r),J(we,e,r),p(e,Ul,r),p(e,L,r),s(L,Ct),s(L,ws),s(ws,Bt),s(L,kt),p(e,El,r),J(je,e,r),p(e,Il,r),p(e,k,r),s(k,zt),s(k,js),s(js,Zt),s(k,qt),s(k,Ts),s(Ts,At),s(k,Gt),p(e,vl,r),J(Te,e,r),p(e,gl,r),p(e,M,r),s(M,Nt),s(M,bs),s(bs,Xt),s(M,Rt),s(M,_s),s(_s,Vt),s(M,Wt),s(M,Us),s(Us,$t),s(M,Pt),s(M,Es),s(Es,Qt),s(M,St),p(e,Cl,r),J(be,e,r),p(e,Bl,r),p(e,$,r),s($,K),s(K,Is),J(_e,Is,null),s($,Ht),s($,vs),s(vs,Yt),p(e,kl,r),p(e,z,r),s(z,Ft),s(z,gs),s(gs,Dt),s(z,xt),s(z,Cs),s(Cs,Ot),s(z,Lt),p(e,zl,r),p(e,ee,r),s(ee,Kt),s(ee,Bs),s(Bs,ei),s(ee,si),p(e,Zl,r),p(e,U,r),s(U,li),s(U,ks),s(ks,ai),s(U,ti),s(U,zs),s(zs,ii),s(U,oi),s(U,Zs),s(Zs,ni),s(U,ri),p(e,ql,r),p(e,Z,r),s(Z,pi),s(Z,qs),s(qs,ci),s(Z,di),s(Z,As),s(As,ui),s(Z,mi),p(e,Al,r),p(e,se,r),s(se,Mi),s(se,Gs),s(Gs,fi),s(se,yi),p(e,Gl,r),p(e,E,r),s(E,le),s(le,Ns),s(Ns,Ji),s(le,hi),s(le,Xs),s(Xs,wi),s(le,ji),s(E,Ti),s(E,ae),s(ae,Rs),s(Rs,bi),s(ae,_i),s(ae,Vs),s(Vs,Ui),s(ae,Ei),s(E,Ii),s(E,te),s(te,Ws),s(Ws,vi),s(te,gi),s(te,$s),s($s,Ci),s(te,Bi),s(E,ki),s(E,ie),s(ie,Ps),s(Ps,zi),s(ie,Zi),s(ie,Qs),s(Qs,qi),s(ie,Ai),Nl=!0},p:nn,i(e){Nl||(h(ce.$$.fragment,e),h(de.$$.fragment,e),h(ue.$$.fragment,e),h(me.$$.fragment,e),h(Me.$$.fragment,e),h(fe.$$.fragment,e),h(ye.$$.fragment,e),h(Je.$$.fragment,e),h(he.$$.fragment,e),h(we.$$.fragment,e),h(je.$$.fragment,e),h(Te.$$.fragment,e),h(be.$$.fragment,e),h(_e.$$.fragment,e),Nl=!0)},o(e){w(ce.$$.fragment,e),w(de.$$.fragment,e),w(ue.$$.fragment,e),w(me.$$.fragment,e),w(Me.$$.fragment,e),w(fe.$$.fragment,e),w(ye.$$.fragment,e),w(Je.$$.fragment,e),w(he.$$.fragment,e),w(we.$$.fragment,e),w(je.$$.fragment,e),w(Te.$$.fragment,e),w(be.$$.fragment,e),w(_e.$$.fragment,e),Nl=!1},d(e){l(G),e&&l(Os),e&&l(N),j(ce),e&&l(Ls),e&&l(S),e&&l(Ks),e&&l(C),e&&l(el),e&&l(b),e&&l(sl),e&&l(m),e&&l(ll),j(de,e),e&&l(al),e&&l(ve),e&&l(tl),e&&l(X),e&&l(il),e&&l(v),e&&l(ol),e&&l(R),e&&l(nl),e&&l(g),e&&l(rl),e&&l(T),e&&l(pl),e&&l(H),e&&l(cl),j(ue,e),e&&l(dl),e&&l(_),e&&l(ul),j(me,e),e&&l(ml),e&&l(ge),e&&l(Ml),e&&l(V),j(Me),e&&l(fl),e&&l(B),e&&l(yl),j(fe,e),e&&l(Jl),e&&l(F),e&&l(hl),j(ye,e),e&&l(wl),e&&l(W),j(Je),e&&l(jl),e&&l(x),e&&l(Tl),j(he,e),e&&l(bl),e&&l(O),e&&l(_l),j(we,e),e&&l(Ul),e&&l(L),e&&l(El),j(je,e),e&&l(Il),e&&l(k),e&&l(vl),j(Te,e),e&&l(gl),e&&l(M),e&&l(Cl),j(be,e),e&&l(Bl),e&&l($),j(_e),e&&l(kl),e&&l(z),e&&l(zl),e&&l(ee),e&&l(Zl),e&&l(U),e&&l(ql),e&&l(Z),e&&l(Al),e&&l(se),e&&l(Gl),e&&l(E)}}}const cn={local:"come-creare-una-pipeline-personalizzata",sections:[{local:"aggiungilo-alla-lista-dei-tasks-supportati",title:"Aggiungilo alla lista dei tasks supportati"},{local:"condividi-la-tua-pipeline-sullhub",title:"Condividi la tua pipeline sull'Hub"},{local:"aggiungere-la-pipeline-a-transformers",title:"Aggiungere la pipeline a Transformers"}],title:"Come creare una pipeline personalizzata?"};function dn(Gi){return rn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class fn extends ln{constructor(G){super();an(this,G,dn,pn,tn,{})}}export{fn as default,cn as metadata};
