Spaces:
Running
Running
| title: Coding Environment Server | |
| emoji: π» | |
| colorFrom: gray | |
| colorTo: indigo | |
| sdk: docker | |
| pinned: false | |
| app_port: 8000 | |
| base_path: /web | |
| tags: | |
| - openenv | |
| # Coding Environment | |
| A Python code execution environment that runs arbitrary Python code and returns results. Perfect for testing code execution infrastructure and demonstrating environment usage patterns. | |
| ## Quick Start | |
| The simplest way to use the Coding environment is through the `CodingEnv` class: | |
| ```python | |
| from envs.coding_env import CodeAction, CodingEnv | |
| try: | |
| # Create environment from Docker image | |
| coding_env = CodingEnv.from_docker_image("coding-env:latest") | |
| # Reset | |
| result = coding_env.reset() | |
| print(f"Reset complete: exit_code={result.observation.exit_code}") | |
| # Execute Python code | |
| code_samples = [ | |
| "print('Hello, World!')", | |
| "x = 5 + 3\nprint(f'Result: {x}')", | |
| "import math\nprint(math.pi)" | |
| ] | |
| for code in code_samples: | |
| result = coding_env.step(CodeAction(code=code)) | |
| print(f"Code: {code}") | |
| print(f" β stdout: {result.observation.stdout.strip()}") | |
| print(f" β exit_code: {result.observation.exit_code}") | |
| finally: | |
| # Always clean up | |
| coding_env.close() | |
| ``` | |
| That's it! The `CodingEnv.from_docker_image()` method handles: | |
| - Starting the Docker container | |
| - Waiting for the server to be ready | |
| - Connecting to the environment | |
| - Container cleanup when you call `close()` | |
| ## Building the Docker Image | |
| Before using the environment, you need to build the Docker image: | |
| ```bash | |
| # From project root | |
| docker build -t coding-env:latest -f src/envs/coding_env/server/Dockerfile . | |
| ``` | |
| ## Environment Details | |
| ### Action | |
| **CodeAction**: Contains a single field | |
| - `code` (str) - The Python code to execute | |
| ### Observation | |
| **CodeObservation**: Contains the execution results | |
| - `stdout` (str) - Standard output from code execution | |
| - `stderr` (str) - Standard error from code execution | |
| - `exit_code` (int) - Exit code (0 for success, non-zero for errors) | |
| ### State | |
| **CodeState**: Tracks execution state | |
| - `episode_id` (str) - Unique identifier for the episode | |
| - `step_count` (int) - Number of steps taken | |
| - `last_exit_code` (int) - Exit code from the last execution | |
| ## Advanced Usage | |
| ### Connecting to an Existing Server | |
| If you already have a Coding environment server running, you can connect directly: | |
| ```python | |
| from envs.coding_env import CodingEnv | |
| # Connect to existing server | |
| coding_env = CodingEnv(base_url="<ENV_HTTP_URL_HERE>") | |
| # Use as normal | |
| result = coding_env.reset() | |
| result = coding_env.step(CodeAction(code="print('Hello!')")) | |
| ``` | |
| Note: When connecting to an existing server, `coding_env.close()` will NOT stop the server. | |
| ## Development & Testing | |
| ### Running the Full Example | |
| Run the complete example that demonstrates the full workflow: | |
| ```bash | |
| python3 src/envs/coding_env/client/example_usage.py | |
| ``` | |
| This example shows: | |
| - Creating an environment from a Docker image | |
| - Resetting and executing code through the environment | |
| - Automatic cleanup with `close()` | |
| ## Project Structure | |
| ``` | |
| coding_env/ | |
| βββ README.md # This file | |
| βββ models.py # Action, Observation, and State models | |
| βββ client/ | |
| β βββ coding_env_client.py # CodingEnv client implementation | |
| β βββ example_usage.py # Usage examples | |
| βββ server/ | |
| βββ python_codeact_env.py # Core environment logic | |
| βββ app.py # FastAPI application | |
| βββ transforms.py # Observation transforms | |
| βββ Dockerfile # Container image definition | |
| βββ README.md # Server-specific documentation | |
| ``` | |