Buckets:

HuggingFaceDocBuilder's picture
download
raw
28.4 kB
import{s as vl,n as yl,o as $l}from"../chunks/scheduler.2b22cead.js";import{S as Tl,i as Ul,e as r,s as i,c as d,h as wl,a as s,d as n,b as o,f as $,g as p,j as a,k as ul,l as u,m as l,n as m,t as c,o as g,p as f}from"../chunks/index.1a0e8013.js";import{C as Cl,H as M,E as hl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.0d59b6ff.js";import{C as Be}from"../chunks/CodeBlock.38fdfa9f.js";function Jl(Hn){let y,Re,We,Se,w,De,C,ze,h,Ln='<a href="https://huggingface.co/spaces/yuvrajpant56/grid_world_env" rel="nofollow">Hugging Face Space</a>',Oe,J,kn="This directory contains the implementation of a simple 5x5 Grid World environment, designed to serve two primary purposes within the OpenEnv ecosystem:",qe,b,Fn="<li><strong>A basic Reinforcement Learning (RL) testbed:</strong> Providing a straightforward, deterministic environment for quick prototyping and testing of RL agents.</li> <li><strong>A detailed “How-To” guide for building new OpenEnv environments:</strong> Demonstrating the architectural patterns, best practices, and core components required to integrate a custom environment into the OpenEnv framework.</li>",Qe,Xe,Ye,x,Ke,I,Gn="The Grid World environment features:",et,j,Vn="<li><strong>Grid Size:</strong> A 5x5 square grid.</li> <li><strong>Agent:</strong> Starts at position <code>(0,0)</code> (top-left).</li> <li><strong>Goal:</strong> Fixed at <code>(4,4)</code> (bottom-right).</li> <li><strong>Actions:</strong> <code>UP</code>, <code>DOWN</code>, <code>LEFT</code>, <code>RIGHT</code>.</li> <li><strong>Dynamics:</strong> Deterministic. An action always moves the agent one step in the chosen direction, unless it would move off the grid, in which case the agent stays in its current cell.</li> <li><strong>Reward Function (Sparse):</strong> <ul><li><code>-0.1</code> for every step taken (a “living cost” or “step penalty”).</li> <li><code>+1.0</code> for reaching the goal at <code>(4,4)</code>. This also terminates the episode.</li></ul></li> <li><strong>Episode Termination:</strong> The episode ends when the agent reaches the goal.</li>",tt,_,nt,A,Zn="Imagine the agent trying to find the goal:",lt,H,Nn="<li><strong>Reset:</strong> Agent at <code>(0,0)</code> → <code>Obs(x=0, y=0, reward=0.0, done=False)</code></li> <li><strong>Step DOWN:</strong> Agent moves to <code>(1,0)</code> → <code>Obs(x=1, y=0, reward=-0.1, done=False)</code></li> <li><strong>Step RIGHT:</strong> Agent moves to <code>(1,1)</code> → <code>Obs(x=1, y=1, reward=-0.1, done=False)</code></li> <li>…</li> <li><strong>Step RIGHT (from 4,3):</strong> Agent moves to <code>(4,4)</code> → <code>Obs(x=4, y=4, reward=1.0, done=True)</code></li>",it,ot,rt,L,st,k,En="This section explains the structure and key design choices of the Grid World environment.",at,F,dt,G,Wn="This environment supports <strong>multi-mode deployment</strong>. It uses <code>pyproject.toml</code> for modern local development (via <code>uv</code>) and a <code>Dockerfile</code> for containerized deployment.",pt,V,mt,Z,ct,N,gt,E,Pn="This section dives into the specific code files that power the <strong>Grid World</strong>, explaining how the <strong>OpenEnv</strong> framework connects the data, logic, and server layers.",ft,Mt,ut,W,vt,P,Bn="This file defines the strict “language” used for communication between the <strong>Client (RL Agent)</strong> and the <strong>Server</strong>. It relies on <strong>Pydantic</strong> to enforce type safety.",yt,B,$t,R,Rn=`<li><p><strong><code>MoveAction(str, Enum)</code></strong><br/>
Defines the allowed vocabulary for movement: <code>UP</code>, <code>DOWN</code>, <code>LEFT</code>, <code>RIGHT</code>.<br/>
Using an <code>Enum</code> prevents <em>magic string</em> errors (e.g., sending <code>&quot;up&quot;</code> instead of <code>&quot;UP&quot;</code>).</p></li> <li><p><strong><code>GridWorldAction(Action)</code></strong><br/>
Wraps the movement enum in a standardized <strong>OpenEnv</strong> action structure.<br/>
When the server receives a request, <strong>FastAPI</strong> automatically validates that the incoming JSON payload matches this schema.</p></li> <li><p><strong><code>GridWorldObservation(Observation)</code></strong><br/>
Defines exactly what the agent observes from the environment:</p> <ul><li><code>x</code>, <code>y</code>: Integer coordinates representing the agent’s position</li> <li><code>reward</code>: Floating-point value (e.g., <code>-0.1</code>, <code>1.0</code>)</li> <li><code>done</code>: Boolean flag indicating episode termination</li></ul></li>`,Tt,S,Sn=`<p><strong>Note:</strong><br/>
By inheriting from <code>pydantic.BaseModel</code> (via <code>Observation</code>), these classes automatically handle JSON serialization and deserialization.</p>`,Ut,wt,Ct,D,ht,z,Dn="This file contains the “physics engine” and rules of the environment. It translates abstract actions into concrete state transitions.",Jt,O,bt,q,zn=`<li><p><strong>Inheritance</strong><br/> <code>GridWorldEnvironment</code> inherits from <code>openenv.core.env_server.Environment</code>, providing the standardized interface required by the OpenEnv server.</p></li> <li><p><strong><code>__init__</code> Method</strong></p> <ul><li>Sets static configuration:
<ul><li>Grid size: <code>5 × 5</code></li> <li>Goal location: <code>[4, 4]</code></li></ul></li> <li>Initializes the persistent state container.</li></ul></li> <li><p><strong>State Persistence (<code>self._state</code>)</strong></p> <ul><li>HTTP requests are stateless, so the environment instance must remember the agent’s position between calls.</li> <li><code>self._state</code> (an instance of <code>openenv...State</code>) tracks:
<ul><li><code>step_count</code></li> <li><code>episode_id</code></li> <li><code>agent_x</code>, <code>agent_y</code></li></ul></li></ul></li> <li><p><strong><code>step()</code> Logic</strong></p> <ul><li><strong>Input:</strong> Receives a validated <code>GridWorldAction</code></li> <li><strong>Dynamics:</strong> Applies movement rules and clamps coordinates using<br/> <code>max(0, min(..., grid_size - 1))</code> to prevent the agent from leaving the grid</li> <li><strong>Feedback:</strong> Computes a sparse reward:
<ul><li><code>1.0</code> if <code>(x, y) == goal</code></li> <li><code>-0.1</code> otherwise</li></ul></li> <li>Returns a <code>GridWorldObservation</code></li></ul></li>`,xt,It,jt,Q,_t,X,On="This file is the “glue” that turns the environment logic into a running web service.",At,Y,Ht,K,qn=`<li><p><strong><code>create_app</code> Utility</strong><br/>
Instead of manually defining FastAPI routes, this file uses<br/> <code>openenv.core.env_server.create_app</code>.</p> <p>It:</p> <ul><li>Binds the environment logic (<code>GridWorldEnvironment</code>)</li> <li>Connects the data models (<code>GridWorldAction</code>, <code>GridWorldObservation</code>)</li> <li>Automatically generates standard endpoints:
<ul><li><code>/reset</code></li> <li><code>/step</code></li> <li><code>/state</code></li> <li><code>/health</code></li></ul></li></ul></li> <li><p><strong><code>main()</code> Entry Point</strong><br/>
Defines a <code>main()</code> function that calls <code>uvicorn.run</code>.<br/>
This is what enables the <code>server = &quot;...&quot;</code> script in <code>pyproject.toml</code> to start the server.</p></li>`,Lt,kt,Ft,ee,Gt,te,Qn="This file defines how the environment is packaged for production or remote deployment.",Vt,ne,Zt,le,Xn=`<li><p><strong>Base Image</strong><br/>
Builds on <code>envtorch-base</code>, ensuring compatible system libraries.</p></li> <li><p><strong>Dependencies</strong><br/>
Copies and installs <code>server/requirements.txt</code>.<br/>
This keeps the Docker image lightweight and focused only on server-side requirements.</p></li> <li><p><strong>Execution</strong></p> <ul><li>Exposes port <code>8000</code></li> <li>Defines the <code>CMD</code> to launch <code>uvicorn</code><br/>
The container is ready to accept HTTP requests immediately upon startup.</li></ul></li>`,Nt,Et,Wt,ie,Pt,oe,Yn="This file enables a modern local development workflow using <strong>uv</strong>.",Bt,re,Rt,v,Le,Kn="<p><strong>Project Metadata</strong></p> <ul><li>Package name: <code>grid_world_env</code></li> <li>Version information</li></ul>",hn,ke,el=`<p><strong>Dependencies</strong>
Lists libraries required for local execution:</p> <ul><li><code>fastapi</code></li> <li><code>uvicorn</code></li> <li><code>gymnasium</code></li> <li><code>numpy</code></li></ul>`,Jn,se,Fe,tl=`<strong><code>[project.scripts]</code></strong>
Defines a shortcut command:`,bn,ae,St,de,Dt,pe,nl="You can run the environment using <strong>uv</strong> (fastest for development) or <strong>Docker</strong> (best for deployment).",zt,Ot,qt,me,Qt,ce,ll="Since this project is configured with <code>pyproject.toml</code>, you can run the server instantly.",Xt,ge,Yt,T,fe,Ge,il="<strong>Navigate to the environment folder</strong>",xn,Me,In,ue,Ve,ol="<strong>Visit the live Swagger UI in your browser</strong>",jn,ve,Kt,ye,en,$e,rl="To build the full container and run the integration test suite (simulating a production deployment):",tn,nn,ln,Te,on,U,Ze,sl="<p><strong>Navigate to the root OpenEnv directory</strong></p>",_n,Ue,Ne,al="<strong>Run the test script</strong>",An,we,rn,Ce,dl="Builds the Docker image",sn,he,pl="Starts the container",an,Je,ml="Runs a series of curl requests to verify functionality",dn,be,cl="Cleans up containers and images after completion",pn,xe,mn,Ie,gl="This Grid World environment serves as the reference implementation for building environments in OpenEnv. By following this pattern, custom environments remain:",cn,je,fl="Portable across local and containerized setups",gn,_e,Ml="Strictly typed through Pydantic models",fn,Ae,Mn,He,un,Pe,vn;return w=new Cl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),C=new M({props:{title:"Grid World Environment",local:"grid-world-environment",headingTag:"h1"}}),x=new M({props:{title:"🚀 Environment Overview",local:"-environment-overview",headingTag:"h2"}}),_=new M({props:{title:"Example Gameplay",local:"example-gameplay",headingTag:"h3"}}),L=new M({props:{title:"🛠️ How to Build an OpenEnv Environment: A Detailed Guide",local:"-how-to-build-an-openenv-environment-a-detailed-guide",headingTag:"h2"}}),F=new M({props:{title:"1. Scaffolding and Configuration",local:"1-scaffolding-and-configuration",headingTag:"h3"}}),V=new M({props:{title:"Directory Structure",local:"directory-structure",headingTag:"h3"}}),Z=new Be({props:{code:"ZW52cyUyRmdyaWRfd29ybGRfZW52JTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwc2VydmVyJTJGJTBBJUUyJTk0JTgyJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQYWNrYWdlJTIwaW5pdGlhbGl6ZXIlMjBmb3IlMjB0aGUlMjBzZXJ2ZXIlMjBzaWRlJTBBJUUyJTk0JTgyJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYXBwLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVGhlJTIwRmFzdEFQSSUyMGFwcGxpY2F0aW9uJTIwZW50cnklMjBwb2ludCUwQSVFMiU5NCU4MiUyMCUyMCUyMCVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMERvY2tlcmZpbGUlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDb250YWluZXIlMjBkZWZpbml0aW9uJTIwKHVzZXMlMjByZXF1aXJlbWVudHMudHh0KSUwQSVFMiU5NCU4MiUyMCUyMCUyMCVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMGdyaWRfd29ybGRfZW52aXJvbm1lbnQucHklMjAlMjMlMjBUaGUlMjBjb3JlJTIwZW52aXJvbm1lbnQlMjBsb2dpYyUwQSVFMiU5NCU4MiUyMCUyMCUyMCVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMHJlcXVpcmVtZW50cy50eHQlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBEZXBlbmRlbmNpZXMlMjBmb3IlMjB0aGUlMjBEb2NrZXIlMjBidWlsZCUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMF9faW5pdF9fLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUGFja2FnZSUyMGluaXRpYWxpemVyJTIwZm9yJTIwdGhlJTIwY2xpZW50JTIwc2lkZSUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMGNsaWVudC5weSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFB5dGhvbiUyMGNsaWVudCUyMGZvciUyMGludGVyYWN0aW5nJTIwd2l0aCUyMHRoZSUyMGVudiUyMHNlcnZlciUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMG1vZGVscy5weSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFB5ZGFudGljJTIwZGF0YSUyMHN0cnVjdHVyZXMlMjAoQWN0aW9uJTJDJTIwT2JzZXJ2YXRpb24pJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwb3BlbmVudi55YW1sJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwT3BlbkVudiUyMG1ldGFkYXRhJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwcHlwcm9qZWN0LnRvbWwlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQcm9qZWN0JTIwY29uZmlndXJhdGlvbiUyMGZvciUyMGxvY2FsJTIwZGV2JTIwKHV2KSUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMHV2LmxvY2slMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBFeGFjdCUyMGRlcGVuZGVuY3klMjB2ZXJzaW9ucyUyMChHZW5lcmF0ZWQlMjBieSUyMHV2KSUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMFJFQURNRS5tZCUwQSVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCUyMHRlc3RfZ3JpZF93b3JsZC5zaCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEludGVncmF0aW9uJTIwdGVzdCUyMHNjcmlwdCUyMChEb2NrZXIlMjBiYXNlZCk=",highlighted:`envs/grid_world_env
├── server/
│ ├── __init__.py # Package initializer for the server side
│ ├── app.py # The FastAPI application entry point
│ ├── Dockerfile # Container definition (uses requirements.txt)
│ ├── grid_world_environment.py # The core environment logic
│ └── requirements.txt # Dependencies for the Docker build
├── __init__.py # Package initializer for the client side
├── client.py # Python client for interacting with the env server
├── models.py # Pydantic data structures (Action, Observation)
├── openenv.yaml # OpenEnv metadata
├── pyproject.toml # Project configuration for local dev (uv)
├── uv.lock # Exact dependency versions (Generated by uv)
├── README.md
└── test_grid_world.sh # Integration test script (Docker based)`,lang:"text",wrap:!1}}),N=new M({props:{title:"Core Components Explained",local:"core-components-explained",headingTag:"h1"}}),W=new M({props:{title:"1. models.py — The Data Contract",local:"1-modelspy--the-data-contract",headingTag:"h2"}}),B=new M({props:{title:"Key Components",local:"key-components",headingTag:"h3"}}),D=new M({props:{title:"2. server/grid_world_environment.py — The Logic",local:"2-servergridworldenvironmentpy--the-logic",headingTag:"h2"}}),O=new M({props:{title:"Core Responsibilities",local:"core-responsibilities",headingTag:"h3"}}),Q=new M({props:{title:"3. server/app.py — The API",local:"3-serverapppy--the-api",headingTag:"h2"}}),Y=new M({props:{title:"Key Elements",local:"key-elements",headingTag:"h3"}}),ee=new M({props:{title:"4. server/Dockerfile — The Container",local:"4-serverdockerfile--the-container",headingTag:"h2"}}),ne=new M({props:{title:"Container Setup",local:"container-setup",headingTag:"h3"}}),ie=new M({props:{title:"5. pyproject.toml — Local Development",local:"5-pyprojecttoml--local-development",headingTag:"h2"}}),re=new M({props:{title:"Key Sections",local:"key-sections",headingTag:"h3"}}),ae=new Be({props:{code:"c2VydmVyJTIwJTNEJTIwJTIyZ3JpZF93b3JsZF9lbnYuc2VydmVyLmFwcCUzQW1haW4lMjI=",highlighted:'<span class="hljs-attr">server</span> = <span class="hljs-string">&quot;grid_world_env.server.app:main&quot;</span>',lang:"toml",wrap:!1}}),de=new M({props:{title:"🚀 Getting Started",local:"-getting-started",headingTag:"h1"}}),me=new M({props:{title:"Option 1: Local Development with uv (Recommended)",local:"option-1-local-development-with-uv-recommended",headingTag:"h2"}}),ge=new M({props:{title:"Steps",local:"steps",headingTag:"h3"}}),Me=new Be({props:{code:"Y2QlMjBlbnZzJTJGZ3JpZF93b3JsZF9lbnYlMEF1diUyMHJ1biUyMHNlcnZlcg==",highlighted:`<span class="hljs-built_in">cd</span> envs/grid_world_env
uv run server`,lang:"bash",wrap:!1}}),ve=new Be({props:{code:"aHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTgwMDAlMkZkb2Nz",highlighted:"http://localhost:8000/docs",lang:"bash",wrap:!1}}),ye=new M({props:{title:"Option 2: Docker Integration Test",local:"option-2-docker-integration-test",headingTag:"h2"}}),Te=new M({props:{title:"Steps",local:"steps",headingTag:"h3"}}),we=new Be({props:{code:"LiUyRmVudnMlMkZncmlkX3dvcmxkX2VudiUyRnRlc3RfZ3JpZF93b3JsZC5zaA==",highlighted:"./envs/grid_world_env/test_grid_world.sh",lang:"bash",wrap:!1}}),xe=new M({props:{title:"Conclusion",local:"conclusion",headingTag:"h2"}}),Ae=new M({props:{title:"Deployment-ready for development, testing, and production workflows",local:"deployment-ready-for-development-testing-and-production-workflows",headingTag:"h2"}}),He=new hl({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/grid_world.md"}}),{c(){y=r("meta"),Re=i(),We=r("p"),Se=i(),d(w.$$.fragment),De=i(),d(C.$$.fragment),ze=i(),h=r("p"),h.innerHTML=Ln,Oe=i(),J=r("p"),J.textContent=kn,qe=i(),b=r("ol"),b.innerHTML=Fn,Qe=i(),Xe=r("hr"),Ye=i(),d(x.$$.fragment),Ke=i(),I=r("p"),I.textContent=Gn,et=i(),j=r("ul"),j.innerHTML=Vn,tt=i(),d(_.$$.fragment),nt=i(),A=r("p"),A.textContent=Zn,lt=i(),H=r("ol"),H.innerHTML=Nn,it=i(),ot=r("hr"),rt=i(),d(L.$$.fragment),st=i(),k=r("p"),k.textContent=En,at=i(),d(F.$$.fragment),dt=i(),G=r("p"),G.innerHTML=Wn,pt=i(),d(V.$$.fragment),mt=i(),d(Z.$$.fragment),ct=i(),d(N.$$.fragment),gt=i(),E=r("p"),E.innerHTML=Pn,ft=i(),Mt=r("hr"),ut=i(),d(W.$$.fragment),vt=i(),P=r("p"),P.innerHTML=Bn,yt=i(),d(B.$$.fragment),$t=i(),R=r("ul"),R.innerHTML=Rn,Tt=i(),S=r("blockquote"),S.innerHTML=Sn,Ut=i(),wt=r("hr"),Ct=i(),d(D.$$.fragment),ht=i(),z=r("p"),z.textContent=Dn,Jt=i(),d(O.$$.fragment),bt=i(),q=r("ul"),q.innerHTML=zn,xt=i(),It=r("hr"),jt=i(),d(Q.$$.fragment),_t=i(),X=r("p"),X.textContent=On,At=i(),d(Y.$$.fragment),Ht=i(),K=r("ul"),K.innerHTML=qn,Lt=i(),kt=r("hr"),Ft=i(),d(ee.$$.fragment),Gt=i(),te=r("p"),te.textContent=Qn,Vt=i(),d(ne.$$.fragment),Zt=i(),le=r("ul"),le.innerHTML=Xn,Nt=i(),Et=r("hr"),Wt=i(),d(ie.$$.fragment),Pt=i(),oe=r("p"),oe.innerHTML=Yn,Bt=i(),d(re.$$.fragment),Rt=i(),v=r("ul"),Le=r("li"),Le.innerHTML=Kn,hn=i(),ke=r("li"),ke.innerHTML=el,Jn=i(),se=r("li"),Fe=r("p"),Fe.innerHTML=tl,bn=i(),d(ae.$$.fragment),St=i(),d(de.$$.fragment),Dt=i(),pe=r("p"),pe.innerHTML=nl,zt=i(),Ot=r("hr"),qt=i(),d(me.$$.fragment),Qt=i(),ce=r("p"),ce.innerHTML=ll,Xt=i(),d(ge.$$.fragment),Yt=i(),T=r("ol"),fe=r("li"),Ge=r("p"),Ge.innerHTML=il,xn=i(),d(Me.$$.fragment),In=i(),ue=r("li"),Ve=r("p"),Ve.innerHTML=ol,jn=i(),d(ve.$$.fragment),Kt=i(),d(ye.$$.fragment),en=i(),$e=r("p"),$e.textContent=rl,tn=i(),nn=r("hr"),ln=i(),d(Te.$$.fragment),on=i(),U=r("ol"),Ze=r("li"),Ze.innerHTML=sl,_n=i(),Ue=r("li"),Ne=r("p"),Ne.innerHTML=al,An=i(),d(we.$$.fragment),rn=i(),Ce=r("p"),Ce.textContent=dl,sn=i(),he=r("p"),he.textContent=pl,an=i(),Je=r("p"),Je.textContent=ml,dn=i(),be=r("p"),be.textContent=cl,pn=i(),d(xe.$$.fragment),mn=i(),Ie=r("p"),Ie.textContent=gl,cn=i(),je=r("p"),je.textContent=fl,gn=i(),_e=r("p"),_e.textContent=Ml,fn=i(),d(Ae.$$.fragment),Mn=i(),d(He.$$.fragment),un=i(),Pe=r("p"),this.h()},l(e){const t=wl("svelte-u9bgzb",document.head);y=s(t,"META",{name:!0,content:!0}),t.forEach(n),Re=o(e),We=s(e,"P",{}),$(We).forEach(n),Se=o(e),p(w.$$.fragment,e),De=o(e),p(C.$$.fragment,e),ze=o(e),h=s(e,"P",{"data-svelte-h":!0}),a(h)!=="svelte-16v45fm"&&(h.innerHTML=Ln),Oe=o(e),J=s(e,"P",{"data-svelte-h":!0}),a(J)!=="svelte-qkrx6h"&&(J.textContent=kn),qe=o(e),b=s(e,"OL",{"data-svelte-h":!0}),a(b)!=="svelte-136x3y4"&&(b.innerHTML=Fn),Qe=o(e),Xe=s(e,"HR",{}),Ye=o(e),p(x.$$.fragment,e),Ke=o(e),I=s(e,"P",{"data-svelte-h":!0}),a(I)!=="svelte-17enshd"&&(I.textContent=Gn),et=o(e),j=s(e,"UL",{"data-svelte-h":!0}),a(j)!=="svelte-7a9glp"&&(j.innerHTML=Vn),tt=o(e),p(_.$$.fragment,e),nt=o(e),A=s(e,"P",{"data-svelte-h":!0}),a(A)!=="svelte-k6sppn"&&(A.textContent=Zn),lt=o(e),H=s(e,"OL",{"data-svelte-h":!0}),a(H)!=="svelte-1xtk9bm"&&(H.innerHTML=Nn),it=o(e),ot=s(e,"HR",{}),rt=o(e),p(L.$$.fragment,e),st=o(e),k=s(e,"P",{"data-svelte-h":!0}),a(k)!=="svelte-1d505w4"&&(k.textContent=En),at=o(e),p(F.$$.fragment,e),dt=o(e),G=s(e,"P",{"data-svelte-h":!0}),a(G)!=="svelte-1sml5pv"&&(G.innerHTML=Wn),pt=o(e),p(V.$$.fragment,e),mt=o(e),p(Z.$$.fragment,e),ct=o(e),p(N.$$.fragment,e),gt=o(e),E=s(e,"P",{"data-svelte-h":!0}),a(E)!=="svelte-9hxort"&&(E.innerHTML=Pn),ft=o(e),Mt=s(e,"HR",{}),ut=o(e),p(W.$$.fragment,e),vt=o(e),P=s(e,"P",{"data-svelte-h":!0}),a(P)!=="svelte-1bknd56"&&(P.innerHTML=Bn),yt=o(e),p(B.$$.fragment,e),$t=o(e),R=s(e,"UL",{"data-svelte-h":!0}),a(R)!=="svelte-ev6zzm"&&(R.innerHTML=Rn),Tt=o(e),S=s(e,"BLOCKQUOTE",{"data-svelte-h":!0}),a(S)!=="svelte-xpq6ul"&&(S.innerHTML=Sn),Ut=o(e),wt=s(e,"HR",{}),Ct=o(e),p(D.$$.fragment,e),ht=o(e),z=s(e,"P",{"data-svelte-h":!0}),a(z)!=="svelte-10tarsc"&&(z.textContent=Dn),Jt=o(e),p(O.$$.fragment,e),bt=o(e),q=s(e,"UL",{"data-svelte-h":!0}),a(q)!=="svelte-1l6rxix"&&(q.innerHTML=zn),xt=o(e),It=s(e,"HR",{}),jt=o(e),p(Q.$$.fragment,e),_t=o(e),X=s(e,"P",{"data-svelte-h":!0}),a(X)!=="svelte-19fq4u9"&&(X.textContent=On),At=o(e),p(Y.$$.fragment,e),Ht=o(e),K=s(e,"UL",{"data-svelte-h":!0}),a(K)!=="svelte-8sy0vf"&&(K.innerHTML=qn),Lt=o(e),kt=s(e,"HR",{}),Ft=o(e),p(ee.$$.fragment,e),Gt=o(e),te=s(e,"P",{"data-svelte-h":!0}),a(te)!=="svelte-axisaq"&&(te.textContent=Qn),Vt=o(e),p(ne.$$.fragment,e),Zt=o(e),le=s(e,"UL",{"data-svelte-h":!0}),a(le)!=="svelte-r8ngvo"&&(le.innerHTML=Xn),Nt=o(e),Et=s(e,"HR",{}),Wt=o(e),p(ie.$$.fragment,e),Pt=o(e),oe=s(e,"P",{"data-svelte-h":!0}),a(oe)!=="svelte-dyyt11"&&(oe.innerHTML=Yn),Bt=o(e),p(re.$$.fragment,e),Rt=o(e),v=s(e,"UL",{});var Ee=$(v);Le=s(Ee,"LI",{"data-svelte-h":!0}),a(Le)!=="svelte-1yjkhnk"&&(Le.innerHTML=Kn),hn=o(Ee),ke=s(Ee,"LI",{"data-svelte-h":!0}),a(ke)!=="svelte-1is0j6g"&&(ke.innerHTML=el),Jn=o(Ee),se=s(Ee,"LI",{});var yn=$(se);Fe=s(yn,"P",{"data-svelte-h":!0}),a(Fe)!=="svelte-1bsxish"&&(Fe.innerHTML=tl),bn=o(yn),p(ae.$$.fragment,yn),yn.forEach(n),Ee.forEach(n),St=o(e),p(de.$$.fragment,e),Dt=o(e),pe=s(e,"P",{"data-svelte-h":!0}),a(pe)!=="svelte-g6imyu"&&(pe.innerHTML=nl),zt=o(e),Ot=s(e,"HR",{}),qt=o(e),p(me.$$.fragment,e),Qt=o(e),ce=s(e,"P",{"data-svelte-h":!0}),a(ce)!=="svelte-tz4ho4"&&(ce.innerHTML=ll),Xt=o(e),p(ge.$$.fragment,e),Yt=o(e),T=s(e,"OL",{});var $n=$(T);fe=s($n,"LI",{});var Tn=$(fe);Ge=s(Tn,"P",{"data-svelte-h":!0}),a(Ge)!=="svelte-19dgwlv"&&(Ge.innerHTML=il),xn=o(Tn),p(Me.$$.fragment,Tn),Tn.forEach(n),In=o($n),ue=s($n,"LI",{});var Un=$(ue);Ve=s(Un,"P",{"data-svelte-h":!0}),a(Ve)!=="svelte-1gcnzeb"&&(Ve.innerHTML=ol),jn=o(Un),p(ve.$$.fragment,Un),Un.forEach(n),$n.forEach(n),Kt=o(e),p(ye.$$.fragment,e),en=o(e),$e=s(e,"P",{"data-svelte-h":!0}),a($e)!=="svelte-q50fig"&&($e.textContent=rl),tn=o(e),nn=s(e,"HR",{}),ln=o(e),p(Te.$$.fragment,e),on=o(e),U=s(e,"OL",{});var wn=$(U);Ze=s(wn,"LI",{"data-svelte-h":!0}),a(Ze)!=="svelte-1hj2ksl"&&(Ze.innerHTML=sl),_n=o(wn),Ue=s(wn,"LI",{});var Cn=$(Ue);Ne=s(Cn,"P",{"data-svelte-h":!0}),a(Ne)!=="svelte-heenrc"&&(Ne.innerHTML=al),An=o(Cn),p(we.$$.fragment,Cn),Cn.forEach(n),wn.forEach(n),rn=o(e),Ce=s(e,"P",{"data-svelte-h":!0}),a(Ce)!=="svelte-1efhzjb"&&(Ce.textContent=dl),sn=o(e),he=s(e,"P",{"data-svelte-h":!0}),a(he)!=="svelte-lq7ghn"&&(he.textContent=pl),an=o(e),Je=s(e,"P",{"data-svelte-h":!0}),a(Je)!=="svelte-dl3we"&&(Je.textContent=ml),dn=o(e),be=s(e,"P",{"data-svelte-h":!0}),a(be)!=="svelte-1qq6o5e"&&(be.textContent=cl),pn=o(e),p(xe.$$.fragment,e),mn=o(e),Ie=s(e,"P",{"data-svelte-h":!0}),a(Ie)!=="svelte-18tinr1"&&(Ie.textContent=gl),cn=o(e),je=s(e,"P",{"data-svelte-h":!0}),a(je)!=="svelte-d54qcp"&&(je.textContent=fl),gn=o(e),_e=s(e,"P",{"data-svelte-h":!0}),a(_e)!=="svelte-pp6a1p"&&(_e.textContent=Ml),fn=o(e),p(Ae.$$.fragment,e),Mn=o(e),p(He.$$.fragment,e),un=o(e),Pe=s(e,"P",{}),$(Pe).forEach(n),this.h()},h(){ul(y,"name","hf:doc:metadata"),ul(y,"content",bl)},m(e,t){u(document.head,y),l(e,Re,t),l(e,We,t),l(e,Se,t),m(w,e,t),l(e,De,t),m(C,e,t),l(e,ze,t),l(e,h,t),l(e,Oe,t),l(e,J,t),l(e,qe,t),l(e,b,t),l(e,Qe,t),l(e,Xe,t),l(e,Ye,t),m(x,e,t),l(e,Ke,t),l(e,I,t),l(e,et,t),l(e,j,t),l(e,tt,t),m(_,e,t),l(e,nt,t),l(e,A,t),l(e,lt,t),l(e,H,t),l(e,it,t),l(e,ot,t),l(e,rt,t),m(L,e,t),l(e,st,t),l(e,k,t),l(e,at,t),m(F,e,t),l(e,dt,t),l(e,G,t),l(e,pt,t),m(V,e,t),l(e,mt,t),m(Z,e,t),l(e,ct,t),m(N,e,t),l(e,gt,t),l(e,E,t),l(e,ft,t),l(e,Mt,t),l(e,ut,t),m(W,e,t),l(e,vt,t),l(e,P,t),l(e,yt,t),m(B,e,t),l(e,$t,t),l(e,R,t),l(e,Tt,t),l(e,S,t),l(e,Ut,t),l(e,wt,t),l(e,Ct,t),m(D,e,t),l(e,ht,t),l(e,z,t),l(e,Jt,t),m(O,e,t),l(e,bt,t),l(e,q,t),l(e,xt,t),l(e,It,t),l(e,jt,t),m(Q,e,t),l(e,_t,t),l(e,X,t),l(e,At,t),m(Y,e,t),l(e,Ht,t),l(e,K,t),l(e,Lt,t),l(e,kt,t),l(e,Ft,t),m(ee,e,t),l(e,Gt,t),l(e,te,t),l(e,Vt,t),m(ne,e,t),l(e,Zt,t),l(e,le,t),l(e,Nt,t),l(e,Et,t),l(e,Wt,t),m(ie,e,t),l(e,Pt,t),l(e,oe,t),l(e,Bt,t),m(re,e,t),l(e,Rt,t),l(e,v,t),u(v,Le),u(v,hn),u(v,ke),u(v,Jn),u(v,se),u(se,Fe),u(se,bn),m(ae,se,null),l(e,St,t),m(de,e,t),l(e,Dt,t),l(e,pe,t),l(e,zt,t),l(e,Ot,t),l(e,qt,t),m(me,e,t),l(e,Qt,t),l(e,ce,t),l(e,Xt,t),m(ge,e,t),l(e,Yt,t),l(e,T,t),u(T,fe),u(fe,Ge),u(fe,xn),m(Me,fe,null),u(T,In),u(T,ue),u(ue,Ve),u(ue,jn),m(ve,ue,null),l(e,Kt,t),m(ye,e,t),l(e,en,t),l(e,$e,t),l(e,tn,t),l(e,nn,t),l(e,ln,t),m(Te,e,t),l(e,on,t),l(e,U,t),u(U,Ze),u(U,_n),u(U,Ue),u(Ue,Ne),u(Ue,An),m(we,Ue,null),l(e,rn,t),l(e,Ce,t),l(e,sn,t),l(e,he,t),l(e,an,t),l(e,Je,t),l(e,dn,t),l(e,be,t),l(e,pn,t),m(xe,e,t),l(e,mn,t),l(e,Ie,t),l(e,cn,t),l(e,je,t),l(e,gn,t),l(e,_e,t),l(e,fn,t),m(Ae,e,t),l(e,Mn,t),m(He,e,t),l(e,un,t),l(e,Pe,t),vn=!0},p:yl,i(e){vn||(c(w.$$.fragment,e),c(C.$$.fragment,e),c(x.$$.fragment,e),c(_.$$.fragment,e),c(L.$$.fragment,e),c(F.$$.fragment,e),c(V.$$.fragment,e),c(Z.$$.fragment,e),c(N.$$.fragment,e),c(W.$$.fragment,e),c(B.$$.fragment,e),c(D.$$.fragment,e),c(O.$$.fragment,e),c(Q.$$.fragment,e),c(Y.$$.fragment,e),c(ee.$$.fragment,e),c(ne.$$.fragment,e),c(ie.$$.fragment,e),c(re.$$.fragment,e),c(ae.$$.fragment,e),c(de.$$.fragment,e),c(me.$$.fragment,e),c(ge.$$.fragment,e),c(Me.$$.fragment,e),c(ve.$$.fragment,e),c(ye.$$.fragment,e),c(Te.$$.fragment,e),c(we.$$.fragment,e),c(xe.$$.fragment,e),c(Ae.$$.fragment,e),c(He.$$.fragment,e),vn=!0)},o(e){g(w.$$.fragment,e),g(C.$$.fragment,e),g(x.$$.fragment,e),g(_.$$.fragment,e),g(L.$$.fragment,e),g(F.$$.fragment,e),g(V.$$.fragment,e),g(Z.$$.fragment,e),g(N.$$.fragment,e),g(W.$$.fragment,e),g(B.$$.fragment,e),g(D.$$.fragment,e),g(O.$$.fragment,e),g(Q.$$.fragment,e),g(Y.$$.fragment,e),g(ee.$$.fragment,e),g(ne.$$.fragment,e),g(ie.$$.fragment,e),g(re.$$.fragment,e),g(ae.$$.fragment,e),g(de.$$.fragment,e),g(me.$$.fragment,e),g(ge.$$.fragment,e),g(Me.$$.fragment,e),g(ve.$$.fragment,e),g(ye.$$.fragment,e),g(Te.$$.fragment,e),g(we.$$.fragment,e),g(xe.$$.fragment,e),g(Ae.$$.fragment,e),g(He.$$.fragment,e),vn=!1},d(e){e&&(n(Re),n(We),n(Se),n(De),n(ze),n(h),n(Oe),n(J),n(qe),n(b),n(Qe),n(Xe),n(Ye),n(Ke),n(I),n(et),n(j),n(tt),n(nt),n(A),n(lt),n(H),n(it),n(ot),n(rt),n(st),n(k),n(at),n(dt),n(G),n(pt),n(mt),n(ct),n(gt),n(E),n(ft),n(Mt),n(ut),n(vt),n(P),n(yt),n($t),n(R),n(Tt),n(S),n(Ut),n(wt),n(Ct),n(ht),n(z),n(Jt),n(bt),n(q),n(xt),n(It),n(jt),n(_t),n(X),n(At),n(Ht),n(K),n(Lt),n(kt),n(Ft),n(Gt),n(te),n(Vt),n(Zt),n(le),n(Nt),n(Et),n(Wt),n(Pt),n(oe),n(Bt),n(Rt),n(v),n(St),n(Dt),n(pe),n(zt),n(Ot),n(qt),n(Qt),n(ce),n(Xt),n(Yt),n(T),n(Kt),n(en),n($e),n(tn),n(nn),n(ln),n(on),n(U),n(rn),n(Ce),n(sn),n(he),n(an),n(Je),n(dn),n(be),n(pn),n(mn),n(Ie),n(cn),n(je),n(gn),n(_e),n(fn),n(Mn),n(un),n(Pe)),n(y),f(w,e),f(C,e),f(x,e),f(_,e),f(L,e),f(F,e),f(V,e),f(Z,e),f(N,e),f(W,e),f(B,e),f(D,e),f(O,e),f(Q,e),f(Y,e),f(ee,e),f(ne,e),f(ie,e),f(re,e),f(ae),f(de,e),f(me,e),f(ge,e),f(Me),f(ve),f(ye,e),f(Te,e),f(we),f(xe,e),f(Ae,e),f(He,e)}}}const bl='{"title":"Grid World Environment","local":"grid-world-environment","sections":[{"title":"🚀 Environment Overview","local":"-environment-overview","sections":[{"title":"Example Gameplay","local":"example-gameplay","sections":[],"depth":3}],"depth":2},{"title":"🛠️ How to Build an OpenEnv Environment: A Detailed Guide","local":"-how-to-build-an-openenv-environment-a-detailed-guide","sections":[{"title":"1. Scaffolding and Configuration","local":"1-scaffolding-and-configuration","sections":[],"depth":3},{"title":"Directory Structure","local":"directory-structure","sections":[],"depth":3}],"depth":2}],"depth":1}';function xl(Hn){return $l(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Hl extends Tl{constructor(y){super(),Ul(this,y,xl,Jl,vl,{})}}export{Hl as component};

Xet Storage Details

Size:
28.4 kB
·
Xet hash:
fab6ac32d88e3f492209ea3c22ba70e2e66d6bf45bc09ddfb210c56c2eabaa16

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