Buckets:
| import{s as gt,n as Ct,o as It}from"../chunks/scheduler.f3b1e791.js";import{S as Bt,i as St,e as d,s as n,c as i,h as Qt,a as m,d as s,b as a,f as vt,g as p,j as T,k as At,l as _t,m as l,n as r,t as o,o as M,p as c}from"../chunks/index.385ecf51.js";import{C as kt,H as y,E as Wt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.cd4cc6d2.js";import{C as j}from"../chunks/CodeBlock.e0089c8d.js";function Et(pt){let w,de,Me,me,J,Te,u,ye,h,rt=`OpenEnv follows a client-server model inspired by Gymnasium’s simple API. | |
| Agents send structured actions to isolated environments and receive | |
| observations, rewards, and episode status in return.`,je,U,we,f,Je,b,ue,$,ot=`An <strong>Environment</strong> is an isolated execution context where your agent can take | |
| actions and receive observations. Environments usually run as servers and expose | |
| a standard API.`,he,v,Ue,A,Mt=`An <strong>Action</strong> is a structured command that your agent sends to the environment. | |
| Each environment defines its own action schema.`,fe,g,be,C,$e,I,ct=`An <strong>Observation</strong> is the response from the environment after taking an action. | |
| It contains the current state visible to your agent.`,ve,B,Ae,S,ge,Q,dt="A <strong>StepResult</strong> bundles together everything returned from a step:",Ce,_,mt="<li><code>observation</code>: what the agent can see</li> <li><code>reward</code>: numeric reward signal for training</li> <li><code>done</code>: whether the episode has ended</li> <li><code>metadata</code>: additional metadata returned alongside the observation</li>",Ie,k,Be,W,Tt=`A <strong>Rubric</strong> is a composable unit of reward computation that lives inside the | |
| environment. Rubrics can be combined with <code>WeightedSum</code>, <code>Gate</code>, and | |
| <code>Sequential</code>; use LLM judges for subjective criteria; and handle delayed rewards | |
| with <code>TrajectoryRubric</code>. See the <a href="../tutorials/rubrics">Rubrics tutorial</a> | |
| for the full API.`,Se,E,Qe,Z,yt=`A <strong>Client</strong> is how you connect to and interact with an environment. OpenEnv | |
| provides both async and sync clients.`,_e,N,ke,G,We,L,Ee,R,Ze,V,jt="<thead><tr><th>Method</th> <th>Use Case</th> <th>Example</th></tr></thead> <tbody><tr><td>HTTP URL</td> <td>Remote servers, Hugging Face Spaces</td> <td><code>EnvClient(base_url="https://...")</code></td></tr> <tr><td>Docker</td> <td>Local development</td> <td><code>EnvClient.from_docker_image("env:latest")</code></td></tr> <tr><td>Cloud / custom runtime</td> <td>Run the server on a cloud sandbox</td> <td><code>EnvClient.from_docker_image("env:latest", provider=DaytonaProvider())</code></td></tr> <tr><td>Auto-discovery</td> <td>Installed packages or known environments</td> <td><code>AutoEnv.from_env("echo")</code></td></tr></tbody>",Ne,X,wt='See the <a href="runtime-providers">Runtime Providers guide</a> for the available providers and how to pick one.',Ge,z,Le,H,Jt="Every OpenEnv environment consists of:",Re,Y,Ve,x,Xe,P,ze,O,He,F,ut="Custom <code>Action</code>, <code>Observation</code>, and <code>State</code> types subclass the base classes from <code>openenv.core.env_server.types</code> — not <code>pydantic.BaseModel</code> directly. The base <code>Observation</code> already carries <code>done</code> and <code>reward</code> fields, which <code>step()</code> populates; <code>Action</code> and <code>State</code> add metadata plumbing used by the server.",Ye,D,xe,q,Pe,K,ht="Environments subclass the abstract <code>Environment[ActT, ObsT, StateT]</code> base and implement <code>reset</code>, <code>step</code>, and the <code>state</code> property. Reward and termination are carried on the returned observation — they are <strong>not</strong> a tuple return value.",Oe,ee,Fe,te,De,se,Ut="Use <code>create_app</code> from <code>openenv.core.env_server</code> to wrap the environment as a FastAPI application. Pass the environment <strong>class</strong> (used as a factory so each WebSocket session gets its own instance) along with the action and observation types:",qe,le,Ke,ne,ft="This is what the environment’s <code>server/app.py</code> entry point typically does — see <code>envs/echo_env/server/app.py</code> for a minimal real example.",et,ae,tt,ie,bt='Rewards are computed <strong>inside the environment</strong>, not by external code. The base <code>Environment</code> accepts an optional <code>rubric</code> on <code>__init__</code> — pass it to <code>super().__init__(rubric=...)</code>, call <code>self._reset_rubric()</code> from <code>reset</code>, and <code>self._apply_rubric(action, observation)</code> from <code>step</code> (or <code>_apply_rubric_async</code> from <code>step_async</code>). The <a href="../tutorials/rubrics">Rubrics tutorial</a> covers the composable API end-to-end.',st,pe,lt,re,$t='<li><a href="../getting-started">Getting Started</a></li> <li><a href="auto-discovery">Auto-discovery</a></li> <li><a href="first-environment">Your first environment</a></li>',nt,oe,at,ce,it;return J=new kt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),u=new y({props:{title:"Concepts",local:"concepts",headingTag:"h1"}}),U=new j({props:{code:"JTJCLS0tLS0tLS0tLS0tLS0tLS0lMkIlMjAlMjAlMjAlMjAlMjBIVFRQJTJGV2ViU29ja2V0JTIwJTIwJTIwJTIwJTIwJTJCLS0tLS0tLS0tLS0tLS0tLS0lMkIlMEElN0MlMjAlMjAlMjBZb3VyJTIwQWdlbnQlMjAlMjAlMjAlMjAlN0MlMjAlM0MtLS0tLS0tLS0tLS0tLS0tLS0tLSUzRSUyMCU3QyUyMCUyMCUyMEVudmlyb25tZW50JTIwJTIwJTIwJTdDJTBBJTdDJTIwJTIwJTIwKENsaWVudCklMjAlMjAlMjAlMjAlMjAlMjAlN0MlMjAlMjAlMjAlMjBzdGVwJTJGcmVzZXQlMkZzdGF0ZSUyMCUyMCUyMCUyMCU3QyUyMCUyMCUyMCUyMChTZXJ2ZXIpJTIwJTIwJTIwJTIwJTIwJTdDJTBBJTJCLS0tLS0tLS0tLS0tLS0tLS0lMkIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkItLS0tLS0tLS0tLS0tLS0tLSUyQg==",highlighted:`+-----------------+ HTTP/WebSocket +-----------------+ | |
| |<span class="hljs-string"> Your Agent </span>|<span class="hljs-string"> <--------------------> </span>|<span class="hljs-string"> Environment </span>| | |
| |<span class="hljs-string"> (Client) </span>|<span class="hljs-string"> step/reset/state </span>|<span class="hljs-string"> (Server) </span>| | |
| +-----------------+ +-----------------+`,lang:"",wrap:!1}}),f=new y({props:{title:"Key Abstractions",local:"key-abstractions",headingTag:"h2"}}),b=new y({props:{title:"Environment",local:"environment",headingTag:"h3"}}),v=new y({props:{title:"Action",local:"action",headingTag:"h3"}}),g=new j({props:{code:"ZnJvbSUyMGNvZGluZ19lbnYlMjBpbXBvcnQlMjBDb2RlQWN0aW9uJTBBJTBBYWN0aW9uJTIwJTNEJTIwQ29kZUFjdGlvbihjb2RlJTNEJTIycHJpbnQoJ0hlbGxvIScpJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> coding_env <span class="hljs-keyword">import</span> CodeAction | |
| action = CodeAction(code=<span class="hljs-string">"print('Hello!')"</span>)`,lang:"python",wrap:!1}}),C=new y({props:{title:"Observation",local:"observation",headingTag:"h3"}}),B=new j({props:{code:"cmVzdWx0JTIwJTNEJTIwY2xpZW50LnN0ZXAoYWN0aW9uKSUwQXByaW50KHJlc3VsdC5vYnNlcnZhdGlvbi5zdGRvdXQpJTIwJTIwJTIzJTIwJTIySGVsbG8hJTIy",highlighted:`result = client.step(action) | |
| <span class="hljs-built_in">print</span>(result.observation.stdout) <span class="hljs-comment"># "Hello!"</span>`,lang:"python",wrap:!1}}),S=new y({props:{title:"StepResult",local:"stepresult",headingTag:"h3"}}),k=new y({props:{title:"Rubric",local:"rubric",headingTag:"h3"}}),E=new y({props:{title:"Client",local:"client",headingTag:"h3"}}),N=new j({props:{code:"ZnJvbSUyMG9wZW5lbnYlMjBpbXBvcnQlMjBBdXRvRW52JTBBJTBBZW52JTIwJTNEJTIwQXV0b0Vudi5mcm9tX2VudiglMjJjb2RpbmclMjIpJTBBJTBBYXN5bmMlMjB3aXRoJTIwZW52JTIwYXMlMjBjbGllbnQlM0ElMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjBhd2FpdCUyMGNsaWVudC5yZXNldCgpJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwYXdhaXQlMjBjbGllbnQuc3RlcChhY3Rpb24pJTBBJTBBd2l0aCUyMGVudi5zeW5jKCklMjBhcyUyMGNsaWVudCUzQSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGNsaWVudC5yZXNldCgpJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwY2xpZW50LnN0ZXAoYWN0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> openenv <span class="hljs-keyword">import</span> AutoEnv | |
| env = AutoEnv.from_env(<span class="hljs-string">"coding"</span>) | |
| <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> env <span class="hljs-keyword">as</span> client: | |
| result = <span class="hljs-keyword">await</span> client.reset() | |
| result = <span class="hljs-keyword">await</span> client.step(action) | |
| <span class="hljs-keyword">with</span> env.sync() <span class="hljs-keyword">as</span> client: | |
| result = client.reset() | |
| result = client.step(action)`,lang:"python",wrap:!1}}),G=new y({props:{title:"The Step Loop",local:"the-step-loop",headingTag:"h2"}}),L=new j({props:{code:"d2l0aCUyMGVudi5zeW5jKCklMjBhcyUyMGNsaWVudCUzQSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGNsaWVudC5yZXNldCgpJTBBJTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBub3QlMjByZXN1bHQudGVybWluYXRlZCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9icyUyMCUzRCUyMHJlc3VsdC5vYnNlcnZhdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjdGlvbiUyMCUzRCUyMGRlY2lkZV9hY3Rpb24ob2JzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMGNsaWVudC5zdGVwKGFjdGlvbiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsZWFybihyZXN1bHQucmV3YXJkKQ==",highlighted:`<span class="hljs-keyword">with</span> env.sync() <span class="hljs-keyword">as</span> client: | |
| result = client.reset() | |
| <span class="hljs-keyword">while</span> <span class="hljs-keyword">not</span> result.terminated: | |
| obs = result.observation | |
| action = decide_action(obs) | |
| result = client.step(action) | |
| learn(result.reward)`,lang:"python",wrap:!1}}),R=new y({props:{title:"Connection Methods",local:"connection-methods",headingTag:"h2"}}),z=new y({props:{title:"Environment Anatomy",local:"environment-anatomy",headingTag:"h2"}}),Y=new j({props:{code:"bXlfZW52JTJGJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwb3BlbmVudi55YW1sJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTWFuaWZlc3QlMjBmaWxlJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwbXlfZW52JTJGJTBBJUUyJTk0JTgyJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMEElRTIlOTQlODIlMjAlMjAlMjAlRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBjbGllbnQucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDbGllbnQlMjBjbGFzc2VzJTBBJUUyJTk0JTgyJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwc2VydmVyLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2VydmVyJTJGRW52aXJvbm1lbnQlMEElRTIlOTQlODIlMjAlMjAlMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlMjBtb2RlbHMucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQeWRhbnRpYyUyMG1vZGVscyUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMERvY2tlcmZpbGUlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDb250YWluZXIlMjBkZWZpbml0aW9uJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwcHlwcm9qZWN0LnRvbWwlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQYWNrYWdlJTIwbWV0YWRhdGElMEElRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlMjBSRUFETUUubWQlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBEb2N1bWVudGF0aW9u",highlighted:`my_env/ | |
| ├── openenv.yaml <span class="hljs-meta"># Manifest file</span> | |
| ├── my_env/ | |
| │ ├── __init__.py | |
| │ ├── <span class="hljs-keyword">client</span>.py <span class="hljs-meta"># Client classes</span> | |
| │ ├── <span class="hljs-keyword">server</span>.py <span class="hljs-meta"># Server/Environment</span> | |
| │ └── models.py <span class="hljs-meta"># Pydantic models</span> | |
| ├── Dockerfile <span class="hljs-meta"># Container definition</span> | |
| ├── pyproject.toml <span class="hljs-meta"># Package metadata</span> | |
| └── README.md <span class="hljs-meta"># Documentation</span>`,lang:"",wrap:!1}}),x=new y({props:{title:"The Manifest (openenv.yaml)",local:"the-manifest-openenvyaml",headingTag:"h3"}}),P=new j({props:{code:"bmFtZSUzQSUyMG15X2VudiUwQXZlcnNpb24lM0ElMjAwLjEuMCUwQWRlc2NyaXB0aW9uJTNBJTIwTXklMjBjdXN0b20lMjBlbnZpcm9ubWVudCUwQSUwQWNsaWVudCUzQSUwQSUyMCUyMGNsYXNzX25hbWUlM0ElMjBNeUVudkNsaWVudCUwQSUyMCUyMG1vZHVsZSUzQSUyMG15X2Vudi5jbGllbnQlMEElMEFhY3Rpb24lM0ElMEElMjAlMjBjbGFzc19uYW1lJTNBJTIwTXlBY3Rpb24lMEElMjAlMjBtb2R1bGUlM0ElMjBteV9lbnYubW9kZWxzJTBBJTBBb2JzZXJ2YXRpb24lM0ElMEElMjAlMjBjbGFzc19uYW1lJTNBJTIwTXlPYnNlcnZhdGlvbiUwQSUyMCUyMG1vZHVsZSUzQSUyMG15X2Vudi5tb2RlbHMlMEElMEFkZWZhdWx0X2ltYWdlJTNBJTIwbXktZW52JTNBbGF0ZXN0JTBBc3BlY192ZXJzaW9uJTNBJTIwMQ==",highlighted:`<span class="hljs-attr">name:</span> <span class="hljs-string">my_env</span> | |
| <span class="hljs-attr">version:</span> <span class="hljs-number">0.1</span><span class="hljs-number">.0</span> | |
| <span class="hljs-attr">description:</span> <span class="hljs-string">My</span> <span class="hljs-string">custom</span> <span class="hljs-string">environment</span> | |
| <span class="hljs-attr">client:</span> | |
| <span class="hljs-attr">class_name:</span> <span class="hljs-string">MyEnvClient</span> | |
| <span class="hljs-attr">module:</span> <span class="hljs-string">my_env.client</span> | |
| <span class="hljs-attr">action:</span> | |
| <span class="hljs-attr">class_name:</span> <span class="hljs-string">MyAction</span> | |
| <span class="hljs-attr">module:</span> <span class="hljs-string">my_env.models</span> | |
| <span class="hljs-attr">observation:</span> | |
| <span class="hljs-attr">class_name:</span> <span class="hljs-string">MyObservation</span> | |
| <span class="hljs-attr">module:</span> <span class="hljs-string">my_env.models</span> | |
| <span class="hljs-attr">default_image:</span> <span class="hljs-string">my-env:latest</span> | |
| <span class="hljs-attr">spec_version:</span> <span class="hljs-number">1</span>`,lang:"yaml",wrap:!1}}),O=new y({props:{title:"Models (Pydantic)",local:"models-pydantic",headingTag:"h3"}}),D=new j({props:{code:"ZnJvbSUyMG9wZW5lbnYuY29yZS5lbnZfc2VydmVyLnR5cGVzJTIwaW1wb3J0JTIwQWN0aW9uJTJDJTIwT2JzZXJ2YXRpb24lMkMlMjBTdGF0ZSUwQSUwQSUwQWNsYXNzJTIwTXlBY3Rpb24oQWN0aW9uKSUzQSUwQSUyMCUyMCUyMCUyMGNvbW1hbmQlM0ElMjBzdHIlMEElMjAlMjAlMjAlMjBhcmdzJTNBJTIwbGlzdCU1QnN0ciU1RCUyMCUzRCUyMCU1QiU1RCUwQSUwQSUwQWNsYXNzJTIwTXlPYnNlcnZhdGlvbihPYnNlcnZhdGlvbiklM0ElMEElMjAlMjAlMjAlMjBvdXRwdXQlM0ElMjBzdHIlMEElMjAlMjAlMjAlMjBzdWNjZXNzJTNBJTIwYm9vbCUwQSUwQSUwQWNsYXNzJTIwTXlTdGF0ZShTdGF0ZSklM0ElMEElMjAlMjAlMjAlMjBoaXN0b3J5JTNBJTIwbGlzdCU1QnN0ciU1RCUyMCUzRCUyMCU1QiU1RA==",highlighted:`<span class="hljs-keyword">from</span> openenv.core.env_server.types <span class="hljs-keyword">import</span> Action, Observation, State | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyAction</span>(<span class="hljs-title class_ inherited__">Action</span>): | |
| command: <span class="hljs-built_in">str</span> | |
| args: <span class="hljs-built_in">list</span>[<span class="hljs-built_in">str</span>] = [] | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyObservation</span>(<span class="hljs-title class_ inherited__">Observation</span>): | |
| output: <span class="hljs-built_in">str</span> | |
| success: <span class="hljs-built_in">bool</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyState</span>(<span class="hljs-title class_ inherited__">State</span>): | |
| history: <span class="hljs-built_in">list</span>[<span class="hljs-built_in">str</span>] = []`,lang:"python",wrap:!1}}),q=new y({props:{title:"Environment Class",local:"environment-class",headingTag:"h3"}}),ee=new j({props:{code:"ZnJvbSUyMG9wZW5lbnYuY29yZS5lbnZfc2VydmVyLmludGVyZmFjZXMlMjBpbXBvcnQlMjBFbnZpcm9ubWVudCUwQSUwQSUwQWNsYXNzJTIwTXlFbnZpcm9ubWVudChFbnZpcm9ubWVudCU1Qk15QWN0aW9uJTJDJTIwTXlPYnNlcnZhdGlvbiUyQyUyME15U3RhdGUlNUQpJTNBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcmVzZXQoc2VsZiUyQyUyMHNlZWQlM0ROb25lJTJDJTIwZXBpc29kZV9pZCUzRE5vbmUlMkMlMjAqKmt3YXJncyklMjAtJTNFJTIwTXlPYnNlcnZhdGlvbiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4uLiUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHN0ZXAoc2VsZiUyQyUyMGFjdGlvbiUzQSUyME15QWN0aW9uJTJDJTIwdGltZW91dF9zJTNETm9uZSUyQyUyMCoqa3dhcmdzKSUyMC0lM0UlMjBNeU9ic2VydmF0aW9uJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLi4uJTBBJTBBJTIwJTIwJTIwJTIwJTQwcHJvcGVydHklMEElMjAlMjAlMjAlMjBkZWYlMjBzdGF0ZShzZWxmKSUyMC0lM0UlMjBNeVN0YXRlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLi4u",highlighted:`<span class="hljs-keyword">from</span> openenv.core.env_server.interfaces <span class="hljs-keyword">import</span> Environment | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyEnvironment</span>(Environment[MyAction, MyObservation, MyState]): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">reset</span>(<span class="hljs-params">self, seed=<span class="hljs-literal">None</span>, episode_id=<span class="hljs-literal">None</span>, **kwargs</span>) -> MyObservation: | |
| ... | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">step</span>(<span class="hljs-params">self, action: MyAction, timeout_s=<span class="hljs-literal">None</span>, **kwargs</span>) -> MyObservation: | |
| ... | |
| <span class="hljs-meta"> @property</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">state</span>(<span class="hljs-params">self</span>) -> MyState: | |
| ...`,lang:"python",wrap:!1}}),te=new y({props:{title:"Server (FastAPI)",local:"server-fastapi",headingTag:"h3"}}),le=new j({props:{code:"ZnJvbSUyMG9wZW5lbnYuY29yZS5lbnZfc2VydmVyJTIwaW1wb3J0JTIwY3JlYXRlX2FwcCUwQSUwQWFwcCUyMCUzRCUyMGNyZWF0ZV9hcHAoJTBBJTIwJTIwJTIwJTIwTXlFbnZpcm9ubWVudCUyQyUwQSUyMCUyMCUyMCUyME15QWN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwTXlPYnNlcnZhdGlvbiUyQyUwQSUyMCUyMCUyMCUyMGVudl9uYW1lJTNEJTIybXlfZW52JTIyJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> openenv.core.env_server <span class="hljs-keyword">import</span> create_app | |
| app = create_app( | |
| MyEnvironment, | |
| MyAction, | |
| MyObservation, | |
| env_name=<span class="hljs-string">"my_env"</span>, | |
| )`,lang:"python",wrap:!1}}),ae=new y({props:{title:"Rewards via the Rubric",local:"rewards-via-the-rubric",headingTag:"h3"}}),pe=new y({props:{title:"Next Steps",local:"next-steps",headingTag:"h2"}}),oe=new Wt({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/guides/concepts.md"}}),{c(){w=d("meta"),de=n(),Me=d("p"),me=n(),i(J.$$.fragment),Te=n(),i(u.$$.fragment),ye=n(),h=d("p"),h.textContent=rt,je=n(),i(U.$$.fragment),we=n(),i(f.$$.fragment),Je=n(),i(b.$$.fragment),ue=n(),$=d("p"),$.innerHTML=ot,he=n(),i(v.$$.fragment),Ue=n(),A=d("p"),A.innerHTML=Mt,fe=n(),i(g.$$.fragment),be=n(),i(C.$$.fragment),$e=n(),I=d("p"),I.innerHTML=ct,ve=n(),i(B.$$.fragment),Ae=n(),i(S.$$.fragment),ge=n(),Q=d("p"),Q.innerHTML=dt,Ce=n(),_=d("ul"),_.innerHTML=mt,Ie=n(),i(k.$$.fragment),Be=n(),W=d("p"),W.innerHTML=Tt,Se=n(),i(E.$$.fragment),Qe=n(),Z=d("p"),Z.innerHTML=yt,_e=n(),i(N.$$.fragment),ke=n(),i(G.$$.fragment),We=n(),i(L.$$.fragment),Ee=n(),i(R.$$.fragment),Ze=n(),V=d("table"),V.innerHTML=jt,Ne=n(),X=d("p"),X.innerHTML=wt,Ge=n(),i(z.$$.fragment),Le=n(),H=d("p"),H.textContent=Jt,Re=n(),i(Y.$$.fragment),Ve=n(),i(x.$$.fragment),Xe=n(),i(P.$$.fragment),ze=n(),i(O.$$.fragment),He=n(),F=d("p"),F.innerHTML=ut,Ye=n(),i(D.$$.fragment),xe=n(),i(q.$$.fragment),Pe=n(),K=d("p"),K.innerHTML=ht,Oe=n(),i(ee.$$.fragment),Fe=n(),i(te.$$.fragment),De=n(),se=d("p"),se.innerHTML=Ut,qe=n(),i(le.$$.fragment),Ke=n(),ne=d("p"),ne.innerHTML=ft,et=n(),i(ae.$$.fragment),tt=n(),ie=d("p"),ie.innerHTML=bt,st=n(),i(pe.$$.fragment),lt=n(),re=d("ul"),re.innerHTML=$t,nt=n(),i(oe.$$.fragment),at=n(),ce=d("p"),this.h()},l(e){const t=Qt("svelte-u9bgzb",document.head);w=m(t,"META",{name:!0,content:!0}),t.forEach(s),de=a(e),Me=m(e,"P",{}),vt(Me).forEach(s),me=a(e),p(J.$$.fragment,e),Te=a(e),p(u.$$.fragment,e),ye=a(e),h=m(e,"P",{"data-svelte-h":!0}),T(h)!=="svelte-1t0ocwp"&&(h.textContent=rt),je=a(e),p(U.$$.fragment,e),we=a(e),p(f.$$.fragment,e),Je=a(e),p(b.$$.fragment,e),ue=a(e),$=m(e,"P",{"data-svelte-h":!0}),T($)!=="svelte-132not7"&&($.innerHTML=ot),he=a(e),p(v.$$.fragment,e),Ue=a(e),A=m(e,"P",{"data-svelte-h":!0}),T(A)!=="svelte-97fx7p"&&(A.innerHTML=Mt),fe=a(e),p(g.$$.fragment,e),be=a(e),p(C.$$.fragment,e),$e=a(e),I=m(e,"P",{"data-svelte-h":!0}),T(I)!=="svelte-4k1td9"&&(I.innerHTML=ct),ve=a(e),p(B.$$.fragment,e),Ae=a(e),p(S.$$.fragment,e),ge=a(e),Q=m(e,"P",{"data-svelte-h":!0}),T(Q)!=="svelte-1kudclj"&&(Q.innerHTML=dt),Ce=a(e),_=m(e,"UL",{"data-svelte-h":!0}),T(_)!=="svelte-b2s6zd"&&(_.innerHTML=mt),Ie=a(e),p(k.$$.fragment,e),Be=a(e),W=m(e,"P",{"data-svelte-h":!0}),T(W)!=="svelte-fhhojp"&&(W.innerHTML=Tt),Se=a(e),p(E.$$.fragment,e),Qe=a(e),Z=m(e,"P",{"data-svelte-h":!0}),T(Z)!=="svelte-12bzk92"&&(Z.innerHTML=yt),_e=a(e),p(N.$$.fragment,e),ke=a(e),p(G.$$.fragment,e),We=a(e),p(L.$$.fragment,e),Ee=a(e),p(R.$$.fragment,e),Ze=a(e),V=m(e,"TABLE",{"data-svelte-h":!0}),T(V)!=="svelte-1fuqft5"&&(V.innerHTML=jt),Ne=a(e),X=m(e,"P",{"data-svelte-h":!0}),T(X)!=="svelte-1g9om88"&&(X.innerHTML=wt),Ge=a(e),p(z.$$.fragment,e),Le=a(e),H=m(e,"P",{"data-svelte-h":!0}),T(H)!=="svelte-2ibhqe"&&(H.textContent=Jt),Re=a(e),p(Y.$$.fragment,e),Ve=a(e),p(x.$$.fragment,e),Xe=a(e),p(P.$$.fragment,e),ze=a(e),p(O.$$.fragment,e),He=a(e),F=m(e,"P",{"data-svelte-h":!0}),T(F)!=="svelte-f0ueuw"&&(F.innerHTML=ut),Ye=a(e),p(D.$$.fragment,e),xe=a(e),p(q.$$.fragment,e),Pe=a(e),K=m(e,"P",{"data-svelte-h":!0}),T(K)!=="svelte-1xuxg3s"&&(K.innerHTML=ht),Oe=a(e),p(ee.$$.fragment,e),Fe=a(e),p(te.$$.fragment,e),De=a(e),se=m(e,"P",{"data-svelte-h":!0}),T(se)!=="svelte-x9mbyn"&&(se.innerHTML=Ut),qe=a(e),p(le.$$.fragment,e),Ke=a(e),ne=m(e,"P",{"data-svelte-h":!0}),T(ne)!=="svelte-ns4tn5"&&(ne.innerHTML=ft),et=a(e),p(ae.$$.fragment,e),tt=a(e),ie=m(e,"P",{"data-svelte-h":!0}),T(ie)!=="svelte-op9d1b"&&(ie.innerHTML=bt),st=a(e),p(pe.$$.fragment,e),lt=a(e),re=m(e,"UL",{"data-svelte-h":!0}),T(re)!=="svelte-b3vify"&&(re.innerHTML=$t),nt=a(e),p(oe.$$.fragment,e),at=a(e),ce=m(e,"P",{}),vt(ce).forEach(s),this.h()},h(){At(w,"name","hf:doc:metadata"),At(w,"content",Zt)},m(e,t){_t(document.head,w),l(e,de,t),l(e,Me,t),l(e,me,t),r(J,e,t),l(e,Te,t),r(u,e,t),l(e,ye,t),l(e,h,t),l(e,je,t),r(U,e,t),l(e,we,t),r(f,e,t),l(e,Je,t),r(b,e,t),l(e,ue,t),l(e,$,t),l(e,he,t),r(v,e,t),l(e,Ue,t),l(e,A,t),l(e,fe,t),r(g,e,t),l(e,be,t),r(C,e,t),l(e,$e,t),l(e,I,t),l(e,ve,t),r(B,e,t),l(e,Ae,t),r(S,e,t),l(e,ge,t),l(e,Q,t),l(e,Ce,t),l(e,_,t),l(e,Ie,t),r(k,e,t),l(e,Be,t),l(e,W,t),l(e,Se,t),r(E,e,t),l(e,Qe,t),l(e,Z,t),l(e,_e,t),r(N,e,t),l(e,ke,t),r(G,e,t),l(e,We,t),r(L,e,t),l(e,Ee,t),r(R,e,t),l(e,Ze,t),l(e,V,t),l(e,Ne,t),l(e,X,t),l(e,Ge,t),r(z,e,t),l(e,Le,t),l(e,H,t),l(e,Re,t),r(Y,e,t),l(e,Ve,t),r(x,e,t),l(e,Xe,t),r(P,e,t),l(e,ze,t),r(O,e,t),l(e,He,t),l(e,F,t),l(e,Ye,t),r(D,e,t),l(e,xe,t),r(q,e,t),l(e,Pe,t),l(e,K,t),l(e,Oe,t),r(ee,e,t),l(e,Fe,t),r(te,e,t),l(e,De,t),l(e,se,t),l(e,qe,t),r(le,e,t),l(e,Ke,t),l(e,ne,t),l(e,et,t),r(ae,e,t),l(e,tt,t),l(e,ie,t),l(e,st,t),r(pe,e,t),l(e,lt,t),l(e,re,t),l(e,nt,t),r(oe,e,t),l(e,at,t),l(e,ce,t),it=!0},p:Ct,i(e){it||(o(J.$$.fragment,e),o(u.$$.fragment,e),o(U.$$.fragment,e),o(f.$$.fragment,e),o(b.$$.fragment,e),o(v.$$.fragment,e),o(g.$$.fragment,e),o(C.$$.fragment,e),o(B.$$.fragment,e),o(S.$$.fragment,e),o(k.$$.fragment,e),o(E.$$.fragment,e),o(N.$$.fragment,e),o(G.$$.fragment,e),o(L.$$.fragment,e),o(R.$$.fragment,e),o(z.$$.fragment,e),o(Y.$$.fragment,e),o(x.$$.fragment,e),o(P.$$.fragment,e),o(O.$$.fragment,e),o(D.$$.fragment,e),o(q.$$.fragment,e),o(ee.$$.fragment,e),o(te.$$.fragment,e),o(le.$$.fragment,e),o(ae.$$.fragment,e),o(pe.$$.fragment,e),o(oe.$$.fragment,e),it=!0)},o(e){M(J.$$.fragment,e),M(u.$$.fragment,e),M(U.$$.fragment,e),M(f.$$.fragment,e),M(b.$$.fragment,e),M(v.$$.fragment,e),M(g.$$.fragment,e),M(C.$$.fragment,e),M(B.$$.fragment,e),M(S.$$.fragment,e),M(k.$$.fragment,e),M(E.$$.fragment,e),M(N.$$.fragment,e),M(G.$$.fragment,e),M(L.$$.fragment,e),M(R.$$.fragment,e),M(z.$$.fragment,e),M(Y.$$.fragment,e),M(x.$$.fragment,e),M(P.$$.fragment,e),M(O.$$.fragment,e),M(D.$$.fragment,e),M(q.$$.fragment,e),M(ee.$$.fragment,e),M(te.$$.fragment,e),M(le.$$.fragment,e),M(ae.$$.fragment,e),M(pe.$$.fragment,e),M(oe.$$.fragment,e),it=!1},d(e){e&&(s(de),s(Me),s(me),s(Te),s(ye),s(h),s(je),s(we),s(Je),s(ue),s($),s(he),s(Ue),s(A),s(fe),s(be),s($e),s(I),s(ve),s(Ae),s(ge),s(Q),s(Ce),s(_),s(Ie),s(Be),s(W),s(Se),s(Qe),s(Z),s(_e),s(ke),s(We),s(Ee),s(Ze),s(V),s(Ne),s(X),s(Ge),s(Le),s(H),s(Re),s(Ve),s(Xe),s(ze),s(He),s(F),s(Ye),s(xe),s(Pe),s(K),s(Oe),s(Fe),s(De),s(se),s(qe),s(Ke),s(ne),s(et),s(tt),s(ie),s(st),s(lt),s(re),s(nt),s(at),s(ce)),s(w),c(J,e),c(u,e),c(U,e),c(f,e),c(b,e),c(v,e),c(g,e),c(C,e),c(B,e),c(S,e),c(k,e),c(E,e),c(N,e),c(G,e),c(L,e),c(R,e),c(z,e),c(Y,e),c(x,e),c(P,e),c(O,e),c(D,e),c(q,e),c(ee,e),c(te,e),c(le,e),c(ae,e),c(pe,e),c(oe,e)}}}const Zt='{"title":"Concepts","local":"concepts","sections":[{"title":"Key Abstractions","local":"key-abstractions","sections":[{"title":"Environment","local":"environment","sections":[],"depth":3},{"title":"Action","local":"action","sections":[],"depth":3},{"title":"Observation","local":"observation","sections":[],"depth":3},{"title":"StepResult","local":"stepresult","sections":[],"depth":3},{"title":"Rubric","local":"rubric","sections":[],"depth":3},{"title":"Client","local":"client","sections":[],"depth":3}],"depth":2},{"title":"The Step Loop","local":"the-step-loop","sections":[],"depth":2},{"title":"Connection Methods","local":"connection-methods","sections":[],"depth":2},{"title":"Environment Anatomy","local":"environment-anatomy","sections":[{"title":"The Manifest (openenv.yaml)","local":"the-manifest-openenvyaml","sections":[],"depth":3},{"title":"Models (Pydantic)","local":"models-pydantic","sections":[],"depth":3},{"title":"Environment Class","local":"environment-class","sections":[],"depth":3},{"title":"Server (FastAPI)","local":"server-fastapi","sections":[],"depth":3},{"title":"Rewards via the Rubric","local":"rewards-via-the-rubric","sections":[],"depth":3}],"depth":2},{"title":"Next Steps","local":"next-steps","sections":[],"depth":2}],"depth":1}';function Nt(pt){return It(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Xt extends Bt{constructor(w){super(),St(this,w,Nt,Et,gt,{})}}export{Xt as component}; | |
Xet Storage Details
- Size:
- 26.1 kB
- Xet hash:
- ce206b0f03f7a7900178cfdfaade2794444c763aca0a0fbefa4241cfacfac1ed
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.