Buckets:

download
raw
28.4 kB
import{s as Zl,n as kl,o as Wl}from"../chunks/scheduler.2b22cead.js";import{S as Vl,i as Sl,e as a,s as i,c as p,h as _l,a as r,d as l,b as s,f as Ft,g as m,j as o,k as Bl,l as w,m as n,n as c,t as M,o as y,p as T}from"../chunks/index.1a0e8013.js";import{C as Xl,H as J,E as Al}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.c02d2aaf.js";import{C as h}from"../chunks/CodeBlock.1fc7180e.js";function El(Qt){let U,Se,We,_e,g,Xe,v,Ae,$,qt="A web search environment that searches the web with Google Search API (via Serper.dev).",Ee,b,He,I,Fe,j,Dt="This environment requires a Serper.dev API key to function.",Le,f,be,Ot='<p><strong>Get your API Key:</strong></p> <ul><li>Visit <a href="https://serper.dev/" rel="nofollow">Serper.dev</a> and sign up for an account</li> <li>Navigate to your dashboard to get your API key</li> <li>Free tier includes 2,500 free searches</li></ul>',Lt,u,Ie,Kt="<strong>Configure the API Key:</strong>",Yt,je,el="<strong>For Local Development:</strong>",Nt,C,Gt,Ce,tl="<strong>For Docker:</strong>",xt,B,Rt,Be,ll="<strong>For Hugging Face Spaces (after deployment):</strong>",Pt,Ze,nl="<li>Navigate to your Space’s settings page: <code>https://huggingface.co/spaces/USERNAME/SPACE_NAME/settings</code></li> <li>Scroll to the “Repository secrets” section</li> <li>Click “New secret”</li> <li>Name: <code>SERPER_API_KEY</code></li> <li>Value: Your Serper.dev API key</li> <li>Click “Add”</li> <li>The Space will automatically restart and use your API key</li>",zt,ke,il="<p><strong>Important:</strong> Never commit your API key to code. Always use environment variables or secrets management.</p>",Ye,Z,Ne,k,sl="The simplest way to use the Web Search environment is through the <code>WebSearchEnvironment</code> class:",Ge,W,xe,V,al="That’s it! The <code>WebSearchEnvironment.from_docker_image()</code> method handles:",Re,S,rl="<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>",Pe,_,ze,X,ol="Before using the environment, you need to build the Docker image:",Qe,A,qe,E,De,H,pl="You can easily deploy your OpenEnv environment to Hugging Face Spaces using the <code>openenv push</code> command:",Oe,F,Ke,L,ml="The <code>openenv push</code> command will:",et,Y,cl="<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>",tt,N,lt,G,Ml="<li>Authenticate with Hugging Face: The command will prompt for login if not already authenticated</li>",nt,x,it,R,yl="<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>",st,P,at,z,rt,Q,Tl=`After deployment, your space will be available at:
<code>https://huggingface.co/spaces/&lt;repo-id&gt;</code>`,ot,q,ul=`<strong>⚠️ Important: Configure your API key!</strong>
After deployment, you must add your Serper.dev API key as a secret in the Space settings (see <a href="#api-key-setup">API Key Setup</a> above). The environment will not work without it.`,pt,D,Jl="The deployed space includes:",mt,O,wl="<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>",ct,K,Mt,ee,yt,te,dl="<strong>WebSearchAction</strong>: Contains a single field",Tt,le,hl="<li><code>query</code> (str) - The query to search for</li> <li><code>temp_api_key</code> (str) - Temporary Serper.dev API key if not set in envrionment variables.</li>",ut,ne,Jt,ie,Ul="<strong>WebSearchObservation</strong>: Contains the echo response and metadata",wt,se,fl="<li><code>content</code> (str) - The formatted prompt that aggregates both query and web contents</li> <li><code>web_contents</code> (list) - List of web contents for top ranked web pages</li> <li><code>reward</code> (float) - Reward is not defined in this scenario</li> <li><code>done</code> (bool) - Always False for search environment</li> <li><code>metadata</code> (dict) - Additional info like step count</li>",dt,ae,ht,re,gl="The reward is undefined here.",Ut,oe,ft,pe,gt,me,vl="If you already have a Web Search environment server running, you can connect directly:",vt,ce,$t,Me,$l="Note: When connecting to an existing server, <code>web_search_env.close()</code> will NOT stop the server.",bt,ye,It,Te,jt,ue,bl="Test the environment logic directly without starting the HTTP server:",Ct,Je,Bt,we,Il="This verifies that:",Zt,de,jl="<li>Environment resets correctly</li> <li>Step executes actions properly</li> <li>State tracking works</li> <li>Rewards are calculated correctly</li>",kt,he,Wt,Ue,Cl="Run the server locally for development:",Vt,fe,St,ge,_t,ve,Xt,$e,At,Ve,Et;return g=new Xl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),v=new J({props:{title:"Web Search Environment",local:"web-search-environment",headingTag:"h1"}}),b=new J({props:{title:"Prerequisites",local:"prerequisites",headingTag:"h2"}}),I=new J({props:{title:"API Key Setup",local:"api-key-setup",headingTag:"h3"}}),C=new h({props:{code:"ZXhwb3J0JTIwU0VSUEVSX0FQSV9LRVklM0QlMjJ5b3VyLWFwaS1rZXktaGVyZSUyMg==",highlighted:'<span class="hljs-built_in">export</span> SERPER_API_KEY=<span class="hljs-string">&quot;your-api-key-here&quot;</span>',lang:"bash",wrap:!1}}),B=new h({props:{code:"ZG9ja2VyJTIwcnVuJTIwLWUlMjBTRVJQRVJfQVBJX0tFWSUzRCUyMnlvdXItYXBpLWtleS1oZXJlJTIyJTIwd2ViX3NlYXJjaC1lbnYlM0FsYXRlc3Q=",highlighted:'docker run -e SERPER_API_KEY=<span class="hljs-string">&quot;your-api-key-here&quot;</span> web_search-env:latest',lang:"bash",wrap:!1}}),Z=new J({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),W=new h({props:{code:"ZnJvbSUyMGVudnMud2Vic2VhcmNoX2Vudi5zZXJ2ZXIud2Vic2VhcmNoX2Vudl9lbnZpcm9ubWVudCUyMGltcG9ydCUyMFdlYlNlYXJjaEVudmlyb25tZW50JTBBZnJvbSUyMGVudnMud2Vic2VhcmNoX2VudiUyMGltcG9ydCUyMFdlYlNlYXJjaEFjdGlvbiUwQSUwQXRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMENyZWF0ZSUyMGVudmlyb25tZW50JTIwZnJvbSUyMERvY2tlciUyMGltYWdlJTBBJTIwJTIwJTIwJTIwd2ViX3NlYXJjaF9lbnYlMjAlM0QlMjBXZWJTZWFyY2hFbnZpcm9ubWVudC5mcm9tX2RvY2tlcl9pbWFnZSglMjJ3ZWJfc2VhcmNoLWVudiUzQWxhdGVzdCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZXNldCUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMHdlYl9zZWFyY2hfZW52LnJlc2V0KCklMEElMjAlMjAlMjAlMjBwcmludChmJTIyUmVzZXQlM0ElMjAlN0JyZXN1bHQub2JzZXJ2YXRpb24uY29udGVudCU3RCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTZW5kJTIwYSUyMHNlYXJjaCUyMHF1ZXJ5JTBBJTIwJTIwJTIwJTIwcXVlcnklMjAlM0QlMjAlMjJXaGF0JTIwaXMlMjB0aGUlMjBjYXBpdGFsJTIwb2YlMjBDaGluYSUzRiUyMiUwQSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMHdlYl9zZWFyY2hfZW52LnN0ZXAoV2ViU2VhcmNoQWN0aW9uKHF1ZXJ5JTNEcXVlcnkpKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJGb3JtYXR0ZWQlMjBzZWFyY2glMjByZXN1bHQlM0ElMjIlMkMlMjByZXN1bHQub2JzZXJ2YXRpb24uY29udGVudCklMEElMjAlMjAlMjAlMjBwcmludChmJTIySW5kaXZpZHVhbCUyMHdlYiUyMGNvbnRlbnRzJTNBJTIyJTJDJTIwcmVzdWx0Lm9ic2VydmF0aW9uLndlYl9jb250ZW50cyklMEElMEFmaW5hbGx5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQWx3YXlzJTIwY2xlYW4lMjB1cCUwQSUyMCUyMCUyMCUyMHdlYl9zZWFyY2hfZW52LmNsb3NlKCk=",highlighted:`<span class="hljs-keyword">from</span> envs.websearch_env.server.websearch_env_environment <span class="hljs-keyword">import</span> WebSearchEnvironment
<span class="hljs-keyword">from</span> envs.websearch_env <span class="hljs-keyword">import</span> WebSearchAction
<span class="hljs-keyword">try</span>:
<span class="hljs-comment"># Create environment from Docker image</span>
web_search_env = WebSearchEnvironment.from_docker_image(<span class="hljs-string">&quot;web_search-env:latest&quot;</span>)
<span class="hljs-comment"># Reset</span>
result = web_search_env.reset()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Reset: <span class="hljs-subst">{result.observation.content}</span>&quot;</span>)
<span class="hljs-comment"># Send a search query</span>
query = <span class="hljs-string">&quot;What is the capital of China?&quot;</span>
result = web_search_env.step(WebSearchAction(query=query))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Formatted search result:&quot;</span>, result.observation.content)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Individual web contents:&quot;</span>, result.observation.web_contents)
<span class="hljs-keyword">finally</span>:
<span class="hljs-comment"># Always clean up</span>
web_search_env.close()`,lang:"python",wrap:!1}}),_=new J({props:{title:"Building the Docker Image",local:"building-the-docker-image",headingTag:"h2"}}),A=new h({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMHdlYnNlYXJjaF9lbnYlMjBkaXJlY3RvcnklMEFjZCUyMGVudnMlMkZ3ZWJzZWFyY2hfZW52JTBBZG9ja2VyJTIwYnVpbGQlMjAtdCUyMHdlYl9zZWFyY2gtZW52JTNBbGF0ZXN0JTIwLWYlMjBzZXJ2ZXIlMkZEb2NrZXJmaWxlJTIwLg==",highlighted:`<span class="hljs-comment"># From the websearch_env directory</span>
<span class="hljs-built_in">cd</span> envs/websearch_env
docker build -t web_search-env:latest -f server/Dockerfile .`,lang:"bash",wrap:!1}}),E=new J({props:{title:"Deploying to Hugging Face Spaces",local:"deploying-to-hugging-face-spaces",headingTag:"h2"}}),F=new h({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}}),N=new J({props:{title:"Prerequisites",local:"prerequisites",headingTag:"h3"}}),x=new J({props:{title:"Options",local:"options",headingTag:"h3"}}),P=new J({props:{title:"Examples",local:"examples",headingTag:"h3"}}),z=new h({props:{code:"JTIzJTIwUHVzaCUyMHRvJTIweW91ciUyMHBlcnNvbmFsJTIwbmFtZXNwYWNlJTIwKGRlZmF1bHRzJTIwdG8lMjB1c2VybmFtZSUyRmVudi1uYW1lJTIwZnJvbSUyMG9wZW5lbnYueWFtbCklMEFvcGVuZW52JTIwcHVzaCUwQSUwQSUyMyUyMFB1c2glMjB0byUyMGElMjBzcGVjaWZpYyUyMHJlcG9zaXRvcnklMEFvcGVuZW52JTIwcHVzaCUyMC0tcmVwby1pZCUyMG15LW9yZyUyRm15LWVudiUwQSUwQSUyMyUyMFB1c2glMjB3aXRoJTIwYSUyMGN1c3RvbSUyMGJhc2UlMjBpbWFnZSUwQW9wZW5lbnYlMjBwdXNoJTIwLS1iYXNlLWltYWdlJTIwZ2hjci5pbyUyRmh1Z2dpbmdmYWNlJTJGb3BlbmVudi1iYXNlJTNBbGF0ZXN0JTBBJTBBJTIzJTIwUHVzaCUyMGFzJTIwYSUyMHByaXZhdGUlMjBzcGFjZSUwQW9wZW5lbnYlMjBwdXNoJTIwLS1wcml2YXRlJTBBJTBBJTIzJTIwQ29tYmluZSUyMG9wdGlvbnMlMEFvcGVuZW52JTIwcHVzaCUyMC0tcmVwby1pZCUyMG15LW9yZyUyRm15LWVudiUyMC0tYmFzZS1pbWFnZSUyMGN1c3RvbS1iYXNlJTNBbGF0ZXN0JTIwLS1wcml2YXRl",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/my-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/my-env --base-image custom-base:latest --private`,lang:"bash",wrap:!1}}),K=new J({props:{title:"Environment Details",local:"environment-details",headingTag:"h2"}}),ee=new J({props:{title:"Action",local:"action",headingTag:"h3"}}),ne=new J({props:{title:"Observation",local:"observation",headingTag:"h3"}}),ae=new J({props:{title:"Reward",local:"reward",headingTag:"h3"}}),oe=new J({props:{title:"Advanced Usage",local:"advanced-usage",headingTag:"h2"}}),pe=new J({props:{title:"Connecting to an Existing Server",local:"connecting-to-an-existing-server",headingTag:"h3"}}),ce=new h({props:{code:"ZnJvbSUyMGVudnMud2Vic2VhcmNoX2VudiUyMGltcG9ydCUyMFdlYlNlYXJjaEVudmlyb25tZW50JTBBJTBBJTIzJTIwQ29ubmVjdCUyMHRvJTIwZXhpc3RpbmclMjBzZXJ2ZXIlMEF3ZWJfc2VhcmNoX2VudiUyMCUzRCUyMFdlYlNlYXJjaEVudmlyb25tZW50KGJhc2VfdXJsJTNEJTIyJTNDRU5WX0hUVFBfVVJMX0hFUkUlM0UlMjIpJTBBJTBBJTIzJTIwVXNlJTIwYXMlMjBub3JtYWwlMEFyZXN1bHQlMjAlM0QlMjB3ZWJfc2VhcmNoX2Vudi5yZXNldCgpJTBBcmVzdWx0JTIwJTNEJTIwd2ViX3NlYXJjaF9lbnYuc3RlcChXZWJTZWFyY2hBY3Rpb24ocXVlcnklM0QlMjJXaGF0JTIwaXMlMjB0aGUlMjBjYXBpdGFsJTIwb2YlMjBDaGluYSUzRiUyMikp",highlighted:`<span class="hljs-keyword">from</span> envs.websearch_env <span class="hljs-keyword">import</span> WebSearchEnvironment
<span class="hljs-comment"># Connect to existing server</span>
web_search_env = WebSearchEnvironment(base_url=<span class="hljs-string">&quot;&lt;ENV_HTTP_URL_HERE&gt;&quot;</span>)
<span class="hljs-comment"># Use as normal</span>
result = web_search_env.reset()
result = web_search_env.step(WebSearchAction(query=<span class="hljs-string">&quot;What is the capital of China?&quot;</span>))`,lang:"python",wrap:!1}}),ye=new J({props:{title:"Development & Testing",local:"development--testing",headingTag:"h2"}}),Te=new J({props:{title:"Direct Environment Testing",local:"direct-environment-testing",headingTag:"h3"}}),Je=new h({props:{code:"JTIzJTIwRnJvbSUyMHRoZSUyMHNlcnZlciUyMGRpcmVjdG9yeSUwQXB5dGhvbjMlMjBzZXJ2ZXIlMkZ3ZWJfc2VhcmNoX2Vudmlyb25tZW50LnB5",highlighted:`<span class="hljs-comment"># From the server directory</span>
python3 server/web_search_environment.py`,lang:"bash",wrap:!1}}),he=new J({props:{title:"Running Locally",local:"running-locally",headingTag:"h3"}}),fe=new h({props:{code:"JTIzJTIwTWFrZSUyMHN1cmUlMjB0byUyMHNldCUyMHlvdXIlMjBBUEklMjBrZXklMjBmaXJzdCUwQWV4cG9ydCUyMFNFUlBFUl9BUElfS0VZJTNEJTIyeW91ci1hcGkta2V5LWhlcmUlMjIlMEElMEElMjMlMjBUaGVuJTIwcnVuJTIwdGhlJTIwc2VydmVyJTBBdXZpY29ybiUyMHNlcnZlci5hcHAlM0FhcHAlMjAtLXJlbG9hZA==",highlighted:`<span class="hljs-comment"># Make sure to set your API key first</span>
<span class="hljs-built_in">export</span> SERPER_API_KEY=<span class="hljs-string">&quot;your-api-key-here&quot;</span>
<span class="hljs-comment"># Then run the server</span>
uvicorn server.app:app --reload`,lang:"bash",wrap:!1}}),ge=new J({props:{title:"Project Structure",local:"project-structure",headingTag:"h2"}}),ve=new h({props:{code:"d2ViX3NlYXJjaCUyRiUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMF9faW5pdF9fLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTW9kdWxlJTIwZXhwb3J0cyUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMFJFQURNRS5tZCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFRoaXMlMjBmaWxlJTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwb3BlbmVudi55YW1sJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwT3BlbkVudiUyMG1hbmlmZXN0JTBBJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwcHlwcm9qZWN0LnRvbWwlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBQcm9qZWN0JTIwbWV0YWRhdGElMjBhbmQlMjBkZXBlbmRlbmNpZXMlMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjB1di5sb2NrJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTG9ja2VkJTIwZGVwZW5kZW5jaWVzJTIwKGdlbmVyYXRlZCklMEElRTIlOTQlOUMlRTIlOTQlODAlRTIlOTQlODAlMjBjbGllbnQucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBXZWJTZWFyY2hFbnYlMjBjbGllbnQlMjBpbXBsZW1lbnRhdGlvbiUwQSVFMiU5NCU5QyVFMiU5NCU4MCVFMiU5NCU4MCUyMG1vZGVscy5weSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEFjdGlvbiUyMGFuZCUyME9ic2VydmF0aW9uJTIwbW9kZWxzJTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwc2VydmVyJTJGJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwX19pbml0X18ucHklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTZXJ2ZXIlMjBtb2R1bGUlMjBleHBvcnRzJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwd2Vic2VhcmNoX2Vudl9lbnZpcm9ubWVudC5weSUyMCUyMCUyMyUyMENvcmUlMjBlbnZpcm9ubWVudCUyMGxvZ2ljJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTlDJUUyJTk0JTgwJUUyJTk0JTgwJTIwYXBwLnB5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRmFzdEFQSSUyMGFwcGxpY2F0aW9uJTBBJTIwJTIwJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJTIwRG9ja2VyZmlsZSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMENvbnRhaW5lciUyMGltYWdlJTIwZGVmaW5pdGlvbg==",highlighted:`web_search/
├── __init__.py # Module exports
├── README.md # This file
├── openenv.yaml # OpenEnv manifest
├── pyproject.toml # Project metadata and dependencies
├── uv.lock # Locked dependencies (generated)
├── client.py # WebSearchEnv client <span class="hljs-keyword">implementation</span>
├── models.py # Action and Observation models
└── server/
├── __init__.py # Server <span class="hljs-keyword">module</span> exports
├── websearch_env_environment.py # Core environment logic
├── app.py # FastAPI application
└── Dockerfile # Container image <span class="hljs-keyword">definition</span>`,lang:"",wrap:!1}}),$e=new Al({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/websearch.md"}}),{c(){U=a("meta"),Se=i(),We=a("p"),_e=i(),p(g.$$.fragment),Xe=i(),p(v.$$.fragment),Ae=i(),$=a("p"),$.textContent=qt,Ee=i(),p(b.$$.fragment),He=i(),p(I.$$.fragment),Fe=i(),j=a("p"),j.textContent=Dt,Le=i(),f=a("ol"),be=a("li"),be.innerHTML=Ot,Lt=i(),u=a("li"),Ie=a("p"),Ie.innerHTML=Kt,Yt=i(),je=a("p"),je.innerHTML=el,Nt=i(),p(C.$$.fragment),Gt=i(),Ce=a("p"),Ce.innerHTML=tl,xt=i(),p(B.$$.fragment),Rt=i(),Be=a("p"),Be.innerHTML=ll,Pt=i(),Ze=a("ul"),Ze.innerHTML=nl,zt=i(),ke=a("blockquote"),ke.innerHTML=il,Ye=i(),p(Z.$$.fragment),Ne=i(),k=a("p"),k.innerHTML=sl,Ge=i(),p(W.$$.fragment),xe=i(),V=a("p"),V.innerHTML=al,Re=i(),S=a("ul"),S.innerHTML=rl,Pe=i(),p(_.$$.fragment),ze=i(),X=a("p"),X.textContent=ol,Qe=i(),p(A.$$.fragment),qe=i(),p(E.$$.fragment),De=i(),H=a("p"),H.innerHTML=pl,Oe=i(),p(F.$$.fragment),Ke=i(),L=a("p"),L.innerHTML=ml,et=i(),Y=a("ol"),Y.innerHTML=cl,tt=i(),p(N.$$.fragment),lt=i(),G=a("ul"),G.innerHTML=Ml,nt=i(),p(x.$$.fragment),it=i(),R=a("ul"),R.innerHTML=yl,st=i(),p(P.$$.fragment),at=i(),p(z.$$.fragment),rt=i(),Q=a("p"),Q.innerHTML=Tl,ot=i(),q=a("p"),q.innerHTML=ul,pt=i(),D=a("p"),D.textContent=Jl,mt=i(),O=a("ul"),O.innerHTML=wl,ct=i(),p(K.$$.fragment),Mt=i(),p(ee.$$.fragment),yt=i(),te=a("p"),te.innerHTML=dl,Tt=i(),le=a("ul"),le.innerHTML=hl,ut=i(),p(ne.$$.fragment),Jt=i(),ie=a("p"),ie.innerHTML=Ul,wt=i(),se=a("ul"),se.innerHTML=fl,dt=i(),p(ae.$$.fragment),ht=i(),re=a("p"),re.textContent=gl,Ut=i(),p(oe.$$.fragment),ft=i(),p(pe.$$.fragment),gt=i(),me=a("p"),me.textContent=vl,vt=i(),p(ce.$$.fragment),$t=i(),Me=a("p"),Me.innerHTML=$l,bt=i(),p(ye.$$.fragment),It=i(),p(Te.$$.fragment),jt=i(),ue=a("p"),ue.textContent=bl,Ct=i(),p(Je.$$.fragment),Bt=i(),we=a("p"),we.textContent=Il,Zt=i(),de=a("ul"),de.innerHTML=jl,kt=i(),p(he.$$.fragment),Wt=i(),Ue=a("p"),Ue.textContent=Cl,Vt=i(),p(fe.$$.fragment),St=i(),p(ge.$$.fragment),_t=i(),p(ve.$$.fragment),Xt=i(),p($e.$$.fragment),At=i(),Ve=a("p"),this.h()},l(e){const t=_l("svelte-u9bgzb",document.head);U=r(t,"META",{name:!0,content:!0}),t.forEach(l),Se=s(e),We=r(e,"P",{}),Ft(We).forEach(l),_e=s(e),m(g.$$.fragment,e),Xe=s(e),m(v.$$.fragment,e),Ae=s(e),$=r(e,"P",{"data-svelte-h":!0}),o($)!=="svelte-2zj0cy"&&($.textContent=qt),Ee=s(e),m(b.$$.fragment,e),He=s(e),m(I.$$.fragment,e),Fe=s(e),j=r(e,"P",{"data-svelte-h":!0}),o(j)!=="svelte-9cwd1y"&&(j.textContent=Dt),Le=s(e),f=r(e,"OL",{});var Ht=Ft(f);be=r(Ht,"LI",{"data-svelte-h":!0}),o(be)!=="svelte-1scngci"&&(be.innerHTML=Ot),Lt=s(Ht),u=r(Ht,"LI",{});var d=Ft(u);Ie=r(d,"P",{"data-svelte-h":!0}),o(Ie)!=="svelte-lynsf"&&(Ie.innerHTML=Kt),Yt=s(d),je=r(d,"P",{"data-svelte-h":!0}),o(je)!=="svelte-7jyrse"&&(je.innerHTML=el),Nt=s(d),m(C.$$.fragment,d),Gt=s(d),Ce=r(d,"P",{"data-svelte-h":!0}),o(Ce)!=="svelte-si5hy4"&&(Ce.innerHTML=tl),xt=s(d),m(B.$$.fragment,d),Rt=s(d),Be=r(d,"P",{"data-svelte-h":!0}),o(Be)!=="svelte-orvwgz"&&(Be.innerHTML=ll),Pt=s(d),Ze=r(d,"UL",{"data-svelte-h":!0}),o(Ze)!=="svelte-oe26s5"&&(Ze.innerHTML=nl),zt=s(d),ke=r(d,"BLOCKQUOTE",{"data-svelte-h":!0}),o(ke)!=="svelte-yatcsy"&&(ke.innerHTML=il),d.forEach(l),Ht.forEach(l),Ye=s(e),m(Z.$$.fragment,e),Ne=s(e),k=r(e,"P",{"data-svelte-h":!0}),o(k)!=="svelte-12gjgv1"&&(k.innerHTML=sl),Ge=s(e),m(W.$$.fragment,e),xe=s(e),V=r(e,"P",{"data-svelte-h":!0}),o(V)!=="svelte-198poco"&&(V.innerHTML=al),Re=s(e),S=r(e,"UL",{"data-svelte-h":!0}),o(S)!=="svelte-18k8876"&&(S.innerHTML=rl),Pe=s(e),m(_.$$.fragment,e),ze=s(e),X=r(e,"P",{"data-svelte-h":!0}),o(X)!=="svelte-78ic0n"&&(X.textContent=ol),Qe=s(e),m(A.$$.fragment,e),qe=s(e),m(E.$$.fragment,e),De=s(e),H=r(e,"P",{"data-svelte-h":!0}),o(H)!=="svelte-1w0m59y"&&(H.innerHTML=pl),Oe=s(e),m(F.$$.fragment,e),Ke=s(e),L=r(e,"P",{"data-svelte-h":!0}),o(L)!=="svelte-10tfdgm"&&(L.innerHTML=ml),et=s(e),Y=r(e,"OL",{"data-svelte-h":!0}),o(Y)!=="svelte-jijyjb"&&(Y.innerHTML=cl),tt=s(e),m(N.$$.fragment,e),lt=s(e),G=r(e,"UL",{"data-svelte-h":!0}),o(G)!=="svelte-348gc7"&&(G.innerHTML=Ml),nt=s(e),m(x.$$.fragment,e),it=s(e),R=r(e,"UL",{"data-svelte-h":!0}),o(R)!=="svelte-k1u5ib"&&(R.innerHTML=yl),st=s(e),m(P.$$.fragment,e),at=s(e),m(z.$$.fragment,e),rt=s(e),Q=r(e,"P",{"data-svelte-h":!0}),o(Q)!=="svelte-16csr9h"&&(Q.innerHTML=Tl),ot=s(e),q=r(e,"P",{"data-svelte-h":!0}),o(q)!=="svelte-7w9fqf"&&(q.innerHTML=ul),pt=s(e),D=r(e,"P",{"data-svelte-h":!0}),o(D)!=="svelte-nvk5q8"&&(D.textContent=Jl),mt=s(e),O=r(e,"UL",{"data-svelte-h":!0}),o(O)!=="svelte-1vgii3r"&&(O.innerHTML=wl),ct=s(e),m(K.$$.fragment,e),Mt=s(e),m(ee.$$.fragment,e),yt=s(e),te=r(e,"P",{"data-svelte-h":!0}),o(te)!=="svelte-1edcz2d"&&(te.innerHTML=dl),Tt=s(e),le=r(e,"UL",{"data-svelte-h":!0}),o(le)!=="svelte-1r6tyav"&&(le.innerHTML=hl),ut=s(e),m(ne.$$.fragment,e),Jt=s(e),ie=r(e,"P",{"data-svelte-h":!0}),o(ie)!=="svelte-1ngz3b3"&&(ie.innerHTML=Ul),wt=s(e),se=r(e,"UL",{"data-svelte-h":!0}),o(se)!=="svelte-27lkam"&&(se.innerHTML=fl),dt=s(e),m(ae.$$.fragment,e),ht=s(e),re=r(e,"P",{"data-svelte-h":!0}),o(re)!=="svelte-nfq7gu"&&(re.textContent=gl),Ut=s(e),m(oe.$$.fragment,e),ft=s(e),m(pe.$$.fragment,e),gt=s(e),me=r(e,"P",{"data-svelte-h":!0}),o(me)!=="svelte-sxx5sh"&&(me.textContent=vl),vt=s(e),m(ce.$$.fragment,e),$t=s(e),Me=r(e,"P",{"data-svelte-h":!0}),o(Me)!=="svelte-avglmk"&&(Me.innerHTML=$l),bt=s(e),m(ye.$$.fragment,e),It=s(e),m(Te.$$.fragment,e),jt=s(e),ue=r(e,"P",{"data-svelte-h":!0}),o(ue)!=="svelte-12l40io"&&(ue.textContent=bl),Ct=s(e),m(Je.$$.fragment,e),Bt=s(e),we=r(e,"P",{"data-svelte-h":!0}),o(we)!=="svelte-14xm71o"&&(we.textContent=Il),Zt=s(e),de=r(e,"UL",{"data-svelte-h":!0}),o(de)!=="svelte-1vwi0w5"&&(de.innerHTML=jl),kt=s(e),m(he.$$.fragment,e),Wt=s(e),Ue=r(e,"P",{"data-svelte-h":!0}),o(Ue)!=="svelte-168rc93"&&(Ue.textContent=Cl),Vt=s(e),m(fe.$$.fragment,e),St=s(e),m(ge.$$.fragment,e),_t=s(e),m(ve.$$.fragment,e),Xt=s(e),m($e.$$.fragment,e),At=s(e),Ve=r(e,"P",{}),Ft(Ve).forEach(l),this.h()},h(){Bl(U,"name","hf:doc:metadata"),Bl(U,"content",Hl)},m(e,t){w(document.head,U),n(e,Se,t),n(e,We,t),n(e,_e,t),c(g,e,t),n(e,Xe,t),c(v,e,t),n(e,Ae,t),n(e,$,t),n(e,Ee,t),c(b,e,t),n(e,He,t),c(I,e,t),n(e,Fe,t),n(e,j,t),n(e,Le,t),n(e,f,t),w(f,be),w(f,Lt),w(f,u),w(u,Ie),w(u,Yt),w(u,je),w(u,Nt),c(C,u,null),w(u,Gt),w(u,Ce),w(u,xt),c(B,u,null),w(u,Rt),w(u,Be),w(u,Pt),w(u,Ze),w(u,zt),w(u,ke),n(e,Ye,t),c(Z,e,t),n(e,Ne,t),n(e,k,t),n(e,Ge,t),c(W,e,t),n(e,xe,t),n(e,V,t),n(e,Re,t),n(e,S,t),n(e,Pe,t),c(_,e,t),n(e,ze,t),n(e,X,t),n(e,Qe,t),c(A,e,t),n(e,qe,t),c(E,e,t),n(e,De,t),n(e,H,t),n(e,Oe,t),c(F,e,t),n(e,Ke,t),n(e,L,t),n(e,et,t),n(e,Y,t),n(e,tt,t),c(N,e,t),n(e,lt,t),n(e,G,t),n(e,nt,t),c(x,e,t),n(e,it,t),n(e,R,t),n(e,st,t),c(P,e,t),n(e,at,t),c(z,e,t),n(e,rt,t),n(e,Q,t),n(e,ot,t),n(e,q,t),n(e,pt,t),n(e,D,t),n(e,mt,t),n(e,O,t),n(e,ct,t),c(K,e,t),n(e,Mt,t),c(ee,e,t),n(e,yt,t),n(e,te,t),n(e,Tt,t),n(e,le,t),n(e,ut,t),c(ne,e,t),n(e,Jt,t),n(e,ie,t),n(e,wt,t),n(e,se,t),n(e,dt,t),c(ae,e,t),n(e,ht,t),n(e,re,t),n(e,Ut,t),c(oe,e,t),n(e,ft,t),c(pe,e,t),n(e,gt,t),n(e,me,t),n(e,vt,t),c(ce,e,t),n(e,$t,t),n(e,Me,t),n(e,bt,t),c(ye,e,t),n(e,It,t),c(Te,e,t),n(e,jt,t),n(e,ue,t),n(e,Ct,t),c(Je,e,t),n(e,Bt,t),n(e,we,t),n(e,Zt,t),n(e,de,t),n(e,kt,t),c(he,e,t),n(e,Wt,t),n(e,Ue,t),n(e,Vt,t),c(fe,e,t),n(e,St,t),c(ge,e,t),n(e,_t,t),c(ve,e,t),n(e,Xt,t),c($e,e,t),n(e,At,t),n(e,Ve,t),Et=!0},p:kl,i(e){Et||(M(g.$$.fragment,e),M(v.$$.fragment,e),M(b.$$.fragment,e),M(I.$$.fragment,e),M(C.$$.fragment,e),M(B.$$.fragment,e),M(Z.$$.fragment,e),M(W.$$.fragment,e),M(_.$$.fragment,e),M(A.$$.fragment,e),M(E.$$.fragment,e),M(F.$$.fragment,e),M(N.$$.fragment,e),M(x.$$.fragment,e),M(P.$$.fragment,e),M(z.$$.fragment,e),M(K.$$.fragment,e),M(ee.$$.fragment,e),M(ne.$$.fragment,e),M(ae.$$.fragment,e),M(oe.$$.fragment,e),M(pe.$$.fragment,e),M(ce.$$.fragment,e),M(ye.$$.fragment,e),M(Te.$$.fragment,e),M(Je.$$.fragment,e),M(he.$$.fragment,e),M(fe.$$.fragment,e),M(ge.$$.fragment,e),M(ve.$$.fragment,e),M($e.$$.fragment,e),Et=!0)},o(e){y(g.$$.fragment,e),y(v.$$.fragment,e),y(b.$$.fragment,e),y(I.$$.fragment,e),y(C.$$.fragment,e),y(B.$$.fragment,e),y(Z.$$.fragment,e),y(W.$$.fragment,e),y(_.$$.fragment,e),y(A.$$.fragment,e),y(E.$$.fragment,e),y(F.$$.fragment,e),y(N.$$.fragment,e),y(x.$$.fragment,e),y(P.$$.fragment,e),y(z.$$.fragment,e),y(K.$$.fragment,e),y(ee.$$.fragment,e),y(ne.$$.fragment,e),y(ae.$$.fragment,e),y(oe.$$.fragment,e),y(pe.$$.fragment,e),y(ce.$$.fragment,e),y(ye.$$.fragment,e),y(Te.$$.fragment,e),y(Je.$$.fragment,e),y(he.$$.fragment,e),y(fe.$$.fragment,e),y(ge.$$.fragment,e),y(ve.$$.fragment,e),y($e.$$.fragment,e),Et=!1},d(e){e&&(l(Se),l(We),l(_e),l(Xe),l(Ae),l($),l(Ee),l(He),l(Fe),l(j),l(Le),l(f),l(Ye),l(Ne),l(k),l(Ge),l(xe),l(V),l(Re),l(S),l(Pe),l(ze),l(X),l(Qe),l(qe),l(De),l(H),l(Oe),l(Ke),l(L),l(et),l(Y),l(tt),l(lt),l(G),l(nt),l(it),l(R),l(st),l(at),l(rt),l(Q),l(ot),l(q),l(pt),l(D),l(mt),l(O),l(ct),l(Mt),l(yt),l(te),l(Tt),l(le),l(ut),l(Jt),l(ie),l(wt),l(se),l(dt),l(ht),l(re),l(Ut),l(ft),l(gt),l(me),l(vt),l($t),l(Me),l(bt),l(It),l(jt),l(ue),l(Ct),l(Bt),l(we),l(Zt),l(de),l(kt),l(Wt),l(Ue),l(Vt),l(St),l(_t),l(Xt),l(At),l(Ve)),l(U),T(g,e),T(v,e),T(b,e),T(I,e),T(C),T(B),T(Z,e),T(W,e),T(_,e),T(A,e),T(E,e),T(F,e),T(N,e),T(x,e),T(P,e),T(z,e),T(K,e),T(ee,e),T(ne,e),T(ae,e),T(oe,e),T(pe,e),T(ce,e),T(ye,e),T(Te,e),T(Je,e),T(he,e),T(fe,e),T(ge,e),T(ve,e),T($e,e)}}}const Hl='{"title":"Web Search Environment","local":"web-search-environment","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[{"title":"API Key Setup","local":"api-key-setup","sections":[],"depth":3}],"depth":2},{"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":"Action","local":"action","sections":[],"depth":3},{"title":"Observation","local":"observation","sections":[],"depth":3},{"title":"Reward","local":"reward","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}],"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}],"depth":1}';function Fl(Qt){return Wl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class xl extends Vl{constructor(U){super(),Sl(this,U,Fl,El,Zl,{})}}export{xl as component};

Xet Storage Details

Size:
28.4 kB
·
Xet hash:
02a71d9fc3745f0a077df59eb966923ae572001d9c1723d157c7538fb2a2e6c2

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