Buckets:

download
raw
48.8 kB
import{s as ys,n as cs,o as ws}from"../chunks/scheduler.2b22cead.js";import{S as us,i as Us,e as i,s as n,c as p,h as js,a as M,d as l,b as a,f as ms,g as o,j as y,k as Ts,l as ds,m as s,n as J,t as r,o as m,p as T}from"../chunks/index.1a0e8013.js";import{C as Is,H as c,E as gs}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.f5f19e58.js";import{C as w}from"../chunks/CodeBlock.640a2a71.js";function hs(bl){let u,Le,Fe,qe,U,De,j,Pe,d,fl='An OpenEnv environment that integrates the <a href="https://github.com/open-thought/reasoning-gym" rel="nofollow">Reasoning Gym</a> library to provide single-step reasoning tasks. Each episode presents one question from a configurable dataset, the agent submits an answer, and receives a score.',Oe,I,Ke,g,vl="The simplest way to use the Reasoning Gym environment is through the <code>ReasoningGymEnv</code> class:",et,h,tt,C,$l="That’s it! The <code>ReasoningGymEnv.from_docker_image()</code> method handles:",lt,b,Bl="<li>Starting the Docker container</li> <li>Waiting for the server to be ready</li> <li>Connecting to the environment</li> <li>Container cleanup when you call <code>close()</code></li>",st,f,nt,v,Wl="Before using the environment, you need to build the Docker image:",at,$,it,B,Mt,W,Zl="You can easily deploy your OpenEnv environment to Hugging Face Spaces using the <code>openenv push</code> command:",pt,Z,ot,A,Al="The <code>openenv push</code> command will:",Jt,G,Gl="<li>Validate that the directory is an OpenEnv environment (checks for <code>openenv.yaml</code>)</li> <li>Prepare a custom build for Hugging Face Docker space (enables web interface)</li> <li>Upload to Hugging Face (ensuring you’re logged in)</li>",rt,R,mt,E,Rl="<li>Authenticate with Hugging Face: The command will prompt for login if not already authenticated</li>",Tt,N,yt,V,El="<li><code>--directory</code>, <code>-d</code>: Directory containing the OpenEnv environment (defaults to current directory)</li> <li><code>--repo-id</code>, <code>-r</code>: Repository ID in format ‘username/repo-name’ (defaults to ‘username/env-name’ from openenv.yaml)</li> <li><code>--base-image</code>, <code>-b</code>: Base Docker image to use (overrides Dockerfile FROM)</li> <li><code>--private</code>: Deploy the space as private (default: public)</li>",ct,x,wt,X,ut,Q,Nl=`After deployment, your space will be available at:
<code>https://huggingface.co/spaces/&lt;repo-id&gt;</code>`,Ut,k,Vl="The deployed space includes:",jt,S,xl="<li><strong>Web Interface</strong> at <code>/web</code> - Interactive UI for exploring the environment</li> <li><strong>API Documentation</strong> at <code>/docs</code> - Full OpenAPI/Swagger interface</li> <li><strong>Health Check</strong> at <code>/health</code> - Container health monitoring</li> <li><strong>WebSocket</strong> at <code>/ws</code> - Persistent session endpoint for low-latency interactions</li>",dt,H,It,z,gt,_,Xl="Each episode is <strong>single-step</strong>:",ht,F,Ql="<li><code>reset()</code> returns a question</li> <li><code>step(answer)</code> returns score and marks episode as done</li> <li><code>reset()</code> without params gets next question from same dataset</li>",Ct,Y,bt,L,kl="<strong>ReasoningGymAction</strong>: Contains the agent’s answer",ft,q,Sl="<li><code>answer</code> (str) - The agent’s answer to the current question</li>",vt,D,$t,P,Hl="<strong>ReasoningGymObservation</strong>: Contains the question or result",Bt,O,zl="<li><code>question</code> (Optional[str]) - The current question (only in reset)</li> <li><code>score</code> (Optional[float]) - Score for the answer, 0.0 to 1.0 (only after step)</li> <li><code>correct_answer</code> (Optional[str]) - The correct answer (only after step)</li> <li><code>dataset_metadata</code> (Optional[Dict]) - Metadata from the reasoning gym dataset entry</li> <li><code>done</code> (bool) - Always True after step (single-step episodes)</li> <li><code>reward</code> (float) - Equal to score (0.0 to 1.0)</li>",Wt,K,Zt,ee,_l="The reward equals the score returned by the dataset’s scoring function:",At,te,Fl="<li>Correct answer → score: 1.0</li> <li>Incorrect answer → score: 0.0 to 1.0 (dataset-dependent, may use partial credit)</li>",Gt,le,Rt,se,Et,ne,Yl="Use a single dataset with configuration:",Nt,ae,Vt,ie,Ll="Available datasets from reasoning_gym library:",xt,Me,ql='<li><code>leg_counting</code> - Count legs of various objects</li> <li><code>reverse_sort</code> - Sort lists in reverse order</li> <li><code>chess_state_eval</code> - Chess position evaluation</li> <li>And more (see <a href="https://github.com/open-thought/reasoning-gym" rel="nofollow">Reasoning Gym documentation</a>)</li>',Xt,pe,Qt,oe,Dl="Mix multiple datasets with custom weights:",kt,Je,St,re,Ht,me,Pl="The dataset persists across resets until configuration changes:",zt,Te,_t,ye,Ft,ce,Yt,we,Ol="If you already have a Reasoning Gym environment server running, you can connect directly:",Lt,ue,qt,Ue,Kl="Note: When connecting to an existing server, <code>env.close()</code> will NOT stop the server.",Dt,je,Pt,de,es="The client supports context manager usage for automatic connection management:",Ot,Ie,Kt,ge,ts="The client uses WebSocket connections for:",el,he,ls="<li><strong>Lower latency</strong>: No HTTP connection overhead per request</li> <li><strong>Persistent session</strong>: Server maintains your environment state</li> <li><strong>Efficient for episodes</strong>: Better for many sequential steps</li>",tl,Ce,ll,be,ss="The server is configured to support multiple concurrent WebSocket connections:",sl,fe,nl,ve,al,$e,il,Be,ns="Test the environment logic directly without starting the HTTP server:",Ml,We,pl,Ze,as="This verifies that:",ol,Ae,is="<li>Environment resets correctly</li> <li>Step executes actions properly</li> <li>Dataset creation and iteration works</li> <li>Scoring is calculated correctly</li>",Jl,Ge,rl,Re,Ms="Run the server locally for development:",ml,Ee,Tl,Ne,ps="Then test with:",yl,Ve,cl,xe,wl,Xe,ul,Qe,Ul,ke,os="The Reasoning Gym environment is ideal for:",jl,Se,Js="<li><strong>LLM Evaluation</strong>: Benchmark reasoning capabilities across diverse tasks</li> <li><strong>Agent Training</strong>: Train RL agents on reasoning tasks with clear score signals</li> <li><strong>Curriculum Learning</strong>: Mix datasets with composite configurations for progressive difficulty</li> <li><strong>Research</strong>: Reproducible environments with seed control for scientific experiments</li> <li><strong>Educational</strong>: Learn about environment design and agent-environment interaction</li>",dl,He,Il,ze,rs='<li><a href="https://github.com/open-thought/reasoning-gym" rel="nofollow">Reasoning Gym Library</a></li> <li><a href="https://github.com/huggingface/OpenEnv" rel="nofollow">OpenEnv Documentation</a></li> <li><a href="https://github.com/huggingface/OpenEnv/blob/main/README.md" rel="nofollow">OpenEnv Environment Design</a></li>',gl,_e,hl,Ye,Cl;return U=new Is({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),j=new c({props:{title:"Reasoning Gym Environment",local:"reasoning-gym-environment",headingTag:"h1"}}),I=new c({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),h=new w({props:{code:"ZnJvbSUyMHJlYXNvbmluZ19neW1fZW52JTIwaW1wb3J0JTIwUmVhc29uaW5nR3ltQWN0aW9uJTJDJTIwUmVhc29uaW5nR3ltRW52JTBBJTBBdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ3JlYXRlJTIwZW52aXJvbm1lbnQlMjBmcm9tJTIwRG9ja2VyJTIwaW1hZ2UlMEElMjAlMjAlMjAlMjBlbnYlMjAlM0QlMjBSZWFzb25pbmdHeW1FbnYuZnJvbV9kb2NrZXJfaW1hZ2UoJTIycmVhc29uaW5nX2d5bS1lbnYlM0FsYXRlc3QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ3JlYXRlJTIwYSUyMGRhdGFzZXQlMjB3aXRoJTIwMTAlMjBsZWdfY291bnRpbmclMjBxdWVzdGlvbnMlMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGF0YXNldF9uYW1lJTNEJ2xlZ19jb3VudGluZyclMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWVkJTNENDIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaXplJTNEMTAlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlF1ZXN0aW9uJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLnF1ZXN0aW9uJTdEJTIyKSUwQSUyMCUyMCUyMCUyMCUyMyUyMFF1ZXN0aW9uJTNBJTIwJTIySG93JTIwbWFueSUyMGxlZ3MlMjBkb2VzJTIwYSUyMGNhdCUyMGhhdmUlM0YlMjIlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTdWJtaXQlMjBhbnN3ZXIlMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYuc3RlcChSZWFzb25pbmdHeW1BY3Rpb24oYW5zd2VyJTNEJTIyNCUyMikpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlNjb3JlJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLnNjb3JlJTdEJTIyKSUyMCUyMCUyMyUyMDEuMCUyMChjb3JyZWN0KSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJDb3JyZWN0JTIwYW5zd2VyJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLmNvcnJlY3RfYW5zd2VyJTdEJTIyKSUyMCUyMCUyMyUyMCUyMjQlMjIlMEElMjAlMjAlMjAlMjBwcmludChmJTIyUmV3YXJkJTNBJTIwJTdCcmVzdWx0LnJld2FyZCU3RCUyMiklMjAlMjAlMjMlMjAxLjAlMEElMjAlMjAlMjAlMjBwcmludChmJTIyRG9uZSUzQSUyMCU3QnJlc3VsdC5kb25lJTdEJTIyKSUyMCUyMCUyMyUyMFRydWUlMjAoc2luZ2xlLXN0ZXAlMjBlcGlzb2RlcyklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBBY2Nlc3MlMjBkYXRhc2V0JTIwbWV0YWRhdGElMjBpZiUyMGF2YWlsYWJsZSUwQSUyMCUyMCUyMCUyMGlmJTIwcmVzdWx0Lm9ic2VydmF0aW9uLmRhdGFzZXRfbWV0YWRhdGElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyTWV0YWRhdGElM0ElMjAlN0JyZXN1bHQub2JzZXJ2YXRpb24uZGF0YXNldF9tZXRhZGF0YSU3RCUyMiklMjAlMjAlMjMlMjBEYXRhc2V0LXNwZWNpZmljJTIwaW5mbyUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEdldCUyMG5leHQlMjBxdWVzdGlvbiUyMGZyb20lMjBzYW1lJTIwZGF0YXNldCUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5yZXNldCgpJTIwJTIwJTIzJTIwTm8lMjBwYXJhbXMlMjAlM0QlMjByZXVzZSUyMGRhdGFzZXQlMEElMjAlMjAlMjAlMjBwcmludChmJTIyTmV4dCUyMHF1ZXN0aW9uJTNBJTIwJTdCcmVzdWx0Lm9ic2VydmF0aW9uLnF1ZXN0aW9uJTdEJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyME5vdGUlM0ElMjBGaXJzdCUyMHJlc2V0KCklMjB3aXRob3V0JTIwcGFyYW1zJTIwY3JlYXRlcyUyMGElMjBkZWZhdWx0JTIwbGVnX2NvdW50aW5nJTIwZGF0YXNldCUwQSUyMCUyMCUyMCUyMCUyMyUyMHdpdGglMjBzZWVkJTNENDIlMjBhbmQlMjBzaXplJTNEMTAwMCUyMGZvciUyMHJlcHJvZHVjaWJsZSUyQyUyMG91dC1vZi10aGUtYm94JTIwZnVuY3Rpb25hbGl0eSUwQSUwQWZpbmFsbHklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBBbHdheXMlMjBjbGVhbiUyMHVwJTBBJTIwJTIwJTIwJTIwZW52LmNsb3NlKCk=",highlighted:`<span class="hljs-keyword">from</span> reasoning_gym_env <span class="hljs-keyword">import</span> ReasoningGymAction, ReasoningGymEnv
<span class="hljs-keyword">try</span>:
<span class="hljs-comment"># Create environment from Docker image</span>
env = ReasoningGymEnv.from_docker_image(<span class="hljs-string">&quot;reasoning_gym-env:latest&quot;</span>)
<span class="hljs-comment"># Create a dataset with 10 leg_counting questions</span>
result = env.reset(
dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>,
seed=<span class="hljs-number">42</span>,
size=<span class="hljs-number">10</span>
)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Question: <span class="hljs-subst">{result.observation.question}</span>&quot;</span>)
<span class="hljs-comment"># Question: &quot;How many legs does a cat have?&quot;</span>
<span class="hljs-comment"># Submit answer</span>
result = env.step(ReasoningGymAction(answer=<span class="hljs-string">&quot;4&quot;</span>))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Score: <span class="hljs-subst">{result.observation.score}</span>&quot;</span>) <span class="hljs-comment"># 1.0 (correct)</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Correct answer: <span class="hljs-subst">{result.observation.correct_answer}</span>&quot;</span>) <span class="hljs-comment"># &quot;4&quot;</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Reward: <span class="hljs-subst">{result.reward}</span>&quot;</span>) <span class="hljs-comment"># 1.0</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Done: <span class="hljs-subst">{result.done}</span>&quot;</span>) <span class="hljs-comment"># True (single-step episodes)</span>
<span class="hljs-comment"># Access dataset metadata if available</span>
<span class="hljs-keyword">if</span> result.observation.dataset_metadata:
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Metadata: <span class="hljs-subst">{result.observation.dataset_metadata}</span>&quot;</span>) <span class="hljs-comment"># Dataset-specific info</span>
<span class="hljs-comment"># Get next question from same dataset</span>
result = env.reset() <span class="hljs-comment"># No params = reuse dataset</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Next question: <span class="hljs-subst">{result.observation.question}</span>&quot;</span>)
<span class="hljs-comment"># Note: First reset() without params creates a default leg_counting dataset</span>
<span class="hljs-comment"># with seed=42 and size=1000 for reproducible, out-of-the-box functionality</span>
<span class="hljs-keyword">finally</span>:
<span class="hljs-comment"># Always clean up</span>
env.close()`,lang:"python",wrap:!1}}),f=new c({props:{title:"Building the Docker Image",local:"building-the-docker-image",headingTag:"h2"}}),$=new w({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMHJlYXNvbmluZ19neW1fZW52JTIwZGlyZWN0b3J5JTBBZG9ja2VyJTIwYnVpbGQlMjAtdCUyMHJlYXNvbmluZ19neW0tZW52JTNBbGF0ZXN0JTIwLWYlMjBzZXJ2ZXIlMkZEb2NrZXJmaWxlJTIwLg==",highlighted:`<span class="hljs-comment"># From the reasoning_gym_env directory</span>
docker build -t reasoning_gym-env:latest -f server/Dockerfile .`,lang:"bash",wrap:!1}}),B=new c({props:{title:"Deploying to Hugging Face Spaces",local:"deploying-to-hugging-face-spaces",headingTag:"h2"}}),Z=new w({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMGVudmlyb25tZW50JTIwZGlyZWN0b3J5JTIwKHdoZXJlJTIwb3BlbmVudi55YW1sJTIwaXMlMjBsb2NhdGVkKSUwQW9wZW5lbnYlMjBwdXNoJTBBJTBBJTIzJTIwT3IlMjBzcGVjaWZ5JTIwb3B0aW9ucyUwQW9wZW5lbnYlMjBwdXNoJTIwLS1uYW1lc3BhY2UlMjBteS1vcmclMjAtLXByaXZhdGU=",highlighted:`<span class="hljs-comment"># From the environment directory (where openenv.yaml is located)</span>
openenv push
<span class="hljs-comment"># Or specify options</span>
openenv push --namespace my-org --private`,lang:"bash",wrap:!1}}),R=new c({props:{title:"Prerequisites",local:"prerequisites",headingTag:"h3"}}),N=new c({props:{title:"Options",local:"options",headingTag:"h3"}}),x=new c({props:{title:"Examples",local:"examples",headingTag:"h3"}}),X=new w({props:{code:"JTIzJTIwUHVzaCUyMHRvJTIweW91ciUyMHBlcnNvbmFsJTIwbmFtZXNwYWNlJTIwKGRlZmF1bHRzJTIwdG8lMjB1c2VybmFtZSUyRmVudi1uYW1lJTIwZnJvbSUyMG9wZW5lbnYueWFtbCklMEFvcGVuZW52JTIwcHVzaCUwQSUwQSUyMyUyMFB1c2glMjB0byUyMGElMjBzcGVjaWZpYyUyMHJlcG9zaXRvcnklMEFvcGVuZW52JTIwcHVzaCUyMC0tcmVwby1pZCUyMG15LW9yZyUyRnJlYXNvbmluZy1neW0tZW52JTBBJTBBJTIzJTIwUHVzaCUyMHdpdGglMjBhJTIwY3VzdG9tJTIwYmFzZSUyMGltYWdlJTBBb3BlbmVudiUyMHB1c2glMjAtLWJhc2UtaW1hZ2UlMjBnaGNyLmlvJTJGaHVnZ2luZ2ZhY2UlMkZvcGVuZW52LWJhc2UlM0FsYXRlc3QlMEElMEElMjMlMjBQdXNoJTIwYXMlMjBhJTIwcHJpdmF0ZSUyMHNwYWNlJTBBb3BlbmVudiUyMHB1c2glMjAtLXByaXZhdGUlMEElMEElMjMlMjBDb21iaW5lJTIwb3B0aW9ucyUwQW9wZW5lbnYlMjBwdXNoJTIwLS1yZXBvLWlkJTIwbXktb3JnJTJGcmVhc29uaW5nLWd5bSUyMC0tYmFzZS1pbWFnZSUyMGN1c3RvbS1iYXNlJTNBbGF0ZXN0JTIwLS1wcml2YXRl",highlighted:`<span class="hljs-comment"># Push to your personal namespace (defaults to username/env-name from openenv.yaml)</span>
openenv push
<span class="hljs-comment"># Push to a specific repository</span>
openenv push --repo-id my-org/reasoning-gym-env
<span class="hljs-comment"># Push with a custom base image</span>
openenv push --base-image ghcr.io/huggingface/openenv-base:latest
<span class="hljs-comment"># Push as a private space</span>
openenv push --private
<span class="hljs-comment"># Combine options</span>
openenv push --repo-id my-org/reasoning-gym --base-image custom-base:latest --private`,lang:"bash",wrap:!1}}),H=new c({props:{title:"Environment Details",local:"environment-details",headingTag:"h2"}}),z=new c({props:{title:"Episode Structure",local:"episode-structure",headingTag:"h3"}}),Y=new c({props:{title:"Action",local:"action",headingTag:"h3"}}),D=new c({props:{title:"Observation",local:"observation",headingTag:"h3"}}),K=new c({props:{title:"Reward",local:"reward",headingTag:"h3"}}),le=new c({props:{title:"Dataset Configuration",local:"dataset-configuration",headingTag:"h2"}}),se=new c({props:{title:"Simple Datasets",local:"simple-datasets",headingTag:"h3"}}),ae=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwZW52LnJlc2V0KCUwQSUyMCUyMCUyMCUyMGRhdGFzZXRfbmFtZSUzRCdsZWdfY291bnRpbmcnJTJDJTBBJTIwJTIwJTIwJTIwc2VlZCUzRDQyJTJDJTBBJTIwJTIwJTIwJTIwc2l6ZSUzRDEwJTBBKQ==",highlighted:`result = env.reset(
dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>,
seed=<span class="hljs-number">42</span>,
size=<span class="hljs-number">10</span>
)`,lang:"python",wrap:!1}}),pe=new c({props:{title:"Composite Datasets",local:"composite-datasets",headingTag:"h3"}}),Je=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwZW52LnJlc2V0KCUwQSUyMCUyMCUyMCUyMGRhdGFzZXRfbmFtZSUzRCdjb21wb3NpdGUnJTJDJTBBJTIwJTIwJTIwJTIwZGF0YXNldF9zcGVjcyUzRCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMm5hbWUlMjIlM0ElMjAlMjJsZWdfY291bnRpbmclMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJ3ZWlnaHQlMjIlM0ElMjAzJTJDJTIwJTIwJTIzJTIwM3glMjBtb3JlJTIwbGlrZWx5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY29uZmlnJTIyJTNBJTIwJTdCJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybmFtZSUyMiUzQSUyMCUyMnJldmVyc2Vfc29ydCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMndlaWdodCUyMiUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb25maWclMjIlM0ElMjAlN0IlMjJtaW5fbGVuZ3RoJTIyJTNBJTIwMyUyQyUyMCUyMm1heF9sZW5ndGglMjIlM0ElMjA1JTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTVEJTJDJTBBJTIwJTIwJTIwJTIwc2VlZCUzRDQyJTJDJTBBJTIwJTIwJTIwJTIwc2l6ZSUzRDIwJTBBKQ==",highlighted:`result = env.reset(
dataset_name=<span class="hljs-string">&#x27;composite&#x27;</span>,
dataset_specs=[
{
<span class="hljs-string">&quot;name&quot;</span>: <span class="hljs-string">&quot;leg_counting&quot;</span>,
<span class="hljs-string">&quot;weight&quot;</span>: <span class="hljs-number">3</span>, <span class="hljs-comment"># 3x more likely</span>
<span class="hljs-string">&quot;config&quot;</span>: {}
},
{
<span class="hljs-string">&quot;name&quot;</span>: <span class="hljs-string">&quot;reverse_sort&quot;</span>,
<span class="hljs-string">&quot;weight&quot;</span>: <span class="hljs-number">1</span>,
<span class="hljs-string">&quot;config&quot;</span>: {<span class="hljs-string">&quot;min_length&quot;</span>: <span class="hljs-number">3</span>, <span class="hljs-string">&quot;max_length&quot;</span>: <span class="hljs-number">5</span>}
}
],
seed=<span class="hljs-number">42</span>,
size=<span class="hljs-number">20</span>
)`,lang:"python",wrap:!1}}),re=new c({props:{title:"Dataset Persistence",local:"dataset-persistence",headingTag:"h3"}}),Te=new w({props:{code:"JTIzJTIwQ3JlYXRlJTIwZGF0YXNldCUwQXJlc3VsdCUyMCUzRCUyMGVudi5yZXNldChkYXRhc2V0X25hbWUlM0QnbGVnX2NvdW50aW5nJyUyQyUyMHNlZWQlM0Q0MiUyQyUyMHNpemUlM0QxMCklMEFxdWVzdGlvbjElMjAlM0QlMjByZXN1bHQub2JzZXJ2YXRpb24ucXVlc3Rpb24lMEElMEElMjMlMjBHZXQlMjBuZXh0JTIwcXVlc3Rpb24lMjBmcm9tJTIwU0FNRSUyMGRhdGFzZXQlMEFyZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoKSUyMCUyMCUyMyUyME5vJTIwcGFyYW1zJTIwJTNEJTIwcmV1c2UlMjBkYXRhc2V0JTBBcXVlc3Rpb24yJTIwJTNEJTIwcmVzdWx0Lm9ic2VydmF0aW9uLnF1ZXN0aW9uJTBBJTBBJTIzJTIwQ3JlYXRlJTIwTkVXJTIwZGF0YXNldCUyMChkaWZmZXJlbnQlMjBzZWVkKSUwQXJlc3VsdCUyMCUzRCUyMGVudi5yZXNldChkYXRhc2V0X25hbWUlM0QnbGVnX2NvdW50aW5nJyUyQyUyMHNlZWQlM0Q5OSUyQyUyMHNpemUlM0QxMCklMEFxdWVzdGlvbjMlMjAlM0QlMjByZXN1bHQub2JzZXJ2YXRpb24ucXVlc3Rpb24lMjAlMjAlMjMlMjBGcm9tJTIwbmV3JTIwZGF0YXNldA==",highlighted:`<span class="hljs-comment"># Create dataset</span>
result = env.reset(dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>, seed=<span class="hljs-number">42</span>, size=<span class="hljs-number">10</span>)
question1 = result.observation.question
<span class="hljs-comment"># Get next question from SAME dataset</span>
result = env.reset() <span class="hljs-comment"># No params = reuse dataset</span>
question2 = result.observation.question
<span class="hljs-comment"># Create NEW dataset (different seed)</span>
result = env.reset(dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>, seed=<span class="hljs-number">99</span>, size=<span class="hljs-number">10</span>)
question3 = result.observation.question <span class="hljs-comment"># From new dataset</span>`,lang:"python",wrap:!1}}),ye=new c({props:{title:"Advanced Usage",local:"advanced-usage",headingTag:"h2"}}),ce=new c({props:{title:"Connecting to an Existing Server",local:"connecting-to-an-existing-server",headingTag:"h3"}}),ue=new w({props:{code:"ZnJvbSUyMHJlYXNvbmluZ19neW1fZW52JTIwaW1wb3J0JTIwUmVhc29uaW5nR3ltRW52JTJDJTIwUmVhc29uaW5nR3ltQWN0aW9uJTBBJTBBJTIzJTIwQ29ubmVjdCUyMHRvJTIwZXhpc3RpbmclMjBzZXJ2ZXIlMEFlbnYlMjAlM0QlMjBSZWFzb25pbmdHeW1FbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMiklMEElMEElMjMlMjBVc2UlMjBhcyUyMG5vcm1hbCUwQXJlc3VsdCUyMCUzRCUyMGVudi5yZXNldCglMEElMjAlMjAlMjAlMjBkYXRhc2V0X25hbWUlM0QnbGVnX2NvdW50aW5nJyUyQyUwQSUyMCUyMCUyMCUyMGRhdGFzZXRfY29uZmlnJTNEJTdCJTIybWluX2FuaW1hbHMlMjIlM0ElMjA1JTJDJTIwJTIybWF4X2FuaW1hbHMlMjIlM0ElMjAxNSU3RCUwQSUyMCUyMCUyMCUyMHNlZWQlM0Q0MiUyQyUwQSUyMCUyMCUyMCUyMHNpemUlM0QxMCUwQSklMEFyZXN1bHQlMjAlM0QlMjBlbnYuc3RlcChSZWFzb25pbmdHeW1BY3Rpb24oYW5zd2VyJTNEJTIyNCUyMikp",highlighted:`<span class="hljs-keyword">from</span> reasoning_gym_env <span class="hljs-keyword">import</span> ReasoningGymEnv, ReasoningGymAction
<span class="hljs-comment"># Connect to existing server</span>
env = ReasoningGymEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>)
<span class="hljs-comment"># Use as normal</span>
result = env.reset(
dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>,
dataset_config={<span class="hljs-string">&quot;min_animals&quot;</span>: <span class="hljs-number">5</span>, <span class="hljs-string">&quot;max_animals&quot;</span>: <span class="hljs-number">15</span>}
seed=<span class="hljs-number">42</span>,
size=<span class="hljs-number">10</span>
)
result = env.step(ReasoningGymAction(answer=<span class="hljs-string">&quot;4&quot;</span>))`,lang:"python",wrap:!1}}),je=new c({props:{title:"Using the Context Manager",local:"using-the-context-manager",headingTag:"h3"}}),Ie=new w({props:{code:"ZnJvbSUyMHJlYXNvbmluZ19neW1fZW52JTIwaW1wb3J0JTIwUmVhc29uaW5nR3ltQWN0aW9uJTJDJTIwUmVhc29uaW5nR3ltRW52JTBBJTBBJTIzJTIwQ29ubmVjdCUyMHdpdGglMjBjb250ZXh0JTIwbWFuYWdlciUyMChhdXRvLWNvbm5lY3RzJTIwYW5kJTIwY2xvc2VzKSUwQXdpdGglMjBSZWFzb25pbmdHeW1FbnYoYmFzZV91cmwlM0QlMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMiklMjBhcyUyMGVudiUzQSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5yZXNldCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkYXRhc2V0X25hbWUlM0QnbGVnX2NvdW50aW5nJyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlZWQlM0Q0MiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNpemUlM0Q1JTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJRdWVzdGlvbiUzQSUyMCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5xdWVzdGlvbiU3RCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBNdWx0aXBsZSUyMHN0ZXBzJTIwd2l0aCUyMGxvdyUyMGxhdGVuY3klMEElMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSg1KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5zdGVwKFJlYXNvbmluZ0d5bUFjdGlvbihhbnN3ZXIlM0QlMjI0JTIyKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludChmJTIyU2NvcmUlM0ElMjAlN0JyZXN1bHQub2JzZXJ2YXRpb24uc2NvcmUlN0QlMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjByZXN1bHQuZG9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5yZXNldCgpJTIwJTIwJTIzJTIwR2V0JTIwbmV4dCUyMHF1ZXN0aW9u",highlighted:`<span class="hljs-keyword">from</span> reasoning_gym_env <span class="hljs-keyword">import</span> ReasoningGymAction, ReasoningGymEnv
<span class="hljs-comment"># Connect with context manager (auto-connects and closes)</span>
<span class="hljs-keyword">with</span> ReasoningGymEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>) <span class="hljs-keyword">as</span> env:
result = env.reset(
dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>,
seed=<span class="hljs-number">42</span>,
size=<span class="hljs-number">5</span>
)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Question: <span class="hljs-subst">{result.observation.question}</span>&quot;</span>)
<span class="hljs-comment"># Multiple steps with low latency</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">5</span>):
result = env.step(ReasoningGymAction(answer=<span class="hljs-string">&quot;4&quot;</span>))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Score: <span class="hljs-subst">{result.observation.score}</span>&quot;</span>)
<span class="hljs-keyword">if</span> result.done:
result = env.reset() <span class="hljs-comment"># Get next question</span>`,lang:"python",wrap:!1}}),Ce=new c({props:{title:"Concurrent WebSocket Sessions",local:"concurrent-websocket-sessions",headingTag:"h3"}}),fe=new w({props:{code:"ZnJvbSUyMHJlYXNvbmluZ19neW1fZW52JTIwaW1wb3J0JTIwUmVhc29uaW5nR3ltQWN0aW9uJTJDJTIwUmVhc29uaW5nR3ltRW52JTBBZnJvbSUyMGNvbmN1cnJlbnQuZnV0dXJlcyUyMGltcG9ydCUyMFRocmVhZFBvb2xFeGVjdXRvciUwQSUwQWRlZiUyMHJ1bl9lcGlzb2RlKGNsaWVudF9pZCUzQSUyMGludCklM0ElMEElMjAlMjAlMjAlMjB3aXRoJTIwUmVhc29uaW5nR3ltRW52KGJhc2VfdXJsJTNEJTIyaHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTgwMDAlMjIpJTIwYXMlMjBlbnYlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBlbnYucmVzZXQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGF0YXNldF9uYW1lJTNEJ2xlZ19jb3VudGluZyclMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWVkJTNENDIlMjAlMkIlMjBjbGllbnRfaWQlMkMlMjAlMjAlMjMlMjBEaWZmZXJlbnQlMjBzZWVkJTIwcGVyJTIwY2xpZW50JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2l6ZSUzRDEwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsX3Njb3JlJTIwJTNEJTIwMC4wJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UoMTApJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwZW52LnN0ZXAoUmVhc29uaW5nR3ltQWN0aW9uKGFuc3dlciUzRCUyMjQlMjIpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRvdGFsX3Njb3JlJTIwJTJCJTNEJTIwcmVzdWx0Lm9ic2VydmF0aW9uLnNjb3JlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjByZXN1bHQuZG9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGVudi5yZXNldCgpJTIwJTIwJTIzJTIwTmV4dCUyMHF1ZXN0aW9uJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwY2xpZW50X2lkJTJDJTIwdG90YWxfc2NvcmUlMEElMEElMjMlMjBSdW4lMjA0JTIwZXBpc29kZXMlMjBjb25jdXJyZW50bHklMEF3aXRoJTIwVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzJTNENCklMjBhcyUyMGV4ZWN1dG9yJTNBJTBBJTIwJTIwJTIwJTIwcmVzdWx0cyUyMCUzRCUyMGxpc3QoZXhlY3V0b3IubWFwKHJ1bl9lcGlzb2RlJTJDJTIwcmFuZ2UoNCkpKSUwQSUyMCUyMCUyMCUyMGZvciUyMGNsaWVudF9pZCUyQyUyMHNjb3JlJTIwaW4lMjByZXN1bHRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoZiUyMkNsaWVudCUyMCU3QmNsaWVudF9pZCU3RCUzQSUyMFRvdGFsJTIwc2NvcmUlMjAlM0QlMjAlN0JzY29yZSU3RCUyMik=",highlighted:`<span class="hljs-keyword">from</span> reasoning_gym_env <span class="hljs-keyword">import</span> ReasoningGymAction, ReasoningGymEnv
<span class="hljs-keyword">from</span> concurrent.futures <span class="hljs-keyword">import</span> ThreadPoolExecutor
<span class="hljs-keyword">def</span> <span class="hljs-title function_">run_episode</span>(<span class="hljs-params">client_id: <span class="hljs-built_in">int</span></span>):
<span class="hljs-keyword">with</span> ReasoningGymEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>) <span class="hljs-keyword">as</span> env:
result = env.reset(
dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>,
seed=<span class="hljs-number">42</span> + client_id, <span class="hljs-comment"># Different seed per client</span>
size=<span class="hljs-number">10</span>
)
total_score = <span class="hljs-number">0.0</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">10</span>):
result = env.step(ReasoningGymAction(answer=<span class="hljs-string">&quot;4&quot;</span>))
total_score += result.observation.score
<span class="hljs-keyword">if</span> result.done:
result = env.reset() <span class="hljs-comment"># Next question</span>
<span class="hljs-keyword">return</span> client_id, total_score
<span class="hljs-comment"># Run 4 episodes concurrently</span>
<span class="hljs-keyword">with</span> ThreadPoolExecutor(max_workers=<span class="hljs-number">4</span>) <span class="hljs-keyword">as</span> executor:
results = <span class="hljs-built_in">list</span>(executor.<span class="hljs-built_in">map</span>(run_episode, <span class="hljs-built_in">range</span>(<span class="hljs-number">4</span>)))
<span class="hljs-keyword">for</span> client_id, score <span class="hljs-keyword">in</span> results:
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Client <span class="hljs-subst">{client_id}</span>: Total score = <span class="hljs-subst">{score}</span>&quot;</span>)`,lang:"python",wrap:!1}}),ve=new c({props:{title:"Development & Testing",local:"development--testing",headingTag:"h2"}}),$e=new c({props:{title:"Direct Environment Testing",local:"direct-environment-testing",headingTag:"h3"}}),We=new w({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMHJlYXNvbmluZ19neW1fZW52JTIwZGlyZWN0b3J5JTBBcHl0aG9uMyUyMHNlcnZlciUyRnJlYXNvbmluZ19neW1fZW52aXJvbm1lbnQucHk=",highlighted:`<span class="hljs-comment"># From the reasoning_gym_env directory</span>
python3 server/reasoning_gym_environment.py`,lang:"bash",wrap:!1}}),Ge=new c({props:{title:"Running Locally",local:"running-locally",headingTag:"h3"}}),Ee=new w({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMHJlYXNvbmluZ19neW1fZW52JTIwZGlyZWN0b3J5JTBBdXZpY29ybiUyMHNlcnZlci5hcHAlM0FhcHAlMjAtLXJlbG9hZA==",highlighted:`<span class="hljs-comment"># From the reasoning_gym_env directory</span>
uvicorn server.app:app --reload`,lang:"bash",wrap:!1}}),Ve=new w({props:{code:"ZnJvbSUyMHJlYXNvbmluZ19neW1fZW52JTIwaW1wb3J0JTIwUmVhc29uaW5nR3ltRW52JTJDJTIwUmVhc29uaW5nR3ltQWN0aW9uJTBBJTBBZW52JTIwJTNEJTIwUmVhc29uaW5nR3ltRW52KGJhc2VfdXJsJTNEJTIyaHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTgwMDAlMjIpJTBBcmVzdWx0JTIwJTNEJTIwZW52LnJlc2V0KGRhdGFzZXRfbmFtZSUzRCdsZWdfY291bnRpbmcnJTJDJTIwc2VlZCUzRDQyJTJDJTIwc2l6ZSUzRDUpJTBBcHJpbnQocmVzdWx0Lm9ic2VydmF0aW9uLnF1ZXN0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> reasoning_gym_env <span class="hljs-keyword">import</span> ReasoningGymEnv, ReasoningGymAction
env = ReasoningGymEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>)
result = env.reset(dataset_name=<span class="hljs-string">&#x27;leg_counting&#x27;</span>, seed=<span class="hljs-number">42</span>, size=<span class="hljs-number">5</span>)
<span class="hljs-built_in">print</span>(result.observation.question)`,lang:"python",wrap:!1}}),xe=new c({props:{title:"Project Structure",local:"project-structure",headingTag:"h2"}}),Xe=new w({props:{code:"cmVhc29uaW5nX2d5bV9lbnYlMkYlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjAuZG9ja2VyaWdub3JlJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRG9ja2VyJTIwYnVpbGQlMjBleGNsdXNpb25zJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBNb2R1bGUlMjBleHBvcnRzJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwUkVBRE1FLm1kJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVGhpcyUyMGZpbGUlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBvcGVuZW52LnlhbWwlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBPcGVuRW52JTIwbWFuaWZlc3QlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBweXByb2plY3QudG9tbCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFByb2plY3QlMjBtZXRhZGF0YSUyMGFuZCUyMGRlcGVuZGVuY2llcyUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMGNsaWVudC5weSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFJlYXNvbmluZ0d5bUVudiUyMGNsaWVudCUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMG1vZGVscy5weSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEFjdGlvbiUyMGFuZCUyME9ic2VydmF0aW9uJTIwbW9kZWxzJTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwc2VydmVyJTJGJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTZXJ2ZXIlMjBtb2R1bGUlMjBleHBvcnRzJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwcmVhc29uaW5nX2d5bV9lbnZpcm9ubWVudC5weSUyMCUyMCUyMyUyMENvcmUlMjBlbnZpcm9ubWVudCUyMGxvZ2ljJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYXBwLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRmFzdEFQSSUyMGFwcGxpY2F0aW9uJTIwKEhUVFAlMjAlMkIlMjBXZWJTb2NrZXQlMjBlbmRwb2ludHMpJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwcmVxdWlyZW1lbnRzLnR4dCUyMCUyMCUyMyUyMFNlcnZlciUyMGRlcGVuZGVuY2llcyUwQSUyMCUyMCUyMCUyMCVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMERvY2tlcmZpbGUlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDb250YWluZXIlMjBpbWFnZSUyMGRlZmluaXRpb24=",highlighted:`reasoning_gym_env/
├── <span class="hljs-string">.dockerignore</span> <span class="hljs-comment"># Docker build exclusions</span>
├── __init__.py <span class="hljs-comment"># Module exports</span>
├── README.md <span class="hljs-comment"># This file</span>
├── openenv.yaml <span class="hljs-comment"># OpenEnv manifest</span>
├── pyproject.toml <span class="hljs-comment"># Project metadata and dependencies</span>
├── client.py <span class="hljs-comment"># ReasoningGymEnv client</span>
├── models.py <span class="hljs-comment"># Action and Observation models</span>
└── server/
├── __init__.py <span class="hljs-comment"># Server module exports</span>
├── reasoning_gym_environment.py <span class="hljs-comment"># Core environment logic</span>
├── app.py <span class="hljs-comment"># FastAPI application (HTTP + WebSocket endpoints)</span>
├── requirements.txt <span class="hljs-comment"># Server dependencies</span>
└── Dockerfile <span class="hljs-comment"># Container image definition</span>`,lang:"",wrap:!1}}),Qe=new c({props:{title:"Use Cases",local:"use-cases",headingTag:"h2"}}),He=new c({props:{title:"Learn More",local:"learn-more",headingTag:"h2"}}),_e=new gs({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/reasoning_gym.md"}}),{c(){u=i("meta"),Le=n(),Fe=i("p"),qe=n(),p(U.$$.fragment),De=n(),p(j.$$.fragment),Pe=n(),d=i("p"),d.innerHTML=fl,Oe=n(),p(I.$$.fragment),Ke=n(),g=i("p"),g.innerHTML=vl,et=n(),p(h.$$.fragment),tt=n(),C=i("p"),C.innerHTML=$l,lt=n(),b=i("ul"),b.innerHTML=Bl,st=n(),p(f.$$.fragment),nt=n(),v=i("p"),v.textContent=Wl,at=n(),p($.$$.fragment),it=n(),p(B.$$.fragment),Mt=n(),W=i("p"),W.innerHTML=Zl,pt=n(),p(Z.$$.fragment),ot=n(),A=i("p"),A.innerHTML=Al,Jt=n(),G=i("ol"),G.innerHTML=Gl,rt=n(),p(R.$$.fragment),mt=n(),E=i("ul"),E.innerHTML=Rl,Tt=n(),p(N.$$.fragment),yt=n(),V=i("ul"),V.innerHTML=El,ct=n(),p(x.$$.fragment),wt=n(),p(X.$$.fragment),ut=n(),Q=i("p"),Q.innerHTML=Nl,Ut=n(),k=i("p"),k.textContent=Vl,jt=n(),S=i("ul"),S.innerHTML=xl,dt=n(),p(H.$$.fragment),It=n(),p(z.$$.fragment),gt=n(),_=i("p"),_.innerHTML=Xl,ht=n(),F=i("ol"),F.innerHTML=Ql,Ct=n(),p(Y.$$.fragment),bt=n(),L=i("p"),L.innerHTML=kl,ft=n(),q=i("ul"),q.innerHTML=Sl,vt=n(),p(D.$$.fragment),$t=n(),P=i("p"),P.innerHTML=Hl,Bt=n(),O=i("ul"),O.innerHTML=zl,Wt=n(),p(K.$$.fragment),Zt=n(),ee=i("p"),ee.textContent=_l,At=n(),te=i("ul"),te.innerHTML=Fl,Gt=n(),p(le.$$.fragment),Rt=n(),p(se.$$.fragment),Et=n(),ne=i("p"),ne.textContent=Yl,Nt=n(),p(ae.$$.fragment),Vt=n(),ie=i("p"),ie.textContent=Ll,xt=n(),Me=i("ul"),Me.innerHTML=ql,Xt=n(),p(pe.$$.fragment),Qt=n(),oe=i("p"),oe.textContent=Dl,kt=n(),p(Je.$$.fragment),St=n(),p(re.$$.fragment),Ht=n(),me=i("p"),me.textContent=Pl,zt=n(),p(Te.$$.fragment),_t=n(),p(ye.$$.fragment),Ft=n(),p(ce.$$.fragment),Yt=n(),we=i("p"),we.textContent=Ol,Lt=n(),p(ue.$$.fragment),qt=n(),Ue=i("p"),Ue.innerHTML=Kl,Dt=n(),p(je.$$.fragment),Pt=n(),de=i("p"),de.textContent=es,Ot=n(),p(Ie.$$.fragment),Kt=n(),ge=i("p"),ge.textContent=ts,el=n(),he=i("ul"),he.innerHTML=ls,tl=n(),p(Ce.$$.fragment),ll=n(),be=i("p"),be.textContent=ss,sl=n(),p(fe.$$.fragment),nl=n(),p(ve.$$.fragment),al=n(),p($e.$$.fragment),il=n(),Be=i("p"),Be.textContent=ns,Ml=n(),p(We.$$.fragment),pl=n(),Ze=i("p"),Ze.textContent=as,ol=n(),Ae=i("ul"),Ae.innerHTML=is,Jl=n(),p(Ge.$$.fragment),rl=n(),Re=i("p"),Re.textContent=Ms,ml=n(),p(Ee.$$.fragment),Tl=n(),Ne=i("p"),Ne.textContent=ps,yl=n(),p(Ve.$$.fragment),cl=n(),p(xe.$$.fragment),wl=n(),p(Xe.$$.fragment),ul=n(),p(Qe.$$.fragment),Ul=n(),ke=i("p"),ke.textContent=os,jl=n(),Se=i("ul"),Se.innerHTML=Js,dl=n(),p(He.$$.fragment),Il=n(),ze=i("ul"),ze.innerHTML=rs,gl=n(),p(_e.$$.fragment),hl=n(),Ye=i("p"),this.h()},l(e){const t=js("svelte-u9bgzb",document.head);u=M(t,"META",{name:!0,content:!0}),t.forEach(l),Le=a(e),Fe=M(e,"P",{}),ms(Fe).forEach(l),qe=a(e),o(U.$$.fragment,e),De=a(e),o(j.$$.fragment,e),Pe=a(e),d=M(e,"P",{"data-svelte-h":!0}),y(d)!=="svelte-196j5g0"&&(d.innerHTML=fl),Oe=a(e),o(I.$$.fragment,e),Ke=a(e),g=M(e,"P",{"data-svelte-h":!0}),y(g)!=="svelte-caeq5z"&&(g.innerHTML=vl),et=a(e),o(h.$$.fragment,e),tt=a(e),C=M(e,"P",{"data-svelte-h":!0}),y(C)!=="svelte-14xqabt"&&(C.innerHTML=$l),lt=a(e),b=M(e,"UL",{"data-svelte-h":!0}),y(b)!=="svelte-18k8876"&&(b.innerHTML=Bl),st=a(e),o(f.$$.fragment,e),nt=a(e),v=M(e,"P",{"data-svelte-h":!0}),y(v)!=="svelte-78ic0n"&&(v.textContent=Wl),at=a(e),o($.$$.fragment,e),it=a(e),o(B.$$.fragment,e),Mt=a(e),W=M(e,"P",{"data-svelte-h":!0}),y(W)!=="svelte-1w0m59y"&&(W.innerHTML=Zl),pt=a(e),o(Z.$$.fragment,e),ot=a(e),A=M(e,"P",{"data-svelte-h":!0}),y(A)!=="svelte-10tfdgm"&&(A.innerHTML=Al),Jt=a(e),G=M(e,"OL",{"data-svelte-h":!0}),y(G)!=="svelte-jijyjb"&&(G.innerHTML=Gl),rt=a(e),o(R.$$.fragment,e),mt=a(e),E=M(e,"UL",{"data-svelte-h":!0}),y(E)!=="svelte-348gc7"&&(E.innerHTML=Rl),Tt=a(e),o(N.$$.fragment,e),yt=a(e),V=M(e,"UL",{"data-svelte-h":!0}),y(V)!=="svelte-k1u5ib"&&(V.innerHTML=El),ct=a(e),o(x.$$.fragment,e),wt=a(e),o(X.$$.fragment,e),ut=a(e),Q=M(e,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-16csr9h"&&(Q.innerHTML=Nl),Ut=a(e),k=M(e,"P",{"data-svelte-h":!0}),y(k)!=="svelte-nvk5q8"&&(k.textContent=Vl),jt=a(e),S=M(e,"UL",{"data-svelte-h":!0}),y(S)!=="svelte-4b2mzv"&&(S.innerHTML=xl),dt=a(e),o(H.$$.fragment,e),It=a(e),o(z.$$.fragment,e),gt=a(e),_=M(e,"P",{"data-svelte-h":!0}),y(_)!=="svelte-1egu496"&&(_.innerHTML=Xl),ht=a(e),F=M(e,"OL",{"data-svelte-h":!0}),y(F)!=="svelte-16eeoy"&&(F.innerHTML=Ql),Ct=a(e),o(Y.$$.fragment,e),bt=a(e),L=M(e,"P",{"data-svelte-h":!0}),y(L)!=="svelte-eaodh"&&(L.innerHTML=kl),ft=a(e),q=M(e,"UL",{"data-svelte-h":!0}),y(q)!=="svelte-kxsfqu"&&(q.innerHTML=Sl),vt=a(e),o(D.$$.fragment,e),$t=a(e),P=M(e,"P",{"data-svelte-h":!0}),y(P)!=="svelte-1htxik0"&&(P.innerHTML=Hl),Bt=a(e),O=M(e,"UL",{"data-svelte-h":!0}),y(O)!=="svelte-1vxbmhm"&&(O.innerHTML=zl),Wt=a(e),o(K.$$.fragment,e),Zt=a(e),ee=M(e,"P",{"data-svelte-h":!0}),y(ee)!=="svelte-5s35au"&&(ee.textContent=_l),At=a(e),te=M(e,"UL",{"data-svelte-h":!0}),y(te)!=="svelte-mc5415"&&(te.innerHTML=Fl),Gt=a(e),o(le.$$.fragment,e),Rt=a(e),o(se.$$.fragment,e),Et=a(e),ne=M(e,"P",{"data-svelte-h":!0}),y(ne)!=="svelte-10dr9ps"&&(ne.textContent=Yl),Nt=a(e),o(ae.$$.fragment,e),Vt=a(e),ie=M(e,"P",{"data-svelte-h":!0}),y(ie)!=="svelte-12ksfnt"&&(ie.textContent=Ll),xt=a(e),Me=M(e,"UL",{"data-svelte-h":!0}),y(Me)!=="svelte-15jfce"&&(Me.innerHTML=ql),Xt=a(e),o(pe.$$.fragment,e),Qt=a(e),oe=M(e,"P",{"data-svelte-h":!0}),y(oe)!=="svelte-l1pjqb"&&(oe.textContent=Dl),kt=a(e),o(Je.$$.fragment,e),St=a(e),o(re.$$.fragment,e),Ht=a(e),me=M(e,"P",{"data-svelte-h":!0}),y(me)!=="svelte-6wduym"&&(me.textContent=Pl),zt=a(e),o(Te.$$.fragment,e),_t=a(e),o(ye.$$.fragment,e),Ft=a(e),o(ce.$$.fragment,e),Yt=a(e),we=M(e,"P",{"data-svelte-h":!0}),y(we)!=="svelte-t5h2fg"&&(we.textContent=Ol),Lt=a(e),o(ue.$$.fragment,e),qt=a(e),Ue=M(e,"P",{"data-svelte-h":!0}),y(Ue)!=="svelte-17illki"&&(Ue.innerHTML=Kl),Dt=a(e),o(je.$$.fragment,e),Pt=a(e),de=M(e,"P",{"data-svelte-h":!0}),y(de)!=="svelte-d5qc74"&&(de.textContent=es),Ot=a(e),o(Ie.$$.fragment,e),Kt=a(e),ge=M(e,"P",{"data-svelte-h":!0}),y(ge)!=="svelte-trnx19"&&(ge.textContent=ts),el=a(e),he=M(e,"UL",{"data-svelte-h":!0}),y(he)!=="svelte-1c8nfwv"&&(he.innerHTML=ls),tl=a(e),o(Ce.$$.fragment,e),ll=a(e),be=M(e,"P",{"data-svelte-h":!0}),y(be)!=="svelte-16eevv9"&&(be.textContent=ss),sl=a(e),o(fe.$$.fragment,e),nl=a(e),o(ve.$$.fragment,e),al=a(e),o($e.$$.fragment,e),il=a(e),Be=M(e,"P",{"data-svelte-h":!0}),y(Be)!=="svelte-12l40io"&&(Be.textContent=ns),Ml=a(e),o(We.$$.fragment,e),pl=a(e),Ze=M(e,"P",{"data-svelte-h":!0}),y(Ze)!=="svelte-14xm71o"&&(Ze.textContent=as),ol=a(e),Ae=M(e,"UL",{"data-svelte-h":!0}),y(Ae)!=="svelte-10ot6oh"&&(Ae.innerHTML=is),Jl=a(e),o(Ge.$$.fragment,e),rl=a(e),Re=M(e,"P",{"data-svelte-h":!0}),y(Re)!=="svelte-168rc93"&&(Re.textContent=Ms),ml=a(e),o(Ee.$$.fragment,e),Tl=a(e),Ne=M(e,"P",{"data-svelte-h":!0}),y(Ne)!=="svelte-g3e8zz"&&(Ne.textContent=ps),yl=a(e),o(Ve.$$.fragment,e),cl=a(e),o(xe.$$.fragment,e),wl=a(e),o(Xe.$$.fragment,e),ul=a(e),o(Qe.$$.fragment,e),Ul=a(e),ke=M(e,"P",{"data-svelte-h":!0}),y(ke)!=="svelte-12xkwe5"&&(ke.textContent=os),jl=a(e),Se=M(e,"UL",{"data-svelte-h":!0}),y(Se)!=="svelte-1g54yym"&&(Se.innerHTML=Js),dl=a(e),o(He.$$.fragment,e),Il=a(e),ze=M(e,"UL",{"data-svelte-h":!0}),y(ze)!=="svelte-vt0iue"&&(ze.innerHTML=rs),gl=a(e),o(_e.$$.fragment,e),hl=a(e),Ye=M(e,"P",{}),ms(Ye).forEach(l),this.h()},h(){Ts(u,"name","hf:doc:metadata"),Ts(u,"content",Cs)},m(e,t){ds(document.head,u),s(e,Le,t),s(e,Fe,t),s(e,qe,t),J(U,e,t),s(e,De,t),J(j,e,t),s(e,Pe,t),s(e,d,t),s(e,Oe,t),J(I,e,t),s(e,Ke,t),s(e,g,t),s(e,et,t),J(h,e,t),s(e,tt,t),s(e,C,t),s(e,lt,t),s(e,b,t),s(e,st,t),J(f,e,t),s(e,nt,t),s(e,v,t),s(e,at,t),J($,e,t),s(e,it,t),J(B,e,t),s(e,Mt,t),s(e,W,t),s(e,pt,t),J(Z,e,t),s(e,ot,t),s(e,A,t),s(e,Jt,t),s(e,G,t),s(e,rt,t),J(R,e,t),s(e,mt,t),s(e,E,t),s(e,Tt,t),J(N,e,t),s(e,yt,t),s(e,V,t),s(e,ct,t),J(x,e,t),s(e,wt,t),J(X,e,t),s(e,ut,t),s(e,Q,t),s(e,Ut,t),s(e,k,t),s(e,jt,t),s(e,S,t),s(e,dt,t),J(H,e,t),s(e,It,t),J(z,e,t),s(e,gt,t),s(e,_,t),s(e,ht,t),s(e,F,t),s(e,Ct,t),J(Y,e,t),s(e,bt,t),s(e,L,t),s(e,ft,t),s(e,q,t),s(e,vt,t),J(D,e,t),s(e,$t,t),s(e,P,t),s(e,Bt,t),s(e,O,t),s(e,Wt,t),J(K,e,t),s(e,Zt,t),s(e,ee,t),s(e,At,t),s(e,te,t),s(e,Gt,t),J(le,e,t),s(e,Rt,t),J(se,e,t),s(e,Et,t),s(e,ne,t),s(e,Nt,t),J(ae,e,t),s(e,Vt,t),s(e,ie,t),s(e,xt,t),s(e,Me,t),s(e,Xt,t),J(pe,e,t),s(e,Qt,t),s(e,oe,t),s(e,kt,t),J(Je,e,t),s(e,St,t),J(re,e,t),s(e,Ht,t),s(e,me,t),s(e,zt,t),J(Te,e,t),s(e,_t,t),J(ye,e,t),s(e,Ft,t),J(ce,e,t),s(e,Yt,t),s(e,we,t),s(e,Lt,t),J(ue,e,t),s(e,qt,t),s(e,Ue,t),s(e,Dt,t),J(je,e,t),s(e,Pt,t),s(e,de,t),s(e,Ot,t),J(Ie,e,t),s(e,Kt,t),s(e,ge,t),s(e,el,t),s(e,he,t),s(e,tl,t),J(Ce,e,t),s(e,ll,t),s(e,be,t),s(e,sl,t),J(fe,e,t),s(e,nl,t),J(ve,e,t),s(e,al,t),J($e,e,t),s(e,il,t),s(e,Be,t),s(e,Ml,t),J(We,e,t),s(e,pl,t),s(e,Ze,t),s(e,ol,t),s(e,Ae,t),s(e,Jl,t),J(Ge,e,t),s(e,rl,t),s(e,Re,t),s(e,ml,t),J(Ee,e,t),s(e,Tl,t),s(e,Ne,t),s(e,yl,t),J(Ve,e,t),s(e,cl,t),J(xe,e,t),s(e,wl,t),J(Xe,e,t),s(e,ul,t),J(Qe,e,t),s(e,Ul,t),s(e,ke,t),s(e,jl,t),s(e,Se,t),s(e,dl,t),J(He,e,t),s(e,Il,t),s(e,ze,t),s(e,gl,t),J(_e,e,t),s(e,hl,t),s(e,Ye,t),Cl=!0},p:cs,i(e){Cl||(r(U.$$.fragment,e),r(j.$$.fragment,e),r(I.$$.fragment,e),r(h.$$.fragment,e),r(f.$$.fragment,e),r($.$$.fragment,e),r(B.$$.fragment,e),r(Z.$$.fragment,e),r(R.$$.fragment,e),r(N.$$.fragment,e),r(x.$$.fragment,e),r(X.$$.fragment,e),r(H.$$.fragment,e),r(z.$$.fragment,e),r(Y.$$.fragment,e),r(D.$$.fragment,e),r(K.$$.fragment,e),r(le.$$.fragment,e),r(se.$$.fragment,e),r(ae.$$.fragment,e),r(pe.$$.fragment,e),r(Je.$$.fragment,e),r(re.$$.fragment,e),r(Te.$$.fragment,e),r(ye.$$.fragment,e),r(ce.$$.fragment,e),r(ue.$$.fragment,e),r(je.$$.fragment,e),r(Ie.$$.fragment,e),r(Ce.$$.fragment,e),r(fe.$$.fragment,e),r(ve.$$.fragment,e),r($e.$$.fragment,e),r(We.$$.fragment,e),r(Ge.$$.fragment,e),r(Ee.$$.fragment,e),r(Ve.$$.fragment,e),r(xe.$$.fragment,e),r(Xe.$$.fragment,e),r(Qe.$$.fragment,e),r(He.$$.fragment,e),r(_e.$$.fragment,e),Cl=!0)},o(e){m(U.$$.fragment,e),m(j.$$.fragment,e),m(I.$$.fragment,e),m(h.$$.fragment,e),m(f.$$.fragment,e),m($.$$.fragment,e),m(B.$$.fragment,e),m(Z.$$.fragment,e),m(R.$$.fragment,e),m(N.$$.fragment,e),m(x.$$.fragment,e),m(X.$$.fragment,e),m(H.$$.fragment,e),m(z.$$.fragment,e),m(Y.$$.fragment,e),m(D.$$.fragment,e),m(K.$$.fragment,e),m(le.$$.fragment,e),m(se.$$.fragment,e),m(ae.$$.fragment,e),m(pe.$$.fragment,e),m(Je.$$.fragment,e),m(re.$$.fragment,e),m(Te.$$.fragment,e),m(ye.$$.fragment,e),m(ce.$$.fragment,e),m(ue.$$.fragment,e),m(je.$$.fragment,e),m(Ie.$$.fragment,e),m(Ce.$$.fragment,e),m(fe.$$.fragment,e),m(ve.$$.fragment,e),m($e.$$.fragment,e),m(We.$$.fragment,e),m(Ge.$$.fragment,e),m(Ee.$$.fragment,e),m(Ve.$$.fragment,e),m(xe.$$.fragment,e),m(Xe.$$.fragment,e),m(Qe.$$.fragment,e),m(He.$$.fragment,e),m(_e.$$.fragment,e),Cl=!1},d(e){e&&(l(Le),l(Fe),l(qe),l(De),l(Pe),l(d),l(Oe),l(Ke),l(g),l(et),l(tt),l(C),l(lt),l(b),l(st),l(nt),l(v),l(at),l(it),l(Mt),l(W),l(pt),l(ot),l(A),l(Jt),l(G),l(rt),l(mt),l(E),l(Tt),l(yt),l(V),l(ct),l(wt),l(ut),l(Q),l(Ut),l(k),l(jt),l(S),l(dt),l(It),l(gt),l(_),l(ht),l(F),l(Ct),l(bt),l(L),l(ft),l(q),l(vt),l($t),l(P),l(Bt),l(O),l(Wt),l(Zt),l(ee),l(At),l(te),l(Gt),l(Rt),l(Et),l(ne),l(Nt),l(Vt),l(ie),l(xt),l(Me),l(Xt),l(Qt),l(oe),l(kt),l(St),l(Ht),l(me),l(zt),l(_t),l(Ft),l(Yt),l(we),l(Lt),l(qt),l(Ue),l(Dt),l(Pt),l(de),l(Ot),l(Kt),l(ge),l(el),l(he),l(tl),l(ll),l(be),l(sl),l(nl),l(al),l(il),l(Be),l(Ml),l(pl),l(Ze),l(ol),l(Ae),l(Jl),l(rl),l(Re),l(ml),l(Tl),l(Ne),l(yl),l(cl),l(wl),l(ul),l(Ul),l(ke),l(jl),l(Se),l(dl),l(Il),l(ze),l(gl),l(hl),l(Ye)),l(u),T(U,e),T(j,e),T(I,e),T(h,e),T(f,e),T($,e),T(B,e),T(Z,e),T(R,e),T(N,e),T(x,e),T(X,e),T(H,e),T(z,e),T(Y,e),T(D,e),T(K,e),T(le,e),T(se,e),T(ae,e),T(pe,e),T(Je,e),T(re,e),T(Te,e),T(ye,e),T(ce,e),T(ue,e),T(je,e),T(Ie,e),T(Ce,e),T(fe,e),T(ve,e),T($e,e),T(We,e),T(Ge,e),T(Ee,e),T(Ve,e),T(xe,e),T(Xe,e),T(Qe,e),T(He,e),T(_e,e)}}}const Cs='{"title":"Reasoning Gym Environment","local":"reasoning-gym-environment","sections":[{"title":"Quick Start","local":"quick-start","sections":[],"depth":2},{"title":"Building the Docker Image","local":"building-the-docker-image","sections":[],"depth":2},{"title":"Deploying to Hugging Face Spaces","local":"deploying-to-hugging-face-spaces","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[],"depth":3},{"title":"Options","local":"options","sections":[],"depth":3},{"title":"Examples","local":"examples","sections":[],"depth":3}],"depth":2},{"title":"Environment Details","local":"environment-details","sections":[{"title":"Episode Structure","local":"episode-structure","sections":[],"depth":3},{"title":"Action","local":"action","sections":[],"depth":3},{"title":"Observation","local":"observation","sections":[],"depth":3},{"title":"Reward","local":"reward","sections":[],"depth":3}],"depth":2},{"title":"Dataset Configuration","local":"dataset-configuration","sections":[{"title":"Simple Datasets","local":"simple-datasets","sections":[],"depth":3},{"title":"Composite Datasets","local":"composite-datasets","sections":[],"depth":3},{"title":"Dataset Persistence","local":"dataset-persistence","sections":[],"depth":3}],"depth":2},{"title":"Advanced Usage","local":"advanced-usage","sections":[{"title":"Connecting to an Existing Server","local":"connecting-to-an-existing-server","sections":[],"depth":3},{"title":"Using the Context Manager","local":"using-the-context-manager","sections":[],"depth":3},{"title":"Concurrent WebSocket Sessions","local":"concurrent-websocket-sessions","sections":[],"depth":3}],"depth":2},{"title":"Development & Testing","local":"development--testing","sections":[{"title":"Direct Environment Testing","local":"direct-environment-testing","sections":[],"depth":3},{"title":"Running Locally","local":"running-locally","sections":[],"depth":3}],"depth":2},{"title":"Project Structure","local":"project-structure","sections":[],"depth":2},{"title":"Use Cases","local":"use-cases","sections":[],"depth":2},{"title":"Learn More","local":"learn-more","sections":[],"depth":2}],"depth":1}';function bs(bl){return ws(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ws extends us{constructor(u){super(),Us(this,u,bs,hs,ys,{})}}export{Ws as component};

Xet Storage Details

Size:
48.8 kB
·
Xet hash:
041143b8ae21b5d1b220093689d6af1391bf5e4a354bf0e58d2857047ccdfcaf

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