import{S as tr,i as nr,s as rr,e as t,k as c,w as f,t as a,M as pr,c as n,d as l,m as d,a as r,x as j,h as o,b as u,G as s,g as i,y as J,L as ir,q as w,o as b,B as h,v as cr}from"../chunks/vendor-hf-doc-builder.js";import{I as Dl}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as R}from"../chunks/CodeBlock-hf-doc-builder.js";function dr(Nt){let V,Os,N,H,We,ce,Ol,ze,Ll,Ls,P,Kl,ve,ea,sa,Ks,B,la,Re,aa,oa,Ve,ta,na,el,_,ra,Ne,pa,ia,Ge,ca,da,Xe,ua,ma,sl,m,Ma,Ye,ya,fa,$e,ja,Ja,He,wa,ba,Pe,ha,_a,Fe,Ua,Ea,ll,de,al,Ie,Ta,ol,G,Se,va,Ia,Qe,Ca,Ba,tl,I,xe,qa,ka,De,Za,Aa,Oe,ga,Wa,nl,q,za,Le,Ra,Va,Ke,Na,Ga,rl,C,es,Xa,Ya,ss,$a,Ha,ls,Pa,Fa,pl,M,Sa,as,Qa,xa,os,Da,Oa,ts,La,Ka,ns,eo,so,il,F,lo,rs,ao,oo,cl,ue,dl,U,to,ps,no,ro,is,po,io,cs,co,uo,ul,me,ml,Ce,mo,Ml,X,S,ds,Me,Mo,us,yo,yl,k,fo,ms,jo,Jo,Ms,wo,bo,fl,ye,jl,Q,ho,ys,_o,Uo,Jl,fe,wl,Y,x,fs,je,Eo,js,To,bl,D,vo,Js,Io,Co,hl,Je,_l,O,Bo,ws,qo,ko,Ul,we,El,L,Zo,bs,Ao,go,Tl,be,vl,Z,Wo,hs,zo,Ro,_s,Vo,No,Il,he,Cl,y,Go,Us,Xo,Yo,Es,$o,Ho,Ts,Po,Fo,vs,So,Qo,Bl,_e,ql,$,K,Is,Ue,xo,Cs,Do,kl,A,Oo,Bs,Lo,Ko,qs,et,st,Zl,ee,lt,ks,at,ot,Al,E,tt,Zs,nt,rt,As,pt,it,gs,ct,dt,gl,g,ut,Ws,mt,Mt,zs,yt,ft,Wl,se,jt,Rs,Jt,wt,zl,T,le,Vs,bt,ht,Ns,_t,Ut,Et,ae,Gs,Tt,vt,Xs,It,Ct,Bt,oe,Ys,qt,kt,$s,Zt,At,gt,te,Hs,Wt,zt,Ps,Rt,Vt,Rl;return ce=new Dl({}),de=new R({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFBpcGVsaW5lJTBBJTBBJTBBY2xhc3MlMjBNeVBpcGVsaW5lKFBpcGVsaW5lKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9zYW5pdGl6ZV9wYXJhbWV0ZXJzKHNlbGYlMkMlMjAqKmt3YXJncyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzX2t3YXJncyUyMCUzRCUyMCU3QiU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwJTIybWF5YmVfYXJnJTIyJTIwaW4lMjBrd2FyZ3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzX2t3YXJncyU1QiUyMm1heWJlX2FyZyUyMiU1RCUyMCUzRCUyMGt3YXJncyU1QiUyMm1heWJlX2FyZyUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHByZXByb2Nlc3Nfa3dhcmdzJTJDJTIwJTdCJTdEJTJDJTIwJTdCJTdEJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcHJlcHJvY2VzcyhzZWxmJTJDJTIwaW5wdXRzJTJDJTIwbWF5YmVfYXJnJTNEMiklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbF9pbnB1dCUyMCUzRCUyMFRlbnNvcihpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIybW9kZWxfaW5wdXQlMjIlM0ElMjBtb2RlbF9pbnB1dCU3RCUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9mb3J3YXJkKHNlbGYlMkMlMjBtb2RlbF9pbnB1dHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwbW9kZWxfaW5wdXRzJTIwJTNEJTNEJTIwJTdCJTIybW9kZWxfaW5wdXQlMjIlM0ElMjBtb2RlbF9pbnB1dCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBzZWxmLm1vZGVsKCoqbW9kZWxfaW5wdXRzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFF1aXolQzMlQTElMjAlN0IlMjJsb2dpdHMlMjIlM0ElMjBUZW5zb3IoLi4uKSU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMG91dHB1dHMlMEElMEElMjAlMjAlMjAlMjBkZWYlMjBwb3N0cHJvY2VzcyhzZWxmJTJDJTIwbW9kZWxfb3V0cHV0cyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZXN0X2NsYXNzJTIwJTNEJTIwbW9kZWxfb3V0cHV0cyU1QiUyMmxvZ2l0cyUyMiU1RC5zb2Z0bWF4KC0xKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMGJlc3RfY2xhc3M=",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"># Quiz\xE1 {&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 R({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 R({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3Moc2VsZiUyQyUyMG1vZGVsX291dHB1dHMlMkMlMjB0b3BfayUzRDUpJTNBJTBBJTIwJTIwJTIwJTIwYmVzdF9jbGFzcyUyMCUzRCUyMG1vZGVsX291dHB1dHMlNUIlMjJsb2dpdHMlMjIlNUQuc29mdG1heCgtMSklMEElMjAlMjAlMjAlMjAlMjMlMjBBJUMzJUIxYWRlJTIwbGElMjBsJUMzJUIzZ2ljYSUyMHBhcmElMjBtYW5lamFyJTIwZWwlMjB0b3BfayUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGJlc3RfY2xhc3MlMEElMEElMEFkZWYlMjBfc2FuaXRpemVfcGFyYW1ldGVycyhzZWxmJTJDJTIwKiprd2FyZ3MpJTNBJTBBJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc19rd2FyZ3MlMjAlM0QlMjAlN0IlN0QlMEElMjAlMjAlMjAlMjBpZiUyMCUyMm1heWJlX2FyZyUyMiUyMGluJTIwa3dhcmdzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc19rd2FyZ3MlNUIlMjJtYXliZV9hcmclMjIlNUQlMjAlM0QlMjBrd2FyZ3MlNUIlMjJtYXliZV9hcmclMjIlNUQlMEElMEElMjAlMjAlMjAlMjBwb3N0cHJvY2Vzc19rd2FyZ3MlMjAlM0QlMjAlN0IlN0QlMEElMjAlMjAlMjAlMjBpZiUyMCUyMnRvcF9rJTIyJTIwaW4lMjBrd2FyZ3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwb3N0cHJvY2Vzc19rd2FyZ3MlNUIlMjJ0b3BfayUyMiU1RCUyMCUzRCUyMGt3YXJncyU1QiUyMnRvcF9rJTIyJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwcHJlcHJvY2Vzc19rd2FyZ3MlMkMlMjAlN0IlN0QlMkMlMjBwb3N0cHJvY2Vzc19rd2FyZ3M=",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"># A\xF1ade la l\xF3gica para manejar el 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 Dl({}),ye=new R({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,
)`}}),fe=new R({props:{code:"UElQRUxJTkVfUkVHSVNUUlkucmVnaXN0ZXJfcGlwZWxpbmUoJTBBJTIwJTIwJTIwJTIwJTIybmV3LXRhc2slMjIlMkMlMEElMjAlMjAlMjAlMjBwaXBlbGluZV9jbGFzcyUzRE15UGlwZWxpbmUlMkMlMEElMjAlMjAlMjAlMjBwdF9tb2RlbCUzREF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMEElMjAlMjAlMjAlMjBkZWZhdWx0JTNEJTdCJTIycHQlMjIlM0ElMjAoJTIydXNlciUyRmF3ZXNvbWVfbW9kZWwlMjIlMkMlMjAlMjJhYmNkZWYlMjIpJTdEJTJDJTBBJTIwJTIwJTIwJTIwdHlwZSUzRCUyMnRleHQlMjIlMkMlMjAlMjAlMjMlMjB0aXBvJTIwZGUlMjBkYXRvcyUyMHF1ZSUyMG1hbmVqYSUzQSUyMHRleHRvJTJDJTIwYXVkaW8lMkMlMjBpbWFnZW4lMkMlMjBtdWx0aS1tb2RhbGlkYWQlMEEp",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"># tipo de datos que maneja: texto, audio, imagen, multi-modalidad</span>
)`}}),je=new Dl({}),Je=new R({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 R({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,
)`}}),be=new R({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>)`}}),he=new R({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()`}}),_e=new R({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>)`}}),Ue=new Dl({}),{c(){V=t("meta"),Os=c(),N=t("h1"),H=t("a"),We=t("span"),f(ce.$$.fragment),Ol=c(),ze=t("span"),Ll=a("\xBFC\xF3mo puedo crear un pipeline personalizado?"),Ls=c(),P=t("p"),Kl=a("En esta gu\xEDa, veremos c\xF3mo crear un pipeline personalizado y c\xF3mo compartirlo en el "),ve=t("a"),ea=a("Hub"),sa=a(` o a\xF1adirlo
a la biblioteca \u{1F917} Transformers.`),Ks=c(),B=t("p"),la=a(`En primer lugar, debes decidir las entradas que tu pipeline podr\xE1 recibir. Pueden ser strings, bytes,
diccionarios o lo que te parezca que vaya a ser la entrada m\xE1s apropiada. Intenta mantener estas entradas en un
formato que sea tan Python puro como sea posible, puesto que esto facilita la compatibilidad (incluso con otros
lenguajes de programaci\xF3n por medio de JSON). Estos ser\xE1n los `),Re=t("code"),aa=a("inputs"),oa=a(" (entradas) del pipeline ("),Ve=t("code"),ta=a("preprocess"),na=a(")."),el=c(),_=t("p"),ra=a("Ahora debes definir los "),Ne=t("code"),pa=a("outputs"),ia=a(" (salidas). Al igual que con los "),Ge=t("code"),ca=a("inputs"),da=a(`, entre m\xE1s simple el formato, mejor.
Estas ser\xE1n las salidas del m\xE9todo `),Xe=t("code"),ua=a("postprocess"),ma=a(" (posprocesamiento)."),sl=c(),m=t("p"),Ma=a("Empieza heredando la clase base "),Ye=t("code"),ya=a("Pipeline"),fa=a(" con los 4 m\xE9todos que debemos implementar: "),$e=t("code"),ja=a("preprocess"),Ja=a(` (preprocesamiento),
`),He=t("code"),wa=a("_forward"),ba=a(" (ejecuci\xF3n), "),Pe=t("code"),ha=a("postprocess"),_a=a(" (posprocesamiento) y "),Fe=t("code"),Ua=a("_sanitize_parameters"),Ea=a(" (verificar par\xE1metros)."),ll=c(),f(de.$$.fragment),al=c(),Ie=t("p"),Ta=a(`La estructura de este desglose es as\xED para garantizar una compatibilidad m\xE1s o menos transparente con el uso de
CPU/GPU y el pre/posprocesamiento en CPU en varios hilos.`),ol=c(),G=t("p"),Se=t("code"),va=a("preprocess"),Ia=a(` tomar\xE1 las entradas definidas originalmente y las convertir\xE1 en algo que se le pueda pasar al modelo.
Podr\xEDa contener m\xE1s informaci\xF3n y a menudo es un objeto `),Qe=t("code"),Ca=a("Dict"),Ba=a(" (diccionario)."),tl=c(),I=t("p"),xe=t("code"),qa=a("_forward"),ka=a(" contiene los detalles de la implementaci\xF3n y no deber\xEDa ser invocado de forma directa. "),De=t("code"),Za=a("forward"),Aa=a(` es el
m\xE9todo preferido a utilizar pues contiene verificaciones para asegurar que todo funcione en el dispositivo correcto.
Cualquier cosa que est\xE9 relacionada con un modelo real deber\xEDa ir en el m\xE9todo `),Oe=t("code"),ga=a("_forward"),Wa=a(`, todo lo dem\xE1s va en
los m\xE9todos de preprocesamiento y posprocesamiento.`),nl=c(),q=t("p"),za=a("Los m\xE9todos "),Le=t("code"),Ra=a("postprocess"),Va=a(" reciben la salida "),Ke=t("code"),Na=a("_forward"),Ga=a(` y la convierten en la salida final que decidimos
anteriormente.`),rl=c(),C=t("p"),es=t("code"),Xa=a("_sanitize_parameters"),Ya=a(` existe para permitir a los usuarios pasar cualesquiera par\xE1metros cuando lo deseen, ya
sea al momento de inicializar el pipeline `),ss=t("code"),$a=a("pipeline(...., maybe_arg=4)"),Ha=a(` o al momento de invocarlo
`),ls=t("code"),Pa=a("pipe = pipeline(...); output = pipe(...., maybe_arg=4)"),Fa=a("."),pl=c(),M=t("p"),Sa=a("El m\xE9todo "),as=t("code"),Qa=a("_sanitize_parameters"),xa=a(" devuelve 3 diccionarios de kwargs que ser\xE1n pasados directamente a "),os=t("code"),Da=a("preprocess"),Oa=a(`,
`),ts=t("code"),La=a("_forward"),Ka=a(" y "),ns=t("code"),eo=a("postprocess"),so=a(`. No ingreses nada si el caller no se va a invocar con par\xE1metros adicionales.
Esto permite mantener los par\xE1metros por defecto de la definici\xF3n de la funci\xF3n, lo que es m\xE1s \u201Cnatural\u201D.`),il=c(),F=t("p"),lo=a("Un ejemplo cl\xE1sico ser\xEDa un argumento "),rs=t("code"),ao=a("top_k"),oo=a(" en el posprocesamiento de una tarea de clasificaci\xF3n."),cl=c(),f(ue.$$.fragment),dl=c(),U=t("p"),to=a("Para lograrlo, actualizaremos nuestro m\xE9todo "),ps=t("code"),no=a("postprocess"),ro=a(" con un valor por defecto de "),is=t("code"),po=a("5"),io=a(` y  modificaremos
`),cs=t("code"),co=a("_sanitize_parameters"),uo=a(" para permitir este nuevo par\xE1metro."),ul=c(),f(me.$$.fragment),ml=c(),Ce=t("p"),mo=a(`Intenta que las entradas y salidas sean muy simples e, idealmente, que puedan serializarse como JSON, pues esto
hace el uso del pipeline muy sencillo sin que el usuario tenga que preocuparse por conocer nuevos tipos de objetos.
Tambi\xE9n es relativamente com\xFAn tener compatibilidad con muchos tipos diferentes de argumentos por facilidad de uso
(por ejemplo, los archivos de audio pueden ser nombres de archivo, URLs o bytes).`),Ml=c(),X=t("h2"),S=t("a"),ds=t("span"),f(Me.$$.fragment),Mo=c(),us=t("span"),yo=a("A\xF1adirlo a la lista de tareas"),yl=c(),k=t("p"),fo=a("Para registrar tu "),ms=t("code"),jo=a("new-task"),Jo=a(` (nueva tarea) en la lista de tareas, debes a\xF1adirla al
`),Ms=t("code"),wo=a("PIPELINE_REGISTRY"),bo=a(" (registro de pipelines):"),fl=c(),f(ye.$$.fragment),jl=c(),Q=t("p"),ho=a("Puedes especificar un modelo por defecto si lo deseas, en cuyo caso debe venir con una versi\xF3n espec\xEDfica (que puede ser el nombre de un branch o hash de commit, en este caso usamos "),ys=t("code"),_o=a('"abcdef"'),Uo=a("), as\xED como el tipo:"),Jl=c(),f(fe.$$.fragment),wl=c(),Y=t("h2"),x=t("a"),fs=t("span"),f(je.$$.fragment),Eo=c(),js=t("span"),To=a("Comparte tu pipeline en el Hub"),bl=c(),D=t("p"),vo=a(`Para compartir tu pipeline personalizado en el Hub, solo tienes que guardar el c\xF3digo personalizado de tu sub-clase
`),Js=t("code"),Io=a("Pipeline"),Co=a(` en un archivo de Python. Por ejemplo, digamos que queremos usar un pipeline personalizado para la
clasificaci\xF3n de duplas de oraciones de esta forma:`),hl=c(),f(Je.$$.fragment),_l=c(),O=t("p"),Bo=a(`La implementaci\xF3n es independiente del framework y funcionar\xE1 con modelos de PyTorch y TensorFlow. Si guardamos
esto en un archivo llamado `),ws=t("code"),qo=a("pair_classification.py"),ko=a(", podemos importarlo y registrarlo de la siguiente manera:"),Ul=c(),f(we.$$.fragment),El=c(),L=t("p"),Zo=a("Una vez hecho esto, podemos usarlo con un modelo pre-entrenado. Por ejemplo, al modelo "),bs=t("code"),Ao=a("sgugger/finetuned-bert-mrpc"),go=a(`
se le hizo fine-tuning con el dataset MRPC, en el cual se clasifican duplas de oraciones como par\xE1frasis o no.`),Tl=c(),f(be.$$.fragment),vl=c(),Z=t("p"),Wo=a("Ahora podemos compartirlo en el Hub usando el m\xE9todo "),hs=t("code"),zo=a("save_pretrained"),Ro=a(" (guardar pre-entrenado) en un "),_s=t("code"),Vo=a("Repository"),No=a(":"),Il=c(),f(he.$$.fragment),Cl=c(),y=t("p"),Go=a("Esto copiar\xE1 el archivo donde definiste "),Us=t("code"),Xo=a("PairClassificationPipeline"),Yo=a(" dentro de la carpeta "),Es=t("code"),$o=a('"test-dynamic-pipeline"'),Ho=a(`,
y adem\xE1s guardar\xE1 el modelo y el tokenizer del pipeline, antes de enviar todo al repositorio
`),Ts=t("code"),Po=a("{your_username}/test-dynamic-pipeline"),Fo=a(`. Despu\xE9s de esto, cualquier persona puede usarlo siempre que usen la opci\xF3n
`),vs=t("code"),So=a("trust_remote_code=True"),Qo=a(" (confiar en c\xF3digo remoto):"),Bl=c(),f(_e.$$.fragment),ql=c(),$=t("h2"),K=t("a"),Is=t("span"),f(Ue.$$.fragment),xo=c(),Cs=t("span"),Do=a("A\xF1adir el pipeline a \u{1F917} Transformers"),kl=c(),A=t("p"),Oo=a(`Si quieres contribuir tu pipeline a la biblioteca \u{1F917} Transformers, tendr\xE1s que a\xF1adirlo a un nuevo m\xF3dulo en el
sub-m\xF3dulo `),Bs=t("code"),Lo=a("pipelines"),Ko=a(` con el c\xF3digo de tu pipeline. Luego, debes a\xF1adirlo a la lista de tareas definidas en
`),qs=t("code"),et=a("pipelines/__init__.py"),st=a("."),Zl=c(),ee=t("p"),lt=a("A continuaci\xF3n tienes que a\xF1adir las pruebas. Crea un nuevo archivo llamado "),ks=t("code"),at=a("tests/test_pipelines_MY_PIPELINE.py"),ot=a(`
bas\xE1ndote en las pruebas existentes.`),Al=c(),E=t("p"),tt=a("La funci\xF3n "),Zs=t("code"),nt=a("run_pipeline_test"),rt=a(` ser\xE1 muy gen\xE9rica y se correr\xE1 sobre modelos peque\xF1os escogidos al azar sobre todas las
arquitecturas posibles definidas en `),As=t("code"),pt=a("model_mapping"),it=a(" y "),gs=t("code"),ct=a("tf_model_mapping"),dt=a("."),gl=c(),g=t("p"),ut=a(`Esto es muy importante para probar compatibilidades a futuro, lo que significa que si alguien a\xF1ade un nuevo modelo
para `),Ws=t("code"),mt=a("XXXForQuestionAnswering"),Mt=a(` entonces el pipeline intentar\xE1 ejecutarse con ese modelo. Ya que los modelos son aleatorios,
es imposible verificar los valores como tales, y es por eso que hay un helper `),zs=t("code"),yt=a("ANY"),ft=a(` que simplemente intentar\xE1 que la
salida tenga el mismo tipo que la salida esperada del pipeline.`),Wl=c(),se=t("p"),jt=a("Tambi\xE9n "),Rs=t("em"),Jt=a("debes"),wt=a(" implementar 2 (preferiblemente 4) pruebas:"),zl=c(),T=t("ul"),le=t("li"),Vs=t("code"),bt=a("test_small_model_pt"),ht=a(` : Define un (1) modelo peque\xF1o para este pipeline (no importa si los resultados no tienen sentido)
y prueba las salidas del pipeline. Los resultados deber\xEDan ser los mismos que en `),Ns=t("code"),_t=a("test_small_model_tf"),Ut=a("."),Et=c(),ae=t("li"),Gs=t("code"),Tt=a("test_small_model_tf"),vt=a(` : Define un (1) modelo peque\xF1o para este pipeline (no importa si los resultados no tienen sentido)
y prueba las salidas del pipeline. Los resultados deber\xEDan ser los mismos que en `),Xs=t("code"),It=a("test_small_model_pt"),Ct=a("."),Bt=c(),oe=t("li"),Ys=t("code"),qt=a("test_large_model_pt"),kt=a(" ("),$s=t("code"),Zt=a("optional"),At=a(`): Prueba el pipeline en una tarea real en la que los resultados deben tener sentido.
Estas pruebas son lentas y deben marcarse como tales. El objetivo de esto es ejemplificar el pipeline y asegurarse de que
no haya divergencias en versiones futuras.`),gt=c(),te=t("li"),Hs=t("code"),Wt=a("test_large_model_tf"),zt=a(" ("),Ps=t("code"),Rt=a("optional"),Vt=a(`): Prueba el pipeline en una tarea real en la que los resultados deben tener sentido.
Estas pruebas son lentas y deben marcarse como tales. El objetivo de esto es ejemplificar el pipeline y asegurarse de que
no haya divergencias en versiones futuras.`),this.h()},l(e){const p=pr('[data-svelte="svelte-1phssyn"]',document.head);V=n(p,"META",{name:!0,content:!0}),p.forEach(l),Os=d(e),N=n(e,"H1",{class:!0});var Vl=r(N);H=n(Vl,"A",{id:!0,class:!0,href:!0});var Gt=r(H);We=n(Gt,"SPAN",{});var Xt=r(We);j(ce.$$.fragment,Xt),Xt.forEach(l),Gt.forEach(l),Ol=d(Vl),ze=n(Vl,"SPAN",{});var Yt=r(ze);Ll=o(Yt,"\xBFC\xF3mo puedo crear un pipeline personalizado?"),Yt.forEach(l),Vl.forEach(l),Ls=d(e),P=n(e,"P",{});var Nl=r(P);Kl=o(Nl,"En esta gu\xEDa, veremos c\xF3mo crear un pipeline personalizado y c\xF3mo compartirlo en el "),ve=n(Nl,"A",{href:!0});var $t=r(ve);ea=o($t,"Hub"),$t.forEach(l),sa=o(Nl,` o a\xF1adirlo
a la biblioteca \u{1F917} Transformers.`),Nl.forEach(l),Ks=d(e),B=n(e,"P",{});var Be=r(B);la=o(Be,`En primer lugar, debes decidir las entradas que tu pipeline podr\xE1 recibir. Pueden ser strings, bytes,
diccionarios o lo que te parezca que vaya a ser la entrada m\xE1s apropiada. Intenta mantener estas entradas en un
formato que sea tan Python puro como sea posible, puesto que esto facilita la compatibilidad (incluso con otros
lenguajes de programaci\xF3n por medio de JSON). Estos ser\xE1n los `),Re=n(Be,"CODE",{});var Ht=r(Re);aa=o(Ht,"inputs"),Ht.forEach(l),oa=o(Be," (entradas) del pipeline ("),Ve=n(Be,"CODE",{});var Pt=r(Ve);ta=o(Pt,"preprocess"),Pt.forEach(l),na=o(Be,")."),Be.forEach(l),el=d(e),_=n(e,"P",{});var ne=r(_);ra=o(ne,"Ahora debes definir los "),Ne=n(ne,"CODE",{});var Ft=r(Ne);pa=o(Ft,"outputs"),Ft.forEach(l),ia=o(ne," (salidas). Al igual que con los "),Ge=n(ne,"CODE",{});var St=r(Ge);ca=o(St,"inputs"),St.forEach(l),da=o(ne,`, entre m\xE1s simple el formato, mejor.
Estas ser\xE1n las salidas del m\xE9todo `),Xe=n(ne,"CODE",{});var Qt=r(Xe);ua=o(Qt,"postprocess"),Qt.forEach(l),ma=o(ne," (posprocesamiento)."),ne.forEach(l),sl=d(e),m=n(e,"P",{});var v=r(m);Ma=o(v,"Empieza heredando la clase base "),Ye=n(v,"CODE",{});var xt=r(Ye);ya=o(xt,"Pipeline"),xt.forEach(l),fa=o(v," con los 4 m\xE9todos que debemos implementar: "),$e=n(v,"CODE",{});var Dt=r($e);ja=o(Dt,"preprocess"),Dt.forEach(l),Ja=o(v,` (preprocesamiento),
`),He=n(v,"CODE",{});var Ot=r(He);wa=o(Ot,"_forward"),Ot.forEach(l),ba=o(v," (ejecuci\xF3n), "),Pe=n(v,"CODE",{});var Lt=r(Pe);ha=o(Lt,"postprocess"),Lt.forEach(l),_a=o(v," (posprocesamiento) y "),Fe=n(v,"CODE",{});var Kt=r(Fe);Ua=o(Kt,"_sanitize_parameters"),Kt.forEach(l),Ea=o(v," (verificar par\xE1metros)."),v.forEach(l),ll=d(e),j(de.$$.fragment,e),al=d(e),Ie=n(e,"P",{});var en=r(Ie);Ta=o(en,`La estructura de este desglose es as\xED para garantizar una compatibilidad m\xE1s o menos transparente con el uso de
CPU/GPU y el pre/posprocesamiento en CPU en varios hilos.`),en.forEach(l),ol=d(e),G=n(e,"P",{});var Fs=r(G);Se=n(Fs,"CODE",{});var sn=r(Se);va=o(sn,"preprocess"),sn.forEach(l),Ia=o(Fs,` tomar\xE1 las entradas definidas originalmente y las convertir\xE1 en algo que se le pueda pasar al modelo.
Podr\xEDa contener m\xE1s informaci\xF3n y a menudo es un objeto `),Qe=n(Fs,"CODE",{});var ln=r(Qe);Ca=o(ln,"Dict"),ln.forEach(l),Ba=o(Fs," (diccionario)."),Fs.forEach(l),tl=d(e),I=n(e,"P",{});var Ee=r(I);xe=n(Ee,"CODE",{});var an=r(xe);qa=o(an,"_forward"),an.forEach(l),ka=o(Ee," contiene los detalles de la implementaci\xF3n y no deber\xEDa ser invocado de forma directa. "),De=n(Ee,"CODE",{});var on=r(De);Za=o(on,"forward"),on.forEach(l),Aa=o(Ee,` es el
m\xE9todo preferido a utilizar pues contiene verificaciones para asegurar que todo funcione en el dispositivo correcto.
Cualquier cosa que est\xE9 relacionada con un modelo real deber\xEDa ir en el m\xE9todo `),Oe=n(Ee,"CODE",{});var tn=r(Oe);ga=o(tn,"_forward"),tn.forEach(l),Wa=o(Ee,`, todo lo dem\xE1s va en
los m\xE9todos de preprocesamiento y posprocesamiento.`),Ee.forEach(l),nl=d(e),q=n(e,"P",{});var qe=r(q);za=o(qe,"Los m\xE9todos "),Le=n(qe,"CODE",{});var nn=r(Le);Ra=o(nn,"postprocess"),nn.forEach(l),Va=o(qe," reciben la salida "),Ke=n(qe,"CODE",{});var rn=r(Ke);Na=o(rn,"_forward"),rn.forEach(l),Ga=o(qe,` y la convierten en la salida final que decidimos
anteriormente.`),qe.forEach(l),rl=d(e),C=n(e,"P",{});var Te=r(C);es=n(Te,"CODE",{});var pn=r(es);Xa=o(pn,"_sanitize_parameters"),pn.forEach(l),Ya=o(Te,` existe para permitir a los usuarios pasar cualesquiera par\xE1metros cuando lo deseen, ya
sea al momento de inicializar el pipeline `),ss=n(Te,"CODE",{});var cn=r(ss);$a=o(cn,"pipeline(...., maybe_arg=4)"),cn.forEach(l),Ha=o(Te,` o al momento de invocarlo
`),ls=n(Te,"CODE",{});var dn=r(ls);Pa=o(dn,"pipe = pipeline(...); output = pipe(...., maybe_arg=4)"),dn.forEach(l),Fa=o(Te,"."),Te.forEach(l),pl=d(e),M=n(e,"P",{});var W=r(M);Sa=o(W,"El m\xE9todo "),as=n(W,"CODE",{});var un=r(as);Qa=o(un,"_sanitize_parameters"),un.forEach(l),xa=o(W," devuelve 3 diccionarios de kwargs que ser\xE1n pasados directamente a "),os=n(W,"CODE",{});var mn=r(os);Da=o(mn,"preprocess"),mn.forEach(l),Oa=o(W,`,
`),ts=n(W,"CODE",{});var Mn=r(ts);La=o(Mn,"_forward"),Mn.forEach(l),Ka=o(W," y "),ns=n(W,"CODE",{});var yn=r(ns);eo=o(yn,"postprocess"),yn.forEach(l),so=o(W,`. No ingreses nada si el caller no se va a invocar con par\xE1metros adicionales.
Esto permite mantener los par\xE1metros por defecto de la definici\xF3n de la funci\xF3n, lo que es m\xE1s \u201Cnatural\u201D.`),W.forEach(l),il=d(e),F=n(e,"P",{});var Gl=r(F);lo=o(Gl,"Un ejemplo cl\xE1sico ser\xEDa un argumento "),rs=n(Gl,"CODE",{});var fn=r(rs);ao=o(fn,"top_k"),fn.forEach(l),oo=o(Gl," en el posprocesamiento de una tarea de clasificaci\xF3n."),Gl.forEach(l),cl=d(e),j(ue.$$.fragment,e),dl=d(e),U=n(e,"P",{});var re=r(U);to=o(re,"Para lograrlo, actualizaremos nuestro m\xE9todo "),ps=n(re,"CODE",{});var jn=r(ps);no=o(jn,"postprocess"),jn.forEach(l),ro=o(re," con un valor por defecto de "),is=n(re,"CODE",{});var Jn=r(is);po=o(Jn,"5"),Jn.forEach(l),io=o(re,` y  modificaremos
`),cs=n(re,"CODE",{});var wn=r(cs);co=o(wn,"_sanitize_parameters"),wn.forEach(l),uo=o(re," para permitir este nuevo par\xE1metro."),re.forEach(l),ul=d(e),j(me.$$.fragment,e),ml=d(e),Ce=n(e,"P",{});var bn=r(Ce);mo=o(bn,`Intenta que las entradas y salidas sean muy simples e, idealmente, que puedan serializarse como JSON, pues esto
hace el uso del pipeline muy sencillo sin que el usuario tenga que preocuparse por conocer nuevos tipos de objetos.
Tambi\xE9n es relativamente com\xFAn tener compatibilidad con muchos tipos diferentes de argumentos por facilidad de uso
(por ejemplo, los archivos de audio pueden ser nombres de archivo, URLs o bytes).`),bn.forEach(l),Ml=d(e),X=n(e,"H2",{class:!0});var Xl=r(X);S=n(Xl,"A",{id:!0,class:!0,href:!0});var hn=r(S);ds=n(hn,"SPAN",{});var _n=r(ds);j(Me.$$.fragment,_n),_n.forEach(l),hn.forEach(l),Mo=d(Xl),us=n(Xl,"SPAN",{});var Un=r(us);yo=o(Un,"A\xF1adirlo a la lista de tareas"),Un.forEach(l),Xl.forEach(l),yl=d(e),k=n(e,"P",{});var ke=r(k);fo=o(ke,"Para registrar tu "),ms=n(ke,"CODE",{});var En=r(ms);jo=o(En,"new-task"),En.forEach(l),Jo=o(ke,` (nueva tarea) en la lista de tareas, debes a\xF1adirla al
`),Ms=n(ke,"CODE",{});var Tn=r(Ms);wo=o(Tn,"PIPELINE_REGISTRY"),Tn.forEach(l),bo=o(ke," (registro de pipelines):"),ke.forEach(l),fl=d(e),j(ye.$$.fragment,e),jl=d(e),Q=n(e,"P",{});var Yl=r(Q);ho=o(Yl,"Puedes especificar un modelo por defecto si lo deseas, en cuyo caso debe venir con una versi\xF3n espec\xEDfica (que puede ser el nombre de un branch o hash de commit, en este caso usamos "),ys=n(Yl,"CODE",{});var vn=r(ys);_o=o(vn,'"abcdef"'),vn.forEach(l),Uo=o(Yl,"), as\xED como el tipo:"),Yl.forEach(l),Jl=d(e),j(fe.$$.fragment,e),wl=d(e),Y=n(e,"H2",{class:!0});var $l=r(Y);x=n($l,"A",{id:!0,class:!0,href:!0});var In=r(x);fs=n(In,"SPAN",{});var Cn=r(fs);j(je.$$.fragment,Cn),Cn.forEach(l),In.forEach(l),Eo=d($l),js=n($l,"SPAN",{});var Bn=r(js);To=o(Bn,"Comparte tu pipeline en el Hub"),Bn.forEach(l),$l.forEach(l),bl=d(e),D=n(e,"P",{});var Hl=r(D);vo=o(Hl,`Para compartir tu pipeline personalizado en el Hub, solo tienes que guardar el c\xF3digo personalizado de tu sub-clase
`),Js=n(Hl,"CODE",{});var qn=r(Js);Io=o(qn,"Pipeline"),qn.forEach(l),Co=o(Hl,` en un archivo de Python. Por ejemplo, digamos que queremos usar un pipeline personalizado para la
clasificaci\xF3n de duplas de oraciones de esta forma:`),Hl.forEach(l),hl=d(e),j(Je.$$.fragment,e),_l=d(e),O=n(e,"P",{});var Pl=r(O);Bo=o(Pl,`La implementaci\xF3n es independiente del framework y funcionar\xE1 con modelos de PyTorch y TensorFlow. Si guardamos
esto en un archivo llamado `),ws=n(Pl,"CODE",{});var kn=r(ws);qo=o(kn,"pair_classification.py"),kn.forEach(l),ko=o(Pl,", podemos importarlo y registrarlo de la siguiente manera:"),Pl.forEach(l),Ul=d(e),j(we.$$.fragment,e),El=d(e),L=n(e,"P",{});var Fl=r(L);Zo=o(Fl,"Una vez hecho esto, podemos usarlo con un modelo pre-entrenado. Por ejemplo, al modelo "),bs=n(Fl,"CODE",{});var Zn=r(bs);Ao=o(Zn,"sgugger/finetuned-bert-mrpc"),Zn.forEach(l),go=o(Fl,`
se le hizo fine-tuning con el dataset MRPC, en el cual se clasifican duplas de oraciones como par\xE1frasis o no.`),Fl.forEach(l),Tl=d(e),j(be.$$.fragment,e),vl=d(e),Z=n(e,"P",{});var Ze=r(Z);Wo=o(Ze,"Ahora podemos compartirlo en el Hub usando el m\xE9todo "),hs=n(Ze,"CODE",{});var An=r(hs);zo=o(An,"save_pretrained"),An.forEach(l),Ro=o(Ze," (guardar pre-entrenado) en un "),_s=n(Ze,"CODE",{});var gn=r(_s);Vo=o(gn,"Repository"),gn.forEach(l),No=o(Ze,":"),Ze.forEach(l),Il=d(e),j(he.$$.fragment,e),Cl=d(e),y=n(e,"P",{});var z=r(y);Go=o(z,"Esto copiar\xE1 el archivo donde definiste "),Us=n(z,"CODE",{});var Wn=r(Us);Xo=o(Wn,"PairClassificationPipeline"),Wn.forEach(l),Yo=o(z," dentro de la carpeta "),Es=n(z,"CODE",{});var zn=r(Es);$o=o(zn,'"test-dynamic-pipeline"'),zn.forEach(l),Ho=o(z,`,
y adem\xE1s guardar\xE1 el modelo y el tokenizer del pipeline, antes de enviar todo al repositorio
`),Ts=n(z,"CODE",{});var Rn=r(Ts);Po=o(Rn,"{your_username}/test-dynamic-pipeline"),Rn.forEach(l),Fo=o(z,`. Despu\xE9s de esto, cualquier persona puede usarlo siempre que usen la opci\xF3n
`),vs=n(z,"CODE",{});var Vn=r(vs);So=o(Vn,"trust_remote_code=True"),Vn.forEach(l),Qo=o(z," (confiar en c\xF3digo remoto):"),z.forEach(l),Bl=d(e),j(_e.$$.fragment,e),ql=d(e),$=n(e,"H2",{class:!0});var Sl=r($);K=n(Sl,"A",{id:!0,class:!0,href:!0});var Nn=r(K);Is=n(Nn,"SPAN",{});var Gn=r(Is);j(Ue.$$.fragment,Gn),Gn.forEach(l),Nn.forEach(l),xo=d(Sl),Cs=n(Sl,"SPAN",{});var Xn=r(Cs);Do=o(Xn,"A\xF1adir el pipeline a \u{1F917} Transformers"),Xn.forEach(l),Sl.forEach(l),kl=d(e),A=n(e,"P",{});var Ae=r(A);Oo=o(Ae,`Si quieres contribuir tu pipeline a la biblioteca \u{1F917} Transformers, tendr\xE1s que a\xF1adirlo a un nuevo m\xF3dulo en el
sub-m\xF3dulo `),Bs=n(Ae,"CODE",{});var Yn=r(Bs);Lo=o(Yn,"pipelines"),Yn.forEach(l),Ko=o(Ae,` con el c\xF3digo de tu pipeline. Luego, debes a\xF1adirlo a la lista de tareas definidas en
`),qs=n(Ae,"CODE",{});var $n=r(qs);et=o($n,"pipelines/__init__.py"),$n.forEach(l),st=o(Ae,"."),Ae.forEach(l),Zl=d(e),ee=n(e,"P",{});var Ql=r(ee);lt=o(Ql,"A continuaci\xF3n tienes que a\xF1adir las pruebas. Crea un nuevo archivo llamado "),ks=n(Ql,"CODE",{});var Hn=r(ks);at=o(Hn,"tests/test_pipelines_MY_PIPELINE.py"),Hn.forEach(l),ot=o(Ql,`
bas\xE1ndote en las pruebas existentes.`),Ql.forEach(l),Al=d(e),E=n(e,"P",{});var pe=r(E);tt=o(pe,"La funci\xF3n "),Zs=n(pe,"CODE",{});var Pn=r(Zs);nt=o(Pn,"run_pipeline_test"),Pn.forEach(l),rt=o(pe,` ser\xE1 muy gen\xE9rica y se correr\xE1 sobre modelos peque\xF1os escogidos al azar sobre todas las
arquitecturas posibles definidas en `),As=n(pe,"CODE",{});var Fn=r(As);pt=o(Fn,"model_mapping"),Fn.forEach(l),it=o(pe," y "),gs=n(pe,"CODE",{});var Sn=r(gs);ct=o(Sn,"tf_model_mapping"),Sn.forEach(l),dt=o(pe,"."),pe.forEach(l),gl=d(e),g=n(e,"P",{});var ge=r(g);ut=o(ge,`Esto es muy importante para probar compatibilidades a futuro, lo que significa que si alguien a\xF1ade un nuevo modelo
para `),Ws=n(ge,"CODE",{});var Qn=r(Ws);mt=o(Qn,"XXXForQuestionAnswering"),Qn.forEach(l),Mt=o(ge,` entonces el pipeline intentar\xE1 ejecutarse con ese modelo. Ya que los modelos son aleatorios,
es imposible verificar los valores como tales, y es por eso que hay un helper `),zs=n(ge,"CODE",{});var xn=r(zs);yt=o(xn,"ANY"),xn.forEach(l),ft=o(ge,` que simplemente intentar\xE1 que la
salida tenga el mismo tipo que la salida esperada del pipeline.`),ge.forEach(l),Wl=d(e),se=n(e,"P",{});var xl=r(se);jt=o(xl,"Tambi\xE9n "),Rs=n(xl,"EM",{});var Dn=r(Rs);Jt=o(Dn,"debes"),Dn.forEach(l),wt=o(xl," implementar 2 (preferiblemente 4) pruebas:"),xl.forEach(l),zl=d(e),T=n(e,"UL",{});var ie=r(T);le=n(ie,"LI",{});var Ss=r(le);Vs=n(Ss,"CODE",{});var On=r(Vs);bt=o(On,"test_small_model_pt"),On.forEach(l),ht=o(Ss,` : Define un (1) modelo peque\xF1o para este pipeline (no importa si los resultados no tienen sentido)
y prueba las salidas del pipeline. Los resultados deber\xEDan ser los mismos que en `),Ns=n(Ss,"CODE",{});var Ln=r(Ns);_t=o(Ln,"test_small_model_tf"),Ln.forEach(l),Ut=o(Ss,"."),Ss.forEach(l),Et=d(ie),ae=n(ie,"LI",{});var Qs=r(ae);Gs=n(Qs,"CODE",{});var Kn=r(Gs);Tt=o(Kn,"test_small_model_tf"),Kn.forEach(l),vt=o(Qs,` : Define un (1) modelo peque\xF1o para este pipeline (no importa si los resultados no tienen sentido)
y prueba las salidas del pipeline. Los resultados deber\xEDan ser los mismos que en `),Xs=n(Qs,"CODE",{});var er=r(Xs);It=o(er,"test_small_model_pt"),er.forEach(l),Ct=o(Qs,"."),Qs.forEach(l),Bt=d(ie),oe=n(ie,"LI",{});var xs=r(oe);Ys=n(xs,"CODE",{});var sr=r(Ys);qt=o(sr,"test_large_model_pt"),sr.forEach(l),kt=o(xs," ("),$s=n(xs,"CODE",{});var lr=r($s);Zt=o(lr,"optional"),lr.forEach(l),At=o(xs,`): Prueba el pipeline en una tarea real en la que los resultados deben tener sentido.
Estas pruebas son lentas y deben marcarse como tales. El objetivo de esto es ejemplificar el pipeline y asegurarse de que
no haya divergencias en versiones futuras.`),xs.forEach(l),gt=d(ie),te=n(ie,"LI",{});var Ds=r(te);Hs=n(Ds,"CODE",{});var ar=r(Hs);Wt=o(ar,"test_large_model_tf"),ar.forEach(l),zt=o(Ds," ("),Ps=n(Ds,"CODE",{});var or=r(Ps);Rt=o(or,"optional"),or.forEach(l),Vt=o(Ds,`): Prueba el pipeline en una tarea real en la que los resultados deben tener sentido.
Estas pruebas son lentas y deben marcarse como tales. El objetivo de esto es ejemplificar el pipeline y asegurarse de que
no haya divergencias en versiones futuras.`),Ds.forEach(l),ie.forEach(l),this.h()},h(){u(V,"name","hf:doc:metadata"),u(V,"content",JSON.stringify(ur)),u(H,"id","cmo-puedo-crear-un-pipeline-personalizado"),u(H,"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(H,"href","#cmo-puedo-crear-un-pipeline-personalizado"),u(N,"class","relative group"),u(ve,"href","hf.co/models"),u(S,"id","aadirlo-a-la-lista-de-tareas"),u(S,"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(S,"href","#aadirlo-a-la-lista-de-tareas"),u(X,"class","relative group"),u(x,"id","comparte-tu-pipeline-en-el-hub"),u(x,"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(x,"href","#comparte-tu-pipeline-en-el-hub"),u(Y,"class","relative group"),u(K,"id","aadir-el-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","#aadir-el-pipeline-a-transformers"),u($,"class","relative group")},m(e,p){s(document.head,V),i(e,Os,p),i(e,N,p),s(N,H),s(H,We),J(ce,We,null),s(N,Ol),s(N,ze),s(ze,Ll),i(e,Ls,p),i(e,P,p),s(P,Kl),s(P,ve),s(ve,ea),s(P,sa),i(e,Ks,p),i(e,B,p),s(B,la),s(B,Re),s(Re,aa),s(B,oa),s(B,Ve),s(Ve,ta),s(B,na),i(e,el,p),i(e,_,p),s(_,ra),s(_,Ne),s(Ne,pa),s(_,ia),s(_,Ge),s(Ge,ca),s(_,da),s(_,Xe),s(Xe,ua),s(_,ma),i(e,sl,p),i(e,m,p),s(m,Ma),s(m,Ye),s(Ye,ya),s(m,fa),s(m,$e),s($e,ja),s(m,Ja),s(m,He),s(He,wa),s(m,ba),s(m,Pe),s(Pe,ha),s(m,_a),s(m,Fe),s(Fe,Ua),s(m,Ea),i(e,ll,p),J(de,e,p),i(e,al,p),i(e,Ie,p),s(Ie,Ta),i(e,ol,p),i(e,G,p),s(G,Se),s(Se,va),s(G,Ia),s(G,Qe),s(Qe,Ca),s(G,Ba),i(e,tl,p),i(e,I,p),s(I,xe),s(xe,qa),s(I,ka),s(I,De),s(De,Za),s(I,Aa),s(I,Oe),s(Oe,ga),s(I,Wa),i(e,nl,p),i(e,q,p),s(q,za),s(q,Le),s(Le,Ra),s(q,Va),s(q,Ke),s(Ke,Na),s(q,Ga),i(e,rl,p),i(e,C,p),s(C,es),s(es,Xa),s(C,Ya),s(C,ss),s(ss,$a),s(C,Ha),s(C,ls),s(ls,Pa),s(C,Fa),i(e,pl,p),i(e,M,p),s(M,Sa),s(M,as),s(as,Qa),s(M,xa),s(M,os),s(os,Da),s(M,Oa),s(M,ts),s(ts,La),s(M,Ka),s(M,ns),s(ns,eo),s(M,so),i(e,il,p),i(e,F,p),s(F,lo),s(F,rs),s(rs,ao),s(F,oo),i(e,cl,p),J(ue,e,p),i(e,dl,p),i(e,U,p),s(U,to),s(U,ps),s(ps,no),s(U,ro),s(U,is),s(is,po),s(U,io),s(U,cs),s(cs,co),s(U,uo),i(e,ul,p),J(me,e,p),i(e,ml,p),i(e,Ce,p),s(Ce,mo),i(e,Ml,p),i(e,X,p),s(X,S),s(S,ds),J(Me,ds,null),s(X,Mo),s(X,us),s(us,yo),i(e,yl,p),i(e,k,p),s(k,fo),s(k,ms),s(ms,jo),s(k,Jo),s(k,Ms),s(Ms,wo),s(k,bo),i(e,fl,p),J(ye,e,p),i(e,jl,p),i(e,Q,p),s(Q,ho),s(Q,ys),s(ys,_o),s(Q,Uo),i(e,Jl,p),J(fe,e,p),i(e,wl,p),i(e,Y,p),s(Y,x),s(x,fs),J(je,fs,null),s(Y,Eo),s(Y,js),s(js,To),i(e,bl,p),i(e,D,p),s(D,vo),s(D,Js),s(Js,Io),s(D,Co),i(e,hl,p),J(Je,e,p),i(e,_l,p),i(e,O,p),s(O,Bo),s(O,ws),s(ws,qo),s(O,ko),i(e,Ul,p),J(we,e,p),i(e,El,p),i(e,L,p),s(L,Zo),s(L,bs),s(bs,Ao),s(L,go),i(e,Tl,p),J(be,e,p),i(e,vl,p),i(e,Z,p),s(Z,Wo),s(Z,hs),s(hs,zo),s(Z,Ro),s(Z,_s),s(_s,Vo),s(Z,No),i(e,Il,p),J(he,e,p),i(e,Cl,p),i(e,y,p),s(y,Go),s(y,Us),s(Us,Xo),s(y,Yo),s(y,Es),s(Es,$o),s(y,Ho),s(y,Ts),s(Ts,Po),s(y,Fo),s(y,vs),s(vs,So),s(y,Qo),i(e,Bl,p),J(_e,e,p),i(e,ql,p),i(e,$,p),s($,K),s(K,Is),J(Ue,Is,null),s($,xo),s($,Cs),s(Cs,Do),i(e,kl,p),i(e,A,p),s(A,Oo),s(A,Bs),s(Bs,Lo),s(A,Ko),s(A,qs),s(qs,et),s(A,st),i(e,Zl,p),i(e,ee,p),s(ee,lt),s(ee,ks),s(ks,at),s(ee,ot),i(e,Al,p),i(e,E,p),s(E,tt),s(E,Zs),s(Zs,nt),s(E,rt),s(E,As),s(As,pt),s(E,it),s(E,gs),s(gs,ct),s(E,dt),i(e,gl,p),i(e,g,p),s(g,ut),s(g,Ws),s(Ws,mt),s(g,Mt),s(g,zs),s(zs,yt),s(g,ft),i(e,Wl,p),i(e,se,p),s(se,jt),s(se,Rs),s(Rs,Jt),s(se,wt),i(e,zl,p),i(e,T,p),s(T,le),s(le,Vs),s(Vs,bt),s(le,ht),s(le,Ns),s(Ns,_t),s(le,Ut),s(T,Et),s(T,ae),s(ae,Gs),s(Gs,Tt),s(ae,vt),s(ae,Xs),s(Xs,It),s(ae,Ct),s(T,Bt),s(T,oe),s(oe,Ys),s(Ys,qt),s(oe,kt),s(oe,$s),s($s,Zt),s(oe,At),s(T,gt),s(T,te),s(te,Hs),s(Hs,Wt),s(te,zt),s(te,Ps),s(Ps,Rt),s(te,Vt),Rl=!0},p:ir,i(e){Rl||(w(ce.$$.fragment,e),w(de.$$.fragment,e),w(ue.$$.fragment,e),w(me.$$.fragment,e),w(Me.$$.fragment,e),w(ye.$$.fragment,e),w(fe.$$.fragment,e),w(je.$$.fragment,e),w(Je.$$.fragment,e),w(we.$$.fragment,e),w(be.$$.fragment,e),w(he.$$.fragment,e),w(_e.$$.fragment,e),w(Ue.$$.fragment,e),Rl=!0)},o(e){b(ce.$$.fragment,e),b(de.$$.fragment,e),b(ue.$$.fragment,e),b(me.$$.fragment,e),b(Me.$$.fragment,e),b(ye.$$.fragment,e),b(fe.$$.fragment,e),b(je.$$.fragment,e),b(Je.$$.fragment,e),b(we.$$.fragment,e),b(be.$$.fragment,e),b(he.$$.fragment,e),b(_e.$$.fragment,e),b(Ue.$$.fragment,e),Rl=!1},d(e){l(V),e&&l(Os),e&&l(N),h(ce),e&&l(Ls),e&&l(P),e&&l(Ks),e&&l(B),e&&l(el),e&&l(_),e&&l(sl),e&&l(m),e&&l(ll),h(de,e),e&&l(al),e&&l(Ie),e&&l(ol),e&&l(G),e&&l(tl),e&&l(I),e&&l(nl),e&&l(q),e&&l(rl),e&&l(C),e&&l(pl),e&&l(M),e&&l(il),e&&l(F),e&&l(cl),h(ue,e),e&&l(dl),e&&l(U),e&&l(ul),h(me,e),e&&l(ml),e&&l(Ce),e&&l(Ml),e&&l(X),h(Me),e&&l(yl),e&&l(k),e&&l(fl),h(ye,e),e&&l(jl),e&&l(Q),e&&l(Jl),h(fe,e),e&&l(wl),e&&l(Y),h(je),e&&l(bl),e&&l(D),e&&l(hl),h(Je,e),e&&l(_l),e&&l(O),e&&l(Ul),h(we,e),e&&l(El),e&&l(L),e&&l(Tl),h(be,e),e&&l(vl),e&&l(Z),e&&l(Il),h(he,e),e&&l(Cl),e&&l(y),e&&l(Bl),h(_e,e),e&&l(ql),e&&l($),h(Ue),e&&l(kl),e&&l(A),e&&l(Zl),e&&l(ee),e&&l(Al),e&&l(E),e&&l(gl),e&&l(g),e&&l(Wl),e&&l(se),e&&l(zl),e&&l(T)}}}const ur={local:"cmo-puedo-crear-un-pipeline-personalizado",sections:[{local:"aadirlo-a-la-lista-de-tareas",title:"A\xF1adirlo a la lista de tareas"},{local:"comparte-tu-pipeline-en-el-hub",title:"Comparte tu pipeline en el Hub"},{local:"aadir-el-pipeline-a-transformers",title:"A\xF1adir el pipeline a \u{1F917} Transformers"}],title:"\xBFC\xF3mo puedo crear un pipeline personalizado?"};function mr(Nt){return cr(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class jr extends tr{constructor(V){super();nr(this,V,mr,dr,rr,{})}}export{jr as default,ur as metadata};
