Buckets:

HuggingFaceDocBuilder's picture
download
raw
16.5 kB
import{s as Ge,n as Xe,o as Ie}from"../chunks/scheduler.2b22cead.js";import{S as ke,i as Re,e as o,s as n,c as p,h as Ze,a as r,d as t,b as a,f as Ae,g as i,j as d,k as be,l as Ve,m as s,n as M,t as c,o as y,p as m}from"../chunks/index.1a0e8013.js";import{C as We,H as N}from"../chunks/Heading.073062fc.js";import{C as we}from"../chunks/CodeBlock.c26a707d.js";import{E as xe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.6453e821.js";function Ne(Ue){let u,E,H,S,b,z,U,F,J,Je=`This tutorial shows how to drive BrowserGym through the OpenEnv harness runtime
when a trainer needs to keep token sampling, logprobs, and reward assignment
inside the training loop.`,L,w,he=`<p>Use this pattern for tool-driven BrowserGym rollouts. For a standard
<code>reset()</code> / <code>step()</code> GRPO flow, keep using the Wordle GRPO tutorial.</p>`,Y,h,q,j,je=`<li>A BrowserGym session factory that creates one environment client per rollout.</li> <li>A harness rollout function that TRL can call during training.</li> <li>A model-step wrapper that converts generated BrowserGym action text into
structured tool calls.</li>`,P,T,K,f,Te="Install OpenEnv, TRL, and the BrowserGym environment package:",D,C,O,_,ee,B,fe=`<code>BrowserGymSessionFactory</code> adapts a BrowserGym client into the harness
<code>ResourceSession</code> interface. If your training setup already has an
<code>environment_factory</code>, pass that factory as <code>client_factory</code> so every rollout
gets a fresh environment instance.`,le,v,te,g,Ce=`The session exposes BrowserGym actions such as <code>click</code>, <code>fill</code>, <code>send_keys</code>,
<code>scroll</code>, and <code>noop</code> as MCP-style tools while still executing the corresponding
BrowserGym action strings under the hood.`,se,$,ne,A,_e=`The harness calls a <code>model_step</code> function for each turn. The model step should
use the trainer-owned generation path, then return a <code>ModelStepResult</code> with the
completion text, token ids, logprobs, and exactly one BrowserGym tool call.`,ae,G,oe,X,Be=`In practice, you should add a small parser around the completion text so common
outputs like <code>Action: click(&#39;13&#39;)</code> are normalized before calling
<code>build_browsergym_action_tool_call</code>.`,re,I,pe,k,ve=`Pass the session factory, white-box harness adapter, and model-step builder to
<code>build_harness_rollout_func</code>:`,ie,R,Me,Z,ge=`The returned function accepts TRL prompts and a trainer, runs one harness-backed
BrowserGym episode per prompt, and returns <code>prompt_ids</code>, <code>completion_ids</code>,
<code>logprobs</code>, <code>env_reward</code>, and <code>verify_metrics</code>.`,ce,V,ye,W,$e=`See <a href="https://github.com/huggingface/OpenEnv/blob/main/examples/browsergym_harness.py" rel="nofollow"><code>examples/browsergym_harness.py</code></a>
for a complete TRL-oriented helper that includes action normalization and a
ready-to-use <code>build_browsergym_rollout_func</code>.`,me,x,de,Q,ue;return b=new We({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new N({props:{title:"BrowserGym Harness Rollouts",local:"browsergym-harness-rollouts",headingTag:"h1"}}),h=new N({props:{title:"What You’ll Build",local:"what-youll-build",headingTag:"h2"}}),T=new N({props:{title:"Install Dependencies",local:"install-dependencies",headingTag:"h2"}}),C=new we({props:{code:"cGlwJTIwaW5zdGFsbCUyMC1VJTIwJTIydHJsJTVCdmxsbSU1RCUyMiUyMHBlZnQlMjB0cmFja2lvJTIwa2VybmVscyUwQXBpcCUyMGluc3RhbGwlMjAtVSUyMGdpdCUyQmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmh1Z2dpbmdmYWNlJTJGT3BlbkVudi5naXQlMEFwaXAlMjBpbnN0YWxsJTIwLVUlMjAlMjJvcGVuZW52LWJyb3dzZXJneW0lMjAlNDAlMjBnaXQlMkJodHRwcyUzQSUyRiUyRmh1Z2dpbmdmYWNlLmNvJTJGc3BhY2VzJTJGb3BlbmVudiUyRmJyb3dzZXJneW1fZW52JTIy",highlighted:`pip install -U <span class="hljs-string">&quot;trl[vllm]&quot;</span> peft trackio kernels
pip install -U git+https://github.com/huggingface/OpenEnv.git
pip install -U <span class="hljs-string">&quot;openenv-browsergym @ git+https://huggingface.co/spaces/openenv/browsergym_env&quot;</span>`,lang:"bash",wrap:!1}}),_=new N({props:{title:"Build The Session Factory",local:"build-the-session-factory",headingTag:"h2"}}),v=new we({props:{code:"ZnJvbSUyMGJyb3dzZXJneW1fZW52JTIwaW1wb3J0JTIwQnJvd3Nlckd5bUVudiUwQWZyb20lMjBicm93c2VyZ3ltX2Vudi5oYXJuZXNzJTIwaW1wb3J0JTIwQnJvd3Nlckd5bVNlc3Npb25GYWN0b3J5JTBBJTBBc3BhY2VfdXJsJTIwJTNEJTIwJTIyaHR0cHMlM0ElMkYlMkZvcGVuZW52LWJyb3dzZXJneW0tZW52LmhmLnNwYWNlJTIyJTBBJTBBJTBBZGVmJTIwZW52aXJvbm1lbnRfZmFjdG9yeSgpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwQnJvd3Nlckd5bUVudihiYXNlX3VybCUzRHNwYWNlX3VybCklMEElMEElMEFzZXNzaW9uX2ZhY3RvcnklMjAlM0QlMjBCcm93c2VyR3ltU2Vzc2lvbkZhY3RvcnkoJTBBJTIwJTIwJTIwJTIwY2xpZW50X2ZhY3RvcnklM0RlbnZpcm9ubWVudF9mYWN0b3J5JTJDJTBBJTIwJTIwJTIwJTIwZGVmYXVsdF90YXNrJTNEJTIyY2xpY2stdGVzdCUyMiUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> browsergym_env <span class="hljs-keyword">import</span> BrowserGymEnv
<span class="hljs-keyword">from</span> browsergym_env.harness <span class="hljs-keyword">import</span> BrowserGymSessionFactory
space_url = <span class="hljs-string">&quot;https://openenv-browsergym-env.hf.space&quot;</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">environment_factory</span>():
<span class="hljs-keyword">return</span> BrowserGymEnv(base_url=space_url)
session_factory = BrowserGymSessionFactory(
client_factory=environment_factory,
default_task=<span class="hljs-string">&quot;click-test&quot;</span>,
)`,lang:"python",wrap:!1}}),$=new N({props:{title:"Wrap TRL Generation",local:"wrap-trl-generation",headingTag:"h2"}}),G=new we({props:{code:"ZnJvbSUyMGJyb3dzZXJneW1fZW52Lmhhcm5lc3MlMjBpbXBvcnQlMjBidWlsZF9icm93c2VyZ3ltX2FjdGlvbl90b29sX2NhbGwlMEFmcm9tJTIwb3BlbmVudi5jb3JlLmhhcm5lc3MlMjBpbXBvcnQlMjBNb2RlbFN0ZXBSZXN1bHQlMEFmcm9tJTIwb3BlbmVudi5jb3JlLmxsbV9jbGllbnQlMjBpbXBvcnQlMjBMTE1SZXNwb25zZSUwQWZyb20lMjB0cmwuZXhwZXJpbWVudGFsLm9wZW5lbnYlMjBpbXBvcnQlMjBnZW5lcmF0ZV9yb2xsb3V0X2NvbXBsZXRpb25zJTBBJTBBJTBBZGVmJTIwYnVpbGRfdHJsX2Jyb3dzZXJneW1fbW9kZWxfc3RlcCh0cmFpbmVyJTJDJTIwdG9rZW5pemVyKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMG1vZGVsX3N0ZXAobWVzc2FnZXMlMkMlMjB0b29scyUyQyUyMHNhbXBsaW5nKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlbCUyMHRvb2xzJTJDJTIwc2FtcGxpbmclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9tcHRfdGV4dCUyMCUzRCUyMHRva2VuaXplci5hcHBseV9jaGF0X3RlbXBsYXRlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lc3NhZ2VzJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWRkX2dlbmVyYXRpb25fcHJvbXB0JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcm9sbG91dF9vdXRwdXQlMjAlM0QlMjBnZW5lcmF0ZV9yb2xsb3V0X2NvbXBsZXRpb25zKHRyYWluZXIlMkMlMjAlNUJwcm9tcHRfdGV4dCU1RCklNUIwJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29tcGxldGlvbl90ZXh0JTIwJTNEJTIwcm9sbG91dF9vdXRwdXQuZ2V0KCUyMnRleHQlMjIpJTIwb3IlMjB0b2tlbml6ZXIuZGVjb2RlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJvbGxvdXRfb3V0cHV0JTVCJTIyY29tcGxldGlvbl9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b29sX2NhbGwlMjAlM0QlMjBidWlsZF9icm93c2VyZ3ltX2FjdGlvbl90b29sX2NhbGwoY29tcGxldGlvbl90ZXh0KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyME1vZGVsU3RlcFJlc3VsdCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXNwb25zZSUzRExMTVJlc3BvbnNlKGNvbnRlbnQlM0Rjb21wbGV0aW9uX3RleHQlMkMlMjB0b29sX2NhbGxzJTNEJTVCdG9vbF9jYWxsJTVEKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb21wdF9pZHMlM0RsaXN0KHJvbGxvdXRfb3V0cHV0JTVCJTIycHJvbXB0X2lkcyUyMiU1RCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21wbGV0aW9uX2lkcyUzRGxpc3Qocm9sbG91dF9vdXRwdXQlNUIlMjJjb21wbGV0aW9uX2lkcyUyMiU1RCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb2dwcm9icyUzRGxpc3Qocm9sbG91dF9vdXRwdXQlNUIlMjJsb2dwcm9icyUyMiU1RCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbW9kZWxfc3RlcA==",highlighted:`<span class="hljs-keyword">from</span> browsergym_env.harness <span class="hljs-keyword">import</span> build_browsergym_action_tool_call
<span class="hljs-keyword">from</span> openenv.core.harness <span class="hljs-keyword">import</span> ModelStepResult
<span class="hljs-keyword">from</span> openenv.core.llm_client <span class="hljs-keyword">import</span> LLMResponse
<span class="hljs-keyword">from</span> trl.experimental.openenv <span class="hljs-keyword">import</span> generate_rollout_completions
<span class="hljs-keyword">def</span> <span class="hljs-title function_">build_trl_browsergym_model_step</span>(<span class="hljs-params">trainer, tokenizer</span>):
<span class="hljs-keyword">def</span> <span class="hljs-title function_">model_step</span>(<span class="hljs-params">messages, tools, sampling</span>):
<span class="hljs-keyword">del</span> tools, sampling
prompt_text = tokenizer.apply_chat_template(
messages,
add_generation_prompt=<span class="hljs-literal">True</span>,
tokenize=<span class="hljs-literal">False</span>,
)
rollout_output = generate_rollout_completions(trainer, [prompt_text])[<span class="hljs-number">0</span>]
completion_text = rollout_output.get(<span class="hljs-string">&quot;text&quot;</span>) <span class="hljs-keyword">or</span> tokenizer.decode(
rollout_output[<span class="hljs-string">&quot;completion_ids&quot;</span>],
skip_special_tokens=<span class="hljs-literal">True</span>,
)
tool_call = build_browsergym_action_tool_call(completion_text)
<span class="hljs-keyword">return</span> ModelStepResult(
response=LLMResponse(content=completion_text, tool_calls=[tool_call]),
prompt_ids=<span class="hljs-built_in">list</span>(rollout_output[<span class="hljs-string">&quot;prompt_ids&quot;</span>]),
completion_ids=<span class="hljs-built_in">list</span>(rollout_output[<span class="hljs-string">&quot;completion_ids&quot;</span>]),
logprobs=<span class="hljs-built_in">list</span>(rollout_output[<span class="hljs-string">&quot;logprobs&quot;</span>]),
)
<span class="hljs-keyword">return</span> model_step`,lang:"python",wrap:!1}}),I=new N({props:{title:"Create The Rollout Function",local:"create-the-rollout-function",headingTag:"h2"}}),R=new we({props:{code:"ZnJvbSUyMG9wZW5lbnYuY29yZS5oYXJuZXNzJTIwaW1wb3J0JTIwKCUwQSUyMCUyMCUyMCUyMEhhcm5lc3NSdW5MaW1pdHMlMkMlMEElMjAlMjAlMjAlMjBNQ1BIYXJuZXNzQWRhcHRlciUyQyUwQSUyMCUyMCUyMCUyMGJ1aWxkX2hhcm5lc3Nfcm9sbG91dF9mdW5jJTJDJTBBKSUwQSUwQXJvbGxvdXRfZnVuYyUyMCUzRCUyMGJ1aWxkX2hhcm5lc3Nfcm9sbG91dF9mdW5jKCUwQSUyMCUyMCUyMCUyMHNlc3Npb25fZmFjdG9yeSUzRHNlc3Npb25fZmFjdG9yeSUyQyUwQSUyMCUyMCUyMCUyMGhhcm5lc3NfYWRhcHRlciUzRE1DUEhhcm5lc3NBZGFwdGVyKCklMkMlMEElMjAlMjAlMjAlMjBtb2RlbF9zdGVwX2J1aWxkZXIlM0RsYW1iZGElMjB0cmFpbmVyJTJDJTIwc2Vzc2lvbiUzQSUyMGJ1aWxkX3RybF9icm93c2VyZ3ltX21vZGVsX3N0ZXAoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJhaW5lciUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplciUyQyUwQSUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjBsaW1pdHMlM0RIYXJuZXNzUnVuTGltaXRzKG1heF90dXJucyUzRDEwKSUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> openenv.core.harness <span class="hljs-keyword">import</span> (
HarnessRunLimits,
MCPHarnessAdapter,
build_harness_rollout_func,
)
rollout_func = build_harness_rollout_func(
session_factory=session_factory,
harness_adapter=MCPHarnessAdapter(),
model_step_builder=<span class="hljs-keyword">lambda</span> trainer, session: build_trl_browsergym_model_step(
trainer,
tokenizer,
),
limits=HarnessRunLimits(max_turns=<span class="hljs-number">10</span>),
)`,lang:"python",wrap:!1}}),V=new N({props:{title:"Full Example",local:"full-example",headingTag:"h2"}}),x=new xe({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/tutorials/browsergym-harness.md"}}),{c(){u=o("meta"),E=n(),H=o("p"),S=n(),p(b.$$.fragment),z=n(),p(U.$$.fragment),F=n(),J=o("p"),J.textContent=Je,L=n(),w=o("blockquote"),w.innerHTML=he,Y=n(),p(h.$$.fragment),q=n(),j=o("ul"),j.innerHTML=je,P=n(),p(T.$$.fragment),K=n(),f=o("p"),f.textContent=Te,D=n(),p(C.$$.fragment),O=n(),p(_.$$.fragment),ee=n(),B=o("p"),B.innerHTML=fe,le=n(),p(v.$$.fragment),te=n(),g=o("p"),g.innerHTML=Ce,se=n(),p($.$$.fragment),ne=n(),A=o("p"),A.innerHTML=_e,ae=n(),p(G.$$.fragment),oe=n(),X=o("p"),X.innerHTML=Be,re=n(),p(I.$$.fragment),pe=n(),k=o("p"),k.innerHTML=ve,ie=n(),p(R.$$.fragment),Me=n(),Z=o("p"),Z.innerHTML=ge,ce=n(),p(V.$$.fragment),ye=n(),W=o("p"),W.innerHTML=$e,me=n(),p(x.$$.fragment),de=n(),Q=o("p"),this.h()},l(e){const l=Ze("svelte-u9bgzb",document.head);u=r(l,"META",{name:!0,content:!0}),l.forEach(t),E=a(e),H=r(e,"P",{}),Ae(H).forEach(t),S=a(e),i(b.$$.fragment,e),z=a(e),i(U.$$.fragment,e),F=a(e),J=r(e,"P",{"data-svelte-h":!0}),d(J)!=="svelte-1540o3q"&&(J.textContent=Je),L=a(e),w=r(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),d(w)!=="svelte-57zv20"&&(w.innerHTML=he),Y=a(e),i(h.$$.fragment,e),q=a(e),j=r(e,"UL",{"data-svelte-h":!0}),d(j)!=="svelte-62gmut"&&(j.innerHTML=je),P=a(e),i(T.$$.fragment,e),K=a(e),f=r(e,"P",{"data-svelte-h":!0}),d(f)!=="svelte-1ynlc70"&&(f.textContent=Te),D=a(e),i(C.$$.fragment,e),O=a(e),i(_.$$.fragment,e),ee=a(e),B=r(e,"P",{"data-svelte-h":!0}),d(B)!=="svelte-1qg1a9f"&&(B.innerHTML=fe),le=a(e),i(v.$$.fragment,e),te=a(e),g=r(e,"P",{"data-svelte-h":!0}),d(g)!=="svelte-1b3uzy8"&&(g.innerHTML=Ce),se=a(e),i($.$$.fragment,e),ne=a(e),A=r(e,"P",{"data-svelte-h":!0}),d(A)!=="svelte-lnvo5a"&&(A.innerHTML=_e),ae=a(e),i(G.$$.fragment,e),oe=a(e),X=r(e,"P",{"data-svelte-h":!0}),d(X)!=="svelte-1l5v3lb"&&(X.innerHTML=Be),re=a(e),i(I.$$.fragment,e),pe=a(e),k=r(e,"P",{"data-svelte-h":!0}),d(k)!=="svelte-vbg4ew"&&(k.innerHTML=ve),ie=a(e),i(R.$$.fragment,e),Me=a(e),Z=r(e,"P",{"data-svelte-h":!0}),d(Z)!=="svelte-1337m4t"&&(Z.innerHTML=ge),ce=a(e),i(V.$$.fragment,e),ye=a(e),W=r(e,"P",{"data-svelte-h":!0}),d(W)!=="svelte-bh4c0y"&&(W.innerHTML=$e),me=a(e),i(x.$$.fragment,e),de=a(e),Q=r(e,"P",{}),Ae(Q).forEach(t),this.h()},h(){be(u,"name","hf:doc:metadata"),be(u,"content",He),be(w,"class","note")},m(e,l){Ve(document.head,u),s(e,E,l),s(e,H,l),s(e,S,l),M(b,e,l),s(e,z,l),M(U,e,l),s(e,F,l),s(e,J,l),s(e,L,l),s(e,w,l),s(e,Y,l),M(h,e,l),s(e,q,l),s(e,j,l),s(e,P,l),M(T,e,l),s(e,K,l),s(e,f,l),s(e,D,l),M(C,e,l),s(e,O,l),M(_,e,l),s(e,ee,l),s(e,B,l),s(e,le,l),M(v,e,l),s(e,te,l),s(e,g,l),s(e,se,l),M($,e,l),s(e,ne,l),s(e,A,l),s(e,ae,l),M(G,e,l),s(e,oe,l),s(e,X,l),s(e,re,l),M(I,e,l),s(e,pe,l),s(e,k,l),s(e,ie,l),M(R,e,l),s(e,Me,l),s(e,Z,l),s(e,ce,l),M(V,e,l),s(e,ye,l),s(e,W,l),s(e,me,l),M(x,e,l),s(e,de,l),s(e,Q,l),ue=!0},p:Xe,i(e){ue||(c(b.$$.fragment,e),c(U.$$.fragment,e),c(h.$$.fragment,e),c(T.$$.fragment,e),c(C.$$.fragment,e),c(_.$$.fragment,e),c(v.$$.fragment,e),c($.$$.fragment,e),c(G.$$.fragment,e),c(I.$$.fragment,e),c(R.$$.fragment,e),c(V.$$.fragment,e),c(x.$$.fragment,e),ue=!0)},o(e){y(b.$$.fragment,e),y(U.$$.fragment,e),y(h.$$.fragment,e),y(T.$$.fragment,e),y(C.$$.fragment,e),y(_.$$.fragment,e),y(v.$$.fragment,e),y($.$$.fragment,e),y(G.$$.fragment,e),y(I.$$.fragment,e),y(R.$$.fragment,e),y(V.$$.fragment,e),y(x.$$.fragment,e),ue=!1},d(e){e&&(t(E),t(H),t(S),t(z),t(F),t(J),t(L),t(w),t(Y),t(q),t(j),t(P),t(K),t(f),t(D),t(O),t(ee),t(B),t(le),t(te),t(g),t(se),t(ne),t(A),t(ae),t(oe),t(X),t(re),t(pe),t(k),t(ie),t(Me),t(Z),t(ce),t(ye),t(W),t(me),t(de),t(Q)),t(u),m(b,e),m(U,e),m(h,e),m(T,e),m(C,e),m(_,e),m(v,e),m($,e),m(G,e),m(I,e),m(R,e),m(V,e),m(x,e)}}}const He='{"title":"BrowserGym Harness Rollouts","local":"browsergym-harness-rollouts","sections":[{"title":"What You’ll Build","local":"what-youll-build","sections":[],"depth":2},{"title":"Install Dependencies","local":"install-dependencies","sections":[],"depth":2},{"title":"Build The Session Factory","local":"build-the-session-factory","sections":[],"depth":2},{"title":"Wrap TRL Generation","local":"wrap-trl-generation","sections":[],"depth":2},{"title":"Create The Rollout Function","local":"create-the-rollout-function","sections":[],"depth":2},{"title":"Full Example","local":"full-example","sections":[],"depth":2}],"depth":1}';function Qe(Ue){return Ie(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ye extends ke{constructor(u){super(),Re(this,u,Qe,Ne,Ge,{})}}export{Ye as component};

Xet Storage Details

Size:
16.5 kB
·
Xet hash:
6bcde1c3606ebede802a54cfe10c4b341dc419aa859a888c10ad7dfac549321b

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.