Buckets:

download
raw
48.5 kB
import{s as pt,n as rt,o as Mt}from"../chunks/scheduler.2b22cead.js";import{S as ct,i as ot,e as y,s as n,c as i,h as yt,a as m,d as s,b as a,f as at,g as p,j as u,k as it,l as mt,m as t,n as r,t as M,o as c,p as o}from"../chunks/index.1a0e8013.js";import{C as ut,H as d,E as dt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.0dbb5721.js";import{C as w}from"../chunks/CodeBlock.3857bed2.js";function wt(hs){let J,He,Ye,ze,j,Fe,T,qe,U,fs="<code>repl_env</code> is an OpenEnv-native Python REPL environment for Recursive Language Model style execution. It now follows the current OpenEnv client/server conventions:",Pe,h,bs="<li><code>REPLEnv</code> is the remote async <code>EnvClient</code></li> <li><code>.sync()</code> is the sync wrapper for remote usage</li> <li><code>LocalREPLEnv</code> is the explicit in-process helper</li> <li><code>LocalRLMRunner</code> is the higher-level orchestration loop for local recursive RLM runs</li>",Ke,f,Is="The architecture is intentionally split the same way the official <code>rlm</code> and DSPy implementations split things:",Oe,b,Cs="<li>the environment executes code and exposes tools</li> <li>the runner owns the iterative prompting loop</li> <li>recursive behavior lives in backend/controller modules, not in the executor</li>",De,I,el,C,$s="Inside the REPL, the model can:",ll,$,vs="<li>inspect <code>context</code></li> <li>execute Python code across multiple turns with persistent state</li> <li>call <code>llm_query(...)</code> and <code>llm_query_batched(...)</code></li> <li>call <code>rlm_query(...)</code> and <code>rlm_query_batched(...)</code> for recursive child runs when configured</li> <li>finish with <code>FINAL(...)</code>, <code>FINAL_VAR(...)</code>, or <code>answer = {&quot;content&quot;: ..., &quot;ready&quot;: True}</code></li>",sl,v,tl,B,Bs="Main modules:",nl,g,gs='<li><a href="client.py"><code>client.py</code></a>: remote async OpenEnv client</li> <li><a href="local.py"><code>local.py</code></a>: explicit in-process local env helper</li> <li><a href="runner.py"><code>runner.py</code></a>: local RLM orchestration loop</li> <li><a href="recursive_backends.py"><code>recursive_backends.py</code></a>: direct and recursive backend implementations</li> <li><a href="recursive_controller.py"><code>recursive_controller.py</code></a>: server-side backend/broker composition</li> <li><a href="rubrics.py"><code>rubrics.py</code></a>: reward rubrics (OpenEnv RFC 004)</li> <li><a href="server/repl_environment.py"><code>server/repl_environment.py</code></a>: server-side execution environment</li> <li><a href="server/app.py"><code>server/app.py</code></a>: OpenEnv HTTP server app and env factory</li>',al,R,il,_,Rs=`<li>Standard remote OpenEnv usage through <code>REPLEnv</code></li> <li>Local in-process execution through <code>LocalREPLEnv</code></li> <li>Local recursive RLM runs through <code>LocalRLMRunner</code></li> <li>Server-backed recursive calls through the current controller/broker path</li> <li>Explicit recursion controls:
<ul><li><code>max_depth</code></li> <li><code>max_children_total</code></li> <li><code>max_children_per_batch</code></li> <li><code>per_child_timeout_s</code></li> <li><code>result_truncation_limit</code></li></ul></li> <li>Lightweight child trace metadata on local runner results</li> <li>Rubric-based rewards (OpenEnv RFC 004):
<ul><li><code>ExactMatchRubric</code>: binary outcome reward against ground truth</li> <li><code>FuzzyMatchRubric</code>: partial credit for containment matches</li> <li><code>CustomMetricRubric</code>: user-provided <code>metric(expected, predicted) -&gt; float</code></li> <li><code>CodeExecutionRubric</code>: per-step process reward for code errors</li> <li><code>REPLRubric</code>: composite rubric combining outcome + process</li> <li>Ground truth injectable at reset via <code>expected_answer</code></li></ul></li>`,pl,E,rl,k,_s=`Rewards follow the OpenEnv Rubric system (RFC 004). The environment uses
<code>REPLRubric</code> by default, which combines:`,Ml,x,Es=`<li><strong>Outcome reward</strong> (on terminal steps): compares <code>final_answer</code> against
<code>expected_answer</code> if provided. Returns 1.0 for match, 0.0 otherwise.</li> <li><strong>Process reward</strong> (on non-terminal steps): returns -0.05 for code
execution errors, 0.0 for successful steps.</li> <li><strong>Failure reward</strong>: returns -0.1 when max iterations exhausted without an answer.</li>`,cl,N,ks="For RL training (GRPO, etc.), pass <code>expected_answer</code> at reset time:",ol,Z,yl,Q,xs="Custom rubrics can be injected at construction:",ml,L,ul,V,dl,A,wl,W,Ns="Async:",Jl,G,jl,X,Zs="Sync:",Tl,Y,Ul,S,hl,H,fl,z,bl,F,Qs=`<code>LocalRLMRunner</code> takes any <code>chat_fn(messages, model=None) -&gt; str</code>. It works
with HF Inference API, vLLM, SGLang, Ollama, or any OpenAI-compatible server.`,Il,q,Ls="With HF Inference API:",Cl,P,$l,K,Vs="With a local vLLM server:",vl,O,Bl,D,gl,ee,As=`The outer loop (code generation) can use a large model while inner
<code>llm_query</code>/<code>rlm_query</code> calls use a smaller, faster model. Pass a
custom <code>backend_factory</code> to the runner:`,Rl,le,_l,se,El,te,Ws="Run the local server:",kl,ne,xl,ae,Gs='The server uses a proper OpenEnv environment factory in <a href="server/app.py"><code>server/app.py</code></a>.',Nl,ie,Zl,pe,Ql,re,Ll,Me,Xs="Use <code>.sync()</code> for synchronous code.",Vl,ce,Al,oe,Wl,ye,Gl,me,Xl,ue,Ys="<code>REPLAction</code>",Yl,de,Sl,we,Ss="<code>REPLObservation</code>",Hl,Je,zl,je,Fl,Te,Hs="When configured, the REPL namespace exposes:",ql,Ue,zs="<li><code>llm_query(prompt, model=None)</code></li> <li><code>llm_query_batched(prompts, model=None)</code></li> <li><code>rlm_query(prompt, model=None)</code></li> <li><code>rlm_query_batched(prompts, model=None)</code></li> <li><code>FINAL(value)</code></li> <li><code>FINAL_VAR(name)</code></li> <li><code>SHOW_VARS()</code></li>",Pl,he,Fs="Notes:",Kl,fe,qs=`<li><code>rlm_query</code> is the recursive child-run surface.</li> <li>At max recursion depth, recursion falls back to direct LM calls rather than spawning more children.</li> <li>Lifecycle callbacks follow the official <code>rlm</code> pattern:
<ul><li><code>on_subcall_start(depth, model, prompt_preview)</code></li> <li><code>on_subcall_complete(depth, model, duration, error_or_none)</code></li></ul></li>`,Ol,be,Dl,Ie,es,Ce,ls,$e,ss,ve,ts,Be,ns,ge,as,Re,is,_e,Ps='<a href="prompts.py"><code>prompts.py</code></a> contains the current message-building and parsing helpers used by the examples and runner.',ps,Ee,Ks="Important exports:",rs,ke,Os="<li><code>RLM_SYSTEM_PROMPT</code></li> <li><code>RLM_SYSTEM_PROMPT_QWEN</code></li> <li><code>QueryMetadata</code></li> <li><code>build_rlm_system_prompt(...)</code></li> <li><code>build_user_prompt(...)</code></li> <li><code>extract_code_blocks(...)</code></li> <li><code>format_observations(...)</code></li>",Ms,xe,Ds="These prompts were updated to reflect the actual helper surface the environment provides, rather than documenting tools that do not exist.",cs,Ne,os,Ze,et='<li><a href="../../examples/repl_with_llm.py"><code>examples/repl_with_llm.py</code></a></li> <li><a href="../../examples/repl_oolong_simple.py"><code>examples/repl_oolong_simple.py</code></a></li>',ys,Qe,lt="Default hosted model in the examples is currently <code>Qwen/Qwen3.5-9B</code>, but real hosted inference still depends on provider availability and token access.",ms,Le,us,Ve,st='Server-side configuration in <a href="server/app.py"><code>server/app.py</code></a>:',ds,Ae,tt="<li><code>LLM_MODEL</code></li> <li><code>HF_TOKEN</code></li> <li><code>REPL_MAX_ITERATIONS</code></li> <li><code>REPL_MAX_OUTPUT_LENGTH</code></li> <li><code>REPL_CONTEXT_PREVIEW_LENGTH</code></li> <li><code>REPL_RLM_MAX_DEPTH</code></li> <li><code>REPL_RLM_MAX_ITERATIONS</code></li>",ws,We,Js,Ge,nt='<li><a href="https://huggingface.co/papers/2512.24601" rel="nofollow">RLM Paper (arXiv:2512.24601)</a></li> <li><a href="https://github.com/alexzhang13/rlm" rel="nofollow">RLM Implementation</a></li> <li><a href="https://alexzhang13.github.io/blog/2025/rlm/" rel="nofollow">Alex Zhang’s RLM Blog</a></li> <li><a href="https://www.primeintellect.ai/blog/rlm" rel="nofollow">Prime Intellect RLM Blog</a></li>',js,Xe,Ts,Se,Us;return j=new ut({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),T=new d({props:{title:"REPL Environment for OpenEnv",local:"repl-environment-for-openenv",headingTag:"h1"}}),I=new d({props:{title:"Overview",local:"overview",headingTag:"h2"}}),v=new d({props:{title:"Current Architecture",local:"current-architecture",headingTag:"h2"}}),R=new d({props:{title:"What Works Today",local:"what-works-today",headingTag:"h2"}}),E=new d({props:{title:"Rewards",local:"rewards",headingTag:"h2"}}),Z=new w({props:{code:"d2l0aCUyMExvY2FsUkVQTEVudigpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjBlbnYucmVzZXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dCUzRCUyMi4uLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRhc2tfcHJvbXB0JTNEJTIyLi4uJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhwZWN0ZWRfYW5zd2VyJTNEJTIyNDIlMjIlMkMlMjAlMjAlMjMlMjBncm91bmQlMjB0cnV0aCUyMGZvciUyMHJ1YnJpYyUyMHNjb3JpbmclMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIycHJpbnQoRklOQUwoNDIpKSUyMiklMEElMjAlMjAlMjAlMjBwcmludChyZXN1bHQucmV3YXJkKSUyMCUyMCUyMyUyMDEuMCUyMChjb3JyZWN0KQ==",highlighted:`<span class="hljs-keyword">with</span> LocalREPLEnv() <span class="hljs-keyword">as</span> env:
env.reset(
context=<span class="hljs-string">&quot;...&quot;</span>,
task_prompt=<span class="hljs-string">&quot;...&quot;</span>,
expected_answer=<span class="hljs-string">&quot;42&quot;</span>, <span class="hljs-comment"># ground truth for rubric scoring</span>
)
result = env.execute(<span class="hljs-string">&quot;print(FINAL(42))&quot;</span>)
<span class="hljs-built_in">print</span>(result.reward) <span class="hljs-comment"># 1.0 (correct)</span>`,lang:"python",wrap:!1}}),L=new w({props:{code:"ZnJvbSUyMHJlcGxfZW52JTIwaW1wb3J0JTIwTG9jYWxSRVBMRW52JTJDJTIwQ3VzdG9tTWV0cmljUnVicmljJTJDJTIwUkVQTFJ1YnJpYyUwQSUwQWRlZiUyMG15X21ldHJpYyhleHBlY3RlZCUyQyUyMHByZWRpY3RlZCklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjAxLjAlMjBpZiUyMGV4cGVjdGVkLnN0cmlwKCklMjAlM0QlM0QlMjBwcmVkaWN0ZWQuc3RyaXAoKSUyMGVsc2UlMjAwLjAlMEElMEFlbnYlMjAlM0QlMjBMb2NhbFJFUExFbnYocnVicmljJTNEUkVQTFJ1YnJpYyhvdXRjb21lJTNEQ3VzdG9tTWV0cmljUnVicmljKG15X21ldHJpYykpKQ==",highlighted:`<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> LocalREPLEnv, CustomMetricRubric, REPLRubric
<span class="hljs-keyword">def</span> <span class="hljs-title function_">my_metric</span>(<span class="hljs-params">expected, predicted</span>):
<span class="hljs-keyword">return</span> <span class="hljs-number">1.0</span> <span class="hljs-keyword">if</span> expected.strip() == predicted.strip() <span class="hljs-keyword">else</span> <span class="hljs-number">0.0</span>
env = LocalREPLEnv(rubric=REPLRubric(outcome=CustomMetricRubric(my_metric)))`,lang:"python",wrap:!1}}),V=new d({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),A=new d({props:{title:"Remote Server Usage",local:"remote-server-usage",headingTag:"h3"}}),G=new w({props:{code:"aW1wb3J0JTIwYXN5bmNpbyUwQWZyb20lMjByZXBsX2VudiUyMGltcG9ydCUyMFJFUExFbnYlMEElMEElMEFhc3luYyUyMGRlZiUyMG1haW4oKSUzQSUwQSUyMCUyMCUyMCUyMGFzeW5jJTIwd2l0aCUyMFJFUExFbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGMTI3LjAuMC4xJTNBODAwMCUyMiklMjBhcyUyMGVudiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGF3YWl0JTIwZW52LnJlc2V0KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRleHQlM0QlMjJhbHBoYSUyMGJldGElMjBnYW1tYSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRhc2tfcHJvbXB0JTNEJTIyQ291bnQlMjB0aGUlMjB3b3JkcyUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBhd2FpdCUyMGVudi5leGVjdXRlKCUyMmNvdW50JTIwJTNEJTIwbGVuKGNvbnRleHQuc3BsaXQoKSklMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwYXdhaXQlMjBlbnYuZXhlY3V0ZSglMjJwcmludChGSU5BTChjb3VudCkpJTIyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KHJlc3VsdC5kb25lKSUwQSUwQSUwQWFzeW5jaW8ucnVuKG1haW4oKSk=",highlighted:`<span class="hljs-keyword">import</span> asyncio
<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> REPLEnv
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():
<span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> REPLEnv(base_url=<span class="hljs-string">&quot;http://127.0.0.1:8000&quot;</span>) <span class="hljs-keyword">as</span> env:
result = <span class="hljs-keyword">await</span> env.reset(
context=<span class="hljs-string">&quot;alpha beta gamma&quot;</span>,
task_prompt=<span class="hljs-string">&quot;Count the words&quot;</span>,
)
result = <span class="hljs-keyword">await</span> env.execute(<span class="hljs-string">&quot;count = len(context.split())&quot;</span>)
result = <span class="hljs-keyword">await</span> env.execute(<span class="hljs-string">&quot;print(FINAL(count))&quot;</span>)
<span class="hljs-built_in">print</span>(result.done)
asyncio.run(main())`,lang:"python",wrap:!1}}),Y=new w({props:{code:"ZnJvbSUyMHJlcGxfZW52JTIwaW1wb3J0JTIwUkVQTEVudiUwQSUwQXdpdGglMjBSRVBMRW52KGJhc2VfdXJsJTNEJTIyaHR0cCUzQSUyRiUyRjEyNy4wLjAuMSUzQTgwMDAlMjIpLnN5bmMoKSUyMGFzJTIwZW52JTNBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwZW52LnJlc2V0KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRleHQlM0QlMjJhbHBoYSUyMGJldGElMjBnYW1tYSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRhc2tfcHJvbXB0JTNEJTIyQ291bnQlMjB0aGUlMjB3b3JkcyUyMiUyQyUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYuZXhlY3V0ZSglMjJjb3VudCUyMCUzRCUyMGxlbihjb250ZXh0LnNwbGl0KCkpJTIyKSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5leGVjdXRlKCUyMnByaW50KEZJTkFMKGNvdW50KSklMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnQocmVzdWx0Lm9ic2VydmF0aW9uLnJlc3VsdC5zdGRvdXQp",highlighted:`<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> REPLEnv
<span class="hljs-keyword">with</span> REPLEnv(base_url=<span class="hljs-string">&quot;http://127.0.0.1:8000&quot;</span>).sync() <span class="hljs-keyword">as</span> env:
result = env.reset(
context=<span class="hljs-string">&quot;alpha beta gamma&quot;</span>,
task_prompt=<span class="hljs-string">&quot;Count the words&quot;</span>,
)
result = env.execute(<span class="hljs-string">&quot;count = len(context.split())&quot;</span>)
result = env.execute(<span class="hljs-string">&quot;print(FINAL(count))&quot;</span>)
<span class="hljs-built_in">print</span>(result.observation.result.stdout)`,lang:"python",wrap:!1}}),S=new d({props:{title:"Local Environment Usage",local:"local-environment-usage",headingTag:"h3"}}),H=new w({props:{code:"ZnJvbSUyMHJlcGxfZW52JTIwaW1wb3J0JTIwTG9jYWxSRVBMRW52JTBBJTBBd2l0aCUyMExvY2FsUkVQTEVudigpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dCUzRCUyMlRoZSUyMHF1aWNrJTIwYnJvd24lMjBmb3glMjBqdW1wcyUyMG92ZXIlMjB0aGUlMjBsYXp5JTIwZG9nJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGFza19wcm9tcHQlM0QlMjJDb3VudCUyMHRoZSUyMHdvcmRzJTIyJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5leGVjdXRlKCUyMmNvdW50JTIwJTNEJTIwbGVuKGNvbnRleHQuc3BsaXQoKSklMjIpJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIycHJpbnQoRklOQUwoY291bnQpKSUyMiklMEElMjAlMjAlMjAlMjBwcmludChlbnYuc3RhdGUoKS5maW5hbF9hbnN3ZXIp",highlighted:`<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> LocalREPLEnv
<span class="hljs-keyword">with</span> LocalREPLEnv() <span class="hljs-keyword">as</span> env:
result = env.reset(
context=<span class="hljs-string">&quot;The quick brown fox jumps over the lazy dog&quot;</span>,
task_prompt=<span class="hljs-string">&quot;Count the words&quot;</span>,
)
result = env.execute(<span class="hljs-string">&quot;count = len(context.split())&quot;</span>)
result = env.execute(<span class="hljs-string">&quot;print(FINAL(count))&quot;</span>)
<span class="hljs-built_in">print</span>(env.state().final_answer)`,lang:"python",wrap:!1}}),z=new d({props:{title:"Local Recursive RLM Usage",local:"local-recursive-rlm-usage",headingTag:"h3"}}),P=new w({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMEluZmVyZW5jZUNsaWVudCUwQWZyb20lMjByZXBsX2VudiUyMGltcG9ydCUyMExvY2FsUkxNUnVubmVyJTJDJTIwUkxNX1NZU1RFTV9QUk9NUFQlMEElMEFjbGllbnQlMjAlM0QlMjBJbmZlcmVuY2VDbGllbnQobW9kZWwlM0QlMjJRd2VuJTJGUXdlbjMuNS05QiUyMiUyQyUyMHRpbWVvdXQlM0QzMDApJTBBJTBBZGVmJTIwY2hhdF9mbihtZXNzYWdlcyUyQyUyMG1vZGVsJTNETm9uZSklM0ElMEElMjAlMjAlMjAlMjByZXNwb25zZSUyMCUzRCUyMGNsaWVudC5jaGF0LmNvbXBsZXRpb25zLmNyZWF0ZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTIwb3IlMjAlMjJRd2VuJTJGUXdlbjMuNS05QiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lc3NhZ2VzJTNEbWVzc2FnZXMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfdG9rZW5zJTNEMjA0OCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRlbXBlcmF0dXJlJTNEMC42JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXh0cmFfYm9keSUzRCU3QiUyMmNoYXRfdGVtcGxhdGVfa3dhcmdzJTIyJTNBJTIwJTdCJTIyZW5hYmxlX3RoaW5raW5nJTIyJTNBJTIwRmFsc2UlN0QlN0QlMkMlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwcmVzcG9uc2UuY2hvaWNlcyU1QjAlNUQubWVzc2FnZS5jb250ZW50JTBBJTBBcnVubmVyJTIwJTNEJTIwTG9jYWxSTE1SdW5uZXIoY2hhdF9mbiUyQyUyMG1heF9pdGVyYXRpb25zJTNEMzAlMkMlMjBtYXhfZGVwdGglM0QyKSUwQXJlc3VsdCUyMCUzRCUyMHJ1bm5lci5ydW4oJTIyVGhlJTIwYW5zd2VyJTIwaXMlMjA0MiUyMiUyQyUyMCUyMldoYXQlMjBudW1iZXIlMjBpcyUyMG1lbnRpb25lZCUzRiUyMiklMEFwcmludChyZXN1bHQuZmluYWxfYW5zd2VyKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> LocalRLMRunner, RLM_SYSTEM_PROMPT
client = InferenceClient(model=<span class="hljs-string">&quot;Qwen/Qwen3.5-9B&quot;</span>, timeout=<span class="hljs-number">300</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">chat_fn</span>(<span class="hljs-params">messages, model=<span class="hljs-literal">None</span></span>):
response = client.chat.completions.create(
model=model <span class="hljs-keyword">or</span> <span class="hljs-string">&quot;Qwen/Qwen3.5-9B&quot;</span>,
messages=messages,
max_tokens=<span class="hljs-number">2048</span>,
temperature=<span class="hljs-number">0.6</span>,
extra_body={<span class="hljs-string">&quot;chat_template_kwargs&quot;</span>: {<span class="hljs-string">&quot;enable_thinking&quot;</span>: <span class="hljs-literal">False</span>}},
)
<span class="hljs-keyword">return</span> response.choices[<span class="hljs-number">0</span>].message.content
runner = LocalRLMRunner(chat_fn, max_iterations=<span class="hljs-number">30</span>, max_depth=<span class="hljs-number">2</span>)
result = runner.run(<span class="hljs-string">&quot;The answer is 42&quot;</span>, <span class="hljs-string">&quot;What number is mentioned?&quot;</span>)
<span class="hljs-built_in">print</span>(result.final_answer)`,lang:"python",wrap:!1}}),O=new w({props:{code:"ZnJvbSUyMG9wZW5haSUyMGltcG9ydCUyME9wZW5BSSUwQWZyb20lMjByZXBsX2VudiUyMGltcG9ydCUyMExvY2FsUkxNUnVubmVyJTBBJTBBY2xpZW50JTIwJTNEJTIwT3BlbkFJKGJhc2VfdXJsJTNEJTIyaHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTgwMDAlMkZ2MSUyMiUyQyUyMGFwaV9rZXklM0QlMjJ1bnVzZWQlMjIpJTBBJTBBZGVmJTIwY2hhdF9mbihtZXNzYWdlcyUyQyUyMG1vZGVsJTNETm9uZSklM0ElMEElMjAlMjAlMjAlMjByZXNwb25zZSUyMCUzRCUyMGNsaWVudC5jaGF0LmNvbXBsZXRpb25zLmNyZWF0ZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTIwb3IlMjAlMjJRd2VuJTJGUXdlbjMuNS05QiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lc3NhZ2VzJTNEbWVzc2FnZXMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfdG9rZW5zJTNEMjA0OCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRlbXBlcmF0dXJlJTNEMC42JTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHJlc3BvbnNlLmNob2ljZXMlNUIwJTVELm1lc3NhZ2UuY29udGVudCUwQSUwQXJ1bm5lciUyMCUzRCUyMExvY2FsUkxNUnVubmVyKGNoYXRfZm4lMkMlMjBtYXhfaXRlcmF0aW9ucyUzRDMwJTJDJTIwbWF4X2RlcHRoJTNEMiklMEFyZXN1bHQlMjAlM0QlMjBydW5uZXIucnVuKGNvbnRleHQlMkMlMjB0YXNrKQ==",highlighted:`<span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> LocalRLMRunner
client = OpenAI(base_url=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>, api_key=<span class="hljs-string">&quot;unused&quot;</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">chat_fn</span>(<span class="hljs-params">messages, model=<span class="hljs-literal">None</span></span>):
response = client.chat.completions.create(
model=model <span class="hljs-keyword">or</span> <span class="hljs-string">&quot;Qwen/Qwen3.5-9B&quot;</span>,
messages=messages,
max_tokens=<span class="hljs-number">2048</span>,
temperature=<span class="hljs-number">0.6</span>,
)
<span class="hljs-keyword">return</span> response.choices[<span class="hljs-number">0</span>].message.content
runner = LocalRLMRunner(chat_fn, max_iterations=<span class="hljs-number">30</span>, max_depth=<span class="hljs-number">2</span>)
result = runner.run(context, task)`,lang:"python",wrap:!1}}),D=new d({props:{title:"Using Different Models for Outer and Inner Loops",local:"using-different-models-for-outer-and-inner-loops",headingTag:"h3"}}),le=new w({props:{code:"ZnJvbSUyMG9wZW5haSUyMGltcG9ydCUyME9wZW5BSSUwQWZyb20lMjBodWdnaW5nZmFjZV9odWIlMjBpbXBvcnQlMjBJbmZlcmVuY2VDbGllbnQlMEFmcm9tJTIwcmVwbF9lbnYlMjBpbXBvcnQlMjBMb2NhbFJMTVJ1bm5lciUwQWZyb20lMjByZXBsX2Vudi5yZWN1cnNpdmVfYmFja2VuZHMlMjBpbXBvcnQlMjBCYWNrZW5kTGltaXRzJTJDJTIwTG9jYWxDaGlsZFJMTUJhY2tlbmQlMEElMEElMjMlMjBPdXRlciUyMGxvb3AlM0ElMjBsYXJnZSUyMGxvY2FsJTIwbW9kZWwlMjB2aWElMjB2TExNJTBBdmxsbSUyMCUzRCUyME9wZW5BSShiYXNlX3VybCUzRCUyMmh0dHAlM0ElMkYlMkZsb2NhbGhvc3QlM0E4MDAwJTJGdjElMjIlMkMlMjBhcGlfa2V5JTNEJTIydW51c2VkJTIyKSUwQSUwQWRlZiUyMG91dGVyX2NoYXQobWVzc2FnZXMlMkMlMjBtb2RlbCUzRE5vbmUpJTNBJTBBJTIwJTIwJTIwJTIwciUyMCUzRCUyMHZsbG0uY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbW9kZWwlM0QlMjJRd2VuJTJGUXdlbjMtMzJCJTIyJTJDJTIwbWVzc2FnZXMlM0RtZXNzYWdlcyUyQyUyMG1heF90b2tlbnMlM0QyMDQ4JTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHIuY2hvaWNlcyU1QjAlNUQubWVzc2FnZS5jb250ZW50JTBBJTBBJTIzJTIwSW5uZXIlMjBjYWxscyUyMChsbG1fcXVlcnklMkZybG1fcXVlcnkpJTNBJTIwc21hbGxlciUyMEhGLWhvc3RlZCUyMG1vZGVsJTBBaGYlMjAlM0QlMjBJbmZlcmVuY2VDbGllbnQobW9kZWwlM0QlMjJRd2VuJTJGUXdlbjMuNS05QiUyMiklMEElMEFkZWYlMjBpbm5lcl9jaGF0KG1lc3NhZ2VzJTJDJTIwbW9kZWwlM0ROb25lKSUzQSUwQSUyMCUyMCUyMCUyMHIlMjAlM0QlMjBoZi5jaGF0LmNvbXBsZXRpb25zLmNyZWF0ZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTIwb3IlMjAlMjJRd2VuJTJGUXdlbjMuNS05QiUyMiUyQyUyMG1lc3NhZ2VzJTNEbWVzc2FnZXMlMkMlMjBtYXhfdG9rZW5zJTNEMjA0OCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4dHJhX2JvZHklM0QlN0IlMjJjaGF0X3RlbXBsYXRlX2t3YXJncyUyMiUzQSUyMCU3QiUyMmVuYWJsZV90aGlua2luZyUyMiUzQSUyMEZhbHNlJTdEJTdEJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHIuY2hvaWNlcyU1QjAlNUQubWVzc2FnZS5jb250ZW50JTBBJTBBZGVmJTIwbXlfYmFja2VuZF9mYWN0b3J5KGxsbV9jaGF0X2ZuJTJDJTIwKiprd2FyZ3MpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwTG9jYWxDaGlsZFJMTUJhY2tlbmQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5uZXJfY2hhdCUyQyUyMCUyMCUyMyUyMGlubmVyJTIwY2FsbHMlMjB1c2UlMjB0aGUlMjBzbWFsbGVyJTIwbW9kZWwlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBydW5uZXJfZmFjdG9yeSUzRExvY2FsUkxNUnVubmVyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3lzdGVtX3Byb21wdCUzRGt3YXJncyU1QiUyMnN5c3RlbV9wcm9tcHQlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfaXRlcmF0aW9ucyUzRGt3YXJncyU1QiUyMm1heF9pdGVyYXRpb25zJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW52X21heF9pdGVyYXRpb25zX211bHRpcGxpZXIlM0Rrd2FyZ3MlNUIlMjJlbnZfbWF4X2l0ZXJhdGlvbnNfbXVsdGlwbGllciUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlcHRoJTNEa3dhcmdzJTVCJTIyZGVwdGglMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsaW1pdHMlM0RCYWNrZW5kTGltaXRzKG1heF9kZXB0aCUzRDIpJTJDJTBBJTIwJTIwJTIwJTIwKSUwQSUwQXJ1bm5lciUyMCUzRCUyMExvY2FsUkxNUnVubmVyKCUwQSUyMCUyMCUyMCUyMG91dGVyX2NoYXQlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBvdXRlciUyMGxvb3AlM0ElMjBsYXJnZSUyMG1vZGVsJTBBJTIwJTIwJTIwJTIwYmFja2VuZF9mYWN0b3J5JTNEbXlfYmFja2VuZF9mYWN0b3J5JTJDJTIwJTIzJTIwaW5uZXIlMjBjYWxscyUzQSUyMHNtYWxsJTIwbW9kZWwlMEElMjAlMjAlMjAlMjBtYXhfaXRlcmF0aW9ucyUzRDMwJTJDJTBBJTIwJTIwJTIwJTIwbWF4X2RlcHRoJTNEMiUyQyUwQSklMEFyZXN1bHQlMjAlM0QlMjBydW5uZXIucnVuKGNvbnRleHQlMkMlMjB0YXNrKQ==",highlighted:`<span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> InferenceClient
<span class="hljs-keyword">from</span> repl_env <span class="hljs-keyword">import</span> LocalRLMRunner
<span class="hljs-keyword">from</span> repl_env.recursive_backends <span class="hljs-keyword">import</span> BackendLimits, LocalChildRLMBackend
<span class="hljs-comment"># Outer loop: large local model via vLLM</span>
vllm = OpenAI(base_url=<span class="hljs-string">&quot;http://localhost:8000/v1&quot;</span>, api_key=<span class="hljs-string">&quot;unused&quot;</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">outer_chat</span>(<span class="hljs-params">messages, model=<span class="hljs-literal">None</span></span>):
r = vllm.chat.completions.create(
model=<span class="hljs-string">&quot;Qwen/Qwen3-32B&quot;</span>, messages=messages, max_tokens=<span class="hljs-number">2048</span>,
)
<span class="hljs-keyword">return</span> r.choices[<span class="hljs-number">0</span>].message.content
<span class="hljs-comment"># Inner calls (llm_query/rlm_query): smaller HF-hosted model</span>
hf = InferenceClient(model=<span class="hljs-string">&quot;Qwen/Qwen3.5-9B&quot;</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">inner_chat</span>(<span class="hljs-params">messages, model=<span class="hljs-literal">None</span></span>):
r = hf.chat.completions.create(
model=model <span class="hljs-keyword">or</span> <span class="hljs-string">&quot;Qwen/Qwen3.5-9B&quot;</span>, messages=messages, max_tokens=<span class="hljs-number">2048</span>,
extra_body={<span class="hljs-string">&quot;chat_template_kwargs&quot;</span>: {<span class="hljs-string">&quot;enable_thinking&quot;</span>: <span class="hljs-literal">False</span>}},
)
<span class="hljs-keyword">return</span> r.choices[<span class="hljs-number">0</span>].message.content
<span class="hljs-keyword">def</span> <span class="hljs-title function_">my_backend_factory</span>(<span class="hljs-params">llm_chat_fn, **kwargs</span>):
<span class="hljs-keyword">return</span> LocalChildRLMBackend(
inner_chat, <span class="hljs-comment"># inner calls use the smaller model</span>
runner_factory=LocalRLMRunner,
system_prompt=kwargs[<span class="hljs-string">&quot;system_prompt&quot;</span>],
max_iterations=kwargs[<span class="hljs-string">&quot;max_iterations&quot;</span>],
env_max_iterations_multiplier=kwargs[<span class="hljs-string">&quot;env_max_iterations_multiplier&quot;</span>],
depth=kwargs[<span class="hljs-string">&quot;depth&quot;</span>],
limits=BackendLimits(max_depth=<span class="hljs-number">2</span>),
)
runner = LocalRLMRunner(
outer_chat, <span class="hljs-comment"># outer loop: large model</span>
backend_factory=my_backend_factory, <span class="hljs-comment"># inner calls: small model</span>
max_iterations=<span class="hljs-number">30</span>,
max_depth=<span class="hljs-number">2</span>,
)
result = runner.run(context, task)`,lang:"python",wrap:!1}}),se=new d({props:{title:"Server",local:"server",headingTag:"h2"}}),ne=new w({props:{code:"UFlUSE9OUEFUSCUzRHNyYyUzQWVudnMlMjB1dmljb3JuJTIwZW52cy5yZXBsX2Vudi5zZXJ2ZXIuYXBwJTNBYXBwJTIwLS1ob3N0JTIwMTI3LjAuMC4xJTIwLS1wb3J0JTIwODAwMA==",highlighted:"PYTHONPATH=src:envs uvicorn envs.repl_env.server.app:app --host 127.0.0.1 --port 8000",lang:"bash",wrap:!1}}),ie=new d({props:{title:"API Surface",local:"api-surface",headingTag:"h2"}}),pe=new d({props:{title:"Remote Client",local:"remote-client",headingTag:"h3"}}),re=new w({props:{code:"Y2xhc3MlMjBSRVBMRW52KEVudkNsaWVudCU1QlJFUExBY3Rpb24lMkMlMjBSRVBMT2JzZXJ2YXRpb24lMkMlMjBSRVBMU3RhdGUlNUQpJTNBJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjBkZWYlMjByZXNldCguLi4pJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjBkZWYlMjBleGVjdXRlKGNvZGUlM0ElMjBzdHIpJTBBJTIwJTIwJTIwJTIwYXN5bmMlMjBkZWYlMjBzdWJtaXRfZmluYWxfYW5zd2VyKGFuc3dlciUzQSUyMHN0ciklMEElMjAlMjAlMjAlMjBhc3luYyUyMGRlZiUyMHN0YXRlKCk=",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">REPLEnv</span>(EnvClient[REPLAction, REPLObservation, REPLState]):
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">reset</span>(<span class="hljs-params">...</span>)
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">execute</span>(<span class="hljs-params">code: <span class="hljs-built_in">str</span></span>)
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">submit_final_answer</span>(<span class="hljs-params">answer: <span class="hljs-built_in">str</span></span>)
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">state</span>()`,lang:"python",wrap:!1}}),ce=new d({props:{title:"Local Helpers",local:"local-helpers",headingTag:"h3"}}),oe=new w({props:{code:"Y2xhc3MlMjBMb2NhbFJFUExFbnYlM0ElMEElMjAlMjAlMjAlMjBkZWYlMjByZXNldCguLi4pJTBBJTIwJTIwJTIwJTIwZGVmJTIwZXhlY3V0ZShjb2RlJTNBJTIwc3RyKSUwQSUyMCUyMCUyMCUyMGRlZiUyMHN0YXRlKCk=",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">LocalREPLEnv</span>:
<span class="hljs-keyword">def</span> <span class="hljs-title function_">reset</span>(<span class="hljs-params">...</span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">execute</span>(<span class="hljs-params">code: <span class="hljs-built_in">str</span></span>)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">state</span>()`,lang:"python",wrap:!1}}),ye=new w({props:{code:"Y2xhc3MlMjBMb2NhbFJMTVJ1bm5lciUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHJ1bihjb250ZXh0JTNBJTIwc3RyJTJDJTIwdGFza19wcm9tcHQlM0ElMjBzdHIlMkMlMjAqJTJDJTIwbW9kZWwlM0ElMjBzdHIlMjAlN0MlMjBOb25lJTIwJTNEJTIwTm9uZSklMjAtJTNFJTIwUkxNUnVuUmVzdWx0",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">LocalRLMRunner</span>:
<span class="hljs-keyword">def</span> <span class="hljs-title function_">run</span>(<span class="hljs-params">context: <span class="hljs-built_in">str</span>, task_prompt: <span class="hljs-built_in">str</span>, *, model: <span class="hljs-built_in">str</span> | <span class="hljs-literal">None</span> = <span class="hljs-literal">None</span></span>) -&gt; RLMRunResult`,lang:"python",wrap:!1}}),me=new d({props:{title:"Actions and Observations",local:"actions-and-observations",headingTag:"h3"}}),de=new w({props:{code:"Y29kZSUzQSUyMHN0ciUyMCUzRCUyMCUyMiUyMiUwQWlzX2ZpbmFsJTNBJTIwYm9vbCUyMCUzRCUyMEZhbHNlJTBBZmluYWxfYW5zd2VyJTNBJTIwc3RyJTIwJTdDJTIwTm9uZSUyMCUzRCUyME5vbmU=",highlighted:`code: <span class="hljs-built_in">str</span> = <span class="hljs-string">&quot;&quot;</span>
is_final: <span class="hljs-built_in">bool</span> = <span class="hljs-literal">False</span>
final_answer: <span class="hljs-built_in">str</span> | <span class="hljs-literal">None</span> = <span class="hljs-literal">None</span>`,lang:"python",wrap:!1}}),Je=new w({props:{code:"cmVzdWx0JTNBJTIwQ29kZUJsb2NrUmVzdWx0JTBBY29udGV4dF9wcmV2aWV3JTNBJTIwc3RyJTIwJTdDJTIwTm9uZSUwQWNvbnRleHRfbGVuZ3RoJTNBJTIwaW50JTBBYXZhaWxhYmxlX3ZhcmlhYmxlcyUzQSUyMGxpc3QlNUJzdHIlNUQlMEFpdGVyYXRpb24lM0ElMjBpbnQlMEFtYXhfaXRlcmF0aW9ucyUzQSUyMGludCUwQWRvbmUlM0ElMjBib29sJTBBcmV3YXJkJTNBJTIwZmxvYXQlMjAlN0MlMjBOb25lJTBBbWV0YWRhdGElM0ElMjBkaWN0",highlighted:`result: CodeBlockResult
context_preview: <span class="hljs-built_in">str</span> | <span class="hljs-literal">None</span>
context_length: <span class="hljs-built_in">int</span>
available_variables: <span class="hljs-built_in">list</span>[<span class="hljs-built_in">str</span>]
iteration: <span class="hljs-built_in">int</span>
max_iterations: <span class="hljs-built_in">int</span>
done: <span class="hljs-built_in">bool</span>
reward: <span class="hljs-built_in">float</span> | <span class="hljs-literal">None</span>
metadata: <span class="hljs-built_in">dict</span>`,lang:"python",wrap:!1}}),je=new d({props:{title:"Injected REPL Helpers",local:"injected-repl-helpers",headingTag:"h2"}}),be=new d({props:{title:"Finalization Patterns",local:"finalization-patterns",headingTag:"h2"}}),Ie=new d({props:{title:"FINAL(...)",local:"final",headingTag:"h3"}}),Ce=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIyYW5zd2VyJTIwJTNEJTIwNDIlMjIpJTBBcmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIycHJpbnQoRklOQUwoYW5zd2VyKSklMjIp",highlighted:`result = env.execute(<span class="hljs-string">&quot;answer = 42&quot;</span>)
result = env.execute(<span class="hljs-string">&quot;print(FINAL(answer))&quot;</span>)`,lang:"python",wrap:!1}}),$e=new d({props:{title:"FINAL_VAR(...)",local:"finalvar",headingTag:"h3"}}),ve=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIybXlfYW5zd2VyJTIwJTNEJTIwJzQyJyUyMiklMEFyZXN1bHQlMjAlM0QlMjBlbnYuZXhlY3V0ZSgncHJpbnQoRklOQUxfVkFSKCUyMm15X2Fuc3dlciUyMikpJyk=",highlighted:`result = env.execute(<span class="hljs-string">&quot;my_answer = &#x27;42&#x27;&quot;</span>)
result = env.execute(<span class="hljs-string">&#x27;print(FINAL_VAR(&quot;my_answer&quot;))&#x27;</span>)`,lang:"python",wrap:!1}}),Be=new d({props:{title:"answer dict",local:"answer-dict",headingTag:"h3"}}),ge=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwZW52LmV4ZWN1dGUoJTIyYW5zd2VyJTVCJ2NvbnRlbnQnJTVEJTIwJTNEJTIwJzQyJyUyMiklMEFyZXN1bHQlMjAlM0QlMjBlbnYuZXhlY3V0ZSglMjJhbnN3ZXIlNUIncmVhZHknJTVEJTIwJTNEJTIwVHJ1ZSUyMik=",highlighted:`result = env.execute(<span class="hljs-string">&quot;answer[&#x27;content&#x27;] = &#x27;42&#x27;&quot;</span>)
result = env.execute(<span class="hljs-string">&quot;answer[&#x27;ready&#x27;] = True&quot;</span>)`,lang:"python",wrap:!1}}),Re=new d({props:{title:"Prompt Utilities",local:"prompt-utilities",headingTag:"h2"}}),Ne=new d({props:{title:"Examples",local:"examples",headingTag:"h2"}}),Le=new d({props:{title:"Environment Variables",local:"environment-variables",headingTag:"h2"}}),We=new d({props:{title:"References",local:"references",headingTag:"h2"}}),Xe=new dt({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/repl.md"}}),{c(){J=y("meta"),He=n(),Ye=y("p"),ze=n(),i(j.$$.fragment),Fe=n(),i(T.$$.fragment),qe=n(),U=y("p"),U.innerHTML=fs,Pe=n(),h=y("ul"),h.innerHTML=bs,Ke=n(),f=y("p"),f.innerHTML=Is,Oe=n(),b=y("ul"),b.innerHTML=Cs,De=n(),i(I.$$.fragment),el=n(),C=y("p"),C.textContent=$s,ll=n(),$=y("ul"),$.innerHTML=vs,sl=n(),i(v.$$.fragment),tl=n(),B=y("p"),B.textContent=Bs,nl=n(),g=y("ul"),g.innerHTML=gs,al=n(),i(R.$$.fragment),il=n(),_=y("ul"),_.innerHTML=Rs,pl=n(),i(E.$$.fragment),rl=n(),k=y("p"),k.innerHTML=_s,Ml=n(),x=y("ul"),x.innerHTML=Es,cl=n(),N=y("p"),N.innerHTML=ks,ol=n(),i(Z.$$.fragment),yl=n(),Q=y("p"),Q.textContent=xs,ml=n(),i(L.$$.fragment),ul=n(),i(V.$$.fragment),dl=n(),i(A.$$.fragment),wl=n(),W=y("p"),W.textContent=Ns,Jl=n(),i(G.$$.fragment),jl=n(),X=y("p"),X.textContent=Zs,Tl=n(),i(Y.$$.fragment),Ul=n(),i(S.$$.fragment),hl=n(),i(H.$$.fragment),fl=n(),i(z.$$.fragment),bl=n(),F=y("p"),F.innerHTML=Qs,Il=n(),q=y("p"),q.textContent=Ls,Cl=n(),i(P.$$.fragment),$l=n(),K=y("p"),K.textContent=Vs,vl=n(),i(O.$$.fragment),Bl=n(),i(D.$$.fragment),gl=n(),ee=y("p"),ee.innerHTML=As,Rl=n(),i(le.$$.fragment),_l=n(),i(se.$$.fragment),El=n(),te=y("p"),te.textContent=Ws,kl=n(),i(ne.$$.fragment),xl=n(),ae=y("p"),ae.innerHTML=Gs,Nl=n(),i(ie.$$.fragment),Zl=n(),i(pe.$$.fragment),Ql=n(),i(re.$$.fragment),Ll=n(),Me=y("p"),Me.innerHTML=Xs,Vl=n(),i(ce.$$.fragment),Al=n(),i(oe.$$.fragment),Wl=n(),i(ye.$$.fragment),Gl=n(),i(me.$$.fragment),Xl=n(),ue=y("p"),ue.innerHTML=Ys,Yl=n(),i(de.$$.fragment),Sl=n(),we=y("p"),we.innerHTML=Ss,Hl=n(),i(Je.$$.fragment),zl=n(),i(je.$$.fragment),Fl=n(),Te=y("p"),Te.textContent=Hs,ql=n(),Ue=y("ul"),Ue.innerHTML=zs,Pl=n(),he=y("p"),he.textContent=Fs,Kl=n(),fe=y("ul"),fe.innerHTML=qs,Ol=n(),i(be.$$.fragment),Dl=n(),i(Ie.$$.fragment),es=n(),i(Ce.$$.fragment),ls=n(),i($e.$$.fragment),ss=n(),i(ve.$$.fragment),ts=n(),i(Be.$$.fragment),ns=n(),i(ge.$$.fragment),as=n(),i(Re.$$.fragment),is=n(),_e=y("p"),_e.innerHTML=Ps,ps=n(),Ee=y("p"),Ee.textContent=Ks,rs=n(),ke=y("ul"),ke.innerHTML=Os,Ms=n(),xe=y("p"),xe.textContent=Ds,cs=n(),i(Ne.$$.fragment),os=n(),Ze=y("ul"),Ze.innerHTML=et,ys=n(),Qe=y("p"),Qe.innerHTML=lt,ms=n(),i(Le.$$.fragment),us=n(),Ve=y("p"),Ve.innerHTML=st,ds=n(),Ae=y("ul"),Ae.innerHTML=tt,ws=n(),i(We.$$.fragment),Js=n(),Ge=y("ul"),Ge.innerHTML=nt,js=n(),i(Xe.$$.fragment),Ts=n(),Se=y("p"),this.h()},l(e){const l=yt("svelte-u9bgzb",document.head);J=m(l,"META",{name:!0,content:!0}),l.forEach(s),He=a(e),Ye=m(e,"P",{}),at(Ye).forEach(s),ze=a(e),p(j.$$.fragment,e),Fe=a(e),p(T.$$.fragment,e),qe=a(e),U=m(e,"P",{"data-svelte-h":!0}),u(U)!=="svelte-1wiagxc"&&(U.innerHTML=fs),Pe=a(e),h=m(e,"UL",{"data-svelte-h":!0}),u(h)!=="svelte-hxrrex"&&(h.innerHTML=bs),Ke=a(e),f=m(e,"P",{"data-svelte-h":!0}),u(f)!=="svelte-id7xsr"&&(f.innerHTML=Is),Oe=a(e),b=m(e,"UL",{"data-svelte-h":!0}),u(b)!=="svelte-7yf1o7"&&(b.innerHTML=Cs),De=a(e),p(I.$$.fragment,e),el=a(e),C=m(e,"P",{"data-svelte-h":!0}),u(C)!=="svelte-1dc1d2e"&&(C.textContent=$s),ll=a(e),$=m(e,"UL",{"data-svelte-h":!0}),u($)!=="svelte-1qd01vt"&&($.innerHTML=vs),sl=a(e),p(v.$$.fragment,e),tl=a(e),B=m(e,"P",{"data-svelte-h":!0}),u(B)!=="svelte-m2smw2"&&(B.textContent=Bs),nl=a(e),g=m(e,"UL",{"data-svelte-h":!0}),u(g)!=="svelte-1gupfkx"&&(g.innerHTML=gs),al=a(e),p(R.$$.fragment,e),il=a(e),_=m(e,"UL",{"data-svelte-h":!0}),u(_)!=="svelte-cf6q10"&&(_.innerHTML=Rs),pl=a(e),p(E.$$.fragment,e),rl=a(e),k=m(e,"P",{"data-svelte-h":!0}),u(k)!=="svelte-14b1kcr"&&(k.innerHTML=_s),Ml=a(e),x=m(e,"UL",{"data-svelte-h":!0}),u(x)!=="svelte-1qsrao4"&&(x.innerHTML=Es),cl=a(e),N=m(e,"P",{"data-svelte-h":!0}),u(N)!=="svelte-1vzcpwu"&&(N.innerHTML=ks),ol=a(e),p(Z.$$.fragment,e),yl=a(e),Q=m(e,"P",{"data-svelte-h":!0}),u(Q)!=="svelte-1qdlcvo"&&(Q.textContent=xs),ml=a(e),p(L.$$.fragment,e),ul=a(e),p(V.$$.fragment,e),dl=a(e),p(A.$$.fragment,e),wl=a(e),W=m(e,"P",{"data-svelte-h":!0}),u(W)!=="svelte-1exwkxi"&&(W.textContent=Ns),Jl=a(e),p(G.$$.fragment,e),jl=a(e),X=m(e,"P",{"data-svelte-h":!0}),u(X)!=="svelte-1dqsj3j"&&(X.textContent=Zs),Tl=a(e),p(Y.$$.fragment,e),Ul=a(e),p(S.$$.fragment,e),hl=a(e),p(H.$$.fragment,e),fl=a(e),p(z.$$.fragment,e),bl=a(e),F=m(e,"P",{"data-svelte-h":!0}),u(F)!=="svelte-i6amc4"&&(F.innerHTML=Qs),Il=a(e),q=m(e,"P",{"data-svelte-h":!0}),u(q)!=="svelte-1182ypr"&&(q.textContent=Ls),Cl=a(e),p(P.$$.fragment,e),$l=a(e),K=m(e,"P",{"data-svelte-h":!0}),u(K)!=="svelte-130vp32"&&(K.textContent=Vs),vl=a(e),p(O.$$.fragment,e),Bl=a(e),p(D.$$.fragment,e),gl=a(e),ee=m(e,"P",{"data-svelte-h":!0}),u(ee)!=="svelte-8zj4v4"&&(ee.innerHTML=As),Rl=a(e),p(le.$$.fragment,e),_l=a(e),p(se.$$.fragment,e),El=a(e),te=m(e,"P",{"data-svelte-h":!0}),u(te)!=="svelte-1l6zkxe"&&(te.textContent=Ws),kl=a(e),p(ne.$$.fragment,e),xl=a(e),ae=m(e,"P",{"data-svelte-h":!0}),u(ae)!=="svelte-j7wuu2"&&(ae.innerHTML=Gs),Nl=a(e),p(ie.$$.fragment,e),Zl=a(e),p(pe.$$.fragment,e),Ql=a(e),p(re.$$.fragment,e),Ll=a(e),Me=m(e,"P",{"data-svelte-h":!0}),u(Me)!=="svelte-h1hay9"&&(Me.innerHTML=Xs),Vl=a(e),p(ce.$$.fragment,e),Al=a(e),p(oe.$$.fragment,e),Wl=a(e),p(ye.$$.fragment,e),Gl=a(e),p(me.$$.fragment,e),Xl=a(e),ue=m(e,"P",{"data-svelte-h":!0}),u(ue)!=="svelte-1jb4424"&&(ue.innerHTML=Ys),Yl=a(e),p(de.$$.fragment,e),Sl=a(e),we=m(e,"P",{"data-svelte-h":!0}),u(we)!=="svelte-dnpz08"&&(we.innerHTML=Ss),Hl=a(e),p(Je.$$.fragment,e),zl=a(e),p(je.$$.fragment,e),Fl=a(e),Te=m(e,"P",{"data-svelte-h":!0}),u(Te)!=="svelte-8y9q5s"&&(Te.textContent=Hs),ql=a(e),Ue=m(e,"UL",{"data-svelte-h":!0}),u(Ue)!=="svelte-1lvakkv"&&(Ue.innerHTML=zs),Pl=a(e),he=m(e,"P",{"data-svelte-h":!0}),u(he)!=="svelte-1biq3pv"&&(he.textContent=Fs),Kl=a(e),fe=m(e,"UL",{"data-svelte-h":!0}),u(fe)!=="svelte-1i1srng"&&(fe.innerHTML=qs),Ol=a(e),p(be.$$.fragment,e),Dl=a(e),p(Ie.$$.fragment,e),es=a(e),p(Ce.$$.fragment,e),ls=a(e),p($e.$$.fragment,e),ss=a(e),p(ve.$$.fragment,e),ts=a(e),p(Be.$$.fragment,e),ns=a(e),p(ge.$$.fragment,e),as=a(e),p(Re.$$.fragment,e),is=a(e),_e=m(e,"P",{"data-svelte-h":!0}),u(_e)!=="svelte-mxil3m"&&(_e.innerHTML=Ps),ps=a(e),Ee=m(e,"P",{"data-svelte-h":!0}),u(Ee)!=="svelte-qfcdmz"&&(Ee.textContent=Ks),rs=a(e),ke=m(e,"UL",{"data-svelte-h":!0}),u(ke)!=="svelte-9fo0l2"&&(ke.innerHTML=Os),Ms=a(e),xe=m(e,"P",{"data-svelte-h":!0}),u(xe)!=="svelte-qfsf2j"&&(xe.textContent=Ds),cs=a(e),p(Ne.$$.fragment,e),os=a(e),Ze=m(e,"UL",{"data-svelte-h":!0}),u(Ze)!=="svelte-lp5oz8"&&(Ze.innerHTML=et),ys=a(e),Qe=m(e,"P",{"data-svelte-h":!0}),u(Qe)!=="svelte-1xx94wb"&&(Qe.innerHTML=lt),ms=a(e),p(Le.$$.fragment,e),us=a(e),Ve=m(e,"P",{"data-svelte-h":!0}),u(Ve)!=="svelte-6c4o9o"&&(Ve.innerHTML=st),ds=a(e),Ae=m(e,"UL",{"data-svelte-h":!0}),u(Ae)!=="svelte-19ynzkt"&&(Ae.innerHTML=tt),ws=a(e),p(We.$$.fragment,e),Js=a(e),Ge=m(e,"UL",{"data-svelte-h":!0}),u(Ge)!=="svelte-15rbvtq"&&(Ge.innerHTML=nt),js=a(e),p(Xe.$$.fragment,e),Ts=a(e),Se=m(e,"P",{}),at(Se).forEach(s),this.h()},h(){it(J,"name","hf:doc:metadata"),it(J,"content",Jt)},m(e,l){mt(document.head,J),t(e,He,l),t(e,Ye,l),t(e,ze,l),r(j,e,l),t(e,Fe,l),r(T,e,l),t(e,qe,l),t(e,U,l),t(e,Pe,l),t(e,h,l),t(e,Ke,l),t(e,f,l),t(e,Oe,l),t(e,b,l),t(e,De,l),r(I,e,l),t(e,el,l),t(e,C,l),t(e,ll,l),t(e,$,l),t(e,sl,l),r(v,e,l),t(e,tl,l),t(e,B,l),t(e,nl,l),t(e,g,l),t(e,al,l),r(R,e,l),t(e,il,l),t(e,_,l),t(e,pl,l),r(E,e,l),t(e,rl,l),t(e,k,l),t(e,Ml,l),t(e,x,l),t(e,cl,l),t(e,N,l),t(e,ol,l),r(Z,e,l),t(e,yl,l),t(e,Q,l),t(e,ml,l),r(L,e,l),t(e,ul,l),r(V,e,l),t(e,dl,l),r(A,e,l),t(e,wl,l),t(e,W,l),t(e,Jl,l),r(G,e,l),t(e,jl,l),t(e,X,l),t(e,Tl,l),r(Y,e,l),t(e,Ul,l),r(S,e,l),t(e,hl,l),r(H,e,l),t(e,fl,l),r(z,e,l),t(e,bl,l),t(e,F,l),t(e,Il,l),t(e,q,l),t(e,Cl,l),r(P,e,l),t(e,$l,l),t(e,K,l),t(e,vl,l),r(O,e,l),t(e,Bl,l),r(D,e,l),t(e,gl,l),t(e,ee,l),t(e,Rl,l),r(le,e,l),t(e,_l,l),r(se,e,l),t(e,El,l),t(e,te,l),t(e,kl,l),r(ne,e,l),t(e,xl,l),t(e,ae,l),t(e,Nl,l),r(ie,e,l),t(e,Zl,l),r(pe,e,l),t(e,Ql,l),r(re,e,l),t(e,Ll,l),t(e,Me,l),t(e,Vl,l),r(ce,e,l),t(e,Al,l),r(oe,e,l),t(e,Wl,l),r(ye,e,l),t(e,Gl,l),r(me,e,l),t(e,Xl,l),t(e,ue,l),t(e,Yl,l),r(de,e,l),t(e,Sl,l),t(e,we,l),t(e,Hl,l),r(Je,e,l),t(e,zl,l),r(je,e,l),t(e,Fl,l),t(e,Te,l),t(e,ql,l),t(e,Ue,l),t(e,Pl,l),t(e,he,l),t(e,Kl,l),t(e,fe,l),t(e,Ol,l),r(be,e,l),t(e,Dl,l),r(Ie,e,l),t(e,es,l),r(Ce,e,l),t(e,ls,l),r($e,e,l),t(e,ss,l),r(ve,e,l),t(e,ts,l),r(Be,e,l),t(e,ns,l),r(ge,e,l),t(e,as,l),r(Re,e,l),t(e,is,l),t(e,_e,l),t(e,ps,l),t(e,Ee,l),t(e,rs,l),t(e,ke,l),t(e,Ms,l),t(e,xe,l),t(e,cs,l),r(Ne,e,l),t(e,os,l),t(e,Ze,l),t(e,ys,l),t(e,Qe,l),t(e,ms,l),r(Le,e,l),t(e,us,l),t(e,Ve,l),t(e,ds,l),t(e,Ae,l),t(e,ws,l),r(We,e,l),t(e,Js,l),t(e,Ge,l),t(e,js,l),r(Xe,e,l),t(e,Ts,l),t(e,Se,l),Us=!0},p:rt,i(e){Us||(M(j.$$.fragment,e),M(T.$$.fragment,e),M(I.$$.fragment,e),M(v.$$.fragment,e),M(R.$$.fragment,e),M(E.$$.fragment,e),M(Z.$$.fragment,e),M(L.$$.fragment,e),M(V.$$.fragment,e),M(A.$$.fragment,e),M(G.$$.fragment,e),M(Y.$$.fragment,e),M(S.$$.fragment,e),M(H.$$.fragment,e),M(z.$$.fragment,e),M(P.$$.fragment,e),M(O.$$.fragment,e),M(D.$$.fragment,e),M(le.$$.fragment,e),M(se.$$.fragment,e),M(ne.$$.fragment,e),M(ie.$$.fragment,e),M(pe.$$.fragment,e),M(re.$$.fragment,e),M(ce.$$.fragment,e),M(oe.$$.fragment,e),M(ye.$$.fragment,e),M(me.$$.fragment,e),M(de.$$.fragment,e),M(Je.$$.fragment,e),M(je.$$.fragment,e),M(be.$$.fragment,e),M(Ie.$$.fragment,e),M(Ce.$$.fragment,e),M($e.$$.fragment,e),M(ve.$$.fragment,e),M(Be.$$.fragment,e),M(ge.$$.fragment,e),M(Re.$$.fragment,e),M(Ne.$$.fragment,e),M(Le.$$.fragment,e),M(We.$$.fragment,e),M(Xe.$$.fragment,e),Us=!0)},o(e){c(j.$$.fragment,e),c(T.$$.fragment,e),c(I.$$.fragment,e),c(v.$$.fragment,e),c(R.$$.fragment,e),c(E.$$.fragment,e),c(Z.$$.fragment,e),c(L.$$.fragment,e),c(V.$$.fragment,e),c(A.$$.fragment,e),c(G.$$.fragment,e),c(Y.$$.fragment,e),c(S.$$.fragment,e),c(H.$$.fragment,e),c(z.$$.fragment,e),c(P.$$.fragment,e),c(O.$$.fragment,e),c(D.$$.fragment,e),c(le.$$.fragment,e),c(se.$$.fragment,e),c(ne.$$.fragment,e),c(ie.$$.fragment,e),c(pe.$$.fragment,e),c(re.$$.fragment,e),c(ce.$$.fragment,e),c(oe.$$.fragment,e),c(ye.$$.fragment,e),c(me.$$.fragment,e),c(de.$$.fragment,e),c(Je.$$.fragment,e),c(je.$$.fragment,e),c(be.$$.fragment,e),c(Ie.$$.fragment,e),c(Ce.$$.fragment,e),c($e.$$.fragment,e),c(ve.$$.fragment,e),c(Be.$$.fragment,e),c(ge.$$.fragment,e),c(Re.$$.fragment,e),c(Ne.$$.fragment,e),c(Le.$$.fragment,e),c(We.$$.fragment,e),c(Xe.$$.fragment,e),Us=!1},d(e){e&&(s(He),s(Ye),s(ze),s(Fe),s(qe),s(U),s(Pe),s(h),s(Ke),s(f),s(Oe),s(b),s(De),s(el),s(C),s(ll),s($),s(sl),s(tl),s(B),s(nl),s(g),s(al),s(il),s(_),s(pl),s(rl),s(k),s(Ml),s(x),s(cl),s(N),s(ol),s(yl),s(Q),s(ml),s(ul),s(dl),s(wl),s(W),s(Jl),s(jl),s(X),s(Tl),s(Ul),s(hl),s(fl),s(bl),s(F),s(Il),s(q),s(Cl),s($l),s(K),s(vl),s(Bl),s(gl),s(ee),s(Rl),s(_l),s(El),s(te),s(kl),s(xl),s(ae),s(Nl),s(Zl),s(Ql),s(Ll),s(Me),s(Vl),s(Al),s(Wl),s(Gl),s(Xl),s(ue),s(Yl),s(Sl),s(we),s(Hl),s(zl),s(Fl),s(Te),s(ql),s(Ue),s(Pl),s(he),s(Kl),s(fe),s(Ol),s(Dl),s(es),s(ls),s(ss),s(ts),s(ns),s(as),s(is),s(_e),s(ps),s(Ee),s(rs),s(ke),s(Ms),s(xe),s(cs),s(os),s(Ze),s(ys),s(Qe),s(ms),s(us),s(Ve),s(ds),s(Ae),s(ws),s(Js),s(Ge),s(js),s(Ts),s(Se)),s(J),o(j,e),o(T,e),o(I,e),o(v,e),o(R,e),o(E,e),o(Z,e),o(L,e),o(V,e),o(A,e),o(G,e),o(Y,e),o(S,e),o(H,e),o(z,e),o(P,e),o(O,e),o(D,e),o(le,e),o(se,e),o(ne,e),o(ie,e),o(pe,e),o(re,e),o(ce,e),o(oe,e),o(ye,e),o(me,e),o(de,e),o(Je,e),o(je,e),o(be,e),o(Ie,e),o(Ce,e),o($e,e),o(ve,e),o(Be,e),o(ge,e),o(Re,e),o(Ne,e),o(Le,e),o(We,e),o(Xe,e)}}}const Jt='{"title":"REPL Environment for OpenEnv","local":"repl-environment-for-openenv","sections":[{"title":"Overview","local":"overview","sections":[],"depth":2},{"title":"Current Architecture","local":"current-architecture","sections":[],"depth":2},{"title":"What Works Today","local":"what-works-today","sections":[],"depth":2},{"title":"Rewards","local":"rewards","sections":[],"depth":2},{"title":"Quick Start","local":"quick-start","sections":[{"title":"Remote Server Usage","local":"remote-server-usage","sections":[],"depth":3},{"title":"Local Environment Usage","local":"local-environment-usage","sections":[],"depth":3},{"title":"Local Recursive RLM Usage","local":"local-recursive-rlm-usage","sections":[],"depth":3},{"title":"Using Different Models for Outer and Inner Loops","local":"using-different-models-for-outer-and-inner-loops","sections":[],"depth":3}],"depth":2},{"title":"Server","local":"server","sections":[],"depth":2},{"title":"API Surface","local":"api-surface","sections":[{"title":"Remote Client","local":"remote-client","sections":[],"depth":3},{"title":"Local Helpers","local":"local-helpers","sections":[],"depth":3},{"title":"Actions and Observations","local":"actions-and-observations","sections":[],"depth":3}],"depth":2},{"title":"Injected REPL Helpers","local":"injected-repl-helpers","sections":[],"depth":2},{"title":"Finalization Patterns","local":"finalization-patterns","sections":[{"title":"FINAL(...)","local":"final","sections":[],"depth":3},{"title":"FINAL_VAR(...)","local":"finalvar","sections":[],"depth":3},{"title":"answer dict","local":"answer-dict","sections":[],"depth":3}],"depth":2},{"title":"Prompt Utilities","local":"prompt-utilities","sections":[],"depth":2},{"title":"Examples","local":"examples","sections":[],"depth":2},{"title":"Environment Variables","local":"environment-variables","sections":[],"depth":2},{"title":"References","local":"references","sections":[],"depth":2}],"depth":1}';function jt(hs){return Mt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class bt extends ct{constructor(J){super(),ot(this,J,jt,wt,pt,{})}}export{bt as component};

Xet Storage Details

Size:
48.5 kB
·
Xet hash:
d6ca93b78c8d5ffdec9e3502460e531b98c9b9bcb3b614e03ad5fd7efe1d6b9d

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