From 1a0b187276223aab2dd5fcff98854813f4377633 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Fri, 17 Oct 2025 10:37:46 -0600 Subject: [PATCH 1/9] (docs) push remaining changes for sphinx documentation --- .github/workflows/docs.yml | 38 ++ .gitignore | 3 + README.md | 549 +---------------- docs/sphinx/Makefile | 20 + docs/sphinx/build.sh | 18 + docs/sphinx/requirements.txt | 3 + docs/sphinx/source/api/action.rst | 251 ++++++++ docs/sphinx/source/api/environment.rst | 128 ++++ docs/sphinx/source/api/modules.rst | 42 ++ .../api/modules/fle.agents.agent_abc.rst | 7 + .../source/api/modules/fle.agents.models.rst | 7 + .../source/api/modules/fle.commons.models.rst | 7 + .../source/api/modules/fle.env.entities.rst | 7 + .../source/api/modules/fle.env.game_types.rst | 7 + .../source/api/modules/fle.env.gym_env.rst | 7 + .../source/api/modules/fle.env.instance.rst | 7 + .../source/api/modules/fle.env.namespace.rst | 7 + .../api/modules/fle.eval.algorithms.rst | 7 + .../source/api/modules/fle.eval.tasks.rst | 7 + docs/sphinx/source/api/observation.rst | 178 ++++++ docs/sphinx/source/api/tools.rst | 276 +++++++++ docs/sphinx/source/conf.py | 88 +++ docs/sphinx/source/customization/agents.rst | 331 ++++++++++ docs/sphinx/source/customization/database.rst | 357 +++++++++++ docs/sphinx/source/customization/tasks.rst | 276 +++++++++ docs/sphinx/source/customization/tools.rst | 335 +++++++++++ docs/sphinx/source/examples/basic_agent.rst | 336 +++++++++++ docs/sphinx/source/examples/multiagent.rst | 565 ++++++++++++++++++ docs/sphinx/source/examples/visual_agent.rst | 450 ++++++++++++++ .../sphinx/source/getting_started/cluster.rst | 91 +++ .../source/getting_started/installation.rst | 98 +++ .../source/getting_started/quickstart.rst | 102 ++++ docs/sphinx/source/index.rst | 52 ++ docs/sphinx/source/tools/extract_item.rst | 98 +++ docs/sphinx/source/tools/index.rst | 209 +++++++ docs/sphinx/source/tools/insert_item.rst | 101 ++++ .../sphinx/source/tools/inspect_inventory.rst | 153 +++++ docs/sphinx/source/tools/place_entity.rst | 134 +++++ docs/versions/0.3.0.html | 29 + pyproject.toml | 3 + 40 files changed, 4844 insertions(+), 540 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/sphinx/Makefile create mode 100755 docs/sphinx/build.sh create mode 100644 docs/sphinx/requirements.txt create mode 100644 docs/sphinx/source/api/action.rst create mode 100644 docs/sphinx/source/api/environment.rst create mode 100644 docs/sphinx/source/api/modules.rst create mode 100644 docs/sphinx/source/api/modules/fle.agents.agent_abc.rst create mode 100644 docs/sphinx/source/api/modules/fle.agents.models.rst create mode 100644 docs/sphinx/source/api/modules/fle.commons.models.rst create mode 100644 docs/sphinx/source/api/modules/fle.env.entities.rst create mode 100644 docs/sphinx/source/api/modules/fle.env.game_types.rst create mode 100644 docs/sphinx/source/api/modules/fle.env.gym_env.rst create mode 100644 docs/sphinx/source/api/modules/fle.env.instance.rst create mode 100644 docs/sphinx/source/api/modules/fle.env.namespace.rst create mode 100644 docs/sphinx/source/api/modules/fle.eval.algorithms.rst create mode 100644 docs/sphinx/source/api/modules/fle.eval.tasks.rst create mode 100644 docs/sphinx/source/api/observation.rst create mode 100644 docs/sphinx/source/api/tools.rst create mode 100644 docs/sphinx/source/conf.py create mode 100644 docs/sphinx/source/customization/agents.rst create mode 100644 docs/sphinx/source/customization/database.rst create mode 100644 docs/sphinx/source/customization/tasks.rst create mode 100644 docs/sphinx/source/customization/tools.rst create mode 100644 docs/sphinx/source/examples/basic_agent.rst create mode 100644 docs/sphinx/source/examples/multiagent.rst create mode 100644 docs/sphinx/source/examples/visual_agent.rst create mode 100644 docs/sphinx/source/getting_started/cluster.rst create mode 100644 docs/sphinx/source/getting_started/installation.rst create mode 100644 docs/sphinx/source/getting_started/quickstart.rst create mode 100644 docs/sphinx/source/index.rst create mode 100644 docs/sphinx/source/tools/extract_item.rst create mode 100644 docs/sphinx/source/tools/index.rst create mode 100644 docs/sphinx/source/tools/insert_item.rst create mode 100644 docs/sphinx/source/tools/inspect_inventory.rst create mode 100644 docs/sphinx/source/tools/place_entity.rst diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..16d088271 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,38 @@ +name: Build Documentation + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + build-docs: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints + pip install -e . + + - name: Build Sphinx documentation + run: | + cd docs/sphinx + sphinx-build -b html source build/html + + - name: Deploy to GitHub Pages + if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/sphinx/build/html + destination_dir: sphinx diff --git a/.gitignore b/.gitignore index 56fd4d3c5..3de71a5f2 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ uv.lock *.egg-info/ uv.lock +# Sphinx documentation build +/docs/sphinx/build/ + # Docker **/docker-compose.yml diff --git a/README.md b/README.md index 1e21f14a7..bca2970d7 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,6 @@ An open source framework for developing and evaluating LLM agents in the game of ## Why FLE? -[//]: # "FLE is a framework that tests agent capabilities in long-term planning, program synthesis, and resource optimization against a set of exponentially scaling challenges, ranging from basic automation to complex factories processing millions of resources per second. " - We provide two settings: 1. **Lab-play**: 24 structured tasks with fixed resources. @@ -28,11 +26,9 @@ exhibit promising short-horizon skills, they are unable to operate effectively i ## Quick Links - [Installation](#installation) -- [Environment](#environment) -- [Tools](#tool-documentation) -- [Project Structure](#project-structure) -- [Database](#database) -- [Contributions](#contributing-guidelines) +- [Documentation](https://jackhopkins.github.io/factorio-learning-environment/sphinx/build/html/) +- [Examples](#examples) +- [Contributing](#contributing) ## Installation @@ -73,7 +69,6 @@ fle eval --config configs/gym_run_config.json > When you run `fle init` or `fle eval` for the first time, an `.env` file and a `configs/` directory with example configurations are created automatically - ## Environment FLE is an agent evaluation environment built on the game of Factorio, a popular resource management simulation game. @@ -84,15 +79,9 @@ Agents interact with **FLE** by code synthesis through a **REPL** (Read-Eval-Pri 2. **Action**: The agent generates a Python program to perform their desired action. 3. **Feedback**: The environment executes the program, assigns variables, add classes/functions to the namespace, and provides an output stream. - - - - - +## Examples - - - -
-Action -
+```python
 # 1. Get iron patch and place mining drill
 drill = place_entity(
     entity=Prototype.MiningDrill,
@@ -109,534 +98,14 @@ chest = place_entity_next_to(
 sleep(10) # Sleep for 10 seconds
 assert drill.status == EntityStatus.WORKING
 print(get_entities())
-
-
-Feedback -
->>> [ BurnerMiningDrill(fuel=Inventory({'coal': 4}), 
->>>                     name='burner-mining-drill', 
->>>                     direction=Direction.DOWN, 
->>>                     position=Position(x=-28.0, y=-61.0), 
->>>                     energy=2666.6666666667, 
->>>                     tile_dimensions=TileDimensions(tile_width=2.0, tile_height=2.0), 
->>>                     status=EntityStatus.WORKING, 
->>>                     neighbours=[Entity(name='iron-chest', direction=DOWN, position=Position(x=-27.5 y=-59.5)], 
->>>                     drop_position=Position(x=-27.5, y=-59.5), 
->>>                     resources=[Ingredient(name='iron-ore', count=30000, type=None)]),
->>>   Chest(name='iron-chest', 
->>>         direction=Direction.UP, 
->>>         position=Position(x=-27.5, y=-59.5), 
->>>         energy=0.0, 
->>>         tile_dimensions=TileDimensions(tile_width=1.0, tile_height=1.0), 
->>>         status=EntityStatus.NORMAL, 
->>>         inventory=Inventory({'iron-ore': 75}))]
-
-
- - - -Agents are provided with the Python standard library, and an API comprising [tools](#tool-documentation) that they can use. - -Tools are functions that perform a game action and return a typed object (e.g an Inventory), which can be stored as a named **variable** in the Python namespace for later use. - -The namespace acts as an episodic symbolic memory system, and saved objects represent an observation of the environment at the moment of query. - -This enables agents to maintain complex state representations and build hierarchical abstractions as the factories scale. - -Agents observe **stdout** and **stderr** - the output streams of their program. Agents may intentionally choose to print relevant objects and computations to the output stream to construct observations. - -Mistakes in the code or invalid operations raise typed **exceptions** with detailed context that is written to stderr. - -This enables agents to reactively debug their programs after execution, and proactively use runtime assertions during execution to self-verify their actions. - -Agents are able to enhance their internal representation of the game state by defining: - -1. Utility functions for reuse throughout an episode, to encapsulate previously successful logic -2. Classes in the namespace to better organize the data retrieved from the game. - -### Gym Environment Registry - -The Factorio Learning Environment uses a gym environment registry to automatically discover and register all available tasks. This allows you to use `gym.make()` to create environments and reference them by their environment IDs. - -#### Overview - -The registry system automatically discovers all task definitions in `eval/tasks/task_definitions/` and registers them as gym environments. This means you can create any Factorio environment using the familiar `gym.make()` pattern. - -#### Features - -- **Automatic Discovery**: Automatically discovers all task definitions in `eval/tasks/task_definitions/` -- **Gym Integration**: All environments are registered with `gym` and can be created using `gym.make()` -- **Task Metadata**: Provides access to task descriptions, configurations, and metadata -- **Multi-agent Support**: Supports both single-agent and multi-agent environments -- **Command-line Tools**: Built-in tools for exploring and testing environments - -#### Quick Start - -**1. List Available Environments** - -```python -from gym_env.registry import list_available_environments - -# Get all available environment IDs -env_ids = list_available_environments() -print(f"Available environments: {env_ids}") -``` - -Or use the command-line tool: - -```bash -python fle/env/gym_env/example_usage.py --list -``` - -**2. Create an Environment** - -```python -import gym - -# Create any available environment -env = gym.make("iron_ore_throughput") -``` - -**3. Use the Environment** - -```python -from fle.env.gym_env.action import Action - -# Reset the environment -obs = env.reset(options={'game_state': None}) - -# Take an action -action = Action( - agent_idx=0, # Which agent takes the action - code='print("Hello Factorio!")', # Python code to execute - game_state=None # Optional: game state to reset to before running code -) - -# Execute the action -obs, reward, terminated, truncated, info = env.step(action) - -# Clean up -env.close() ``` -#### Available Environments - -The registry automatically discovers all task definitions and creates corresponding gym environments using the task key as the environment ID. - -**Throughput Tasks (Lab Play)** - -All throughput tasks are defined in `fle/eval/tasks/task_definitions/lab_play/throughput_tasks.py`. The 24 available tasks are: - -- **Circuits**: `advanced_circuit_throughput`, `electronic_circuit_throughput`, `processing_unit_throughput` -- **Science Packs**: `automation_science_pack_throughput`, `logistics_science_pack_throughput`, `chemical_science_pack_throughput`, `military_science_pack_throughput`, `production_science_pack_throughput`, `utility_science_pack_throughput` -- **Components**: `battery_throughput`, `engine_unit_throughput`, `inserter_throughput`, `iron_gear_wheel_throughput`, `low_density_structure_throughput` -- **Raw Materials**: `iron_ore_throughput`, `iron_plate_throughput`, `steel_plate_throughput`, `plastic_bar_throughput` -- **Oil & Chemicals**: `crude_oil_throughput`, `petroleum_gas_throughput`, `sufuric_acid_throughput`, `sulfur_throughput` -- **Military**: `piercing_round_throughput`, `stone_wall_throughput` - -Most tasks require 16 items per 60 seconds; fluid tasks require 250 units per 60 seconds. - -**Example Usage** - -```python -# Create a throughput environment -env = gym.make("iron_plate_throughput") -env = gym.make("automation_science_pack_throughput") -env = gym.make("crude_oil_throughput") - -# Create open play environment -env = gym.make("open_play") -``` - -#### Command-Line Tools - -The `example_usage.py` script provides both interactive examples and command-line tools: - -```bash -# Run interactive examples -python fle/env/gym_env/example_usage.py - -# List all environments -python fle/env/gym_env/example_usage.py --list - -# Show detailed information -python fle/env/gym_env/example_usage.py --detail - -# Search for specific environments -python fle/env/gym_env/example_usage.py --search iron - -# Output in gym.make() format -python fle/env/gym_env/example_usage.py --gym-format -``` - -#### Environment Interface - -All environments follow the standard gym interface: - -**Action Space** - -```python -{ - 'agent_idx': Discrete(instance.num_agents), # Index of the agent taking the action - 'game_state': Text(max_length=1000000), # Optional: game state to reset to before running code - 'code': Text(max_length=10000) # Python code to execute -} -``` - -**Observation Space** -The observation space includes: - -- `raw_text`: Output from the last action -- `entities`: List of entities on the map -- `inventory`: Current inventory state -- `research`: Research progress and technologies -- `game_info`: Game state (tick, time, speed) -- `score`: Current score -- `flows`: Production statistics -- `task_verification`: Task completion status -- `messages`: Inter-agent messages -- `serialized_functions`: Available functions -- `task_info`: Information about the task -- `map_image`: Base64 encoded PNG image - -**Methods** - -- `reset(options: Dict[str, Any], seed: Optional[int] = None) -> Dict[str, Any]` -- `step(action: Action) -> Tuple[Dict[str, Any], float, bool, bool, Dict[str, Any]]` -- `close() -> None` - -#### API Reference - -**Registry Functions** - -- `list_available_environments() -> List[str]` - Returns a list of all registered environment IDs -- `get_environment_info(env_id: str) -> Optional[Dict[str, Any]]` - Returns detailed information about a specific environment -- `register_all_environments() -> None` - Manually trigger environment discovery and registration - -**Environment Creation** - -- `gym.make(env_id: str, **kwargs) -> FactorioGymEnv` - Creates a Factorio gym environment - -#### Complete Example - -Here's a complete example that demonstrates the full workflow: - -```python -import gym -from fle.env.gym_env.registry import list_available_environments, get_environment_info -from fle.env.gym_env.action import Action - -# 1. List available environments -env_ids = list_available_environments() -print(f"Found {len(env_ids)} environments") - -# 2. Get information about a specific environment -info = get_environment_info("iron_ore_throughput") -print(f"Description: {info['description']}") - -# 3. Create the environment -env = gym.make("iron_ore_throughput") +## Documentation -# 4. Use the environment -obs = env.reset(options={'game_state': None}) -print(f"Initial observation keys: {list(obs.keys())}") - -# 5. Take actions -current_state = None -for step in range(5): - action = Action( - agent_idx=0, - game_state=current_state, - code=f'print("Step {step}: Hello Factorio!")' - ) - obs, reward, terminated, truncated, info = env.step(action) - done = terminated or truncated - current_state = info['output_game_state'] - print(f"Step {step}: Reward={reward}, Done={done}") - - if done: - break - -# 6. Clean up -env.close() -``` -#### Error Handling - -The registry includes error handling for: - -- Missing task definition files -- Invalid JSON configurations -- Missing Factorio containers -- Environment creation failures - -If an environment fails to load, a warning will be printed but the registry will continue to load other environments. - -#### Troubleshooting - -**Environment Creation Fails** - -If `gym.make()` fails with connection errors: - -1. Ensure Factorio containers are running -2. Check that the cluster setup is working -3. Verify network connectivity - -**No Environments Found** - -If no environments are listed: - -1. Check that the task definitions directory exists -2. Verify JSON files are valid -3. Check file permissions - -**Import Errors** - -If you get import errors: - -1. Ensure you're running from the correct directory -2. Check that all dependencies are installed -3. Verify the Python path includes the project root - -#### Testing - -Run the test suite to verify the registry is working correctly: - -```bash -python env/tests/gym_env/test_registry.py -``` - -This registry system provides a clean, standardized interface for working with Factorio gym environments, making it easy to experiment with different tasks and integrate with existing gym-based frameworks. - - -### Client-side running (optional, renders graphics) - -1. **Set up Factorio client**: - - Purchase Factorio from the [official website](https://www.factorio.com/) (recommended) or on Steam. - - Downgrade to version 1.1.110: - - Steam: Right-click Factorio → Properties → Betas → Select 1.1.110 - - **Important**: Make sure to uncheck the Space Age DLC if you have it, as it forces the 2.x branch - -2. **Activate server**: - - Open Factorio client - - Navigate to _Multiplayer_ - - Connect to `localhost:34197` (default) or your configured address in Docker. - - Once connected, you can safely disconnect. This step confirms your Factorio license with the server. - -### API Key Configuration - -FLE supports multiple LLM providers for agent evaluation. To get started with API keys: - -1. **Quick Setup** (Recommended): - ```bash - python fle/eval/infra/setup_api_keys.py - ``` - - This interactive script helps you: - - Configure API keys for OpenAI, Anthropic, and other providers - - Set up API key rotation for high-volume experiments - - Generate provider-specific configuration files - - Validate your API key setup - -2. **Manual Setup**: - Add your API keys to the `.env` file: - ```bash - # OpenAI - OPENAI_API_KEY=sk-... - - # Anthropic - ANTHROPIC_API_KEY=sk-ant-... - - # Additional providers as needed - ``` - -3. **Advanced Configuration**: - For large-scale experiments, you can set up API key rotation and provider-specific settings using the configuration files generated by `setup_api_keys.py`. - -### Troubleshooting - -- **"No valid programs found for version X"**: This is normal during initialization. The system will start generating programs shortly. -- **Database connection errors**: Verify your database configuration in the .env file and ensure the database exists. -- **API key errors**: Run `python fle/eval/infra/setup_api_keys.py` to verify your API key configuration. -- **Docker issues**: Ensure your user has permission to run Docker without sudo. -- **Connection issues**: Make sure the Factorio server is running and ports are properly configured. - - -## Tool Documentation - -Agents interact with the game using _tools_, which represent a narrow API into the game. - -### Anatomy of a Tool - -Tools live in `env/src/tools`, and are either `admin` tools (non-agent accessible) or `agent` tools (used by the agent). - -A tool requires 3 files: - -1. `agent.md`: The agent documentation for the tool, including usage patterns, best practices and failure modes. -2. `client.py`: The client-side implementation, which is a Python class that can be invoked by the agent. -3. `server.lua`: The server-side implementation, which handles most of the logic and heavy lifting. - -```mermaid ---- -config: - layout: fixed - flowchart: - defaultRenderer: - elk ---- -flowchart LR - A("fa:fa-comment-dots Agent") - subgraph s1["Learning Environment"] - - B("fa:fa-code Interpreter") - n1("client.py") - end - subgraph s2["Factorio Server"] - E1["fa:fa-shapes server.lua"] - F("fa:fa-cog Factorio Engine") - end - - A -- Synthesises Python --> B - B -- Invokes --> n1 - n1 -. Exceptions .-> B - n1 -. Objects .-> B - n1 --Remote TCP Call--> E1 - E1 -- Execute --> F - - F-. Result .-> E1 - E1 -. TCP Response .-> n1 - B -. Observation .-> A -``` - -### Creating a custom Tool - -1. Create a new directory in `env/src/tools/agent`, e.g `env/src/tools/agent/my_tool` -2. Add a `client.py` file, which should contain a class inheriting `Tool` and implementing a `__call__` function to treat the class as a callable function. The method signature should contain type annotations. This function _must_ call `self.execute` to invoke the server-side logic. -3. Add a `server.lua` file, containing a function structured like `global.actions.my_tool = function(arg1, arg2, ...)`. This file should invoke the [Factorio API](https://lua-api.factorio.com/1.1.110/) to perform the desired action, and return a table that will be serialized and sent back to the client. -4. Add an `agent.md` file, which should contain a markdown description of the tool. This file will be used by the agent to understand how to use the tool - -Next time you run an eval, the tool will automatically be available to the agent and documented in the agent context. - -5. (Optional) Create a test suite in `env/tests/actions` for your new tool. - -### Core Tools - -| Tool | Description | Key Features | -| ----------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `inspect_inventory` | Checks contents of player or entity inventories | - Supports various inventory types (chests, furnaces, etc.)
- Returns Inventory object with count methods
- Can query specific items | -| `insert_item` | Places items from player inventory into entities | - Works with machines, chests, belts
- Validates item compatibility
- Returns updated entity | -| `extract_item` | Removes items from entity inventories | - Supports all inventory types
- Auto-transfers to player inventory
- Returns quantity extracted | -| `place_entity` | Places entities in the world | - Handles direction and positioning
- Validates placement requirements
- Returns placed Entity object | -| `place_entity_next_to` | Places entities relative to others | - Automatic spacing/alignment
- Handles entity dimensions
- Supports all entity types | -| `pickup_entity` | Removes entities from the world | - Returns items to inventory
- Handles entity groups
- Supports all placeable items | -| `rotate_entity` | Changes entity orientation | - Affects entity behavior (e.g., inserter direction)
- Validates rotation rules
- Returns updated entity | -| `get_entity` | Retrieves entity objects at positions | - Updates stale references
- Returns typed Entity objects
- Handles all entity types | -| `get_entities` | Finds multiple entities in an area | - Supports filtering by type
- Returns List[Entity]
- Groups connected entities | -| `nearest` | Locates closest resources/entities | - Finds ores, water, trees
- Returns Position object
- 500 tile search radius | -| `get_resource_patch` | Analyzes resource deposits | - Returns size and boundaries
- Supports all resource types
- Includes total resource amount | -| `harvest_resource` | Gathers resources from the world | - Supports ores, trees, rocks
- Auto-collects to inventory
- Returns amount harvested | -| `connect_entities` | Creates connections between entities | - Handles belts, pipes, power
- Automatic pathfinding
- Returns connection group | -| `get_connection_amount` | Calculates required connection items | - Pre-planning tool
- Works with all connection types
- Returns item count needed | -| `set_entity_recipe` | Configures machine crafting recipes | - Works with assemblers/chemical plants
- Validates recipe requirements
- Returns updated entity | -| `get_prototype_recipe` | Retrieves crafting requirements | - Shows ingredients/products
- Includes crafting time
- Returns Recipe object | -| `craft_item` | Creates items from components | - Handles recursive crafting
- Validates technology requirements
- Returns crafted amount | -| `set_research` | Initiates technology research | - Validates prerequisites
- Returns required ingredients
- Handles research queue | -| `get_research_progress` | Monitors research status | - Shows remaining requirements
- Tracks progress percentage
- Returns ingredient list | -| `move_to` | Moves player to position | - Pathfinds around obstacles
- Can place items while moving
- Returns final position | -| `nearest_buildable` | Finds valid building locations | - Respects entity dimensions
- Handles resource requirements
- Returns buildable position | -| `sleep` | Pauses execution | - Waits for actions to complete
- Adapts to game speed
- Maximum 15 second duration | -| `launch_rocket` | Controls rocket silo launches | - Validates launch requirements
- Handles launch sequence
- Returns updated silo state | -| `print` | Outputs debug information to stdout | - Supports various object types
- Useful for monitoring state
- Returns formatted string | - -# Project Structure - -Below is an overview of how the project is structured. - -``` -factorio-learning-environment/ -├── .github/ # GitHub workflows and CI/CD -├── .fle/ # Runtime data (saves, scenarios, trajectory logs) -├── docs/ # Documentation and website -├── examples/ # Example agent implementations -├── fle/ # Main codebase -│ ├── agents/ # Agent implementations (BasicAgent, VisualAgent, etc.) -│ ├── cluster/ # Docker orchestration and scenarios -│ ├── commons/ # Shared utilities and models -│ ├── configs/ # Configuration files -│ ├── data/ # Data files and replays -│ ├── env/ # Core environment -│ │ ├── gym_env/ # OpenAI Gym interface -│ │ ├── tools/ # Agent-accessible tools (place_entity, craft_item, etc.) -│ │ ├── protocols/ # Communication protocols (A2A, MCP) -│ │ ├── exceptions/ # Custom exceptions -│ │ └── utils/ # Environment utilities -│ ├── eval/ # Evaluation framework -│ │ ├── algorithms/ # Beam search, MCTS, independent evaluation -│ │ ├── analysis/ # Analysis tools -│ │ ├── tasks/ # Task definitions -│ │ └── evaluator.py # Main evaluation logic -│ ├── run.py # CLI entry point -│ └── server.py # RCON server -├── tests/ # Test suite (actions, benchmarks, functional, etc.) -├── .example.env # Environment variables template -├── BUILD.md # Build instructions -├── CONTRIBUTING.md # Contribution guidelines -├── pyproject.toml # Python project config -└── uv.lock # Dependency lock file -``` -## Model Context Protocol (MCP) - -FLE supports the [Model Context Protocol](fle/env/protocols/_mcp/README.md) (MCP) to enable LLM reasoning models to invoke tools. - -## Sprites - -FLE includes sprite management functionality for downloading spritemaps, extracting individual entity sprites, icons, and other visual assets from HuggingFace for use in visual reasoning tasks. - -### Usage - -```bash -# Download and generate sprites -fle sprites - -# Force re-download even if sprites exist -fle sprites --force - -# Use custom directories and worker count -fle sprites --spritemap-dir .fle/spritemaps --sprite-dir .fle/sprites --workers 5 -``` - -## Database - -To run long trajectories in FLE, we support checkpointing at every agent step using a SQL database. The `db_client` implements the interface for saving and loading agent outputs, environment feedbacks, game states and histories of the current trajectory. We support out of the box SQLite (default) and Postgres databases. The easiest way to set up a FLE-compatible database is to use the default SQLite, the env variable `FLE_DB_TYPE="sqlite"` lets you select the DB. - -We recommend changing and setting up the `SQLITE_DB_FILE` variable in the `.env` file. It defaults to `.fle/data.db` in your working directory. - -### Postgres - -Make sure all variables are set in the `.env` file with `FLE_DB_TYPE="postgres"`. - -To utilize postgres database you need to setup an instance of the db server yourself. The easiest way is to run it via Docker: - -`docker run --name fle-postgres -e POSTGRES_PASSWORD=fle123 -e POSTGRES_USER=fle_user -e POSTGRES_DB=fle_database -p 5432:5432 -d postgres:15` - -This launches a postgres:15 server with the defined settings, it can be used via the corresponding `.env` variables: - -``` -# Database Configuration - Set to postgres to use PostgreSQL -FLE_DB_TYPE="postgres" - -# PostgreSQL Configuration -SKILLS_DB_HOST=localhost -SKILLS_DB_PORT=5432 -SKILLS_DB_NAME=fle_database -SKILLS_DB_USER=fle_user -SKILLS_DB_PASSWORD=fle123 -``` +For complete documentation, visit: https://jackhopkins.github.io/factorio-learning-environment/sphinx/build/html/ -## Contributing Guidelines +## Contributing Join our team and contribute to one of the AI research community's most challenging problems - building open-ended / unsaturateable evals for post-AGI frontier models. If you want to contribute, please read [CONTRIBUTING.md](CONTRIBUTING.md) first. -[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/JackHopkins/factorio-learning-environment) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/JackHopkins/factorio-learning-environment) \ No newline at end of file diff --git a/docs/sphinx/Makefile b/docs/sphinx/Makefile new file mode 100644 index 000000000..af23b2de2 --- /dev/null +++ b/docs/sphinx/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/sphinx/build.sh b/docs/sphinx/build.sh new file mode 100755 index 000000000..7648d0269 --- /dev/null +++ b/docs/sphinx/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Build Sphinx documentation +# This script builds the Sphinx documentation and outputs it to the build directory + +set -e + +echo "Building Sphinx documentation..." + +# Change to the docs/sphinx directory +cd "$(dirname "$0")" + +# Build the documentation +sphinx-build -b html source build/html + +echo "Documentation built successfully!" +echo "Output directory: $(pwd)/build/html" +echo "Open $(pwd)/build/html/index.html in your browser to view the documentation." diff --git a/docs/sphinx/requirements.txt b/docs/sphinx/requirements.txt new file mode 100644 index 000000000..235b3fa92 --- /dev/null +++ b/docs/sphinx/requirements.txt @@ -0,0 +1,3 @@ +sphinx>=8.0.0 +sphinx-rtd-theme>=3.0.0 +sphinx-autodoc-typehints>=2.0.0 diff --git a/docs/sphinx/source/api/action.rst b/docs/sphinx/source/api/action.rst new file mode 100644 index 000000000..8f9737f24 --- /dev/null +++ b/docs/sphinx/source/api/action.rst @@ -0,0 +1,251 @@ +Action Space +============ + +The action space defines how agents interact with the Factorio Learning Environment through Python code synthesis. + +Action Structure +---------------- + +Actions are defined by the Action class: + +.. autoclass:: fle.env.gym_env.action.Action + :members: + :undoc-members: + :show-inheritance: + +Action Components +----------------- + +**agent_idx** + Index of the agent taking the action (for multi-agent environments) + +**code** + Python code to execute in the game environment + +**game_state** + Optional game state to reset to before running code + +Action Space Definition +------------------------ + +The action space follows this structure: + +.. code-block:: python + + { + 'agent_idx': Discrete(instance.num_agents), # Index of the agent taking the action + 'game_state': Text(max_length=1000000), # Optional: game state to reset to before running code + 'code': Text(max_length=10000) # Python code to execute + } + +Code Execution +-------------- + +The environment executes Python code in a controlled namespace that includes: + +**Standard Library** + Full Python standard library access + +**FLE Tools** + All available tools for game interaction + +**Namespace Persistence** + Variables and functions persist between actions + +**Error Handling** + Comprehensive exception handling with detailed error messages + +Example Actions +--------------- + +**Basic Movement** + .. code-block:: python + + action = Action( + agent_idx=0, + code='position = get_position()', + game_state=None + ) + +**Entity Placement** + .. code-block:: python + + action = Action( + agent_idx=0, + code=''' + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(Resource.IronOre), + direction=Direction.NORTH + ) + ''', + game_state=None + ) + +**Complex Automation** + .. code-block:: python + + action = Action( + agent_idx=0, + code=''' + # Get iron patch and place mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(Resource.IronOre), + direction=Direction.NORTH + ) + # Add output storage + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + # Verify automation chain + sleep(10) + assert drill.status == EntityStatus.WORKING + print(get_entities()) + ''', + game_state=None + ) + +**Function Definition** + .. code-block:: python + + action = Action( + agent_idx=0, + code=''' + def place_mining_setup(resource_type, direction): + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(resource_type), + direction=direction + ) + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + return drill, chest + + # Use the function + drill, chest = place_mining_setup(Resource.IronOre, Direction.NORTH) + ''', + game_state=None + ) + +**Class Definition** + .. code-block:: python + + action = Action( + agent_idx=0, + code=''' + class MiningOperation: + def __init__(self, resource_type, position): + self.resource_type = resource_type + self.position = position + self.drill = None + self.chest = None + + def setup(self): + self.drill = place_entity( + entity=Prototype.MiningDrill, + position=self.position, + direction=Direction.NORTH + ) + self.chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=self.drill.drop_position, + direction=Direction.SOUTH + ) + + def is_working(self): + return self.drill.status == EntityStatus.WORKING + + # Create and use the class + mining_op = MiningOperation(Resource.IronOre, nearest(Resource.IronOre)) + mining_op.setup() + print(f"Mining operation working: {mining_op.is_working()}") + ''', + game_state=None + ) + +Error Handling +-------------- + +The environment provides comprehensive error handling: + +**Syntax Errors** + Python syntax errors are caught and reported with line numbers + +**Runtime Errors** + Exceptions during code execution are captured with full stack traces + +**Tool Errors** + Invalid tool usage is reported with detailed error messages + +**Assertion Failures** + Failed assertions provide context about expected vs actual values + +Example Error Handling +---------------------- + +.. code-block:: python + + # Invalid tool usage + action = Action( + agent_idx=0, + code='place_entity(entity="invalid", position=(0, 0))', + game_state=None + ) + + # Results in error message: + # ValueError: Invalid entity type 'invalid'. Expected Prototype enum value. + +**Debugging Support** + The environment provides debugging information: + + - **Variable Inspection**: Access to all namespace variables + - **Function Signatures**: Available functions and their parameters + - **Entity State**: Current state of all game entities + - **Error Context**: Detailed error information with suggestions + +Multi-Agent Actions +------------------- + +For multi-agent environments, actions can be coordinated: + +.. code-block:: python + + # Agent 0 places a drill + action_0 = Action( + agent_idx=0, + code='drill = place_entity(entity=Prototype.MiningDrill, position=nearest(Resource.IronOre))', + game_state=None + ) + + # Agent 1 places a chest next to it + action_1 = Action( + agent_idx=1, + code='chest = place_entity_next_to(entity=Prototype.IronChest, reference_position=drill.drop_position)', + game_state=None + ) + +Action Validation +----------------- + +The environment validates actions before execution: + +- **Agent Index**: Ensures valid agent index +- **Code Length**: Limits code to prevent resource exhaustion +- **Game State**: Validates game state format if provided +- **Tool Availability**: Ensures requested tools are available + +Best Practices +-------------- + +1. **Use Descriptive Variable Names**: Make code readable and maintainable +2. **Handle Errors Gracefully**: Use try-except blocks for robust code +3. **Leverage Namespace**: Store useful objects for later reference +4. **Use Functions**: Encapsulate common operations +5. **Debug with Print**: Use print statements to monitor execution +6. **Assert Conditions**: Use assertions to verify expected behavior diff --git a/docs/sphinx/source/api/environment.rst b/docs/sphinx/source/api/environment.rst new file mode 100644 index 000000000..486440c8c --- /dev/null +++ b/docs/sphinx/source/api/environment.rst @@ -0,0 +1,128 @@ +Environment API +=============== + +The Factorio Learning Environment provides a comprehensive API for interacting with the game through Python code synthesis. + +Core Concepts +------------- + +**FactorioInstance** + The main interface for interacting with a Factorio game instance. Provides access to all game state and tools. + +**Namespace Management** + Python namespace that persists across agent actions, allowing for stateful interactions and code reuse. + +**Gym Environment Integration** + Standard OpenAI Gym interface for reinforcement learning integration. + +FactorioInstance +---------------- + +.. autoclass:: fle.env.instance.FactorioInstance + :members: + :undoc-members: + :show-inheritance: + +Key Methods +~~~~~~~~~~~ + +.. automethod:: fle.env.instance.FactorioInstance.reset +.. automethod:: fle.env.instance.FactorioInstance.step +.. automethod:: fle.env.instance.FactorioInstance.close + +Namespace Management +-------------------- + +.. autoclass:: fle.env.namespace.Namespace + :members: + :undoc-members: + :show-inheritance: + +The namespace provides: + +- **Variable Storage**: Store and retrieve objects between actions +- **Function Definitions**: Define reusable functions +- **Class Definitions**: Create custom data structures +- **Import Management**: Handle Python imports and modules + +Gym Environment +--------------- + +.. autoclass:: fle.env.gym_env.FactorioGymEnv + :members: + :undoc-members: + :show-inheritance: + +The gym environment provides: + +- **Standard Interface**: Compatible with OpenAI Gym +- **Action Space**: Structured action space for agent actions +- **Observation Space**: Rich observation space with game state +- **Reward System**: Configurable reward functions + +Environment Registry +-------------------- + +FLE uses a gym environment registry to automatically discover and register all available tasks. + +.. autofunction:: fle.env.gym_env.registry.list_available_environments +.. autofunction:: fle.env.gym_env.registry.get_environment_info +.. autofunction:: fle.env.gym_env.registry.register_all_environments + +Available Environments +~~~~~~~~~~~~~~~~~~~~~~~ + +**Throughput Tasks (Lab Play)** + All throughput tasks are defined in `fle/eval/tasks/task_definitions/lab_play/throughput_tasks.py`. The 24 available tasks are: + + - **Circuits**: `advanced_circuit_throughput`, `electronic_circuit_throughput`, `processing_unit_throughput` + - **Science Packs**: `automation_science_pack_throughput`, `logistics_science_pack_throughput`, `chemical_science_pack_throughput`, `military_science_pack_throughput`, `production_science_pack_throughput`, `utility_science_pack_throughput` + - **Components**: `battery_throughput`, `engine_unit_throughput`, `inserter_throughput`, `iron_gear_wheel_throughput`, `low_density_structure_throughput` + - **Raw Materials**: `iron_ore_throughput`, `iron_plate_throughput`, `steel_plate_throughput`, `plastic_bar_throughput` + - **Oil & Chemicals**: `crude_oil_throughput`, `petroleum_gas_throughput`, `sufuric_acid_throughput`, `sulfur_throughput` + - **Military**: `piercing_round_throughput`, `stone_wall_throughput` + + Most tasks require 16 items per 60 seconds; fluid tasks require 250 units per 60 seconds. + +**Open Play** + Unbounded task of building the largest possible factory: `open_play` + +Example Usage +------------- + +.. code-block:: python + + import gym + from fle.env.gym_env.action import Action + + # Create any available environment + env = gym.make("iron_ore_throughput") + + # Reset the environment + obs = env.reset(options={'game_state': None}) + + # Take an action + action = Action( + agent_idx=0, # Which agent takes the action + code='print("Hello Factorio!")', # Python code to execute + game_state=None # Optional: game state to reset to before running code + ) + + # Execute the action + obs, reward, terminated, truncated, info = env.step(action) + + # Clean up + env.close() + +Error Handling +-------------- + +The environment includes comprehensive error handling for: + +- Missing task definition files +- Invalid JSON configurations +- Missing Factorio containers +- Environment creation failures +- Network connectivity issues + +If an environment fails to load, a warning will be printed but the registry will continue to load other environments. diff --git a/docs/sphinx/source/api/modules.rst b/docs/sphinx/source/api/modules.rst new file mode 100644 index 000000000..6b5e931a5 --- /dev/null +++ b/docs/sphinx/source/api/modules.rst @@ -0,0 +1,42 @@ +API Modules +=========== + +This section contains the complete API reference for all FLE modules. + +Core Environment +---------------- + +.. toctree:: + :maxdepth: 2 + + modules/fle.env.instance + modules/fle.env.namespace + modules/fle.env.gym_env + modules/fle.env.entities + modules/fle.env.game_types + +Agents +------ + +.. toctree:: + :maxdepth: 2 + + modules/fle.agents.agent_abc + modules/fle.agents.models + +Evaluation +---------- + +.. toctree:: + :maxdepth: 2 + + modules/fle.eval.tasks + modules/fle.eval.algorithms + +Common Models +------------- + +.. toctree:: + :maxdepth: 2 + + modules/fle.commons.models diff --git a/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst b/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst new file mode 100644 index 000000000..0b7dd4707 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst @@ -0,0 +1,7 @@ +fle.agents.agent_abc module +=========================== + +.. automodule:: fle.agents.agent_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.agents.models.rst b/docs/sphinx/source/api/modules/fle.agents.models.rst new file mode 100644 index 000000000..16f04c4a7 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.agents.models.rst @@ -0,0 +1,7 @@ +fle.agents.models module +======================== + +.. automodule:: fle.agents.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.commons.models.rst b/docs/sphinx/source/api/modules/fle.commons.models.rst new file mode 100644 index 000000000..ffcd449b8 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.commons.models.rst @@ -0,0 +1,7 @@ +fle.commons.models module +========================= + +.. automodule:: fle.commons.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.entities.rst b/docs/sphinx/source/api/modules/fle.env.entities.rst new file mode 100644 index 000000000..8964ea1a3 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.env.entities.rst @@ -0,0 +1,7 @@ +fle.env.entities module +======================= + +.. automodule:: fle.env.entities + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.game_types.rst b/docs/sphinx/source/api/modules/fle.env.game_types.rst new file mode 100644 index 000000000..60ae7c422 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.env.game_types.rst @@ -0,0 +1,7 @@ +fle.env.game_types module +========================= + +.. automodule:: fle.env.game_types + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.gym_env.rst b/docs/sphinx/source/api/modules/fle.env.gym_env.rst new file mode 100644 index 000000000..a31567df5 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.env.gym_env.rst @@ -0,0 +1,7 @@ +fle.env.gym_env module +====================== + +.. automodule:: fle.env.gym_env + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.instance.rst b/docs/sphinx/source/api/modules/fle.env.instance.rst new file mode 100644 index 000000000..7e181751e --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.env.instance.rst @@ -0,0 +1,7 @@ +fle.env.instance module +======================== + +.. automodule:: fle.env.instance + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.namespace.rst b/docs/sphinx/source/api/modules/fle.env.namespace.rst new file mode 100644 index 000000000..bbf5c11b8 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.env.namespace.rst @@ -0,0 +1,7 @@ +fle.env.namespace module +======================== + +.. automodule:: fle.env.namespace + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.eval.algorithms.rst b/docs/sphinx/source/api/modules/fle.eval.algorithms.rst new file mode 100644 index 000000000..044d3a738 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.eval.algorithms.rst @@ -0,0 +1,7 @@ +fle.eval.algorithms module +========================== + +.. automodule:: fle.eval.algorithms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.eval.tasks.rst b/docs/sphinx/source/api/modules/fle.eval.tasks.rst new file mode 100644 index 000000000..b1c391a33 --- /dev/null +++ b/docs/sphinx/source/api/modules/fle.eval.tasks.rst @@ -0,0 +1,7 @@ +fle.eval.tasks module +===================== + +.. automodule:: fle.eval.tasks + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/source/api/observation.rst b/docs/sphinx/source/api/observation.rst new file mode 100644 index 000000000..1f54c065a --- /dev/null +++ b/docs/sphinx/source/api/observation.rst @@ -0,0 +1,178 @@ +Observation Space +================== + +The observation space provides rich information about the current game state, allowing agents to make informed decisions. + +Observation Structure +-------------------- + +The observation space includes the following components: + +**raw_text** + Output from the last action (stdout/stderr) + +**entities** + List of entities on the map with their current state + +**inventory** + Current inventory state of the player + +**research** + Research progress and available technologies + +**game_info** + Game state information (tick, time, speed) + +**score** + Current score and performance metrics + +**flows** + Production statistics and resource flows + +**task_verification** + Task completion status and progress + +**messages** + Inter-agent communication messages + +**serialized_functions** + Available functions and their signatures + +**task_info** + Information about the current task + +**map_image** + Base64 encoded PNG image of the current map + +Entity Information +------------------ + +Entities provide detailed information about game objects: + +.. autoclass:: fle.env.entities.Entity + :members: + :undoc-members: + :show-inheritance: + +Entity Types +~~~~~~~~~~~~ + +**MiningDrill** + Mining drills for extracting resources + +**Chest** + Storage containers for items + +**AssemblingMachine** + Machines for crafting items + +**Inserter** + Transport devices for moving items + +**TransportBelt** + Conveyor belts for item transport + +**Pipe** + Fluid transport systems + +**PowerPole** + Electrical distribution + +**Lab** + Research facilities + +Position and Direction +---------------------- + +.. autoclass:: fle.env.game_types.Position + :members: + :undoc-members: + :show-inheritance: + +.. autoclass:: fle.env.game_types.Direction + :members: + :undoc-members: + :show-inheritance: + +Inventory Management +-------------------- + +.. autoclass:: fle.env.game_types.Inventory + :members: + :undoc-members: + :show-inheritance: + +The inventory system provides: + +- **Item Storage**: Store and retrieve items +- **Count Methods**: Query item quantities +- **Type Validation**: Ensure item compatibility +- **Transfer Operations**: Move items between inventories + +Research System +--------------- + +.. autoclass:: fle.env.game_types.Research + :members: + :undoc-members: + :show-inheritance: + +Research provides: + +- **Technology Tree**: Available technologies +- **Prerequisites**: Required research +- **Progress Tracking**: Current research status +- **Unlock Management**: New technologies and recipes + +Game State Information +---------------------- + +.. autoclass:: fle.env.game_types.GameInfo + :members: + :undoc-members: + :show-inheritance: + +Game info includes: + +- **Tick Information**: Current game tick +- **Time Data**: Game time and speed +- **Performance Metrics**: FPS and UPS +- **Map Information**: World size and generation + +Task Verification +---------------- + +.. autoclass:: fle.env.game_types.TaskVerification + :members: + :undoc-members: + :show-inheritance: + +Task verification provides: + +- **Completion Status**: Whether the task is complete +- **Progress Metrics**: Current progress toward goals +- **Objective Tracking**: Individual objective status +- **Performance Data**: Efficiency and throughput metrics + +Example Observation +------------------- + +.. code-block:: python + + { + 'raw_text': 'Hello Factorio!', + 'entities': [ + Entity(name='burner-mining-drill', position=Position(x=-28.0, y=-61.0), ...), + Entity(name='iron-chest', position=Position(x=-27.5, y=-59.5), ...) + ], + 'inventory': Inventory({'iron-ore': 75, 'coal': 4}), + 'research': Research(technologies=['automation'], progress=0.5), + 'game_info': GameInfo(tick=1000, time=16.67, speed=1.0), + 'score': 150, + 'flows': {'iron-ore': 2.5, 'iron-plate': 1.2}, + 'task_verification': TaskVerification(complete=False, progress=0.3), + 'messages': [], + 'serialized_functions': ['place_entity', 'get_entities', ...], + 'task_info': {'name': 'iron_ore_throughput', 'target': 16}, + 'map_image': 'iVBORw0KGgoAAAANSUhEUgAA...' + } diff --git a/docs/sphinx/source/api/tools.rst b/docs/sphinx/source/api/tools.rst new file mode 100644 index 000000000..214dd3ba6 --- /dev/null +++ b/docs/sphinx/source/api/tools.rst @@ -0,0 +1,276 @@ +Tools API +========= + +Agents interact with the game using _tools_, which represent a narrow API into the game. Tools are functions that perform game actions and return typed objects. + +Tool Architecture +----------------- + +Tools live in `fle/env/tools/agent/` and require 3 files: + +1. **agent.md**: Documentation for the agent, including usage patterns, best practices and failure modes +2. **client.py**: Client-side implementation, a Python class that can be invoked by the agent +3. **server.lua**: Server-side implementation, which handles most of the logic and heavy lifting + +.. mermaid:: + :config: + layout: fixed + flowchart: + defaultRenderer: + elk + + flowchart LR + A("fa:fa-comment-dots Agent") + subgraph s1["Learning Environment"] + B("fa:fa-code Interpreter") + n1("client.py") + end + subgraph s2["Factorio Server"] + E1["fa:fa-shapes server.lua"] + F("fa:fa-cog Factorio Engine") + end + A -- Synthesises Python --> B + B -- Invokes --> n1 + n1 -. Exceptions .-> B + n1 -. Objects .-> B + n1 --Remote TCP Call--> E1 + E1 -- Execute --> F + F-. Result .-> E1 + E1 -. TCP Response .-> n1 + B -. Observation .-> A + +Core Tools +---------- + +Inventory Management +~~~~~~~~~~~~~~~~~~~~ + +**inspect_inventory** + Checks contents of player or entity inventories + + - Supports various inventory types (chests, furnaces, etc.) + - Returns Inventory object with count methods + - Can query specific items + +**insert_item** + Places items from player inventory into entities + + - Works with machines, chests, belts + - Validates item compatibility + - Returns updated entity + +**extract_item** + Removes items from entity inventories + + - Supports all inventory types + - Auto-transfers to player inventory + - Returns quantity extracted + +Entity Management +~~~~~~~~~~~~~~~~~ + +**place_entity** + Places entities in the world + + - Handles direction and positioning + - Validates placement requirements + - Returns placed Entity object + +**place_entity_next_to** + Places entities relative to others + + - Automatic spacing/alignment + - Handles entity dimensions + - Supports all entity types + +**pickup_entity** + Removes entities from the world + + - Returns items to inventory + - Handles entity groups + - Supports all placeable items + +**rotate_entity** + Changes entity orientation + + - Affects entity behavior (e.g., inserter direction) + - Validates rotation rules + - Returns updated entity + +Entity Queries +~~~~~~~~~~~~~~ + +**get_entity** + Retrieves entity objects at positions + + - Updates stale references + - Returns typed Entity objects + - Handles all entity types + +**get_entities** + Finds multiple entities in an area + + - Supports filtering by type + - Returns List[Entity] + - Groups connected entities + +**nearest** + Locates closest resources/entities + + - Finds ores, water, trees + - Returns Position object + - 500 tile search radius + +**nearest_buildable** + Finds valid building locations + + - Respects entity dimensions + - Handles resource requirements + - Returns buildable position + +Resource Management +~~~~~~~~~~~~~~~~~~~ + +**get_resource_patch** + Analyzes resource deposits + + - Returns size and boundaries + - Supports all resource types + - Includes total resource amount + +**harvest_resource** + Gathers resources from the world + + - Supports ores, trees, rocks + - Auto-collects to inventory + - Returns amount harvested + +Connection Management +~~~~~~~~~~~~~~~~~~~~~ + +**connect_entities** + Creates connections between entities + + - Handles belts, pipes, power + - Automatic pathfinding + - Returns connection group + +**get_connection_amount** + Calculates required connection items + + - Pre-planning tool + - Works with all connection types + - Returns item count needed + +Crafting and Research +~~~~~~~~~~~~~~~~~~~~~ + +**set_entity_recipe** + Configures machine crafting recipes + + - Works with assemblers/chemical plants + - Validates recipe requirements + - Returns updated entity + +**get_prototype_recipe** + Retrieves crafting requirements + + - Shows ingredients/products + - Includes crafting time + - Returns Recipe object + +**craft_item** + Creates items from components + + - Handles recursive crafting + - Validates technology requirements + - Returns crafted amount + +**set_research** + Initiates technology research + + - Validates prerequisites + - Returns required ingredients + - Handles research queue + +**get_research_progress** + Monitors research status + + - Shows remaining requirements + - Tracks progress percentage + - Returns ingredient list + +Movement and Control +~~~~~~~~~~~~~~~~~~~~ + +**move_to** + Moves player to position + + - Pathfinds around obstacles + - Can place items while moving + - Returns final position + +**sleep** + Pauses execution + + - Waits for actions to complete + - Adapts to game speed + - Maximum 15 second duration + +**launch_rocket** + Controls rocket silo launches + + - Validates launch requirements + - Handles launch sequence + - Returns updated silo state + +Debugging and Output +~~~~~~~~~~~~~~~~~~~~ + +**print** + Outputs debug information to stdout + + - Supports various object types + - Useful for monitoring state + - Returns formatted string + +Tool Categories +---------------- + +**Core Tools** + Essential tools for basic game interaction + +**Advanced Tools** + Specialized tools for complex operations + +**Debugging Tools** + Tools for monitoring and debugging + +**Multi-Agent Tools** + Tools for coordinated multi-agent operations + +Creating Custom Tools +--------------------- + +1. Create a new directory in `fle/env/tools/agent/`, e.g `fle/env/tools/agent/my_tool` +2. Add a `client.py` file, which should contain a class inheriting `Tool` and implementing a `__call__` function to treat the class as a callable function. The method signature should contain type annotations. This function _must_ call `self.execute` to invoke the server-side logic. +3. Add a `server.lua` file, containing a function structured like `global.actions.my_tool = function(arg1, arg2, ...)`. This file should invoke the `Factorio API `_ to perform the desired action, and return a table that will be serialized and sent back to the client. +4. Add an `agent.md` file, which should contain a markdown description of the tool. This file will be used by the agent to understand how to use the tool + +Next time you run an eval, the tool will automatically be available to the agent and documented in the agent context. + +5. (Optional) Create a test suite in `fle/tests/actions` for your new tool. + +Tool Documentation +------------------ + +Each tool has comprehensive documentation including: + +- **Overview**: What the tool does +- **Parameters**: Input parameters and their types +- **Returns**: What the tool returns +- **Examples**: Usage examples +- **Best Practices**: Recommended usage patterns +- **Failure Modes**: Common errors and how to avoid them + +See the :doc:`tools index <../tools/index>` for detailed documentation of each tool. diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py new file mode 100644 index 000000000..8c7bac524 --- /dev/null +++ b/docs/sphinx/source/conf.py @@ -0,0 +1,88 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('../../..')) + +# -- Project information ----------------------------------------------------- + +project = 'Factorio Learning Environment' +copyright = '2024, FLE Team' +author = 'FLE Team' +release = '0.3.0' + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'sphinx.ext.intersphinx', + 'sphinx_autodoc_typehints', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# -- Extension configuration ------------------------------------------------- + +# -- Options for autodoc extension ------------------------------------------- +autodoc_default_options = { + 'members': True, + 'member-order': 'bysource', + 'special-members': '__init__', + 'undoc-members': True, + 'exclude-members': '__weakref__' +} + +# -- Options for intersphinx extension --------------------------------------- +intersphinx_mapping = { + 'python': ('https://docs.python.org/3/', None), + 'numpy': ('https://numpy.org/doc/stable/', None), + 'gym': ('https://gymnasium.farama.org/', None), +} + +# -- Options for Napoleon extension ----------------------------------------- +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_init_with_doc = False +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = True +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True +napoleon_preprocess_types = False +napoleon_type_aliases = None +napoleon_attr_annotations = True diff --git a/docs/sphinx/source/customization/agents.rst b/docs/sphinx/source/customization/agents.rst new file mode 100644 index 000000000..143602d55 --- /dev/null +++ b/docs/sphinx/source/customization/agents.rst @@ -0,0 +1,331 @@ +Implementing Custom Agents +========================== + +FLE provides a flexible framework for implementing custom agents. Agents interact with the environment through code synthesis and can be designed for various evaluation scenarios. + +Agent Architecture +------------------ + +Agents in FLE follow a specific architecture: + +**Base Agent Class** + Abstract base class defining the agent interface + +**Agent Implementation** + Concrete implementation of agent behavior + +**Agent Registration** + Registration with the evaluation system + +Base Agent Class +---------------- + +All agents inherit from the base agent class: + +.. autoclass:: fle.agents.agent_abc.Agent + :members: + :undoc-members: + :show-inheritance: + +Key Methods +~~~~~~~~~~~ + +**act(observation)** + Generate an action based on the current observation + +**reset()** + Reset the agent state for a new episode + +**close()** + Clean up agent resources + +Agent Implementation +-------------------- + +Create a custom agent by inheriting from the base class: + +.. code-block:: python + + from fle.agents.agent_abc import Agent + from fle.env.gym_env.action import Action + from typing import Dict, Any + + class MyCustomAgent(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "MyCustomAgent" + self.episode_count = 0 + self.total_reward = 0.0 + + def act(self, observation: Dict[str, Any]) -> Action: + """ + Generate an action based on the current observation. + + Args: + observation: Current game state observation + + Returns: + Action to execute + """ + # Analyze the observation + entities = observation.get('entities', []) + inventory = observation.get('inventory', {}) + game_info = observation.get('game_info', {}) + + # Generate action code + code = self._generate_action_code(entities, inventory, game_info) + + return Action( + agent_idx=0, + code=code, + game_state=None + ) + + def reset(self): + """Reset agent state for new episode""" + self.episode_count += 1 + self.total_reward = 0.0 + super().reset() + + def close(self): + """Clean up agent resources""" + super().close() + + def _generate_action_code(self, entities, inventory, game_info): + """Generate Python code for the action""" + # Implement your action generation logic + return 'print("Hello from MyCustomAgent!")' + +Agent Types +----------- + +**Basic Agents** + Simple agents with basic decision-making + +**Visual Agents** + Agents that process visual information + +**Multi-Agent Systems** + Agents that coordinate with other agents + +**Learning Agents** + Agents that improve over time + +**Specialized Agents** + Agents designed for specific tasks + +Example Agent: Resource Collector +---------------------------------- + +Here's a complete example of a resource collection agent: + +.. code-block:: python + + from fle.agents.agent_abc import Agent + from fle.env.gym_env.action import Action + from fle.env.game_types import Position, Direction + from typing import Dict, Any, List + + class ResourceCollectorAgent(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "ResourceCollectorAgent" + self.target_resources = config.get('target_resources', ['iron-ore', 'copper-ore']) + self.collected_resources = {} + self.mining_setups = [] + + def act(self, observation: Dict[str, Any]) -> Action: + """Generate action to collect resources""" + entities = observation.get('entities', []) + inventory = observation.get('inventory', {}) + + # Check if we need to set up mining + if not self.mining_setups: + code = self._setup_mining(entities) + else: + code = self._monitor_mining(entities, inventory) + + return Action( + agent_idx=0, + code=code, + game_state=None + ) + + def _setup_mining(self, entities: List) -> str: + """Set up mining operations for target resources""" + code_lines = [] + + for resource in self.target_resources: + code_lines.append(f''' +# Set up mining for {resource} +resource_pos = nearest(Resource.{resource.replace('-', '_').upper()}) +if resource_pos: + drill = place_entity( + entity=Prototype.MiningDrill, + position=resource_pos, + direction=Direction.NORTH + ) + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + print(f"Set up mining for {{resource}} at {{resource_pos}}") +''') + + return '\n'.join(code_lines) + + def _monitor_mining(self, entities: List, inventory: Dict) -> str: + """Monitor and manage existing mining operations""" + return ''' +# Monitor mining operations +entities = get_entities() +for entity in entities: + if hasattr(entity, 'status') and entity.status == EntityStatus.WORKING: + print(f"Entity {entity.name} is working") + elif hasattr(entity, 'status') and entity.status == EntityStatus.NO_POWER: + print(f"Entity {entity.name} needs power") + +# Check inventory +inventory = inspect_inventory() +for item, count in inventory.items(): + if count > 0: + print(f"Have {count} {item}") +''' + +Agent Configuration +------------------- + +Agents can be configured with various parameters: + +**Behavior Parameters** + - Decision-making algorithms + - Action generation strategies + - State management approaches + +**Performance Parameters** + - Memory usage limits + - Processing time limits + - Resource consumption limits + +**Evaluation Parameters** + - Success criteria + - Performance metrics + - Evaluation scenarios + +Example Configuration +-------------------- + +.. code-block:: json + + { + "agent_type": "ResourceCollectorAgent", + "config": { + "target_resources": ["iron-ore", "copper-ore", "coal"], + "max_mining_setups": 5, + "mining_radius": 100, + "inventory_threshold": 1000 + }, + "evaluation": { + "episodes": 10, + "max_steps": 1000, + "success_threshold": 0.8 + } + } + +Agent Testing +------------- + +Create test cases for your custom agents: + +.. code-block:: python + + import pytest + from fle.agents.my_custom_agent import MyCustomAgent + from fle.env.gym_env.action import Action + + def test_agent_creation(): + config = {'param1': 'value1'} + agent = MyCustomAgent(config) + assert agent.name == "MyCustomAgent" + + def test_agent_action(): + config = {} + agent = MyCustomAgent(config) + + observation = { + 'entities': [], + 'inventory': {}, + 'game_info': {} + } + + action = agent.act(observation) + assert isinstance(action, Action) + assert action.agent_idx == 0 + + def test_agent_reset(): + config = {} + agent = MyCustomAgent(config) + agent.reset() + assert agent.episode_count == 1 + +Advanced Agent Features +----------------------- + +**State Management** + - Persistent state across episodes + - State serialization and loading + - State sharing between agents + +**Learning Capabilities** + - Experience replay + - Policy updates + - Performance tracking + +**Multi-Agent Coordination** + - Communication protocols + - Task distribution + - Conflict resolution + +**Adaptive Behavior** + - Dynamic strategy adjustment + - Environment adaptation + - Performance optimization + +Agent Registration +------------------ + +Agents are registered with the evaluation system: + +1. **Agent Discovery**: The system scans for agent implementations +2. **Configuration Loading**: Agent configurations are loaded +3. **Initialization**: Agents are initialized with their configurations +4. **Registration**: Agents are registered with the evaluation system + +Example Registration +---------------------- + +.. code-block:: python + + from fle.agents.registry import register_agent + from fle.agents.my_custom_agent import MyCustomAgent + + # Register the agent + register_agent('my_custom_agent', MyCustomAgent) + + # Use in evaluation + config = { + 'agent_type': 'my_custom_agent', + 'config': {'param1': 'value1'} + } + +Best Practices +-------------- + +1. **Clear Interface**: Design simple, intuitive interfaces +2. **Error Handling**: Handle errors gracefully +3. **State Management**: Manage agent state properly +4. **Performance**: Optimize for efficiency +5. **Testing**: Test all scenarios and edge cases +6. **Documentation**: Document agent behavior and configuration +7. **Modularity**: Design for reusability and extensibility diff --git a/docs/sphinx/source/customization/database.rst b/docs/sphinx/source/customization/database.rst new file mode 100644 index 000000000..49cb06342 --- /dev/null +++ b/docs/sphinx/source/customization/database.rst @@ -0,0 +1,357 @@ +Database Configuration +======================= + +FLE supports checkpointing at every agent step using a SQL database. The `db_client` implements the interface for saving and loading agent outputs, environment feedbacks, game states and histories of the current trajectory. + +Database Types +-------------- + +FLE supports multiple database backends: + +**SQLite (Default)** + Lightweight, file-based database + +**PostgreSQL** + Full-featured, server-based database + +**Custom Databases** + Extensible database interface + +SQLite Configuration +-------------------- + +SQLite is the default database and requires minimal configuration: + +.. code-block:: bash + + # Set database type + FLE_DB_TYPE="sqlite" + + # Set database file path (default: .fle/data.db) + SQLITE_DB_FILE=".fle/data.db" + +SQLite is ideal for: +- Development and testing +- Single-user scenarios +- Small to medium datasets +- Quick setup and deployment + +PostgreSQL Configuration +------------------------ + +For production use and large-scale experiments, PostgreSQL is recommended: + +**Docker Setup** + .. code-block:: bash + + docker run --name fle-postgres \ + -e POSTGRES_PASSWORD=fle123 \ + -e POSTGRES_USER=fle_user \ + -e POSTGRES_DB=fle_database \ + -p 5432:5432 \ + -d postgres:15 + +**Environment Variables** + .. code-block:: bash + + # Database Configuration + FLE_DB_TYPE="postgres" + + # PostgreSQL Configuration + SKILLS_DB_HOST=localhost + SKILLS_DB_PORT=5432 + SKILLS_DB_NAME=fle_database + SKILLS_DB_USER=fle_user + SKILLS_DB_PASSWORD=fle123 + +PostgreSQL is ideal for: +- Production deployments +- Multi-user scenarios +- Large datasets +- High-performance requirements + +Database Schema +--------------- + +The database schema includes several key tables: + +**Trajectories** + Store complete agent trajectories + +**Steps** + Individual agent steps within trajectories + +**Game States** + Complete game state snapshots + +**Agent Outputs** + Agent-generated code and actions + +**Environment Feedbacks** + Environment responses and observations + +**Metadata** + Additional information about trajectories + +Database Client +--------------- + +The database client provides a unified interface: + +.. autoclass:: fle.commons.db_client.DatabaseClient + :members: + :undoc-members: + :show-inheritance: + +Key Methods +~~~~~~~~~~~ + +**save_trajectory(trajectory)** + Save a complete trajectory + +**load_trajectory(trajectory_id)** + Load a trajectory by ID + +**save_step(step)** + Save an individual step + +**load_steps(trajectory_id)** + Load all steps for a trajectory + +**save_game_state(state)** + Save a game state snapshot + +**load_game_state(state_id)** + Load a game state by ID + +Example Usage +------------- + +**Saving a Trajectory** + .. code-block:: python + + from fle.commons.db_client import DatabaseClient + + # Initialize database client + db = DatabaseClient() + + # Save trajectory + trajectory = { + 'id': 'trajectory_001', + 'agent_type': 'MyAgent', + 'task': 'iron_ore_throughput', + 'start_time': '2024-01-01T00:00:00Z', + 'end_time': '2024-01-01T01:00:00Z', + 'total_reward': 150.0, + 'success': True + } + + db.save_trajectory(trajectory) + +**Loading a Trajectory** + .. code-block:: python + + # Load trajectory + trajectory = db.load_trajectory('trajectory_001') + print(f"Trajectory: {trajectory['id']}") + print(f"Agent: {trajectory['agent_type']}") + print(f"Reward: {trajectory['total_reward']}") + +**Saving Steps** + .. code-block:: python + + # Save individual step + step = { + 'trajectory_id': 'trajectory_001', + 'step_number': 1, + 'action': 'print("Hello Factorio!")', + 'observation': {'entities': [], 'inventory': {}}, + 'reward': 10.0, + 'timestamp': '2024-01-01T00:00:00Z' + } + + db.save_step(step) + +**Loading Steps** + .. code-block:: python + + # Load all steps for a trajectory + steps = db.load_steps('trajectory_001') + for step in steps: + print(f"Step {step['step_number']}: {step['action']}") + +Database Migration +------------------ + +FLE includes database migration support: + +**Automatic Migration** + The system automatically migrates the database schema on startup + +**Manual Migration** + Run migrations manually when needed + +**Version Control** + Track database schema versions + +Example Migration +------------------ + +.. code-block:: python + + from fle.commons.db_client import DatabaseClient + + # Initialize database client + db = DatabaseClient() + + # Run migrations + db.migrate() + + # Check migration status + status = db.get_migration_status() + print(f"Current version: {status['current_version']}") + print(f"Latest version: {status['latest_version']}") + +Performance Optimization +----------------------- + +**Connection Pooling** + Reuse database connections + +**Batch Operations** + Group multiple operations together + +**Indexing** + Optimize database queries + +**Caching** + Cache frequently accessed data + +Example Optimization +------------------- + +.. code-block:: python + + from fle.commons.db_client import DatabaseClient + + # Initialize with connection pooling + db = DatabaseClient( + max_connections=10, + connection_timeout=30 + ) + + # Batch save multiple steps + steps = [ + {'trajectory_id': 't1', 'step_number': 1, 'action': 'action1'}, + {'trajectory_id': 't1', 'step_number': 2, 'action': 'action2'}, + {'trajectory_id': 't1', 'step_number': 3, 'action': 'action3'} + ] + + db.batch_save_steps(steps) + +Backup and Recovery +------------------- + +**Automated Backups** + Schedule regular database backups + +**Point-in-Time Recovery** + Restore to specific timestamps + +**Data Export** + Export data for analysis + +**Data Import** + Import data from other sources + +Example Backup +-------------- + +.. code-block:: python + + from fle.commons.db_client import DatabaseClient + + # Initialize database client + db = DatabaseClient() + + # Create backup + backup_id = db.create_backup() + print(f"Backup created: {backup_id}") + + # List backups + backups = db.list_backups() + for backup in backups: + print(f"Backup {backup['id']}: {backup['timestamp']}") + + # Restore from backup + db.restore_backup(backup_id) + +Monitoring and Maintenance +-------------------------- + +**Performance Monitoring** + Monitor database performance + +**Health Checks** + Verify database health + +**Cleanup Operations** + Remove old data + +**Optimization** + Optimize database performance + +Example Monitoring +----------------- + +.. code-block:: python + + from fle.commons.db_client import DatabaseClient + + # Initialize database client + db = DatabaseClient() + + # Get database statistics + stats = db.get_statistics() + print(f"Total trajectories: {stats['trajectories']}") + print(f"Total steps: {stats['steps']}") + print(f"Database size: {stats['size']}") + + # Get performance metrics + metrics = db.get_performance_metrics() + print(f"Average query time: {metrics['avg_query_time']}") + print(f"Connection count: {metrics['connection_count']}") + +Troubleshooting +-------------- + +**Connection Issues** + - Verify database server is running + - Check connection parameters + - Verify network connectivity + +**Performance Issues** + - Monitor database performance + - Optimize queries + - Consider connection pooling + +**Data Issues** + - Verify data integrity + - Check for corruption + - Run data validation + +**Migration Issues** + - Check migration status + - Verify schema compatibility + - Run manual migrations if needed + +Best Practices +-------------- + +1. **Regular Backups**: Schedule automated backups +2. **Performance Monitoring**: Monitor database performance +3. **Connection Management**: Use connection pooling +4. **Data Validation**: Validate data integrity +5. **Migration Testing**: Test migrations before deployment +6. **Security**: Secure database access +7. **Documentation**: Document database configuration diff --git a/docs/sphinx/source/customization/tasks.rst b/docs/sphinx/source/customization/tasks.rst new file mode 100644 index 000000000..ee64635b2 --- /dev/null +++ b/docs/sphinx/source/customization/tasks.rst @@ -0,0 +1,276 @@ +Creating Custom Tasks +===================== + +FLE allows you to create custom tasks for evaluating agent capabilities. Tasks define the objectives, constraints, and success criteria for agent evaluation. + +Task Structure +-------------- + +Tasks are defined in `fle/eval/tasks/task_definitions/` and follow a specific structure: + +**Task Definition File** + JSON configuration file defining task parameters + +**Task Implementation** + Python class implementing the task logic + +**Task Registration** + Automatic registration with the gym environment registry + +Task Definition +--------------- + +Create a new task definition file in `fle/eval/tasks/task_definitions/`: + +.. code-block:: json + + { + "name": "my_custom_task", + "description": "A custom task for evaluating agent capabilities", + "type": "throughput", + "target": 16, + "time_limit": 3600, + "resources": { + "iron_ore": 10000, + "copper_ore": 5000, + "coal": 2000 + }, + "technologies": ["automation"], + "constraints": { + "max_entities": 100, + "max_power": 1000 + } + } + +Task Types +---------- + +**Throughput Tasks** + Tasks focused on producing a specific item at a target rate + +**Research Tasks** + Tasks focused on technology research and advancement + +**Construction Tasks** + Tasks focused on building specific structures + +**Exploration Tasks** + Tasks focused on map exploration and discovery + +**Multi-Objective Tasks** + Tasks with multiple competing objectives + +Task Implementation +------------------- + +Create a Python class implementing your task: + +.. code-block:: python + + from fle.eval.tasks.base import BaseTask + + class MyCustomTask(BaseTask): + def __init__(self, config): + super().__init__(config) + self.target = config.get('target', 16) + self.time_limit = config.get('time_limit', 3600) + + def evaluate(self, state): + """Evaluate the current state against task objectives""" + # Implement your evaluation logic + pass + + def is_complete(self, state): + """Check if the task is complete""" + # Implement completion criteria + pass + + def get_reward(self, state): + """Calculate reward for current state""" + # Implement reward calculation + pass + +Task Configuration +------------------ + +Tasks can be configured with various parameters: + +**Resource Constraints** + - Starting resources + - Resource availability + - Resource consumption rates + +**Technology Requirements** + - Required technologies + - Technology research costs + - Technology dependencies + +**Time Constraints** + - Time limits + - Time-based objectives + - Time-based rewards + +**Spatial Constraints** + - Map size limits + - Entity placement rules + - Distance requirements + +**Performance Constraints** + - Power consumption limits + - Entity count limits + - Efficiency requirements + +Task Registration +----------------- + +Tasks are automatically registered with the gym environment registry: + +1. **File Discovery**: The registry scans `fle/eval/tasks/task_definitions/` +2. **JSON Parsing**: Task definitions are parsed from JSON files +3. **Environment Creation**: Gym environments are created for each task +4. **Registration**: Environments are registered with gym + +Example Task +------------ + +Here's a complete example of a custom task: + +**Task Definition** (`my_custom_task.json`): + +.. code-block:: json + + { + "name": "iron_plate_throughput", + "description": "Produce iron plates at 16 items per 60 seconds", + "type": "throughput", + "target": 16, + "time_limit": 3600, + "resources": { + "iron_ore": 10000, + "coal": 2000 + }, + "technologies": ["automation"], + "constraints": { + "max_entities": 50, + "max_power": 500 + } + } + +**Task Implementation** (`my_custom_task.py`): + +.. code-block:: python + + from fle.eval.tasks.base import BaseTask + from fle.env.game_types import Entity, Inventory + + class IronPlateThroughputTask(BaseTask): + def __init__(self, config): + super().__init__(config) + self.target = config.get('target', 16) + self.time_limit = config.get('time_limit', 3600) + self.start_time = None + + def reset(self): + """Reset the task state""" + self.start_time = None + return super().reset() + + def evaluate(self, state): + """Evaluate current throughput""" + if self.start_time is None: + self.start_time = state.get('game_info', {}).get('tick', 0) + + current_time = state.get('game_info', {}).get('tick', 0) + elapsed_time = (current_time - self.start_time) / 60.0 # Convert to seconds + + if elapsed_time < 60: + return 0.0 + + # Calculate throughput + inventory = state.get('inventory', Inventory({})) + iron_plates = inventory.get('iron-plate', 0) + throughput = iron_plates / elapsed_time + + return throughput + + def is_complete(self, state): + """Check if target throughput is achieved""" + throughput = self.evaluate(state) + return throughput >= self.target + + def get_reward(self, state): + """Calculate reward based on throughput""" + throughput = self.evaluate(state) + if throughput >= self.target: + return 1.0 + else: + return throughput / self.target + +Testing Tasks +-------------- + +Create test cases for your custom tasks: + +.. code-block:: python + + import pytest + from fle.eval.tasks.my_custom_task import MyCustomTask + + def test_task_creation(): + config = { + 'target': 16, + 'time_limit': 3600 + } + task = MyCustomTask(config) + assert task.target == 16 + assert task.time_limit == 3600 + + def test_task_evaluation(): + config = {'target': 16} + task = MyCustomTask(config) + + # Mock state + state = { + 'inventory': Inventory({'iron-plate': 100}), + 'game_info': {'tick': 3600} + } + + throughput = task.evaluate(state) + assert throughput > 0 + + def test_task_completion(): + config = {'target': 16} + task = MyCustomTask(config) + + # Mock state with high throughput + state = { + 'inventory': Inventory({'iron-plate': 1000}), + 'game_info': {'tick': 3600} + } + + assert task.is_complete(state) + +Advanced Features +---------------- + +**Multi-Agent Tasks** + Tasks that require coordination between multiple agents + +**Dynamic Tasks** + Tasks that change objectives during execution + +**Hierarchical Tasks** + Tasks with sub-objectives and dependencies + +**Adaptive Tasks** + Tasks that adjust difficulty based on agent performance + +Best Practices +-------------- + +1. **Clear Objectives**: Define clear, measurable objectives +2. **Appropriate Difficulty**: Balance challenge with achievability +3. **Robust Evaluation**: Handle edge cases and error conditions +4. **Comprehensive Testing**: Test all task scenarios +5. **Documentation**: Document task requirements and constraints +6. **Performance**: Optimize evaluation for large-scale experiments diff --git a/docs/sphinx/source/customization/tools.rst b/docs/sphinx/source/customization/tools.rst new file mode 100644 index 000000000..edb30acbd --- /dev/null +++ b/docs/sphinx/source/customization/tools.rst @@ -0,0 +1,335 @@ +Creating Custom Tools +===================== + +FLE allows you to create custom tools for extending agent capabilities. Tools provide a narrow API into the game and enable agents to perform specific actions. + +Tool Architecture +----------------- + +Tools require 3 files: + +1. **agent.md**: Documentation for the agent +2. **client.py**: Client-side Python implementation +3. **server.lua**: Server-side Lua implementation + +Tool Structure +-------------- + +Create a new directory in `fle/env/tools/agent/`: + +.. code-block:: bash + + mkdir fle/env/tools/agent/my_tool + cd fle/env/tools/agent/my_tool + +**client.py** - Client-side implementation: + +.. code-block:: python + + from fle.env.tools.base import Tool + from typing import List, Optional + + class MyTool(Tool): + def __call__(self, param1: str, param2: int, param3: Optional[bool] = None) -> dict: + """ + My custom tool for doing something useful. + + Args: + param1: Description of param1 + param2: Description of param2 + param3: Optional parameter + + Returns: + Dictionary with results + """ + return self.execute({ + 'param1': param1, + 'param2': param2, + 'param3': param3 + }) + +**server.lua** - Server-side implementation: + +.. code-block:: lua + + global.actions.my_tool = function(param1, param2, param3) + -- Validate parameters + if not param1 or type(param1) ~= "string" then + return {error = "param1 must be a string"} + end + + if not param2 or type(param2) ~= "number" then + return {error = "param2 must be a number"} + end + + -- Perform the action + local result = {} + + -- Your custom logic here + -- Use Factorio API: https://lua-api.factorio.com/1.1.110/ + + return result + end + +**agent.md** - Agent documentation: + +.. code-block:: markdown + + # My Tool + + ## Overview + My custom tool for doing something useful in the game. + + ## Parameters + - `param1` (str): Description of param1 + - `param2` (int): Description of param2 + - `param3` (bool, optional): Optional parameter + + ## Returns + Dictionary with results including: + - `success` (bool): Whether the action succeeded + - `data` (dict): Additional data + + ## Examples + + ```python + # Basic usage + result = my_tool("value1", 42) + print(result['success']) + + # With optional parameter + result = my_tool("value1", 42, True) + ``` + + ## Best Practices + - Always check the return value for success + - Handle errors gracefully + - Use appropriate parameter types + + ## Failure Modes + - Invalid parameter types + - Game state conflicts + - Resource limitations + +Tool Development Process +------------------------ + +1. **Design the Interface** + - Define parameters and return types + - Consider error handling + - Plan for edge cases + +2. **Implement Client Side** + - Create Python class inheriting from Tool + - Implement __call__ method with type hints + - Call self.execute() with parameters + +3. **Implement Server Side** + - Create Lua function in global.actions + - Validate parameters + - Use Factorio API to perform actions + - Return structured results + +4. **Write Documentation** + - Document parameters and return values + - Provide usage examples + - Describe failure modes + - Include best practices + +5. **Test the Tool** + - Create test cases + - Verify error handling + - Test edge cases + - Validate performance + +Example Tool: Resource Scanner +------------------------------ + +Here's a complete example of a custom tool for scanning resources: + +**client.py**: + +.. code-block:: python + + from fle.env.tools.base import Tool + from typing import List, Dict, Optional + from fle.env.game_types import Position + + class ResourceScanner(Tool): + def __call__(self, center: Position, radius: int = 100, resource_type: Optional[str] = None) -> Dict: + """ + Scan for resources in a circular area. + + Args: + center: Center position for scanning + radius: Scan radius in tiles + resource_type: Specific resource type to scan for (optional) + + Returns: + Dictionary with scan results + """ + return self.execute({ + 'center': center, + 'radius': radius, + 'resource_type': resource_type + }) + +**server.lua**: + +.. code-block:: lua + + global.actions.resource_scanner = function(center, radius, resource_type) + -- Validate parameters + if not center or not center.x or not center.y then + return {error = "center must be a position with x and y"} + end + + if not radius or type(radius) ~= "number" or radius <= 0 then + return {error = "radius must be a positive number"} + end + + -- Get surface + local surface = game.surfaces[1] + if not surface then + return {error = "No surface available"} + end + + -- Scan for resources + local resources = {} + local center_pos = {x = center.x, y = center.y} + + for _, entity in pairs(surface.find_entities_filtered{ + area = {{center_pos.x - radius, center_pos.y - radius}, + {center_pos.x + radius, center_pos.y + radius}}, + type = "resource" + }) do + if not resource_type or entity.name == resource_type then + table.insert(resources, { + name = entity.name, + position = {x = entity.position.x, y = entity.position.y}, + amount = entity.amount + }) + end + end + + return { + success = true, + resources = resources, + count = #resources + } + end + +**agent.md**: + +.. code-block:: markdown + + # Resource Scanner + + ## Overview + Scans for resources in a circular area around a center position. + + ## Parameters + - `center` (Position): Center position for scanning + - `radius` (int): Scan radius in tiles (default: 100) + - `resource_type` (str, optional): Specific resource type to scan for + + ## Returns + Dictionary with: + - `success` (bool): Whether the scan succeeded + - `resources` (list): List of found resources + - `count` (int): Number of resources found + + ## Examples + + ```python + # Scan all resources in area + result = resource_scanner(Position(0, 0), 200) + print(f"Found {result['count']} resources") + + # Scan for specific resource + result = resource_scanner(Position(0, 0), 100, "iron-ore") + for resource in result['resources']: + print(f"{resource['name']} at {resource['position']}") + ``` + + ## Best Practices + - Use appropriate radius for your needs + - Filter by resource type when possible + - Handle empty results gracefully + + ## Failure Modes + - Invalid position coordinates + - Negative or zero radius + - Surface not available + - Resource type not found + +Testing Tools +-------------- + +Create test cases for your custom tools: + +.. code-block:: python + + import pytest + from fle.env.tools.agent.my_tool import MyTool + from fle.env.game_types import Position + + def test_tool_creation(): + tool = MyTool() + assert tool is not None + + def test_tool_execution(): + tool = MyTool() + result = tool("test", 42, True) + assert 'success' in result + + def test_tool_error_handling(): + tool = MyTool() + result = tool("", -1) # Invalid parameters + assert 'error' in result + + def test_tool_with_position(): + tool = MyTool() + position = Position(10, 20) + result = tool("test", 42, position=position) + assert result['success'] + +Tool Registration +----------------- + +Tools are automatically discovered and registered: + +1. **File Discovery**: The system scans `fle/env/tools/agent/` +2. **Import Loading**: Python classes are imported +3. **Lua Loading**: Server-side functions are loaded +4. **Documentation**: Agent documentation is parsed +5. **Registration**: Tools are made available to agents + +Advanced Features +---------------- + +**Tool Dependencies** + Tools can depend on other tools + +**Tool Caching** + Cache expensive operations + +**Tool Validation** + Validate tool usage and parameters + +**Tool Metrics** + Collect usage statistics + +**Tool Versioning** + Handle tool updates and compatibility + +Best Practices +-------------- + +1. **Clear Interface**: Design simple, intuitive interfaces +2. **Error Handling**: Provide meaningful error messages +3. **Documentation**: Write comprehensive documentation +4. **Testing**: Test all scenarios and edge cases +5. **Performance**: Optimize for efficiency +6. **Compatibility**: Ensure backward compatibility +7. **Security**: Validate all inputs and outputs diff --git a/docs/sphinx/source/examples/basic_agent.rst b/docs/sphinx/source/examples/basic_agent.rst new file mode 100644 index 000000000..4cb57aa84 --- /dev/null +++ b/docs/sphinx/source/examples/basic_agent.rst @@ -0,0 +1,336 @@ +Basic Agent Example +=================== + +This example demonstrates how to create a basic agent that interacts with the Factorio Learning Environment. + +Agent Overview +-------------- + +The basic agent performs simple resource collection and automation tasks: + +1. **Resource Discovery**: Find and identify available resources +2. **Mining Setup**: Place mining drills on resource patches +3. **Storage Management**: Create storage for collected resources +4. **Automation**: Set up basic automation chains + +Agent Implementation +-------------------- + +.. code-block:: python + + from fle.agents.agent_abc import Agent + from fle.env.gym_env.action import Action + from fle.env.game_types import Position, Direction + from typing import Dict, Any, List + + class BasicAgent(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "BasicAgent" + self.target_resources = ['iron-ore', 'copper-ore', 'coal'] + self.mining_setups = [] + self.step_count = 0 + + def act(self, observation: Dict[str, Any]) -> Action: + """Generate action based on current observation""" + self.step_count += 1 + + # Get current state + entities = observation.get('entities', []) + inventory = observation.get('inventory', {}) + game_info = observation.get('game_info', {}) + + # Generate action code + if self.step_count == 1: + code = self._initial_setup() + elif self.step_count <= 10: + code = self._setup_mining() + else: + code = self._monitor_and_optimize(entities, inventory) + + return Action( + agent_idx=0, + code=code, + game_state=None + ) + + def _initial_setup(self) -> str: + """Initial setup and exploration""" + return ''' + # Initial setup and exploration + print("Starting BasicAgent exploration") + + # Get current position + position = get_position() + print(f"Starting position: {position}") + + # Explore the area + entities = get_entities() + print(f"Found {len(entities)} entities") + + # Look for resources + iron_pos = nearest(Resource.IRON_ORE) + copper_pos = nearest(Resource.COPPER_ORE) + coal_pos = nearest(Resource.COAL) + + print(f"Iron ore at: {iron_pos}") + print(f"Copper ore at: {copper_pos}") + print(f"Coal at: {coal_pos}") + ''' + + def _setup_mining(self) -> str: + """Set up mining operations""" + return ''' + # Set up mining operations + print("Setting up mining operations") + + # Find and place mining drills + iron_pos = nearest(Resource.IRON_ORE) + if iron_pos: + drill = place_entity( + entity=Prototype.MiningDrill, + position=iron_pos, + direction=Direction.NORTH + ) + print(f"Placed mining drill at {iron_pos}") + + # Add storage chest + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + print(f"Placed chest at {chest.position}") + + # Check inventory + inventory = inspect_inventory() + print(f"Current inventory: {inventory}") + ''' + + def _monitor_and_optimize(self, entities: List, inventory: Dict) -> str: + """Monitor and optimize operations""" + return ''' + # Monitor and optimize operations + print("Monitoring operations") + + # Check all entities + entities = get_entities() + working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] + print(f"Working entities: {len(working_entities)}") + + # Check inventory + inventory = inspect_inventory() + total_items = sum(inventory.values()) + print(f"Total items in inventory: {total_items}") + + # Print detailed inventory + for item, count in inventory.items(): + if count > 0: + print(f" {item}: {count}") + + # Check for any issues + for entity in entities: + if hasattr(entity, 'status') and entity.status == EntityStatus.NO_POWER: + print(f"Entity {entity.name} needs power") + elif hasattr(entity, 'status') and entity.status == EntityStatus.NO_FUEL: + print(f"Entity {entity.name} needs fuel") + ''' + +Running the Agent +----------------- + +**Environment Setup** + .. code-block:: python + + import gym + from fle.agents.basic_agent import BasicAgent + + # Create environment + env = gym.make("iron_ore_throughput") + + # Create agent + agent = BasicAgent({}) + + # Run episode + obs = env.reset() + done = False + step = 0 + + while not done and step < 100: + action = agent.act(obs) + obs, reward, terminated, truncated, info = env.step(action) + done = terminated or truncated + step += 1 + print(f"Step {step}: Reward = {reward}") + + env.close() + +**Command Line Usage** + .. code-block:: bash + + # Run basic agent evaluation + fle eval --agent basic_agent --config configs/basic_agent_config.json + +Agent Configuration +------------------- + +**Basic Configuration** + .. code-block:: json + + { + "agent_type": "BasicAgent", + "config": { + "target_resources": ["iron-ore", "copper-ore", "coal"], + "max_mining_setups": 5, + "monitoring_interval": 10 + }, + "evaluation": { + "episodes": 5, + "max_steps": 1000, + "success_threshold": 0.5 + } + } + +**Advanced Configuration** + .. code-block:: json + + { + "agent_type": "BasicAgent", + "config": { + "target_resources": ["iron-ore", "copper-ore", "coal", "stone"], + "max_mining_setups": 10, + "monitoring_interval": 5, + "optimization_enabled": true, + "debug_mode": true + }, + "evaluation": { + "episodes": 10, + "max_steps": 2000, + "success_threshold": 0.8, + "metrics": ["throughput", "efficiency", "resource_utilization"] + } + } + +Agent Behavior +-------------- + +**Phase 1: Exploration (Steps 1-5)** + - Explore the starting area + - Identify available resources + - Plan mining operations + +**Phase 2: Setup (Steps 6-15)** + - Place mining drills on resource patches + - Create storage chests + - Set up basic automation + +**Phase 3: Monitoring (Steps 16+)** + - Monitor entity status + - Check inventory levels + - Optimize operations + +Example Output +-------------- + +**Step 1: Initial Setup** + .. code-block:: + + Starting BasicAgent exploration + Starting position: Position(x=0.0, y=0.0) + Found 0 entities + Iron ore at: Position(x=-28.0, y=-61.0) + Copper ore at: Position(x=45.0, y=-30.0) + Coal at: Position(x=-15.0, y=20.0) + +**Step 5: Mining Setup** + .. code-block:: + + Setting up mining operations + Placed mining drill at Position(x=-28.0, y=-61.0) + Placed chest at Position(x=-27.5, y=-59.5) + Current inventory: {'iron-ore': 0, 'coal': 4} + +**Step 20: Monitoring** + .. code-block:: + + Monitoring operations + Working entities: 1 + Total items in inventory: 75 + iron-ore: 75 + coal: 4 + +Performance Metrics +------------------- + +**Throughput** + - Items produced per minute + - Resource utilization efficiency + - Automation chain performance + +**Efficiency** + - Power consumption per item + - Entity utilization rate + - Resource waste minimization + +**Reliability** + - System uptime + - Error rate + - Recovery time + +Example Metrics +~~~~~~~~~~~~~~~ + +.. code-block:: python + + { + "throughput": { + "iron_ore": 2.5, # items per minute + "copper_ore": 1.8, + "coal": 3.2 + }, + "efficiency": { + "power_usage": 0.8, # normalized power usage + "entity_utilization": 0.75, # fraction of entities working + "resource_waste": 0.05 # fraction of resources wasted + }, + "reliability": { + "uptime": 0.95, # fraction of time system is working + "error_rate": 0.02, # errors per step + "recovery_time": 5.0 # average recovery time in steps + } + } + +Troubleshooting +--------------- + +**Common Issues** + - **No resources found**: Check map generation and resource placement + - **Mining drills not working**: Verify power and fuel supply + - **Inventory full**: Add more storage or optimize collection + +**Debug Mode** + Enable debug mode for detailed logging: + + .. code-block:: json + + { + "config": { + "debug_mode": true, + "log_level": "DEBUG" + } + } + +**Performance Issues** + - Monitor entity count and performance + - Check for resource bottlenecks + - Optimize automation chains + +Best Practices +-------------- + +1. **Start Simple**: Begin with basic operations +2. **Monitor Progress**: Track performance metrics +3. **Handle Errors**: Implement error recovery +4. **Optimize Gradually**: Improve efficiency over time +5. **Test Thoroughly**: Validate all scenarios +6. **Document Behavior**: Record agent decisions diff --git a/docs/sphinx/source/examples/multiagent.rst b/docs/sphinx/source/examples/multiagent.rst new file mode 100644 index 000000000..4d813e7dd --- /dev/null +++ b/docs/sphinx/source/examples/multiagent.rst @@ -0,0 +1,565 @@ +Multi-Agent Example +=================== + +This example demonstrates how to create and coordinate multiple agents in the Factorio Learning Environment. + +Multi-Agent Overview +------------------- + +Multi-agent systems in FLE enable: + +1. **Agent Coordination**: Multiple agents working together +2. **Task Distribution**: Dividing tasks among agents +3. **Communication**: Inter-agent message passing +4. **Collaborative Planning**: Joint decision making + +Agent Architecture +------------------ + +**Agent Roles** + - **Coordinator**: Manages overall strategy + - **Resource Specialist**: Handles resource collection + - **Construction Specialist**: Manages building operations + - **Research Specialist**: Handles technology advancement + +**Communication Protocol** + - Message passing between agents + - Shared state information + - Task assignment and reporting + - Conflict resolution + +Multi-Agent Implementation +------------------------- + +.. code-block:: python + + from fle.agents.agent_abc import Agent + from fle.env.gym_env.action import Action + from fle.env.game_types import Position, Direction + from typing import Dict, Any, List + import json + + class MultiAgentCoordinator(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "MultiAgentCoordinator" + self.agent_count = config.get('agent_count', 3) + self.agents = self._initialize_agents(config) + self.shared_state = {} + self.task_queue = [] + self.step_count = 0 + + def _initialize_agents(self, config: Dict[str, Any]) -> List[Agent]: + """Initialize specialized agents""" + agents = [] + + # Resource specialist + agents.append(ResourceSpecialist({ + 'role': 'resource_specialist', + 'target_resources': ['iron-ore', 'copper-ore', 'coal'] + })) + + # Construction specialist + agents.append(ConstructionSpecialist({ + 'role': 'construction_specialist', + 'building_types': ['assembling-machine', 'furnace', 'lab'] + })) + + # Research specialist + agents.append(ResearchSpecialist({ + 'role': 'research_specialist', + 'research_priorities': ['automation', 'logistics', 'production'] + })) + + return agents + + def act(self, observation: Dict[str, Any]) -> Action: + """Coordinate multi-agent actions""" + self.step_count += 1 + + # Get messages from other agents + messages = observation.get('messages', []) + + # Process messages and update shared state + self._process_messages(messages) + + # Coordinate agent actions + if self.step_count == 1: + code = self._initial_coordination() + elif self.step_count <= 20: + code = self._task_distribution() + else: + code = self._monitoring_and_optimization() + + return Action( + agent_idx=0, + code=code, + game_state=None + ) + + def _process_messages(self, messages: List[Dict[str, Any]]): + """Process messages from other agents""" + for message in messages: + if message['type'] == 'task_completion': + self._handle_task_completion(message) + elif message['type'] == 'resource_request': + self._handle_resource_request(message) + elif message['type'] == 'coordination_request': + self._handle_coordination_request(message) + + def _initial_coordination(self) -> str: + """Initial coordination and planning""" + return ''' + # Initial multi-agent coordination + print("Starting multi-agent coordination") + + # Send initial messages to all agents + send_message({ + 'type': 'coordination_start', + 'content': 'Beginning multi-agent coordination', + 'target_agents': 'all' + }) + + # Analyze current state + entities = get_entities() + inventory = inspect_inventory() + + print(f"Current state: {len(entities)} entities, {sum(inventory.values())} items") + + # Plan initial tasks + tasks = [ + {'type': 'resource_collection', 'priority': 'high', 'agent': 'resource_specialist'}, + {'type': 'basic_setup', 'priority': 'medium', 'agent': 'construction_specialist'}, + {'type': 'research_planning', 'priority': 'low', 'agent': 'research_specialist'} + ] + + print(f"Planned tasks: {tasks}") + ''' + + def _task_distribution(self) -> str: + """Distribute tasks among agents""" + return ''' + # Task distribution and coordination + print("Distributing tasks among agents") + + # Check for available resources + iron_pos = nearest(Resource.IRON_ORE) + copper_pos = nearest(Resource.COPPER_ORE) + + if iron_pos: + # Assign resource collection task + send_message({ + 'type': 'task_assignment', + 'content': { + 'task': 'collect_iron_ore', + 'location': str(iron_pos), + 'priority': 'high' + }, + 'target_agents': ['resource_specialist'] + }) + + if copper_pos: + # Assign copper collection task + send_message({ + 'type': 'task_assignment', + 'content': { + 'task': 'collect_copper_ore', + 'location': str(copper_pos), + 'priority': 'medium' + }, + 'target_agents': ['resource_specialist'] + }) + + # Check construction needs + entities = get_entities() + if len(entities) < 5: + send_message({ + 'type': 'task_assignment', + 'content': { + 'task': 'build_infrastructure', + 'requirements': ['mining_drill', 'chest', 'furnace'], + 'priority': 'high' + }, + 'target_agents': ['construction_specialist'] + }) + ''' + + def _monitoring_and_optimization(self) -> str: + """Monitor and optimize multi-agent operations""" + return ''' + # Multi-agent monitoring and optimization + print("Monitoring multi-agent operations") + + # Check agent status + entities = get_entities() + inventory = inspect_inventory() + + print(f"Current state: {len(entities)} entities, {sum(inventory.values())} items") + + # Check for coordination issues + working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] + print(f"Working entities: {len(working_entities)}") + + # Send status updates + send_message({ + 'type': 'status_update', + 'content': { + 'entities': len(entities), + 'inventory': sum(inventory.values()), + 'working_entities': len(working_entities) + }, + 'target_agents': 'all' + }) + + # Check for optimization opportunities + if len(working_entities) < len(entities) * 0.8: + send_message({ + 'type': 'optimization_request', + 'content': 'System efficiency below 80%', + 'target_agents': 'all' + }) + ''' + +Specialized Agents +------------------ + +**Resource Specialist** + .. code-block:: python + + class ResourceSpecialist(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "ResourceSpecialist" + self.target_resources = config.get('target_resources', []) + self.mining_setups = [] + + def act(self, observation: Dict[str, Any]) -> Action: + """Handle resource collection tasks""" + messages = observation.get('messages', []) + + # Process task assignments + for message in messages: + if message['type'] == 'task_assignment': + task = message['content'] + if task['task'].startswith('collect_'): + return self._handle_collection_task(task) + + # Default resource collection behavior + return self._default_resource_behavior() + + def _handle_collection_task(self, task: Dict[str, Any]) -> Action: + """Handle specific collection tasks""" + resource_type = task['task'].split('_')[1] + location = task.get('location') + + code = f''' + # Handle collection task: {task['task']} + print("Resource specialist handling collection task") + + # Find and collect {resource_type} + resource_pos = nearest(Resource.{resource_type.upper().replace('-', '_')}) + if resource_pos: + drill = place_entity( + entity=Prototype.MiningDrill, + position=resource_pos, + direction=Direction.NORTH + ) + print(f"Placed mining drill for {resource_type} at {resource_pos}") + + # Report task completion + send_message({{ + 'type': 'task_completion', + 'content': {{ + 'task': '{task['task']}', + 'status': 'completed', + 'location': str(resource_pos) + }}, + 'target_agents': ['coordinator'] + }}) + ''' + + return Action(agent_idx=1, code=code, game_state=None) + +**Construction Specialist** + .. code-block:: python + + class ConstructionSpecialist(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "ConstructionSpecialist" + self.building_types = config.get('building_types', []) + self.construction_queue = [] + + def act(self, observation: Dict[str, Any]) -> Action: + """Handle construction tasks""" + messages = observation.get('messages', []) + + # Process construction requests + for message in messages: + if message['type'] == 'task_assignment': + task = message['content'] + if task['task'] == 'build_infrastructure': + return self._handle_infrastructure_task(task) + + # Default construction behavior + return self._default_construction_behavior() + + def _handle_infrastructure_task(self, task: Dict[str, Any]) -> Action: + """Handle infrastructure construction""" + requirements = task.get('requirements', []) + + code = f''' + # Handle infrastructure construction + print("Construction specialist building infrastructure") + + # Build required entities + entities = get_entities() + current_types = [e.name for e in entities] + + for requirement in {requirements}: + if requirement not in current_types: + # Build the required entity + if requirement == 'mining_drill': + resource_pos = nearest(Resource.IRON_ORE) + if resource_pos: + drill = place_entity( + entity=Prototype.MiningDrill, + position=resource_pos, + direction=Direction.NORTH + ) + print(f"Built {requirement} at {resource_pos}") + + elif requirement == 'chest': + # Place chest near existing entities + if entities: + reference = entities[0] + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=reference.position, + direction=Direction.SOUTH + ) + print(f"Built {requirement} at {chest.position}") + + # Report construction completion + send_message({{ + 'type': 'task_completion', + 'content': {{ + 'task': 'build_infrastructure', + 'status': 'completed', + 'entities_built': len(get_entities()) + }}, + 'target_agents': ['coordinator'] + }}) + ''' + + return Action(agent_idx=2, code=code, game_state=None) + +**Research Specialist** + .. code-block:: python + + class ResearchSpecialist(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "ResearchSpecialist" + self.research_priorities = config.get('research_priorities', []) + self.research_queue = [] + + def act(self, observation: Dict[str, Any]) -> Action: + """Handle research tasks""" + messages = observation.get('messages', []) + + # Process research requests + for message in messages: + if message['type'] == 'task_assignment': + task = message['content'] + if task['task'] == 'research_planning': + return self._handle_research_planning(task) + + # Default research behavior + return self._default_research_behavior() + + def _handle_research_planning(self, task: Dict[str, Any]) -> Action: + """Handle research planning tasks""" + code = ''' + # Handle research planning + print("Research specialist planning research") + + # Check current research status + research = get_research_progress() + print(f"Current research: {research}") + + # Plan research priorities + priorities = ['automation', 'logistics', 'production'] + for priority in priorities: + if priority not in research.get('completed', []): + # Start research + result = set_research(priority) + if result: + print(f"Started research: {priority}") + break + + # Report research status + send_message({ + 'type': 'task_completion', + 'content': { + 'task': 'research_planning', + 'status': 'completed', + 'research_started': priority + }, + 'target_agents': ['coordinator'] + }) + ''' + + return Action(agent_idx=3, code=code, game_state=None) + +Running Multi-Agent Systems +--------------------------- + +**Environment Setup** + .. code-block:: python + + import gym + from fle.agents.multiagent_coordinator import MultiAgentCoordinator + + # Create environment + env = gym.make("iron_ore_throughput") + + # Create multi-agent coordinator + coordinator = MultiAgentCoordinator({ + 'agent_count': 3, + 'coordination_enabled': True, + 'communication_enabled': True + }) + + # Run episode + obs = env.reset() + done = False + step = 0 + + while not done and step < 100: + action = coordinator.act(obs) + obs, reward, terminated, truncated, info = env.step(action) + done = terminated or truncated + step += 1 + print(f"Step {step}: Reward = {reward}") + + env.close() + +**Command Line Usage** + .. code-block:: bash + + # Run multi-agent evaluation + fle eval --agent multiagent_coordinator --config configs/multiagent_config.json + +Multi-Agent Configuration +------------------------- + +**Basic Configuration** + .. code-block:: json + + { + "agent_type": "MultiAgentCoordinator", + "config": { + "agent_count": 3, + "coordination_enabled": true, + "communication_enabled": true, + "task_distribution": "round_robin" + }, + "evaluation": { + "episodes": 5, + "max_steps": 1000, + "success_threshold": 0.7 + } + } + +**Advanced Configuration** + .. code-block:: json + + { + "agent_type": "MultiAgentCoordinator", + "config": { + "agent_count": 5, + "coordination_enabled": true, + "communication_enabled": true, + "task_distribution": "priority_based", + "conflict_resolution": "voting", + "shared_state_size": 1000, + "message_timeout": 30 + }, + "evaluation": { + "episodes": 10, + "max_steps": 2000, + "success_threshold": 0.8, + "metrics": ["coordination_effectiveness", "communication_efficiency", "task_completion_rate"] + } + } + +Performance Metrics +------------------- + +**Coordination Effectiveness** + - Task completion rate + - Coordination efficiency + - Conflict resolution success + +**Communication Efficiency** + - Message delivery rate + - Communication latency + - Message processing time + +**Multi-Agent Performance** + - Overall system performance + - Agent specialization effectiveness + - Collaborative planning success + +Example Metrics +~~~~~~~~~~~~~~~ + +.. code-block:: python + + { + "coordination_effectiveness": { + "task_completion_rate": 0.85, # fraction of tasks completed + "coordination_efficiency": 0.75, # fraction of coordinated actions + "conflict_resolution_success": 0.90 # fraction of conflicts resolved + }, + "communication_efficiency": { + "message_delivery_rate": 0.95, # fraction of messages delivered + "communication_latency": 0.1, # average latency in seconds + "message_processing_time": 0.05 # average processing time in seconds + }, + "multi_agent_performance": { + "overall_system_performance": 0.80, # overall system effectiveness + "agent_specialization_effectiveness": 0.85, # effectiveness of specialization + "collaborative_planning_success": 0.70 # success rate of collaborative plans + } + } + +Troubleshooting +--------------- + +**Coordination Issues** + - **Task conflicts**: Implement conflict resolution + - **Communication failures**: Check message delivery + - **Coordination breakdown**: Monitor coordination effectiveness + +**Performance Issues** + - **Slow coordination**: Optimize coordination algorithms + - **High communication overhead**: Reduce message frequency + - **Memory issues**: Limit shared state size + +**Agent Issues** + - **Agent failures**: Implement agent recovery + - **Specialization problems**: Adjust agent roles + - **Communication errors**: Handle message errors + +Best Practices +-------------- + +1. **Clear Roles**: Define clear agent roles and responsibilities +2. **Effective Communication**: Implement efficient communication protocols +3. **Conflict Resolution**: Handle conflicts between agents +4. **Performance Monitoring**: Monitor multi-agent performance +5. **Scalability**: Design for different numbers of agents +6. **Error Handling**: Implement robust error recovery +7. **Testing**: Test multi-agent coordination thoroughly diff --git a/docs/sphinx/source/examples/visual_agent.rst b/docs/sphinx/source/examples/visual_agent.rst new file mode 100644 index 000000000..70cb5ae8b --- /dev/null +++ b/docs/sphinx/source/examples/visual_agent.rst @@ -0,0 +1,450 @@ +Visual Agent Example +==================== + +This example demonstrates how to create a visual agent that processes visual information from the game environment. + +Agent Overview +-------------- + +The visual agent uses computer vision techniques to: + +1. **Image Processing**: Analyze game screenshots and map images +2. **Object Detection**: Identify entities and resources in the visual data +3. **Spatial Reasoning**: Understand spatial relationships between objects +4. **Visual Planning**: Plan actions based on visual information + +Agent Implementation +-------------------- + +.. code-block:: python + + from fle.agents.agent_abc import Agent + from fle.env.gym_env.action import Action + from fle.env.game_types import Position, Direction + from typing import Dict, Any, List + import base64 + import io + from PIL import Image + import numpy as np + + class VisualAgent(Agent): + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.name = "VisualAgent" + self.vision_enabled = config.get('vision_enabled', True) + self.image_processing = config.get('image_processing', True) + self.spatial_reasoning = config.get('spatial_reasoning', True) + self.visual_memory = {} + self.step_count = 0 + + def act(self, observation: Dict[str, Any]) -> Action: + """Generate action based on visual observation""" + self.step_count += 1 + + # Get visual information + map_image = observation.get('map_image', '') + entities = observation.get('entities', []) + inventory = observation.get('inventory', {}) + + # Process visual information + if self.vision_enabled and map_image: + visual_analysis = self._analyze_visual_data(map_image) + else: + visual_analysis = {} + + # Generate action based on visual analysis + if self.step_count == 1: + code = self._initial_visual_exploration(visual_analysis) + elif self.step_count <= 10: + code = self._visual_setup(visual_analysis, entities) + else: + code = self._visual_monitoring(visual_analysis, entities, inventory) + + return Action( + agent_idx=0, + code=code, + game_state=None + ) + + def _analyze_visual_data(self, map_image: str) -> Dict[str, Any]: + """Analyze visual data from map image""" + try: + # Decode base64 image + image_data = base64.b64decode(map_image) + image = Image.open(io.BytesIO(image_data)) + + # Convert to numpy array + img_array = np.array(image) + + # Perform visual analysis + analysis = { + 'image_size': image.size, + 'image_mode': image.mode, + 'dominant_colors': self._extract_dominant_colors(img_array), + 'entity_locations': self._detect_entities(img_array), + 'resource_patches': self._detect_resource_patches(img_array), + 'spatial_features': self._extract_spatial_features(img_array) + } + + return analysis + + except Exception as e: + print(f"Visual analysis error: {e}") + return {} + + def _extract_dominant_colors(self, img_array: np.ndarray) -> List[tuple]: + """Extract dominant colors from image""" + # Reshape image to 2D array of pixels + pixels = img_array.reshape(-1, img_array.shape[-1]) + + # Simple color extraction (in practice, use more sophisticated methods) + unique_colors = np.unique(pixels, axis=0) + return unique_colors[:10].tolist() # Return top 10 colors + + def _detect_entities(self, img_array: np.ndarray) -> List[Dict[str, Any]]: + """Detect entities in the image""" + # Simple entity detection (in practice, use computer vision models) + entities = [] + + # Look for specific color patterns that might indicate entities + # This is a simplified example + for y in range(0, img_array.shape[0], 10): + for x in range(0, img_array.shape[1], 10): + pixel = img_array[y, x] + if self._is_entity_pixel(pixel): + entities.append({ + 'position': (x, y), + 'type': self._classify_entity(pixel), + 'confidence': 0.8 + }) + + return entities + + def _detect_resource_patches(self, img_array: np.ndarray) -> List[Dict[str, Any]]: + """Detect resource patches in the image""" + resource_patches = [] + + # Look for resource-specific color patterns + for y in range(0, img_array.shape[0], 20): + for x in range(0, img_array.shape[1], 20): + region = img_array[y:y+20, x:x+20] + if self._is_resource_region(region): + resource_patches.append({ + 'position': (x, y), + 'type': self._classify_resource(region), + 'size': self._estimate_resource_size(region) + }) + + return resource_patches + + def _extract_spatial_features(self, img_array: np.ndarray) -> Dict[str, Any]: + """Extract spatial features from the image""" + return { + 'image_center': (img_array.shape[1] // 2, img_array.shape[0] // 2), + 'image_bounds': (0, 0, img_array.shape[1], img_array.shape[0]), + 'density_map': self._calculate_density_map(img_array), + 'connectivity': self._analyze_connectivity(img_array) + } + + def _initial_visual_exploration(self, visual_analysis: Dict[str, Any]) -> str: + """Initial visual exploration""" + return f''' + # Initial visual exploration + print("Starting VisualAgent exploration") + + # Analyze visual data + visual_analysis = {visual_analysis} + print(f"Visual analysis: {visual_analysis}") + + # Get current position + position = get_position() + print(f"Starting position: {{position}}") + + # Look for resources using visual analysis + if visual_analysis.get('resource_patches'): + for patch in visual_analysis['resource_patches']: + print(f"Found resource patch: {{patch['type']}} at {{patch['position']}}") + + # Look for entities using visual analysis + if visual_analysis.get('entity_locations'): + for entity in visual_analysis['entity_locations']: + print(f"Found entity: {{entity['type']}} at {{entity['position']}}") + ''' + + def _visual_setup(self, visual_analysis: Dict[str, Any], entities: List) -> str: + """Set up operations based on visual analysis""" + return ''' + # Visual-based setup + print("Setting up operations based on visual analysis") + + # Find resources using visual cues + iron_pos = nearest(Resource.IRON_ORE) + copper_pos = nearest(Resource.COPPER_ORE) + + if iron_pos: + # Place mining drill with visual guidance + drill = place_entity( + entity=Prototype.MiningDrill, + position=iron_pos, + direction=Direction.NORTH + ) + print(f"Placed mining drill at {iron_pos} based on visual analysis") + + # Add storage with visual positioning + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + print(f"Placed chest at {chest.position}") + + # Check visual feedback + entities = get_entities() + print(f"Current entities: {len(entities)}") + ''' + + def _visual_monitoring(self, visual_analysis: Dict[str, Any], entities: List, inventory: Dict) -> str: + """Monitor operations using visual feedback""" + return ''' + # Visual monitoring + print("Monitoring operations with visual feedback") + + # Check entities + entities = get_entities() + working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] + print(f"Working entities: {len(working_entities)}") + + # Check inventory + inventory = inspect_inventory() + total_items = sum(inventory.values()) + print(f"Total items: {total_items}") + + # Visual analysis feedback + if visual_analysis: + print(f"Visual analysis: {visual_analysis}") + if 'spatial_features' in visual_analysis: + features = visual_analysis['spatial_features'] + print(f"Spatial features: {features}") + ''' + +Visual Processing Features +-------------------------- + +**Image Analysis** + - Dominant color extraction + - Entity detection and classification + - Resource patch identification + - Spatial feature extraction + +**Computer Vision Techniques** + - Edge detection + - Color segmentation + - Object recognition + - Spatial reasoning + +**Visual Memory** + - Store visual information across steps + - Track changes in visual data + - Maintain spatial maps + +Example Visual Analysis +----------------------- + +**Input Image** + Base64 encoded PNG image of the game map + +**Output Analysis** + .. code-block:: python + + { + 'image_size': (1024, 1024), + 'image_mode': 'RGB', + 'dominant_colors': [ + [0, 0, 0], # Black (background) + [139, 69, 19], # Brown (dirt) + [128, 128, 128], # Gray (stone) + [255, 215, 0] # Gold (resources) + ], + 'entity_locations': [ + { + 'position': (512, 256), + 'type': 'mining_drill', + 'confidence': 0.9 + }, + { + 'position': (520, 264), + 'type': 'chest', + 'confidence': 0.8 + } + ], + 'resource_patches': [ + { + 'position': (100, 200), + 'type': 'iron_ore', + 'size': 'large' + }, + { + 'position': (300, 400), + 'type': 'copper_ore', + 'size': 'medium' + } + ], + 'spatial_features': { + 'image_center': (512, 512), + 'image_bounds': (0, 0, 1024, 1024), + 'density_map': {...}, + 'connectivity': {...} + } + } + +Running the Visual Agent +----------------------- + +**Environment Setup** + .. code-block:: python + + import gym + from fle.agents.visual_agent import VisualAgent + + # Create environment + env = gym.make("iron_ore_throughput") + + # Create visual agent + agent = VisualAgent({ + 'vision_enabled': True, + 'image_processing': True, + 'spatial_reasoning': True + }) + + # Run episode + obs = env.reset() + done = False + step = 0 + + while not done and step < 100: + action = agent.act(obs) + obs, reward, terminated, truncated, info = env.step(action) + done = terminated or truncated + step += 1 + print(f"Step {step}: Reward = {reward}") + + env.close() + +**Command Line Usage** + .. code-block:: bash + + # Run visual agent evaluation + fle eval --agent visual_agent --config configs/visual_agent_config.json + +Agent Configuration +------------------- + +**Basic Configuration** + .. code-block:: json + + { + "agent_type": "VisualAgent", + "config": { + "vision_enabled": true, + "image_processing": true, + "spatial_reasoning": true, + "visual_memory_size": 100 + }, + "evaluation": { + "episodes": 5, + "max_steps": 1000, + "success_threshold": 0.6 + } + } + +**Advanced Configuration** + .. code-block:: json + + { + "agent_type": "VisualAgent", + "config": { + "vision_enabled": true, + "image_processing": true, + "spatial_reasoning": true, + "visual_memory_size": 1000, + "computer_vision_model": "resnet50", + "object_detection_threshold": 0.7, + "spatial_analysis_depth": 3 + }, + "evaluation": { + "episodes": 10, + "max_steps": 2000, + "success_threshold": 0.8, + "metrics": ["visual_accuracy", "spatial_reasoning", "object_detection"] + } + } + +Performance Metrics +------------------- + +**Visual Accuracy** + - Object detection accuracy + - Resource identification accuracy + - Spatial reasoning accuracy + +**Processing Performance** + - Image processing time + - Memory usage + - CPU utilization + +**Visual Reasoning** + - Spatial relationship understanding + - Object interaction prediction + - Visual planning effectiveness + +Example Metrics +~~~~~~~~~~~~~~~ + +.. code-block:: python + + { + "visual_accuracy": { + "object_detection": 0.85, # fraction of objects correctly identified + "resource_identification": 0.90, # fraction of resources correctly identified + "spatial_reasoning": 0.75 # fraction of spatial relationships correctly understood + }, + "processing_performance": { + "image_processing_time": 0.1, # seconds per image + "memory_usage": 512, # MB + "cpu_utilization": 0.3 # fraction of CPU used + }, + "visual_reasoning": { + "spatial_understanding": 0.80, # fraction of spatial relationships understood + "object_interaction_prediction": 0.70, # fraction of interactions correctly predicted + "visual_planning_effectiveness": 0.65 # fraction of visual plans that succeed + } + } + +Troubleshooting +--------------- + +**Visual Processing Issues** + - **Poor image quality**: Check image resolution and format + - **Detection failures**: Adjust detection thresholds + - **Memory issues**: Reduce visual memory size + +**Performance Issues** + - **Slow processing**: Optimize image processing algorithms + - **High memory usage**: Implement image compression + - **CPU bottlenecks**: Use parallel processing + +**Accuracy Issues** + - **False positives**: Adjust detection thresholds + - **Missed objects**: Improve detection algorithms + - **Spatial errors**: Enhance spatial reasoning + +Best Practices +-------------- + +1. **Image Quality**: Ensure high-quality input images +2. **Detection Thresholds**: Tune detection parameters +3. **Memory Management**: Monitor and optimize memory usage +4. **Performance Optimization**: Use efficient algorithms +5. **Error Handling**: Implement robust error recovery +6. **Visual Memory**: Maintain useful visual information +7. **Spatial Reasoning**: Develop strong spatial understanding diff --git a/docs/sphinx/source/getting_started/cluster.rst b/docs/sphinx/source/getting_started/cluster.rst new file mode 100644 index 000000000..b935eb8c1 --- /dev/null +++ b/docs/sphinx/source/getting_started/cluster.rst @@ -0,0 +1,91 @@ +Cluster Setup +============= + +FLE uses Docker to run Factorio servers in a cluster configuration. This allows for scalable evaluation of agents across multiple game instances. + +Starting a Cluster +----------------- + +.. code-block:: bash + + # Start Factorio cluster + fle cluster start + +This command will: + +- Start Docker containers running Factorio servers +- Configure networking between containers +- Set up the evaluation environment +- Create necessary directories and configurations + +Cluster Management +------------------ + +The cluster system provides several management commands: + +.. code-block:: bash + + # Check cluster status + fle cluster status + + # Stop the cluster + fle cluster stop + + # Restart the cluster + fle cluster restart + +Configuration +------------- + +Cluster configuration is managed through: + +- `.env` file: Environment variables for cluster setup +- `configs/` directory: Configuration files for different scenarios +- Docker Compose: Container orchestration + +The cluster automatically creates these files on first run. + +Scenarios +--------- + +FLE supports different game scenarios: + +- **Lab-play**: 24 structured tasks with fixed resources +- **Open-play**: An unbounded task of building the largest possible factory on a procedurally generated map + +Each scenario can be configured with different parameters: + +- Map generation settings +- Resource availability +- Technology research requirements +- Time limits and objectives + +Troubleshooting +-------------- + +**Docker Issues** + - Ensure your user has permission to run Docker without sudo + - Check that Docker is running: `docker ps` + - Verify available disk space and memory + +**Connection Issues** + - Make sure the Factorio server is running and ports are properly configured + - Check firewall settings for required ports + - Verify network connectivity between containers + +**Resource Issues** + - Monitor Docker resource usage: `docker stats` + - Adjust memory limits if needed + - Check available disk space for game saves + +Advanced Configuration +---------------------- + +For advanced users, you can customize: + +- Container resource limits +- Network configurations +- Volume mounts for persistent data +- Custom Factorio mods and scenarios + +See the :doc:`customization guide <../customization/tasks>` for more details. diff --git a/docs/sphinx/source/getting_started/installation.rst b/docs/sphinx/source/getting_started/installation.rst new file mode 100644 index 000000000..123d4df10 --- /dev/null +++ b/docs/sphinx/source/getting_started/installation.rst @@ -0,0 +1,98 @@ +Installation +============ + +Prerequisites +------------- + +- Docker +- Python 3.10+ +- `Factorio `_ (version 1.1.110), only for optional rendering + +Installation +------------ + +Core FLE SDK package: + +.. code-block:: bash + + pip install factorio-learning-environment + uv add factorio-learning-environment + +With optional features: + +.. code-block:: bash + + # For running experiments + pip install factorio-learning-environment[eval] + + # For MCP protocol support + pip install factorio-learning-environment[mcp] + + # For PostgreSQL support + pip install factorio-learning-environment[psql] + + # All features + pip install factorio-learning-environment[eval,mcp,psql] + +Using uv (recommended): + +.. code-block:: bash + + uv add factorio-learning-environment[eval] + +Client-side Setup (Optional) +---------------------------- + +For rendering graphics, set up the Factorio client: + +1. **Set up Factorio client**: + - Purchase Factorio from the `official website `_ (recommended) or on Steam. + - Downgrade to version 1.1.110: + - Steam: Right-click Factorio → Properties → Betas → Select 1.1.110 + - **Important**: Make sure to uncheck the Space Age DLC if you have it, as it forces the 2.x branch + +2. **Activate server**: + - Open Factorio client + - Navigate to _Multiplayer_ + - Connect to `localhost:34197` (default) or your configured address in Docker. + - Once connected, you can safely disconnect. This step confirms your Factorio license with the server. + +API Key Configuration +--------------------- + +FLE supports multiple LLM providers for agent evaluation. To get started with API keys: + +1. **Quick Setup** (Recommended): + .. code-block:: bash + + python fle/eval/infra/setup_api_keys.py + + This interactive script helps you: + - Configure API keys for OpenAI, Anthropic, and other providers + - Set up API key rotation for high-volume experiments + - Generate provider-specific configuration files + - Validate your API key setup + +2. **Manual Setup**: + Add your API keys to the `.env` file: + .. code-block:: bash + + # OpenAI + OPENAI_API_KEY=sk-... + + # Anthropic + ANTHROPIC_API_KEY=sk-ant-... + + # Additional providers as needed + +3. **Advanced Configuration**: + For large-scale experiments, you can set up API key rotation and provider-specific settings using the configuration files generated by `setup_api_keys.py`. + +Troubleshooting +--------------- + +- **"No valid programs found for version X"**: This is normal during initialization. The system will start generating programs shortly. +- **Database connection errors**: Verify your database configuration in the .env file and ensure the database exists. +- **API key errors**: Run `python fle/eval/infra/setup_api_keys.py` to verify your API key configuration. +- **Docker issues**: Ensure your user has permission to run Docker without sudo. +- **Connection issues**: Make sure the Factorio server is running and ports are properly configured. diff --git a/docs/sphinx/source/getting_started/quickstart.rst b/docs/sphinx/source/getting_started/quickstart.rst new file mode 100644 index 000000000..7d92a180a --- /dev/null +++ b/docs/sphinx/source/getting_started/quickstart.rst @@ -0,0 +1,102 @@ +Quickstart +========== + +Use the CLI: + +.. code-block:: bash + + # Start Factorio cluster + fle cluster start + + # Run evaluation trajectories (requires [eval] dependencies) + fle eval --config configs/gym_run_config.json + +.. note:: + When you run `fle init` or `fle eval` for the first time, an `.env` file and a `configs/` directory with example configurations are created automatically + +Environment Overview +-------------------- + +FLE is an agent evaluation environment built on the game of Factorio, a popular resource management simulation game. + +Agents interact with **FLE** by code synthesis through a **REPL** (Read-Eval-Print-Loop) pattern: + +1. **Observation**: The agent observes the world through the output streams (stderr/stdout) of their last program. +2. **Action**: The agent generates a Python program to perform their desired action. +3. **Feedback**: The environment executes the program, assigns variables, add classes/functions to the namespace, and provides an output stream. + +Example Interaction +------------------ + +.. code-block:: python + + # 1. Get iron patch and place mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(Resource.IronOre), + direction=Direction.NORTH + ) + # 2. Add output storage + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + # 3. Verify automation chain and observe entities + sleep(10) # Sleep for 10 seconds + assert drill.status == EntityStatus.WORKING + print(get_entities()) + +**Feedback:** + +.. code-block:: python + + >>> [ BurnerMiningDrill(fuel=Inventory({'coal': 4}), + >>> name='burner-mining-drill', + >>> direction=Direction.DOWN, + >>> position=Position(x=-28.0, y=-61.0), + >>> energy=2666.6666666667, + >>> tile_dimensions=TileDimensions(tile_width=2.0, tile_height=2.0), + >>> status=EntityStatus.WORKING, + >>> neighbours=[Entity(name='iron-chest', direction=DOWN, position=Position(x=-27.5 y=-59.5)], + >>> drop_position=Position(x=-27.5, y=-59.5), + >>> resources=[Ingredient(name='iron-ore', count=30000, type=None)]), + >>> Chest(name='iron-chest', + >>> direction=Direction.UP, + >>> position=Position(x=-27.5, y=-59.5), + >>> energy=0.0, + >>> tile_dimensions=TileDimensions(tile_width=1.0, tile_height=1.0), + >>> status=EntityStatus.NORMAL, + >>> inventory=Inventory({'iron-ore': 75}))] + +Key Concepts +------------ + +**Tools and Namespace** + Agents are provided with the Python standard library, and an API comprising :doc:`tools <../api/tools>` that they can use. + + Tools are functions that perform a game action and return a typed object (e.g an Inventory), which can be stored as a named **variable** in the Python namespace for later use. + + The namespace acts as an episodic symbolic memory system, and saved objects represent an observation of the environment at the moment of query. + + This enables agents to maintain complex state representations and build hierarchical abstractions as the factories scale. + +**Observation Streams** + Agents observe **stdout** and **stderr** - the output streams of their program. Agents may intentionally choose to print relevant objects and computations to the output stream to construct observations. + + Mistakes in the code or invalid operations raise typed **exceptions** with detailed context that is written to stderr. + + This enables agents to reactively debug their programs after execution, and proactively use runtime assertions during execution to self-verify their actions. + +**Code Enhancement** + Agents are able to enhance their internal representation of the game state by defining: + + 1. Utility functions for reuse throughout an episode, to encapsulate previously successful logic + 2. Classes in the namespace to better organize the data retrieved from the game. + +Next Steps +---------- + +- Learn about the :doc:`environment API <../api/environment>` +- Explore available :doc:`tools <../api/tools>` +- See :doc:`examples <../examples/basic_agent>` of agent implementations diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst new file mode 100644 index 000000000..da4bfdd74 --- /dev/null +++ b/docs/sphinx/source/index.rst @@ -0,0 +1,52 @@ +Welcome to Factorio Learning Environment's documentation! +================================================================ + +An open source framework for developing and evaluating LLM agents in the game of Factorio. + +.. toctree:: + :maxdepth: 2 + :caption: Getting Started + + getting_started/installation + getting_started/quickstart + getting_started/cluster + +.. toctree:: + :maxdepth: 2 + :caption: API Reference + + api/environment + api/observation + api/action + api/tools + api/modules + +.. toctree:: + :maxdepth: 2 + :caption: Customization + + customization/tasks + customization/tools + customization/agents + customization/database + +.. toctree:: + :maxdepth: 2 + :caption: Examples + + examples/basic_agent + examples/visual_agent + examples/multiagent + +.. toctree:: + :maxdepth: 2 + :caption: Tools + + tools/index + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/sphinx/source/tools/extract_item.rst b/docs/sphinx/source/tools/extract_item.rst new file mode 100644 index 000000000..9e5d0d21f --- /dev/null +++ b/docs/sphinx/source/tools/extract_item.rst @@ -0,0 +1,98 @@ +extract_item +============ + +Removes items from entity inventories. + +Overview +-------- + +The `extract_item` tool allows agents to remove items from entity inventories and transfer them to the player's inventory. + +Parameters +---------- + +**entity** (Entity) + The entity to extract items from. + +**item** (str) + The name of the item to extract. + +**count** (int, optional) + The number of items to extract. Defaults to 1. + +Returns +------- + +Dictionary containing: + +- **success** (bool): Whether the extraction succeeded +- **extracted_count** (int): Number of items actually extracted +- **entity** (Entity): The updated entity +- **error** (str): Error message (if failed) + +Examples +-------- + +**Basic Usage** + .. code-block:: python + + # Extract iron ore from a chest + result = extract_item( + entity=chest, + item='iron-ore', + count=10 + ) + + if result.get('success'): + print(f"Extracted {result.get('extracted_count')} iron ore") + else: + print(f"Error: {result.get('error')}") + +**Extract All Items** + .. code-block:: python + + # Extract all items from an entity + inventory = inspect_inventory(entity=chest) + for item, count in inventory.items(): + if count > 0: + result = extract_item( + entity=chest, + item=item, + count=count + ) + + if result.get('success'): + print(f"Extracted {result.get('extracted_count')} {item}") + +Best Practices +-------------- + +1. **Check Entity Contents**: Verify the entity has the items to extract +2. **Handle Partial Extractions**: Account for cases where not all items can be extracted +3. **Monitor Player Inventory**: Track player inventory changes +4. **Use Appropriate Counts**: Don't extract more items than available + +Failure Modes +------------- + +**Invalid Entity** + - **Error**: "Entity does not support item extraction" + - **Cause**: Entity type doesn't support inventory + - **Solution**: Check entity type before extraction + +**Item Not Available** + - **Error**: "Item not available in entity inventory" + - **Cause**: Entity doesn't have the required item + - **Solution**: Check entity inventory before extraction + +**Player Inventory Full** + - **Error**: "Player inventory is full" + - **Cause**: Player cannot accept more items + - **Solution**: Clear player inventory or use storage + +Related Tools +------------- + +- :doc:`inspect_inventory` - Check inventory contents +- :doc:`insert_item` - Add items to entities +- :doc:`get_entities` - Find entities with storage diff --git a/docs/sphinx/source/tools/index.rst b/docs/sphinx/source/tools/index.rst new file mode 100644 index 000000000..3d3e1edc0 --- /dev/null +++ b/docs/sphinx/source/tools/index.rst @@ -0,0 +1,209 @@ +Tools Documentation +=================== + +This section contains detailed documentation for all available tools in the Factorio Learning Environment. + +Tool Categories +--------------- + +**Inventory Management** + Tools for managing inventories and items + +**Entity Management** + Tools for placing, removing, and managing entities + +**Entity Queries** + Tools for finding and inspecting entities + +**Resource Management** + Tools for resource collection and management + +**Connection Management** + Tools for creating connections between entities + +**Crafting and Research** + Tools for crafting items and managing research + +**Movement and Control** + Tools for player movement and game control + +**Debugging and Output** + Tools for debugging and output + +Core Tools +---------- + +Inventory Management +~~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/inspect_inventory + tools/insert_item + tools/extract_item + +Entity Management +~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/place_entity + tools/place_entity_next_to + tools/pickup_entity + tools/rotate_entity + +Entity Queries +~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/get_entity + tools/get_entities + tools/nearest + tools/nearest_buildable + +Resource Management +~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/get_resource_patch + tools/harvest_resource + +Connection Management +~~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/connect_entities + tools/get_connection_amount + +Crafting and Research +~~~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/set_entity_recipe + tools/get_prototype_recipe + tools/craft_item + tools/set_research + tools/get_research_progress + +Movement and Control +~~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/move_to + tools/sleep + tools/launch_rocket + +Debugging and Output +~~~~~~~~~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 1 + + tools/print + +Tool Usage Patterns +------------------- + +**Basic Usage** + Most tools follow a simple pattern: + + .. code-block:: python + + # Get information + result = tool_name(parameters) + + # Check result + if result.get('success'): + # Use the result + data = result.get('data') + else: + # Handle error + error = result.get('error') + +**Error Handling** + All tools return structured results with error information: + + .. code-block:: python + + result = place_entity( + entity=Prototype.MiningDrill, + position=Position(10, 20), + direction=Direction.NORTH + ) + + if result.get('success'): + entity = result.get('entity') + print(f"Placed entity: {entity}") + else: + error = result.get('error') + print(f"Error: {error}") + +**Chaining Operations** + Tools can be chained together for complex operations: + + .. code-block:: python + + # Place a mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(Resource.IronOre), + direction=Direction.NORTH + ) + + # Place a chest next to it + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + + # Connect them + connect_entities(drill, chest) + +Best Practices +-------------- + +1. **Check Results**: Always check tool return values +2. **Handle Errors**: Implement proper error handling +3. **Use Type Hints**: Leverage type information for better code +4. **Chain Operations**: Combine tools for complex tasks +5. **Monitor Performance**: Track tool usage and performance +6. **Document Usage**: Document tool usage patterns +7. **Test Thoroughly**: Test all tool combinations + +Tool Development +---------------- + +**Creating Custom Tools** + See the :doc:`customization guide <../customization/tools>` for information on creating custom tools. + +**Tool Testing** + Test tools thoroughly with various scenarios: + + - Valid inputs + - Invalid inputs + - Edge cases + - Error conditions + - Performance scenarios + +**Tool Documentation** + Document tools with: + + - Clear descriptions + - Parameter specifications + - Return value documentation + - Usage examples + - Best practices + - Failure modes diff --git a/docs/sphinx/source/tools/insert_item.rst b/docs/sphinx/source/tools/insert_item.rst new file mode 100644 index 000000000..324873580 --- /dev/null +++ b/docs/sphinx/source/tools/insert_item.rst @@ -0,0 +1,101 @@ +insert_item +=========== + +Places items from player inventory into entities. + +Overview +-------- + +The `insert_item` tool allows agents to transfer items from their inventory into entity inventories such as chests, furnaces, and other storage containers. + +Parameters +---------- + +**entity** (Entity) + The entity to insert items into. + +**item** (str) + The name of the item to insert. + +**count** (int, optional) + The number of items to insert. Defaults to 1. + +Returns +------- + +Dictionary containing: + +- **success** (bool): Whether the insertion succeeded +- **inserted_count** (int): Number of items actually inserted +- **entity** (Entity): The updated entity +- **error** (str): Error message (if failed) + +Examples +-------- + +**Basic Usage** + .. code-block:: python + + # Insert iron ore into a chest + result = insert_item( + entity=chest, + item='iron-ore', + count=10 + ) + + if result.get('success'): + print(f"Inserted {result.get('inserted_count')} iron ore") + else: + print(f"Error: {result.get('error')}") + +**Insert Multiple Items** + .. code-block:: python + + # Insert different items into a furnace + items_to_insert = [ + {'item': 'iron-ore', 'count': 50}, + {'item': 'coal', 'count': 10} + ] + + for item_data in items_to_insert: + result = insert_item( + entity=furnace, + item=item_data['item'], + count=item_data['count'] + ) + + if result.get('success'): + print(f"Inserted {result.get('inserted_count')} {item_data['item']}") + +Best Practices +-------------- + +1. **Check Entity Type**: Ensure the entity supports item insertion +2. **Verify Item Compatibility**: Check that the item can be inserted into the entity +3. **Handle Partial Insertions**: Account for cases where not all items can be inserted +4. **Monitor Inventory**: Track inventory changes after insertion + +Failure Modes +------------- + +**Invalid Entity** + - **Error**: "Entity does not support item insertion" + - **Cause**: Entity type doesn't support inventory + - **Solution**: Check entity type before insertion + +**Item Not Available** + - **Error**: "Item not available in player inventory" + - **Cause**: Player doesn't have the required item + - **Solution**: Check player inventory before insertion + +**Entity Full** + - **Error**: "Entity inventory is full" + - **Cause**: Entity cannot accept more items + - **Solution**: Check entity capacity or use different entity + +Related Tools +------------- + +- :doc:`inspect_inventory` - Check inventory contents +- :doc:`extract_item` - Remove items from entities +- :doc:`get_entities` - Find entities with storage diff --git a/docs/sphinx/source/tools/inspect_inventory.rst b/docs/sphinx/source/tools/inspect_inventory.rst new file mode 100644 index 000000000..132a7cad0 --- /dev/null +++ b/docs/sphinx/source/tools/inspect_inventory.rst @@ -0,0 +1,153 @@ +inspect_inventory +================= + +Checks contents of player or entity inventories. + +Overview +-------- + +The `inspect_inventory` tool allows agents to examine the contents of inventories. It supports various inventory types including player inventories, chests, furnaces, and other entities with storage capabilities. + +Parameters +---------- + +**entity** (Entity, optional) + The entity whose inventory to inspect. If not provided, inspects the player's inventory. + +**inventory_type** (str, optional) + The type of inventory to inspect. Options: 'player', 'entity', 'all'. + +Returns +------- + +Dictionary containing: + +- **success** (bool): Whether the inspection succeeded +- **inventory** (Inventory): The inventory contents +- **entity** (Entity): The entity whose inventory was inspected (if applicable) +- **error** (str): Error message (if failed) + +Examples +-------- + +**Basic Usage** + .. code-block:: python + + # Inspect player inventory + result = inspect_inventory() + + if result.get('success'): + inventory = result.get('inventory') + print(f"Player inventory: {inventory}") + + # Check specific items + iron_ore = inventory.get('iron-ore', 0) + coal = inventory.get('coal', 0) + print(f"Iron ore: {iron_ore}, Coal: {coal}") + else: + print(f"Error: {result.get('error')}") + +**Entity Inventory** + .. code-block:: python + + # Inspect entity inventory + entities = get_entities() + for entity in entities: + if entity.name == 'iron-chest': + result = inspect_inventory(entity=entity) + + if result.get('success'): + inventory = result.get('inventory') + print(f"Chest inventory: {inventory}") + + # Check if chest is full + total_items = sum(inventory.values()) + if total_items > 0: + print(f"Chest contains {total_items} items") + break + +**Inventory Analysis** + .. code-block:: python + + # Analyze inventory contents + result = inspect_inventory() + + if result.get('success'): + inventory = result.get('inventory') + + # Count total items + total_items = sum(inventory.values()) + print(f"Total items: {total_items}") + + # List all items + for item, count in inventory.items(): + if count > 0: + print(f" {item}: {count}") + + # Check for specific resources + resources = ['iron-ore', 'copper-ore', 'coal', 'stone'] + for resource in resources: + count = inventory.get(resource, 0) + if count > 0: + print(f"Have {count} {resource}") + +**Inventory Filtering** + .. code-block:: python + + # Check for specific items + result = inspect_inventory() + + if result.get('success'): + inventory = result.get('inventory') + + # Check for mining equipment + mining_items = ['mining-drill', 'burner-mining-drill'] + for item in mining_items: + count = inventory.get(item, 0) + if count > 0: + print(f"Have {count} {item}") + + # Check for building materials + building_materials = ['iron-plate', 'copper-plate', 'stone'] + total_materials = sum(inventory.get(item, 0) for item in building_materials) + print(f"Total building materials: {total_materials}") + +Best Practices +-------------- + +1. **Check Success**: Always verify the inspection succeeded +2. **Handle Empty Inventories**: Account for empty inventories +3. **Use Inventory Methods**: Leverage inventory utility methods +4. **Monitor Changes**: Track inventory changes over time +5. **Error Handling**: Implement proper error handling + +Failure Modes +------------- + +**Invalid Entity** + - **Error**: "Entity does not have an inventory" + - **Cause**: Entity type doesn't support inventory + - **Solution**: Check entity type before inspection + +**Entity Not Found** + - **Error**: "Entity not found or no longer exists" + - **Cause**: Entity was removed or doesn't exist + - **Solution**: Verify entity exists before inspection + +**Permission Denied** + - **Error**: "Permission denied to inspect inventory" + - **Cause**: Insufficient permissions + - **Solution**: Check agent permissions + +**Network Error** + - **Error**: "Network error during inventory inspection" + - **Cause**: Communication failure with game server + - **Solution**: Retry the operation + +Related Tools +------------- + +- :doc:`insert_item` - Place items into inventories +- :doc:`extract_item` - Remove items from inventories +- :doc:`get_entities` - Find entities with inventories +- :doc:`place_entity` - Place entities with storage diff --git a/docs/sphinx/source/tools/place_entity.rst b/docs/sphinx/source/tools/place_entity.rst new file mode 100644 index 000000000..38162c9d1 --- /dev/null +++ b/docs/sphinx/source/tools/place_entity.rst @@ -0,0 +1,134 @@ +place_entity +============ + +Places entities in the world at specified positions. + +Overview +-------- + +The `place_entity` tool allows agents to place various entities in the game world. It handles placement validation, direction setting, and returns information about the placed entity. + +Parameters +---------- + +**entity** (Prototype) + The type of entity to place. Must be a valid Prototype enum value. + +**position** (Position) + The position where to place the entity. Must be a valid Position object. + +**direction** (Direction, optional) + The direction to orient the entity. Defaults to Direction.NORTH. + +Returns +------- + +Dictionary containing: + +- **success** (bool): Whether the placement succeeded +- **entity** (Entity): The placed entity object (if successful) +- **error** (str): Error message (if failed) + +Examples +-------- + +**Basic Usage** + .. code-block:: python + + # Place a mining drill + result = place_entity( + entity=Prototype.MiningDrill, + position=Position(10, 20), + direction=Direction.NORTH + ) + + if result.get('success'): + drill = result.get('entity') + print(f"Placed mining drill at {drill.position}") + else: + print(f"Error: {result.get('error')}") + +**With Resource Location** + .. code-block:: python + + # Find iron ore and place mining drill + iron_pos = nearest(Resource.IronOre) + if iron_pos: + result = place_entity( + entity=Prototype.MiningDrill, + position=iron_pos, + direction=Direction.NORTH + ) + + if result.get('success'): + drill = result.get('entity') + print(f"Placed mining drill on iron ore at {drill.position}") + +**Direction Examples** + .. code-block:: python + + # Place entities in different directions + drill_north = place_entity( + entity=Prototype.MiningDrill, + position=Position(0, 0), + direction=Direction.NORTH + ) + + drill_south = place_entity( + entity=Prototype.MiningDrill, + position=Position(10, 0), + direction=Direction.SOUTH + ) + + drill_east = place_entity( + entity=Prototype.MiningDrill, + position=Position(20, 0), + direction=Direction.EAST + ) + + drill_west = place_entity( + entity=Prototype.MiningDrill, + position=Position(30, 0), + direction=Direction.WEST + ) + +Best Practices +-------------- + +1. **Check Position Validity**: Ensure the position is valid for the entity type +2. **Handle Errors**: Always check the success flag and handle errors +3. **Use Appropriate Directions**: Choose directions that make sense for the entity +4. **Validate Resources**: Ensure required resources are available +5. **Monitor Placement**: Check that entities are placed correctly + +Failure Modes +------------- + +**Invalid Entity Type** + - **Error**: "Invalid entity type 'invalid'. Expected Prototype enum value." + - **Cause**: Using an invalid entity type + - **Solution**: Use valid Prototype enum values + +**Invalid Position** + - **Error**: "Position (x, y) is not valid for entity type" + - **Cause**: Position conflicts with existing entities or terrain + - **Solution**: Choose a different position or clear the area + +**Insufficient Resources** + - **Error**: "Insufficient resources to place entity" + - **Cause**: Not enough items in inventory + - **Solution**: Ensure required items are available + +**Invalid Direction** + - **Error**: "Invalid direction for entity type" + - **Cause**: Direction not supported by entity type + - **Solution**: Use supported directions for the entity + +Related Tools +------------- + +- :doc:`place_entity_next_to` - Place entities relative to others +- :doc:`pickup_entity` - Remove entities from the world +- :doc:`rotate_entity` - Change entity orientation +- :doc:`nearest` - Find nearest resources or entities +- :doc:`nearest_buildable` - Find valid building locations diff --git a/docs/versions/0.3.0.html b/docs/versions/0.3.0.html index 138fd6257..0dfbaa585 100644 --- a/docs/versions/0.3.0.html +++ b/docs/versions/0.3.0.html @@ -1849,6 +1849,35 @@

Horizon

+ +
+
+

Documentation

+ +

+ For comprehensive documentation, API reference, and guides, visit our Sphinx documentation: +

+ + + +

+ The documentation includes: +

+
    +
  • Getting Started - Installation, quickstart, and cluster setup
  • +
  • API Reference - Complete API documentation for all modules
  • +
  • Examples - Basic, visual, and multi-agent examples
  • +
  • Customization - Creating custom tasks, tools, and agents
  • +
  • Tools - Detailed documentation for all available tools
  • +
+
diff --git a/pyproject.toml b/pyproject.toml index f8440f92d..4c17da8e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,9 @@ dependencies = [ "a2a-sdk", # send_message tool + multiagent, "huggingface-hub>=0.35.3", "memoization>=0.4.0", + "sphinx>=8.1.3", + "sphinx-rtd-theme>=3.0.2", + "sphinx-autodoc-typehints>=3.0.1", ] [project.optional-dependencies] From abc66eb9babef8df174d1fc3cf695b063e6c70e1 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Fri, 17 Oct 2025 11:07:04 -0600 Subject: [PATCH 2/9] add docs dev workflow --- .github/workflows/docs-dev.yml | 34 ++++++++++++++++++++++++++++++++++ .github/workflows/docs.yml | 31 ++++++++++--------------------- docs/sphinx/build.sh | 18 ------------------ 3 files changed, 44 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/docs-dev.yml delete mode 100755 docs/sphinx/build.sh diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml new file mode 100644 index 000000000..3e400a43a --- /dev/null +++ b/.github/workflows/docs-dev.yml @@ -0,0 +1,34 @@ +name: Dev Documentation Build + +on: + workflow_dispatch: + +jobs: + build-docs: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints + pip install -e . + + - name: Build Sphinx documentation + run: | + cd docs/sphinx + sphinx-build -b html source build/html + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/sphinx/build/html + destination_dir: docs/sphinx diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 16d088271..4e58fdfd9 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,37 +2,26 @@ name: Build Documentation on: push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] + branches: [ main] jobs: build-docs: runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Install dependencies + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - name: Install dependencies run: | python -m pip install --upgrade pip pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints pip install -e . - - name: Build Sphinx documentation run: | cd docs/sphinx sphinx-build -b html source build/html - - - name: Deploy to GitHub Pages - if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/sphinx/build/html - destination_dir: sphinx + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/sphinx/build/html + destination_dir: docs/sphinx diff --git a/docs/sphinx/build.sh b/docs/sphinx/build.sh deleted file mode 100755 index 7648d0269..000000000 --- a/docs/sphinx/build.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Build Sphinx documentation -# This script builds the Sphinx documentation and outputs it to the build directory - -set -e - -echo "Building Sphinx documentation..." - -# Change to the docs/sphinx directory -cd "$(dirname "$0")" - -# Build the documentation -sphinx-build -b html source build/html - -echo "Documentation built successfully!" -echo "Output directory: $(pwd)/build/html" -echo "Open $(pwd)/build/html/index.html in your browser to view the documentation." From 7f05d1cc8c2230064bb083006142d162c6a778d9 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Fri, 17 Oct 2025 11:11:40 -0600 Subject: [PATCH 3/9] change branch name for github actions --- .github/workflows/docs-dev.yml | 3 ++- .github/workflows/docs.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml index 3e400a43a..2d99eda4f 100644 --- a/.github/workflows/docs-dev.yml +++ b/.github/workflows/docs-dev.yml @@ -1,7 +1,8 @@ name: Dev Documentation Build on: - workflow_dispatch: + push: + branches: [docs/sphinx-minedojo-style] jobs: build-docs: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 4e58fdfd9..04ddc5f72 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,7 +2,7 @@ name: Build Documentation on: push: - branches: [ main] + branches: [main] jobs: build-docs: From fc9087b63e3f82b4e7b66b8f305d33d94a1d2633 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Mon, 3 Nov 2025 07:09:36 -0700 Subject: [PATCH 4/9] remove the unnecessary GitHub action workflows, modify the gitignore so that the HTML is committed to the branch and change the copyright year to be automatic. Finally Add the installation instructions to the installational RST --- .github/workflows/docs-dev.yml | 35 ------------------- .github/workflows/docs.yml | 27 -------------- .gitignore | 1 + docs/sphinx/source/conf.py | 3 +- .../source/getting_started/installation.rst | 17 +++++++++ 5 files changed, 20 insertions(+), 63 deletions(-) delete mode 100644 .github/workflows/docs-dev.yml delete mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml deleted file mode 100644 index 2d99eda4f..000000000 --- a/.github/workflows/docs-dev.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Dev Documentation Build - -on: - push: - branches: [docs/sphinx-minedojo-style] - -jobs: - build-docs: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints - pip install -e . - - - name: Build Sphinx documentation - run: | - cd docs/sphinx - sphinx-build -b html source build/html - - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/sphinx/build/html - destination_dir: docs/sphinx diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 04ddc5f72..000000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Build Documentation - -on: - push: - branches: [main] - -jobs: - build-docs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints - pip install -e . - - name: Build Sphinx documentation - run: | - cd docs/sphinx - sphinx-build -b html source build/html - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/sphinx/build/html - destination_dir: docs/sphinx diff --git a/.gitignore b/.gitignore index 3de71a5f2..c03dfde51 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ uv.lock # Sphinx documentation build /docs/sphinx/build/ +!/docs/sphinx/build/html # Docker **/docker-compose.yml diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py index 8c7bac524..c78bdff16 100644 --- a/docs/sphinx/source/conf.py +++ b/docs/sphinx/source/conf.py @@ -12,12 +12,13 @@ # import os import sys +from datetime import datetime sys.path.insert(0, os.path.abspath('../../..')) # -- Project information ----------------------------------------------------- project = 'Factorio Learning Environment' -copyright = '2024, FLE Team' +copyright = f"{datetime.now().year}, FLE Team" author = 'FLE Team' release = '0.3.0' diff --git a/docs/sphinx/source/getting_started/installation.rst b/docs/sphinx/source/getting_started/installation.rst index 123d4df10..d36603543 100644 --- a/docs/sphinx/source/getting_started/installation.rst +++ b/docs/sphinx/source/getting_started/installation.rst @@ -96,3 +96,20 @@ Troubleshooting - **API key errors**: Run `python fle/eval/infra/setup_api_keys.py` to verify your API key configuration. - **Docker issues**: Ensure your user has permission to run Docker without sudo. - **Connection issues**: Make sure the Factorio server is running and ports are properly configured. + +Building Documentation (Maintainers) +------------------------------------ + +Install Sphinx tooling: + +.. code-block:: bash + + pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints + +Build the HTML documentation: + +.. code-block:: bash + + cd factorio-learning-environment/docs/sphinx && python -m sphinx -b html source build/html + +The generated site will be in ``docs/sphinx/build/html``. From 0fba73317dccea1ae68ae025eff2c83b9a983b9a Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Mon, 3 Nov 2025 07:27:32 -0700 Subject: [PATCH 5/9] leaning out the readme --- README.md | 43 ++----------------------------------------- 1 file changed, 2 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index bca2970d7..b350faa98 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

Factorio Learning Environment

- Leaderboard | Paper | Website| Discord (#factorio-learning-env) + Leaderboard | Paper | Website | Documentation | Discord (#factorio-learning-env)

@@ -13,20 +13,9 @@ An open source framework for developing and evaluating LLM agents in the game of

Claude Opus 4.1 Plays Factorio

-## Why FLE? - -We provide two settings: - -1. **Lab-play**: 24 structured tasks with fixed resources. -2. **Open-play** An unbounded task of building the largest possible factory on a procedurally generated map. - -Our results demonstrate that models still lack strong spatial reasoning. In lab-play, we find that while LLMs -exhibit promising short-horizon skills, they are unable to operate effectively in constrained environments, reflecting limitations in error analysis. In open-play, while LLMs discover automation strategies that improve growth (e.g electric-powered drilling), they fail to achieve complex automation (e.g electronic-circuit manufacturing). - ## Quick Links - [Installation](#installation) -- [Documentation](https://jackhopkins.github.io/factorio-learning-environment/sphinx/build/html/) - [Examples](#examples) - [Contributing](#contributing) @@ -38,12 +27,11 @@ exhibit promising short-horizon skills, they are unable to operate effectively i - Python 3.10+ - [Factorio](https://www.factorio.com/) (version 1.1.110), only for optional rendering. -### Installation +### Package ```bash # Core FLE SDK package pip install factorio-learning-environment -uv add factorio-learning-environment # With optional features pip install factorio-learning-environment[eval] # For running experiments @@ -67,8 +55,6 @@ fle cluster start fle eval --config configs/gym_run_config.json ``` -> When you run `fle init` or `fle eval` for the first time, an `.env` file and a `configs/` directory with example configurations are created automatically - ## Environment FLE is an agent evaluation environment built on the game of Factorio, a popular resource management simulation game. @@ -79,31 +65,6 @@ Agents interact with **FLE** by code synthesis through a **REPL** (Read-Eval-Pri 2. **Action**: The agent generates a Python program to perform their desired action. 3. **Feedback**: The environment executes the program, assigns variables, add classes/functions to the namespace, and provides an output stream. -## Examples - -```python -# 1. Get iron patch and place mining drill -drill = place_entity( - entity=Prototype.MiningDrill, - position=nearest(Resource.IronOre), - direction=Direction.NORTH -) -# 2. Add output storage -chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH -) -# 3. Verify automation chain and observe entities -sleep(10) # Sleep for 10 seconds -assert drill.status == EntityStatus.WORKING -print(get_entities()) -``` - -## Documentation - -For complete documentation, visit: https://jackhopkins.github.io/factorio-learning-environment/sphinx/build/html/ - ## Contributing Join our team and contribute to one of the AI research community's most challenging problems - building open-ended / unsaturateable evals for post-AGI frontier models. If you want to contribute, please read [CONTRIBUTING.md](CONTRIBUTING.md) first. From a95bb5dce2fa1739ca21a384740f1cf60f8b5e51 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Mon, 3 Nov 2025 08:27:07 -0700 Subject: [PATCH 6/9] commit docs --- .gitignore | 5 - README.md | 2 +- docs/sphinx/Makefile | 20 - docs/sphinx/build/html/.buildinfo | 4 + docs/sphinx/build/html/.buildinfo.bak | 4 + .../build/html/.doctrees/api/action.doctree | Bin 0 -> 47534 bytes .../html/.doctrees/api/environment.doctree | Bin 0 -> 79745 bytes .../build/html/.doctrees/api/modules.doctree | Bin 0 -> 4845 bytes .../api/modules/fle.agents.agent_abc.doctree | Bin 0 -> 2558 bytes .../api/modules/fle.agents.models.doctree | Bin 0 -> 49640 bytes .../api/modules/fle.commons.models.doctree | Bin 0 -> 260764 bytes .../api/modules/fle.env.entities.doctree | Bin 0 -> 813811 bytes .../api/modules/fle.env.game_types.doctree | Bin 0 -> 301611 bytes .../api/modules/fle.env.gym_env.doctree | Bin 0 -> 2805 bytes .../api/modules/fle.env.instance.doctree | Bin 0 -> 95073 bytes .../api/modules/fle.env.namespace.doctree | Bin 0 -> 36774 bytes .../api/modules/fle.eval.algorithms.doctree | Bin 0 -> 2916 bytes .../api/modules/fle.eval.tasks.doctree | Bin 0 -> 95250 bytes .../html/.doctrees/api/observation.doctree | Bin 0 -> 53490 bytes .../build/html/.doctrees/api/tools.doctree | Bin 0 -> 55577 bytes .../.doctrees/customization/agents.doctree | Bin 0 -> 47181 bytes .../.doctrees/customization/database.doctree | Bin 0 -> 48723 bytes .../.doctrees/customization/tasks.doctree | Bin 0 -> 34841 bytes .../.doctrees/customization/tools.doctree | Bin 0 -> 32719 bytes .../build/html/.doctrees/environment.pickle | Bin 0 -> 4585905 bytes .../.doctrees/examples/basic_agent.doctree | Bin 0 -> 38881 bytes .../.doctrees/examples/multiagent.doctree | Bin 0 -> 84384 bytes .../.doctrees/examples/visual_agent.doctree | Bin 0 -> 52547 bytes .../.doctrees/getting_started/cluster.doctree | Bin 0 -> 17972 bytes .../getting_started/installation.doctree | Bin 0 -> 20700 bytes .../getting_started/quickstart.doctree | Bin 0 -> 21067 bytes .../sphinx/build/html/.doctrees/index.doctree | Bin 0 -> 6136 bytes .../modules/env.a2a_instance.doctree | Bin 0 -> 2520 bytes .../modules/env.a2a_namespace.doctree | Bin 0 -> 2525 bytes .../build/html/.doctrees/modules/env.doctree | Bin 0 -> 3879 bytes .../.doctrees/modules/env.entities.doctree | Bin 0 -> 2498 bytes .../.doctrees/modules/env.game_types.doctree | Bin 0 -> 2510 bytes .../.doctrees/modules/env.instance.doctree | Bin 0 -> 2498 bytes .../.doctrees/modules/env.lua_manager.doctree | Bin 0 -> 2515 bytes .../.doctrees/modules/env.namespace.doctree | Bin 0 -> 2503 bytes .../modules/env.tools.controller.doctree | Bin 0 -> 2538 bytes .../html/.doctrees/modules/env.tools.doctree | Bin 0 -> 3384 bytes .../.doctrees/modules/env.tools.init.doctree | Bin 0 -> 2508 bytes .../.doctrees/modules/env.tools.tool.doctree | Bin 0 -> 2508 bytes .../html/.doctrees/tools/extract_item.doctree | Bin 0 -> 20465 bytes .../build/html/.doctrees/tools/index.doctree | Bin 0 -> 27341 bytes .../html/.doctrees/tools/insert_item.doctree | Bin 0 -> 20660 bytes .../.doctrees/tools/inspect_inventory.doctree | Bin 0 -> 28512 bytes .../html/.doctrees/tools/place_entity.doctree | Bin 0 -> 26452 bytes docs/sphinx/build/html/.nojekyll | 0 .../html/_modules/fle/agents/agent_abc.html | 878 ++++++ .../html/_modules/fle/agents/gym_agent.html | 983 ++++++ .../html/_modules/fle/agents/models.html | 805 +++++ .../html/_modules/fle/commons/db_client.html | 1791 +++++++++++ .../fle/commons/models/achievements.html | 225 ++ .../fle/commons/models/conversation.html | 183 ++ .../fle/commons/models/game_state.html | 418 +++ .../commons/models/generation_parameters.html | 145 + .../_modules/fle/commons/models/message.html | 140 + .../_modules/fle/commons/models/program.html | 226 ++ .../fle/commons/models/research_state.html | 146 + .../commons/models/serializable_function.html | 309 ++ .../fle/commons/models/technology_state.html | 147 + .../fle/commons/models/timing_metrics.html | 172 ++ .../build/html/_modules/fle/env/entities.html | 1114 +++++++ .../html/_modules/fle/env/game_types.html | 1162 +++++++ .../html/_modules/fle/env/gym_env/action.html | 782 +++++ .../_modules/fle/env/gym_env/observation.html | 1053 +++++++ .../build/html/_modules/fle/env/instance.html | 684 ++++ .../html/_modules/fle/env/namespace.html | 1954 ++++++++++++ .../independent/value_calculator.html | 907 ++++++ .../_modules/fle/eval/tasks/default_task.html | 182 ++ .../_modules/fle/eval/tasks/task_abc.html | 842 +++++ .../_modules/fle/eval/tasks/task_factory.html | 157 + .../fle/eval/tasks/throughput_task.html | 261 ++ .../eval/tasks/unbounded_throughput_task.html | 246 ++ docs/sphinx/build/html/_modules/index.html | 148 + .../build/html/_sources/api/action.rst.txt | 251 ++ .../html/_sources/api/environment.rst.txt | 128 + .../build/html/_sources/api/modules.rst.txt | 42 + .../api/modules/fle.agents.agent_abc.rst.txt | 7 + .../api/modules/fle.agents.models.rst.txt | 7 + .../api/modules/fle.commons.models.rst.txt | 7 + .../api/modules/fle.env.entities.rst.txt | 7 + .../api/modules/fle.env.game_types.rst.txt | 7 + .../api/modules/fle.env.gym_env.rst.txt | 7 + .../api/modules/fle.env.instance.rst.txt | 7 + .../api/modules/fle.env.namespace.rst.txt | 7 + .../api/modules/fle.eval.algorithms.rst.txt | 7 + .../api/modules/fle.eval.tasks.rst.txt | 7 + .../html/_sources/api/observation.rst.txt | 178 ++ .../build/html/_sources/api/tools.rst.txt | 276 ++ .../_sources/customization/agents.rst.txt | 331 ++ .../_sources/customization/database.rst.txt | 357 +++ .../html/_sources/customization/tasks.rst.txt | 276 ++ .../html/_sources/customization/tools.rst.txt | 335 ++ .../_sources/examples/basic_agent.rst.txt | 336 ++ .../html/_sources/examples/multiagent.rst.txt | 565 ++++ .../_sources/examples/visual_agent.rst.txt | 450 +++ .../_sources/getting_started/cluster.rst.txt | 91 + .../getting_started/installation.rst.txt | 116 + .../getting_started/quickstart.rst.txt | 102 + docs/sphinx/build/html/_sources/index.rst.txt | 52 + .../_sources/modules/env.a2a_instance.rst.txt | 7 + .../modules/env.a2a_namespace.rst.txt | 7 + .../_sources/modules/env.entities.rst.txt | 7 + .../_sources/modules/env.game_types.rst.txt | 7 + .../_sources/modules/env.instance.rst.txt | 7 + .../_sources/modules/env.lua_manager.rst.txt | 7 + .../_sources/modules/env.namespace.rst.txt | 7 + .../build/html/_sources/modules/env.rst.txt | 32 + .../modules/env.tools.controller.rst.txt | 7 + .../_sources/modules/env.tools.init.rst.txt | 7 + .../html/_sources/modules/env.tools.rst.txt | 20 + .../_sources/modules/env.tools.tool.rst.txt | 7 + .../html/_sources/tools/extract_item.rst.txt | 98 + .../build/html/_sources/tools/index.rst.txt | 209 ++ .../html/_sources/tools/insert_item.rst.txt | 101 + .../_sources/tools/inspect_inventory.rst.txt | 153 + .../html/_sources/tools/place_entity.rst.txt | 134 + .../_sphinx_javascript_frameworks_compat.js | 123 + docs/sphinx/build/html/_static/basic.css | 914 ++++++ .../build/html/_static/css/badge_only.css | 1 + .../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes .../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes .../css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes .../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 ++++++++++++++++ .../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes .../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes .../html/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes .../html/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes .../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes .../css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes .../html/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes .../html/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes docs/sphinx/build/html/_static/css/theme.css | 4 + docs/sphinx/build/html/_static/doctools.js | 149 + .../html/_static/documentation_options.js | 13 + docs/sphinx/build/html/_static/file.png | Bin 0 -> 286 bytes .../html/_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes .../html/_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes .../html/_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes .../html/_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes .../_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes .../_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes .../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes .../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes .../html/_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes .../html/_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes .../html/_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes .../html/_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes .../html/_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes .../html/_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes .../html/_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes .../_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes .../RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes .../RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes .../RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes .../RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes .../RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes docs/sphinx/build/html/_static/jquery.js | 2 + .../build/html/_static/js/badge_only.js | 1 + docs/sphinx/build/html/_static/js/theme.js | 1 + docs/sphinx/build/html/_static/js/versions.js | 228 ++ .../build/html/_static/language_data.js | 192 ++ docs/sphinx/build/html/_static/minus.png | Bin 0 -> 90 bytes docs/sphinx/build/html/_static/plus.png | Bin 0 -> 90 bytes docs/sphinx/build/html/_static/pygments.css | 75 + docs/sphinx/build/html/_static/searchtools.js | 632 ++++ .../build/html/_static/sphinx_highlight.js | 154 + docs/sphinx/build/html/api/action.html | 426 +++ docs/sphinx/build/html/api/environment.html | 404 +++ docs/sphinx/build/html/api/modules.html | 312 ++ .../api/modules/fle.agents.agent_abc.html | 147 + .../html/api/modules/fle.agents.models.html | 291 ++ .../html/api/modules/fle.commons.models.html | 877 ++++++ .../html/api/modules/fle.env.entities.html | 2742 +++++++++++++++++ .../html/api/modules/fle.env.game_types.html | 1243 ++++++++ .../html/api/modules/fle.env.gym_env.html | 150 + .../html/api/modules/fle.env.instance.html | 427 +++ .../html/api/modules/fle.env.namespace.html | 274 ++ .../html/api/modules/fle.eval.algorithms.html | 147 + .../html/api/modules/fle.eval.tasks.html | 411 +++ docs/sphinx/build/html/api/observation.html | 371 +++ docs/sphinx/build/html/api/tools.html | 413 +++ .../build/html/customization/agents.html | 489 +++ .../build/html/customization/database.html | 482 +++ .../build/html/customization/tasks.html | 410 +++ .../build/html/customization/tools.html | 456 +++ .../build/html/examples/basic_agent.html | 493 +++ .../build/html/examples/multiagent.html | 752 +++++ .../build/html/examples/visual_agent.html | 611 ++++ docs/sphinx/build/html/genindex.html | 2305 ++++++++++++++ .../build/html/getting_started/cluster.html | 232 ++ .../html/getting_started/installation.html | 257 ++ .../html/getting_started/quickstart.html | 233 ++ docs/sphinx/build/html/index.html | 344 +++ .../build/html/modules/env.a2a_instance.html | 758 +++++ .../build/html/modules/env.a2a_namespace.html | 758 +++++ .../build/html/modules/env.entities.html | 758 +++++ .../build/html/modules/env.game_types.html | 758 +++++ docs/sphinx/build/html/modules/env.html | 792 +++++ .../build/html/modules/env.instance.html | 758 +++++ .../build/html/modules/env.lua_manager.html | 758 +++++ .../build/html/modules/env.namespace.html | 758 +++++ .../html/modules/env.tools.controller.html | 758 +++++ docs/sphinx/build/html/modules/env.tools.html | 771 +++++ .../build/html/modules/env.tools.init.html | 758 +++++ .../build/html/modules/env.tools.tool.html | 758 +++++ docs/sphinx/build/html/objects.inv | Bin 0 -> 6764 bytes docs/sphinx/build/html/py-modindex.html | 192 ++ docs/sphinx/build/html/search.html | 147 + docs/sphinx/build/html/searchindex.js | 1 + .../sphinx/build/html/tools/extract_item.html | 231 ++ docs/sphinx/build/html/tools/index.html | 325 ++ docs/sphinx/build/html/tools/insert_item.html | 234 ++ .../build/html/tools/inspect_inventory.html | 286 ++ .../sphinx/build/html/tools/place_entity.html | 267 ++ docs/sphinx/requirements.txt | 3 - docs/sphinx/source/api/tools.rst | 28 +- .../source/getting_started/installation.rst | 13 +- pyproject.toml | 3 + 230 files changed, 52535 insertions(+), 65 deletions(-) delete mode 100644 docs/sphinx/Makefile create mode 100644 docs/sphinx/build/html/.buildinfo create mode 100644 docs/sphinx/build/html/.buildinfo.bak create mode 100644 docs/sphinx/build/html/.doctrees/api/action.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/environment.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.agents.agent_abc.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.agents.models.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.commons.models.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.env.entities.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.env.game_types.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.env.gym_env.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.env.instance.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.env.namespace.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.eval.algorithms.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/modules/fle.eval.tasks.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/observation.doctree create mode 100644 docs/sphinx/build/html/.doctrees/api/tools.doctree create mode 100644 docs/sphinx/build/html/.doctrees/customization/agents.doctree create mode 100644 docs/sphinx/build/html/.doctrees/customization/database.doctree create mode 100644 docs/sphinx/build/html/.doctrees/customization/tasks.doctree create mode 100644 docs/sphinx/build/html/.doctrees/customization/tools.doctree create mode 100644 docs/sphinx/build/html/.doctrees/environment.pickle create mode 100644 docs/sphinx/build/html/.doctrees/examples/basic_agent.doctree create mode 100644 docs/sphinx/build/html/.doctrees/examples/multiagent.doctree create mode 100644 docs/sphinx/build/html/.doctrees/examples/visual_agent.doctree create mode 100644 docs/sphinx/build/html/.doctrees/getting_started/cluster.doctree create mode 100644 docs/sphinx/build/html/.doctrees/getting_started/installation.doctree create mode 100644 docs/sphinx/build/html/.doctrees/getting_started/quickstart.doctree create mode 100644 docs/sphinx/build/html/.doctrees/index.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.a2a_instance.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.a2a_namespace.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.entities.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.game_types.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.instance.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.lua_manager.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.namespace.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.tools.controller.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.tools.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.tools.init.doctree create mode 100644 docs/sphinx/build/html/.doctrees/modules/env.tools.tool.doctree create mode 100644 docs/sphinx/build/html/.doctrees/tools/extract_item.doctree create mode 100644 docs/sphinx/build/html/.doctrees/tools/index.doctree create mode 100644 docs/sphinx/build/html/.doctrees/tools/insert_item.doctree create mode 100644 docs/sphinx/build/html/.doctrees/tools/inspect_inventory.doctree create mode 100644 docs/sphinx/build/html/.doctrees/tools/place_entity.doctree create mode 100644 docs/sphinx/build/html/.nojekyll create mode 100644 docs/sphinx/build/html/_modules/fle/agents/agent_abc.html create mode 100644 docs/sphinx/build/html/_modules/fle/agents/gym_agent.html create mode 100644 docs/sphinx/build/html/_modules/fle/agents/models.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/db_client.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/achievements.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/conversation.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/game_state.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/generation_parameters.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/message.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/program.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/research_state.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/serializable_function.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/technology_state.html create mode 100644 docs/sphinx/build/html/_modules/fle/commons/models/timing_metrics.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/entities.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/game_types.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/gym_env/action.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/gym_env/observation.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/instance.html create mode 100644 docs/sphinx/build/html/_modules/fle/env/namespace.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/algorithms/independent/value_calculator.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/tasks/default_task.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/tasks/task_abc.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/tasks/task_factory.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/tasks/throughput_task.html create mode 100644 docs/sphinx/build/html/_modules/fle/eval/tasks/unbounded_throughput_task.html create mode 100644 docs/sphinx/build/html/_modules/index.html create mode 100644 docs/sphinx/build/html/_sources/api/action.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/environment.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.agents.agent_abc.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.agents.models.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.commons.models.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.env.entities.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.env.game_types.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.env.gym_env.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.env.instance.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.env.namespace.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.eval.algorithms.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/modules/fle.eval.tasks.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/observation.rst.txt create mode 100644 docs/sphinx/build/html/_sources/api/tools.rst.txt create mode 100644 docs/sphinx/build/html/_sources/customization/agents.rst.txt create mode 100644 docs/sphinx/build/html/_sources/customization/database.rst.txt create mode 100644 docs/sphinx/build/html/_sources/customization/tasks.rst.txt create mode 100644 docs/sphinx/build/html/_sources/customization/tools.rst.txt create mode 100644 docs/sphinx/build/html/_sources/examples/basic_agent.rst.txt create mode 100644 docs/sphinx/build/html/_sources/examples/multiagent.rst.txt create mode 100644 docs/sphinx/build/html/_sources/examples/visual_agent.rst.txt create mode 100644 docs/sphinx/build/html/_sources/getting_started/cluster.rst.txt create mode 100644 docs/sphinx/build/html/_sources/getting_started/installation.rst.txt create mode 100644 docs/sphinx/build/html/_sources/getting_started/quickstart.rst.txt create mode 100644 docs/sphinx/build/html/_sources/index.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.a2a_instance.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.a2a_namespace.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.entities.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.game_types.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.instance.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.lua_manager.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.namespace.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.tools.controller.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.tools.init.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.tools.rst.txt create mode 100644 docs/sphinx/build/html/_sources/modules/env.tools.tool.rst.txt create mode 100644 docs/sphinx/build/html/_sources/tools/extract_item.rst.txt create mode 100644 docs/sphinx/build/html/_sources/tools/index.rst.txt create mode 100644 docs/sphinx/build/html/_sources/tools/insert_item.rst.txt create mode 100644 docs/sphinx/build/html/_sources/tools/inspect_inventory.rst.txt create mode 100644 docs/sphinx/build/html/_sources/tools/place_entity.rst.txt create mode 100644 docs/sphinx/build/html/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 docs/sphinx/build/html/_static/basic.css create mode 100644 docs/sphinx/build/html/_static/css/badge_only.css create mode 100644 docs/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot create mode 100644 docs/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg create mode 100644 docs/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf create mode 100644 docs/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-bold.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-bold.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-normal.woff create mode 100644 docs/sphinx/build/html/_static/css/fonts/lato-normal.woff2 create mode 100644 docs/sphinx/build/html/_static/css/theme.css create mode 100644 docs/sphinx/build/html/_static/doctools.js create mode 100644 docs/sphinx/build/html/_static/documentation_options.js create mode 100644 docs/sphinx/build/html/_static/file.png create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bold.eot create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bold.woff create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-italic.eot create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-italic.woff create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-regular.eot create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-regular.woff create mode 100644 docs/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff create mode 100644 docs/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 create mode 100644 docs/sphinx/build/html/_static/jquery.js create mode 100644 docs/sphinx/build/html/_static/js/badge_only.js create mode 100644 docs/sphinx/build/html/_static/js/theme.js create mode 100644 docs/sphinx/build/html/_static/js/versions.js create mode 100644 docs/sphinx/build/html/_static/language_data.js create mode 100644 docs/sphinx/build/html/_static/minus.png create mode 100644 docs/sphinx/build/html/_static/plus.png create mode 100644 docs/sphinx/build/html/_static/pygments.css create mode 100644 docs/sphinx/build/html/_static/searchtools.js create mode 100644 docs/sphinx/build/html/_static/sphinx_highlight.js create mode 100644 docs/sphinx/build/html/api/action.html create mode 100644 docs/sphinx/build/html/api/environment.html create mode 100644 docs/sphinx/build/html/api/modules.html create mode 100644 docs/sphinx/build/html/api/modules/fle.agents.agent_abc.html create mode 100644 docs/sphinx/build/html/api/modules/fle.agents.models.html create mode 100644 docs/sphinx/build/html/api/modules/fle.commons.models.html create mode 100644 docs/sphinx/build/html/api/modules/fle.env.entities.html create mode 100644 docs/sphinx/build/html/api/modules/fle.env.game_types.html create mode 100644 docs/sphinx/build/html/api/modules/fle.env.gym_env.html create mode 100644 docs/sphinx/build/html/api/modules/fle.env.instance.html create mode 100644 docs/sphinx/build/html/api/modules/fle.env.namespace.html create mode 100644 docs/sphinx/build/html/api/modules/fle.eval.algorithms.html create mode 100644 docs/sphinx/build/html/api/modules/fle.eval.tasks.html create mode 100644 docs/sphinx/build/html/api/observation.html create mode 100644 docs/sphinx/build/html/api/tools.html create mode 100644 docs/sphinx/build/html/customization/agents.html create mode 100644 docs/sphinx/build/html/customization/database.html create mode 100644 docs/sphinx/build/html/customization/tasks.html create mode 100644 docs/sphinx/build/html/customization/tools.html create mode 100644 docs/sphinx/build/html/examples/basic_agent.html create mode 100644 docs/sphinx/build/html/examples/multiagent.html create mode 100644 docs/sphinx/build/html/examples/visual_agent.html create mode 100644 docs/sphinx/build/html/genindex.html create mode 100644 docs/sphinx/build/html/getting_started/cluster.html create mode 100644 docs/sphinx/build/html/getting_started/installation.html create mode 100644 docs/sphinx/build/html/getting_started/quickstart.html create mode 100644 docs/sphinx/build/html/index.html create mode 100644 docs/sphinx/build/html/modules/env.a2a_instance.html create mode 100644 docs/sphinx/build/html/modules/env.a2a_namespace.html create mode 100644 docs/sphinx/build/html/modules/env.entities.html create mode 100644 docs/sphinx/build/html/modules/env.game_types.html create mode 100644 docs/sphinx/build/html/modules/env.html create mode 100644 docs/sphinx/build/html/modules/env.instance.html create mode 100644 docs/sphinx/build/html/modules/env.lua_manager.html create mode 100644 docs/sphinx/build/html/modules/env.namespace.html create mode 100644 docs/sphinx/build/html/modules/env.tools.controller.html create mode 100644 docs/sphinx/build/html/modules/env.tools.html create mode 100644 docs/sphinx/build/html/modules/env.tools.init.html create mode 100644 docs/sphinx/build/html/modules/env.tools.tool.html create mode 100644 docs/sphinx/build/html/objects.inv create mode 100644 docs/sphinx/build/html/py-modindex.html create mode 100644 docs/sphinx/build/html/search.html create mode 100644 docs/sphinx/build/html/searchindex.js create mode 100644 docs/sphinx/build/html/tools/extract_item.html create mode 100644 docs/sphinx/build/html/tools/index.html create mode 100644 docs/sphinx/build/html/tools/insert_item.html create mode 100644 docs/sphinx/build/html/tools/inspect_inventory.html create mode 100644 docs/sphinx/build/html/tools/place_entity.html delete mode 100644 docs/sphinx/requirements.txt diff --git a/.gitignore b/.gitignore index c03dfde51..e3e42e7e4 100644 --- a/.gitignore +++ b/.gitignore @@ -19,11 +19,6 @@ uv.lock /dist/ /build/ *.egg-info/ -uv.lock - -# Sphinx documentation build -/docs/sphinx/build/ -!/docs/sphinx/build/html # Docker **/docker-compose.yml diff --git a/README.md b/README.md index b350faa98..3e4ee2050 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ pip install factorio-learning-environment[psql] # For PostgreSQL support pip install factorio-learning-environment[eval,mcp,psql] # All features # Using uv (recommended) -uv add factorio-learning-environment[eval] +uv sync ``` ### Quickstart diff --git a/docs/sphinx/Makefile b/docs/sphinx/Makefile deleted file mode 100644 index af23b2de2..000000000 --- a/docs/sphinx/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/sphinx/build/html/.buildinfo b/docs/sphinx/build/html/.buildinfo new file mode 100644 index 000000000..90798643d --- /dev/null +++ b/docs/sphinx/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 498c8f2e08a2c5594696fb0d88b497ea +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/build/html/.buildinfo.bak b/docs/sphinx/build/html/.buildinfo.bak new file mode 100644 index 000000000..f9acc189d --- /dev/null +++ b/docs/sphinx/build/html/.buildinfo.bak @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: dee24ffc3d2b93cba59906b0834a1c4b +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/build/html/.doctrees/api/action.doctree b/docs/sphinx/build/html/.doctrees/api/action.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1438b2353bba3565d9058442f03b7ca3bd3e631b GIT binary patch literal 47534 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.agents.agent_abc.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.agents.agent_abc.doctree new file mode 100644 index 0000000000000000000000000000000000000000..164899c39be14cb990a3562ab33742ccaca2847e GIT binary patch literal 2558 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.commons.models.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.commons.models.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6e9866653904ff630c6b32f63536dbbc4ff7b2bf GIT binary patch literal 260764 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.env.entities.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.env.entities.doctree new file mode 100644 index 0000000000000000000000000000000000000000..04454b70bdb399b0d1baff5494154c4e21e6813b GIT binary patch literal 813811 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℘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 i)ei(7b}9Nt&ALV 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 A2mk;8 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.env.game_types.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.env.game_types.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c7efed93468c057116e076be241528e3d9379d0f GIT binary patch literal 301611 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 OZ3MkN6TjNu`~Lwk&z;o( literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.env.gym_env.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.env.gym_env.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e22072e16e1afe981167b69e415a369ff5da96a8 GIT binary patch literal 2805 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.eval.algorithms.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.eval.algorithms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..562e70061bed060ca6dfc6afea97e4ecf33133ad GIT binary patch literal 2916 zcmb7G%WfMt6!lB8<%ewNQ4~#_CJ53vXr$?)iz3Y;fR{$KDB1#D1Ozq15eak1Damo< zMSyk@AO^S#`z!sv9?ob+wrd2a00G0xOWxNx_wvu)-@osy)IYy(OD@!WOtVbsjM?C~ zGM!chQ!ac8Fa8Se!?7P2`p)Xgq%8OqXrx@o%rF(+20x7IPDndmoZqx8bwaD|IPdX3 z-+UX6`M~#_aFSiw@?YhWjoCSsV=8Cb2*(TixX@VzwRj4LHhy9A=*?$!KZM5Deo5h( z3;fUzNEZrU_x(i#6TcyaVqsEEso$o~88NLKB9D=-i_FHTHd9Hhg%IC8MT_QZE33-o zVoK99!}6$8`AtV>aVzkB{($fDhkTtMd6xWYnX$>4pei{*ev_Q04pHinWYj33W+SG~ zh0!WzJb}M9X)2O5?k2PpNs|tn+>)xXv5582=~^}AE50XG#^zVj+hm@9joA1TB=af$ z&+vba|BDzWtQt{AckDMxDopSX8goBBzQr7B(Cm(G+vNR;3$)_j^3gI06aEOPW}Oem z{B>Q(Q7rmsS@hAO=&W_}v*o632+`U$tgSaG=P#RN(9T|aU3;Jd0)Of6IYX6|G~$(% zM$Zhh4G?-xJ1WEJir;Q^ScYX4?XCJ@TA2tl(t&EXl{Db;Tb4P8`hro19Yt~!+A);{ z-~Wxu3VH81*4LFQD;Fkwf8qx-rkJ5XO28tcfTyEHiN%i5+QC(pi+S*?N$@+33j}u0 zps>AIRz_mA=X6RUP~$FK>BV|q1b-*THA*{nW%Hxoi_}$BLFTzOMfm847U(ERs*4Cu ziwhq#5++$KA@4v~(vk)C76%sWnfP79N^KmG?3^K;Ykr$k*)4nikj(|M=%}k~tJL$o zj7_T<%njc)EP;k$w18xQa-=MV6#WwlIU`J^Izz65A5<p@$`K>dA+irN>?;Q*x)TvpXuKL4B zHo!*BfI=w>;lfV`&;77uB>_bkD4Ny@+l`Vbh3}CU{!8v$XIIh)Ln;GbI zKWf$vK$AFDpga!c*n)iY?7Q!g&!NfF8`nq4^7?Pu>%m+a@p{J0STL8@HqZ?c?g|NG z14pNzQ090z-SS5OWI;M+b^#DuMuc4Y1ACzyof9r*T;dP#Zb%(*ziSH$mirx2&lsuCvRIIm~)q6b_8JvtRC2L={R;ZE!lwwm5h z6Ggq)Y`V4Ahl{5JuqyMWp<~@?Sq{$;wDT;E=J#lI*QCw(h8VZy-J&1+ zDJDPUn^D+&^ArBY`au-9ixM8b5B%iP@+WbczQK@xjmJs9aiDAD?Q3T_e_qr7jG&&d zn0Db~947zZouL2cI|0KtiQ_X_j?aXkmT08}aDIi7#qOqNk9B_Q7{`!YZAWx9t^D3q z)YW;|O9ikS6N%h3lGt2Yy(ZyTC5;}+0F)L}Eju9Bs`qXPJMF=>8wah``p}(g_hU#H z7r^@aH}6{PU{<5`rMilZ4TCY&QUW4~0h4d@WFh~AGJXg@gT{C%q9NdIXMxt<8 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/api/modules/fle.eval.tasks.doctree b/docs/sphinx/build/html/.doctrees/api/modules/fle.eval.tasks.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f2e0ec427e81aa42f0b17c4969a2673d460479b9 GIT binary patch literal 95250 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 KPEB^_%Kr~Oztl(o literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/customization/database.doctree b/docs/sphinx/build/html/.doctrees/customization/database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0aa01b01df2ee94d0839dce0e4d7d7d85633cf61 GIT binary patch literal 48723 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/customization/tasks.doctree b/docs/sphinx/build/html/.doctrees/customization/tasks.doctree new file mode 100644 index 0000000000000000000000000000000000000000..86e98b41f3fe9ce563cb5fca13c6a1582c5a3c40 GIT binary patch literal 34841 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 br`u@vn>4U2(*TD3W^jli-+|cQU!4CxNV(ik literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/customization/tools.doctree b/docs/sphinx/build/html/.doctrees/customization/tools.doctree new file mode 100644 index 0000000000000000000000000000000000000000..399229a1f1499f2e657f5790adbffc7276437689 GIT binary patch literal 32719 zcmeHQeT*c>RloCn?%eI(hkcG6`|S1}&h3tOXYbZ=5^Zw9=RKc&x!d*We8EY~Wv+Lo zXS?TSrYGG!ce^%6jKCrrw;Ym8LJ|Z4gd!n90vIWXD4uU=I>x9cN+^4@Ly7as`QuGd;C+0|;x zuR38j-dpu6ou<=@x*zUN|4jF0cPbtW>>Huq2`WxE-i8tt*K1S*r`5gEjVGvhbi&Gv2sFyyCdE$@m`L1HoTV8UGA*dalwwFz+34=pqJ>| z;Z;MTWlyDHhan!~`>vMV6yNq%J8k`A#jacnoEnws#Csxpm0oq-1MXe!e)n#7hkG=B z=iJ*vCkW@Rd3I}V5nP?C*_Fr-Jb$*~*g*@#&N{8@Uf{Qg&vU>xoD=;pC(xa%FfY7k zz!|?a7ZFQJK?wTpIe$xM1&kR3!S-rkw_TH&pFDfvQOj;L{2QUQ?su%nw<^S5#}WYX z0FbPjA6Ve4)2b5R?NuOQRqVFC;x)X;bHbA71gjnR*S)G^*;dOA0{@0}`raA)14?hJZpr;-Kq)IKqU^cXm(9>j-8(yh}0 zMpJ|#(+MC(B=xuVd!rG0czA?JC{KyvjMyF^R7%>vokyA#IPd9rfnz;r)x3riE+`}h zz1Em4508mr&6vW7h4_Hef~E-|pVe~1gLo^AquB*Xr#EG=sA;^8r;A0Fw^FlOEG}4Q zq|V~;!tzZL$|VFn3E8frbkXiG!U$Y7q3$=KDn{&84Rtl?jp0eJgXC3^dwYB|A5RT^ z)r9U0C3E}GN@X(vwWWYk;dfITKx-wDhZDtOrQu-=m)h&Z(?$L<8ZFi2{)zG${F99#FJt@jVh zRw~@f*12L4*5JAmlo}nI`1&OO5`4YTu`^69WVjlaMyt=&r(E3$6Y2V@7YZ6FqZ>YJ zvS{;ec!|5g+KeWnftSn%hU$> zoH;l&!cUoFbvbuc7?LUIz1I$|YDmVnO-$k89AHZ>Q3Cx!-14-@c&XxG9viM5xa1=NlYWOa`>EcpUx~>|dk2((o(S zObQ=vUIUM9ZmB!tPmt9}%W2y=X(cx zD-CB5k2d1H4ZF44fqZo1ohx?eV)o#At8N4TM`b%$C2t&#RQ)dExbUTJGx(*2@qv_K zv1U`YDs7~c7;1$$yj7~dVH81eVVLUksKJ7A&n8$ULzJtS(m0$T-KiNYRog zX=nsR;daIeD}l$$hG@>v8Zjv7`0E;+Wa@HKovz@7Dlahq+aY5Vh1xd|JpSSbs?R>wt5308hCRJ}v zOXaa8OIxx;QbvD5(q4`%CH7+(YAVlu)E_{B`V4){;$x#;!YBMPo_lobC-AGsKHR0% zpy8~{q`hL`41^Svn$Y{+;Wk=VXZ_|88YtApjxjsg2DS5+%!m(r4 z6Nv0w_naGrp?y`FGOPGG{8qrYNY1m+ptIIhq4=&^Q&4!*{e97s1yyby<=|!yC^w&! zdl2Qw@t(1K>E5G?^7OR|XLK$JzqK&HRR#W)Mu(OT76^RUsZ^XWl<)!dDHpD}1HDfX zSk{jgmvO32l`6n!*eFe2KT4mjRDIA%R!hftlJ z5c9`^PD!WDM*!)?GkB%C@o<1w$Y$XKk;6#R6-I*6UE`TnmkORZWU4J8L~gD>Na3 zwOIf0TeSu_P8BXWVwK5icuh})a^-^C?eEwUa4cbM3Apv6C*X{&)> zeqWns#+$1!cMNJ?bk!nLTa_d2Ou+tCiHshmYb*+!N_ zkKbDR{bWrhyx^G`jS>0BNX?AU#xG zOV413!TnqJYwq7+j`Vf+?2}ar3R40{VbO+BPt9phvix?5l@brw5%V2F@&jNLs zoVg`U+j8cX_sC!z3;lwQ9X(mGTP-J0La|vfJ>1PtW zhncde6xpspaf(tbOD36<$Rq3-u_NTQd|@Qa$O?QOHQ0qQ6QKC%=%ebRDGJj8_CH2D zuPA$kg4RY3O9~cctd}{QpfX-A`XNW3Rj!K)jY{d>BT~RSPIIF71&j;6LRJY zg3~8YoWLU~XWX!kxj&82Pbv$B5Z8GtW*P_~!?LSDQG}92+Y2h4h8-Zi(6MtfU=*T@ zjIh;~RHp_+vJy+H{fZ85TKu3kvCjiGjtZzhg_5N1NtN-ho^vdk<`W=B#X^LIjuPM+BkWzoG`qWr@v z%1O}ttI*4%FE!`q?tCm|2Mn8jAf3L`YwAYI(E0a~jorWWHForLbYu6sDI(Lx?oW62 z~D_9W~;F*#-OKGRH0va|iM*yKj8OqWTze;PF-|IBZ$;r);Ky+?SVo^A! zagC?z>yw$>8JVgh&56nk5NzYFV{SnK-Nx=cYL_~jXF(?do*C+xRvF9@e3ekCluRLlGl zTmQ<~1O}hRsp>pa@-C>IXLYj>nAt=OjmPWBir3VKcicX}Ka4BkHD-*9x70(+33mXDrPODn)++ zpb5U0;ABw9PLjB&$E7vVTiM6!2I--0c*Hh%B{oY&Q_a5sBC313Gl1@pUkvOR!u{C|79teHFBvma0LtsYXE+@v7 zp`{ZmMG>SPUX<|tN7-@|;m=qxV+0G|K zFLMGt6-^3>N{nRxWKCuiz_!0M-uGm6Kr+|&(Ba(X8>OvWcUd_pxdLc<)mo1_CeX8phcVAGnB7%D6j?C|&% z5xi2^5}xcmK7E{AMMBh$EaRyXRJ;NFfqA9bgitAagbxn*z$DIbsDc4VlX3<`GtFccgy)weZv=|;mSs?`CA?!xJ!~39-BJ%*>Vd}I|10&7_+lsFk&GUU z+$@9lA5tER_HyE*azSyH7h#oRpOsdtt5;y}Q7eyBP%jYh+6S$b+UAJ>1tbicCqK}# zX3jb+ue#H^K55_>aG_1fcwjMJ9y{Lw1wxugcIvM%l0o?3jI>RFv^m!ISMw}_w%G4UyWX*p1bG@_-+Ov*ymYt4xe97&P;7fo z7tdQjq)qYE03Xg!u22RewzW*jE%Utod`j)57oi$DYYcetD=*}DEbWOe6w;u?&hJfN z2~$q-9Eiu%Bq73kVbsPI3J1ydlKn8+k?CoYGOWug!#a9qZkdA|jg# z2hQO>J{SXvBh&1eS7-AOP-Q^+MOFMH{Kt8?jzn|@L4z@><|*|h)hnW&v3W>&CtDIF zwnA-5RL@XTf;6l|B?irXSq3e4b#3WDS}hv(Y@7xGObOew(6C?X1uGGHF*t2V*oPc@ zB~G`yQ&ki4!33>QY}pKTnxY5>IA=f2n~OzE`j9^> z3E?x_E+acJTn}+r9y=Z3fU}uIS0qVP_1_?5_s|iY*VG1{_;4?L)q@l1hK)44-yDf* ziaC7>H8|#U>w?vTy#blZnNg_vEl9FYkbQ**LVYd+Jl9*22SQ2A^|;E}6|hvIe*JYO zH5axk^QJ|GPfE1FAHCZJ=gDFB1vxYqd}JH7keG@LBym2UJinC1U3fi?JP|XdinibA|bgE%-31|*e0E)J;_UXFCfbliepN*5@3d0ZcCoC#Gd zv5%GK`<<>{r_Bsi>nvu$IIAFuR~+hnqld$@87}8{DEWSCNe%Y>9wOflCr4ub?6r92 zIQUrM+cJfEP8fazHbB64#Ac#4@+oivC9-3%=|hYUT3@O13k%2M`p5;sc^Bkqiv1f? zz+xwsqf$o}AL$EFNO|IR)jvigL4mNVzkSq|J|D5a8KaGDB`8|U1+QHN- znaC@m#o=E^B1wtEn+eZ<9)dPQ9Jr34ZD?^|evmj2*Aa_MiNqUakIGHCm=Z%Ok{!Ac zDI2ksktU?sedJSV>A1BItgL_(b|nIGfCWT1Y{_v?cWaJd_eka$-myyZM zd7)%wn4(%{CPyMs$;?{`?|X-!)sPvkBWN93W|%*NWTq(ldC9?{c@;81i+-blvzMi) z(CI#iu;7)nJZUjeN+hYCm61n?HKr1gB@F>NGZOd6(mXr_(+o@VFfsZqTqj>Z?ifV7 z5{tnFv@pDDByyB6oF*Kf8iFoE7`Tq0YiMC$UJMe31vTh#)*`frFe`FJU#O2ZoydsU zC=>{7hl6bJogV9bg(J}+2Dq$zJVV?P@*#CdQrHlYpBjm$BqD1=u+k8bMPh%%b@D~z z{-M~R)dn!!}l^bK+)O5K06bdJRRFSybCDVz#WaD_jU zZ2?mq>_mX#Q9kX7hqVfJ%5xu@j!ilcXXnY?_PDT#P6zDa{(lna4EGV<&O%nqpGdzj zc>kRYKk~^VJ@;SC22AE~SBW~WVldvC^Hgti&cBT~{~z3BK5B~dT%j-L5!6Wq$0#-= zj+P+95;({!<5^7Aym?1(P>cO*clR>>WklodB`_nosCT0Vi#*uAIo6u(RL^W_IDtP; zY`=q>9FFZ=p)cD@F!5q_j)QUdO80qTF$b4y;Q}#X+Vv?CS%&{O;h&N8eFjJ+;(KHx zhHRh7ke*Ko$@XccSjaZP%g0nRnd*(sz~oESrUhH&`{qCKt3dX~La!aT!X#PU z9Hqnyz{wPvw1(GecW|63%?A8VMBlT#{xqSV;WaiGXo!lP*#(?~ z^=^E)1~5okcZ`?si^u8OQ*1acufc>gyYGu9koV%X%kY-yMAi@h?-EZOafM!3<{US5 zapiZa??TU9*ot4finwx;C zCI1*Dkc`;GlQDEh#UYXiKh_S|_*?NQi=Z2ib)wqro3OBr?{}wPmN{KdBm^Rl6=Fcq zsHhts5S%xl>|!Y0_-N)$21NbP9^CCQA>e8pRPDRdFEW+mgG2*lFLc48259QyDlK`p z6gXbR?^|#^ZG0Zp|XAy-{L{s#;cuX zyPSw57|RcMvWH{Ksb>%H6Bc&ref_8%I-ROt#=Tf5br7+CKXl4wO_q{MRKD&Z)saQ^ zKpCk?v=14CNG$iLp@LzzAH-1h7LPjs9hb#u<2J?wZmzwZzM&CHE=80GeM8Wy=<^+Kx1RruZ>Yujoj|}z41}VWV4(M&g9~_vbd3KBR&|ea&qSwt|4pC z4WRM<5T`pw<@a1^mu8#kQMZOG!@ zI-v$OAU%G?Ytk0YI98yHdz(q`GS-I(GW9rJ7$tPtM!W-8fYGhT@m`@#Fnl42*z(Ue_?07EyXHVU zL2eEKDM(fXbqg3+?;~v4soxNoD(PsXVZfo0wx2qnvr_tB DJa;u* literal 0 HcmV?d00001 diff --git a/docs/sphinx/build/html/.doctrees/environment.pickle b/docs/sphinx/build/html/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..08bed3e33f9c0d759986aaaf3873c25608dbcbad GIT binary patch literal 4585905 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%0A-U75X7C_*PY9;;TFmC^WJimNdyCC0 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 z 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ⅆ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
lCy#SfAyAotKYz2v_6Pv3%auP|QC@ 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Ƚ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 *7y7Ae8aN6e{;$RBx3MlsE}KZ9&asK&pE5IO}3} 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%0D4G_nR-x#E4-2LUR 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

Core Tools

diff --git a/docs/sphinx/build/html/genindex.html b/docs/sphinx/build/html/genindex.html index c0a7f853e..a4870fa04 100644 --- a/docs/sphinx/build/html/genindex.html +++ b/docs/sphinx/build/html/genindex.html @@ -132,9 +132,11 @@

_

  • __getstate__() (fle.commons.models.SerializableFunction method)
  • -
  • __init__() (fle.commons.models.GameState method) +
  • __init__() (fle.agents.agent_abc.AgentABC method)
  • Conversation (class in fle.commons.models)
  • -
  • conversation (fle.commons.models.Program attribute) +
  • conversation (fle.agents.agent_abc.AgentABC attribute) + +
  • CopperCable (fle.env.game_types.Prototype attribute)
  • CopperOre (fle.env.game_types.Prototype attribute) @@ -417,6 +427,8 @@

    C

  • count (fle.env.entities.Ingredient attribute)
  • crafted (fle.commons.models.ProductionFlows attribute) +
  • +
  • create_default_agent_card() (in module fle.agents.agent_abc)
  • create_task() (fle.eval.tasks.TaskFactory static method)
  • @@ -450,20 +462,18 @@

    D

  • Direction (class in fle.env.entities)
  • -
  • direction (fle.env.entities.Entity attribute) +
  • direction (fle.env.entities.EntityCore attribute)
  • DirectionInternal (class in fle.env.instance)
  • - - + +
  • end() (fle.agents.agent_abc.AgentABC method) +
  • end_position (fle.env.entities.EntityInfo attribute)
  • @@ -695,6 +707,13 @@

    F

  • first_namespace (fle.env.instance.FactorioInstance property), [1]
  • + fle.agents.agent_abc + +
  • +
  • fle.agents.models
      @@ -736,6 +755,8 @@

      F

    • module
  • + +
    • fle.env.namespace @@ -743,8 +764,6 @@

      F

    • module
    - - diff --git a/docs/sphinx/build/html/getting_started/installation.html b/docs/sphinx/build/html/getting_started/installation.html index 729a57532..33a60265f 100644 --- a/docs/sphinx/build/html/getting_started/installation.html +++ b/docs/sphinx/build/html/getting_started/installation.html @@ -210,11 +210,6 @@

    Troubleshooting

    Building Documentation (Maintainers)

    -

    Install Sphinx tooling:

    -
    pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints
    -
    -
    -

    Build the HTML documentation:

    cd docs/sphinx
     python3 -m sphinx -b html source build/html
     
    diff --git a/docs/sphinx/build/html/objects.inv b/docs/sphinx/build/html/objects.inv index 140d389dcaa2fb62b5b9f257ae81c94b7036109d..600d167dc284bd9810afa0bc6de708a67b3ca3b6 100644 GIT binary patch delta 6832 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 delta 6682 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 Module Index

    fle + + +     + fle.agents.agent_abc +     diff --git a/docs/sphinx/build/html/searchindex.js b/docs/sphinx/build/html/searchindex.js index da8850866..823967056 100644 --- a/docs/sphinx/build/html/searchindex.js +++ b/docs/sphinx/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"API Key Configuration": [[23, "api-key-configuration"]], "API Modules": [[2, null]], "API Reference": [[25, null]], "Action Components": [[0, "action-components"]], "Action Space": [[0, null]], "Action Space Definition": [[0, "action-space-definition"]], "Action Structure": [[0, "action-structure"]], "Action Validation": [[0, "action-validation"]], "Advanced Agent Features": [[15, "advanced-agent-features"]], "Advanced Configuration": [[22, "advanced-configuration"]], "Advanced Features": [[17, "advanced-features"], [18, "advanced-features"]], "Agent Architecture": [[15, "agent-architecture"], [20, "agent-architecture"]], "Agent Behavior": [[19, "agent-behavior"]], "Agent Configuration": [[15, "agent-configuration"], [19, "agent-configuration"], [21, "agent-configuration"]], "Agent Implementation": [[15, "agent-implementation"], [19, "agent-implementation"], [21, "agent-implementation"]], "Agent Overview": [[19, "agent-overview"], [21, "agent-overview"]], "Agent Registration": [[15, "agent-registration"]], "Agent Testing": [[15, "agent-testing"]], "Agent Types": [[15, "agent-types"]], "Agents": [[2, "agents"]], "Available Environments": [[1, "available-environments"]], "Backup and Recovery": [[16, "backup-and-recovery"]], "Base Agent Class": [[15, "base-agent-class"]], "Basic Agent Example": [[19, null]], "Best Practices": [[0, "best-practices"], [15, "best-practices"], [16, "best-practices"], [17, "best-practices"], [18, "best-practices"], [19, "best-practices"], [20, "best-practices"], [21, "best-practices"], [26, "best-practices"], [27, "best-practices"], [28, "best-practices"], [29, "best-practices"], [30, "best-practices"]], "Building Documentation (Maintainers)": [[23, "building-documentation-maintainers"]], "Client-side Setup (Optional)": [[23, "client-side-setup-optional"]], "Cluster Management": [[22, "cluster-management"]], "Cluster Setup": [[22, null]], "Code Execution": [[0, "code-execution"]], "Common Models": [[2, "common-models"]], "Configuration": [[22, "configuration"]], "Connection Management": [[14, "connection-management"], [27, "connection-management"]], "Core Concepts": [[1, "core-concepts"]], "Core Environment": [[2, "core-environment"]], "Core Tools": [[14, "core-tools"], [27, "core-tools"]], "Crafting and Research": [[14, "crafting-and-research"], [27, "crafting-and-research"]], "Creating Custom Tasks": [[17, null]], "Creating Custom Tools": [[14, "creating-custom-tools"], [18, null]], "Customization": [[25, null]], "Database Client": [[16, "database-client"]], "Database Configuration": [[16, null]], "Database Migration": [[16, "database-migration"]], "Database Schema": [[16, "database-schema"]], "Database Types": [[16, "database-types"]], "Debugging and Output": [[14, "debugging-and-output"], [27, "debugging-and-output"]], "Entity Information": [[13, "entity-information"]], "Entity Management": [[14, "entity-management"], [27, "entity-management"]], "Entity Queries": [[14, "entity-queries"], [27, "entity-queries"]], "Entity Types": [[13, "entity-types"]], "Environment API": [[1, null]], "Environment Overview": [[24, "environment-overview"]], "Environment Registry": [[1, "environment-registry"]], "Error Handling": [[0, "error-handling"], [1, "error-handling"]], "Evaluation": [[2, "evaluation"]], "Example Actions": [[0, "example-actions"]], "Example Agent: Resource Collector": [[15, "example-agent-resource-collector"]], "Example Backup": [[16, "example-backup"]], "Example Configuration": [[15, "example-configuration"]], "Example Error Handling": [[0, "example-error-handling"]], "Example Interaction": [[24, "example-interaction"]], "Example Metrics": [[19, "example-metrics"], [20, "example-metrics"], [21, "example-metrics"]], "Example Migration": [[16, "example-migration"]], "Example Monitoring": [[16, "example-monitoring"]], "Example Observation": [[13, "example-observation"]], "Example Optimization": [[16, "example-optimization"]], "Example Output": [[19, "example-output"]], "Example Registration": [[15, "example-registration"]], "Example Task": [[17, "example-task"]], "Example Tool: Resource Scanner": [[18, "example-tool-resource-scanner"]], "Example Usage": [[1, "example-usage"], [16, "example-usage"]], "Example Visual Analysis": [[21, "example-visual-analysis"]], "Examples": [[25, null], [26, "examples"], [28, "examples"], [29, "examples"], [30, "examples"]], "FactorioInstance": [[1, "factorioinstance"]], "Failure Modes": [[26, "failure-modes"], [28, "failure-modes"], [29, "failure-modes"], [30, "failure-modes"]], "Game State Information": [[13, "game-state-information"]], "Getting Started": [[25, null]], "Gym Environment": [[1, "gym-environment"]], "Implementing Custom Agents": [[15, null]], "Indices and tables": [[25, "indices-and-tables"]], "Installation": [[23, null], [23, "id1"]], "Inventory Management": [[13, "inventory-management"], [14, "inventory-management"], [27, "inventory-management"]], "Key Concepts": [[24, "key-concepts"]], "Key Methods": [[1, "key-methods"], [15, "key-methods"], [16, "key-methods"]], "Monitoring and Maintenance": [[16, "monitoring-and-maintenance"]], "Movement and Control": [[14, "movement-and-control"], [27, "movement-and-control"]], "Multi-Agent Actions": [[0, "multi-agent-actions"]], "Multi-Agent Configuration": [[20, "multi-agent-configuration"]], "Multi-Agent Example": [[20, null]], "Multi-Agent Implementation": [[20, "multi-agent-implementation"]], "Multi-Agent Overview": [[20, "multi-agent-overview"]], "Namespace Management": [[1, "namespace-management"]], "Next Steps": [[24, "next-steps"]], "Observation Space": [[13, null]], "Observation Structure": [[13, "observation-structure"]], "Overview": [[26, "overview"], [28, "overview"], [29, "overview"], [30, "overview"]], "Parameters": [[26, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"]], "Performance Metrics": [[19, "performance-metrics"], [20, "performance-metrics"], [21, "performance-metrics"]], "Performance Optimization": [[16, "performance-optimization"]], "Position and Direction": [[13, "position-and-direction"]], "PostgreSQL Configuration": [[16, "postgresql-configuration"]], "Prerequisites": [[23, "prerequisites"]], "Quickstart": [[24, null]], "Related Tools": [[26, "related-tools"], [28, "related-tools"], [29, "related-tools"], [30, "related-tools"]], "Research System": [[13, "research-system"]], "Resource Management": [[14, "resource-management"], [27, "resource-management"]], "Returns": [[26, "returns"], [28, "returns"], [29, "returns"], [30, "returns"]], "Running Multi-Agent Systems": [[20, "running-multi-agent-systems"]], "Running the Agent": [[19, "running-the-agent"]], "Running the Visual Agent": [[21, "running-the-visual-agent"]], "SQLite Configuration": [[16, "sqlite-configuration"]], "Scenarios": [[22, "scenarios"]], "Specialized Agents": [[20, "specialized-agents"]], "Starting a Cluster": [[22, "starting-a-cluster"]], "Task Configuration": [[17, "task-configuration"]], "Task Definition": [[17, "task-definition"]], "Task Implementation": [[17, "task-implementation"]], "Task Registration": [[17, "task-registration"]], "Task Structure": [[17, "task-structure"]], "Task Types": [[17, "task-types"]], "Task Verification": [[13, "task-verification"]], "Testing Tasks": [[17, "testing-tasks"]], "Testing Tools": [[18, "testing-tools"]], "Tool Architecture": [[14, "tool-architecture"], [18, "tool-architecture"]], "Tool Categories": [[14, "tool-categories"], [27, "tool-categories"]], "Tool Development": [[27, "tool-development"]], "Tool Development Process": [[18, "tool-development-process"]], "Tool Documentation": [[14, "tool-documentation"]], "Tool Registration": [[18, "tool-registration"]], "Tool Structure": [[18, "tool-structure"]], "Tool Usage Patterns": [[27, "tool-usage-patterns"]], "Tools": [[25, null]], "Tools API": [[14, null]], "Tools Documentation": [[27, null]], "Troubleshooting": [[16, "troubleshooting"], [19, "troubleshooting"], [20, "troubleshooting"], [21, "troubleshooting"], [22, "troubleshooting"], [23, "troubleshooting"]], "Visual Agent Example": [[21, null]], "Visual Processing Features": [[21, "visual-processing-features"]], "Welcome to Factorio Learning Environment\u2019s documentation!": [[25, null]], "extract_item": [[26, null]], "fle.agents.agent_abc module": [[3, null]], "fle.agents.models module": [[4, null]], "fle.commons.models module": [[5, null]], "fle.env.entities module": [[6, null]], "fle.env.game_types module": [[7, null]], "fle.env.gym_env module": [[8, null]], "fle.env.instance module": [[9, null]], "fle.env.namespace module": [[10, null]], "fle.eval.algorithms module": [[11, null]], "fle.eval.tasks module": [[12, null]], "insert_item": [[28, null]], "inspect_inventory": [[29, null]], "place_entity": [[30, null]]}, "docnames": ["api/action", "api/environment", "api/modules", "api/modules/fle.agents.agent_abc", "api/modules/fle.agents.models", "api/modules/fle.commons.models", "api/modules/fle.env.entities", "api/modules/fle.env.game_types", "api/modules/fle.env.gym_env", "api/modules/fle.env.instance", "api/modules/fle.env.namespace", "api/modules/fle.eval.algorithms", "api/modules/fle.eval.tasks", "api/observation", "api/tools", "customization/agents", "customization/database", "customization/tasks", "customization/tools", "examples/basic_agent", "examples/multiagent", "examples/visual_agent", "getting_started/cluster", "getting_started/installation", "getting_started/quickstart", "index", "tools/extract_item", "tools/index", "tools/insert_item", "tools/inspect_inventory", "tools/place_entity"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["api/action.rst", "api/environment.rst", "api/modules.rst", "api/modules/fle.agents.agent_abc.rst", "api/modules/fle.agents.models.rst", "api/modules/fle.commons.models.rst", "api/modules/fle.env.entities.rst", "api/modules/fle.env.game_types.rst", "api/modules/fle.env.gym_env.rst", "api/modules/fle.env.instance.rst", "api/modules/fle.env.namespace.rst", "api/modules/fle.eval.algorithms.rst", "api/modules/fle.eval.tasks.rst", "api/observation.rst", "api/tools.rst", "customization/agents.rst", "customization/database.rst", "customization/tasks.rst", "customization/tools.rst", "examples/basic_agent.rst", "examples/multiagent.rst", "examples/visual_agent.rst", "getting_started/cluster.rst", "getting_started/installation.rst", "getting_started/quickstart.rst", "index.rst", "tools/extract_item.rst", "tools/index.rst", "tools/insert_item.rst", "tools/inspect_inventory.rst", "tools/place_entity.rst"], "indexentries": {"__call__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__call__", false]], "__getstate__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__getstate__", false]], "__init__() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.__init__", false]], "__init__() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.__init__", false]], "__init__() (fle.commons.models.profitconfig method)": [[5, "fle.commons.models.ProfitConfig.__init__", false]], "__init__() (fle.commons.models.researchstate method)": [[5, "fle.commons.models.ResearchState.__init__", false]], "__init__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__init__", false]], "__init__() (fle.commons.models.technologystate method)": [[5, "fle.commons.models.TechnologyState.__init__", false]], "__init__() (fle.env.entities.indexedposition method)": [[6, "fle.env.entities.IndexedPosition.__init__", false]], "__init__() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.__init__", false]], "__init__() (fle.env.game_types.prototype method)": [[7, "fle.env.game_types.Prototype.__init__", false]], "__init__() (fle.env.gym_env.action.action method)": [[0, "fle.env.gym_env.action.Action.__init__", false]], "__init__() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.__init__", false], [9, "fle.env.instance.FactorioInstance.__init__", false]], "__init__() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.__init__", false]], "__init__() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.__init__", false]], "__init__() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.__init__", false]], "__init__() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.__init__", false]], "__init__() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.__init__", false]], "__init__() (fle.eval.tasks.taskfactory method)": [[12, "fle.eval.tasks.TaskFactory.__init__", false]], "__init__() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.__init__", false]], "__init__() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.__init__", false]], "__setstate__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__setstate__", false]], "__str__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__str__", false]], "above() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.above", false]], "accumulator (class in fle.env.entities)": [[6, "fle.env.entities.Accumulator", false]], "accumulator (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Accumulator", false]], "achievements (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.achievements", false]], "achievements (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.achievements", false]], "action (class in fle.env.gym_env.action)": [[0, "fle.env.gym_env.action.Action", false]], "add_agent_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_agent_message", false]], "add_result() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_result", false]], "add_user_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_user_message", false]], "advancedassemblingmachine (class in fle.env.entities)": [[6, "fle.env.entities.AdvancedAssemblingMachine", false]], "advancedcircuit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AdvancedCircuit", false]], "advancedelectronics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedElectronics", false]], "advancedelectronics2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedElectronics2", false]], "advancedmaterialprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedMaterialProcessing", false]], "advancedmaterialprocessing2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedMaterialProcessing2", false]], "advancedoilprocessing (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AdvancedOilProcessing", false]], "advancedoilprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.AdvancedOilProcessing", false]], "advancedoilprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedOilProcessing", false]], "advantage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.advantage", false]], "agent_idx (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.agent_idx", false]], "agent_messages (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.agent_messages", false]], "all (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ALL", false]], "ammo (class in fle.env.entities)": [[6, "fle.env.entities.Ammo", false]], "assembling_machine_input (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_input", false]], "assembling_machine_modules (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_modules", false]], "assembling_machine_output (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_output", false]], "assemblingmachine (class in fle.env.entities)": [[6, "fle.env.entities.AssemblingMachine", false]], "assemblingmachine1 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine1", false]], "assemblingmachine2 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine2", false]], "assemblingmachine3 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine3", false]], "automation (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation", false]], "automation2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation2", false]], "automation3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation3", false]], "automationsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AutomationSciencePack", false]], "barrelfilling (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.BarrelFilling", false]], "basicoilprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.BasicOilProcessing", false]], "battery (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Battery", false]], "batterytechnology (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.BatteryTechnology", false]], "below() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.below", false]], "beltgroup (class in fle.env.entities)": [[6, "fle.env.entities.BeltGroup", false]], "beltgroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BeltGroup", false]], "belts (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.belts", false]], "bigelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BigElectricPole", false]], "bind() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.bind", false]], "boiler (class in fle.env.entities)": [[6, "fle.env.entities.Boiler", false]], "boiler (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Boiler", false]], "bounding_box (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.bounding_box", false]], "boundingbox (class in fle.env.entities)": [[6, "fle.env.entities.BoundingBox", false]], "buffer_capacity (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.buffer_capacity", false]], "buildingbox (class in fle.env.entities)": [[6, "fle.env.entities.BuildingBox", false]], "burnerinserter (class in fle.env.entities)": [[6, "fle.env.entities.BurnerInserter", false]], "burnerinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BurnerInserter", false]], "burnerminingdrill (class in fle.env.entities)": [[6, "fle.env.entities.BurnerMiningDrill", false]], "burnerminingdrill (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BurnerMiningDrill", false]], "burnertype (class in fle.env.entities)": [[6, "fle.env.entities.BurnerType", false]], "category (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.category", false]], "center (fle.env.entities.boundingbox property)": [[6, "fle.env.entities.BoundingBox.center", false]], "centrifuge (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Centrifuge", false]], "characterinventoryslots (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.CharacterInventorySlots", false]], "charging (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.CHARGING", false]], "chemicalplant (class in fle.env.entities)": [[6, "fle.env.entities.ChemicalPlant", false]], "chemicalplant (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ChemicalPlant", false]], "chemicalsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ChemicalSciencePack", false]], "chemicalsciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ChemicalSciencePack", false]], "chest (class in fle.env.entities)": [[6, "fle.env.entities.Chest", false]], "children (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.children", false]], "cleanup() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.cleanup", false], [9, "fle.env.instance.FactorioInstance.cleanup", false]], "coal (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Coal", false]], "coal (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Coal", false]], "coal (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Coal", false]], "coalliquefaction (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.CoalLiquefaction", false]], "coalliquifaction (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CoalLiquifaction", false]], "code (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.code", false]], "code (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.code", false]], "code (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.code", false]], "completion_token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.completion_token_usage", false]], "completionreason (class in fle.agents.models)": [[4, "fle.agents.models.CompletionReason", false]], "completionresult (class in fle.agents.models)": [[4, "fle.agents.models.CompletionResult", false]], "concrete (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Concrete", false]], "connect_to_server() (fle.env.instance.factorioinstance static method)": [[1, "fle.env.instance.FactorioInstance.connect_to_server", false], [9, "fle.env.instance.FactorioInstance.connect_to_server", false]], "connected_to (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.connected_to", false]], "connection_points (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.connection_points", false]], "connections (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.CONNECTIONS", false]], "content (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.content", false]], "contents (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.contents", false]], "contents (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.contents", false]], "conversation (class in fle.commons.models)": [[5, "fle.commons.models.Conversation", false]], "conversation (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.conversation", false]], "coppercable (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperCable", false]], "copperore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperOre", false]], "copperore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.CopperOre", false]], "copperore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.CopperOre", false]], "copperplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperPlate", false]], "count (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.count", false]], "crafted (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.crafted", false]], "create_task() (fle.eval.tasks.taskfactory static method)": [[12, "fle.eval.tasks.TaskFactory.create_task", false]], "created_at (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.created_at", false]], "created_at (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.created_at", false]], "crudeoil (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.CrudeOil", false]], "crudeoil (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.CrudeOil", false]], "current_research (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.current_research", false]], "defaulttask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.DefaultTask", false]], "depth (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.depth", false]], "dimensions (class in fle.env.entities)": [[6, "fle.env.entities.Dimensions", false]], "dimensions (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.dimensions", false], [13, "fle.env.entities.Entity.dimensions", false]], "direction (class in fle.env.entities)": [[6, "fle.env.entities.Direction", false]], "direction (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.direction", false]], "direction (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.direction", false]], "direction (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.direction", false]], "directioninternal (class in fle.env.instance)": [[9, "fle.env.instance.DirectionInternal", false]], "discharging (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.DISCHARGING", false]], "distance() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.distance", false]], "down (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.DOWN", false]], "down (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.DOWN", false]], "down() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.down", false]], "drain (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.drain", false]], "drop_position (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.drop_position", false]], "drop_position (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.drop_position", false]], "duration (fle.commons.models.timingmetrics property)": [[5, "fle.commons.models.TimingMetrics.duration", false]], "dynamic_profit_multiplier (fle.commons.models.profitconfig attribute)": [[5, "fle.commons.models.ProfitConfig.dynamic_profit_multiplier", false]], "east (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.EAST", false]], "east (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.EAST", false]], "electric (class in fle.env.entities)": [[6, "fle.env.entities.Electric", false]], "electric_output_flow_limit (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.electric_output_flow_limit", false]], "electrical_id (fle.env.entities.electric attribute)": [[6, "fle.env.entities.Electric.electrical_id", false]], "electricalproducer (class in fle.env.entities)": [[6, "fle.env.entities.ElectricalProducer", false]], "electricenergy (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEnergy", false]], "electricenergy2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEnergy2", false]], "electricengineering (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEngineering", false]], "electricengineunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricEngineUnit", false]], "electricfurnace (class in fle.env.entities)": [[6, "fle.env.entities.ElectricFurnace", false]], "electricfurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricFurnace", false]], "electricity (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ELECTRICITY", false]], "electricitygroup (class in fle.env.entities)": [[6, "fle.env.entities.ElectricityGroup", false]], "electricitygroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricityGroup", false]], "electricitypole (class in fle.env.entities)": [[6, "fle.env.entities.ElectricityPole", false]], "electricminingdrill (class in fle.env.entities)": [[6, "fle.env.entities.ElectricMiningDrill", false]], "electricminingdrill (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricMiningDrill", false]], "electroniccircuit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectronicCircuit", false]], "electronics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Electronics", false]], "empty (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.EMPTY", false]], "emptybarrel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.EmptyBarrel", false]], "emptycrudeoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyCrudeOilBarrel", false]], "emptyheavyoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyHeavyOilBarrel", false]], "emptylightoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyLightOilBarrel", false]], "emptylubricantbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyLubricantBarrel", false]], "emptypetroleumgasbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyPetroleumGasBarrel", false]], "emptysulfuricacidbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptySulfuricAcidBarrel", false]], "emptywaterbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyWaterBarrel", false]], "enabled (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.enabled", false]], "enabled (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.enabled", false]], "end_position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.end_position", false]], "end_time (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.end_time", false]], "energy (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.energy", false], [13, "fle.env.entities.Entity.energy", false]], "energy (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.energy", false]], "energy_source (fle.env.entities.accumulator attribute)": [[6, "fle.env.entities.Accumulator.energy_source", false]], "energy_source (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.energy_source", false]], "energyshield (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.EnergyShield", false]], "energyshield2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.EnergyShield2", false]], "energysource (class in fle.env.entities)": [[6, "fle.env.entities.EnergySource", false]], "engineunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.EngineUnit", false]], "enhance_response_with_task_output() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.enhance_response_with_task_output", false]], "enhance_response_with_task_output() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.enhance_response_with_task_output", false]], "enhance_response_with_task_output() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.enhance_response_with_task_output", false]], "enter_loop() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.enter_loop", false]], "entities (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.entities", false]], "entities (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.entities", false]], "entities (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ENTITIES", false]], "entities (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.entities", false]], "entity (class in fle.env.entities)": [[6, "fle.env.entities.Entity", false], [13, "fle.env.entities.Entity", false]], "entitycore (class in fle.env.entities)": [[6, "fle.env.entities.EntityCore", false]], "entitygroup (class in fle.env.entities)": [[6, "fle.env.entities.EntityGroup", false]], "entityinfo (class in fle.env.entities)": [[6, "fle.env.entities.EntityInfo", false]], "entitystatus (class in fle.env.entities)": [[6, "fle.env.entities.EntityStatus", false]], "error (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.error", false]], "eval() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval", false], [9, "fle.env.instance.FactorioInstance.eval", false]], "eval_with_error() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval_with_error", false], [9, "fle.env.instance.FactorioInstance.eval_with_error", false]], "eval_with_timeout() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.eval_with_timeout", false]], "execute_body() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.execute_body", false]], "execute_node() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.execute_node", false]], "exit_loop() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.exit_loop", false]], "expressinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressInserter", false]], "expresssplitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressSplitter", false]], "expresstransportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressTransportBelt", false]], "expressundergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressUndergroundBelt", false]], "factorioinstance (class in fle.env.instance)": [[1, "fle.env.instance.FactorioInstance", false], [9, "fle.env.instance.FactorioInstance", false]], "factorionamespace (class in fle.env.namespace)": [[10, "fle.env.namespace.FactorioNamespace", false]], "fastinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastInserter", false]], "fastinserter (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.FastInserter", false]], "fastsplitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastSplitter", false]], "fasttransportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastTransportBelt", false]], "fastundergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastUndergroundBelt", false]], "fillcrudeoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillCrudeOilBarrel", false]], "fillheavyoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillHeavyOilBarrel", false]], "filllightoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillLightOilBarrel", false]], "filllubricantbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillLubricantBarrel", false]], "fillpetroleumgasbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillPetroleumGasBarrel", false]], "fillsulfuricacidbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillSulfuricAcidBarrel", false]], "fillwaterbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillWaterBarrel", false]], "filter (fle.env.entities.filtered attribute)": [[6, "fle.env.entities.Filtered.filter", false]], "filter_serializable_vars() (in module fle.commons.models)": [[5, "fle.commons.models.filter_serializable_vars", false]], "filtered (class in fle.env.entities)": [[6, "fle.env.entities.Filtered", false]], "filterinserter (class in fle.env.entities)": [[6, "fle.env.entities.FilterInserter", false]], "filterinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FilterInserter", false]], "firearmmagazine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FirearmMagazine", false]], "first_namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.first_namespace", false], [9, "fle.env.instance.FactorioInstance.first_namespace", false]], "fle.agents.models": [[4, "module-fle.agents.models", false]], "fle.commons.models": [[5, "module-fle.commons.models", false]], "fle.env.entities": [[6, "module-fle.env.entities", false]], "fle.env.game_types": [[7, "module-fle.env.game_types", false]], "fle.env.gym_env": [[8, "module-fle.env.gym_env", false]], "fle.env.instance": [[9, "module-fle.env.instance", false]], "fle.env.namespace": [[10, "module-fle.env.namespace", false]], "fle.eval.algorithms": [[11, "module-fle.eval.algorithms", false]], "fle.eval.tasks": [[12, "module-fle.eval.tasks", false]], "flow_rate (fle.env.entities.electricitypole attribute)": [[6, "fle.env.entities.ElectricityPole.flow_rate", false]], "flow_rate (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.flow_rate", false]], "flows (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.flows", false]], "flows (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.flows", false]], "fluid (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.fluid", false]], "fluid_box (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.fluid_box", false]], "fluid_box (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.fluid_box", false]], "fluid_ingredient_shortage (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FLUID_INGREDIENT_SHORTAGE", false]], "fluid_systems (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.fluid_systems", false]], "fluid_systems (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.fluid_systems", false]], "fluidbox_id (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.fluidbox_id", false]], "fluidhandler (class in fle.env.entities)": [[6, "fle.env.entities.FluidHandler", false]], "flyingrobotframe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FlyingRobotFrame", false]], "frequency_penalty (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.frequency_penalty", false]], "from_dict() (fle.commons.models.productionflows class method)": [[5, "fle.commons.models.ProductionFlows.from_dict", false]], "from_factorio_direction() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.from_factorio_direction", false]], "from_instance() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.from_instance", false]], "from_int() (fle.env.entities.entitystatus class method)": [[6, "fle.env.entities.EntityStatus.from_int", false]], "from_row() (fle.commons.models.program class method)": [[5, "fle.commons.models.Program.from_row", false]], "from_string() (fle.env.entities.direction class method)": [[6, "fle.env.entities.Direction.from_string", false]], "from_string() (fle.env.entities.entitystatus class method)": [[6, "fle.env.entities.EntityStatus.from_string", false]], "fuel (fle.env.entities.burnertype attribute)": [[6, "fle.env.entities.BurnerType.fuel", false]], "full_burnt_result_output (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULL_BURNT_RESULT_OUTPUT", false]], "full_output (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULL_OUTPUT", false]], "fully_charged (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULLY_CHARGED", false]], "furnace (class in fle.env.entities)": [[6, "fle.env.entities.Furnace", false]], "furnace_result (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.furnace_result", false]], "furnace_result (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.furnace_result", false]], "furnace_source (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.furnace_source", false]], "furnace_source (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.furnace_source", false]], "game_state (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.game_state", false]], "gamecontrol (class in fle.env.instance)": [[9, "fle.env.instance.GameControl", false]], "gamestate (class in fle.commons.models)": [[5, "fle.commons.models.GameState", false]], "gate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Gate", false]], "generationparameters (class in fle.commons.models)": [[5, "fle.commons.models.GenerationParameters", false]], "generator (class in fle.env.entities)": [[6, "fle.env.entities.Generator", false]], "get() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.get", false]], "get_agent_instructions() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.get_agent_instructions", false]], "get_elapsed_ticks() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false], [9, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false]], "get_elapsed_ticks() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.get_elapsed_ticks", false]], "get_entities() (fle.env.entities.inspectionresults method)": [[6, "fle.env.entities.InspectionResults.get_entities", false]], "get_entity() (fle.env.entities.inspectionresults method)": [[6, "fle.env.entities.InspectionResults.get_entity", false]], "get_functions() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.get_functions", false]], "get_messages() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.get_messages", false]], "get_new_flows() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.get_new_flows", false]], "get_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_speed", false], [9, "fle.env.instance.FactorioInstance.get_speed", false]], "get_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.get_speed", false]], "get_step() (fle.commons.models.program method)": [[5, "fle.commons.models.Program.get_step", false]], "get_system_prompt() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_system_prompt", false], [9, "fle.env.instance.FactorioInstance.get_system_prompt", false]], "get_uct() (fle.commons.models.program method)": [[5, "fle.commons.models.Program.get_uct", false]], "get_warnings() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_warnings", false], [9, "fle.env.instance.FactorioInstance.get_warnings", false]], "grenade (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Grenade", false]], "grenades (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Grenades", false]], "grid (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.GRID", false]], "gunturret (class in fle.env.entities)": [[6, "fle.env.entities.GunTurret", false]], "gunturret (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.GunTurret", false]], "handle_break() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.handle_break", false]], "handle_continue() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.handle_continue", false]], "harvested (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.harvested", false]], "health (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.health", false], [13, "fle.env.entities.Entity.health", false]], "heatexchanger (class in fle.env.entities)": [[6, "fle.env.entities.HeatExchanger", false]], "heatexchanger (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeatExchanger", false]], "heatpipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeatPipe", false]], "heavyoil (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeavyOil", false]], "heavyoilcracking (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.HeavyOilCracking", false]], "height (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.height", false]], "height (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.height", false]], "height (fle.env.entities.entity property)": [[6, "fle.env.entities.Entity.height", false], [13, "fle.env.entities.Entity.height", false]], "height (fle.env.game_types.prototype property)": [[7, "fle.env.game_types.Prototype.HEIGHT", false]], "height() (fle.env.entities.boundingbox method)": [[6, "fle.env.entities.BoundingBox.height", false]], "holdout_value (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.holdout_value", false]], "id (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.id", false]], "id (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.id", false], [13, "fle.env.entities.Entity.id", false]], "id (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.id", false]], "indexedposition (class in fle.env.entities)": [[6, "fle.env.entities.IndexedPosition", false]], "ingredient (class in fle.env.entities)": [[6, "fle.env.entities.Ingredient", false]], "ingredients (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.ingredients", false]], "ingredients (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.ingredients", false]], "initialise() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.initialise", false], [9, "fle.env.instance.FactorioInstance.initialise", false]], "input (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.input", false]], "input_connection_points (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.input_connection_points", false]], "input_flow_limit (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.input_flow_limit", false]], "input_fluids (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.input_fluids", false]], "input_position (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.input_position", false]], "input_positions (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.input_positions", false]], "inputs (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.inputs", false]], "inserter (class in fle.env.entities)": [[6, "fle.env.entities.Inserter", false]], "inserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Inserter", false]], "inspectionresults (class in fle.env.entities)": [[6, "fle.env.entities.InspectionResults", false]], "instance (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.instance", false]], "inventories (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.inventories", false]], "inventory (class in fle.env.entities)": [[6, "fle.env.entities.Inventory", false]], "inventory (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.inventory", false]], "inventory (fle.env.entities.chest attribute)": [[6, "fle.env.entities.Chest.inventory", false]], "inventory (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.inventory", false]], "inventory (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.inventory", false]], "ironchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronChest", false]], "irongearwheel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronGearWheel", false]], "ironore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronOre", false]], "ironore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.IronOre", false]], "ironore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.IronOre", false]], "ironplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronPlate", false]], "ironstick (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronStick", false]], "is_close() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.is_close", false]], "is_input (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.is_input", false]], "is_multiagent (fle.commons.models.gamestate property)": [[5, "fle.commons.models.GameState.is_multiagent", false]], "is_multiagent (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.is_multiagent", false], [9, "fle.env.instance.FactorioInstance.is_multiagent", false]], "is_paused() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.is_paused", false]], "is_source (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.is_source", false]], "is_terminus (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.is_terminus", false]], "is_valid() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.is_valid", false]], "item_ingredient_shortage (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.ITEM_INGREDIENT_SHORTAGE", false]], "items() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.items", false]], "keys() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.keys", false]], "kills (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.kills", false]], "lab (class in fle.env.entities)": [[6, "fle.env.entities.Lab", false]], "lab (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Lab", false]], "lab_input (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.lab_input", false]], "lab_modules (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.lab_modules", false]], "labels (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.LABELS", false]], "landfill (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Landfill", false]], "launch_count (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.launch_count", false]], "launch_progress (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.launch_progress", false]], "launching_rocket (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LAUNCHING_ROCKET", false]], "layer (class in fle.env.entities)": [[6, "fle.env.entities.Layer", false]], "left (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.LEFT", false]], "left (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.LEFT", false]], "left() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.left", false]], "left_bottom (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.left_bottom", false]], "left_top (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.left_top", false]], "level (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.level", false]], "lightoil (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LightOil", false]], "lightoilcracking (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.LightOilCracking", false]], "load() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.load", false]], "load_messages() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.load_messages", false]], "log() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.log", false]], "logistics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics", false]], "logistics2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics2", false]], "logistics3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics3", false]], "logisticssciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LogisticsSciencePack", false]], "logisticssciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.LogisticsSciencePack", false]], "logit_bias (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.logit_bias", false]], "longhandedinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LongHandedInserter", false]], "loopcontext (class in fle.env.namespace)": [[10, "fle.env.namespace.LoopContext", false]], "low_input_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_INPUT_FLUID", false]], "low_power (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_POWER", false]], "low_temperature (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_TEMPERATURE", false]], "lowdensitystructure (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LowDensityStructure", false]], "lowdensitystructure (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.LowDensityStructure", false]], "lubricant (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Lubricant", false]], "lubricant (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Lubricant", false]], "magazine_size (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.magazine_size", false]], "max_static_unit_profit_cap (fle.commons.models.profitconfig attribute)": [[5, "fle.commons.models.ProfitConfig.max_static_unit_profit_cap", false]], "max_tokens (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.max_tokens", false]], "mediumelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.MediumElectricPole", false]], "message (class in fle.commons.models)": [[5, "fle.commons.models.Message", false]], "messages (fle.commons.models.conversation attribute)": [[5, "fle.commons.models.Conversation.messages", false]], "meta (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.meta", false]], "meta (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.meta", false]], "metadata (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.metadata", false]], "metadata (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.metadata", false]], "metadata (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.metadata", false]], "militaryscience (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.MilitaryScience", false]], "militarysciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.MilitarySciencePack", false]], "militarysciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.MilitarySciencePack", false]], "miningdrill (class in fle.env.entities)": [[6, "fle.env.entities.MiningDrill", false]], "missing_required_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.MISSING_REQUIRED_FLUID", false]], "missing_science_packs (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.MISSING_SCIENCE_PACKS", false]], "model (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.model", false]], "model (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.model", false]], "model_config (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.model_config", false]], "model_config (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.model_config", false]], "model_config (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.model_config", false]], "model_config (fle.commons.models.conversation attribute)": [[5, "fle.commons.models.Conversation.model_config", false]], "model_config (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.model_config", false]], "model_config (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.model_config", false]], "model_config (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.model_config", false]], "model_config (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.model_config", false]], "model_config (fle.env.entities.accumulator attribute)": [[6, "fle.env.entities.Accumulator.model_config", false]], "model_config (fle.env.entities.advancedassemblingmachine attribute)": [[6, "fle.env.entities.AdvancedAssemblingMachine.model_config", false]], "model_config (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.model_config", false]], "model_config (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.model_config", false]], "model_config (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.model_config", false]], "model_config (fle.env.entities.boiler attribute)": [[6, "fle.env.entities.Boiler.model_config", false]], "model_config (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.model_config", false]], "model_config (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.model_config", false]], "model_config (fle.env.entities.burnerinserter attribute)": [[6, "fle.env.entities.BurnerInserter.model_config", false]], "model_config (fle.env.entities.burnerminingdrill attribute)": [[6, "fle.env.entities.BurnerMiningDrill.model_config", false]], "model_config (fle.env.entities.burnertype attribute)": [[6, "fle.env.entities.BurnerType.model_config", false]], "model_config (fle.env.entities.chemicalplant attribute)": [[6, "fle.env.entities.ChemicalPlant.model_config", false]], "model_config (fle.env.entities.chest attribute)": [[6, "fle.env.entities.Chest.model_config", false]], "model_config (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.model_config", false]], "model_config (fle.env.entities.electric attribute)": [[6, "fle.env.entities.Electric.model_config", false]], "model_config (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.model_config", false]], "model_config (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.model_config", false]], "model_config (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.model_config", false]], "model_config (fle.env.entities.electricitypole attribute)": [[6, "fle.env.entities.ElectricityPole.model_config", false]], "model_config (fle.env.entities.electricminingdrill attribute)": [[6, "fle.env.entities.ElectricMiningDrill.model_config", false]], "model_config (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.model_config", false]], "model_config (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.model_config", false], [13, "fle.env.entities.Entity.model_config", false]], "model_config (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.model_config", false]], "model_config (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.model_config", false]], "model_config (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.model_config", false]], "model_config (fle.env.entities.filtered attribute)": [[6, "fle.env.entities.Filtered.model_config", false]], "model_config (fle.env.entities.filterinserter attribute)": [[6, "fle.env.entities.FilterInserter.model_config", false]], "model_config (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.model_config", false]], "model_config (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.model_config", false]], "model_config (fle.env.entities.generator attribute)": [[6, "fle.env.entities.Generator.model_config", false]], "model_config (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.model_config", false]], "model_config (fle.env.entities.heatexchanger attribute)": [[6, "fle.env.entities.HeatExchanger.model_config", false]], "model_config (fle.env.entities.indexedposition attribute)": [[6, "fle.env.entities.IndexedPosition.model_config", false]], "model_config (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.model_config", false]], "model_config (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.model_config", false]], "model_config (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.model_config", false]], "model_config (fle.env.entities.inventory attribute)": [[6, "fle.env.entities.Inventory.model_config", false]], "model_config (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.model_config", false]], "model_config (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.model_config", false]], "model_config (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.model_config", false]], "model_config (fle.env.entities.offshorepump attribute)": [[6, "fle.env.entities.OffshorePump.model_config", false]], "model_config (fle.env.entities.oilrefinery attribute)": [[6, "fle.env.entities.OilRefinery.model_config", false]], "model_config (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.model_config", false]], "model_config (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.model_config", false]], "model_config (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.model_config", false]], "model_config (fle.env.entities.product attribute)": [[6, "fle.env.entities.Product.model_config", false]], "model_config (fle.env.entities.pump attribute)": [[6, "fle.env.entities.Pump.model_config", false]], "model_config (fle.env.entities.pumpjack attribute)": [[6, "fle.env.entities.PumpJack.model_config", false]], "model_config (fle.env.entities.rail attribute)": [[6, "fle.env.entities.Rail.model_config", false]], "model_config (fle.env.entities.reactor attribute)": [[6, "fle.env.entities.Reactor.model_config", false]], "model_config (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.model_config", false]], "model_config (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.model_config", false]], "model_config (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.model_config", false]], "model_config (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.model_config", false]], "model_config (fle.env.entities.solarpanel attribute)": [[6, "fle.env.entities.SolarPanel.model_config", false]], "model_config (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.model_config", false]], "model_config (fle.env.entities.staticentity attribute)": [[6, "fle.env.entities.StaticEntity.model_config", false]], "model_config (fle.env.entities.storagetank attribute)": [[6, "fle.env.entities.StorageTank.model_config", false]], "model_config (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.model_config", false]], "model_config (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.model_config", false]], "model_config (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.model_config", false]], "model_config (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.model_config", false]], "model_post_init() (fle.env.entities.accumulator method)": [[6, "fle.env.entities.Accumulator.model_post_init", false]], "model_post_init() (fle.env.entities.advancedassemblingmachine method)": [[6, "fle.env.entities.AdvancedAssemblingMachine.model_post_init", false]], "model_post_init() (fle.env.entities.assemblingmachine method)": [[6, "fle.env.entities.AssemblingMachine.model_post_init", false]], "model_post_init() (fle.env.entities.boiler method)": [[6, "fle.env.entities.Boiler.model_post_init", false]], "model_post_init() (fle.env.entities.burnerinserter method)": [[6, "fle.env.entities.BurnerInserter.model_post_init", false]], "model_post_init() (fle.env.entities.burnerminingdrill method)": [[6, "fle.env.entities.BurnerMiningDrill.model_post_init", false]], "model_post_init() (fle.env.entities.chemicalplant method)": [[6, "fle.env.entities.ChemicalPlant.model_post_init", false]], "model_post_init() (fle.env.entities.chest method)": [[6, "fle.env.entities.Chest.model_post_init", false]], "model_post_init() (fle.env.entities.electricfurnace method)": [[6, "fle.env.entities.ElectricFurnace.model_post_init", false]], "model_post_init() (fle.env.entities.electricitypole method)": [[6, "fle.env.entities.ElectricityPole.model_post_init", false]], "model_post_init() (fle.env.entities.electricminingdrill method)": [[6, "fle.env.entities.ElectricMiningDrill.model_post_init", false]], "model_post_init() (fle.env.entities.filterinserter method)": [[6, "fle.env.entities.FilterInserter.model_post_init", false]], "model_post_init() (fle.env.entities.furnace method)": [[6, "fle.env.entities.Furnace.model_post_init", false]], "model_post_init() (fle.env.entities.generator method)": [[6, "fle.env.entities.Generator.model_post_init", false]], "model_post_init() (fle.env.entities.gunturret method)": [[6, "fle.env.entities.GunTurret.model_post_init", false]], "model_post_init() (fle.env.entities.heatexchanger method)": [[6, "fle.env.entities.HeatExchanger.model_post_init", false]], "model_post_init() (fle.env.entities.inserter method)": [[6, "fle.env.entities.Inserter.model_post_init", false]], "model_post_init() (fle.env.entities.lab method)": [[6, "fle.env.entities.Lab.model_post_init", false]], "model_post_init() (fle.env.entities.offshorepump method)": [[6, "fle.env.entities.OffshorePump.model_post_init", false]], "model_post_init() (fle.env.entities.oilrefinery method)": [[6, "fle.env.entities.OilRefinery.model_post_init", false]], "model_post_init() (fle.env.entities.pipe method)": [[6, "fle.env.entities.Pipe.model_post_init", false]], "model_post_init() (fle.env.entities.pump method)": [[6, "fle.env.entities.Pump.model_post_init", false]], "model_post_init() (fle.env.entities.pumpjack method)": [[6, "fle.env.entities.PumpJack.model_post_init", false]], "model_post_init() (fle.env.entities.rail method)": [[6, "fle.env.entities.Rail.model_post_init", false]], "model_post_init() (fle.env.entities.reactor method)": [[6, "fle.env.entities.Reactor.model_post_init", false]], "model_post_init() (fle.env.entities.rocketsilo method)": [[6, "fle.env.entities.RocketSilo.model_post_init", false]], "model_post_init() (fle.env.entities.solarpanel method)": [[6, "fle.env.entities.SolarPanel.model_post_init", false]], "model_post_init() (fle.env.entities.splitter method)": [[6, "fle.env.entities.Splitter.model_post_init", false]], "model_post_init() (fle.env.entities.storagetank method)": [[6, "fle.env.entities.StorageTank.model_post_init", false]], "model_post_init() (fle.env.entities.transportbelt method)": [[6, "fle.env.entities.TransportBelt.model_post_init", false]], "model_post_init() (fle.env.entities.undergroundbelt method)": [[6, "fle.env.entities.UndergroundBelt.model_post_init", false]], "modulararmor (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ModularArmor", false]], "module": [[4, "module-fle.agents.models", false], [5, "module-fle.commons.models", false], [6, "module-fle.env.entities", false], [7, "module-fle.env.game_types", false], [8, "module-fle.env.gym_env", false], [9, "module-fle.env.instance", false], [10, "module-fle.env.namespace", false], [11, "module-fle.eval.algorithms", false], [12, "module-fle.eval.tasks", false]], "multifluidhandler (class in fle.env.entities)": [[6, "fle.env.entities.MultiFluidHandler", false]], "n (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.n", false]], "name (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.name", false]], "name (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.name", false]], "name (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.name", false]], "name (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.name", false]], "name (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.name", false]], "name (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.name", false]], "name (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.name", false]], "name (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.name", false]], "name (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.name", false]], "name (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.name", false]], "name (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.name", false]], "name (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.name", false]], "name (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.name", false]], "namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.namespace", false], [9, "fle.env.instance.FactorioInstance.namespace", false]], "namespace_class (fle.env.instance.factorioinstance attribute)": [[1, "fle.env.instance.FactorioInstance.namespace_class", false], [9, "fle.env.instance.FactorioInstance.namespace_class", false]], "namespaces (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.namespaces", false]], "natural (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.NATURAL", false]], "neighbours (fle.env.entities.staticentity attribute)": [[6, "fle.env.entities.StaticEntity.neighbours", false]], "next_clockwise() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.next_clockwise", false]], "next_counterclockwise() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.next_counterclockwise", false]], "nightvision (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.NightVision", false]], "no_ammo (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_AMMO", false]], "no_fuel (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_FUEL", false]], "no_ingredients (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_INGREDIENTS", false]], "no_input_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_INPUT_FLUID", false]], "no_minable_resources (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_MINABLE_RESOURCES", false]], "no_power (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_POWER", false]], "no_recipe (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_RECIPE", false]], "no_research_in_progress (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_RESEARCH_IN_PROGRESS", false]], "none (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.NONE", false]], "normal (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NORMAL", false]], "north (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.NORTH", false]], "north (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.NORTH", false]], "not_connected (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_CONNECTED", false]], "not_connected_to_rail (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_CONNECTED_TO_RAIL", false]], "not_plugged_in_electric_network (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_PLUGGED_IN_ELECTRIC_NETWORK", false]], "nuclearfuelreprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.NuclearFuelReprocessing", false]], "nuclearpower (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.NuclearPower", false]], "nuclearreactor (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.NuclearReactor", false]], "num_agents (fle.commons.models.gamestate property)": [[5, "fle.commons.models.GameState.num_agents", false]], "offshorepump (class in fle.env.entities)": [[6, "fle.env.entities.OffshorePump", false]], "offshorepump (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.OffshorePump", false]], "oilprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.OilProcessing", false]], "oilrefinery (class in fle.env.entities)": [[6, "fle.env.entities.OilRefinery", false]], "oilrefinery (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.OilRefinery", false]], "operation_name (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.operation_name", false]], "opposite() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.opposite", false]], "origin (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ORIGIN", false]], "output (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.output", false]], "output_connection_points (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.output_connection_points", false]], "output_flow_limit (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.output_flow_limit", false]], "output_fluids (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.output_fluids", false]], "output_position (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.output_position", false]], "output_positions (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.output_positions", false]], "outputs (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.outputs", false]], "parent_id (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.parent_id", false]], "parse() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.parse", false]], "parse_agent_messages() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.parse_agent_messages", false]], "parse_args() (fle.env.entities.position class method)": [[6, "fle.env.entities.Position.parse_args", false]], "parse_raw() (fle.commons.models.conversation class method)": [[5, "fle.commons.models.Conversation.parse_raw", false]], "parse_raw() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.parse_raw", false]], "pause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.pause", false], [9, "fle.env.instance.FactorioInstance.pause", false]], "pause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.pause", false]], "pause_at_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.pause_at_speed", false]], "payload (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.payload", false]], "petroleumgas (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PetroleumGas", false]], "pickup_position (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.pickup_position", false]], "piercingroundsmagazine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PiercingRoundsMagazine", false]], "pipe (class in fle.env.entities)": [[6, "fle.env.entities.Pipe", false]], "pipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Pipe", false]], "pipegroup (class in fle.env.entities)": [[6, "fle.env.entities.PipeGroup", false]], "pipegroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PipeGroup", false]], "pipes (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.pipes", false]], "plasticbar (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PlasticBar", false]], "plastics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Plastics", false]], "player (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.PLAYER", false]], "player_position (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.player_position", false]], "poles (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.poles", false]], "position (class in fle.env.entities)": [[6, "fle.env.entities.Position", false]], "position (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.position", false]], "position (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.position", false]], "position (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.position", false]], "position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.position", false]], "powerarmor (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.PowerArmor", false]], "powerarmor2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.PowerArmor2", false]], "preparing_rocket_for_launch (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.PREPARING_ROCKET_FOR_LAUNCH", false]], "prerequisites (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.prerequisites", false]], "presence_penalty (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.presence_penalty", false]], "price_list (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.price_list", false]], "probability (fle.env.entities.product attribute)": [[6, "fle.env.entities.Product.probability", false]], "processingunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProcessingUnit", false]], "product (class in fle.env.entities)": [[6, "fle.env.entities.Product", false]], "production (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.production", false]], "productionflows (class in fle.commons.models)": [[5, "fle.commons.models.ProductionFlows", false]], "productionsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductionSciencePack", false]], "productionsciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductionSciencePack", false]], "productivitymodule (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule", false]], "productivitymodule (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule", false]], "productivitymodule2 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule2", false]], "productivitymodule2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule2", false]], "productivitymodule3 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule3", false]], "productivitymodule3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule3", false]], "products (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.products", false]], "profitconfig (class in fle.commons.models)": [[5, "fle.commons.models.ProfitConfig", false]], "program (class in fle.commons.models)": [[5, "fle.commons.models.Program", false]], "program_id (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.program_id", false]], "progress (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.progress", false]], "prompt_token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.prompt_token_usage", false]], "prototype (class in fle.env.game_types)": [[7, "fle.env.game_types.Prototype", false]], "prototype (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.prototype", false], [13, "fle.env.entities.Entity.prototype", false]], "prototypemetaclass (class in fle.env.game_types)": [[7, "fle.env.game_types.PrototypeMetaclass", false]], "pump (class in fle.env.entities)": [[6, "fle.env.entities.Pump", false]], "pump (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Pump", false]], "pumpjack (class in fle.env.entities)": [[6, "fle.env.entities.PumpJack", false]], "pumpjack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PumpJack", false]], "quantity (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.quantity", false]], "radar (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Radar", false]], "radius (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.radius", false]], "rail (class in fle.env.entities)": [[6, "fle.env.entities.Rail", false]], "rail (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Rail", false]], "railwaytransportation (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RailwayTransportation", false]], "raw_reward (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.raw_reward", false]], "reactor (class in fle.env.entities)": [[6, "fle.env.entities.Reactor", false]], "reason (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.reason", false]], "recipe (class in fle.env.entities)": [[6, "fle.env.entities.Recipe", false]], "recipe (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.recipe", false]], "recipename (class in fle.env.game_types)": [[7, "fle.env.game_types.RecipeName", false]], "reconstruct() (fle.commons.models.serializablefunction static method)": [[5, "fle.commons.models.SerializableFunction.reconstruct", false]], "reload_time (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.reload_time", false]], "research (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.research", false]], "research (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.research", false]], "research_progress (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.research_progress", false]], "research_queue (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.research_queue", false]], "research_unit_count (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.research_unit_count", false]], "research_unit_energy (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.research_unit_energy", false]], "researched (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.researched", false]], "researchspeed (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ResearchSpeed", false]], "researchstate (class in fle.commons.models)": [[5, "fle.commons.models.ResearchState", false]], "reset() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.reset", false], [1, "id0", false], [9, "fle.env.instance.FactorioInstance.reset", false]], "reset() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.reset", false]], "reset_to_defaults() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.reset_to_defaults", false]], "resource (class in fle.env.game_types)": [[7, "fle.env.game_types.Resource", false]], "resourcename (class in fle.env.game_types)": [[7, "fle.env.game_types.ResourceName", false]], "resourcepatch (class in fle.env.entities)": [[6, "fle.env.entities.ResourcePatch", false]], "resources (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.RESOURCES", false]], "resources (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.resources", false]], "response (class in fle.agents.models)": [[4, "fle.agents.models.Response", false]], "response (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.response", false]], "response (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.response", false]], "right (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.RIGHT", false]], "right (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.RIGHT", false]], "right() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.right", false]], "right_bottom (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.right_bottom", false]], "right_top (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.right_top", false]], "robotics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Robotics", false]], "rocket (class in fle.env.entities)": [[6, "fle.env.entities.Rocket", false]], "rocket (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Rocket", false]], "rocket_inventory (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_inventory", false]], "rocket_parts (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_parts", false]], "rocket_progress (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_progress", false]], "rocketcontrol (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketControl", false]], "rocketcontrolunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketControlUnit", false]], "rocketfuel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketFuel", false]], "rocketfuel (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketFuel", false]], "rocketpart (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketPart", false]], "rocketsilo (class in fle.env.entities)": [[6, "fle.env.entities.RocketSilo", false]], "rocketsilo (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketSilo", false]], "rocketsilotechnology (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketSiloTechnology", false]], "rocks (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ROCKS", false]], "role (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.role", false]], "runtime_error (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.RUNTIME_ERROR", false]], "satellite (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Satellite", false]], "score (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.score", false]], "serializablefunction (class in fle.commons.models)": [[5, "fle.commons.models.SerializableFunction", false]], "serialize_model() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.serialize_model", false]], "set_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed", false], [9, "fle.env.instance.FactorioInstance.set_speed", false]], "set_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.set_speed", false]], "set_speed_and_unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false], [9, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false]], "set_speed_and_unpause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.set_speed_and_unpause", false]], "set_system_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.set_system_message", false]], "setup() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.setup", false]], "setup_instance() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.setup_instance", false]], "setup_instance() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.setup_instance", false]], "setup_instance() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.setup_instance", false]], "setup_instance() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.setup_instance", false]], "size (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.size", false]], "smallelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SmallElectricPole", false]], "smalllamp (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SmallLamp", false]], "solarenergy (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SolarEnergy", false]], "solarpanel (class in fle.env.entities)": [[6, "fle.env.entities.SolarPanel", false]], "solarpanel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SolarPanel", false]], "solidfuel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SolidFuel", false]], "solidfuelfromheavyoil (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromHeavyOil", false]], "solidfuelfromlightoil (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromLightOil", false]], "solidfuelfrompetroleumgas (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromPetroleumGas", false]], "south (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.SOUTH", false]], "south (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.SOUTH", false]], "spacescience (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SpaceScience", false]], "spacesciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SpaceSciencePack", false]], "splitter (class in fle.env.entities)": [[6, "fle.env.entities.Splitter", false]], "splitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Splitter", false]], "stackfilterinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StackFilterInserter", false]], "stackinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StackInserter", false]], "stackinserter (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserter", false]], "stackinsertercapacity1 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserterCapacity1", false]], "stackinsertercapacity2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserterCapacity2", false]], "start_position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.start_position", false]], "start_time (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.start_time", false]], "state (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.state", false]], "static_items (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.static_items", false]], "staticentity (class in fle.env.entities)": [[6, "fle.env.entities.StaticEntity", false]], "status (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.status", false], [13, "fle.env.entities.Entity.status", false]], "status (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.status", false]], "status (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.status", false]], "steam_output_point (fle.env.entities.boiler attribute)": [[6, "fle.env.entities.Boiler.steam_output_point", false]], "steamengine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteamEngine", false]], "steelchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelChest", false]], "steelfurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelFurnace", false]], "steelplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelPlate", false]], "steelprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SteelProcessing", false]], "step (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.step", false]], "step (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.step", false]], "stone (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Stone", false]], "stone (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Stone", false]], "stone (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Stone", false]], "stonebrick (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneBrick", false]], "stonefurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneFurnace", false]], "stonewall (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneWall", false]], "stop_sequences (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.stop_sequences", false]], "storagetank (class in fle.env.entities)": [[6, "fle.env.entities.StorageTank", false]], "storagetank (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StorageTank", false]], "storagetanks (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StorageTanks", false]], "success (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.SUCCESS", false]], "success (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.success", false]], "sulfur (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Sulfur", false]], "sulfuricacid (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SulfuricAcid", false]], "sulfuricacid (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SulfuricAcid", false]], "sulfurprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SulfurProcessing", false]], "task (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.task", false]], "taskabc (class in fle.eval.tasks)": [[12, "fle.eval.tasks.TaskABC", false]], "taskfactory (class in fle.eval.tasks)": [[12, "fle.eval.tasks.TaskFactory", false]], "taskresponse (class in fle.agents.models)": [[4, "fle.agents.models.TaskResponse", false]], "technologies (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.technologies", false]], "technology (class in fle.env.game_types)": [[7, "fle.env.game_types.Technology", false]], "technologystate (class in fle.commons.models)": [[5, "fle.commons.models.TechnologyState", false]], "temperature (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.temperature", false]], "throughputtask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.ThroughputTask", false]], "ticks (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.ticks", false]], "ticks (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.ticks", false]], "tile_dimensions (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.tile_dimensions", false], [13, "fle.env.entities.Entity.tile_dimensions", false]], "tile_height (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.tile_height", false]], "tile_width (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.tile_width", false]], "tiledimensions (class in fle.env.entities)": [[6, "fle.env.entities.TileDimensions", false]], "time_elapsed (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.time_elapsed", false]], "timeout (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.TIMEOUT", false]], "timestamp (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.timestamp", false]], "timing_metrics (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.timing_metrics", false]], "timingmetrics (class in fle.commons.models)": [[5, "fle.commons.models.TimingMetrics", false]], "to_bounding_box() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.to_bounding_box", false]], "to_dict() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.to_dict", false]], "to_dict() (fle.commons.models.timingmetrics method)": [[5, "fle.commons.models.TimingMetrics.to_dict", false]], "to_dict() (fle.env.gym_env.action.action method)": [[0, "fle.env.gym_env.action.Action.to_dict", false]], "to_factorio_direction() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.to_factorio_direction", false]], "to_instance() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.to_instance", false]], "to_raw() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.to_raw", false]], "token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.token_usage", false]], "total_duration (fle.commons.models.timingmetrics property)": [[5, "fle.commons.models.TimingMetrics.total_duration", false]], "transportbelt (class in fle.env.entities)": [[6, "fle.env.entities.TransportBelt", false]], "transportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.TransportBelt", false]], "trees (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.TREES", false]], "turret_ammo (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.turret_ammo", false]], "type (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.type", false], [13, "fle.env.entities.Entity.type", false]], "type (fle.env.entities.indexedposition attribute)": [[6, "fle.env.entities.IndexedPosition.type", false]], "type (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.type", false]], "unboundedthroughputtask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.UnboundedThroughputTask", false]], "undergroundbelt (class in fle.env.entities)": [[6, "fle.env.entities.UndergroundBelt", false]], "undergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UndergroundBelt", false]], "undergroundpipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UndergroundPipe", false]], "unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.unpause", false], [9, "fle.env.instance.FactorioInstance.unpause", false]], "unpause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.unpause", false]], "unwrap_after_deserialization() (in module fle.env.namespace)": [[10, "fle.env.namespace.unwrap_after_deserialization", false]], "up (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.UP", false]], "up (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.UP", false]], "up() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.up", false]], "uranium235 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Uranium235", false]], "uranium238 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Uranium238", false]], "uraniumfuelcell (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UraniumFuelCell", false]], "uraniumore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UraniumOre", false]], "uraniumore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.UraniumOre", false]], "uraniumore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.UraniumOre", false]], "uraniumprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.UraniumProcessing", false]], "utilitysciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UtilitySciencePack", false]], "value (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.value", false]], "values() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.values", false]], "verify() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.verify", false]], "verify() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.verify", false]], "verify() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.verify", false]], "verify() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.verify", false]], "version (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.version", false]], "version_description (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.version_description", false]], "visits (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.visits", false]], "waiting_for_source_items (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_FOR_SOURCE_ITEMS", false]], "waiting_for_space_in_destination (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_FOR_SPACE_IN_DESTINATION", false]], "waiting_to_launch_rocket (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_TO_LAUNCH_ROCKET", false]], "wallgroup (class in fle.env.entities)": [[6, "fle.env.entities.WallGroup", false]], "warning (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.warning", false]], "warnings (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.warnings", false], [13, "fle.env.entities.Entity.warnings", false]], "water (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.WATER", false]], "water (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Water", false]], "water (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Water", false]], "west (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.WEST", false]], "west (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.WEST", false]], "width (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.width", false]], "width (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.width", false]], "width (fle.env.entities.entity property)": [[6, "fle.env.entities.Entity.width", false], [13, "fle.env.entities.Entity.width", false]], "width (fle.env.game_types.prototype property)": [[7, "fle.env.game_types.Prototype.WIDTH", false]], "width() (fle.env.entities.boundingbox method)": [[6, "fle.env.entities.BoundingBox.width", false]], "wood (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Wood", false]], "wood (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Wood", false]], "woodenchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.WoodenChest", false]], "working (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WORKING", false]], "wrap_for_serialization() (in module fle.env.namespace)": [[10, "fle.env.namespace.wrap_for_serialization", false]], "x (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.x", false]], "y (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.y", false]]}, "objects": {"fle.agents": [[4, 0, 0, "-", "models"]], "fle.agents.models": [[4, 1, 1, "", "CompletionReason"], [4, 1, 1, "", "CompletionResult"], [4, 1, 1, "", "Response"], [4, 1, 1, "", "TaskResponse"]], "fle.agents.models.CompletionReason": [[4, 2, 1, "", "RUNTIME_ERROR"], [4, 2, 1, "", "SUCCESS"], [4, 2, 1, "", "TIMEOUT"]], "fle.agents.models.CompletionResult": [[4, 2, 1, "", "metadata"], [4, 2, 1, "", "model_config"], [4, 2, 1, "", "reason"], [4, 2, 1, "", "step"]], "fle.agents.models.Response": [[4, 2, 1, "", "achievements"], [4, 2, 1, "", "code"], [4, 2, 1, "", "created_at"], [4, 2, 1, "", "error"], [4, 2, 1, "", "flows"], [4, 2, 1, "", "model_config"], [4, 2, 1, "", "program_id"], [4, 2, 1, "", "response"], [4, 2, 1, "", "score"], [4, 2, 1, "", "step"], [4, 2, 1, "", "task"], [4, 2, 1, "", "ticks"]], "fle.agents.models.TaskResponse": [[4, 2, 1, "", "meta"], [4, 2, 1, "", "model_config"], [4, 2, 1, "", "success"]], "fle.commons": [[5, 0, 0, "-", "models"]], "fle.commons.models": [[5, 1, 1, "", "Conversation"], [5, 1, 1, "", "GameState"], [5, 1, 1, "", "GenerationParameters"], [5, 1, 1, "", "Message"], [5, 1, 1, "", "ProductionFlows"], [5, 1, 1, "", "ProfitConfig"], [5, 1, 1, "", "Program"], [5, 1, 1, "", "ResearchState"], [5, 1, 1, "", "SerializableFunction"], [5, 1, 1, "", "TechnologyState"], [5, 1, 1, "", "TimingMetrics"], [5, 5, 1, "", "filter_serializable_vars"]], "fle.commons.models.Conversation": [[5, 3, 1, "", "add_agent_message"], [5, 3, 1, "", "add_result"], [5, 3, 1, "", "add_user_message"], [5, 2, 1, "", "messages"], [5, 2, 1, "", "model_config"], [5, 3, 1, "", "parse_raw"], [5, 3, 1, "", "set_system_message"]], "fle.commons.models.GameState": [[5, 3, 1, "", "__init__"], [5, 2, 1, "", "agent_messages"], [5, 2, 1, "", "entities"], [5, 3, 1, "", "from_instance"], [5, 2, 1, "", "inventories"], [5, 4, 1, "", "is_multiagent"], [5, 2, 1, "", "namespaces"], [5, 4, 1, "", "num_agents"], [5, 3, 1, "", "parse"], [5, 3, 1, "", "parse_agent_messages"], [5, 3, 1, "", "parse_raw"], [5, 2, 1, "", "research"], [5, 2, 1, "", "timestamp"], [5, 3, 1, "", "to_instance"], [5, 3, 1, "", "to_raw"]], "fle.commons.models.GenerationParameters": [[5, 2, 1, "", "frequency_penalty"], [5, 2, 1, "", "logit_bias"], [5, 2, 1, "", "max_tokens"], [5, 2, 1, "", "model"], [5, 2, 1, "", "model_config"], [5, 2, 1, "", "n"], [5, 2, 1, "", "presence_penalty"], [5, 2, 1, "", "stop_sequences"], [5, 2, 1, "", "temperature"]], "fle.commons.models.Message": [[5, 2, 1, "", "content"], [5, 2, 1, "", "metadata"], [5, 2, 1, "", "model_config"], [5, 2, 1, "", "role"]], "fle.commons.models.ProductionFlows": [[5, 3, 1, "", "__init__"], [5, 2, 1, "", "crafted"], [5, 3, 1, "", "from_dict"], [5, 3, 1, "", "get_new_flows"], [5, 2, 1, "", "harvested"], [5, 2, 1, "", "input"], [5, 3, 1, "", "is_valid"], [5, 2, 1, "", "output"], [5, 2, 1, "", "price_list"], [5, 2, 1, "", "static_items"], [5, 3, 1, "", "to_dict"]], "fle.commons.models.ProfitConfig": [[5, 3, 1, "", "__init__"], [5, 2, 1, "", "dynamic_profit_multiplier"], [5, 2, 1, "", "max_static_unit_profit_cap"]], "fle.commons.models.Program": [[5, 2, 1, "", "achievements"], [5, 2, 1, "", "advantage"], [5, 2, 1, "", "code"], [5, 2, 1, "", "completion_token_usage"], [5, 2, 1, "", "conversation"], [5, 2, 1, "", "created_at"], [5, 2, 1, "", "depth"], [5, 2, 1, "", "flows"], [5, 3, 1, "", "from_row"], [5, 3, 1, "", "get_step"], [5, 3, 1, "", "get_uct"], [5, 2, 1, "", "holdout_value"], [5, 2, 1, "", "id"], [5, 2, 1, "", "instance"], [5, 2, 1, "", "meta"], [5, 2, 1, "", "model"], [5, 2, 1, "", "model_config"], [5, 2, 1, "", "parent_id"], [5, 2, 1, "", "prompt_token_usage"], [5, 2, 1, "", "raw_reward"], [5, 2, 1, "", "response"], [5, 2, 1, "", "state"], [5, 2, 1, "", "ticks"], [5, 2, 1, "", "timing_metrics"], [5, 2, 1, "", "token_usage"], [5, 2, 1, "", "value"], [5, 2, 1, "", "version"], [5, 2, 1, "", "version_description"], [5, 2, 1, "", "visits"]], "fle.commons.models.ResearchState": [[5, 3, 1, "", "__init__"], [5, 2, 1, "", "current_research"], [5, 2, 1, "", "progress"], [5, 2, 1, "", "research_progress"], [5, 2, 1, "", "research_queue"], [5, 2, 1, "", "technologies"]], "fle.commons.models.SerializableFunction": [[5, 3, 1, "", "__call__"], [5, 3, 1, "", "__getstate__"], [5, 3, 1, "", "__init__"], [5, 3, 1, "", "__setstate__"], [5, 3, 1, "", "__str__"], [5, 3, 1, "", "bind"], [5, 3, 1, "", "reconstruct"]], "fle.commons.models.TechnologyState": [[5, 3, 1, "", "__init__"], [5, 2, 1, "", "enabled"], [5, 2, 1, "", "ingredients"], [5, 2, 1, "", "level"], [5, 2, 1, "", "name"], [5, 2, 1, "", "prerequisites"], [5, 2, 1, "", "research_unit_count"], [5, 2, 1, "", "research_unit_energy"], [5, 2, 1, "", "researched"]], "fle.commons.models.TimingMetrics": [[5, 2, 1, "", "children"], [5, 4, 1, "", "duration"], [5, 2, 1, "", "end_time"], [5, 2, 1, "", "metadata"], [5, 2, 1, "", "model_config"], [5, 2, 1, "", "operation_name"], [5, 2, 1, "", "start_time"], [5, 3, 1, "", "to_dict"], [5, 4, 1, "", "total_duration"]], "fle.env": [[6, 0, 0, "-", "entities"], [7, 0, 0, "-", "game_types"], [8, 0, 0, "-", "gym_env"], [9, 0, 0, "-", "instance"], [10, 0, 0, "-", "namespace"]], "fle.env.entities": [[6, 1, 1, "", "Accumulator"], [6, 1, 1, "", "AdvancedAssemblingMachine"], [6, 1, 1, "", "Ammo"], [6, 1, 1, "", "AssemblingMachine"], [6, 1, 1, "", "BeltGroup"], [6, 1, 1, "", "Boiler"], [6, 1, 1, "", "BoundingBox"], [6, 1, 1, "", "BuildingBox"], [6, 1, 1, "", "BurnerInserter"], [6, 1, 1, "", "BurnerMiningDrill"], [6, 1, 1, "", "BurnerType"], [6, 1, 1, "", "ChemicalPlant"], [6, 1, 1, "", "Chest"], [6, 1, 1, "", "Dimensions"], [6, 1, 1, "", "Direction"], [6, 1, 1, "", "Electric"], [6, 1, 1, "", "ElectricFurnace"], [6, 1, 1, "", "ElectricMiningDrill"], [6, 1, 1, "", "ElectricalProducer"], [6, 1, 1, "", "ElectricityGroup"], [6, 1, 1, "", "ElectricityPole"], [6, 1, 1, "", "EnergySource"], [13, 1, 1, "", "Entity"], [6, 1, 1, "", "EntityCore"], [6, 1, 1, "", "EntityGroup"], [6, 1, 1, "", "EntityInfo"], [6, 1, 1, "", "EntityStatus"], [6, 1, 1, "", "FilterInserter"], [6, 1, 1, "", "Filtered"], [6, 1, 1, "", "FluidHandler"], [6, 1, 1, "", "Furnace"], [6, 1, 1, "", "Generator"], [6, 1, 1, "", "GunTurret"], [6, 1, 1, "", "HeatExchanger"], [6, 1, 1, "", "IndexedPosition"], [6, 1, 1, "", "Ingredient"], [6, 1, 1, "", "Inserter"], [6, 1, 1, "", "InspectionResults"], [6, 1, 1, "", "Inventory"], [6, 1, 1, "", "Lab"], [6, 1, 1, "", "Layer"], [6, 1, 1, "", "MiningDrill"], [6, 1, 1, "", "MultiFluidHandler"], [6, 1, 1, "", "OffshorePump"], [6, 1, 1, "", "OilRefinery"], [6, 1, 1, "", "Pipe"], [6, 1, 1, "", "PipeGroup"], [6, 1, 1, "", "Position"], [6, 1, 1, "", "Product"], [6, 1, 1, "", "Pump"], [6, 1, 1, "", "PumpJack"], [6, 1, 1, "", "Rail"], [6, 1, 1, "", "Reactor"], [6, 1, 1, "", "Recipe"], [6, 1, 1, "", "ResourcePatch"], [6, 1, 1, "", "Rocket"], [6, 1, 1, "", "RocketSilo"], [6, 1, 1, "", "SolarPanel"], [6, 1, 1, "", "Splitter"], [6, 1, 1, "", "StaticEntity"], [6, 1, 1, "", "StorageTank"], [6, 1, 1, "", "TileDimensions"], [6, 1, 1, "", "TransportBelt"], [6, 1, 1, "", "UndergroundBelt"], [6, 1, 1, "", "WallGroup"]], "fle.env.entities.Accumulator": [[6, 2, 1, "", "energy_source"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.AdvancedAssemblingMachine": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Ammo": [[6, 2, 1, "", "magazine_size"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "reload_time"]], "fle.env.entities.AssemblingMachine": [[6, 2, 1, "", "assembling_machine_input"], [6, 2, 1, "", "assembling_machine_modules"], [6, 2, 1, "", "assembling_machine_output"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "recipe"]], "fle.env.entities.BeltGroup": [[6, 2, 1, "", "belts"], [6, 2, 1, "", "inputs"], [6, 2, 1, "", "inventory"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "outputs"]], "fle.env.entities.Boiler": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "steam_output_point"]], "fle.env.entities.BoundingBox": [[6, 4, 1, "", "center"], [6, 3, 1, "", "height"], [6, 2, 1, "", "left_bottom"], [6, 2, 1, "", "left_top"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "right_bottom"], [6, 2, 1, "", "right_top"], [6, 3, 1, "", "width"]], "fle.env.entities.BuildingBox": [[6, 2, 1, "", "height"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "width"]], "fle.env.entities.BurnerInserter": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.BurnerMiningDrill": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.BurnerType": [[6, 2, 1, "", "fuel"], [6, 2, 1, "", "model_config"]], "fle.env.entities.ChemicalPlant": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Chest": [[6, 2, 1, "", "inventory"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Dimensions": [[6, 2, 1, "", "height"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "width"]], "fle.env.entities.Direction": [[6, 2, 1, "", "DOWN"], [6, 2, 1, "", "EAST"], [6, 2, 1, "", "LEFT"], [6, 2, 1, "", "NORTH"], [6, 2, 1, "", "RIGHT"], [6, 2, 1, "", "SOUTH"], [6, 2, 1, "", "UP"], [6, 2, 1, "", "WEST"], [6, 3, 1, "", "from_string"]], "fle.env.entities.Electric": [[6, 2, 1, "", "electrical_id"], [6, 2, 1, "", "model_config"]], "fle.env.entities.ElectricFurnace": [[6, 2, 1, "", "furnace_result"], [6, 2, 1, "", "furnace_source"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.ElectricMiningDrill": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.ElectricalProducer": [[6, 2, 1, "", "electric_output_flow_limit"], [6, 2, 1, "", "energy_source"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "production"]], "fle.env.entities.ElectricityGroup": [[6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "poles"]], "fle.env.entities.ElectricityPole": [[6, 2, 1, "", "flow_rate"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.EnergySource": [[6, 2, 1, "", "buffer_capacity"], [6, 2, 1, "", "drain"], [6, 2, 1, "", "input_flow_limit"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "output_flow_limit"]], "fle.env.entities.Entity": [[13, 2, 1, "", "dimensions"], [13, 2, 1, "", "direction"], [13, 2, 1, "", "energy"], [13, 2, 1, "", "health"], [13, 4, 1, "", "height"], [13, 2, 1, "", "id"], [13, 2, 1, "", "model_config"], [13, 2, 1, "", "name"], [13, 2, 1, "", "position"], [13, 2, 1, "", "prototype"], [13, 2, 1, "", "status"], [13, 2, 1, "", "tile_dimensions"], [13, 2, 1, "", "type"], [13, 2, 1, "", "warnings"], [13, 4, 1, "", "width"]], "fle.env.entities.EntityCore": [[6, 2, 1, "", "direction"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "position"]], "fle.env.entities.EntityGroup": [[6, 2, 1, "", "id"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "position"], [6, 2, 1, "", "status"]], "fle.env.entities.EntityInfo": [[6, 2, 1, "", "contents"], [6, 2, 1, "", "direction"], [6, 2, 1, "", "end_position"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "position"], [6, 2, 1, "", "quantity"], [6, 2, 1, "", "start_position"], [6, 2, 1, "", "status"], [6, 2, 1, "", "warning"]], "fle.env.entities.EntityStatus": [[6, 2, 1, "", "CHARGING"], [6, 2, 1, "", "DISCHARGING"], [6, 2, 1, "", "EMPTY"], [6, 2, 1, "", "FLUID_INGREDIENT_SHORTAGE"], [6, 2, 1, "", "FULLY_CHARGED"], [6, 2, 1, "", "FULL_BURNT_RESULT_OUTPUT"], [6, 2, 1, "", "FULL_OUTPUT"], [6, 2, 1, "", "ITEM_INGREDIENT_SHORTAGE"], [6, 2, 1, "", "LAUNCHING_ROCKET"], [6, 2, 1, "", "LOW_INPUT_FLUID"], [6, 2, 1, "", "LOW_POWER"], [6, 2, 1, "", "LOW_TEMPERATURE"], [6, 2, 1, "", "MISSING_REQUIRED_FLUID"], [6, 2, 1, "", "MISSING_SCIENCE_PACKS"], [6, 2, 1, "", "NORMAL"], [6, 2, 1, "", "NOT_CONNECTED"], [6, 2, 1, "", "NOT_CONNECTED_TO_RAIL"], [6, 2, 1, "", "NOT_PLUGGED_IN_ELECTRIC_NETWORK"], [6, 2, 1, "", "NO_AMMO"], [6, 2, 1, "", "NO_FUEL"], [6, 2, 1, "", "NO_INGREDIENTS"], [6, 2, 1, "", "NO_INPUT_FLUID"], [6, 2, 1, "", "NO_MINABLE_RESOURCES"], [6, 2, 1, "", "NO_POWER"], [6, 2, 1, "", "NO_RECIPE"], [6, 2, 1, "", "NO_RESEARCH_IN_PROGRESS"], [6, 2, 1, "", "PREPARING_ROCKET_FOR_LAUNCH"], [6, 2, 1, "", "WAITING_FOR_SOURCE_ITEMS"], [6, 2, 1, "", "WAITING_FOR_SPACE_IN_DESTINATION"], [6, 2, 1, "", "WAITING_TO_LAUNCH_ROCKET"], [6, 2, 1, "", "WORKING"], [6, 3, 1, "", "from_int"], [6, 3, 1, "", "from_string"]], "fle.env.entities.FilterInserter": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Filtered": [[6, 2, 1, "", "filter"], [6, 2, 1, "", "model_config"]], "fle.env.entities.FluidHandler": [[6, 2, 1, "", "connection_points"], [6, 2, 1, "", "fluid_box"], [6, 2, 1, "", "fluid_systems"], [6, 2, 1, "", "model_config"]], "fle.env.entities.Furnace": [[6, 2, 1, "", "furnace_result"], [6, 2, 1, "", "furnace_source"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Generator": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.GunTurret": [[6, 2, 1, "", "kills"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "turret_ammo"]], "fle.env.entities.HeatExchanger": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.IndexedPosition": [[6, 3, 1, "", "__init__"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "type"]], "fle.env.entities.Ingredient": [[6, 2, 1, "", "count"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "type"]], "fle.env.entities.Inserter": [[6, 2, 1, "", "drop_position"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "pickup_position"]], "fle.env.entities.InspectionResults": [[6, 2, 1, "", "entities"], [6, 3, 1, "", "get_entities"], [6, 3, 1, "", "get_entity"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "player_position"], [6, 2, 1, "", "radius"], [6, 2, 1, "", "time_elapsed"]], "fle.env.entities.Inventory": [[6, 3, 1, "", "get"], [6, 3, 1, "", "items"], [6, 3, 1, "", "keys"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "serialize_model"], [6, 3, 1, "", "values"]], "fle.env.entities.Lab": [[6, 2, 1, "", "lab_input"], [6, 2, 1, "", "lab_modules"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "research"]], "fle.env.entities.Layer": [[6, 2, 1, "", "ALL"], [6, 2, 1, "", "CONNECTIONS"], [6, 2, 1, "", "ELECTRICITY"], [6, 2, 1, "", "ENTITIES"], [6, 2, 1, "", "GRID"], [6, 2, 1, "", "LABELS"], [6, 2, 1, "", "NATURAL"], [6, 2, 1, "", "NONE"], [6, 2, 1, "", "ORIGIN"], [6, 2, 1, "", "PLAYER"], [6, 2, 1, "", "RESOURCES"], [6, 2, 1, "", "ROCKS"], [6, 2, 1, "", "TREES"], [6, 2, 1, "", "WATER"]], "fle.env.entities.MiningDrill": [[6, 2, 1, "", "drop_position"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "resources"]], "fle.env.entities.MultiFluidHandler": [[6, 2, 1, "", "fluid_box"], [6, 2, 1, "", "fluid_systems"], [6, 2, 1, "", "input_connection_points"], [6, 2, 1, "", "input_fluids"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "output_connection_points"], [6, 2, 1, "", "output_fluids"]], "fle.env.entities.OffshorePump": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.OilRefinery": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Pipe": [[6, 2, 1, "", "contents"], [6, 2, 1, "", "flow_rate"], [6, 2, 1, "", "fluid"], [6, 2, 1, "", "fluidbox_id"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.PipeGroup": [[6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "pipes"]], "fle.env.entities.Position": [[6, 3, 1, "", "__init__"], [6, 3, 1, "", "above"], [6, 3, 1, "", "below"], [6, 3, 1, "", "distance"], [6, 3, 1, "", "down"], [6, 3, 1, "", "is_close"], [6, 3, 1, "", "left"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "parse_args"], [6, 3, 1, "", "right"], [6, 3, 1, "", "to_bounding_box"], [6, 3, 1, "", "up"], [6, 2, 1, "", "x"], [6, 2, 1, "", "y"]], "fle.env.entities.Product": [[6, 2, 1, "", "model_config"], [6, 2, 1, "", "probability"]], "fle.env.entities.Pump": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.PumpJack": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Rail": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Reactor": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Recipe": [[6, 2, 1, "", "category"], [6, 2, 1, "", "enabled"], [6, 2, 1, "", "energy"], [6, 2, 1, "", "ingredients"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "products"]], "fle.env.entities.ResourcePatch": [[6, 2, 1, "", "bounding_box"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"], [6, 2, 1, "", "size"]], "fle.env.entities.Rocket": [[6, 2, 1, "", "launch_progress"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "payload"]], "fle.env.entities.RocketSilo": [[6, 2, 1, "", "launch_count"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "rocket_inventory"], [6, 2, 1, "", "rocket_parts"], [6, 2, 1, "", "rocket_progress"]], "fle.env.entities.SolarPanel": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.Splitter": [[6, 2, 1, "", "input_positions"], [6, 2, 1, "", "inventory"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "output_positions"]], "fle.env.entities.StaticEntity": [[6, 2, 1, "", "model_config"], [6, 2, 1, "", "neighbours"]], "fle.env.entities.StorageTank": [[6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.TileDimensions": [[6, 2, 1, "", "model_config"], [6, 2, 1, "", "tile_height"], [6, 2, 1, "", "tile_width"]], "fle.env.entities.TransportBelt": [[6, 2, 1, "", "input_position"], [6, 2, 1, "", "inventory"], [6, 2, 1, "", "is_source"], [6, 2, 1, "", "is_terminus"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"], [6, 2, 1, "", "output_position"]], "fle.env.entities.UndergroundBelt": [[6, 2, 1, "", "connected_to"], [6, 2, 1, "", "is_input"], [6, 2, 1, "", "model_config"], [6, 3, 1, "", "model_post_init"]], "fle.env.entities.WallGroup": [[6, 2, 1, "", "entities"], [6, 2, 1, "", "model_config"], [6, 2, 1, "", "name"]], "fle.env.game_types": [[7, 1, 1, "", "Prototype"], [7, 1, 1, "", "PrototypeMetaclass"], [7, 1, 1, "", "RecipeName"], [7, 1, 1, "", "Resource"], [7, 1, 1, "", "ResourceName"], [7, 1, 1, "", "Technology"]], "fle.env.game_types.Prototype": [[7, 2, 1, "", "Accumulator"], [7, 2, 1, "", "AdvancedCircuit"], [7, 2, 1, "", "AdvancedOilProcessing"], [7, 2, 1, "", "AssemblingMachine1"], [7, 2, 1, "", "AssemblingMachine2"], [7, 2, 1, "", "AssemblingMachine3"], [7, 2, 1, "", "AutomationSciencePack"], [7, 2, 1, "", "Battery"], [7, 2, 1, "", "BeltGroup"], [7, 2, 1, "", "BigElectricPole"], [7, 2, 1, "", "Boiler"], [7, 2, 1, "", "BurnerInserter"], [7, 2, 1, "", "BurnerMiningDrill"], [7, 2, 1, "", "Centrifuge"], [7, 2, 1, "", "ChemicalPlant"], [7, 2, 1, "", "ChemicalSciencePack"], [7, 2, 1, "", "Coal"], [7, 2, 1, "", "CoalLiquifaction"], [7, 2, 1, "", "Concrete"], [7, 2, 1, "", "CopperCable"], [7, 2, 1, "", "CopperOre"], [7, 2, 1, "", "CopperPlate"], [7, 2, 1, "", "ElectricEngineUnit"], [7, 2, 1, "", "ElectricFurnace"], [7, 2, 1, "", "ElectricMiningDrill"], [7, 2, 1, "", "ElectricityGroup"], [7, 2, 1, "", "ElectronicCircuit"], [7, 2, 1, "", "EmptyBarrel"], [7, 2, 1, "", "EngineUnit"], [7, 2, 1, "", "ExpressInserter"], [7, 2, 1, "", "ExpressSplitter"], [7, 2, 1, "", "ExpressTransportBelt"], [7, 2, 1, "", "ExpressUndergroundBelt"], [7, 2, 1, "", "FastInserter"], [7, 2, 1, "", "FastSplitter"], [7, 2, 1, "", "FastTransportBelt"], [7, 2, 1, "", "FastUndergroundBelt"], [7, 2, 1, "", "FilterInserter"], [7, 2, 1, "", "FirearmMagazine"], [7, 2, 1, "", "FlyingRobotFrame"], [7, 2, 1, "", "Gate"], [7, 2, 1, "", "Grenade"], [7, 2, 1, "", "GunTurret"], [7, 4, 1, "", "HEIGHT"], [7, 2, 1, "", "HeatExchanger"], [7, 2, 1, "", "HeatPipe"], [7, 2, 1, "", "HeavyOil"], [7, 2, 1, "", "Inserter"], [7, 2, 1, "", "IronChest"], [7, 2, 1, "", "IronGearWheel"], [7, 2, 1, "", "IronOre"], [7, 2, 1, "", "IronPlate"], [7, 2, 1, "", "IronStick"], [7, 2, 1, "", "Lab"], [7, 2, 1, "", "LightOil"], [7, 2, 1, "", "LogisticsSciencePack"], [7, 2, 1, "", "LongHandedInserter"], [7, 2, 1, "", "LowDensityStructure"], [7, 2, 1, "", "Lubricant"], [7, 2, 1, "", "MediumElectricPole"], [7, 2, 1, "", "MilitarySciencePack"], [7, 2, 1, "", "NuclearReactor"], [7, 2, 1, "", "OffshorePump"], [7, 2, 1, "", "OilRefinery"], [7, 2, 1, "", "PetroleumGas"], [7, 2, 1, "", "PiercingRoundsMagazine"], [7, 2, 1, "", "Pipe"], [7, 2, 1, "", "PipeGroup"], [7, 2, 1, "", "PlasticBar"], [7, 2, 1, "", "ProcessingUnit"], [7, 2, 1, "", "ProductionSciencePack"], [7, 2, 1, "", "ProductivityModule"], [7, 2, 1, "", "ProductivityModule2"], [7, 2, 1, "", "ProductivityModule3"], [7, 2, 1, "", "Pump"], [7, 2, 1, "", "PumpJack"], [7, 2, 1, "", "Radar"], [7, 2, 1, "", "Rail"], [7, 2, 1, "", "Rocket"], [7, 2, 1, "", "RocketControlUnit"], [7, 2, 1, "", "RocketFuel"], [7, 2, 1, "", "RocketPart"], [7, 2, 1, "", "RocketSilo"], [7, 2, 1, "", "Satellite"], [7, 2, 1, "", "SmallElectricPole"], [7, 2, 1, "", "SmallLamp"], [7, 2, 1, "", "SolarPanel"], [7, 2, 1, "", "SolidFuel"], [7, 2, 1, "", "SpaceSciencePack"], [7, 2, 1, "", "Splitter"], [7, 2, 1, "", "StackFilterInserter"], [7, 2, 1, "", "StackInserter"], [7, 2, 1, "", "SteamEngine"], [7, 2, 1, "", "SteelChest"], [7, 2, 1, "", "SteelFurnace"], [7, 2, 1, "", "SteelPlate"], [7, 2, 1, "", "Stone"], [7, 2, 1, "", "StoneBrick"], [7, 2, 1, "", "StoneFurnace"], [7, 2, 1, "", "StoneWall"], [7, 2, 1, "", "StorageTank"], [7, 2, 1, "", "Sulfur"], [7, 2, 1, "", "SulfuricAcid"], [7, 2, 1, "", "TransportBelt"], [7, 2, 1, "", "UndergroundBelt"], [7, 2, 1, "", "UndergroundPipe"], [7, 2, 1, "", "Uranium235"], [7, 2, 1, "", "Uranium238"], [7, 2, 1, "", "UraniumFuelCell"], [7, 2, 1, "", "UraniumOre"], [7, 2, 1, "", "UtilitySciencePack"], [7, 4, 1, "", "WIDTH"], [7, 2, 1, "", "Wood"], [7, 2, 1, "", "WoodenChest"], [7, 3, 1, "", "__init__"]], "fle.env.game_types.RecipeName": [[7, 2, 1, "", "AdvancedOilProcessing"], [7, 2, 1, "", "BasicOilProcessing"], [7, 2, 1, "", "CoalLiquefaction"], [7, 2, 1, "", "EmptyCrudeOilBarrel"], [7, 2, 1, "", "EmptyHeavyOilBarrel"], [7, 2, 1, "", "EmptyLightOilBarrel"], [7, 2, 1, "", "EmptyLubricantBarrel"], [7, 2, 1, "", "EmptyPetroleumGasBarrel"], [7, 2, 1, "", "EmptySulfuricAcidBarrel"], [7, 2, 1, "", "EmptyWaterBarrel"], [7, 2, 1, "", "FillCrudeOilBarrel"], [7, 2, 1, "", "FillHeavyOilBarrel"], [7, 2, 1, "", "FillLightOilBarrel"], [7, 2, 1, "", "FillLubricantBarrel"], [7, 2, 1, "", "FillPetroleumGasBarrel"], [7, 2, 1, "", "FillSulfuricAcidBarrel"], [7, 2, 1, "", "FillWaterBarrel"], [7, 2, 1, "", "HeavyOilCracking"], [7, 2, 1, "", "LightOilCracking"], [7, 2, 1, "", "NuclearFuelReprocessing"], [7, 2, 1, "", "SolidFuelFromHeavyOil"], [7, 2, 1, "", "SolidFuelFromLightOil"], [7, 2, 1, "", "SolidFuelFromPetroleumGas"], [7, 2, 1, "", "SulfuricAcid"], [7, 2, 1, "", "UraniumProcessing"]], "fle.env.game_types.Resource": [[7, 2, 1, "", "Coal"], [7, 2, 1, "", "CopperOre"], [7, 2, 1, "", "CrudeOil"], [7, 2, 1, "", "IronOre"], [7, 2, 1, "", "Stone"], [7, 2, 1, "", "UraniumOre"], [7, 2, 1, "", "Water"], [7, 2, 1, "", "Wood"]], "fle.env.game_types.ResourceName": [[7, 2, 1, "", "Coal"], [7, 2, 1, "", "CopperOre"], [7, 2, 1, "", "CrudeOil"], [7, 2, 1, "", "IronOre"], [7, 2, 1, "", "Stone"], [7, 2, 1, "", "UraniumOre"], [7, 2, 1, "", "Water"]], "fle.env.game_types.Technology": [[7, 2, 1, "", "AdvancedElectronics"], [7, 2, 1, "", "AdvancedElectronics2"], [7, 2, 1, "", "AdvancedMaterialProcessing"], [7, 2, 1, "", "AdvancedMaterialProcessing2"], [7, 2, 1, "", "AdvancedOilProcessing"], [7, 2, 1, "", "Automation"], [7, 2, 1, "", "Automation2"], [7, 2, 1, "", "Automation3"], [7, 2, 1, "", "BarrelFilling"], [7, 2, 1, "", "BatteryTechnology"], [7, 2, 1, "", "CharacterInventorySlots"], [7, 2, 1, "", "ChemicalSciencePack"], [7, 2, 1, "", "ElectricEnergy"], [7, 2, 1, "", "ElectricEnergy2"], [7, 2, 1, "", "ElectricEngineering"], [7, 2, 1, "", "Electronics"], [7, 2, 1, "", "EnergyShield"], [7, 2, 1, "", "EnergyShield2"], [7, 2, 1, "", "FastInserter"], [7, 2, 1, "", "Grenades"], [7, 2, 1, "", "Landfill"], [7, 2, 1, "", "Logistics"], [7, 2, 1, "", "Logistics2"], [7, 2, 1, "", "Logistics3"], [7, 2, 1, "", "LogisticsSciencePack"], [7, 2, 1, "", "LowDensityStructure"], [7, 2, 1, "", "Lubricant"], [7, 2, 1, "", "MilitaryScience"], [7, 2, 1, "", "MilitarySciencePack"], [7, 2, 1, "", "ModularArmor"], [7, 2, 1, "", "NightVision"], [7, 2, 1, "", "NuclearPower"], [7, 2, 1, "", "OilProcessing"], [7, 2, 1, "", "Plastics"], [7, 2, 1, "", "PowerArmor"], [7, 2, 1, "", "PowerArmor2"], [7, 2, 1, "", "ProductionSciencePack"], [7, 2, 1, "", "ProductivityModule"], [7, 2, 1, "", "ProductivityModule2"], [7, 2, 1, "", "ProductivityModule3"], [7, 2, 1, "", "RailwayTransportation"], [7, 2, 1, "", "ResearchSpeed"], [7, 2, 1, "", "Robotics"], [7, 2, 1, "", "RocketControl"], [7, 2, 1, "", "RocketFuel"], [7, 2, 1, "", "RocketSiloTechnology"], [7, 2, 1, "", "SolarEnergy"], [7, 2, 1, "", "SpaceScience"], [7, 2, 1, "", "StackInserter"], [7, 2, 1, "", "StackInserterCapacity1"], [7, 2, 1, "", "StackInserterCapacity2"], [7, 2, 1, "", "SteelProcessing"], [7, 2, 1, "", "StorageTanks"], [7, 2, 1, "", "SulfurProcessing"]], "fle.env.gym_env.action": [[0, 1, 1, "", "Action"]], "fle.env.gym_env.action.Action": [[0, 3, 1, "", "__init__"], [0, 2, 1, "", "agent_idx"], [0, 2, 1, "", "code"], [0, 2, 1, "", "game_state"], [0, 3, 1, "", "to_dict"]], "fle.env.instance": [[9, 1, 1, "", "DirectionInternal"], [9, 1, 1, "", "FactorioInstance"], [9, 1, 1, "", "GameControl"]], "fle.env.instance.DirectionInternal": [[9, 2, 1, "", "DOWN"], [9, 2, 1, "", "EAST"], [9, 2, 1, "", "LEFT"], [9, 2, 1, "", "NORTH"], [9, 2, 1, "", "RIGHT"], [9, 2, 1, "", "SOUTH"], [9, 2, 1, "", "UP"], [9, 2, 1, "", "WEST"], [9, 3, 1, "", "from_factorio_direction"], [9, 3, 1, "", "next_clockwise"], [9, 3, 1, "", "next_counterclockwise"], [9, 3, 1, "", "opposite"], [9, 3, 1, "", "to_factorio_direction"]], "fle.env.instance.FactorioInstance": [[9, 3, 1, "", "__init__"], [9, 3, 1, "", "cleanup"], [9, 3, 1, "", "connect_to_server"], [9, 3, 1, "", "eval"], [9, 3, 1, "", "eval_with_error"], [9, 4, 1, "", "first_namespace"], [9, 3, 1, "", "get_elapsed_ticks"], [9, 3, 1, "", "get_speed"], [9, 3, 1, "", "get_system_prompt"], [9, 3, 1, "", "get_warnings"], [9, 3, 1, "", "initialise"], [9, 4, 1, "", "is_multiagent"], [9, 4, 1, "", "namespace"], [9, 2, 1, "", "namespace_class"], [9, 3, 1, "", "pause"], [9, 3, 1, "", "reset"], [9, 3, 1, "", "set_speed"], [9, 3, 1, "", "set_speed_and_unpause"], [9, 3, 1, "", "unpause"]], "fle.env.instance.GameControl": [[9, 3, 1, "", "__init__"], [9, 3, 1, "", "get_elapsed_ticks"], [9, 3, 1, "", "get_speed"], [9, 3, 1, "", "is_paused"], [9, 3, 1, "", "pause"], [9, 3, 1, "", "pause_at_speed"], [9, 3, 1, "", "reset_to_defaults"], [9, 3, 1, "", "set_speed"], [9, 3, 1, "", "set_speed_and_unpause"], [9, 3, 1, "", "unpause"]], "fle.env.namespace": [[10, 1, 1, "", "FactorioNamespace"], [10, 1, 1, "", "LoopContext"], [10, 5, 1, "", "unwrap_after_deserialization"], [10, 5, 1, "", "wrap_for_serialization"]], "fle.env.namespace.FactorioNamespace": [[10, 3, 1, "", "__init__"], [10, 3, 1, "", "eval_with_timeout"], [10, 3, 1, "", "execute_body"], [10, 3, 1, "", "execute_node"], [10, 3, 1, "", "get_functions"], [10, 3, 1, "", "get_messages"], [10, 3, 1, "", "load"], [10, 3, 1, "", "load_messages"], [10, 3, 1, "", "log"], [10, 3, 1, "", "reset"]], "fle.env.namespace.LoopContext": [[10, 3, 1, "", "__init__"], [10, 3, 1, "", "enter_loop"], [10, 3, 1, "", "exit_loop"], [10, 3, 1, "", "handle_break"], [10, 3, 1, "", "handle_continue"]], "fle.eval": [[11, 0, 0, "-", "algorithms"], [12, 0, 0, "-", "tasks"]], "fle.eval.tasks": [[12, 1, 1, "", "DefaultTask"], [12, 1, 1, "", "TaskABC"], [12, 1, 1, "", "TaskFactory"], [12, 1, 1, "", "ThroughputTask"], [12, 1, 1, "", "UnboundedThroughputTask"]], "fle.eval.tasks.DefaultTask": [[12, 3, 1, "", "__init__"], [12, 3, 1, "", "setup_instance"], [12, 3, 1, "", "verify"]], "fle.eval.tasks.TaskABC": [[12, 3, 1, "", "__init__"], [12, 3, 1, "", "enhance_response_with_task_output"], [12, 3, 1, "", "get_agent_instructions"], [12, 3, 1, "", "setup"], [12, 3, 1, "", "setup_instance"], [12, 3, 1, "", "verify"]], "fle.eval.tasks.TaskFactory": [[12, 3, 1, "", "__init__"], [12, 3, 1, "", "create_task"]], "fle.eval.tasks.ThroughputTask": [[12, 3, 1, "", "__init__"], [12, 3, 1, "", "enhance_response_with_task_output"], [12, 3, 1, "", "setup_instance"], [12, 3, 1, "", "verify"]], "fle.eval.tasks.UnboundedThroughputTask": [[12, 3, 1, "", "__init__"], [12, 3, 1, "", "enhance_response_with_task_output"], [12, 3, 1, "", "setup_instance"], [12, 3, 1, "", "verify"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "terms": {"": [6, 15, 17, 18, 26, 29], "0": [0, 1, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 29, 30], "00": 16, "00z": 16, "01": 16, "01t00": 16, "01t01": 16, "02": 19, "05": [19, 20], "1": [0, 1, 5, 6, 7, 9, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28], "10": [0, 1, 5, 9, 15, 16, 18, 19, 20, 21, 23, 24, 26, 27, 28, 30], "100": [12, 15, 17, 18, 19, 20, 21], "1000": [13, 15, 17, 19, 20, 21], "10000": [0, 17], "1000000": 0, "1024": [6, 21], "110": [18, 23], "128": [6, 21], "139": 21, "15": [14, 16, 19], "150": [13, 16], "16": [1, 6, 13, 17, 19], "19": 21, "2": [6, 7, 9, 13, 16, 19, 20, 21, 23, 24], "20": [18, 19, 20, 21, 27, 30], "200": [18, 21], "2000": [17, 19, 20, 21], "2024": 16, "2047": 6, "215": 21, "235": 7, "238": 7, "24": [1, 6, 22], "250": 1, "255": 21, "256": [6, 21], "264": 21, "2666": 24, "27": [13, 19, 24], "27000": [1, 9], "28": [13, 19, 24], "2d": 21, "3": [7, 13, 14, 16, 18, 19, 20, 21, 23, 24], "30": [16, 19, 20, 30], "300": 21, "30000": 24, "32": 6, "34197": 23, "3600": 17, "4": [6, 9, 13, 19, 24], "400": 21, "41": 5, "42": 18, "45": 19, "5": [5, 6, 13, 15, 19, 20, 21, 24], "50": [12, 17, 28], "500": [14, 17], "5000": 17, "512": [6, 21], "520": 21, "5432": 16, "59": [13, 19, 24], "6": [6, 9, 19, 21], "60": [1, 9, 12, 17], "61": [13, 19, 24], "64": 6, "65": 21, "6666666667": 24, "67": 13, "69": 21, "7": [20, 21], "70": [20, 21], "75": [13, 19, 20, 21, 24], "8": [6, 15, 19, 20, 21], "80": [20, 21], "85": [20, 21], "9": 21, "90": [20, 21], "95": [19, 20], "A": [6, 17], "For": [0, 16, 22, 23], "If": [1, 29], "It": [6, 29, 30], "No": [18, 19, 23], "Not": [26, 28, 29, 30], "Or": 12, "The": [0, 1, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "These": [1, 9], "To": 23, "With": [18, 23, 30], "_": [15, 18, 20], "__call__": [5, 14, 18], "__getstate__": 5, "__init__": [0, 1, 5, 6, 7, 9, 10, 12, 15, 17, 19, 20, 21], "__setstate__": 5, "__str__": 5, "_analyze_connect": 21, "_analyze_visual_data": 21, "_calculate_density_map": 21, "_classify_ent": 21, "_classify_resourc": 21, "_default_construction_behavior": 20, "_default_research_behavior": 20, "_default_resource_behavior": 20, "_detect_ent": 21, "_detect_resource_patch": 21, "_estimate_resource_s": 21, "_extract_dominant_color": 21, "_extract_spatial_featur": 21, "_generate_action_cod": 15, "_handle_collection_task": 20, "_handle_coordination_request": 20, "_handle_infrastructure_task": 20, "_handle_research_plan": 20, "_handle_resource_request": 20, "_handle_task_complet": 20, "_initial_coordin": 20, "_initial_setup": 19, "_initial_visual_explor": 21, "_initialize_ag": 20, "_is_entity_pixel": 21, "_is_resource_region": 21, "_monitor_and_optim": 19, "_monitor_min": 15, "_monitoring_and_optim": 20, "_multiplayer_": 23, "_must_": 14, "_process_messag": 20, "_setup_min": [15, 19], "_task_distribut": 20, "_tools_": 14, "_visual_monitor": 21, "_visual_setup": 21, "abl": 24, "about": [0, 12, 13, 16, 24, 30], "abov": 6, "absolut": 6, "abstract": [15, 24], "accept": [6, 26, 28], "access": [0, 1, 16], "account": [26, 28, 29], "accru": 10, "accumul": [2, 6, 7], "accuraci": 21, "achiev": [4, 5, 12, 17], "acid": [6, 7], "across": [1, 15, 21, 22], "act": [15, 19, 20, 21, 24], "action": [1, 9, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25], "action1": 16, "action2": 16, "action3": 16, "action_0": 0, "action_1": 0, "activ": 23, "actual": [0, 26, 28], "adapt": [14, 15, 17], "add": [0, 5, 12, 14, 19, 21, 23, 24, 26], "add_agent_messag": 5, "add_result": 5, "add_user_messag": 5, "addit": [16, 18, 23], "address": [1, 9, 23], "adjust": [15, 17, 20, 21, 22], "advanc": [7, 14, 19, 20, 21, 23, 25], "advanced_circuit_throughput": 1, "advancedassemblingmachin": [2, 6, 7], "advancedcircuit": 7, "advancedelectron": 7, "advancedelectronics2": 7, "advancedmaterialprocess": 7, "advancedmaterialprocessing2": 7, "advancedoilprocess": 7, "advantag": 5, "affect": [1, 9, 14], "after": [5, 24, 28], "ag": 23, "against": 17, "agent": [1, 9, 10, 12, 13, 14, 16, 17, 18, 22, 23, 24, 25, 26, 28, 29, 30], "agent_abc": [2, 15, 19, 20, 21], "agent_count": 20, "agent_idx": [0, 1, 9, 12, 15, 19, 20, 21], "agent_index": 10, "agent_instruct": 12, "agent_messag": 5, "agent_specialization_effect": 20, "agent_typ": [15, 16, 19, 20, 21], "alert": [1, 9], "algorithm": [2, 15, 20, 21], "alia": [1, 9], "align": 14, "all": [0, 1, 2, 5, 6, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 28, 29], "all_technologies_research": [1, 9], "all_technology_reserach": 12, "allow": [1, 6, 13, 17, 18, 22, 26, 28, 29, 30], "also": 6, "alwai": [18, 27, 29, 30], "ammo": [2, 6, 7], "among": 20, "amount": [14, 18], "an": [1, 4, 5, 6, 7, 9, 12, 14, 15, 16, 22, 24, 25, 26, 29, 30], "analysi": [16, 25, 29], "analyz": [14, 15, 20, 21, 29], "ani": [0, 1, 4, 5, 6, 13, 15, 19, 20, 21], "annot": [10, 14], "ant": 23, "anthrop": 23, "anthropic_api_kei": 23, "api": [18, 24], "append": [15, 20, 21], "applic": 29, "approach": 15, "appropri": [17, 18, 26, 30], "ar": [0, 1, 5, 9, 14, 15, 17, 18, 22, 23, 24, 30], "arbitrary_types_allow": [5, 6], "architectur": 25, "area": [14, 18, 19, 30], "arg": [5, 6, 10, 15, 18], "arg1": 14, "arg2": 14, "argument": 6, "armor": 7, "around": [14, 18], "arrai": 21, "assembl": [6, 7, 14, 20], "assembling_machine_input": 6, "assembling_machine_modul": 6, "assembling_machine_output": 6, "assemblingmachin": [2, 6, 7, 13], "assemblingmachine1": 7, "assemblingmachine2": 7, "assemblingmachine3": 7, "assert": [0, 15, 17, 18, 24], "assign": [20, 24], "assmbl": 6, "ast": 10, "attribut": [5, 6, 10], "auto": 14, "autodoc": 23, "autom": [0, 7, 13, 16, 17, 19, 20, 24], "automat": [1, 14, 16, 17, 18, 22, 24], "automation2": 7, "automation3": 7, "automation_science_pack_throughput": 1, "automationsciencepack": 7, "avail": [0, 9, 13, 14, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30], "averag": [16, 19, 20], "avg_query_tim": 16, "avoid": 14, "axi": 21, "b": 23, "b64decod": 21, "back": [1, 9, 10, 14], "backend": 16, "background": 21, "backup": 25, "backup_id": 16, "backward": 18, "balanc": 17, "bar": 7, "barrel": [6, 7], "barrelfil": 7, "base": [0, 1, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 19, 21, 25], "base64": [13, 21], "basemodel": [4, 5, 6], "basetask": 17, "bash": 23, "basic": [0, 7, 14, 15, 18, 20, 21, 25, 26, 27, 28, 29, 30], "basic_ag": 19, "basic_agent_config": 19, "basic_setup": 20, "basicag": 19, "basicoilprocess": 7, "batch": 16, "batch_save_step": 16, "batteri": [6, 7], "battery_throughput": 1, "batterytechnologi": 7, "been": [1, 9], "befor": [0, 1, 9, 16, 26, 28, 29], "begin": [19, 20], "behav": 6, "behavior": [0, 14, 15, 20, 25], "below": [6, 20], "belt": [6, 7, 13, 14], "beltgroup": [2, 6, 7], "best": [14, 25], "beta": 23, "better": [24, 27], "between": [0, 1, 5, 6, 13, 14, 15, 17, 20, 21, 22, 27], "big": 7, "bigelectricpol": 7, "bind": 5, "black": 21, "block": [0, 10, 23], "bodi": 10, "boiler": [2, 6, 7], "bonu": 7, "bool": [4, 5, 6, 9, 18, 26, 28, 29, 30], "bottleneck": [19, 21], "bottom": 6, "bound": 6, "boundari": 14, "bounding_box": 6, "boundingbox": [2, 6], "box": 6, "branch": 23, "break": [20, 29], "breakdown": 20, "brick": 7, "brown": 21, "buffer_capac": 6, "build": [1, 6, 12, 14, 17, 20, 22, 24, 25, 29, 30], "build_infrastructur": 20, "buildabl": 14, "building_materi": 29, "building_typ": 20, "buildingbox": [2, 6], "built": [20, 24], "burn": 6, "burnabl": 6, "burner": [7, 13, 24, 29], "burnerinsert": [2, 6, 7], "burnerminingdril": [2, 6, 7, 24], "burnertyp": [2, 6], "byte": 5, "bytesio": 21, "cabl": 7, "cach": [16, 18], "cache_script": [1, 9], "calcul": [5, 6, 14, 17], "call": [6, 14, 18], "callabl": [5, 14], "can": [0, 1, 6, 7, 9, 14, 15, 17, 18, 22, 23, 24, 26, 27, 28], "cannot": [6, 26, 28], "capabl": [15, 17, 18, 29], "capac": [7, 28], "captur": [0, 5], "case": [1, 9, 15, 17, 18, 26, 27, 28], "categori": [6, 25], "caught": 0, "caus": [26, 28, 29, 30], "cd": [18, 23], "cell": 7, "center": [6, 18], "center_po": 18, "centrifug": 7, "chain": [0, 19, 24, 27], "challeng": [12, 17], "chang": [10, 14, 17, 21, 26, 28, 29, 30], "charact": 7, "characterinventoryslot": 7, "charg": 6, "check": [5, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30], "checkpoint": 16, "chemic": [1, 6, 7, 14], "chemical_science_pack_throughput": 1, "chemicalpl": [2, 6, 7], "chemicalsciencepack": 7, "chest": [0, 2, 6, 7, 13, 14, 15, 19, 20, 21, 24, 26, 27, 28, 29], "children": 5, "choos": [24, 30], "circuit": [1, 7], "circular": 18, "cl": 7, "class": [0, 1, 4, 5, 6, 7, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 24, 25], "classdict": 7, "classif": 21, "classmethod": [5, 6, 9], "classvar": [4, 5, 6, 13], "clean": [1, 15], "cleanup": [1, 9, 16], "clear": [15, 17, 18, 20, 26, 27, 30], "clear_ent": [1, 9], "cli": 24, "click": 23, "client": [14, 18, 25], "close": [1, 15, 19, 20, 21], "closest": 14, "cluster": [24, 25], "coal": [7, 13, 15, 17, 19, 20, 24, 28, 29], "coal_po": 19, "coalliquefact": 7, "coalliquifact": 7, "code": [1, 4, 5, 12, 15, 16, 19, 20, 21, 23, 24, 25, 27], "code_lin": 15, "collabor": 20, "collaborative_planning_success": 20, "collect": [14, 15, 18, 19, 20, 27], "collect_": 20, "collect_copper_or": 20, "collect_iron_or": 20, "collected_resourc": 15, "collector": 25, "color": 21, "com": 18, "combin": 27, "command": [19, 20, 21, 22], "common": [0, 1, 9, 14, 16, 19, 25], "commun": [13, 15, 20, 29], "communication_effici": 20, "communication_en": 20, "communication_lat": 20, "compat": [1, 13, 14, 16, 18, 28], "compet": 17, "complet": [2, 5, 12, 13, 14, 15, 16, 17, 18, 20], "completion_token_usag": 5, "completionreason": [2, 4], "completionresult": [2, 4], "complex": [0, 14, 24, 27], "compon": [1, 13, 14, 25], "compos": 22, "comprehens": [0, 1, 14, 17, 18], "compress": 21, "compris": 24, "comput": [21, 24], "computer_vision_model": 21, "concept": 25, "concret": [7, 15], "condit": [0, 12, 17, 27], "confid": 21, "config": [4, 5, 6, 13, 15, 17, 19, 20, 21, 22, 24], "configdict": [4, 5, 6, 13], "configur": [1, 4, 5, 6, 9, 13, 14, 24, 25], "confirm": 23, "conflict": [15, 18, 20, 30], "conflict_resolut": 20, "conflict_resolution_success": 20, "conform": [4, 5, 6, 13], "connect": [1, 6, 16, 21, 22, 23], "connect_ent": [14, 27], "connect_to_serv": [1, 9], "connected_to": 6, "connection_count": 16, "connection_point": 6, "connection_timeout": 16, "consid": [16, 18], "constraint": 17, "construct": [17, 20, 24], "construction_queu": 20, "construction_specialist": 20, "constructionspecialist": 20, "consumpt": [15, 17, 19], "contain": [1, 2, 5, 12, 13, 14, 22, 26, 27, 28, 29, 30], "content": [5, 6, 14, 20, 26, 28, 29], "context": [0, 6, 14, 24], "continu": 1, "control": [0, 5, 7, 10, 16], "convers": [2, 5], "convert": [0, 1, 5, 6, 9, 17, 21], "conveyor": [6, 13], "coordin": [0, 6, 14, 15, 17, 18, 20], "coordination_effect": 20, "coordination_effici": 20, "coordination_en": 20, "coordination_request": 20, "coordination_start": 20, "copper": [7, 15, 19, 20, 29], "copper_or": [17, 19, 20, 21], "copper_po": [19, 20, 21], "copperc": 7, "copperor": 7, "copperpl": 7, "core": [5, 6, 23, 25], "correctli": [21, 30], "corrupt": 16, "cost": 17, "count": [6, 13, 14, 15, 16, 17, 18, 19, 24, 26, 28, 29], "cpu": 21, "cpu_util": 21, "crack": 7, "craft": [5, 6, 13], "craft_item": 14, "creat": [0, 1, 5, 6, 12, 15, 16, 19, 20, 21, 22, 24, 25, 27], "create_backup": 16, "create_task": 12, "created_at": [4, 5], "creation": [1, 17], "criteria": [15, 17], "crude": [6, 7], "crude_oil_throughput": 1, "crudeoil": 7, "cue": 21, "current": [0, 1, 5, 9, 12, 13, 15, 16, 17, 19, 20, 21], "current_research": 5, "current_tim": 17, "current_typ": 20, "current_vers": 16, "custom": [1, 12, 16, 22, 27], "d": 16, "dai": 6, "data": [1, 4, 5, 6, 13, 16, 18, 21, 22, 24, 27], "databas": [23, 25], "databasecli": 16, "dataset": 16, "datetim": [4, 5], "db": 16, "db_client": 16, "debug": [0, 19, 24], "debug_mod": 19, "decis": [13, 15, 19, 20], "decod": 21, "def": [0, 15, 17, 18, 19, 20, 21], "default": [6, 9, 16, 18, 20, 23, 26, 28, 30], "defaulttask": [2, 12], "defin": [0, 1, 10, 12, 15, 17, 18, 20, 24], "definit": [1, 9, 12, 25], "delet": 10, "deliv": 20, "deliveri": 20, "demonstr": [19, 20, 21], "deni": 29, "densiti": 7, "density_map": 21, "depend": [17, 18, 24], "deploy": 16, "deposit": 14, "depth": 5, "describ": 18, "descript": [0, 14, 17, 18, 27], "design": [15, 18, 20], "desir": [14, 24], "detail": [0, 13, 14, 19, 22, 24, 27], "detect": 21, "develop": [16, 21, 25], "devic": [6, 13], "dialogu": 5, "dict": [0, 4, 5, 6, 10, 12, 15, 18, 19, 20, 21], "dictionari": [0, 4, 5, 6, 12, 13, 18, 26, 28, 29, 30], "differ": [6, 20, 22, 28, 30], "difficulti": 17, "dimens": [2, 6, 13, 14], "direct": [0, 2, 6, 9, 14, 15, 19, 20, 21, 24, 25, 27, 30], "direction_str": 6, "directionintern": [2, 9], "directli": [5, 6, 12], "directori": [14, 18, 22, 24], "dirt": 21, "discharg": 6, "disconnect": 23, "discov": [1, 18], "discoveri": [15, 17, 18, 19], "discret": 0, "disk": 22, "distanc": [6, 17], "distribut": [6, 7, 13, 15, 20], "divid": [6, 20], "dlc": 23, "do": 18, "doc": 23, "docker": [16, 22, 23], "docstr": 5, "document": [15, 16, 17, 18, 19], "doe": [14, 26, 28, 29], "doesn": [26, 28, 29], "domin": 21, "dominant_color": 21, "don": 26, "done": [19, 20, 21], "down": [6, 9, 24], "downgrad": 23, "drain": 6, "drill": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "drill_east": 30, "drill_north": 30, "drill_south": 30, "drill_west": 30, "drop_posit": [0, 6, 15, 19, 21, 24, 27], "durat": [5, 14], "dure": [0, 6, 17, 23, 24, 29], "dynam": [15, 17], "dynamic_profit_multipli": 5, "e": [12, 14, 16, 19, 20, 21, 24], "each": [14, 17, 22], "east": [6, 9, 30], "edg": [15, 17, 18, 21, 27], "effect": [20, 21], "effici": [13, 15, 17, 18, 19, 20, 21], "either": 6, "elaps": [1, 9], "elapsed_tim": 17, "electr": [2, 6, 7, 13], "electric_output_flow_limit": 6, "electrical_id": 6, "electricalproduc": [2, 6], "electricenergi": 7, "electricenergy2": 7, "electricengin": 7, "electricengineunit": 7, "electricfurnac": [2, 6, 7], "electricitygroup": [2, 6, 7], "electricitypol": [2, 6, 7], "electricminingdril": [2, 6, 7], "electron": 7, "electronic_circuit_throughput": 1, "electroniccircuit": 7, "elif": [15, 19, 20, 21], "els": [15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "empti": [6, 7, 18, 29], "emptybarrel": 7, "emptycrudeoilbarrel": 7, "emptyheavyoilbarrel": 7, "emptylightoilbarrel": 7, "emptylubricantbarrel": 7, "emptypetroleumgasbarrel": 7, "emptysulfuricacidbarrel": 7, "emptywaterbarrel": 7, "enabl": [5, 6, 18, 19, 20, 24], "encapsul": [0, 24], "encod": [13, 21], "end": 18, "end_posit": 6, "end_tim": [5, 16], "energi": [6, 7, 13, 24], "energy_sourc": 6, "energyshield": 7, "energyshield2": 7, "energysourc": [2, 6], "engin": 7, "engine_unit_throughput": 1, "engineunit": 7, "enhanc": [21, 24], "enhance_response_with_task_output": 12, "enough": 30, "ensur": [0, 1, 9, 13, 18, 21, 22, 23, 28, 30], "enter_loop": 10, "entiti": [0, 1, 2, 5, 7, 9, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "entities_built": 20, "entity_class_nam": 7, "entity_loc": 21, "entity_util": 19, "entitycor": [2, 6, 13], "entitygroup": [2, 6], "entityinfo": [2, 6], "entitystatu": [0, 2, 6, 13, 15, 19, 20, 21, 24], "enum": [0, 4, 6, 7, 9, 30], "enumer": [4, 6, 7, 9], "enummeta": 7, "env": [0, 1, 2, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24], "environ": [0, 5, 9, 12, 15, 16, 17, 19, 20, 21, 22, 23, 27], "episod": [15, 19, 20, 21, 24], "episode_count": 15, "equip": [7, 29], "error": [4, 9, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], "error_r": 19, "essenti": 14, "etc": [6, 14], "eval": [1, 2, 9, 14, 17, 19, 20, 21, 23, 24], "eval_dict": 10, "eval_with_error": [1, 9], "eval_with_timeout": 10, "evalu": [1, 9, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25], "everi": 16, "exact": 6, "examin": 29, "exampl": [12, 14, 27], "except": [0, 10, 21, 24], "exchang": [6, 7], "execut": [1, 5, 10, 14, 15, 17, 18, 24, 25], "execute_bodi": 10, "execute_nod": 10, "exhaust": 0, "exist": [15, 20, 23, 29, 30], "exit_loop": 10, "expect": [0, 30], "expens": 18, "experi": [15, 16, 17, 23], "explicitli": 6, "explor": [17, 19, 21, 24], "exploration_const": 5, "export": 16, "expr": [1, 9, 10], "express": [1, 7, 9, 10], "expressinsert": 7, "expresssplitt": 7, "expresstransportbelt": 7, "expressundergroundbelt": 7, "extend": 18, "extens": [15, 16], "extra": [6, 13], "extract": [6, 13, 14, 21, 26], "extract_item": [14, 28, 29], "extracted_count": 26, "f": [0, 15, 16, 18, 19, 20, 21, 26, 27, 28, 29, 30], "facil": 13, "factori": [1, 5, 12, 22, 24], "factorio": [0, 1, 5, 9, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 27], "factorioinst": [2, 9, 12, 25], "factorionamespac": [1, 2, 9, 10], "fail": [0, 1, 26, 28, 29, 30], "failur": [0, 1, 14, 18, 20, 21, 27], "fals": [1, 9, 10, 12, 13, 19, 20, 21], "fast": [1, 7, 9], "fastinsert": 7, "fastsplitt": 7, "fasttransportbelt": 7, "fastundergroundbelt": 7, "featur": [16, 23, 25], "feedback": [16, 21, 24], "field": 6, "file": [1, 9, 12, 14, 16, 17, 18, 22, 23, 24], "fill": 7, "fillcrudeoilbarrel": 7, "fillheavyoilbarrel": 7, "filllightoilbarrel": 7, "filllubricantbarrel": 7, "fillpetroleumgasbarrel": 7, "fillsulfuricacidbarrel": 7, "fillwaterbarrel": 7, "filter": [2, 5, 6, 7, 14, 18, 29], "filter_serializable_var": [2, 5], "filterinsert": [2, 6, 7], "final": 14, "find": [14, 19, 20, 21, 26, 27, 28, 29, 30], "find_entities_filt": 18, "firearm": 7, "firearmmagazin": 7, "firewal": 22, "first": [6, 22, 24], "first_namespac": [1, 9], "fix": 22, "flag": 30, "fle": [0, 1, 2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "fle123": 16, "fle_databas": 16, "fle_db_typ": 16, "fle_us": 16, "flexibl": 15, "float": [1, 4, 5, 6, 9, 12, 13], "flow": [4, 5, 6, 10, 13], "flow_rat": 6, "fluid": [1, 6, 7, 13], "fluid_box": 6, "fluid_ingredient_shortag": 6, "fluid_system": 6, "fluidbox_id": 6, "fluidhandl": [2, 6], "fly": 7, "flyingrobotfram": 7, "focus": 17, "follow": [0, 13, 15, 17, 27], "forc": 23, "form": [6, 10], "format": [0, 5, 14, 21], "found": [18, 19, 21, 23, 29], "fp": 13, "fraction": [19, 20, 21], "frame": 7, "framework": [12, 15, 25], "frequenc": 20, "frequency_penalti": 5, "frequent": 16, "from": [1, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 29, 30], "from_attribut": 5, "from_dict": 5, "from_factorio_direct": 9, "from_inst": 5, "from_int": 6, "from_row": 5, "from_str": 6, "fuel": [6, 7, 19, 24], "full": [0, 16, 19, 26, 28, 29], "full_burnt_result_output": 6, "full_output": 6, "fully_charg": 6, "func": 5, "func_data": 5, "function": [0, 1, 5, 6, 9, 10, 12, 13, 14, 18, 24], "furnac": [2, 6, 7, 14, 20, 28, 29], "furnace_result": 6, "furnace_sourc": 6, "g": [12, 14, 24], "ga": 7, "game": [0, 1, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 24, 25, 27, 29, 30], "game_info": [13, 15, 17, 19], "game_st": [0, 1, 9, 15, 19, 20, 21], "game_typ": [2, 15, 17, 18, 19, 20, 21], "gamecontrol": [2, 9], "gameinfo": 13, "gamest": [0, 2, 5], "gate": 7, "gather": 14, "gear": 7, "gener": [2, 6, 7, 13, 15, 16, 19, 21, 22, 23, 24], "generationparamet": [2, 5], "get": [0, 1, 5, 6, 9, 10, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], "get_agent_instruct": 12, "get_connection_amount": 14, "get_elapsed_tick": [1, 9], "get_ent": [0, 6, 13, 14, 15, 19, 20, 21, 24, 26, 28, 29], "get_funct": 10, "get_messag": 10, "get_migration_statu": 16, "get_new_flow": 5, "get_performance_metr": 16, "get_posit": [0, 19, 21], "get_prototype_recip": 14, "get_research_progress": [14, 20], "get_resource_patch": 14, "get_reward": 17, "get_spe": [1, 9], "get_statist": 16, "get_step": 5, "get_system_prompt": [1, 9], "get_uct": 5, "get_warn": [1, 9], "global": [5, 14, 18], "goal": 13, "goal_descript": 12, "gold": 21, "gracefulli": [0, 15, 18], "gradual": 19, "grai": 21, "graphic": 23, "grenad": 7, "grid": 6, "ground": 7, "group": [6, 7, 14, 16], "guid": [22, 27], "guidanc": 21, "gun": 7, "gunturret": [2, 6, 7], "gym": [0, 17, 19, 20, 21, 25], "gym_env": [0, 1, 2, 15, 19, 20, 21], "gym_run_config": 24, "ha": [14, 22, 23, 26], "hand": 7, "handl": [6, 7, 9, 10, 14, 15, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30], "handle_break": 10, "handle_continu": 10, "harvest": [5, 14], "harvest_resourc": 14, "hasattr": [15, 19, 20, 21], "have": [1, 9, 10, 15, 23, 26, 28, 29], "health": [6, 13, 16], "heat": [6, 7], "heatexchang": [2, 6, 7], "heatpip": 7, "heavi": [7, 14], "heavyoil": 7, "heavyoilcrack": 7, "height": [6, 7, 13], "hello": [1, 13, 15, 16], "help": 23, "helper": 10, "here": [15, 17, 18], "hierarch": [17, 24], "high": [16, 17, 20, 21, 23], "hint": [18, 27], "histori": 16, "holdout_valu": 5, "holdout_wait_period": 12, "how": [0, 14, 19, 20, 21], "html": 23, "http": 18, "i": [0, 1, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "id": [5, 6, 13, 16], "ideal": 16, "identif": 21, "identifi": [19, 21], "imag": [13, 21], "image_bound": 21, "image_cent": 21, "image_data": 21, "image_mod": 21, "image_process": 21, "image_processing_tim": 21, "image_s": 21, "img_arrai": 21, "immedi": 9, "implement": [1, 9, 14, 16, 18, 24, 25, 27, 29], "import": [1, 6, 12, 15, 16, 17, 18, 19, 20, 21, 23], "improv": [15, 19, 21], "includ": [0, 1, 5, 9, 12, 13, 14, 16, 18, 29], "index": [0, 14, 16, 25], "indexedposit": [2, 6], "indic": [12, 21], "individu": [13, 16], "info": [1, 13, 19, 20, 21], "inform": [0, 5, 12, 14, 15, 16, 20, 21, 25, 27, 30], "infra": 23, "infrastructur": 20, "ingredi": [2, 5, 6, 14, 24], "inherit": [14, 15, 18], "init": 24, "initi": [5, 14, 15, 16, 19, 20, 21, 23], "initialis": [1, 6, 9], "input": [1, 5, 6, 9, 14, 18, 21, 27], "input_connection_point": 6, "input_flow_limit": 6, "input_fluid": 6, "input_posit": 6, "insert": [2, 6, 7, 13, 14, 18, 28], "insert_item": [14, 26, 29], "inserted_count": 28, "inserter_throughput": 1, "inspect": [0, 27, 29], "inspect_inventori": [14, 15, 19, 20, 21, 26, 28], "inspectionresult": [2, 6], "instal": 25, "instanc": [0, 1, 2, 5, 6, 10, 12, 22], "insuffici": [29, 30], "int": [0, 4, 5, 6, 12, 13, 18, 26, 28], "integr": [1, 16], "intention": 24, "inter": [13, 20], "interact": [0, 1, 6, 9, 14, 15, 19, 21, 23, 25], "interfac": [1, 15, 16, 18], "intern": 24, "intflag": 6, "intuit": [15, 18], "invalid": [0, 1, 18, 24, 26, 27, 28, 29, 30], "inventori": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 24, 25, 26, 28, 29, 30], "inventory_threshold": 15, "inventory_typ": 29, "invok": 14, "io": 21, "iron": [0, 7, 12, 13, 15, 17, 18, 19, 20, 24, 26, 28, 29, 30], "iron_gear_wheel_throughput": 1, "iron_or": [17, 19, 20, 21, 29], "iron_ore_throughput": [1, 13, 16, 19, 20, 21], "iron_pl": 17, "iron_plate_task": 12, "iron_plate_throughput": [1, 12, 17], "iron_plate_throughput_16": 12, "iron_po": [19, 20, 21, 30], "ironchest": [0, 7, 15, 19, 20, 21, 24, 27], "irongearwheel": 7, "ironor": [0, 7, 24, 27, 30], "ironpl": 7, "ironplatethroughputtask": 17, "ironstick": 7, "is_clos": 6, "is_complet": 17, "is_input": 6, "is_multiag": [1, 5, 9], "is_paus": 9, "is_sourc": 6, "is_terminu": 6, "is_valid": 5, "is_work": 0, "isinst": 15, "issu": [1, 16, 19, 20, 21, 22, 23], "item": [1, 5, 6, 13, 14, 15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "item_data": 28, "item_ingredient_shortag": 6, "items_to_insert": 28, "ivborw0kggoaaaansuheugaa": 13, "jack": 6, "join": 15, "joint": 20, "json": [1, 5, 12, 17, 19, 20, 21, 24], "json_str": 5, "kei": [6, 12, 25], "keyword": 6, "kill": 6, "kwarg": [1, 5, 6, 9], "kwd": 7, "lab": [1, 2, 6, 7, 13, 20, 22], "lab_input": 6, "lab_modul": 6, "lab_plai": 1, "label": 6, "laboratori": 6, "lamp": 7, "landfil": 7, "larg": [16, 17, 21, 23], "largest": [1, 22], "last": [1, 9, 13, 24], "latenc": 20, "later": [0, 24], "latest": 16, "latest_vers": 16, "launch": [6, 14], "launch_count": 6, "launch_progress": 6, "launch_rocket": 14, "launching_rocket": 6, "layer": [2, 6], "learn": [0, 1, 5, 12, 15, 19, 20, 23, 24, 27], "leav": [1, 9], "left": [6, 9], "left_bottom": 6, "left_top": 6, "len": [19, 20, 21], "length": 0, "level": [5, 19], "leverag": [0, 27, 29], "librari": [0, 24], "licens": 23, "lift": 14, "light": 7, "lightoil": 7, "lightoilcrack": 7, "lightweight": 16, "like": [6, 14], "limit": [0, 15, 17, 18, 20, 22], "line": [0, 1, 9, 10, 19, 20, 21], "liquefact": 7, "liquifact": 7, "list": [5, 6, 10, 13, 14, 15, 16, 18, 19, 20, 21, 29], "list_backup": 16, "liter": 6, "live": 14, "llm": [5, 23, 25], "load": [1, 9, 10, 12, 15, 16, 18], "load_game_st": 16, "load_messag": 10, "load_step": 16, "load_trajectori": 16, "local": 18, "localhost": [1, 9, 16, 23], "locat": [14, 20, 30], "log": [10, 19], "log_level": 19, "logic": [14, 15, 17, 18, 24], "logist": [7, 20], "logistics2": 7, "logistics3": 7, "logistics_science_pack_throughput": 1, "logisticssciencepack": 7, "logit_bia": 5, "long": 7, "longer": 29, "longhandedinsert": 7, "look": [1, 9, 19, 21], "loop": 24, "loop_nod": 10, "loopcontext": [2, 10], "low": [7, 20], "low_density_structure_throughput": 1, "low_input_fluid": 6, "low_pow": 6, "low_temperatur": 6, "lowdensitystructur": 7, "lua": [14, 18], "lubric": 7, "m": 23, "machin": [6, 7, 13, 14, 20], "made": [6, 18], "magazin": 7, "magazine_s": 6, "mai": 24, "main": 1, "maintain": [0, 10, 21, 24, 25], "mainten": 25, "make": [0, 1, 5, 13, 15, 19, 20, 21, 22, 23, 30], "manag": [5, 15, 16, 19, 20, 21, 24, 25], "manual": [16, 23], "map": [6, 10, 13, 17, 19, 21, 22], "map_imag": [13, 21], "markdown": 14, "materi": [1, 7, 29], "max_connect": 16, "max_ent": 17, "max_length": 0, "max_mining_setup": [15, 19], "max_pow": 17, "max_static_unit_profit_cap": 5, "max_step": [15, 19, 20, 21], "max_token": 5, "maxim": 12, "maximum": 14, "mb": 21, "mcp": 23, "md": [14, 18], "meaning": 18, "meant": 6, "measur": 17, "medium": [7, 16, 20, 21], "mediumelectricpol": 7, "member": 10, "memori": [15, 20, 21, 22, 24], "memory_usag": 21, "messag": [0, 2, 5, 10, 13, 18, 20, 26, 28, 29, 30], "message_delivery_r": 20, "message_processing_tim": 20, "message_timeout": 20, "meta": [4, 5], "metadata": [4, 5, 12, 16], "method": [6, 13, 14, 18, 21, 29], "metric": [5, 12, 13, 15, 16, 18, 25], "might": 21, "migrat": 25, "militari": [1, 7], "military_science_pack_throughput": 1, "militarysci": 7, "militarysciencepack": 7, "mine": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "minim": [16, 19], "mining_dril": [20, 21], "mining_item": 29, "mining_op": 0, "mining_radiu": 15, "mining_setup": [15, 19, 20], "miningdril": [0, 2, 6, 13, 15, 19, 20, 21, 24, 27, 30], "miningoper": 0, "minut": 19, "miss": [1, 21], "missing_required_fluid": 6, "missing_science_pack": 6, "mistak": 24, "mk2": 7, "mkdir": 18, "mock": 17, "mod": 22, "mode": [14, 18, 19, 21, 27], "model": [6, 13, 21, 25], "model_config": [4, 5, 6, 13], "model_post_init": 6, "modul": [1, 25], "modular": [7, 15], "modulararmor": 7, "moment": 24, "monitor": [0, 14, 15, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "monitoring_interv": 19, "more": [19, 21, 22, 26, 28], "most": [1, 14, 27], "mount": 22, "move": [6, 13, 14], "move_to": 14, "movement": 0, "multi": [14, 15, 16, 17, 25], "multi_agent_perform": 20, "multiagent_config": 20, "multiagent_coordin": 20, "multiagentcoordin": 20, "multifluidhandl": [2, 6], "multipl": [6, 14, 16, 17, 20, 22, 23, 28], "must": [18, 30], "my": 18, "my_custom_ag": 15, "my_custom_task": 17, "my_tool": [14, 18], "myagent": 16, "mycustomag": 15, "mycustomtask": 17, "mytool": 18, "n": [1, 5, 9, 15], "name": [0, 5, 6, 7, 10, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 28, 29], "namespac": [0, 2, 5, 9, 24, 25], "namespace_class": [1, 9], "namespace_str": 10, "narrow": [14, 18], "natur": 6, "navig": 23, "ndarrai": 21, "nearest": [0, 14, 15, 19, 20, 21, 24, 27, 30], "nearest_build": [14, 30], "necessari": 22, "need": [6, 10, 14, 15, 16, 18, 19, 20, 22, 23], "neg": 18, "neighbour": [6, 24], "nest": 10, "network": [1, 6, 16, 22, 29], "new": [5, 6, 13, 14, 15, 17, 18], "next": [0, 14, 25, 27], "next_clockwis": 9, "next_counterclockwis": 9, "night": 7, "nightvis": 7, "no_ammo": 6, "no_fuel": [6, 19], "no_ingredi": 6, "no_input_fluid": 6, "no_minable_resourc": 6, "no_pow": [6, 15, 19], "no_recip": 6, "no_research_in_progress": 6, "node": 10, "non": 6, "none": [0, 1, 5, 6, 7, 9, 10, 12, 15, 17, 18, 19, 20, 21, 24], "normal": [6, 10, 19, 23, 24], "north": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "not_connect": 6, "not_connected_to_rail": 6, "not_plugged_in_electric_network": 6, "np": 21, "nuclear": [6, 7], "nuclearfuelreprocess": 7, "nuclearpow": 7, "nuclearreactor": 7, "num_ag": [0, 1, 5, 9], "number": [0, 1, 9, 10, 12, 18, 20, 26, 28], "numpi": 21, "ob": [1, 19, 20, 21], "object": [0, 1, 5, 7, 9, 10, 12, 13, 14, 17, 21, 22, 24, 30], "object_detect": 21, "object_detection_threshold": 21, "object_interaction_predict": 21, "observ": [1, 15, 16, 19, 20, 21, 24, 25], "obstacl": 14, "offici": 23, "offshor": [6, 7], "offshorepump": [2, 6, 7], "oil": [1, 6, 7], "oilprocess": 7, "oilrefineri": [2, 6, 7], "old": 16, "onc": 23, "onli": [1, 5, 6, 9, 23], "open": [1, 21, 22, 23, 25], "open_plai": 1, "openai": [1, 23], "openai_api_kei": 23, "oper": [0, 5, 6, 13, 14, 15, 16, 18, 19, 20, 21, 24, 27, 29], "operation_nam": 5, "opportun": 20, "opposit": 9, "optim": [12, 15, 17, 18, 19, 20, 21, 25], "optimization_en": 19, "optimization_request": 20, "option": [0, 1, 4, 5, 6, 12, 13, 14, 18, 25, 26, 28, 29, 30], "orchestr": 22, "ore": [7, 13, 15, 18, 19, 20, 24, 26, 28, 29, 30], "ores": 14, "organ": 24, "orient": [6, 14, 30], "origin": [6, 10], "other": [1, 6, 14, 15, 16, 18, 20, 23, 28, 29, 30], "out": [1, 9], "output": [0, 5, 6, 13, 16, 18, 21, 24, 25], "output_connection_point": 6, "output_flow_limit": 6, "output_fluid": 6, "output_posit": 6, "over": [15, 19, 29], "overal": 20, "overall_system_perform": 20, "overhead": 20, "overview": [14, 18, 25], "p": [16, 22], "pack": [1, 7], "packag": 23, "page": 25, "pair": 18, "panel": [6, 7], "parallel": 21, "param": [1, 9], "param1": [15, 18], "param2": 18, "param3": 18, "paramet": [0, 6, 12, 14, 15, 16, 17, 18, 21, 22, 27], "parent_id": 5, "parent_nod": 10, "parent_visit": 5, "pars": [5, 6, 17, 18], "parse_agent_messag": 5, "parse_arg": 6, "parse_raw": 5, "part": 7, "partial": [26, 28], "pass": [6, 17, 20], "patch": [0, 19, 21, 24], "path": 16, "pathfind": 14, "pattern": [14, 21, 24, 25], "paus": [1, 9, 14], "pause_at_spe": 9, "payload": 6, "peac": [1, 9], "per": [1, 17, 19, 21], "percentag": 14, "perform": [12, 13, 14, 15, 17, 18, 24, 25, 27], "permiss": [22, 23, 29], "persist": [0, 1, 15, 22], "petroleum": 7, "petroleum_gas_throughput": 1, "petroleumga": 7, "phase": 19, "pickl": 5, "pickup_ent": [14, 30], "pickup_posit": 6, "pierc": 7, "piercing_round_throughput": 1, "piercingroundsmagazin": 7, "pil": 21, "pip": 23, "pipe": [2, 6, 7, 13, 14], "pipegroup": [2, 6, 7], "pixel": 21, "place": [0, 6, 14, 19, 20, 21, 24, 27, 28, 29, 30], "place_ent": [0, 13, 14, 15, 19, 20, 21, 24, 27, 29], "place_entity_next_to": [0, 14, 15, 19, 20, 21, 24, 27, 30], "place_mining_setup": 0, "placeabl": 14, "placement": [0, 14, 17, 19, 30], "plai": [1, 22], "plan": [14, 18, 19, 20, 21], "plant": [6, 7, 14], "plastic": [6, 7], "plastic_bar_throughput": 1, "plasticbar": 7, "plate": [7, 12, 13, 17, 29], "player": [6, 13, 14, 26, 27, 28, 29], "player_posit": 6, "png": [13, 21], "point": 16, "pole": [6, 7], "polici": 15, "pool": 16, "poor": 21, "popular": 24, "populate_by_nam": 6, "port": [22, 23], "posit": [0, 2, 6, 14, 15, 18, 19, 20, 21, 24, 25, 27, 30], "possibl": [1, 18, 22], "post": 5, "postgr": 16, "postgres_db": 16, "postgres_password": 16, "postgres_us": 16, "postgresql": [23, 25], "power": [6, 7, 14, 15, 17, 19], "power_usag": 19, "powerarmor": 7, "powerarmor2": 7, "powerpol": 13, "practic": [14, 25], "pre": 14, "pre_holdout_wait_period": 12, "predict": 21, "preexist": 10, "preparing_rocket_for_launch": 6, "prerequisit": [5, 13, 14, 25], "presence_penalti": 5, "preserv": [1, 9], "prevent": 0, "previou": [1, 9], "previous": 24, "price_list": 5, "print": [0, 1, 14, 15, 16, 18, 19, 20, 21, 24, 26, 27, 28, 29, 30], "prioriti": 20, "priority_bas": 20, "privat": 6, "proactiv": 24, "probabl": 6, "problem": 20, "procedur": 22, "process": [6, 7, 15, 20, 25], "processing_perform": 21, "processing_unit_throughput": 1, "processingunit": 7, "produc": [6, 17, 19], "product": [2, 5, 6, 7, 12, 13, 14, 16, 20], "production_science_pack_throughput": 1, "productionflow": [2, 4, 5], "productionsciencepack": 7, "productivitymodul": 7, "productivitymodule2": 7, "productivitymodule3": 7, "profit": 5, "profitconfig": [2, 5], "program": [2, 5, 23, 24], "program_id": 4, "progress": [5, 13, 14, 19], "prompt": [1, 9], "prompt_token_usag": 5, "proper": [5, 27, 29], "properli": [15, 22, 23], "properti": [1, 5, 6, 7, 9, 13, 23], "protocol": [15, 20, 23], "prototyp": [0, 2, 6, 7, 13, 15, 19, 20, 21, 24, 27, 30], "prototype_nam": 7, "prototypemetaclass": [2, 7], "provid": [0, 1, 12, 13, 15, 16, 18, 22, 23, 24, 29], "provis": 12, "psql": 23, "pump": [2, 6, 7], "pumpjack": [2, 6, 7], "purchas": 23, "py": [1, 14, 17, 18, 23], "pydant": [4, 5, 6, 13], "pydantic_cor": 6, "pytest": [15, 17, 18], "python": [0, 1, 10, 12, 14, 15, 17, 18, 23, 24], "python3": 23, "qualiti": 21, "quantiti": [6, 13, 14], "queri": [13, 16, 24], "queue": 14, "quick": [16, 23], "quickstart": 25, "quota": 12, "radar": 7, "radiu": [6, 14, 18], "rail": [2, 6, 7], "railwai": [6, 7], "railwaytransport": 7, "rais": [1, 6, 9, 24], "rang": 21, "rate": [12, 17, 19, 20], "raw": 1, "raw_reward": 5, "raw_text": 13, "rcon_client": 9, "reactiv": 24, "reactor": [2, 6, 7], "read": 24, "readabl": 0, "reason": [4, 21], "recip": [2, 6, 7, 13, 14], "recipenam": [2, 7], "recognit": 21, "recommend": [14, 16, 23], "reconstruct": 5, "record": 19, "recoveri": [19, 20, 21, 25], "recovery_tim": 19, "recurs": 14, "reduc": [20, 21], "refer": [0, 2, 14, 20], "reference_posit": [0, 15, 19, 20, 21, 24, 27], "refineri": [6, 7], "regardless": [1, 9], "region": 21, "regist": [1, 15, 17, 18], "register_ag": 15, "registr": 25, "registri": [15, 17, 25], "regular": 16, "reinforc": 1, "rel": [14, 30], "relationship": 21, "relev": 24, "reliabl": 19, "reload_tim": 6, "remain": 14, "remov": [14, 16, 26, 27, 28, 29, 30], "render": [6, 23], "render_message_tool": 9, "repl": 24, "replac": [15, 20], "replai": 15, "report": [0, 20], "repres": [5, 6, 14, 24], "represent": [5, 24], "reprocess": 7, "request": [0, 20], "requir": [1, 6, 13, 14, 16, 17, 18, 20, 22, 24, 26, 28, 30], "research": [5, 6, 7, 17, 20, 22, 25], "research_plan": 20, "research_prior": 20, "research_progress": 5, "research_queu": [5, 20], "research_specialist": 20, "research_start": 20, "research_unit_count": 5, "research_unit_energi": 5, "researchspe": 7, "researchspecialist": 20, "researchst": [2, 5], "reset": [0, 1, 9, 10, 15, 17, 19, 20, 21], "reset_paus": [1, 9], "reset_posit": [1, 9], "reset_spe": [1, 9], "reset_to_default": 9, "reshap": 21, "resnet50": 21, "resolut": [15, 20, 21], "resolv": 20, "resourc": [0, 2, 6, 7, 13, 17, 19, 20, 21, 22, 24, 25, 29, 30], "resource_collect": 20, "resource_identif": 21, "resource_patch": 21, "resource_po": [15, 20], "resource_request": 20, "resource_scann": 18, "resource_specialist": 20, "resource_typ": [0, 18, 20], "resource_util": 19, "resource_wast": 19, "resourcecollectorag": 15, "resourcenam": [2, 7], "resourcepatch": [2, 6, 7], "resourcescann": 18, "resourcespecialist": 20, "respect": 14, "respons": [2, 4, 5, 12, 16, 20], "restart": 22, "restor": [1, 5, 9, 16], "restore_backup": 16, "result": [0, 1, 5, 9, 10, 18, 20, 26, 27, 28, 29, 30], "retri": 29, "retriev": [1, 13, 14, 24], "return": [0, 1, 5, 6, 9, 10, 12, 14, 15, 17, 18, 19, 20, 21, 24, 27], "reus": [1, 16, 24], "reusabl": [1, 15], "reward": [1, 12, 16, 17, 19, 20, 21], "rgb": 21, "rich": [1, 13], "right": [6, 9, 23], "right_bottom": 6, "right_top": 6, "robot": 7, "robust": [0, 17, 20, 21], "rock": [6, 14], "rocket": [2, 6, 7, 14], "rocket_inventori": 6, "rocket_part": 6, "rocket_progress": 6, "rocketcontrol": 7, "rocketcontrolunit": 7, "rocketfuel": 7, "rocketpart": 7, "rocketsilo": [2, 6, 7], "rocketsilotechnologi": 7, "role": [5, 20], "rotat": [14, 23], "rotate_ent": [14, 30], "round": 7, "round_robin": 20, "row": 5, "rtd": 23, "rtype": [1, 9], "rule": [14, 17], "run": [0, 1, 14, 16, 22, 23, 24, 25], "runtim": [0, 24], "runtime_error": 4, "safe": 23, "satellit": 7, "save": [16, 22, 24], "save_game_st": 16, "save_step": 16, "save_trajectori": 16, "scalabl": [20, 22], "scale": [16, 17, 23, 24], "scan": [15, 17, 18], "scanner": 25, "scenario": [15, 16, 17, 18, 19, 25, 27], "schedul": 16, "schema": [1, 9, 25], "scienc": [1, 7], "score": [4, 12, 13], "screenshot": 21, "script": 23, "sdk": 23, "search": [14, 25], "second": [1, 5, 6, 9, 14, 17, 20, 21, 24], "section": [2, 6, 27], "secur": [16, 18], "see": [14, 22, 24, 27], "segment": 21, "select": 23, "self": [0, 6, 14, 15, 17, 18, 19, 20, 21, 24], "send": 20, "send_messag": 20, "sens": 30, "sent": [6, 14], "sequenc": [10, 14], "serial": [5, 10, 14, 15], "serializ": 5, "serializablefunct": [2, 5, 10], "serialize_model": 6, "serialized_funct": 13, "server": [14, 16, 18, 22, 23, 29], "set": [1, 6, 9, 15, 16, 19, 21, 22, 23, 30], "set_entity_recip": 14, "set_research": [14, 20], "set_spe": [1, 9], "set_speed_and_unpaus": [1, 9], "set_system_messag": 5, "setup": [0, 6, 12, 16, 19, 20, 21, 25], "setup_api_kei": 23, "setup_inst": 12, "sever": [1, 9, 16, 22], "shape": 21, "share": [15, 20], "shared_st": 20, "shared_state_s": 20, "shield": 7, "shortli": 23, "should": [4, 5, 6, 13, 14], "show": 14, "show_number_of_steps_left_in_prompt": 12, "side": [14, 18, 25], "signatur": [0, 1, 5, 9, 13, 14], "silo": [6, 7, 14], "simpl": [15, 18, 19, 21, 27], "simplifi": 21, "simul": 24, "sinc": [1, 6, 9], "singl": [5, 10, 16], "site": 23, "size": [6, 13, 14, 16, 17, 20, 21], "sk": 23, "skills_db_host": 16, "skills_db_nam": 16, "skills_db_password": 16, "skills_db_port": 16, "skills_db_us": 16, "sleep": [0, 14, 24], "slot": 7, "slow": [20, 21], "small": [7, 16], "smallelectricpol": 7, "smalllamp": 7, "smelt": 6, "snapshot": 16, "solar": [6, 7], "solarenergi": 7, "solarpanel": [2, 6, 7], "solid": [6, 7], "solidfuel": 7, "solidfuelfromheavyoil": 7, "solidfuelfromlightoil": 7, "solidfuelfrompetroleumga": 7, "solut": [26, 28, 29, 30], "someth": 18, "sophist": 21, "sourc": [0, 1, 4, 5, 6, 7, 9, 10, 12, 13, 16, 23, 25], "south": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "space": [1, 7, 14, 22, 23, 25], "spacesci": 7, "spacesciencepack": 7, "spatial": [17, 21], "spatial_analysis_depth": 21, "spatial_featur": 21, "spatial_reason": 21, "spatial_understand": 21, "special": [10, 14, 15, 25], "specialist": 20, "specif": [6, 12, 14, 15, 16, 17, 18, 20, 21, 23, 27, 29], "specifi": 30, "speed": [1, 7, 9, 13, 14], "sphinx": 23, "split": 20, "splitter": [2, 6, 7], "sql": 16, "sqlite": 25, "sqlite_db_fil": 16, "stack": [0, 7], "stackfilterinsert": 7, "stackinsert": 7, "stackinsertercapacity1": 7, "stackinsertercapacity2": 7, "stale": 14, "standard": [0, 1, 12, 24], "start": [1, 9, 17, 19, 20, 21, 23, 24], "start_posit": 6, "start_tim": [5, 16, 17], "starting_inventori": 12, "startswith": 20, "startup": 16, "stat": [16, 22], "state": [0, 1, 5, 9, 12, 14, 15, 16, 17, 18, 19, 20, 24, 25], "state_id": 16, "statement": 0, "static": [1, 5, 6, 9, 12], "static_item": 5, "staticent": [2, 6], "statist": [12, 13, 16, 18], "statu": [0, 6, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "status_int": 6, "status_str": 6, "status_upd": 20, "stderr": [13, 24], "stdout": [13, 14, 24], "steam": [6, 7, 23], "steam_output_point": 6, "steamengin": 7, "steel": 7, "steel_plate_throughput": 1, "steelchest": 7, "steelfurnac": 7, "steelplat": 7, "steelprocess": 7, "step": [1, 4, 12, 16, 19, 20, 21, 23, 25], "step_count": [19, 20, 21], "step_numb": 16, "step_statist": 12, "stick": 7, "stone": [7, 19, 21, 29], "stone_wall_throughput": 1, "stonebrick": 7, "stonefurnac": 7, "stonewal": 7, "stop": 22, "stop_sequ": 5, "storag": [0, 1, 6, 7, 13, 19, 21, 24, 26, 28, 29], "storagetank": [2, 6, 7], "store": [0, 1, 5, 6, 13, 16, 21, 24], "str": [0, 1, 4, 5, 6, 9, 12, 13, 15, 18, 19, 20, 21, 26, 28, 29, 30], "strategi": [15, 20], "stream": 24, "string": [5, 10, 14, 18], "strong": 21, "structur": [1, 7, 14, 22, 25, 27], "sub": 17, "succe": 21, "succeed": [18, 26, 28, 29, 30], "success": [4, 12, 15, 16, 17, 18, 20, 24, 26, 27, 28, 29, 30], "success_threshold": [15, 19, 20, 21], "sudo": [22, 23], "sufuric_acid_throughput": 1, "suggest": 0, "suit": 14, "sulfur": [6, 7], "sulfur_throughput": 1, "sulfuricacid": 7, "sulfurprocess": 7, "sum": [19, 20, 21, 29], "sunlight": 6, "super": [15, 17, 19, 20, 21], "suppli": [6, 19], "support": [0, 10, 12, 14, 16, 22, 23, 26, 28, 29, 30], "sure": [22, 23], "surfac": 18, "symbol": 24, "syntax": 0, "synthesi": [0, 1, 15, 24], "system": [1, 5, 9, 12, 15, 16, 18, 19, 22, 23, 24, 25], "t": [26, 28, 29], "t1": 16, "tabl": [14, 16, 18], "take": [0, 1, 6], "tank": [6, 7], "target": [13, 15, 17], "target_ag": 20, "target_resourc": [15, 19, 20], "task": [1, 2, 4, 15, 16, 19, 20, 22, 25, 27], "task_assign": 20, "task_complet": 20, "task_completion_r": 20, "task_definit": [1, 17], "task_distribut": 20, "task_info": 13, "task_kei": 12, "task_path": 12, "task_queu": 20, "task_respons": 12, "task_verif": 13, "taskabc": [2, 12], "taskfactori": [2, 12], "taskrespons": [2, 4, 12], "taskverif": 13, "tcp_port": [1, 9], "techniqu": 21, "technologi": [2, 5, 7, 13, 14, 17, 20, 22], "technologyst": [2, 5], "temperatur": 5, "termin": [1, 19, 20, 21], "terrain": 30, "test": [14, 16, 19, 20, 25, 27], "test_agent_act": 15, "test_agent_cr": 15, "test_agent_reset": 15, "test_task_complet": 17, "test_task_cr": 17, "test_task_evalu": 17, "test_tool_cr": 18, "test_tool_error_handl": 18, "test_tool_execut": 18, "test_tool_with_posit": 18, "text": 0, "than": 26, "thei": 24, "them": [14, 26, 27], "theme": 23, "thi": [0, 1, 2, 5, 6, 9, 12, 14, 19, 20, 21, 22, 23, 24, 27], "third": 6, "thoroughli": [19, 20, 27], "threshold": 21, "through": [0, 1, 15, 22, 24], "throughout": [5, 24], "throughput": [1, 12, 13, 17, 19], "throughput_ent": 12, "throughput_task": 1, "throughputtask": [2, 12], "thu": 6, "tick": [1, 4, 5, 9, 13, 17], "tier": 6, "tile": [6, 14, 18], "tile_dimens": [6, 13, 24], "tile_height": [6, 24], "tile_width": [6, 24], "tiledimens": [2, 6, 13, 24], "time": [5, 13, 14, 15, 16, 17, 19, 20, 21, 22, 24, 29], "time_elaps": 6, "time_limit": 17, "timeout": [1, 4, 9, 10], "timestamp": [5, 16], "timing_metr": 5, "timingmetr": [2, 5], "to_bounding_box": 6, "to_dict": [0, 5], "to_factorio_direct": 9, "to_inst": 5, "to_raw": 5, "togeth": [16, 20, 27], "token_usag": 5, "toler": 6, "tolist": 21, "tool": [0, 1, 23, 24], "tool_nam": 27, "top": [6, 21], "total": [5, 14, 16, 19, 21, 29], "total_dur": 5, "total_item": [19, 21, 29], "total_materi": 29, "total_reward": [15, 16], "toward": [6, 13], "trace": 0, "track": [5, 6, 13, 14, 15, 16, 19, 21, 26, 27, 28, 29], "train": 6, "trajectori": [16, 24], "trajectory_001": 16, "trajectory_id": 16, "trajectory_length": 12, "transfer": [13, 14, 26, 28], "transport": [6, 7, 13], "transportbelt": [2, 6, 7, 13], "treat": 14, "tree": [6, 13, 14], "troubleshoot": 25, "true": [1, 5, 6, 9, 10, 12, 16, 18, 19, 20, 21], "truncat": [1, 19, 20, 21], "try": [0, 10, 21], "tune": 21, "tupl": [6, 21], "turret": 7, "turret_ammo": 6, "two": 5, "type": [0, 1, 5, 6, 9, 10, 12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30], "typehint": 23, "unbound": [1, 12, 22], "unboundedthroughputtask": [2, 12], "uncheck": 23, "underground": [6, 7], "undergroundbelt": [2, 6, 7], "undergroundpip": 7, "understand": [14, 21], "understood": 21, "unifi": 16, "union": 6, "uniqu": 21, "unique_color": 21, "unit": [1, 7], "unlock": 13, "unlock_all_research": 12, "unpaus": [1, 9], "unpickl": 5, "unwrap": 10, "unwrap_after_deseri": [2, 10], "up": [1, 6, 9, 13, 15, 19, 21, 22, 23, 24], "updat": [14, 15, 18, 20, 26, 28], "upper": [15, 20], "uptim": 19, "uranium": 7, "uranium235": 7, "uranium238": 7, "uraniumfuelcel": 7, "uraniumor": 7, "uraniumprocess": 7, "us": [0, 1, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 23, 24, 26, 27, 28, 29, 30], "usag": [0, 12, 14, 15, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30], "use_populated_inventori": 12, "user": [16, 22, 23], "util": [5, 7, 19, 21, 24, 29], "utility_science_pack_throughput": 1, "utilitysciencepack": 7, "uv": 23, "v": 0, "valid": [5, 6, 13, 14, 16, 18, 19, 23, 25, 27, 30], "validate_by_alia": 6, "validate_by_nam": 6, "validationerror": 6, "valu": [0, 4, 5, 6, 7, 9, 10, 12, 18, 19, 20, 21, 27, 29, 30], "value1": [15, 18], "valueerror": 0, "variabl": [0, 1, 10, 16, 22, 24], "variou": [5, 12, 14, 15, 17, 27, 29, 30], "vars_dict": 5, "verif": 25, "verifi": [0, 12, 16, 18, 19, 22, 23, 24, 26, 28, 29], "version": [5, 16, 18, 23], "version_descript": 5, "vision": [7, 21], "vision_en": 21, "visit": 5, "visual": [15, 25], "visual_accuraci": 21, "visual_ag": 21, "visual_agent_config": 21, "visual_analysi": 21, "visual_memori": 21, "visual_memory_s": 21, "visual_planning_effect": 21, "visual_reason": 21, "visualag": 21, "volum": [22, 23], "vote": 20, "wa": 29, "wait": 14, "waiting_for_source_item": 6, "waiting_for_space_in_destin": 6, "waiting_to_launch_rocket": 6, "wall": [6, 7], "wallgroup": [2, 6], "warn": [1, 6, 13], "wast": 19, "water": [6, 7, 14], "we": [1, 9, 15], "websit": 23, "west": [6, 9, 30], "what": [6, 14], "wheel": 7, "when": [1, 6, 9, 16, 18, 24], "where": [6, 26, 28, 30], "whether": [13, 18, 26, 28, 29, 30], "which": [1, 5, 14, 24], "while": [10, 14, 19, 20, 21], "whose": 29, "width": [6, 7, 13], "within": 16, "without": [1, 9, 22, 23], "wood": 7, "wooden": 7, "woodenchest": 7, "work": [0, 6, 14, 15, 19, 20, 21, 24], "working_ent": [19, 20, 21], "world": [13, 14, 24, 30], "wrap": 10, "wrap_for_seri": [2, 10], "wrapper": 5, "write": 18, "written": 24, "x": [6, 13, 18, 19, 21, 23, 24, 30], "y": [6, 13, 18, 19, 21, 24, 30], "you": [14, 17, 18, 22, 23, 24], "your": [14, 15, 17, 18, 22, 23], "zero": 18}, "titles": ["Action Space", "Environment API", "API Modules", "fle.agents.agent_abc module", "fle.agents.models module", "fle.commons.models module", "fle.env.entities module", "fle.env.game_types module", "fle.env.gym_env module", "fle.env.instance module", "fle.env.namespace module", "fle.eval.algorithms module", "fle.eval.tasks module", "Observation Space", "Tools API", "Implementing Custom Agents", "Database Configuration", "Creating Custom Tasks", "Creating Custom Tools", "Basic Agent Example", "Multi-Agent Example", "Visual Agent Example", "Cluster Setup", "Installation", "Quickstart", "Welcome to Factorio Learning Environment\u2019s documentation!", "extract_item", "Tools Documentation", "insert_item", "inspect_inventory", "place_entity"], "titleterms": {"": 25, "action": 0, "advanc": [15, 17, 18, 22], "agent": [0, 2, 3, 4, 15, 19, 20, 21], "agent_abc": 3, "algorithm": 11, "analysi": 21, "api": [1, 2, 14, 23, 25], "architectur": [14, 15, 18, 20], "avail": 1, "backup": 16, "base": 15, "basic": 19, "behavior": 19, "best": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "build": 23, "categori": [14, 27], "class": 15, "client": [16, 23], "cluster": 22, "code": 0, "collector": 15, "common": [2, 5], "compon": 0, "concept": [1, 24], "configur": [15, 16, 17, 19, 20, 21, 22, 23], "connect": [14, 27], "control": [14, 27], "core": [1, 2, 14, 27], "craft": [14, 27], "creat": [14, 17, 18], "custom": [14, 15, 17, 18, 25], "databas": 16, "debug": [14, 27], "definit": [0, 17], "develop": [18, 27], "direct": 13, "document": [14, 23, 25, 27], "entiti": [6, 13, 14, 27], "env": [6, 7, 8, 9, 10], "environ": [1, 2, 24, 25], "error": [0, 1], "eval": [11, 12], "evalu": 2, "exampl": [0, 1, 13, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "execut": 0, "extract_item": 26, "factorio": 25, "factorioinst": 1, "failur": [26, 28, 29, 30], "featur": [15, 17, 18, 21], "fle": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "game": 13, "game_typ": 7, "get": 25, "gym": 1, "gym_env": 8, "handl": [0, 1], "implement": [15, 17, 19, 20, 21], "indic": 25, "inform": 13, "insert_item": 28, "inspect_inventori": 29, "instal": 23, "instanc": 9, "interact": 24, "inventori": [13, 14, 27], "kei": [1, 15, 16, 23, 24], "learn": 25, "maintain": 23, "mainten": 16, "manag": [1, 13, 14, 22, 27], "method": [1, 15, 16], "metric": [19, 20, 21], "migrat": 16, "mode": [26, 28, 29, 30], "model": [2, 4, 5], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "monitor": 16, "movement": [14, 27], "multi": [0, 20], "namespac": [1, 10], "next": 24, "observ": 13, "optim": 16, "option": 23, "output": [14, 19, 27], "overview": [19, 20, 21, 24, 26, 28, 29, 30], "paramet": [26, 28, 29, 30], "pattern": 27, "perform": [16, 19, 20, 21], "place_ent": 30, "posit": 13, "postgresql": 16, "practic": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "prerequisit": 23, "process": [18, 21], "queri": [14, 27], "quickstart": 24, "recoveri": 16, "refer": 25, "registr": [15, 17, 18], "registri": 1, "relat": [26, 28, 29, 30], "research": [13, 14, 27], "resourc": [14, 15, 18, 27], "return": [26, 28, 29, 30], "run": [19, 20, 21], "scanner": 18, "scenario": 22, "schema": 16, "setup": [22, 23], "side": 23, "space": [0, 13], "special": 20, "sqlite": 16, "start": [22, 25], "state": 13, "step": 24, "structur": [0, 13, 17, 18], "system": [13, 20], "tabl": 25, "task": [12, 13, 17], "test": [15, 17, 18], "tool": [14, 18, 25, 26, 27, 28, 29, 30], "troubleshoot": [16, 19, 20, 21, 22, 23], "type": [13, 15, 16, 17], "usag": [1, 16, 27], "valid": 0, "verif": 13, "visual": 21, "welcom": 25}}) \ No newline at end of file +Search.setIndex({"alltitles": {"API Key Configuration": [[23, "api-key-configuration"]], "API Modules": [[2, null]], "API Reference": [[25, null]], "Action Components": [[0, "action-components"]], "Action Space": [[0, null]], "Action Space Definition": [[0, "action-space-definition"]], "Action Structure": [[0, "action-structure"]], "Action Validation": [[0, "action-validation"]], "Advanced Agent Features": [[15, "advanced-agent-features"]], "Advanced Configuration": [[22, "advanced-configuration"]], "Advanced Features": [[17, "advanced-features"], [18, "advanced-features"]], "Agent Architecture": [[15, "agent-architecture"], [20, "agent-architecture"]], "Agent Behavior": [[19, "agent-behavior"]], "Agent Configuration": [[15, "agent-configuration"], [19, "agent-configuration"], [21, "agent-configuration"]], "Agent Implementation": [[15, "agent-implementation"], [19, "agent-implementation"], [21, "agent-implementation"]], "Agent Overview": [[19, "agent-overview"], [21, "agent-overview"]], "Agent Registration": [[15, "agent-registration"]], "Agent Testing": [[15, "agent-testing"]], "Agent Types": [[15, "agent-types"]], "Agents": [[2, "agents"]], "Available Environments": [[1, "available-environments"]], "Backup and Recovery": [[16, "backup-and-recovery"]], "Base Agent Class": [[15, "base-agent-class"]], "Basic Agent Example": [[19, null]], "Best Practices": [[0, "best-practices"], [15, "best-practices"], [16, "best-practices"], [17, "best-practices"], [18, "best-practices"], [19, "best-practices"], [20, "best-practices"], [21, "best-practices"], [26, "best-practices"], [27, "best-practices"], [28, "best-practices"], [29, "best-practices"], [30, "best-practices"]], "Building Documentation (Maintainers)": [[23, "building-documentation-maintainers"]], "Client-side Setup (Optional)": [[23, "client-side-setup-optional"]], "Cluster Management": [[22, "cluster-management"]], "Cluster Setup": [[22, null]], "Code Execution": [[0, "code-execution"]], "Common Models": [[2, "common-models"]], "Configuration": [[22, "configuration"]], "Connection Management": [[14, "connection-management"], [27, "connection-management"]], "Core Concepts": [[1, "core-concepts"]], "Core Environment": [[2, "core-environment"]], "Core Tools": [[14, "core-tools"], [27, "core-tools"]], "Crafting and Research": [[14, "crafting-and-research"], [27, "crafting-and-research"]], "Creating Custom Tasks": [[17, null]], "Creating Custom Tools": [[14, "creating-custom-tools"], [18, null]], "Customization": [[25, null]], "Database Client": [[16, "database-client"]], "Database Configuration": [[16, null]], "Database Migration": [[16, "database-migration"]], "Database Schema": [[16, "database-schema"]], "Database Types": [[16, "database-types"]], "Debugging and Output": [[14, "debugging-and-output"], [27, "debugging-and-output"]], "Entity Information": [[13, "entity-information"]], "Entity Management": [[14, "entity-management"], [27, "entity-management"]], "Entity Queries": [[14, "entity-queries"], [27, "entity-queries"]], "Entity Types": [[13, "entity-types"]], "Environment API": [[1, null]], "Environment Overview": [[24, "environment-overview"]], "Environment Registry": [[1, "environment-registry"]], "Error Handling": [[0, "error-handling"], [1, "error-handling"]], "Evaluation": [[2, "evaluation"]], "Example Actions": [[0, "example-actions"]], "Example Agent: Resource Collector": [[15, "example-agent-resource-collector"]], "Example Backup": [[16, "example-backup"]], "Example Configuration": [[15, "example-configuration"]], "Example Error Handling": [[0, "example-error-handling"]], "Example Interaction": [[24, "example-interaction"]], "Example Metrics": [[19, "example-metrics"], [20, "example-metrics"], [21, "example-metrics"]], "Example Migration": [[16, "example-migration"]], "Example Monitoring": [[16, "example-monitoring"]], "Example Observation": [[13, "example-observation"]], "Example Optimization": [[16, "example-optimization"]], "Example Output": [[19, "example-output"]], "Example Registration": [[15, "example-registration"]], "Example Task": [[17, "example-task"]], "Example Tool: Resource Scanner": [[18, "example-tool-resource-scanner"]], "Example Usage": [[1, "example-usage"], [16, "example-usage"]], "Example Visual Analysis": [[21, "example-visual-analysis"]], "Examples": [[25, null], [26, "examples"], [28, "examples"], [29, "examples"], [30, "examples"]], "FactorioInstance": [[1, "factorioinstance"]], "Failure Modes": [[26, "failure-modes"], [28, "failure-modes"], [29, "failure-modes"], [30, "failure-modes"]], "Game State Information": [[13, "game-state-information"]], "Getting Started": [[25, null]], "Gym Environment": [[1, "gym-environment"]], "Implementing Custom Agents": [[15, null]], "Indices and tables": [[25, "indices-and-tables"]], "Installation": [[23, null], [23, "id1"]], "Inventory Management": [[13, "inventory-management"], [14, "inventory-management"], [27, "inventory-management"]], "Key Concepts": [[24, "key-concepts"]], "Key Methods": [[1, "key-methods"], [15, "key-methods"], [16, "key-methods"]], "Monitoring and Maintenance": [[16, "monitoring-and-maintenance"]], "Movement and Control": [[14, "movement-and-control"], [27, "movement-and-control"]], "Multi-Agent Actions": [[0, "multi-agent-actions"]], "Multi-Agent Configuration": [[20, "multi-agent-configuration"]], "Multi-Agent Example": [[20, null]], "Multi-Agent Implementation": [[20, "multi-agent-implementation"]], "Multi-Agent Overview": [[20, "multi-agent-overview"]], "Namespace Management": [[1, "namespace-management"]], "Next Steps": [[24, "next-steps"]], "Observation Space": [[13, null]], "Observation Structure": [[13, "observation-structure"]], "Overview": [[26, "overview"], [28, "overview"], [29, "overview"], [30, "overview"]], "Parameters": [[26, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"]], "Performance Metrics": [[19, "performance-metrics"], [20, "performance-metrics"], [21, "performance-metrics"]], "Performance Optimization": [[16, "performance-optimization"]], "Position and Direction": [[13, "position-and-direction"]], "PostgreSQL Configuration": [[16, "postgresql-configuration"]], "Prerequisites": [[23, "prerequisites"]], "Quickstart": [[24, null]], "Related Tools": [[26, "related-tools"], [28, "related-tools"], [29, "related-tools"], [30, "related-tools"]], "Research System": [[13, "research-system"]], "Resource Management": [[14, "resource-management"], [27, "resource-management"]], "Returns": [[26, "returns"], [28, "returns"], [29, "returns"], [30, "returns"]], "Running Multi-Agent Systems": [[20, "running-multi-agent-systems"]], "Running the Agent": [[19, "running-the-agent"]], "Running the Visual Agent": [[21, "running-the-visual-agent"]], "SQLite Configuration": [[16, "sqlite-configuration"]], "Scenarios": [[22, "scenarios"]], "Specialized Agents": [[20, "specialized-agents"]], "Starting a Cluster": [[22, "starting-a-cluster"]], "Task Configuration": [[17, "task-configuration"]], "Task Definition": [[17, "task-definition"]], "Task Implementation": [[17, "task-implementation"]], "Task Registration": [[17, "task-registration"]], "Task Structure": [[17, "task-structure"]], "Task Types": [[17, "task-types"]], "Task Verification": [[13, "task-verification"]], "Testing Tasks": [[17, "testing-tasks"]], "Testing Tools": [[18, "testing-tools"]], "Tool Architecture": [[14, "tool-architecture"], [18, "tool-architecture"]], "Tool Categories": [[14, "tool-categories"], [27, "tool-categories"]], "Tool Development": [[27, "tool-development"]], "Tool Development Process": [[18, "tool-development-process"]], "Tool Documentation": [[14, "tool-documentation"]], "Tool Registration": [[18, "tool-registration"]], "Tool Structure": [[18, "tool-structure"]], "Tool Usage Patterns": [[27, "tool-usage-patterns"]], "Tools": [[25, null]], "Tools API": [[14, null]], "Tools Documentation": [[27, null]], "Troubleshooting": [[16, "troubleshooting"], [19, "troubleshooting"], [20, "troubleshooting"], [21, "troubleshooting"], [22, "troubleshooting"], [23, "troubleshooting"]], "Visual Agent Example": [[21, null]], "Visual Processing Features": [[21, "visual-processing-features"]], "Welcome to Factorio Learning Environment\u2019s documentation!": [[25, null]], "extract_item": [[26, null]], "fle.agents.agent_abc module": [[3, null]], "fle.agents.models module": [[4, null]], "fle.commons.models module": [[5, null]], "fle.env.entities module": [[6, null]], "fle.env.game_types module": [[7, null]], "fle.env.gym_env module": [[8, null]], "fle.env.instance module": [[9, null]], "fle.env.namespace module": [[10, null]], "fle.eval.algorithms module": [[11, null]], "fle.eval.tasks module": [[12, null]], "insert_item": [[28, null]], "inspect_inventory": [[29, null]], "place_entity": [[30, null]]}, "docnames": ["api/action", "api/environment", "api/modules", "api/modules/fle.agents.agent_abc", "api/modules/fle.agents.models", "api/modules/fle.commons.models", "api/modules/fle.env.entities", "api/modules/fle.env.game_types", "api/modules/fle.env.gym_env", "api/modules/fle.env.instance", "api/modules/fle.env.namespace", "api/modules/fle.eval.algorithms", "api/modules/fle.eval.tasks", "api/observation", "api/tools", "customization/agents", "customization/database", "customization/tasks", "customization/tools", "examples/basic_agent", "examples/multiagent", "examples/visual_agent", "getting_started/cluster", "getting_started/installation", "getting_started/quickstart", "index", "tools/extract_item", "tools/index", "tools/insert_item", "tools/inspect_inventory", "tools/place_entity"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["api/action.rst", "api/environment.rst", "api/modules.rst", "api/modules/fle.agents.agent_abc.rst", "api/modules/fle.agents.models.rst", "api/modules/fle.commons.models.rst", "api/modules/fle.env.entities.rst", "api/modules/fle.env.game_types.rst", "api/modules/fle.env.gym_env.rst", "api/modules/fle.env.instance.rst", "api/modules/fle.env.namespace.rst", "api/modules/fle.eval.algorithms.rst", "api/modules/fle.eval.tasks.rst", "api/observation.rst", "api/tools.rst", "customization/agents.rst", "customization/database.rst", "customization/tasks.rst", "customization/tools.rst", "examples/basic_agent.rst", "examples/multiagent.rst", "examples/visual_agent.rst", "getting_started/cluster.rst", "getting_started/installation.rst", "getting_started/quickstart.rst", "index.rst", "tools/extract_item.rst", "tools/index.rst", "tools/insert_item.rst", "tools/inspect_inventory.rst", "tools/place_entity.rst"], "indexentries": {"__init__() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.__init__", false]], "__init__() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.__init__", false]], "agentabc (class in fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.AgentABC", false]], "check_step_completion() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.check_step_completion", false]], "cleanup() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.cleanup", false]], "connect_to_server() (fle.env.instance.factorioinstance static method)": [[1, "fle.env.instance.FactorioInstance.connect_to_server", false]], "conversation (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.conversation", false]], "create_default_agent_card() (in module fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.create_default_agent_card", false]], "dimensions (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.dimensions", false]], "end() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.end", false]], "energy (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.energy", false]], "entity (class in fle.env.entities)": [[13, "fle.env.entities.Entity", false]], "eval() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval", false]], "eval_with_error() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval_with_error", false]], "factorioinstance (class in fle.env.instance)": [[1, "fle.env.instance.FactorioInstance", false]], "first_namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.first_namespace", false]], "fle.agents.agent_abc": [[3, "module-fle.agents.agent_abc", false]], "get_agent_card() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.get_agent_card", false]], "get_elapsed_ticks() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false]], "get_environment_info() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.get_environment_info", false]], "get_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_speed", false]], "get_system_prompt() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_system_prompt", false]], "get_warnings() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_warnings", false]], "health (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.health", false]], "height (fle.env.entities.entity property)": [[13, "fle.env.entities.Entity.height", false]], "id (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.id", false]], "initialise() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.initialise", false]], "is_multiagent (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.is_multiagent", false]], "list_available_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.list_available_environments", false]], "model (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.model", false]], "model_config (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.model_config", false]], "module": [[3, "module-fle.agents.agent_abc", false]], "namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.namespace", false]], "namespace_class (fle.env.instance.factorioinstance attribute)": [[1, "fle.env.instance.FactorioInstance.namespace_class", false]], "pause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.pause", false]], "prototype (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.prototype", false]], "register_all_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.register_all_environments", false]], "reset() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.reset", false], [1, "id0", false]], "set_conversation() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.set_conversation", false]], "set_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed", false]], "set_speed_and_unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false]], "status (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.status", false]], "step() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.step", false]], "system_prompt (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.system_prompt", false]], "tile_dimensions (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.tile_dimensions", false]], "type (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.type", false]], "unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.unpause", false]], "warnings (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.warnings", false]], "width (fle.env.entities.entity property)": [[13, "fle.env.entities.Entity.width", false]]}, "objects": {"fle.agents": [[3, 0, 0, "-", "agent_abc"], [4, 0, 0, "-", "models"]], "fle.agents.agent_abc": [[3, 1, 1, "", "AgentABC"], [3, 4, 1, "", "create_default_agent_card"]], "fle.agents.agent_abc.AgentABC": [[3, 2, 1, "", "__init__"], [3, 2, 1, "", "check_step_completion"], [3, 3, 1, "", "conversation"], [3, 2, 1, "", "end"], [3, 2, 1, "", "get_agent_card"], [3, 3, 1, "", "model"], [3, 2, 1, "", "set_conversation"], [3, 2, 1, "", "step"], [3, 3, 1, "", "system_prompt"]], "fle.agents.models": [[4, 1, 1, "", "CompletionReason"], [4, 1, 1, "", "CompletionResult"], [4, 1, 1, "", "Response"], [4, 1, 1, "", "TaskResponse"]], "fle.agents.models.CompletionReason": [[4, 3, 1, "", "RUNTIME_ERROR"], [4, 3, 1, "", "SUCCESS"], [4, 3, 1, "", "TIMEOUT"]], "fle.agents.models.CompletionResult": [[4, 3, 1, "", "metadata"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "reason"], [4, 3, 1, "", "step"]], "fle.agents.models.Response": [[4, 3, 1, "", "achievements"], [4, 3, 1, "", "code"], [4, 3, 1, "", "created_at"], [4, 3, 1, "", "error"], [4, 3, 1, "", "flows"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "program_id"], [4, 3, 1, "", "response"], [4, 3, 1, "", "score"], [4, 3, 1, "", "step"], [4, 3, 1, "", "task"], [4, 3, 1, "", "ticks"]], "fle.agents.models.TaskResponse": [[4, 3, 1, "", "meta"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "success"]], "fle.commons": [[5, 0, 0, "-", "models"]], "fle.commons.models": [[5, 1, 1, "", "Conversation"], [5, 1, 1, "", "GameState"], [5, 1, 1, "", "GenerationParameters"], [5, 1, 1, "", "Message"], [5, 1, 1, "", "ProductionFlows"], [5, 1, 1, "", "ProfitConfig"], [5, 1, 1, "", "Program"], [5, 1, 1, "", "ResearchState"], [5, 1, 1, "", "SerializableFunction"], [5, 1, 1, "", "TechnologyState"], [5, 1, 1, "", "TimingMetrics"], [5, 4, 1, "", "filter_serializable_vars"]], "fle.commons.models.Conversation": [[5, 2, 1, "", "add_agent_message"], [5, 2, 1, "", "add_result"], [5, 2, 1, "", "add_user_message"], [5, 3, 1, "", "messages"], [5, 3, 1, "", "model_config"], [5, 2, 1, "", "parse_raw"], [5, 2, 1, "", "set_system_message"]], "fle.commons.models.GameState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "agent_messages"], [5, 3, 1, "", "entities"], [5, 2, 1, "", "from_instance"], [5, 3, 1, "", "inventories"], [5, 5, 1, "", "is_multiagent"], [5, 3, 1, "", "namespaces"], [5, 5, 1, "", "num_agents"], [5, 2, 1, "", "parse"], [5, 2, 1, "", "parse_agent_messages"], [5, 2, 1, "", "parse_raw"], [5, 3, 1, "", "research"], [5, 3, 1, "", "timestamp"], [5, 2, 1, "", "to_instance"], [5, 2, 1, "", "to_raw"]], "fle.commons.models.GenerationParameters": [[5, 3, 1, "", "frequency_penalty"], [5, 3, 1, "", "logit_bias"], [5, 3, 1, "", "max_tokens"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "n"], [5, 3, 1, "", "presence_penalty"], [5, 3, 1, "", "stop_sequences"], [5, 3, 1, "", "temperature"]], "fle.commons.models.Message": [[5, 3, 1, "", "content"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "role"]], "fle.commons.models.ProductionFlows": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "crafted"], [5, 2, 1, "", "from_dict"], [5, 2, 1, "", "get_new_flows"], [5, 3, 1, "", "harvested"], [5, 3, 1, "", "input"], [5, 2, 1, "", "is_valid"], [5, 3, 1, "", "output"], [5, 3, 1, "", "price_list"], [5, 3, 1, "", "static_items"], [5, 2, 1, "", "to_dict"]], "fle.commons.models.ProfitConfig": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "dynamic_profit_multiplier"], [5, 3, 1, "", "max_static_unit_profit_cap"]], "fle.commons.models.Program": [[5, 3, 1, "", "achievements"], [5, 3, 1, "", "advantage"], [5, 3, 1, "", "code"], [5, 3, 1, "", "completion_token_usage"], [5, 3, 1, "", "conversation"], [5, 3, 1, "", "created_at"], [5, 3, 1, "", "depth"], [5, 3, 1, "", "flows"], [5, 2, 1, "", "from_row"], [5, 2, 1, "", "get_step"], [5, 2, 1, "", "get_uct"], [5, 3, 1, "", "holdout_value"], [5, 3, 1, "", "id"], [5, 3, 1, "", "instance"], [5, 3, 1, "", "meta"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "parent_id"], [5, 3, 1, "", "prompt_token_usage"], [5, 3, 1, "", "raw_reward"], [5, 3, 1, "", "response"], [5, 3, 1, "", "state"], [5, 3, 1, "", "ticks"], [5, 3, 1, "", "timing_metrics"], [5, 3, 1, "", "token_usage"], [5, 3, 1, "", "value"], [5, 3, 1, "", "version"], [5, 3, 1, "", "version_description"], [5, 3, 1, "", "visits"]], "fle.commons.models.ResearchState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "current_research"], [5, 3, 1, "", "progress"], [5, 3, 1, "", "research_progress"], [5, 3, 1, "", "research_queue"], [5, 3, 1, "", "technologies"]], "fle.commons.models.SerializableFunction": [[5, 2, 1, "", "__call__"], [5, 2, 1, "", "__getstate__"], [5, 2, 1, "", "__init__"], [5, 2, 1, "", "__setstate__"], [5, 2, 1, "", "__str__"], [5, 2, 1, "", "bind"], [5, 2, 1, "", "reconstruct"]], "fle.commons.models.TechnologyState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "enabled"], [5, 3, 1, "", "ingredients"], [5, 3, 1, "", "level"], [5, 3, 1, "", "name"], [5, 3, 1, "", "prerequisites"], [5, 3, 1, "", "research_unit_count"], [5, 3, 1, "", "research_unit_energy"], [5, 3, 1, "", "researched"]], "fle.commons.models.TimingMetrics": [[5, 3, 1, "", "children"], [5, 5, 1, "", "duration"], [5, 3, 1, "", "end_time"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "operation_name"], [5, 3, 1, "", "start_time"], [5, 2, 1, "", "to_dict"], [5, 5, 1, "", "total_duration"]], "fle.env": [[6, 0, 0, "-", "entities"], [7, 0, 0, "-", "game_types"], [8, 0, 0, "-", "gym_env"], [9, 0, 0, "-", "instance"], [10, 0, 0, "-", "namespace"]], "fle.env.entities": [[6, 1, 1, "", "Accumulator"], [6, 1, 1, "", "AdvancedAssemblingMachine"], [6, 1, 1, "", "Ammo"], [6, 1, 1, "", "AssemblingMachine"], [6, 1, 1, "", "BeltGroup"], [6, 1, 1, "", "Boiler"], [6, 1, 1, "", "BoundingBox"], [6, 1, 1, "", "BuildingBox"], [6, 1, 1, "", "BurnerInserter"], [6, 1, 1, "", "BurnerMiningDrill"], [6, 1, 1, "", "BurnerType"], [6, 1, 1, "", "ChemicalPlant"], [6, 1, 1, "", "Chest"], [6, 1, 1, "", "Dimensions"], [6, 1, 1, "", "Direction"], [6, 1, 1, "", "Electric"], [6, 1, 1, "", "ElectricFurnace"], [6, 1, 1, "", "ElectricMiningDrill"], [6, 1, 1, "", "ElectricalProducer"], [6, 1, 1, "", "ElectricityGroup"], [6, 1, 1, "", "ElectricityPole"], [6, 1, 1, "", "EnergySource"], [13, 1, 1, "", "Entity"], [6, 1, 1, "", "EntityCore"], [6, 1, 1, "", "EntityGroup"], [6, 1, 1, "", "EntityInfo"], [6, 1, 1, "", "EntityStatus"], [6, 1, 1, "", "FilterInserter"], [6, 1, 1, "", "Filtered"], [6, 1, 1, "", "FluidHandler"], [6, 1, 1, "", "Furnace"], [6, 1, 1, "", "Generator"], [6, 1, 1, "", "GunTurret"], [6, 1, 1, "", "HeatExchanger"], [6, 1, 1, "", "IndexedPosition"], [6, 1, 1, "", "Ingredient"], [6, 1, 1, "", "Inserter"], [6, 1, 1, "", "InspectionResults"], [6, 1, 1, "", "Inventory"], [6, 1, 1, "", "Lab"], [6, 1, 1, "", "Layer"], [6, 1, 1, "", "MiningDrill"], [6, 1, 1, "", "MultiFluidHandler"], [6, 1, 1, "", "OffshorePump"], [6, 1, 1, "", "OilRefinery"], [6, 1, 1, "", "Pipe"], [6, 1, 1, "", "PipeGroup"], [6, 1, 1, "", "Position"], [6, 1, 1, "", "Product"], [6, 1, 1, "", "Pump"], [6, 1, 1, "", "PumpJack"], [6, 1, 1, "", "Rail"], [6, 1, 1, "", "Reactor"], [6, 1, 1, "", "Recipe"], [6, 1, 1, "", "ResourcePatch"], [6, 1, 1, "", "Rocket"], [6, 1, 1, "", "RocketSilo"], [6, 1, 1, "", "SolarPanel"], [6, 1, 1, "", "Splitter"], [6, 1, 1, "", "StaticEntity"], [6, 1, 1, "", "StorageTank"], [6, 1, 1, "", "TileDimensions"], [6, 1, 1, "", "TransportBelt"], [6, 1, 1, "", "UndergroundBelt"], [6, 1, 1, "", "WallGroup"]], "fle.env.entities.Accumulator": [[6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.AdvancedAssemblingMachine": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Ammo": [[6, 3, 1, "", "magazine_size"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "reload_time"]], "fle.env.entities.AssemblingMachine": [[6, 3, 1, "", "assembling_machine_input"], [6, 3, 1, "", "assembling_machine_modules"], [6, 3, 1, "", "assembling_machine_output"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "recipe"]], "fle.env.entities.BeltGroup": [[6, 3, 1, "", "belts"], [6, 3, 1, "", "inputs"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "outputs"]], "fle.env.entities.Boiler": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "steam_output_point"]], "fle.env.entities.BoundingBox": [[6, 5, 1, "", "center"], [6, 2, 1, "", "height"], [6, 3, 1, "", "left_bottom"], [6, 3, 1, "", "left_top"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "right_bottom"], [6, 3, 1, "", "right_top"], [6, 2, 1, "", "width"]], "fle.env.entities.BuildingBox": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.BurnerInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerType": [[6, 3, 1, "", "fuel"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ChemicalPlant": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Chest": [[6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Dimensions": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.Direction": [[6, 3, 1, "", "DOWN"], [6, 3, 1, "", "EAST"], [6, 3, 1, "", "LEFT"], [6, 3, 1, "", "NORTH"], [6, 3, 1, "", "RIGHT"], [6, 3, 1, "", "SOUTH"], [6, 3, 1, "", "UP"], [6, 3, 1, "", "WEST"], [6, 2, 1, "", "from_string"]], "fle.env.entities.Electric": [[6, 3, 1, "", "electrical_id"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ElectricFurnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricalProducer": [[6, 3, 1, "", "electric_output_flow_limit"], [6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "production"]], "fle.env.entities.ElectricityGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "poles"]], "fle.env.entities.ElectricityPole": [[6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.EnergySource": [[6, 3, 1, "", "buffer_capacity"], [6, 3, 1, "", "drain"], [6, 3, 1, "", "input_flow_limit"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_flow_limit"]], "fle.env.entities.Entity": [[13, 3, 1, "", "dimensions"], [13, 3, 1, "", "energy"], [13, 3, 1, "", "health"], [13, 5, 1, "", "height"], [13, 3, 1, "", "id"], [13, 3, 1, "", "model_config"], [13, 3, 1, "", "prototype"], [13, 3, 1, "", "status"], [13, 3, 1, "", "tile_dimensions"], [13, 3, 1, "", "type"], [13, 3, 1, "", "warnings"], [13, 5, 1, "", "width"]], "fle.env.entities.EntityCore": [[6, 3, 1, "", "direction"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"]], "fle.env.entities.EntityGroup": [[6, 3, 1, "", "id"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "status"]], "fle.env.entities.EntityInfo": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "direction"], [6, 3, 1, "", "end_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "quantity"], [6, 3, 1, "", "start_position"], [6, 3, 1, "", "status"], [6, 3, 1, "", "warning"]], "fle.env.entities.EntityStatus": [[6, 3, 1, "", "CHARGING"], [6, 3, 1, "", "DISCHARGING"], [6, 3, 1, "", "EMPTY"], [6, 3, 1, "", "FLUID_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "FULLY_CHARGED"], [6, 3, 1, "", "FULL_BURNT_RESULT_OUTPUT"], [6, 3, 1, "", "FULL_OUTPUT"], [6, 3, 1, "", "ITEM_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "LAUNCHING_ROCKET"], [6, 3, 1, "", "LOW_INPUT_FLUID"], [6, 3, 1, "", "LOW_POWER"], [6, 3, 1, "", "LOW_TEMPERATURE"], [6, 3, 1, "", "MISSING_REQUIRED_FLUID"], [6, 3, 1, "", "MISSING_SCIENCE_PACKS"], [6, 3, 1, "", "NORMAL"], [6, 3, 1, "", "NOT_CONNECTED"], [6, 3, 1, "", "NOT_CONNECTED_TO_RAIL"], [6, 3, 1, "", "NOT_PLUGGED_IN_ELECTRIC_NETWORK"], [6, 3, 1, "", "NO_AMMO"], [6, 3, 1, "", "NO_FUEL"], [6, 3, 1, "", "NO_INGREDIENTS"], [6, 3, 1, "", "NO_INPUT_FLUID"], [6, 3, 1, "", "NO_MINABLE_RESOURCES"], [6, 3, 1, "", "NO_POWER"], [6, 3, 1, "", "NO_RECIPE"], [6, 3, 1, "", "NO_RESEARCH_IN_PROGRESS"], [6, 3, 1, "", "PREPARING_ROCKET_FOR_LAUNCH"], [6, 3, 1, "", "WAITING_FOR_SOURCE_ITEMS"], [6, 3, 1, "", "WAITING_FOR_SPACE_IN_DESTINATION"], [6, 3, 1, "", "WAITING_TO_LAUNCH_ROCKET"], [6, 3, 1, "", "WORKING"], [6, 2, 1, "", "from_int"], [6, 2, 1, "", "from_string"]], "fle.env.entities.FilterInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Filtered": [[6, 3, 1, "", "filter"], [6, 3, 1, "", "model_config"]], "fle.env.entities.FluidHandler": [[6, 3, 1, "", "connection_points"], [6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "model_config"]], "fle.env.entities.Furnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Generator": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.GunTurret": [[6, 3, 1, "", "kills"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "turret_ammo"]], "fle.env.entities.HeatExchanger": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.IndexedPosition": [[6, 2, 1, "", "__init__"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "type"]], "fle.env.entities.Ingredient": [[6, 3, 1, "", "count"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "type"]], "fle.env.entities.Inserter": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "pickup_position"]], "fle.env.entities.InspectionResults": [[6, 3, 1, "", "entities"], [6, 2, 1, "", "get_entities"], [6, 2, 1, "", "get_entity"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "player_position"], [6, 3, 1, "", "radius"], [6, 3, 1, "", "time_elapsed"]], "fle.env.entities.Inventory": [[6, 2, 1, "", "get"], [6, 2, 1, "", "items"], [6, 2, 1, "", "keys"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "serialize_model"], [6, 2, 1, "", "values"]], "fle.env.entities.Lab": [[6, 3, 1, "", "lab_input"], [6, 3, 1, "", "lab_modules"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "research"]], "fle.env.entities.Layer": [[6, 3, 1, "", "ALL"], [6, 3, 1, "", "CONNECTIONS"], [6, 3, 1, "", "ELECTRICITY"], [6, 3, 1, "", "ENTITIES"], [6, 3, 1, "", "GRID"], [6, 3, 1, "", "LABELS"], [6, 3, 1, "", "NATURAL"], [6, 3, 1, "", "NONE"], [6, 3, 1, "", "ORIGIN"], [6, 3, 1, "", "PLAYER"], [6, 3, 1, "", "RESOURCES"], [6, 3, 1, "", "ROCKS"], [6, 3, 1, "", "TREES"], [6, 3, 1, "", "WATER"]], "fle.env.entities.MiningDrill": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "resources"]], "fle.env.entities.MultiFluidHandler": [[6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "input_connection_points"], [6, 3, 1, "", "input_fluids"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_connection_points"], [6, 3, 1, "", "output_fluids"]], "fle.env.entities.OffshorePump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.OilRefinery": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Pipe": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "fluid"], [6, 3, 1, "", "fluidbox_id"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PipeGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "pipes"]], "fle.env.entities.Position": [[6, 2, 1, "", "__init__"], [6, 2, 1, "", "above"], [6, 2, 1, "", "below"], [6, 2, 1, "", "distance"], [6, 2, 1, "", "down"], [6, 2, 1, "", "is_close"], [6, 2, 1, "", "left"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "parse_args"], [6, 2, 1, "", "right"], [6, 2, 1, "", "to_bounding_box"], [6, 2, 1, "", "up"], [6, 3, 1, "", "x"], [6, 3, 1, "", "y"]], "fle.env.entities.Product": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "probability"]], "fle.env.entities.Pump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PumpJack": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Rail": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Reactor": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Recipe": [[6, 3, 1, "", "category"], [6, 3, 1, "", "enabled"], [6, 3, 1, "", "energy"], [6, 3, 1, "", "ingredients"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "products"]], "fle.env.entities.ResourcePatch": [[6, 3, 1, "", "bounding_box"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "size"]], "fle.env.entities.Rocket": [[6, 3, 1, "", "launch_progress"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "payload"]], "fle.env.entities.RocketSilo": [[6, 3, 1, "", "launch_count"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "rocket_inventory"], [6, 3, 1, "", "rocket_parts"], [6, 3, 1, "", "rocket_progress"]], "fle.env.entities.SolarPanel": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Splitter": [[6, 3, 1, "", "input_positions"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_positions"]], "fle.env.entities.StaticEntity": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "neighbours"]], "fle.env.entities.StorageTank": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.TileDimensions": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "tile_height"], [6, 3, 1, "", "tile_width"]], "fle.env.entities.TransportBelt": [[6, 3, 1, "", "input_position"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "is_source"], [6, 3, 1, "", "is_terminus"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_position"]], "fle.env.entities.UndergroundBelt": [[6, 3, 1, "", "connected_to"], [6, 3, 1, "", "is_input"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.WallGroup": [[6, 3, 1, "", "entities"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"]], "fle.env.game_types": [[7, 1, 1, "", "Prototype"], [7, 1, 1, "", "PrototypeMetaclass"], [7, 1, 1, "", "RecipeName"], [7, 1, 1, "", "Resource"], [7, 1, 1, "", "ResourceName"], [7, 1, 1, "", "Technology"]], "fle.env.game_types.Prototype": [[7, 3, 1, "", "Accumulator"], [7, 3, 1, "", "AdvancedCircuit"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "AssemblingMachine1"], [7, 3, 1, "", "AssemblingMachine2"], [7, 3, 1, "", "AssemblingMachine3"], [7, 3, 1, "", "AutomationSciencePack"], [7, 3, 1, "", "Battery"], [7, 3, 1, "", "BeltGroup"], [7, 3, 1, "", "BigElectricPole"], [7, 3, 1, "", "Boiler"], [7, 3, 1, "", "BurnerInserter"], [7, 3, 1, "", "BurnerMiningDrill"], [7, 3, 1, "", "Centrifuge"], [7, 3, 1, "", "ChemicalPlant"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "Coal"], [7, 3, 1, "", "CoalLiquifaction"], [7, 3, 1, "", "Concrete"], [7, 3, 1, "", "CopperCable"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CopperPlate"], [7, 3, 1, "", "ElectricEngineUnit"], [7, 3, 1, "", "ElectricFurnace"], [7, 3, 1, "", "ElectricMiningDrill"], [7, 3, 1, "", "ElectricityGroup"], [7, 3, 1, "", "ElectronicCircuit"], [7, 3, 1, "", "EmptyBarrel"], [7, 3, 1, "", "EngineUnit"], [7, 3, 1, "", "ExpressInserter"], [7, 3, 1, "", "ExpressSplitter"], [7, 3, 1, "", "ExpressTransportBelt"], [7, 3, 1, "", "ExpressUndergroundBelt"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "FastSplitter"], [7, 3, 1, "", "FastTransportBelt"], [7, 3, 1, "", "FastUndergroundBelt"], [7, 3, 1, "", "FilterInserter"], [7, 3, 1, "", "FirearmMagazine"], [7, 3, 1, "", "FlyingRobotFrame"], [7, 3, 1, "", "Gate"], [7, 3, 1, "", "Grenade"], [7, 3, 1, "", "GunTurret"], [7, 5, 1, "", "HEIGHT"], [7, 3, 1, "", "HeatExchanger"], [7, 3, 1, "", "HeatPipe"], [7, 3, 1, "", "HeavyOil"], [7, 3, 1, "", "Inserter"], [7, 3, 1, "", "IronChest"], [7, 3, 1, "", "IronGearWheel"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "IronPlate"], [7, 3, 1, "", "IronStick"], [7, 3, 1, "", "Lab"], [7, 3, 1, "", "LightOil"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LongHandedInserter"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MediumElectricPole"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "NuclearReactor"], [7, 3, 1, "", "OffshorePump"], [7, 3, 1, "", "OilRefinery"], [7, 3, 1, "", "PetroleumGas"], [7, 3, 1, "", "PiercingRoundsMagazine"], [7, 3, 1, "", "Pipe"], [7, 3, 1, "", "PipeGroup"], [7, 3, 1, "", "PlasticBar"], [7, 3, 1, "", "ProcessingUnit"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "Pump"], [7, 3, 1, "", "PumpJack"], [7, 3, 1, "", "Radar"], [7, 3, 1, "", "Rail"], [7, 3, 1, "", "Rocket"], [7, 3, 1, "", "RocketControlUnit"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketPart"], [7, 3, 1, "", "RocketSilo"], [7, 3, 1, "", "Satellite"], [7, 3, 1, "", "SmallElectricPole"], [7, 3, 1, "", "SmallLamp"], [7, 3, 1, "", "SolarPanel"], [7, 3, 1, "", "SolidFuel"], [7, 3, 1, "", "SpaceSciencePack"], [7, 3, 1, "", "Splitter"], [7, 3, 1, "", "StackFilterInserter"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "SteamEngine"], [7, 3, 1, "", "SteelChest"], [7, 3, 1, "", "SteelFurnace"], [7, 3, 1, "", "SteelPlate"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "StoneBrick"], [7, 3, 1, "", "StoneFurnace"], [7, 3, 1, "", "StoneWall"], [7, 3, 1, "", "StorageTank"], [7, 3, 1, "", "Sulfur"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "TransportBelt"], [7, 3, 1, "", "UndergroundBelt"], [7, 3, 1, "", "UndergroundPipe"], [7, 3, 1, "", "Uranium235"], [7, 3, 1, "", "Uranium238"], [7, 3, 1, "", "UraniumFuelCell"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "UtilitySciencePack"], [7, 5, 1, "", "WIDTH"], [7, 3, 1, "", "Wood"], [7, 3, 1, "", "WoodenChest"], [7, 2, 1, "", "__init__"]], "fle.env.game_types.RecipeName": [[7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "BasicOilProcessing"], [7, 3, 1, "", "CoalLiquefaction"], [7, 3, 1, "", "EmptyCrudeOilBarrel"], [7, 3, 1, "", "EmptyHeavyOilBarrel"], [7, 3, 1, "", "EmptyLightOilBarrel"], [7, 3, 1, "", "EmptyLubricantBarrel"], [7, 3, 1, "", "EmptyPetroleumGasBarrel"], [7, 3, 1, "", "EmptySulfuricAcidBarrel"], [7, 3, 1, "", "EmptyWaterBarrel"], [7, 3, 1, "", "FillCrudeOilBarrel"], [7, 3, 1, "", "FillHeavyOilBarrel"], [7, 3, 1, "", "FillLightOilBarrel"], [7, 3, 1, "", "FillLubricantBarrel"], [7, 3, 1, "", "FillPetroleumGasBarrel"], [7, 3, 1, "", "FillSulfuricAcidBarrel"], [7, 3, 1, "", "FillWaterBarrel"], [7, 3, 1, "", "HeavyOilCracking"], [7, 3, 1, "", "LightOilCracking"], [7, 3, 1, "", "NuclearFuelReprocessing"], [7, 3, 1, "", "SolidFuelFromHeavyOil"], [7, 3, 1, "", "SolidFuelFromLightOil"], [7, 3, 1, "", "SolidFuelFromPetroleumGas"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "UraniumProcessing"]], "fle.env.game_types.Resource": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"], [7, 3, 1, "", "Wood"]], "fle.env.game_types.ResourceName": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"]], "fle.env.game_types.Technology": [[7, 3, 1, "", "AdvancedElectronics"], [7, 3, 1, "", "AdvancedElectronics2"], [7, 3, 1, "", "AdvancedMaterialProcessing"], [7, 3, 1, "", "AdvancedMaterialProcessing2"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "Automation"], [7, 3, 1, "", "Automation2"], [7, 3, 1, "", "Automation3"], [7, 3, 1, "", "BarrelFilling"], [7, 3, 1, "", "BatteryTechnology"], [7, 3, 1, "", "CharacterInventorySlots"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "ElectricEnergy"], [7, 3, 1, "", "ElectricEnergy2"], [7, 3, 1, "", "ElectricEngineering"], [7, 3, 1, "", "Electronics"], [7, 3, 1, "", "EnergyShield"], [7, 3, 1, "", "EnergyShield2"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "Grenades"], [7, 3, 1, "", "Landfill"], [7, 3, 1, "", "Logistics"], [7, 3, 1, "", "Logistics2"], [7, 3, 1, "", "Logistics3"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MilitaryScience"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "ModularArmor"], [7, 3, 1, "", "NightVision"], [7, 3, 1, "", "NuclearPower"], [7, 3, 1, "", "OilProcessing"], [7, 3, 1, "", "Plastics"], [7, 3, 1, "", "PowerArmor"], [7, 3, 1, "", "PowerArmor2"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "RailwayTransportation"], [7, 3, 1, "", "ResearchSpeed"], [7, 3, 1, "", "Robotics"], [7, 3, 1, "", "RocketControl"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketSiloTechnology"], [7, 3, 1, "", "SolarEnergy"], [7, 3, 1, "", "SpaceScience"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "StackInserterCapacity1"], [7, 3, 1, "", "StackInserterCapacity2"], [7, 3, 1, "", "SteelProcessing"], [7, 3, 1, "", "StorageTanks"], [7, 3, 1, "", "SulfurProcessing"]], "fle.env.gym_env.action": [[0, 1, 1, "", "Action"]], "fle.env.gym_env.action.Action": [[0, 2, 1, "", "__init__"], [0, 3, 1, "", "agent_idx"], [0, 3, 1, "", "code"], [0, 3, 1, "", "game_state"], [0, 2, 1, "", "to_dict"]], "fle.env.gym_env.registry": [[1, 4, 1, "", "get_environment_info"], [1, 4, 1, "", "list_available_environments"], [1, 4, 1, "", "register_all_environments"]], "fle.env.instance": [[9, 1, 1, "", "DirectionInternal"], [1, 1, 1, "", "FactorioInstance"], [9, 1, 1, "", "GameControl"]], "fle.env.instance.DirectionInternal": [[9, 3, 1, "", "DOWN"], [9, 3, 1, "", "EAST"], [9, 3, 1, "", "LEFT"], [9, 3, 1, "", "NORTH"], [9, 3, 1, "", "RIGHT"], [9, 3, 1, "", "SOUTH"], [9, 3, 1, "", "UP"], [9, 3, 1, "", "WEST"], [9, 2, 1, "", "from_factorio_direction"], [9, 2, 1, "", "next_clockwise"], [9, 2, 1, "", "next_counterclockwise"], [9, 2, 1, "", "opposite"], [9, 2, 1, "", "to_factorio_direction"]], "fle.env.instance.FactorioInstance": [[1, 2, 1, "", "__init__"], [1, 2, 1, "", "cleanup"], [1, 2, 1, "", "connect_to_server"], [1, 2, 1, "", "eval"], [1, 2, 1, "", "eval_with_error"], [1, 5, 1, "", "first_namespace"], [1, 2, 1, "", "get_elapsed_ticks"], [1, 2, 1, "", "get_speed"], [1, 2, 1, "", "get_system_prompt"], [1, 2, 1, "", "get_warnings"], [1, 2, 1, "", "initialise"], [1, 5, 1, "", "is_multiagent"], [1, 5, 1, "", "namespace"], [1, 3, 1, "", "namespace_class"], [1, 2, 1, "", "pause"], [1, 2, 1, "id0", "reset"], [1, 2, 1, "", "set_speed"], [1, 2, 1, "", "set_speed_and_unpause"], [1, 2, 1, "", "unpause"]], "fle.env.instance.GameControl": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "get_elapsed_ticks"], [9, 2, 1, "", "get_speed"], [9, 2, 1, "", "is_paused"], [9, 2, 1, "", "pause"], [9, 2, 1, "", "pause_at_speed"], [9, 2, 1, "", "reset_to_defaults"], [9, 2, 1, "", "set_speed"], [9, 2, 1, "", "set_speed_and_unpause"], [9, 2, 1, "", "unpause"]], "fle.env.namespace": [[10, 1, 1, "", "FactorioNamespace"], [10, 1, 1, "", "LoopContext"], [10, 4, 1, "", "unwrap_after_deserialization"], [10, 4, 1, "", "wrap_for_serialization"]], "fle.env.namespace.FactorioNamespace": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "eval_with_timeout"], [10, 2, 1, "", "execute_body"], [10, 2, 1, "", "execute_node"], [10, 2, 1, "", "get_functions"], [10, 2, 1, "", "get_messages"], [10, 2, 1, "", "load"], [10, 2, 1, "", "load_messages"], [10, 2, 1, "", "log"], [10, 2, 1, "", "reset"]], "fle.env.namespace.LoopContext": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "enter_loop"], [10, 2, 1, "", "exit_loop"], [10, 2, 1, "", "handle_break"], [10, 2, 1, "", "handle_continue"]], "fle.eval": [[11, 0, 0, "-", "algorithms"], [12, 0, 0, "-", "tasks"]], "fle.eval.tasks": [[12, 1, 1, "", "DefaultTask"], [12, 1, 1, "", "TaskABC"], [12, 1, 1, "", "TaskFactory"], [12, 1, 1, "", "ThroughputTask"], [12, 1, 1, "", "UnboundedThroughputTask"]], "fle.eval.tasks.DefaultTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskABC": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "get_agent_instructions"], [12, 2, 1, "", "setup"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskFactory": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "create_task"]], "fle.eval.tasks.ThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.UnboundedThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "terms": {"": [3, 6, 14, 15, 17, 18, 26, 29], "0": [0, 1, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 29, 30], "00": 16, "00z": 16, "01": 16, "01t00": 16, "01t01": 16, "02": 19, "05": [19, 20], "1": [0, 1, 5, 6, 7, 9, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28], "10": [0, 1, 5, 9, 15, 16, 18, 19, 20, 21, 23, 24, 26, 27, 28, 30], "100": [12, 15, 17, 18, 19, 20, 21], "1000": [13, 15, 17, 19, 20, 21], "10000": [0, 17], "1000000": 0, "1024": [6, 21], "110": [18, 23], "128": [6, 21], "139": 21, "15": [14, 16, 19], "150": [13, 16], "16": [1, 6, 13, 17, 19], "19": 21, "2": [6, 7, 9, 13, 16, 19, 20, 21, 23, 24], "20": [18, 19, 20, 21, 27, 30], "200": [18, 21], "2000": [17, 19, 20, 21], "2024": 16, "2047": 6, "215": 21, "235": 7, "238": 7, "24": [1, 6, 22], "250": 1, "255": 21, "256": [6, 21], "264": 21, "2666": 24, "27": [13, 19, 24], "27000": [1, 9], "28": [13, 19, 24], "2d": 21, "3": [7, 13, 14, 16, 18, 19, 20, 21, 23, 24], "30": [16, 19, 20, 30], "300": 21, "30000": 24, "32": 6, "34197": 23, "3600": 17, "4": [6, 9, 13, 19, 24], "400": 21, "41": 5, "42": 18, "45": 19, "5": [5, 6, 13, 15, 19, 20, 21, 24], "50": [12, 17, 28], "500": [14, 17], "5000": 17, "512": [6, 21], "520": 21, "5432": 16, "59": [13, 19, 24], "6": [6, 9, 19, 21], "60": [1, 9, 12, 17], "61": [13, 19, 24], "64": 6, "65": 21, "6666666667": 24, "67": 13, "69": 21, "7": [20, 21], "70": [20, 21], "75": [13, 19, 20, 21, 24], "8": [6, 15, 19, 20, 21], "80": [20, 21], "85": [20, 21], "9": 21, "90": [20, 21], "95": [19, 20], "A": [3, 6, 17], "For": [0, 16, 22, 23], "If": [1, 29], "It": [6, 29, 30], "No": [18, 19, 23], "Not": [26, 28, 29, 30], "Or": 12, "The": [0, 1, 3, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "These": [1, 9], "To": 23, "With": [18, 23, 30], "_": [15, 18, 20], "__call__": [5, 14, 18], "__getstate__": 5, "__init__": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 19, 20, 21], "__setstate__": 5, "__str__": 5, "_analyze_connect": 21, "_analyze_visual_data": 21, "_calculate_density_map": 21, "_classify_ent": 21, "_classify_resourc": 21, "_default_construction_behavior": 20, "_default_research_behavior": 20, "_default_resource_behavior": 20, "_detect_ent": 21, "_detect_resource_patch": 21, "_estimate_resource_s": 21, "_extract_dominant_color": 21, "_extract_spatial_featur": 21, "_generate_action_cod": 15, "_handle_collection_task": 20, "_handle_coordination_request": 20, "_handle_infrastructure_task": 20, "_handle_research_plan": 20, "_handle_resource_request": 20, "_handle_task_complet": 20, "_initial_coordin": 20, "_initial_setup": 19, "_initial_visual_explor": 21, "_initialize_ag": 20, "_is_entity_pixel": 21, "_is_resource_region": 21, "_monitor_and_optim": 19, "_monitor_min": 15, "_monitoring_and_optim": 20, "_multiplayer_": 23, "_must_": 14, "_process_messag": 20, "_setup_min": [15, 19], "_task_distribut": 20, "_tools_": 14, "_visual_monitor": 21, "_visual_setup": 21, "a2a": 3, "abl": 24, "about": [0, 1, 12, 13, 16, 24, 30], "abov": 6, "absolut": 6, "abstract": [3, 15, 24], "accept": [6, 26, 28], "access": [0, 1, 16], "account": [26, 28, 29], "accru": 10, "accumul": [2, 6, 7], "accuraci": 21, "achiev": [4, 5, 12, 17], "acid": [6, 7], "across": [1, 15, 21, 22], "act": [15, 19, 20, 21, 24], "action": [1, 9, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25], "action1": 16, "action2": 16, "action3": 16, "action_0": 0, "action_1": 0, "activ": 23, "actual": [0, 26, 28], "adapt": [14, 15, 17], "add": [0, 5, 12, 14, 19, 21, 23, 24, 26], "add_agent_messag": 5, "add_result": 5, "add_user_messag": 5, "addit": [16, 18, 23], "address": [1, 9, 23], "adjust": [15, 17, 20, 21, 22], "advanc": [7, 14, 19, 20, 21, 23, 25], "advanced_circuit_throughput": 1, "advancedassemblingmachin": [2, 6, 7], "advancedcircuit": 7, "advancedelectron": 7, "advancedelectronics2": 7, "advancedmaterialprocess": 7, "advancedmaterialprocessing2": 7, "advancedoilprocess": 7, "advantag": 5, "affect": [1, 9, 14], "after": [5, 24, 28], "ag": 23, "against": 17, "agent": [1, 9, 10, 12, 13, 14, 16, 17, 18, 22, 23, 24, 25, 26, 28, 29, 30], "agent_abc": [2, 15, 19, 20, 21], "agent_count": 20, "agent_idx": [0, 1, 9, 12, 15, 19, 20, 21], "agent_index": 10, "agent_instruct": 12, "agent_messag": 5, "agent_specialization_effect": 20, "agent_typ": [15, 16, 19, 20, 21], "agentabc": [2, 3], "agentcard": 3, "alert": [1, 9], "algorithm": [2, 15, 20, 21], "alia": [1, 9], "align": 14, "all": [0, 1, 2, 5, 6, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 28, 29], "all_technologies_research": [1, 9], "all_technology_reserach": 12, "allow": [1, 6, 13, 17, 18, 22, 26, 28, 29, 30], "also": 6, "alwai": [18, 27, 29, 30], "ammo": [2, 6, 7], "among": 20, "amount": [14, 18], "an": [1, 4, 5, 6, 7, 9, 12, 14, 15, 16, 22, 24, 25, 26, 29, 30], "analysi": [16, 25, 29], "analyz": [14, 15, 20, 21, 29], "ani": [0, 1, 4, 5, 6, 13, 15, 19, 20, 21], "annot": [10, 14], "ant": 23, "anthrop": 23, "anthropic_api_kei": 23, "api": [18, 24], "append": [15, 20, 21], "applic": 29, "approach": 15, "appropri": [17, 18, 26, 30], "ar": [0, 1, 5, 9, 14, 15, 17, 18, 22, 23, 24, 30], "arbitrary_types_allow": [5, 6], "architectur": 25, "area": [14, 18, 19, 30], "arg": [3, 5, 6, 10, 15, 18], "arg1": 14, "arg2": 14, "argument": 6, "armor": 7, "around": [14, 18], "arrai": 21, "assembl": [6, 7, 14, 20], "assembling_machine_input": 6, "assembling_machine_modul": 6, "assembling_machine_output": 6, "assemblingmachin": [2, 6, 7, 13], "assemblingmachine1": 7, "assemblingmachine2": 7, "assemblingmachine3": 7, "assert": [0, 15, 17, 18, 24], "assign": [20, 24], "assmbl": 6, "ast": 10, "async": 3, "attribut": [5, 6, 10], "auto": 14, "autodoc": [], "autom": [0, 7, 13, 16, 17, 19, 20, 24], "automat": [1, 14, 16, 17, 18, 22, 24], "automation2": 7, "automation3": 7, "automation_science_pack_throughput": 1, "automationsciencepack": 7, "avail": [0, 9, 13, 14, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30], "averag": [16, 19, 20], "avg_query_tim": 16, "avoid": 14, "axi": 21, "b": 23, "b64decod": 21, "back": [1, 9, 10, 14], "backend": 16, "background": 21, "backup": 25, "backup_id": 16, "backward": 18, "balanc": 17, "bar": 7, "barrel": [6, 7], "barrelfil": 7, "base": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 19, 21, 25], "base64": [13, 21], "basemodel": [4, 5, 6], "basetask": 17, "bash": 23, "basic": [0, 7, 14, 15, 18, 20, 21, 25, 26, 27, 28, 29, 30], "basic_ag": 19, "basic_agent_config": 19, "basic_setup": 20, "basicag": 19, "basicoilprocess": 7, "batch": 16, "batch_save_step": 16, "batteri": [6, 7], "battery_throughput": 1, "batterytechnologi": 7, "been": [1, 9], "befor": [0, 1, 9, 16, 26, 28, 29], "begin": [19, 20], "behav": 6, "behavior": [0, 14, 15, 20, 25], "below": [6, 20], "belt": [6, 7, 13, 14], "beltgroup": [2, 6, 7], "best": [14, 25], "beta": 23, "better": [24, 27], "between": [0, 1, 5, 6, 13, 14, 15, 17, 20, 21, 22, 27], "big": 7, "bigelectricpol": 7, "bind": 5, "black": 21, "block": [0, 10, 23], "bodi": 10, "boiler": [2, 6, 7], "bonu": 7, "bool": [3, 4, 5, 6, 9, 18, 26, 28, 29, 30], "bottleneck": [19, 21], "bottom": 6, "bound": 6, "boundari": 14, "bounding_box": 6, "boundingbox": [2, 6], "box": 6, "branch": 23, "break": [20, 29], "breakdown": 20, "brick": 7, "brown": 21, "buffer_capac": 6, "build": [1, 6, 12, 14, 17, 20, 22, 24, 25, 29, 30], "build_infrastructur": 20, "buildabl": 14, "building_materi": 29, "building_typ": 20, "buildingbox": [2, 6], "built": [20, 24], "burn": 6, "burnabl": 6, "burner": [7, 13, 24, 29], "burnerinsert": [2, 6, 7], "burnerminingdril": [2, 6, 7, 24], "burnertyp": [2, 6], "byte": 5, "bytesio": 21, "cabl": 7, "cach": [16, 18], "cache_script": [1, 9], "calcul": [5, 6, 14, 17], "call": [6, 14, 18], "callabl": [5, 14], "can": [0, 1, 6, 7, 9, 14, 15, 17, 18, 22, 23, 24, 26, 27, 28], "cannot": [6, 26, 28], "capabl": [3, 15, 17, 18, 29], "capac": [7, 28], "captur": [0, 5], "card": 3, "case": [1, 9, 15, 17, 18, 26, 27, 28], "categori": [6, 25], "caught": 0, "caus": [26, 28, 29, 30], "cd": [18, 23], "cell": 7, "center": [6, 18], "center_po": 18, "centrifug": 7, "chain": [0, 19, 24, 27], "challeng": [12, 17], "chang": [10, 14, 17, 21, 26, 28, 29, 30], "charact": 7, "characterinventoryslot": 7, "charg": 6, "check": [3, 5, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30], "check_step_complet": 3, "checkpoint": 16, "chemic": [1, 6, 7, 14], "chemical_science_pack_throughput": 1, "chemicalpl": [2, 6, 7], "chemicalsciencepack": 7, "chest": [0, 2, 6, 7, 13, 14, 15, 19, 20, 21, 24, 26, 27, 28, 29], "children": 5, "choos": [24, 30], "circuit": [1, 7], "circular": 18, "cl": 7, "class": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 24, 25], "classdict": 7, "classif": 21, "classmethod": [5, 6, 9], "classvar": [4, 5, 6, 13], "clean": [1, 15], "cleanup": [1, 3, 9, 16], "clear": [15, 17, 18, 20, 26, 27, 30], "clear_ent": [1, 9], "cli": 24, "click": 23, "client": [14, 18, 25], "close": [1, 15, 19, 20, 21], "closest": 14, "cluster": [24, 25], "coal": [7, 13, 15, 17, 19, 20, 24, 28, 29], "coal_po": 19, "coalliquefact": 7, "coalliquifact": 7, "code": [1, 4, 5, 12, 15, 16, 19, 20, 21, 23, 24, 25, 27], "code_lin": 15, "collabor": 20, "collaborative_planning_success": 20, "collect": [14, 15, 18, 19, 20, 27], "collect_": 20, "collect_copper_or": 20, "collect_iron_or": 20, "collected_resourc": 15, "collector": 25, "color": 21, "com": 18, "combin": 27, "command": [19, 20, 21, 22], "common": [0, 1, 9, 14, 16, 19, 25], "commun": [13, 15, 20, 29], "communication_effici": 20, "communication_en": 20, "communication_lat": 20, "compat": [1, 13, 14, 16, 18, 28], "compet": 17, "complet": [2, 3, 5, 12, 13, 14, 15, 16, 17, 18, 20], "completion_token_usag": 5, "completionreason": [2, 4], "completionresult": [2, 4], "complex": [0, 14, 24, 27], "compon": [1, 13, 14, 25], "compos": 22, "comprehens": [0, 1, 14, 17, 18], "compress": 21, "compris": 24, "comput": [21, 24], "computer_vision_model": 21, "concept": 25, "concret": [7, 15], "condit": [0, 12, 17, 27], "confid": 21, "config": [4, 5, 6, 13, 15, 17, 19, 20, 21, 22, 24], "configdict": [4, 5, 6, 13], "configur": [1, 4, 5, 6, 9, 13, 14, 24, 25], "confirm": 23, "conflict": [15, 18, 20, 30], "conflict_resolut": 20, "conflict_resolution_success": 20, "conform": [4, 5, 6, 13], "connect": [1, 6, 16, 21, 22, 23], "connect_ent": [14, 27], "connect_to_serv": [1, 9], "connected_to": 6, "connection_count": 16, "connection_point": 6, "connection_timeout": 16, "consid": [16, 18], "constraint": 17, "construct": [17, 20, 24], "construction_queu": 20, "construction_specialist": 20, "constructionspecialist": 20, "consumpt": [15, 17, 19], "contain": [1, 2, 3, 5, 12, 13, 14, 22, 26, 27, 28, 29, 30], "content": [5, 6, 14, 20, 26, 28, 29], "context": [0, 3, 6, 14, 24], "continu": 1, "control": [0, 5, 7, 10, 16], "convers": [2, 3, 5], "convert": [0, 1, 5, 6, 9, 17, 21], "conveyor": [6, 13], "coordin": [0, 6, 14, 15, 17, 18, 20], "coordination_effect": 20, "coordination_effici": 20, "coordination_en": 20, "coordination_request": 20, "coordination_start": 20, "copper": [7, 15, 19, 20, 29], "copper_or": [17, 19, 20, 21], "copper_po": [19, 20, 21], "copperc": 7, "copperor": 7, "copperpl": 7, "core": [5, 6, 23, 25], "correctli": [21, 30], "corrupt": 16, "cost": 17, "count": [6, 13, 14, 15, 16, 17, 18, 19, 24, 26, 28, 29], "cpu": 21, "cpu_util": 21, "crack": 7, "craft": [5, 6, 13], "craft_item": 14, "creat": [0, 1, 3, 5, 6, 12, 15, 16, 19, 20, 21, 22, 24, 25, 27], "create_backup": 16, "create_default_agent_card": [2, 3], "create_task": 12, "created_at": [4, 5], "creation": [1, 17], "criteria": [15, 17], "crude": [6, 7], "crude_oil_throughput": 1, "crudeoil": 7, "cue": 21, "current": [0, 1, 3, 5, 9, 12, 13, 15, 16, 17, 19, 20, 21], "current_research": 5, "current_tim": 17, "current_typ": 20, "current_vers": 16, "custom": [1, 12, 16, 22, 27], "d": 16, "dai": 6, "data": [1, 4, 5, 6, 13, 16, 18, 21, 22, 24, 27], "databas": [23, 25], "databasecli": 16, "dataset": 16, "datetim": [4, 5], "db": 16, "db_client": 16, "debug": [0, 19, 24], "debug_mod": 19, "decis": [13, 15, 19, 20], "declar": 3, "decod": 21, "def": [0, 15, 17, 18, 19, 20, 21], "default": [3, 6, 9, 16, 18, 20, 23, 26, 28, 30], "defaulttask": [2, 12], "defin": [0, 1, 10, 12, 15, 17, 18, 20, 24], "definit": [1, 9, 12, 25], "delet": 10, "deliv": 20, "deliveri": 20, "demonstr": [19, 20, 21], "deni": 29, "densiti": 7, "density_map": 21, "depend": [17, 18, 24], "deploy": 16, "deposit": 14, "depth": 5, "describ": [3, 18], "descript": [0, 14, 17, 18, 27], "design": [15, 18, 20], "desir": [14, 24], "detail": [0, 1, 13, 14, 19, 22, 24, 27], "detect": 21, "develop": [16, 21, 25], "devic": [6, 13], "dialogu": 5, "dict": [0, 1, 4, 5, 6, 10, 12, 15, 18, 19, 20, 21], "dictionari": [0, 4, 5, 6, 12, 13, 18, 26, 28, 29, 30], "differ": [6, 20, 22, 28, 30], "difficulti": 17, "dimens": [2, 6, 13, 14], "direct": [0, 2, 6, 9, 14, 15, 19, 20, 21, 24, 25, 27, 30], "direction_str": 6, "directionintern": [2, 9], "directli": [5, 6, 12], "directori": [14, 18, 22, 24], "dirt": 21, "discharg": 6, "disconnect": 23, "discov": [1, 18], "discoveri": [15, 17, 18, 19], "discret": 0, "disk": 22, "distanc": [6, 17], "distribut": [6, 7, 13, 15, 20], "divid": [6, 20], "dlc": 23, "do": 18, "doc": 23, "docker": [16, 22, 23], "docstr": 5, "document": [15, 16, 17, 18, 19], "doe": [14, 26, 28, 29], "doesn": [26, 28, 29], "domin": 21, "dominant_color": 21, "don": 26, "done": [19, 20, 21], "down": [6, 9, 24], "downgrad": 23, "drain": 6, "drill": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "drill_east": 30, "drill_north": 30, "drill_south": 30, "drill_west": 30, "drop_posit": [0, 6, 15, 19, 21, 24, 27], "durat": [5, 14], "dure": [0, 6, 17, 23, 24, 29], "dynam": [15, 17], "dynamic_profit_multipli": 5, "e": [3, 12, 14, 16, 19, 20, 21, 24], "each": [14, 17, 22], "east": [6, 9, 30], "edg": [15, 17, 18, 21, 27], "effect": [20, 21], "effici": [13, 15, 17, 18, 19, 20, 21], "either": 6, "elaps": [1, 9], "elapsed_tim": 17, "electr": [2, 6, 7, 13], "electric_output_flow_limit": 6, "electrical_id": 6, "electricalproduc": [2, 6], "electricenergi": 7, "electricenergy2": 7, "electricengin": 7, "electricengineunit": 7, "electricfurnac": [2, 6, 7], "electricitygroup": [2, 6, 7], "electricitypol": [2, 6, 7], "electricminingdril": [2, 6, 7], "electron": 7, "electronic_circuit_throughput": 1, "electroniccircuit": 7, "elif": [15, 19, 20, 21], "els": [15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "empti": [6, 7, 18, 29], "emptybarrel": 7, "emptycrudeoilbarrel": 7, "emptyheavyoilbarrel": 7, "emptylightoilbarrel": 7, "emptylubricantbarrel": 7, "emptypetroleumgasbarrel": 7, "emptysulfuricacidbarrel": 7, "emptywaterbarrel": 7, "enabl": [5, 6, 18, 19, 20, 24], "encapsul": [0, 24], "encod": [13, 21], "end": [3, 18], "end_posit": 6, "end_tim": [5, 16], "energi": [6, 7, 13, 24], "energy_sourc": 6, "energyshield": 7, "energyshield2": 7, "energysourc": [2, 6], "engin": 7, "engine_unit_throughput": 1, "engineunit": 7, "enhanc": [21, 24], "enhance_response_with_task_output": 12, "enough": 30, "ensur": [0, 1, 9, 13, 18, 21, 22, 23, 28, 30], "enter_loop": 10, "entiti": [0, 1, 2, 5, 7, 9, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "entities_built": 20, "entity_class_nam": 7, "entity_loc": 21, "entity_util": 19, "entitycor": [2, 6, 13], "entitygroup": [2, 6], "entityinfo": [2, 6], "entitystatu": [0, 2, 6, 13, 15, 19, 20, 21, 24], "enum": [0, 4, 6, 7, 9, 30], "enumer": [4, 6, 7, 9], "enummeta": 7, "env": [0, 1, 2, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24], "environ": [0, 3, 5, 9, 12, 15, 16, 17, 19, 20, 21, 22, 23, 27], "episod": [15, 19, 20, 21, 24], "episode_count": 15, "equip": [7, 29], "error": [4, 9, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], "error_r": 19, "essenti": 14, "etc": [6, 14], "eval": [1, 2, 9, 14, 17, 19, 20, 21, 23, 24], "eval_dict": 10, "eval_with_error": [1, 9], "eval_with_timeout": 10, "evalu": [1, 9, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25], "everi": 16, "exact": 6, "examin": 29, "exampl": [12, 14, 27], "except": [0, 10, 21, 24], "exchang": [6, 7], "execut": [1, 3, 5, 10, 14, 15, 17, 18, 24, 25], "execute_bodi": 10, "execute_nod": 10, "exhaust": 0, "exist": [15, 20, 23, 29, 30], "exit_loop": 10, "expect": [0, 30], "expens": 18, "experi": [15, 16, 17, 23], "explicitli": 6, "explor": [17, 19, 21, 24], "exploration_const": 5, "export": 16, "expr": [1, 9, 10], "express": [1, 7, 9, 10], "expressinsert": 7, "expresssplitt": 7, "expresstransportbelt": 7, "expressundergroundbelt": 7, "extend": 18, "extens": [15, 16], "extra": [6, 13], "extract": [6, 13, 14, 21, 26], "extract_item": [14, 28, 29], "extracted_count": 26, "f": [0, 15, 16, 18, 19, 20, 21, 26, 27, 28, 29, 30], "facil": 13, "factori": [1, 5, 12, 22, 24], "factorio": [0, 1, 3, 5, 9, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 27], "factorioinst": [2, 9, 12, 25], "factorionamespac": [1, 2, 9, 10], "fail": [0, 1, 26, 28, 29, 30], "failur": [0, 1, 14, 18, 20, 21, 27], "fals": [1, 9, 10, 12, 13, 19, 20, 21], "fast": [1, 7, 9], "fastinsert": 7, "fastsplitt": 7, "fasttransportbelt": 7, "fastundergroundbelt": 7, "featur": [16, 23, 25], "feedback": [16, 21, 24], "field": 6, "file": [1, 9, 12, 14, 16, 17, 18, 22, 23, 24], "fill": 7, "fillcrudeoilbarrel": 7, "fillheavyoilbarrel": 7, "filllightoilbarrel": 7, "filllubricantbarrel": 7, "fillpetroleumgasbarrel": 7, "fillsulfuricacidbarrel": 7, "fillwaterbarrel": 7, "filter": [2, 5, 6, 7, 14, 18, 29], "filter_serializable_var": [2, 5], "filterinsert": [2, 6, 7], "final": 14, "find": [14, 19, 20, 21, 26, 27, 28, 29, 30], "find_entities_filt": 18, "firearm": 7, "firearmmagazin": 7, "firewal": 22, "first": [6, 22, 24], "first_namespac": [1, 9], "fix": 22, "flag": 30, "fle": [0, 1, 2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "fle123": 16, "fle_databas": 16, "fle_db_typ": 16, "fle_us": 16, "flexibl": 15, "float": [1, 4, 5, 6, 9, 12, 13], "flow": [4, 5, 6, 10, 13], "flow_rat": 6, "fluid": [1, 6, 7, 13], "fluid_box": 6, "fluid_ingredient_shortag": 6, "fluid_system": 6, "fluidbox_id": 6, "fluidhandl": [2, 6], "fly": 7, "flyingrobotfram": 7, "focus": 17, "follow": [0, 13, 15, 17, 27], "forc": 23, "form": [6, 10], "format": [0, 5, 14, 21], "found": [18, 19, 21, 23, 29], "fp": 13, "fraction": [19, 20, 21], "frame": 7, "framework": [12, 15, 25], "frequenc": 20, "frequency_penalti": 5, "frequent": 16, "from": [1, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 29, 30], "from_attribut": 5, "from_dict": 5, "from_factorio_direct": 9, "from_inst": 5, "from_int": 6, "from_row": 5, "from_str": 6, "fuel": [6, 7, 19, 24], "full": [0, 16, 19, 26, 28, 29], "full_burnt_result_output": 6, "full_output": 6, "fully_charg": 6, "func": 5, "func_data": 5, "function": [0, 1, 3, 5, 6, 9, 10, 12, 13, 14, 18, 24], "furnac": [2, 6, 7, 14, 20, 28, 29], "furnace_result": 6, "furnace_sourc": 6, "g": [12, 14, 24], "ga": 7, "game": [0, 1, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 24, 25, 27, 29, 30], "game_info": [13, 15, 17, 19], "game_st": [0, 1, 9, 15, 19, 20, 21], "game_typ": [2, 15, 17, 18, 19, 20, 21], "gamecontrol": [2, 9], "gameinfo": 13, "gamest": [0, 2, 5], "gate": 7, "gather": 14, "gear": 7, "gener": [2, 6, 7, 13, 15, 16, 19, 21, 22, 23, 24], "generationparamet": [2, 5], "get": [0, 1, 3, 5, 6, 9, 10, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], "get_agent_card": 3, "get_agent_instruct": 12, "get_connection_amount": 14, "get_elapsed_tick": [1, 9], "get_ent": [0, 6, 13, 14, 15, 19, 20, 21, 24, 26, 28, 29], "get_environment_info": 1, "get_funct": 10, "get_messag": 10, "get_migration_statu": 16, "get_new_flow": 5, "get_performance_metr": 16, "get_posit": [0, 19, 21], "get_prototype_recip": 14, "get_research_progress": [14, 20], "get_resource_patch": 14, "get_reward": 17, "get_spe": [1, 9], "get_statist": 16, "get_step": 5, "get_system_prompt": [1, 9], "get_uct": 5, "get_warn": [1, 9], "global": [5, 14, 18], "goal": 13, "goal_descript": 12, "gold": 21, "gracefulli": [0, 15, 18], "gradual": 19, "grai": 21, "graphic": 23, "grenad": 7, "grid": 6, "ground": 7, "group": [6, 7, 14, 16], "guid": [22, 27], "guidanc": 21, "gun": 7, "gunturret": [2, 6, 7], "gym": [0, 17, 19, 20, 21, 25], "gym_env": [0, 1, 2, 15, 19, 20, 21], "gym_run_config": 24, "ha": [14, 22, 23, 26], "hand": 7, "handl": [6, 7, 9, 10, 14, 15, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30], "handle_break": 10, "handle_continu": 10, "harvest": [5, 14], "harvest_resourc": 14, "hasattr": [15, 19, 20, 21], "have": [1, 9, 10, 15, 23, 26, 28, 29], "health": [6, 13, 16], "heat": [6, 7], "heatexchang": [2, 6, 7], "heatpip": 7, "heavi": [7, 14], "heavyoil": 7, "heavyoilcrack": 7, "height": [6, 7, 13], "hello": [1, 13, 15, 16], "help": 23, "helper": 10, "here": [15, 17, 18], "hierarch": [17, 24], "high": [16, 17, 20, 21, 23], "hint": [18, 27], "histori": 16, "holdout_valu": 5, "holdout_wait_period": 12, "how": [0, 14, 19, 20, 21], "html": 23, "http": 18, "i": [0, 1, 3, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "id": [1, 5, 6, 13, 16], "ideal": 16, "identif": 21, "identifi": [19, 21], "imag": [13, 21], "image_bound": 21, "image_cent": 21, "image_data": 21, "image_mod": 21, "image_process": 21, "image_processing_tim": 21, "image_s": 21, "img_arrai": 21, "immedi": 9, "implement": [1, 9, 14, 16, 18, 24, 25, 27, 29], "import": [1, 6, 12, 15, 16, 17, 18, 19, 20, 21, 23], "improv": [15, 19, 21], "includ": [0, 1, 5, 9, 12, 13, 14, 16, 18, 29], "index": [0, 14, 16, 25], "indexedposit": [2, 6], "indic": [12, 21], "individu": [13, 16], "info": [1, 13, 19, 20, 21], "inform": [0, 1, 5, 12, 14, 15, 16, 20, 21, 25, 27, 30], "infra": 23, "infrastructur": 20, "ingredi": [2, 5, 6, 14, 24], "inherit": [14, 15, 18], "init": 24, "initi": [5, 14, 15, 16, 19, 20, 21, 23], "initialis": [1, 6, 9], "inject": 3, "input": [1, 5, 6, 9, 14, 18, 21, 27], "input_connection_point": 6, "input_flow_limit": 6, "input_fluid": 6, "input_posit": 6, "insert": [2, 6, 7, 13, 14, 18, 28], "insert_item": [14, 26, 29], "inserted_count": 28, "inserter_throughput": 1, "inspect": [0, 27, 29], "inspect_inventori": [14, 15, 19, 20, 21, 26, 28], "inspectionresult": [2, 6], "instal": 25, "instanc": [0, 1, 2, 5, 6, 10, 12, 22], "insuffici": [29, 30], "int": [0, 4, 5, 6, 12, 13, 18, 26, 28], "integr": [1, 16], "intention": 24, "inter": [13, 20], "interact": [0, 1, 6, 9, 14, 15, 19, 21, 23, 25], "interfac": [1, 15, 16, 18], "intern": 24, "intflag": 6, "intuit": [15, 18], "invalid": [0, 1, 18, 24, 26, 27, 28, 29, 30], "inventori": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 24, 25, 26, 28, 29, 30], "inventory_threshold": 15, "inventory_typ": 29, "invok": 14, "io": 21, "iron": [0, 7, 12, 13, 15, 17, 18, 19, 20, 24, 26, 28, 29, 30], "iron_gear_wheel_throughput": 1, "iron_or": [17, 19, 20, 21, 29], "iron_ore_throughput": [1, 13, 16, 19, 20, 21], "iron_pl": 17, "iron_plate_task": 12, "iron_plate_throughput": [1, 12, 17], "iron_plate_throughput_16": 12, "iron_po": [19, 20, 21, 30], "ironchest": [0, 7, 15, 19, 20, 21, 24, 27], "irongearwheel": 7, "ironor": [0, 7, 24, 27, 30], "ironpl": 7, "ironplatethroughputtask": 17, "ironstick": 7, "is_clos": 6, "is_complet": 17, "is_input": 6, "is_multiag": [1, 5, 9], "is_paus": 9, "is_sourc": 6, "is_terminu": 6, "is_valid": 5, "is_work": 0, "isinst": 15, "issu": [1, 16, 19, 20, 21, 22, 23], "item": [1, 5, 6, 13, 14, 15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "item_data": 28, "item_ingredient_shortag": 6, "items_to_insert": 28, "its": 3, "ivborw0kggoaaaansuheugaa": 13, "jack": 6, "join": 15, "joint": 20, "json": [1, 5, 12, 17, 19, 20, 21, 24], "json_str": 5, "kei": [6, 12, 25], "keyword": 6, "kill": 6, "kwarg": [1, 3, 5, 6, 9], "kwd": 7, "lab": [1, 2, 6, 7, 13, 20, 22], "lab_input": 6, "lab_modul": 6, "lab_plai": 1, "label": 6, "laboratori": 6, "lamp": 7, "landfil": 7, "larg": [16, 17, 21, 23], "largest": [1, 22], "last": [1, 3, 9, 13, 24], "latenc": 20, "later": [0, 24], "latest": 16, "latest_vers": 16, "launch": [6, 14], "launch_count": 6, "launch_progress": 6, "launch_rocket": 14, "launching_rocket": 6, "layer": [2, 6], "learn": [0, 1, 5, 12, 15, 19, 20, 23, 24, 27], "leav": [1, 9], "left": [6, 9], "left_bottom": 6, "left_top": 6, "len": [19, 20, 21], "length": 0, "level": [5, 19], "leverag": [0, 27, 29], "librari": [0, 24], "licens": 23, "lift": 14, "light": 7, "lightoil": 7, "lightoilcrack": 7, "lightweight": 16, "like": [6, 14], "limit": [0, 15, 17, 18, 20, 22], "line": [0, 1, 9, 10, 19, 20, 21], "liquefact": 7, "liquifact": 7, "list": [1, 5, 6, 10, 13, 14, 15, 16, 18, 19, 20, 21, 29], "list_available_environ": 1, "list_backup": 16, "liter": 6, "live": 14, "llm": [5, 23, 25], "load": [1, 9, 10, 12, 15, 16, 18], "load_game_st": 16, "load_messag": 10, "load_step": 16, "load_trajectori": 16, "local": 18, "localhost": [1, 9, 16, 23], "locat": [14, 20, 30], "log": [10, 19], "log_level": 19, "logic": [14, 15, 17, 18, 24], "logist": [7, 20], "logistics2": 7, "logistics3": 7, "logistics_science_pack_throughput": 1, "logisticssciencepack": 7, "logit_bia": 5, "long": 7, "longer": 29, "longhandedinsert": 7, "look": [1, 9, 19, 21], "loop": 24, "loop_nod": 10, "loopcontext": [2, 10], "low": [7, 20], "low_density_structure_throughput": 1, "low_input_fluid": 6, "low_pow": 6, "low_temperatur": 6, "lowdensitystructur": 7, "lua": [14, 18], "lubric": 7, "m": 23, "machin": [6, 7, 13, 14, 20], "made": [6, 18], "magazin": 7, "magazine_s": 6, "mai": 24, "main": 1, "maintain": [0, 10, 21, 24, 25], "mainten": 25, "make": [0, 1, 5, 13, 15, 19, 20, 21, 22, 23, 30], "manag": [5, 15, 16, 19, 20, 21, 24, 25], "manual": [16, 23], "map": [6, 10, 13, 17, 19, 21, 22], "map_imag": [13, 21], "markdown": 14, "materi": [1, 7, 29], "max_connect": 16, "max_ent": 17, "max_length": 0, "max_mining_setup": [15, 19], "max_pow": 17, "max_static_unit_profit_cap": 5, "max_step": [15, 19, 20, 21], "max_token": 5, "maxim": 12, "maximum": 14, "mb": 21, "mcp": 23, "md": [14, 18], "meaning": 18, "meant": 6, "measur": 17, "medium": [7, 16, 20, 21], "mediumelectricpol": 7, "member": 10, "memori": [15, 20, 21, 22, 24], "memory_usag": 21, "messag": [0, 2, 5, 10, 13, 18, 20, 26, 28, 29, 30], "message_delivery_r": 20, "message_processing_tim": 20, "message_timeout": 20, "meta": [4, 5], "metadata": [4, 5, 12, 16], "method": [3, 6, 13, 14, 18, 21, 29], "metric": [5, 12, 13, 15, 16, 18, 25], "might": 21, "migrat": 25, "militari": [1, 7], "military_science_pack_throughput": 1, "militarysci": 7, "militarysciencepack": 7, "mine": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "minim": [16, 19], "mining_dril": [20, 21], "mining_item": 29, "mining_op": 0, "mining_radiu": 15, "mining_setup": [15, 19, 20], "miningdril": [0, 2, 6, 13, 15, 19, 20, 21, 24, 27, 30], "miningoper": 0, "minut": 19, "miss": [1, 21], "missing_required_fluid": 6, "missing_science_pack": 6, "mistak": 24, "mk2": 7, "mkdir": 18, "mock": 17, "mod": 22, "mode": [14, 18, 19, 21, 27], "model": [3, 6, 13, 21, 25], "model_config": [4, 5, 6, 13], "model_post_init": 6, "modif": 3, "modul": [1, 25], "modular": [7, 15], "modulararmor": 7, "moment": 24, "monitor": [0, 14, 15, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "monitoring_interv": 19, "more": [19, 21, 22, 26, 28], "most": [1, 3, 14, 27], "mount": 22, "move": [6, 13, 14], "move_to": 14, "movement": 0, "multi": [14, 15, 16, 17, 25], "multi_agent_perform": 20, "multiagent_config": 20, "multiagent_coordin": 20, "multiagentcoordin": 20, "multifluidhandl": [2, 6], "multipl": [6, 14, 16, 17, 20, 22, 23, 28], "must": [18, 30], "my": 18, "my_custom_ag": 15, "my_custom_task": 17, "my_tool": [14, 18], "myagent": 16, "mycustomag": 15, "mycustomtask": 17, "mytool": 18, "n": [1, 5, 9, 15], "name": [0, 3, 5, 6, 7, 10, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 28, 29], "namespac": [0, 2, 3, 5, 9, 24, 25], "namespace_class": [1, 9], "namespace_str": 10, "narrow": [14, 18], "natur": 6, "navig": 23, "ndarrai": 21, "nearest": [0, 14, 15, 19, 20, 21, 24, 27, 30], "nearest_build": [14, 30], "necessari": 22, "need": [6, 10, 14, 15, 16, 18, 19, 20, 22, 23], "neg": 18, "neighbour": [6, 24], "nest": 10, "network": [1, 6, 16, 22, 29], "new": [3, 5, 6, 13, 14, 15, 17, 18], "next": [0, 3, 14, 25, 27], "next_clockwis": 9, "next_counterclockwis": 9, "night": 7, "nightvis": 7, "no_ammo": 6, "no_fuel": [6, 19], "no_ingredi": 6, "no_input_fluid": 6, "no_minable_resourc": 6, "no_pow": [6, 15, 19], "no_recip": 6, "no_research_in_progress": 6, "node": 10, "non": 6, "none": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 18, 19, 20, 21, 24], "normal": [6, 10, 19, 23, 24], "north": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "not_connect": 6, "not_connected_to_rail": 6, "not_plugged_in_electric_network": 6, "np": 21, "nuclear": [6, 7], "nuclearfuelreprocess": 7, "nuclearpow": 7, "nuclearreactor": 7, "num_ag": [0, 1, 5, 9], "number": [0, 1, 9, 10, 12, 18, 20, 26, 28], "numpi": 21, "ob": [1, 19, 20, 21], "object": [0, 1, 3, 5, 7, 9, 10, 12, 13, 14, 17, 21, 22, 24, 30], "object_detect": 21, "object_detection_threshold": 21, "object_interaction_predict": 21, "observ": [1, 15, 16, 19, 20, 21, 24, 25], "obstacl": 14, "offici": 23, "offshor": [6, 7], "offshorepump": [2, 6, 7], "oil": [1, 6, 7], "oilprocess": 7, "oilrefineri": [2, 6, 7], "old": 16, "onc": 23, "onli": [1, 5, 6, 9, 23], "open": [1, 21, 22, 23, 25], "open_plai": 1, "openai": [1, 23], "openai_api_kei": 23, "oper": [0, 5, 6, 13, 14, 15, 16, 18, 19, 20, 21, 24, 27, 29], "operation_nam": 5, "opportun": 20, "opposit": 9, "optim": [12, 15, 17, 18, 19, 20, 21, 25], "optimization_en": 19, "optimization_request": 20, "option": [0, 1, 4, 5, 6, 12, 13, 14, 18, 25, 26, 28, 29, 30], "orchestr": 22, "ore": [7, 13, 15, 18, 19, 20, 24, 26, 28, 29, 30], "ores": 14, "organ": 24, "orient": [6, 14, 30], "origin": [6, 10], "other": [1, 6, 14, 15, 16, 18, 20, 23, 28, 29, 30], "out": [1, 9], "output": [0, 5, 6, 13, 16, 18, 21, 24, 25], "output_connection_point": 6, "output_flow_limit": 6, "output_fluid": 6, "output_posit": 6, "over": [15, 19, 29], "overal": 20, "overall_system_perform": 20, "overhead": 20, "overrid": 3, "overview": [14, 18, 25], "p": [16, 22], "pack": [1, 7], "packag": 23, "page": 25, "pair": 18, "panel": [6, 7], "parallel": 21, "param": [1, 3, 9], "param1": [15, 18], "param2": 18, "param3": 18, "paramet": [0, 6, 12, 14, 15, 16, 17, 18, 21, 22, 27], "parent_id": 5, "parent_nod": 10, "parent_visit": 5, "pars": [5, 6, 17, 18], "parse_agent_messag": 5, "parse_arg": 6, "parse_raw": 5, "part": 7, "partial": [26, 28], "pass": [6, 17, 20], "patch": [0, 19, 21, 24], "path": 16, "pathfind": 14, "pattern": [14, 21, 24, 25], "paus": [1, 9, 14], "pause_at_spe": 9, "payload": 6, "peac": [1, 9], "per": [1, 17, 19, 21], "percentag": 14, "perform": [12, 13, 14, 15, 17, 18, 24, 25, 27], "permiss": [22, 23, 29], "persist": [0, 1, 15, 22], "petroleum": 7, "petroleum_gas_throughput": 1, "petroleumga": 7, "phase": 19, "pickl": 5, "pickup_ent": [14, 30], "pickup_posit": 6, "pierc": 7, "piercing_round_throughput": 1, "piercingroundsmagazin": 7, "pil": 21, "pip": 23, "pipe": [2, 6, 7, 13, 14], "pipegroup": [2, 6, 7], "pixel": 21, "place": [0, 6, 14, 19, 20, 21, 24, 27, 28, 29, 30], "place_ent": [0, 13, 14, 15, 19, 20, 21, 24, 27, 29], "place_entity_next_to": [0, 14, 15, 19, 20, 21, 24, 27, 30], "place_mining_setup": 0, "placeabl": 14, "placement": [0, 14, 17, 19, 30], "plai": [1, 22], "plan": [14, 18, 19, 20, 21], "plant": [6, 7, 14], "plastic": [6, 7], "plastic_bar_throughput": 1, "plasticbar": 7, "plate": [7, 12, 13, 17, 29], "player": [6, 13, 14, 26, 27, 28, 29], "player_posit": 6, "png": [13, 21], "point": 16, "pole": [6, 7], "polici": [3, 15], "pool": 16, "poor": 21, "popular": 24, "populate_by_nam": 6, "port": [22, 23], "posit": [0, 2, 6, 14, 15, 18, 19, 20, 21, 24, 25, 27, 30], "possibl": [1, 18, 22], "post": 5, "postgr": 16, "postgres_db": 16, "postgres_password": 16, "postgres_us": 16, "postgresql": [23, 25], "power": [6, 7, 14, 15, 17, 19], "power_usag": 19, "powerarmor": 7, "powerarmor2": 7, "powerpol": 13, "practic": [14, 25], "pre": 14, "pre_holdout_wait_period": 12, "predict": 21, "preexist": 10, "preparing_rocket_for_launch": 6, "prerequisit": [5, 13, 14, 25], "presence_penalti": 5, "preserv": [1, 9], "prevent": 0, "previou": [1, 9], "previous": 24, "price_list": 5, "print": [0, 1, 14, 15, 16, 18, 19, 20, 21, 24, 26, 27, 28, 29, 30], "prioriti": 20, "priority_bas": 20, "privat": 6, "proactiv": 24, "probabl": 6, "problem": 20, "procedur": 22, "process": [6, 7, 15, 20, 25], "processing_perform": 21, "processing_unit_throughput": 1, "processingunit": 7, "produc": [6, 17, 19], "product": [2, 5, 6, 7, 12, 13, 14, 16, 20], "production_science_pack_throughput": 1, "productionflow": [2, 4, 5], "productionsciencepack": 7, "productivitymodul": 7, "productivitymodule2": 7, "productivitymodule3": 7, "profit": 5, "profitconfig": [2, 5], "program": [2, 5, 14, 23, 24], "program_id": 4, "progress": [5, 13, 14, 19], "prompt": [1, 9], "prompt_token_usag": 5, "proper": [5, 27, 29], "properli": [15, 22, 23], "properti": [1, 5, 6, 7, 9, 13, 23], "protocol": [15, 20, 23], "prototyp": [0, 2, 6, 7, 13, 15, 19, 20, 21, 24, 27, 30], "prototype_nam": 7, "prototypemetaclass": [2, 7], "provid": [0, 1, 12, 13, 15, 16, 18, 22, 23, 24, 29], "provis": 12, "psql": 23, "pump": [2, 6, 7], "pumpjack": [2, 6, 7], "purchas": 23, "py": [1, 14, 17, 18, 23], "pydant": [4, 5, 6, 13], "pydantic_cor": 6, "pytest": [15, 17, 18], "python": [0, 1, 10, 12, 14, 15, 17, 18, 23, 24], "python3": 23, "qualiti": 21, "quantiti": [6, 13, 14], "queri": [13, 16, 24], "queue": 14, "quick": [16, 23], "quickstart": 25, "quota": 12, "radar": 7, "radiu": [6, 14, 18], "rag": 3, "rail": [2, 6, 7], "railwai": [6, 7], "railwaytransport": 7, "rais": [1, 6, 9, 24], "rang": 21, "rate": [12, 17, 19, 20], "raw": 1, "raw_reward": 5, "raw_text": 13, "rcon_client": 9, "reactiv": 24, "reactor": [2, 6, 7], "read": 24, "readabl": 0, "reason": [4, 21], "recent": 3, "recip": [2, 6, 7, 13, 14], "recipenam": [2, 7], "recognit": 21, "recommend": [14, 16, 23], "reconstruct": 5, "record": 19, "recoveri": [19, 20, 21, 25], "recovery_tim": 19, "recurs": 14, "reduc": [20, 21], "refer": [0, 2, 14, 20], "reference_posit": [0, 15, 19, 20, 21, 24, 27], "refineri": [6, 7], "regardless": [1, 9], "region": 21, "regist": [1, 15, 17, 18], "register_ag": 15, "register_all_environ": 1, "registr": 25, "registri": [15, 17, 25], "regular": 16, "reinforc": 1, "rel": [14, 30], "relationship": 21, "relev": 24, "reliabl": 19, "reload_tim": 6, "remain": 14, "remov": [14, 16, 26, 27, 28, 29, 30], "render": [6, 23], "render_message_tool": 9, "repl": 24, "replac": [15, 20], "replai": 15, "report": [0, 20], "repres": [5, 6, 14, 24], "represent": [5, 24], "reprocess": 7, "request": [0, 20], "requir": [1, 6, 13, 14, 16, 17, 18, 20, 22, 24, 26, 28, 30], "research": [5, 6, 7, 17, 20, 22, 25], "research_plan": 20, "research_prior": 20, "research_progress": 5, "research_queu": [5, 20], "research_specialist": 20, "research_start": 20, "research_unit_count": 5, "research_unit_energi": 5, "researchspe": 7, "researchspecialist": 20, "researchst": [2, 5], "reset": [0, 1, 9, 10, 15, 17, 19, 20, 21], "reset_paus": [1, 9], "reset_posit": [1, 9], "reset_spe": [1, 9], "reset_to_default": 9, "reshap": 21, "resnet50": 21, "resolut": [15, 20, 21], "resolv": 20, "resourc": [0, 2, 6, 7, 13, 17, 19, 20, 21, 22, 24, 25, 29, 30], "resource_collect": 20, "resource_identif": 21, "resource_patch": 21, "resource_po": [15, 20], "resource_request": 20, "resource_scann": 18, "resource_specialist": 20, "resource_typ": [0, 18, 20], "resource_util": 19, "resource_wast": 19, "resourcecollectorag": 15, "resourcenam": [2, 7], "resourcepatch": [2, 6, 7], "resourcescann": 18, "resourcespecialist": 20, "respect": 14, "respons": [2, 3, 4, 5, 12, 16, 20], "restart": 22, "restor": [1, 5, 9, 16], "restore_backup": 16, "result": [0, 1, 5, 9, 10, 14, 18, 20, 26, 27, 28, 29, 30], "retri": 29, "retriev": [1, 13, 14, 24], "return": [0, 1, 3, 5, 6, 9, 10, 12, 14, 15, 17, 18, 19, 20, 21, 24, 27], "reus": [1, 16, 24], "reusabl": [1, 15], "reward": [1, 12, 16, 17, 19, 20, 21], "rgb": 21, "rich": [1, 13], "right": [6, 9, 23], "right_bottom": 6, "right_top": 6, "robot": 7, "robust": [0, 17, 20, 21], "rock": [6, 14], "rocket": [2, 6, 7, 14], "rocket_inventori": 6, "rocket_part": 6, "rocket_progress": 6, "rocketcontrol": 7, "rocketcontrolunit": 7, "rocketfuel": 7, "rocketpart": 7, "rocketsilo": [2, 6, 7], "rocketsilotechnologi": 7, "role": [5, 20], "rotat": [14, 23], "rotate_ent": [14, 30], "round": 7, "round_robin": 20, "row": 5, "rtd": [], "rtype": [1, 9], "rule": [14, 17], "run": [0, 1, 14, 16, 22, 23, 24, 25], "runtim": [0, 24], "runtime_error": 4, "safe": 23, "satellit": 7, "save": [16, 22, 24], "save_game_st": 16, "save_step": 16, "save_trajectori": 16, "scalabl": [20, 22], "scale": [16, 17, 23, 24], "scan": [15, 17, 18], "scanner": 25, "scenario": [15, 16, 17, 18, 19, 25, 27], "schedul": 16, "schema": [1, 9, 25], "scienc": [1, 7], "score": [4, 12, 13], "screenshot": 21, "script": 23, "sdk": 23, "search": [14, 25], "second": [1, 5, 6, 9, 14, 17, 20, 21, 24], "section": [2, 6, 27], "secur": [16, 18], "see": [14, 22, 24, 27], "segment": 21, "select": 23, "self": [0, 6, 14, 15, 17, 18, 19, 20, 21, 24], "send": 20, "send_messag": 20, "sens": 30, "sent": [6, 14], "sequenc": [10, 14], "serial": [5, 10, 14, 15], "serializ": 5, "serializablefunct": [2, 5, 10], "serialize_model": 6, "serialized_funct": 13, "server": [14, 16, 18, 22, 23, 29], "set": [1, 6, 9, 15, 16, 19, 21, 22, 23, 30], "set_convers": 3, "set_entity_recip": 14, "set_research": [14, 20], "set_spe": [1, 9], "set_speed_and_unpaus": [1, 9], "set_system_messag": 5, "setup": [0, 6, 12, 16, 19, 20, 21, 25], "setup_api_kei": 23, "setup_inst": 12, "sever": [1, 9, 16, 22], "shape": 21, "share": [15, 20], "shared_st": 20, "shared_state_s": 20, "shield": 7, "shortli": 23, "should": [3, 4, 5, 6, 13, 14], "show": 14, "show_number_of_steps_left_in_prompt": 12, "side": [14, 18, 25], "signatur": [0, 1, 5, 9, 13, 14], "silo": [6, 7, 14], "simpl": [15, 18, 19, 21, 27], "simplifi": 21, "simul": 24, "sinc": [1, 6, 9], "singl": [3, 5, 10, 16], "site": 23, "size": [6, 13, 14, 16, 17, 20, 21], "sk": 23, "skills_db_host": 16, "skills_db_nam": 16, "skills_db_password": 16, "skills_db_port": 16, "skills_db_us": 16, "sleep": [0, 14, 24], "slot": 7, "slow": [20, 21], "small": [7, 16], "smallelectricpol": 7, "smalllamp": 7, "smelt": 6, "snapshot": 16, "solar": [6, 7], "solarenergi": 7, "solarpanel": [2, 6, 7], "solid": [6, 7], "solidfuel": 7, "solidfuelfromheavyoil": 7, "solidfuelfromlightoil": 7, "solidfuelfrompetroleumga": 7, "solut": [26, 28, 29, 30], "someth": 18, "sophist": 21, "sourc": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 23, 25], "south": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "space": [1, 7, 14, 22, 23, 25], "spacesci": 7, "spacesciencepack": 7, "spatial": [17, 21], "spatial_analysis_depth": 21, "spatial_featur": 21, "spatial_reason": 21, "spatial_understand": 21, "special": [10, 14, 15, 25], "specialist": 20, "specif": [1, 6, 12, 14, 15, 16, 17, 18, 20, 21, 23, 27, 29], "specifi": 30, "speed": [1, 7, 9, 13, 14], "sphinx": 23, "split": 20, "splitter": [2, 6, 7], "sql": 16, "sqlite": 25, "sqlite_db_fil": 16, "stack": [0, 7], "stackfilterinsert": 7, "stackinsert": 7, "stackinsertercapacity1": 7, "stackinsertercapacity2": 7, "stale": 14, "standard": [0, 1, 12, 24], "start": [1, 9, 17, 19, 20, 21, 23, 24], "start_posit": 6, "start_tim": [5, 16, 17], "starting_inventori": 12, "startswith": 20, "startup": 16, "stat": [16, 22], "state": [0, 1, 3, 5, 9, 12, 14, 15, 16, 17, 18, 19, 20, 24, 25], "state_id": 16, "statement": 0, "static": [1, 5, 6, 9, 12], "static_item": 5, "staticent": [2, 6], "statist": [12, 13, 16, 18], "statu": [0, 6, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "status_int": 6, "status_str": 6, "status_upd": 20, "stderr": [13, 24], "stdout": [13, 14, 24], "steam": [6, 7, 23], "steam_output_point": 6, "steamengin": 7, "steel": 7, "steel_plate_throughput": 1, "steelchest": 7, "steelfurnac": 7, "steelplat": 7, "steelprocess": 7, "step": [1, 3, 4, 12, 14, 16, 19, 20, 21, 23, 25], "step_count": [19, 20, 21], "step_numb": 16, "step_statist": 12, "stick": 7, "stone": [7, 19, 21, 29], "stone_wall_throughput": 1, "stonebrick": 7, "stonefurnac": 7, "stonewal": 7, "stop": 22, "stop_sequ": 5, "storag": [0, 1, 6, 7, 13, 19, 21, 24, 26, 28, 29], "storagetank": [2, 6, 7], "store": [0, 1, 5, 6, 13, 16, 21, 24], "str": [0, 1, 3, 4, 5, 6, 9, 12, 13, 15, 18, 19, 20, 21, 26, 28, 29, 30], "strategi": [3, 15, 20], "stream": 24, "string": [5, 10, 14, 18], "strong": 21, "structur": [1, 7, 14, 22, 25, 27], "sub": 17, "succe": 21, "succeed": [18, 26, 28, 29, 30], "success": [4, 12, 15, 16, 17, 18, 20, 24, 26, 27, 28, 29, 30], "success_threshold": [15, 19, 20, 21], "sudo": [22, 23], "sufuric_acid_throughput": 1, "suggest": 0, "suit": 14, "sulfur": [6, 7], "sulfur_throughput": 1, "sulfuricacid": 7, "sulfurprocess": 7, "sum": [19, 20, 21, 29], "summaris": 3, "sunlight": 6, "super": [15, 17, 19, 20, 21], "suppli": [6, 19], "support": [0, 10, 12, 14, 16, 22, 23, 26, 28, 29, 30], "sure": [22, 23], "surfac": 18, "symbol": 24, "syntax": 0, "synthes": 14, "synthesi": [0, 1, 15, 24], "system": [1, 5, 9, 12, 15, 16, 18, 19, 22, 23, 24, 25], "system_prompt": 3, "t": [26, 28, 29], "t1": 16, "tabl": [14, 16, 18], "take": [0, 1, 6], "tank": [6, 7], "target": [13, 15, 17], "target_ag": 20, "target_resourc": [15, 19, 20], "task": [1, 2, 4, 15, 16, 19, 20, 22, 25, 27], "task_assign": 20, "task_complet": 20, "task_completion_r": 20, "task_definit": [1, 17], "task_distribut": 20, "task_info": 13, "task_kei": [1, 12], "task_path": 12, "task_queu": 20, "task_respons": 12, "task_verif": 13, "taskabc": [2, 12], "taskfactori": [2, 12], "taskrespons": [2, 4, 12], "taskverif": 13, "tcp_port": [1, 9], "techniqu": 21, "technologi": [2, 5, 7, 13, 14, 17, 20, 22], "technologyst": [2, 5], "temperatur": 5, "termin": [1, 19, 20, 21], "terrain": 30, "test": [14, 16, 19, 20, 25, 27], "test_agent_act": 15, "test_agent_cr": 15, "test_agent_reset": 15, "test_task_complet": 17, "test_task_cr": 17, "test_task_evalu": 17, "test_tool_cr": 18, "test_tool_error_handl": 18, "test_tool_execut": 18, "test_tool_with_posit": 18, "text": 0, "than": 26, "thei": 24, "them": [14, 26, 27], "theme": [], "thi": [0, 1, 2, 3, 5, 6, 9, 12, 14, 19, 20, 21, 22, 23, 24, 27], "third": 6, "thoroughli": [19, 20, 27], "threshold": 21, "through": [0, 1, 15, 22, 24], "throughout": [5, 24], "throughput": [1, 12, 13, 17, 19], "throughput_ent": 12, "throughput_task": 1, "throughputtask": [2, 12], "thu": 6, "tick": [1, 4, 5, 9, 13, 17], "tier": 6, "tile": [6, 14, 18], "tile_dimens": [6, 13, 24], "tile_height": [6, 24], "tile_width": [6, 24], "tiledimens": [2, 6, 13, 24], "time": [5, 13, 14, 15, 16, 17, 19, 20, 21, 22, 24, 29], "time_elaps": 6, "time_limit": 17, "timeout": [1, 4, 9, 10], "timestamp": [5, 16], "timing_metr": 5, "timingmetr": [2, 5], "to_bounding_box": 6, "to_dict": [0, 5], "to_factorio_direct": 9, "to_inst": 5, "to_raw": 5, "togeth": [16, 20, 27], "token_usag": 5, "toler": 6, "tolist": 21, "tool": [0, 1, 24], "tool_nam": 27, "top": [6, 21], "total": [5, 14, 16, 19, 21, 29], "total_dur": 5, "total_item": [19, 21, 29], "total_materi": 29, "total_reward": [15, 16], "toward": [6, 13], "trace": 0, "track": [5, 6, 13, 14, 15, 16, 19, 21, 26, 27, 28, 29], "train": 6, "trajectori": [3, 16, 24], "trajectory_001": 16, "trajectory_id": 16, "trajectory_length": 12, "transfer": [13, 14, 26, 28], "transport": [6, 7, 13], "transportbelt": [2, 6, 7, 13], "treat": 14, "tree": [6, 13, 14], "troubleshoot": 25, "true": [1, 3, 5, 6, 9, 10, 12, 16, 18, 19, 20, 21], "truncat": [1, 19, 20, 21], "try": [0, 10, 21], "tune": 21, "tupl": [6, 21], "turn": 3, "turret": 7, "turret_ammo": 6, "two": 5, "type": [0, 1, 3, 5, 6, 9, 10, 12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30], "typehint": [], "unbound": [1, 12, 22], "unboundedthroughputtask": [2, 12], "uncheck": 23, "underground": [6, 7], "undergroundbelt": [2, 6, 7], "undergroundpip": 7, "understand": [14, 21], "understood": 21, "unifi": 16, "union": 6, "uniqu": 21, "unique_color": 21, "unit": [1, 7], "unlock": 13, "unlock_all_research": 12, "unpaus": [1, 9], "unpickl": 5, "unwrap": 10, "unwrap_after_deseri": [2, 10], "up": [1, 6, 9, 13, 15, 19, 21, 22, 23, 24], "updat": [3, 14, 15, 18, 20, 26, 28], "update_st": 3, "upper": [15, 20], "uptim": 19, "uranium": 7, "uranium235": 7, "uranium238": 7, "uraniumfuelcel": 7, "uraniumor": 7, "uraniumprocess": 7, "us": [0, 1, 3, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 23, 24, 26, 27, 28, 29, 30], "usag": [0, 12, 14, 15, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30], "use_populated_inventori": 12, "user": [16, 22, 23], "util": [5, 7, 19, 21, 24, 29], "utility_science_pack_throughput": 1, "utilitysciencepack": 7, "uv": 23, "v": 0, "valid": [5, 6, 13, 14, 16, 18, 19, 23, 25, 27, 30], "validate_by_alia": 6, "validate_by_nam": 6, "validationerror": 6, "valu": [0, 4, 5, 6, 7, 9, 10, 12, 18, 19, 20, 21, 27, 29, 30], "value1": [15, 18], "valueerror": 0, "variabl": [0, 1, 3, 10, 16, 22, 24], "variou": [5, 12, 14, 15, 17, 27, 29, 30], "vars_dict": 5, "verif": 25, "verifi": [0, 12, 16, 18, 19, 22, 23, 24, 26, 28, 29], "version": [5, 16, 18, 23], "version_descript": 5, "vision": [7, 21], "vision_en": 21, "visit": 5, "visual": [15, 25], "visual_accuraci": 21, "visual_ag": 21, "visual_agent_config": 21, "visual_analysi": 21, "visual_memori": 21, "visual_memory_s": 21, "visual_planning_effect": 21, "visual_reason": 21, "visualag": 21, "volum": [22, 23], "vote": 20, "wa": 29, "wait": 14, "waiting_for_source_item": 6, "waiting_for_space_in_destin": 6, "waiting_to_launch_rocket": 6, "wall": [6, 7], "wallgroup": [2, 6], "warn": [1, 6, 13], "wast": 19, "water": [6, 7, 14], "we": [1, 9, 15], "websit": 23, "west": [6, 9, 30], "what": [6, 14], "wheel": 7, "when": [1, 3, 6, 9, 16, 18, 24], "where": [6, 26, 28, 30], "whether": [13, 18, 26, 28, 29, 30], "which": [1, 5, 14, 24], "while": [10, 14, 19, 20, 21], "whose": 29, "width": [6, 7, 13], "within": 16, "without": [1, 9, 22, 23], "wood": 7, "wooden": 7, "woodenchest": 7, "work": [0, 6, 14, 15, 19, 20, 21, 24], "workflow": 14, "working_ent": [19, 20, 21], "world": [13, 14, 24, 30], "wrap": 10, "wrap_for_seri": [2, 10], "wrapper": 5, "write": 18, "written": 24, "x": [6, 13, 18, 19, 21, 23, 24, 30], "y": [6, 13, 18, 19, 21, 24, 30], "you": [14, 17, 18, 22, 23, 24], "your": [14, 15, 17, 18, 22, 23], "zero": 18}, "titles": ["Action Space", "Environment API", "API Modules", "fle.agents.agent_abc module", "fle.agents.models module", "fle.commons.models module", "fle.env.entities module", "fle.env.game_types module", "fle.env.gym_env module", "fle.env.instance module", "fle.env.namespace module", "fle.eval.algorithms module", "fle.eval.tasks module", "Observation Space", "Tools API", "Implementing Custom Agents", "Database Configuration", "Creating Custom Tasks", "Creating Custom Tools", "Basic Agent Example", "Multi-Agent Example", "Visual Agent Example", "Cluster Setup", "Installation", "Quickstart", "Welcome to Factorio Learning Environment\u2019s documentation!", "extract_item", "Tools Documentation", "insert_item", "inspect_inventory", "place_entity"], "titleterms": {"": 25, "action": 0, "advanc": [15, 17, 18, 22], "agent": [0, 2, 3, 4, 15, 19, 20, 21], "agent_abc": 3, "algorithm": 11, "analysi": 21, "api": [1, 2, 14, 23, 25], "architectur": [14, 15, 18, 20], "avail": 1, "backup": 16, "base": 15, "basic": 19, "behavior": 19, "best": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "build": 23, "categori": [14, 27], "class": 15, "client": [16, 23], "cluster": 22, "code": 0, "collector": 15, "common": [2, 5], "compon": 0, "concept": [1, 24], "configur": [15, 16, 17, 19, 20, 21, 22, 23], "connect": [14, 27], "control": [14, 27], "core": [1, 2, 14, 27], "craft": [14, 27], "creat": [14, 17, 18], "custom": [14, 15, 17, 18, 25], "databas": 16, "debug": [14, 27], "definit": [0, 17], "develop": [18, 27], "direct": 13, "document": [14, 23, 25, 27], "entiti": [6, 13, 14, 27], "env": [6, 7, 8, 9, 10], "environ": [1, 2, 24, 25], "error": [0, 1], "eval": [11, 12], "evalu": 2, "exampl": [0, 1, 13, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "execut": 0, "extract_item": 26, "factorio": 25, "factorioinst": 1, "failur": [26, 28, 29, 30], "featur": [15, 17, 18, 21], "fle": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "game": 13, "game_typ": 7, "get": 25, "gym": 1, "gym_env": 8, "handl": [0, 1], "implement": [15, 17, 19, 20, 21], "indic": 25, "inform": 13, "insert_item": 28, "inspect_inventori": 29, "instal": 23, "instanc": 9, "interact": 24, "inventori": [13, 14, 27], "kei": [1, 15, 16, 23, 24], "learn": 25, "maintain": 23, "mainten": 16, "manag": [1, 13, 14, 22, 27], "method": [1, 15, 16], "metric": [19, 20, 21], "migrat": 16, "mode": [26, 28, 29, 30], "model": [2, 4, 5], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "monitor": 16, "movement": [14, 27], "multi": [0, 20], "namespac": [1, 10], "next": 24, "observ": 13, "optim": 16, "option": 23, "output": [14, 19, 27], "overview": [19, 20, 21, 24, 26, 28, 29, 30], "paramet": [26, 28, 29, 30], "pattern": 27, "perform": [16, 19, 20, 21], "place_ent": 30, "posit": 13, "postgresql": 16, "practic": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "prerequisit": 23, "process": [18, 21], "queri": [14, 27], "quickstart": 24, "recoveri": 16, "refer": 25, "registr": [15, 17, 18], "registri": 1, "relat": [26, 28, 29, 30], "research": [13, 14, 27], "resourc": [14, 15, 18, 27], "return": [26, 28, 29, 30], "run": [19, 20, 21], "scanner": 18, "scenario": 22, "schema": 16, "setup": [22, 23], "side": 23, "space": [0, 13], "special": 20, "sqlite": 16, "start": [22, 25], "state": 13, "step": 24, "structur": [0, 13, 17, 18], "system": [13, 20], "tabl": 25, "task": [12, 13, 17], "test": [15, 17, 18], "tool": [14, 18, 25, 26, 27, 28, 29, 30], "troubleshoot": [16, 19, 20, 21, 22, 23], "type": [13, 15, 16, 17], "usag": [1, 16, 27], "valid": 0, "verif": 13, "visual": 21, "welcom": 25}}) \ No newline at end of file From ef38d11b1af2aa69eeb2ecf7f247070b6143b138 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Mon, 3 Nov 2025 17:06:50 -0700 Subject: [PATCH 8/9] remove page source --- docs/sphinx/build/html/.buildinfo | 2 +- docs/sphinx/build/html/.buildinfo.bak | 2 +- .../build/html/.doctrees/environment.pickle | Bin 4606333 -> 4606723 bytes docs/sphinx/build/html/api/action.html | 1 - docs/sphinx/build/html/api/environment.html | 1 - docs/sphinx/build/html/api/modules.html | 1 - .../api/modules/fle.agents.agent_abc.html | 1 - .../html/api/modules/fle.agents.models.html | 1 - .../html/api/modules/fle.commons.models.html | 1 - .../html/api/modules/fle.env.entities.html | 1 - .../html/api/modules/fle.env.game_types.html | 1 - .../html/api/modules/fle.env.gym_env.html | 1 - .../html/api/modules/fle.env.instance.html | 1 - .../html/api/modules/fle.env.namespace.html | 1 - .../html/api/modules/fle.eval.algorithms.html | 1 - .../html/api/modules/fle.eval.tasks.html | 9 ++++----- docs/sphinx/build/html/api/observation.html | 1 - docs/sphinx/build/html/api/tools.html | 1 - .../build/html/customization/agents.html | 1 - .../build/html/customization/database.html | 1 - .../build/html/customization/tasks.html | 1 - .../build/html/customization/tools.html | 1 - .../build/html/examples/basic_agent.html | 1 - .../build/html/examples/multiagent.html | 1 - .../build/html/examples/visual_agent.html | 1 - .../build/html/getting_started/cluster.html | 1 - .../html/getting_started/installation.html | 1 - .../html/getting_started/quickstart.html | 1 - docs/sphinx/build/html/index.html | 1 - docs/sphinx/build/html/searchindex.js | 2 +- .../sphinx/build/html/tools/extract_item.html | 1 - docs/sphinx/build/html/tools/index.html | 1 - docs/sphinx/build/html/tools/insert_item.html | 1 - .../build/html/tools/inspect_inventory.html | 1 - .../sphinx/build/html/tools/place_entity.html | 1 - docs/sphinx/source/conf.py | 3 +++ 36 files changed, 10 insertions(+), 38 deletions(-) diff --git a/docs/sphinx/build/html/.buildinfo b/docs/sphinx/build/html/.buildinfo index 90798643d..84b8e123c 100644 --- a/docs/sphinx/build/html/.buildinfo +++ b/docs/sphinx/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 498c8f2e08a2c5594696fb0d88b497ea +config: f66d6a61ada6210ec3c80180fb309e21 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/build/html/.buildinfo.bak b/docs/sphinx/build/html/.buildinfo.bak index f9acc189d..90798643d 100644 --- a/docs/sphinx/build/html/.buildinfo.bak +++ b/docs/sphinx/build/html/.buildinfo.bak @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: dee24ffc3d2b93cba59906b0834a1c4b +config: 498c8f2e08a2c5594696fb0d88b497ea tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/sphinx/build/html/.doctrees/environment.pickle b/docs/sphinx/build/html/.doctrees/environment.pickle index 2f0fbefd39fd2ce7e0939a79ea766efdc1a5e5b1..4a66ce598661de9ff4070f4e26a5571a62976352 100644 GIT binary patch literal 4606723 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

    xw5e57}B3w)pBw`FCNxHK~1-iwd<~hh;#aQX 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

    xQ#sx97xZRC{ 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

    de{Z!{N+>eprRKgKg_4;y${Z-gKPN;eqa& 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


    diff --git a/docs/sphinx/build/html/api/environment.html b/docs/sphinx/build/html/api/environment.html index cef91db8a..d2a50b91f 100644 --- a/docs/sphinx/build/html/api/environment.html +++ b/docs/sphinx/build/html/api/environment.html @@ -133,7 +133,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules.html b/docs/sphinx/build/html/api/modules.html index bc6673b67..377b4a12b 100644 --- a/docs/sphinx/build/html/api/modules.html +++ b/docs/sphinx/build/html/api/modules.html @@ -114,7 +114,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.agents.agent_abc.html b/docs/sphinx/build/html/api/modules/fle.agents.agent_abc.html index c556251be..2751300ed 100644 --- a/docs/sphinx/build/html/api/modules/fle.agents.agent_abc.html +++ b/docs/sphinx/build/html/api/modules/fle.agents.agent_abc.html @@ -105,7 +105,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.agents.models.html b/docs/sphinx/build/html/api/modules/fle.agents.models.html index 576c6013c..dc11a5a3d 100644 --- a/docs/sphinx/build/html/api/modules/fle.agents.models.html +++ b/docs/sphinx/build/html/api/modules/fle.agents.models.html @@ -107,7 +107,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.commons.models.html b/docs/sphinx/build/html/api/modules/fle.commons.models.html index 112f23de5..237778b35 100644 --- a/docs/sphinx/build/html/api/modules/fle.commons.models.html +++ b/docs/sphinx/build/html/api/modules/fle.commons.models.html @@ -114,7 +114,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.env.entities.html b/docs/sphinx/build/html/api/modules/fle.env.entities.html index 958c6df37..e908e13f3 100644 --- a/docs/sphinx/build/html/api/modules/fle.env.entities.html +++ b/docs/sphinx/build/html/api/modules/fle.env.entities.html @@ -171,7 +171,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.env.game_types.html b/docs/sphinx/build/html/api/modules/fle.env.game_types.html index 420b94131..5fae930e0 100644 --- a/docs/sphinx/build/html/api/modules/fle.env.game_types.html +++ b/docs/sphinx/build/html/api/modules/fle.env.game_types.html @@ -112,7 +112,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.env.gym_env.html b/docs/sphinx/build/html/api/modules/fle.env.gym_env.html index 1e58d667e..d7c086d67 100644 --- a/docs/sphinx/build/html/api/modules/fle.env.gym_env.html +++ b/docs/sphinx/build/html/api/modules/fle.env.gym_env.html @@ -104,7 +104,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.env.instance.html b/docs/sphinx/build/html/api/modules/fle.env.instance.html index 1c5dcddc4..b6804479c 100644 --- a/docs/sphinx/build/html/api/modules/fle.env.instance.html +++ b/docs/sphinx/build/html/api/modules/fle.env.instance.html @@ -109,7 +109,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.env.namespace.html b/docs/sphinx/build/html/api/modules/fle.env.namespace.html index d5654cf09..0d76f8255 100644 --- a/docs/sphinx/build/html/api/modules/fle.env.namespace.html +++ b/docs/sphinx/build/html/api/modules/fle.env.namespace.html @@ -110,7 +110,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.eval.algorithms.html b/docs/sphinx/build/html/api/modules/fle.eval.algorithms.html index 96a651ca6..0a58376d9 100644 --- a/docs/sphinx/build/html/api/modules/fle.eval.algorithms.html +++ b/docs/sphinx/build/html/api/modules/fle.eval.algorithms.html @@ -101,7 +101,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/modules/fle.eval.tasks.html b/docs/sphinx/build/html/api/modules/fle.eval.tasks.html index 268d121e7..40ae47f83 100644 --- a/docs/sphinx/build/html/api/modules/fle.eval.tasks.html +++ b/docs/sphinx/build/html/api/modules/fle.eval.tasks.html @@ -108,7 +108,6 @@
  • - View page source

  • @@ -170,7 +169,7 @@
    • score (float) – The current score/reward value

    • step (int) – The current step number

    • -
    • instance (FactorioInstance) – The Factorio game instance

    • +
    • instance (FactorioInstance) – The Factorio game instance

    • step_statistics (Dict) – Dictionary containing statistics about the current step

    @@ -226,7 +225,7 @@
    • score (float) – The current score/reward value

    • step (int) – The current step number

    • -
    • instance (FactorioInstance) – The Factorio game instance

    • +
    • instance (FactorioInstance) – The Factorio game instance

    • step_statistics (Dict) – Dictionary containing statistics about the current step

    @@ -265,7 +264,7 @@
    • score (float) – The current score/reward value

    • step (int) – The current step number

    • -
    • instance (FactorioInstance) – The Factorio game instance

    • +
    • instance (FactorioInstance) – The Factorio game instance

    • step_statistics (Dict) – Dictionary containing statistics about the current step

    @@ -315,7 +314,7 @@
    • score (float) – The current score/reward value

    • step (int) – The current step number

    • -
    • instance (FactorioInstance) – The Factorio game instance

    • +
    • instance (FactorioInstance) – The Factorio game instance

    • step_statistics (Dict) – Dictionary containing statistics about the current step

    diff --git a/docs/sphinx/build/html/api/observation.html b/docs/sphinx/build/html/api/observation.html index 05163c0b2..22e44a9a4 100644 --- a/docs/sphinx/build/html/api/observation.html +++ b/docs/sphinx/build/html/api/observation.html @@ -118,7 +118,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/api/tools.html b/docs/sphinx/build/html/api/tools.html index ccaa71d75..f8ff4e22c 100644 --- a/docs/sphinx/build/html/api/tools.html +++ b/docs/sphinx/build/html/api/tools.html @@ -107,7 +107,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/customization/agents.html b/docs/sphinx/build/html/customization/agents.html index f59f8365d..ea81110a0 100644 --- a/docs/sphinx/build/html/customization/agents.html +++ b/docs/sphinx/build/html/customization/agents.html @@ -107,7 +107,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/customization/database.html b/docs/sphinx/build/html/customization/database.html index a03715388..b6eeb362d 100644 --- a/docs/sphinx/build/html/customization/database.html +++ b/docs/sphinx/build/html/customization/database.html @@ -111,7 +111,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/customization/tasks.html b/docs/sphinx/build/html/customization/tasks.html index e17fad2d3..277688e9a 100644 --- a/docs/sphinx/build/html/customization/tasks.html +++ b/docs/sphinx/build/html/customization/tasks.html @@ -102,7 +102,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/customization/tools.html b/docs/sphinx/build/html/customization/tools.html index 8eb0adc7c..eb25756e2 100644 --- a/docs/sphinx/build/html/customization/tools.html +++ b/docs/sphinx/build/html/customization/tools.html @@ -100,7 +100,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/examples/basic_agent.html b/docs/sphinx/build/html/examples/basic_agent.html index af3435428..e9216a612 100644 --- a/docs/sphinx/build/html/examples/basic_agent.html +++ b/docs/sphinx/build/html/examples/basic_agent.html @@ -104,7 +104,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/examples/multiagent.html b/docs/sphinx/build/html/examples/multiagent.html index f152ff3fe..a6ab3af5b 100644 --- a/docs/sphinx/build/html/examples/multiagent.html +++ b/docs/sphinx/build/html/examples/multiagent.html @@ -104,7 +104,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/examples/visual_agent.html b/docs/sphinx/build/html/examples/visual_agent.html index f92c55d29..46ae30e79 100644 --- a/docs/sphinx/build/html/examples/visual_agent.html +++ b/docs/sphinx/build/html/examples/visual_agent.html @@ -104,7 +104,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/getting_started/cluster.html b/docs/sphinx/build/html/getting_started/cluster.html index 63394da98..58c833a76 100644 --- a/docs/sphinx/build/html/getting_started/cluster.html +++ b/docs/sphinx/build/html/getting_started/cluster.html @@ -98,7 +98,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/getting_started/installation.html b/docs/sphinx/build/html/getting_started/installation.html index 33a60265f..18c1d3ff4 100644 --- a/docs/sphinx/build/html/getting_started/installation.html +++ b/docs/sphinx/build/html/getting_started/installation.html @@ -98,7 +98,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/getting_started/quickstart.html b/docs/sphinx/build/html/getting_started/quickstart.html index 7003aa050..ee1581bc0 100644 --- a/docs/sphinx/build/html/getting_started/quickstart.html +++ b/docs/sphinx/build/html/getting_started/quickstart.html @@ -96,7 +96,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/index.html b/docs/sphinx/build/html/index.html index e6f5ff5f0..7502789c1 100644 --- a/docs/sphinx/build/html/index.html +++ b/docs/sphinx/build/html/index.html @@ -89,7 +89,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/searchindex.js b/docs/sphinx/build/html/searchindex.js index 823967056..37e6da5d5 100644 --- a/docs/sphinx/build/html/searchindex.js +++ b/docs/sphinx/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"API Key Configuration": [[23, "api-key-configuration"]], "API Modules": [[2, null]], "API Reference": [[25, null]], "Action Components": [[0, "action-components"]], "Action Space": [[0, null]], "Action Space Definition": [[0, "action-space-definition"]], "Action Structure": [[0, "action-structure"]], "Action Validation": [[0, "action-validation"]], "Advanced Agent Features": [[15, "advanced-agent-features"]], "Advanced Configuration": [[22, "advanced-configuration"]], "Advanced Features": [[17, "advanced-features"], [18, "advanced-features"]], "Agent Architecture": [[15, "agent-architecture"], [20, "agent-architecture"]], "Agent Behavior": [[19, "agent-behavior"]], "Agent Configuration": [[15, "agent-configuration"], [19, "agent-configuration"], [21, "agent-configuration"]], "Agent Implementation": [[15, "agent-implementation"], [19, "agent-implementation"], [21, "agent-implementation"]], "Agent Overview": [[19, "agent-overview"], [21, "agent-overview"]], "Agent Registration": [[15, "agent-registration"]], "Agent Testing": [[15, "agent-testing"]], "Agent Types": [[15, "agent-types"]], "Agents": [[2, "agents"]], "Available Environments": [[1, "available-environments"]], "Backup and Recovery": [[16, "backup-and-recovery"]], "Base Agent Class": [[15, "base-agent-class"]], "Basic Agent Example": [[19, null]], "Best Practices": [[0, "best-practices"], [15, "best-practices"], [16, "best-practices"], [17, "best-practices"], [18, "best-practices"], [19, "best-practices"], [20, "best-practices"], [21, "best-practices"], [26, "best-practices"], [27, "best-practices"], [28, "best-practices"], [29, "best-practices"], [30, "best-practices"]], "Building Documentation (Maintainers)": [[23, "building-documentation-maintainers"]], "Client-side Setup (Optional)": [[23, "client-side-setup-optional"]], "Cluster Management": [[22, "cluster-management"]], "Cluster Setup": [[22, null]], "Code Execution": [[0, "code-execution"]], "Common Models": [[2, "common-models"]], "Configuration": [[22, "configuration"]], "Connection Management": [[14, "connection-management"], [27, "connection-management"]], "Core Concepts": [[1, "core-concepts"]], "Core Environment": [[2, "core-environment"]], "Core Tools": [[14, "core-tools"], [27, "core-tools"]], "Crafting and Research": [[14, "crafting-and-research"], [27, "crafting-and-research"]], "Creating Custom Tasks": [[17, null]], "Creating Custom Tools": [[14, "creating-custom-tools"], [18, null]], "Customization": [[25, null]], "Database Client": [[16, "database-client"]], "Database Configuration": [[16, null]], "Database Migration": [[16, "database-migration"]], "Database Schema": [[16, "database-schema"]], "Database Types": [[16, "database-types"]], "Debugging and Output": [[14, "debugging-and-output"], [27, "debugging-and-output"]], "Entity Information": [[13, "entity-information"]], "Entity Management": [[14, "entity-management"], [27, "entity-management"]], "Entity Queries": [[14, "entity-queries"], [27, "entity-queries"]], "Entity Types": [[13, "entity-types"]], "Environment API": [[1, null]], "Environment Overview": [[24, "environment-overview"]], "Environment Registry": [[1, "environment-registry"]], "Error Handling": [[0, "error-handling"], [1, "error-handling"]], "Evaluation": [[2, "evaluation"]], "Example Actions": [[0, "example-actions"]], "Example Agent: Resource Collector": [[15, "example-agent-resource-collector"]], "Example Backup": [[16, "example-backup"]], "Example Configuration": [[15, "example-configuration"]], "Example Error Handling": [[0, "example-error-handling"]], "Example Interaction": [[24, "example-interaction"]], "Example Metrics": [[19, "example-metrics"], [20, "example-metrics"], [21, "example-metrics"]], "Example Migration": [[16, "example-migration"]], "Example Monitoring": [[16, "example-monitoring"]], "Example Observation": [[13, "example-observation"]], "Example Optimization": [[16, "example-optimization"]], "Example Output": [[19, "example-output"]], "Example Registration": [[15, "example-registration"]], "Example Task": [[17, "example-task"]], "Example Tool: Resource Scanner": [[18, "example-tool-resource-scanner"]], "Example Usage": [[1, "example-usage"], [16, "example-usage"]], "Example Visual Analysis": [[21, "example-visual-analysis"]], "Examples": [[25, null], [26, "examples"], [28, "examples"], [29, "examples"], [30, "examples"]], "FactorioInstance": [[1, "factorioinstance"]], "Failure Modes": [[26, "failure-modes"], [28, "failure-modes"], [29, "failure-modes"], [30, "failure-modes"]], "Game State Information": [[13, "game-state-information"]], "Getting Started": [[25, null]], "Gym Environment": [[1, "gym-environment"]], "Implementing Custom Agents": [[15, null]], "Indices and tables": [[25, "indices-and-tables"]], "Installation": [[23, null], [23, "id1"]], "Inventory Management": [[13, "inventory-management"], [14, "inventory-management"], [27, "inventory-management"]], "Key Concepts": [[24, "key-concepts"]], "Key Methods": [[1, "key-methods"], [15, "key-methods"], [16, "key-methods"]], "Monitoring and Maintenance": [[16, "monitoring-and-maintenance"]], "Movement and Control": [[14, "movement-and-control"], [27, "movement-and-control"]], "Multi-Agent Actions": [[0, "multi-agent-actions"]], "Multi-Agent Configuration": [[20, "multi-agent-configuration"]], "Multi-Agent Example": [[20, null]], "Multi-Agent Implementation": [[20, "multi-agent-implementation"]], "Multi-Agent Overview": [[20, "multi-agent-overview"]], "Namespace Management": [[1, "namespace-management"]], "Next Steps": [[24, "next-steps"]], "Observation Space": [[13, null]], "Observation Structure": [[13, "observation-structure"]], "Overview": [[26, "overview"], [28, "overview"], [29, "overview"], [30, "overview"]], "Parameters": [[26, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"]], "Performance Metrics": [[19, "performance-metrics"], [20, "performance-metrics"], [21, "performance-metrics"]], "Performance Optimization": [[16, "performance-optimization"]], "Position and Direction": [[13, "position-and-direction"]], "PostgreSQL Configuration": [[16, "postgresql-configuration"]], "Prerequisites": [[23, "prerequisites"]], "Quickstart": [[24, null]], "Related Tools": [[26, "related-tools"], [28, "related-tools"], [29, "related-tools"], [30, "related-tools"]], "Research System": [[13, "research-system"]], "Resource Management": [[14, "resource-management"], [27, "resource-management"]], "Returns": [[26, "returns"], [28, "returns"], [29, "returns"], [30, "returns"]], "Running Multi-Agent Systems": [[20, "running-multi-agent-systems"]], "Running the Agent": [[19, "running-the-agent"]], "Running the Visual Agent": [[21, "running-the-visual-agent"]], "SQLite Configuration": [[16, "sqlite-configuration"]], "Scenarios": [[22, "scenarios"]], "Specialized Agents": [[20, "specialized-agents"]], "Starting a Cluster": [[22, "starting-a-cluster"]], "Task Configuration": [[17, "task-configuration"]], "Task Definition": [[17, "task-definition"]], "Task Implementation": [[17, "task-implementation"]], "Task Registration": [[17, "task-registration"]], "Task Structure": [[17, "task-structure"]], "Task Types": [[17, "task-types"]], "Task Verification": [[13, "task-verification"]], "Testing Tasks": [[17, "testing-tasks"]], "Testing Tools": [[18, "testing-tools"]], "Tool Architecture": [[14, "tool-architecture"], [18, "tool-architecture"]], "Tool Categories": [[14, "tool-categories"], [27, "tool-categories"]], "Tool Development": [[27, "tool-development"]], "Tool Development Process": [[18, "tool-development-process"]], "Tool Documentation": [[14, "tool-documentation"]], "Tool Registration": [[18, "tool-registration"]], "Tool Structure": [[18, "tool-structure"]], "Tool Usage Patterns": [[27, "tool-usage-patterns"]], "Tools": [[25, null]], "Tools API": [[14, null]], "Tools Documentation": [[27, null]], "Troubleshooting": [[16, "troubleshooting"], [19, "troubleshooting"], [20, "troubleshooting"], [21, "troubleshooting"], [22, "troubleshooting"], [23, "troubleshooting"]], "Visual Agent Example": [[21, null]], "Visual Processing Features": [[21, "visual-processing-features"]], "Welcome to Factorio Learning Environment\u2019s documentation!": [[25, null]], "extract_item": [[26, null]], "fle.agents.agent_abc module": [[3, null]], "fle.agents.models module": [[4, null]], "fle.commons.models module": [[5, null]], "fle.env.entities module": [[6, null]], "fle.env.game_types module": [[7, null]], "fle.env.gym_env module": [[8, null]], "fle.env.instance module": [[9, null]], "fle.env.namespace module": [[10, null]], "fle.eval.algorithms module": [[11, null]], "fle.eval.tasks module": [[12, null]], "insert_item": [[28, null]], "inspect_inventory": [[29, null]], "place_entity": [[30, null]]}, "docnames": ["api/action", "api/environment", "api/modules", "api/modules/fle.agents.agent_abc", "api/modules/fle.agents.models", "api/modules/fle.commons.models", "api/modules/fle.env.entities", "api/modules/fle.env.game_types", "api/modules/fle.env.gym_env", "api/modules/fle.env.instance", "api/modules/fle.env.namespace", "api/modules/fle.eval.algorithms", "api/modules/fle.eval.tasks", "api/observation", "api/tools", "customization/agents", "customization/database", "customization/tasks", "customization/tools", "examples/basic_agent", "examples/multiagent", "examples/visual_agent", "getting_started/cluster", "getting_started/installation", "getting_started/quickstart", "index", "tools/extract_item", "tools/index", "tools/insert_item", "tools/inspect_inventory", "tools/place_entity"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["api/action.rst", "api/environment.rst", "api/modules.rst", "api/modules/fle.agents.agent_abc.rst", "api/modules/fle.agents.models.rst", "api/modules/fle.commons.models.rst", "api/modules/fle.env.entities.rst", "api/modules/fle.env.game_types.rst", "api/modules/fle.env.gym_env.rst", "api/modules/fle.env.instance.rst", "api/modules/fle.env.namespace.rst", "api/modules/fle.eval.algorithms.rst", "api/modules/fle.eval.tasks.rst", "api/observation.rst", "api/tools.rst", "customization/agents.rst", "customization/database.rst", "customization/tasks.rst", "customization/tools.rst", "examples/basic_agent.rst", "examples/multiagent.rst", "examples/visual_agent.rst", "getting_started/cluster.rst", "getting_started/installation.rst", "getting_started/quickstart.rst", "index.rst", "tools/extract_item.rst", "tools/index.rst", "tools/insert_item.rst", "tools/inspect_inventory.rst", "tools/place_entity.rst"], "indexentries": {"__init__() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.__init__", false]], "__init__() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.__init__", false]], "agentabc (class in fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.AgentABC", false]], "check_step_completion() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.check_step_completion", false]], "cleanup() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.cleanup", false]], "connect_to_server() (fle.env.instance.factorioinstance static method)": [[1, "fle.env.instance.FactorioInstance.connect_to_server", false]], "conversation (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.conversation", false]], "create_default_agent_card() (in module fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.create_default_agent_card", false]], "dimensions (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.dimensions", false]], "end() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.end", false]], "energy (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.energy", false]], "entity (class in fle.env.entities)": [[13, "fle.env.entities.Entity", false]], "eval() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval", false]], "eval_with_error() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval_with_error", false]], "factorioinstance (class in fle.env.instance)": [[1, "fle.env.instance.FactorioInstance", false]], "first_namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.first_namespace", false]], "fle.agents.agent_abc": [[3, "module-fle.agents.agent_abc", false]], "get_agent_card() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.get_agent_card", false]], "get_elapsed_ticks() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false]], "get_environment_info() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.get_environment_info", false]], "get_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_speed", false]], "get_system_prompt() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_system_prompt", false]], "get_warnings() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_warnings", false]], "health (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.health", false]], "height (fle.env.entities.entity property)": [[13, "fle.env.entities.Entity.height", false]], "id (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.id", false]], "initialise() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.initialise", false]], "is_multiagent (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.is_multiagent", false]], "list_available_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.list_available_environments", false]], "model (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.model", false]], "model_config (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.model_config", false]], "module": [[3, "module-fle.agents.agent_abc", false]], "namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.namespace", false]], "namespace_class (fle.env.instance.factorioinstance attribute)": [[1, "fle.env.instance.FactorioInstance.namespace_class", false]], "pause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.pause", false]], "prototype (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.prototype", false]], "register_all_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.register_all_environments", false]], "reset() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.reset", false], [1, "id0", false]], "set_conversation() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.set_conversation", false]], "set_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed", false]], "set_speed_and_unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false]], "status (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.status", false]], "step() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.step", false]], "system_prompt (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.system_prompt", false]], "tile_dimensions (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.tile_dimensions", false]], "type (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.type", false]], "unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.unpause", false]], "warnings (fle.env.entities.entity attribute)": [[13, "fle.env.entities.Entity.warnings", false]], "width (fle.env.entities.entity property)": [[13, "fle.env.entities.Entity.width", false]]}, "objects": {"fle.agents": [[3, 0, 0, "-", "agent_abc"], [4, 0, 0, "-", "models"]], "fle.agents.agent_abc": [[3, 1, 1, "", "AgentABC"], [3, 4, 1, "", "create_default_agent_card"]], "fle.agents.agent_abc.AgentABC": [[3, 2, 1, "", "__init__"], [3, 2, 1, "", "check_step_completion"], [3, 3, 1, "", "conversation"], [3, 2, 1, "", "end"], [3, 2, 1, "", "get_agent_card"], [3, 3, 1, "", "model"], [3, 2, 1, "", "set_conversation"], [3, 2, 1, "", "step"], [3, 3, 1, "", "system_prompt"]], "fle.agents.models": [[4, 1, 1, "", "CompletionReason"], [4, 1, 1, "", "CompletionResult"], [4, 1, 1, "", "Response"], [4, 1, 1, "", "TaskResponse"]], "fle.agents.models.CompletionReason": [[4, 3, 1, "", "RUNTIME_ERROR"], [4, 3, 1, "", "SUCCESS"], [4, 3, 1, "", "TIMEOUT"]], "fle.agents.models.CompletionResult": [[4, 3, 1, "", "metadata"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "reason"], [4, 3, 1, "", "step"]], "fle.agents.models.Response": [[4, 3, 1, "", "achievements"], [4, 3, 1, "", "code"], [4, 3, 1, "", "created_at"], [4, 3, 1, "", "error"], [4, 3, 1, "", "flows"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "program_id"], [4, 3, 1, "", "response"], [4, 3, 1, "", "score"], [4, 3, 1, "", "step"], [4, 3, 1, "", "task"], [4, 3, 1, "", "ticks"]], "fle.agents.models.TaskResponse": [[4, 3, 1, "", "meta"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "success"]], "fle.commons": [[5, 0, 0, "-", "models"]], "fle.commons.models": [[5, 1, 1, "", "Conversation"], [5, 1, 1, "", "GameState"], [5, 1, 1, "", "GenerationParameters"], [5, 1, 1, "", "Message"], [5, 1, 1, "", "ProductionFlows"], [5, 1, 1, "", "ProfitConfig"], [5, 1, 1, "", "Program"], [5, 1, 1, "", "ResearchState"], [5, 1, 1, "", "SerializableFunction"], [5, 1, 1, "", "TechnologyState"], [5, 1, 1, "", "TimingMetrics"], [5, 4, 1, "", "filter_serializable_vars"]], "fle.commons.models.Conversation": [[5, 2, 1, "", "add_agent_message"], [5, 2, 1, "", "add_result"], [5, 2, 1, "", "add_user_message"], [5, 3, 1, "", "messages"], [5, 3, 1, "", "model_config"], [5, 2, 1, "", "parse_raw"], [5, 2, 1, "", "set_system_message"]], "fle.commons.models.GameState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "agent_messages"], [5, 3, 1, "", "entities"], [5, 2, 1, "", "from_instance"], [5, 3, 1, "", "inventories"], [5, 5, 1, "", "is_multiagent"], [5, 3, 1, "", "namespaces"], [5, 5, 1, "", "num_agents"], [5, 2, 1, "", "parse"], [5, 2, 1, "", "parse_agent_messages"], [5, 2, 1, "", "parse_raw"], [5, 3, 1, "", "research"], [5, 3, 1, "", "timestamp"], [5, 2, 1, "", "to_instance"], [5, 2, 1, "", "to_raw"]], "fle.commons.models.GenerationParameters": [[5, 3, 1, "", "frequency_penalty"], [5, 3, 1, "", "logit_bias"], [5, 3, 1, "", "max_tokens"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "n"], [5, 3, 1, "", "presence_penalty"], [5, 3, 1, "", "stop_sequences"], [5, 3, 1, "", "temperature"]], "fle.commons.models.Message": [[5, 3, 1, "", "content"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "role"]], "fle.commons.models.ProductionFlows": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "crafted"], [5, 2, 1, "", "from_dict"], [5, 2, 1, "", "get_new_flows"], [5, 3, 1, "", "harvested"], [5, 3, 1, "", "input"], [5, 2, 1, "", "is_valid"], [5, 3, 1, "", "output"], [5, 3, 1, "", "price_list"], [5, 3, 1, "", "static_items"], [5, 2, 1, "", "to_dict"]], "fle.commons.models.ProfitConfig": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "dynamic_profit_multiplier"], [5, 3, 1, "", "max_static_unit_profit_cap"]], "fle.commons.models.Program": [[5, 3, 1, "", "achievements"], [5, 3, 1, "", "advantage"], [5, 3, 1, "", "code"], [5, 3, 1, "", "completion_token_usage"], [5, 3, 1, "", "conversation"], [5, 3, 1, "", "created_at"], [5, 3, 1, "", "depth"], [5, 3, 1, "", "flows"], [5, 2, 1, "", "from_row"], [5, 2, 1, "", "get_step"], [5, 2, 1, "", "get_uct"], [5, 3, 1, "", "holdout_value"], [5, 3, 1, "", "id"], [5, 3, 1, "", "instance"], [5, 3, 1, "", "meta"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "parent_id"], [5, 3, 1, "", "prompt_token_usage"], [5, 3, 1, "", "raw_reward"], [5, 3, 1, "", "response"], [5, 3, 1, "", "state"], [5, 3, 1, "", "ticks"], [5, 3, 1, "", "timing_metrics"], [5, 3, 1, "", "token_usage"], [5, 3, 1, "", "value"], [5, 3, 1, "", "version"], [5, 3, 1, "", "version_description"], [5, 3, 1, "", "visits"]], "fle.commons.models.ResearchState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "current_research"], [5, 3, 1, "", "progress"], [5, 3, 1, "", "research_progress"], [5, 3, 1, "", "research_queue"], [5, 3, 1, "", "technologies"]], "fle.commons.models.SerializableFunction": [[5, 2, 1, "", "__call__"], [5, 2, 1, "", "__getstate__"], [5, 2, 1, "", "__init__"], [5, 2, 1, "", "__setstate__"], [5, 2, 1, "", "__str__"], [5, 2, 1, "", "bind"], [5, 2, 1, "", "reconstruct"]], "fle.commons.models.TechnologyState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "enabled"], [5, 3, 1, "", "ingredients"], [5, 3, 1, "", "level"], [5, 3, 1, "", "name"], [5, 3, 1, "", "prerequisites"], [5, 3, 1, "", "research_unit_count"], [5, 3, 1, "", "research_unit_energy"], [5, 3, 1, "", "researched"]], "fle.commons.models.TimingMetrics": [[5, 3, 1, "", "children"], [5, 5, 1, "", "duration"], [5, 3, 1, "", "end_time"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "operation_name"], [5, 3, 1, "", "start_time"], [5, 2, 1, "", "to_dict"], [5, 5, 1, "", "total_duration"]], "fle.env": [[6, 0, 0, "-", "entities"], [7, 0, 0, "-", "game_types"], [8, 0, 0, "-", "gym_env"], [9, 0, 0, "-", "instance"], [10, 0, 0, "-", "namespace"]], "fle.env.entities": [[6, 1, 1, "", "Accumulator"], [6, 1, 1, "", "AdvancedAssemblingMachine"], [6, 1, 1, "", "Ammo"], [6, 1, 1, "", "AssemblingMachine"], [6, 1, 1, "", "BeltGroup"], [6, 1, 1, "", "Boiler"], [6, 1, 1, "", "BoundingBox"], [6, 1, 1, "", "BuildingBox"], [6, 1, 1, "", "BurnerInserter"], [6, 1, 1, "", "BurnerMiningDrill"], [6, 1, 1, "", "BurnerType"], [6, 1, 1, "", "ChemicalPlant"], [6, 1, 1, "", "Chest"], [6, 1, 1, "", "Dimensions"], [6, 1, 1, "", "Direction"], [6, 1, 1, "", "Electric"], [6, 1, 1, "", "ElectricFurnace"], [6, 1, 1, "", "ElectricMiningDrill"], [6, 1, 1, "", "ElectricalProducer"], [6, 1, 1, "", "ElectricityGroup"], [6, 1, 1, "", "ElectricityPole"], [6, 1, 1, "", "EnergySource"], [13, 1, 1, "", "Entity"], [6, 1, 1, "", "EntityCore"], [6, 1, 1, "", "EntityGroup"], [6, 1, 1, "", "EntityInfo"], [6, 1, 1, "", "EntityStatus"], [6, 1, 1, "", "FilterInserter"], [6, 1, 1, "", "Filtered"], [6, 1, 1, "", "FluidHandler"], [6, 1, 1, "", "Furnace"], [6, 1, 1, "", "Generator"], [6, 1, 1, "", "GunTurret"], [6, 1, 1, "", "HeatExchanger"], [6, 1, 1, "", "IndexedPosition"], [6, 1, 1, "", "Ingredient"], [6, 1, 1, "", "Inserter"], [6, 1, 1, "", "InspectionResults"], [6, 1, 1, "", "Inventory"], [6, 1, 1, "", "Lab"], [6, 1, 1, "", "Layer"], [6, 1, 1, "", "MiningDrill"], [6, 1, 1, "", "MultiFluidHandler"], [6, 1, 1, "", "OffshorePump"], [6, 1, 1, "", "OilRefinery"], [6, 1, 1, "", "Pipe"], [6, 1, 1, "", "PipeGroup"], [6, 1, 1, "", "Position"], [6, 1, 1, "", "Product"], [6, 1, 1, "", "Pump"], [6, 1, 1, "", "PumpJack"], [6, 1, 1, "", "Rail"], [6, 1, 1, "", "Reactor"], [6, 1, 1, "", "Recipe"], [6, 1, 1, "", "ResourcePatch"], [6, 1, 1, "", "Rocket"], [6, 1, 1, "", "RocketSilo"], [6, 1, 1, "", "SolarPanel"], [6, 1, 1, "", "Splitter"], [6, 1, 1, "", "StaticEntity"], [6, 1, 1, "", "StorageTank"], [6, 1, 1, "", "TileDimensions"], [6, 1, 1, "", "TransportBelt"], [6, 1, 1, "", "UndergroundBelt"], [6, 1, 1, "", "WallGroup"]], "fle.env.entities.Accumulator": [[6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.AdvancedAssemblingMachine": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Ammo": [[6, 3, 1, "", "magazine_size"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "reload_time"]], "fle.env.entities.AssemblingMachine": [[6, 3, 1, "", "assembling_machine_input"], [6, 3, 1, "", "assembling_machine_modules"], [6, 3, 1, "", "assembling_machine_output"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "recipe"]], "fle.env.entities.BeltGroup": [[6, 3, 1, "", "belts"], [6, 3, 1, "", "inputs"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "outputs"]], "fle.env.entities.Boiler": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "steam_output_point"]], "fle.env.entities.BoundingBox": [[6, 5, 1, "", "center"], [6, 2, 1, "", "height"], [6, 3, 1, "", "left_bottom"], [6, 3, 1, "", "left_top"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "right_bottom"], [6, 3, 1, "", "right_top"], [6, 2, 1, "", "width"]], "fle.env.entities.BuildingBox": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.BurnerInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerType": [[6, 3, 1, "", "fuel"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ChemicalPlant": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Chest": [[6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Dimensions": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.Direction": [[6, 3, 1, "", "DOWN"], [6, 3, 1, "", "EAST"], [6, 3, 1, "", "LEFT"], [6, 3, 1, "", "NORTH"], [6, 3, 1, "", "RIGHT"], [6, 3, 1, "", "SOUTH"], [6, 3, 1, "", "UP"], [6, 3, 1, "", "WEST"], [6, 2, 1, "", "from_string"]], "fle.env.entities.Electric": [[6, 3, 1, "", "electrical_id"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ElectricFurnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricalProducer": [[6, 3, 1, "", "electric_output_flow_limit"], [6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "production"]], "fle.env.entities.ElectricityGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "poles"]], "fle.env.entities.ElectricityPole": [[6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.EnergySource": [[6, 3, 1, "", "buffer_capacity"], [6, 3, 1, "", "drain"], [6, 3, 1, "", "input_flow_limit"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_flow_limit"]], "fle.env.entities.Entity": [[13, 3, 1, "", "dimensions"], [13, 3, 1, "", "energy"], [13, 3, 1, "", "health"], [13, 5, 1, "", "height"], [13, 3, 1, "", "id"], [13, 3, 1, "", "model_config"], [13, 3, 1, "", "prototype"], [13, 3, 1, "", "status"], [13, 3, 1, "", "tile_dimensions"], [13, 3, 1, "", "type"], [13, 3, 1, "", "warnings"], [13, 5, 1, "", "width"]], "fle.env.entities.EntityCore": [[6, 3, 1, "", "direction"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"]], "fle.env.entities.EntityGroup": [[6, 3, 1, "", "id"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "status"]], "fle.env.entities.EntityInfo": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "direction"], [6, 3, 1, "", "end_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "quantity"], [6, 3, 1, "", "start_position"], [6, 3, 1, "", "status"], [6, 3, 1, "", "warning"]], "fle.env.entities.EntityStatus": [[6, 3, 1, "", "CHARGING"], [6, 3, 1, "", "DISCHARGING"], [6, 3, 1, "", "EMPTY"], [6, 3, 1, "", "FLUID_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "FULLY_CHARGED"], [6, 3, 1, "", "FULL_BURNT_RESULT_OUTPUT"], [6, 3, 1, "", "FULL_OUTPUT"], [6, 3, 1, "", "ITEM_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "LAUNCHING_ROCKET"], [6, 3, 1, "", "LOW_INPUT_FLUID"], [6, 3, 1, "", "LOW_POWER"], [6, 3, 1, "", "LOW_TEMPERATURE"], [6, 3, 1, "", "MISSING_REQUIRED_FLUID"], [6, 3, 1, "", "MISSING_SCIENCE_PACKS"], [6, 3, 1, "", "NORMAL"], [6, 3, 1, "", "NOT_CONNECTED"], [6, 3, 1, "", "NOT_CONNECTED_TO_RAIL"], [6, 3, 1, "", "NOT_PLUGGED_IN_ELECTRIC_NETWORK"], [6, 3, 1, "", "NO_AMMO"], [6, 3, 1, "", "NO_FUEL"], [6, 3, 1, "", "NO_INGREDIENTS"], [6, 3, 1, "", "NO_INPUT_FLUID"], [6, 3, 1, "", "NO_MINABLE_RESOURCES"], [6, 3, 1, "", "NO_POWER"], [6, 3, 1, "", "NO_RECIPE"], [6, 3, 1, "", "NO_RESEARCH_IN_PROGRESS"], [6, 3, 1, "", "PREPARING_ROCKET_FOR_LAUNCH"], [6, 3, 1, "", "WAITING_FOR_SOURCE_ITEMS"], [6, 3, 1, "", "WAITING_FOR_SPACE_IN_DESTINATION"], [6, 3, 1, "", "WAITING_TO_LAUNCH_ROCKET"], [6, 3, 1, "", "WORKING"], [6, 2, 1, "", "from_int"], [6, 2, 1, "", "from_string"]], "fle.env.entities.FilterInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Filtered": [[6, 3, 1, "", "filter"], [6, 3, 1, "", "model_config"]], "fle.env.entities.FluidHandler": [[6, 3, 1, "", "connection_points"], [6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "model_config"]], "fle.env.entities.Furnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Generator": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.GunTurret": [[6, 3, 1, "", "kills"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "turret_ammo"]], "fle.env.entities.HeatExchanger": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.IndexedPosition": [[6, 2, 1, "", "__init__"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "type"]], "fle.env.entities.Ingredient": [[6, 3, 1, "", "count"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "type"]], "fle.env.entities.Inserter": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "pickup_position"]], "fle.env.entities.InspectionResults": [[6, 3, 1, "", "entities"], [6, 2, 1, "", "get_entities"], [6, 2, 1, "", "get_entity"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "player_position"], [6, 3, 1, "", "radius"], [6, 3, 1, "", "time_elapsed"]], "fle.env.entities.Inventory": [[6, 2, 1, "", "get"], [6, 2, 1, "", "items"], [6, 2, 1, "", "keys"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "serialize_model"], [6, 2, 1, "", "values"]], "fle.env.entities.Lab": [[6, 3, 1, "", "lab_input"], [6, 3, 1, "", "lab_modules"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "research"]], "fle.env.entities.Layer": [[6, 3, 1, "", "ALL"], [6, 3, 1, "", "CONNECTIONS"], [6, 3, 1, "", "ELECTRICITY"], [6, 3, 1, "", "ENTITIES"], [6, 3, 1, "", "GRID"], [6, 3, 1, "", "LABELS"], [6, 3, 1, "", "NATURAL"], [6, 3, 1, "", "NONE"], [6, 3, 1, "", "ORIGIN"], [6, 3, 1, "", "PLAYER"], [6, 3, 1, "", "RESOURCES"], [6, 3, 1, "", "ROCKS"], [6, 3, 1, "", "TREES"], [6, 3, 1, "", "WATER"]], "fle.env.entities.MiningDrill": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "resources"]], "fle.env.entities.MultiFluidHandler": [[6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "input_connection_points"], [6, 3, 1, "", "input_fluids"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_connection_points"], [6, 3, 1, "", "output_fluids"]], "fle.env.entities.OffshorePump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.OilRefinery": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Pipe": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "fluid"], [6, 3, 1, "", "fluidbox_id"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PipeGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "pipes"]], "fle.env.entities.Position": [[6, 2, 1, "", "__init__"], [6, 2, 1, "", "above"], [6, 2, 1, "", "below"], [6, 2, 1, "", "distance"], [6, 2, 1, "", "down"], [6, 2, 1, "", "is_close"], [6, 2, 1, "", "left"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "parse_args"], [6, 2, 1, "", "right"], [6, 2, 1, "", "to_bounding_box"], [6, 2, 1, "", "up"], [6, 3, 1, "", "x"], [6, 3, 1, "", "y"]], "fle.env.entities.Product": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "probability"]], "fle.env.entities.Pump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PumpJack": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Rail": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Reactor": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Recipe": [[6, 3, 1, "", "category"], [6, 3, 1, "", "enabled"], [6, 3, 1, "", "energy"], [6, 3, 1, "", "ingredients"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "products"]], "fle.env.entities.ResourcePatch": [[6, 3, 1, "", "bounding_box"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "size"]], "fle.env.entities.Rocket": [[6, 3, 1, "", "launch_progress"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "payload"]], "fle.env.entities.RocketSilo": [[6, 3, 1, "", "launch_count"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "rocket_inventory"], [6, 3, 1, "", "rocket_parts"], [6, 3, 1, "", "rocket_progress"]], "fle.env.entities.SolarPanel": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Splitter": [[6, 3, 1, "", "input_positions"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_positions"]], "fle.env.entities.StaticEntity": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "neighbours"]], "fle.env.entities.StorageTank": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.TileDimensions": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "tile_height"], [6, 3, 1, "", "tile_width"]], "fle.env.entities.TransportBelt": [[6, 3, 1, "", "input_position"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "is_source"], [6, 3, 1, "", "is_terminus"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_position"]], "fle.env.entities.UndergroundBelt": [[6, 3, 1, "", "connected_to"], [6, 3, 1, "", "is_input"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.WallGroup": [[6, 3, 1, "", "entities"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"]], "fle.env.game_types": [[7, 1, 1, "", "Prototype"], [7, 1, 1, "", "PrototypeMetaclass"], [7, 1, 1, "", "RecipeName"], [7, 1, 1, "", "Resource"], [7, 1, 1, "", "ResourceName"], [7, 1, 1, "", "Technology"]], "fle.env.game_types.Prototype": [[7, 3, 1, "", "Accumulator"], [7, 3, 1, "", "AdvancedCircuit"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "AssemblingMachine1"], [7, 3, 1, "", "AssemblingMachine2"], [7, 3, 1, "", "AssemblingMachine3"], [7, 3, 1, "", "AutomationSciencePack"], [7, 3, 1, "", "Battery"], [7, 3, 1, "", "BeltGroup"], [7, 3, 1, "", "BigElectricPole"], [7, 3, 1, "", "Boiler"], [7, 3, 1, "", "BurnerInserter"], [7, 3, 1, "", "BurnerMiningDrill"], [7, 3, 1, "", "Centrifuge"], [7, 3, 1, "", "ChemicalPlant"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "Coal"], [7, 3, 1, "", "CoalLiquifaction"], [7, 3, 1, "", "Concrete"], [7, 3, 1, "", "CopperCable"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CopperPlate"], [7, 3, 1, "", "ElectricEngineUnit"], [7, 3, 1, "", "ElectricFurnace"], [7, 3, 1, "", "ElectricMiningDrill"], [7, 3, 1, "", "ElectricityGroup"], [7, 3, 1, "", "ElectronicCircuit"], [7, 3, 1, "", "EmptyBarrel"], [7, 3, 1, "", "EngineUnit"], [7, 3, 1, "", "ExpressInserter"], [7, 3, 1, "", "ExpressSplitter"], [7, 3, 1, "", "ExpressTransportBelt"], [7, 3, 1, "", "ExpressUndergroundBelt"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "FastSplitter"], [7, 3, 1, "", "FastTransportBelt"], [7, 3, 1, "", "FastUndergroundBelt"], [7, 3, 1, "", "FilterInserter"], [7, 3, 1, "", "FirearmMagazine"], [7, 3, 1, "", "FlyingRobotFrame"], [7, 3, 1, "", "Gate"], [7, 3, 1, "", "Grenade"], [7, 3, 1, "", "GunTurret"], [7, 5, 1, "", "HEIGHT"], [7, 3, 1, "", "HeatExchanger"], [7, 3, 1, "", "HeatPipe"], [7, 3, 1, "", "HeavyOil"], [7, 3, 1, "", "Inserter"], [7, 3, 1, "", "IronChest"], [7, 3, 1, "", "IronGearWheel"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "IronPlate"], [7, 3, 1, "", "IronStick"], [7, 3, 1, "", "Lab"], [7, 3, 1, "", "LightOil"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LongHandedInserter"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MediumElectricPole"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "NuclearReactor"], [7, 3, 1, "", "OffshorePump"], [7, 3, 1, "", "OilRefinery"], [7, 3, 1, "", "PetroleumGas"], [7, 3, 1, "", "PiercingRoundsMagazine"], [7, 3, 1, "", "Pipe"], [7, 3, 1, "", "PipeGroup"], [7, 3, 1, "", "PlasticBar"], [7, 3, 1, "", "ProcessingUnit"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "Pump"], [7, 3, 1, "", "PumpJack"], [7, 3, 1, "", "Radar"], [7, 3, 1, "", "Rail"], [7, 3, 1, "", "Rocket"], [7, 3, 1, "", "RocketControlUnit"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketPart"], [7, 3, 1, "", "RocketSilo"], [7, 3, 1, "", "Satellite"], [7, 3, 1, "", "SmallElectricPole"], [7, 3, 1, "", "SmallLamp"], [7, 3, 1, "", "SolarPanel"], [7, 3, 1, "", "SolidFuel"], [7, 3, 1, "", "SpaceSciencePack"], [7, 3, 1, "", "Splitter"], [7, 3, 1, "", "StackFilterInserter"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "SteamEngine"], [7, 3, 1, "", "SteelChest"], [7, 3, 1, "", "SteelFurnace"], [7, 3, 1, "", "SteelPlate"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "StoneBrick"], [7, 3, 1, "", "StoneFurnace"], [7, 3, 1, "", "StoneWall"], [7, 3, 1, "", "StorageTank"], [7, 3, 1, "", "Sulfur"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "TransportBelt"], [7, 3, 1, "", "UndergroundBelt"], [7, 3, 1, "", "UndergroundPipe"], [7, 3, 1, "", "Uranium235"], [7, 3, 1, "", "Uranium238"], [7, 3, 1, "", "UraniumFuelCell"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "UtilitySciencePack"], [7, 5, 1, "", "WIDTH"], [7, 3, 1, "", "Wood"], [7, 3, 1, "", "WoodenChest"], [7, 2, 1, "", "__init__"]], "fle.env.game_types.RecipeName": [[7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "BasicOilProcessing"], [7, 3, 1, "", "CoalLiquefaction"], [7, 3, 1, "", "EmptyCrudeOilBarrel"], [7, 3, 1, "", "EmptyHeavyOilBarrel"], [7, 3, 1, "", "EmptyLightOilBarrel"], [7, 3, 1, "", "EmptyLubricantBarrel"], [7, 3, 1, "", "EmptyPetroleumGasBarrel"], [7, 3, 1, "", "EmptySulfuricAcidBarrel"], [7, 3, 1, "", "EmptyWaterBarrel"], [7, 3, 1, "", "FillCrudeOilBarrel"], [7, 3, 1, "", "FillHeavyOilBarrel"], [7, 3, 1, "", "FillLightOilBarrel"], [7, 3, 1, "", "FillLubricantBarrel"], [7, 3, 1, "", "FillPetroleumGasBarrel"], [7, 3, 1, "", "FillSulfuricAcidBarrel"], [7, 3, 1, "", "FillWaterBarrel"], [7, 3, 1, "", "HeavyOilCracking"], [7, 3, 1, "", "LightOilCracking"], [7, 3, 1, "", "NuclearFuelReprocessing"], [7, 3, 1, "", "SolidFuelFromHeavyOil"], [7, 3, 1, "", "SolidFuelFromLightOil"], [7, 3, 1, "", "SolidFuelFromPetroleumGas"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "UraniumProcessing"]], "fle.env.game_types.Resource": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"], [7, 3, 1, "", "Wood"]], "fle.env.game_types.ResourceName": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"]], "fle.env.game_types.Technology": [[7, 3, 1, "", "AdvancedElectronics"], [7, 3, 1, "", "AdvancedElectronics2"], [7, 3, 1, "", "AdvancedMaterialProcessing"], [7, 3, 1, "", "AdvancedMaterialProcessing2"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "Automation"], [7, 3, 1, "", "Automation2"], [7, 3, 1, "", "Automation3"], [7, 3, 1, "", "BarrelFilling"], [7, 3, 1, "", "BatteryTechnology"], [7, 3, 1, "", "CharacterInventorySlots"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "ElectricEnergy"], [7, 3, 1, "", "ElectricEnergy2"], [7, 3, 1, "", "ElectricEngineering"], [7, 3, 1, "", "Electronics"], [7, 3, 1, "", "EnergyShield"], [7, 3, 1, "", "EnergyShield2"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "Grenades"], [7, 3, 1, "", "Landfill"], [7, 3, 1, "", "Logistics"], [7, 3, 1, "", "Logistics2"], [7, 3, 1, "", "Logistics3"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MilitaryScience"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "ModularArmor"], [7, 3, 1, "", "NightVision"], [7, 3, 1, "", "NuclearPower"], [7, 3, 1, "", "OilProcessing"], [7, 3, 1, "", "Plastics"], [7, 3, 1, "", "PowerArmor"], [7, 3, 1, "", "PowerArmor2"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "RailwayTransportation"], [7, 3, 1, "", "ResearchSpeed"], [7, 3, 1, "", "Robotics"], [7, 3, 1, "", "RocketControl"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketSiloTechnology"], [7, 3, 1, "", "SolarEnergy"], [7, 3, 1, "", "SpaceScience"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "StackInserterCapacity1"], [7, 3, 1, "", "StackInserterCapacity2"], [7, 3, 1, "", "SteelProcessing"], [7, 3, 1, "", "StorageTanks"], [7, 3, 1, "", "SulfurProcessing"]], "fle.env.gym_env.action": [[0, 1, 1, "", "Action"]], "fle.env.gym_env.action.Action": [[0, 2, 1, "", "__init__"], [0, 3, 1, "", "agent_idx"], [0, 3, 1, "", "code"], [0, 3, 1, "", "game_state"], [0, 2, 1, "", "to_dict"]], "fle.env.gym_env.registry": [[1, 4, 1, "", "get_environment_info"], [1, 4, 1, "", "list_available_environments"], [1, 4, 1, "", "register_all_environments"]], "fle.env.instance": [[9, 1, 1, "", "DirectionInternal"], [1, 1, 1, "", "FactorioInstance"], [9, 1, 1, "", "GameControl"]], "fle.env.instance.DirectionInternal": [[9, 3, 1, "", "DOWN"], [9, 3, 1, "", "EAST"], [9, 3, 1, "", "LEFT"], [9, 3, 1, "", "NORTH"], [9, 3, 1, "", "RIGHT"], [9, 3, 1, "", "SOUTH"], [9, 3, 1, "", "UP"], [9, 3, 1, "", "WEST"], [9, 2, 1, "", "from_factorio_direction"], [9, 2, 1, "", "next_clockwise"], [9, 2, 1, "", "next_counterclockwise"], [9, 2, 1, "", "opposite"], [9, 2, 1, "", "to_factorio_direction"]], "fle.env.instance.FactorioInstance": [[1, 2, 1, "", "__init__"], [1, 2, 1, "", "cleanup"], [1, 2, 1, "", "connect_to_server"], [1, 2, 1, "", "eval"], [1, 2, 1, "", "eval_with_error"], [1, 5, 1, "", "first_namespace"], [1, 2, 1, "", "get_elapsed_ticks"], [1, 2, 1, "", "get_speed"], [1, 2, 1, "", "get_system_prompt"], [1, 2, 1, "", "get_warnings"], [1, 2, 1, "", "initialise"], [1, 5, 1, "", "is_multiagent"], [1, 5, 1, "", "namespace"], [1, 3, 1, "", "namespace_class"], [1, 2, 1, "", "pause"], [1, 2, 1, "id0", "reset"], [1, 2, 1, "", "set_speed"], [1, 2, 1, "", "set_speed_and_unpause"], [1, 2, 1, "", "unpause"]], "fle.env.instance.GameControl": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "get_elapsed_ticks"], [9, 2, 1, "", "get_speed"], [9, 2, 1, "", "is_paused"], [9, 2, 1, "", "pause"], [9, 2, 1, "", "pause_at_speed"], [9, 2, 1, "", "reset_to_defaults"], [9, 2, 1, "", "set_speed"], [9, 2, 1, "", "set_speed_and_unpause"], [9, 2, 1, "", "unpause"]], "fle.env.namespace": [[10, 1, 1, "", "FactorioNamespace"], [10, 1, 1, "", "LoopContext"], [10, 4, 1, "", "unwrap_after_deserialization"], [10, 4, 1, "", "wrap_for_serialization"]], "fle.env.namespace.FactorioNamespace": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "eval_with_timeout"], [10, 2, 1, "", "execute_body"], [10, 2, 1, "", "execute_node"], [10, 2, 1, "", "get_functions"], [10, 2, 1, "", "get_messages"], [10, 2, 1, "", "load"], [10, 2, 1, "", "load_messages"], [10, 2, 1, "", "log"], [10, 2, 1, "", "reset"]], "fle.env.namespace.LoopContext": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "enter_loop"], [10, 2, 1, "", "exit_loop"], [10, 2, 1, "", "handle_break"], [10, 2, 1, "", "handle_continue"]], "fle.eval": [[11, 0, 0, "-", "algorithms"], [12, 0, 0, "-", "tasks"]], "fle.eval.tasks": [[12, 1, 1, "", "DefaultTask"], [12, 1, 1, "", "TaskABC"], [12, 1, 1, "", "TaskFactory"], [12, 1, 1, "", "ThroughputTask"], [12, 1, 1, "", "UnboundedThroughputTask"]], "fle.eval.tasks.DefaultTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskABC": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "get_agent_instructions"], [12, 2, 1, "", "setup"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskFactory": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "create_task"]], "fle.eval.tasks.ThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.UnboundedThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "terms": {"": [3, 6, 14, 15, 17, 18, 26, 29], "0": [0, 1, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 29, 30], "00": 16, "00z": 16, "01": 16, "01t00": 16, "01t01": 16, "02": 19, "05": [19, 20], "1": [0, 1, 5, 6, 7, 9, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28], "10": [0, 1, 5, 9, 15, 16, 18, 19, 20, 21, 23, 24, 26, 27, 28, 30], "100": [12, 15, 17, 18, 19, 20, 21], "1000": [13, 15, 17, 19, 20, 21], "10000": [0, 17], "1000000": 0, "1024": [6, 21], "110": [18, 23], "128": [6, 21], "139": 21, "15": [14, 16, 19], "150": [13, 16], "16": [1, 6, 13, 17, 19], "19": 21, "2": [6, 7, 9, 13, 16, 19, 20, 21, 23, 24], "20": [18, 19, 20, 21, 27, 30], "200": [18, 21], "2000": [17, 19, 20, 21], "2024": 16, "2047": 6, "215": 21, "235": 7, "238": 7, "24": [1, 6, 22], "250": 1, "255": 21, "256": [6, 21], "264": 21, "2666": 24, "27": [13, 19, 24], "27000": [1, 9], "28": [13, 19, 24], "2d": 21, "3": [7, 13, 14, 16, 18, 19, 20, 21, 23, 24], "30": [16, 19, 20, 30], "300": 21, "30000": 24, "32": 6, "34197": 23, "3600": 17, "4": [6, 9, 13, 19, 24], "400": 21, "41": 5, "42": 18, "45": 19, "5": [5, 6, 13, 15, 19, 20, 21, 24], "50": [12, 17, 28], "500": [14, 17], "5000": 17, "512": [6, 21], "520": 21, "5432": 16, "59": [13, 19, 24], "6": [6, 9, 19, 21], "60": [1, 9, 12, 17], "61": [13, 19, 24], "64": 6, "65": 21, "6666666667": 24, "67": 13, "69": 21, "7": [20, 21], "70": [20, 21], "75": [13, 19, 20, 21, 24], "8": [6, 15, 19, 20, 21], "80": [20, 21], "85": [20, 21], "9": 21, "90": [20, 21], "95": [19, 20], "A": [3, 6, 17], "For": [0, 16, 22, 23], "If": [1, 29], "It": [6, 29, 30], "No": [18, 19, 23], "Not": [26, 28, 29, 30], "Or": 12, "The": [0, 1, 3, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "These": [1, 9], "To": 23, "With": [18, 23, 30], "_": [15, 18, 20], "__call__": [5, 14, 18], "__getstate__": 5, "__init__": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 19, 20, 21], "__setstate__": 5, "__str__": 5, "_analyze_connect": 21, "_analyze_visual_data": 21, "_calculate_density_map": 21, "_classify_ent": 21, "_classify_resourc": 21, "_default_construction_behavior": 20, "_default_research_behavior": 20, "_default_resource_behavior": 20, "_detect_ent": 21, "_detect_resource_patch": 21, "_estimate_resource_s": 21, "_extract_dominant_color": 21, "_extract_spatial_featur": 21, "_generate_action_cod": 15, "_handle_collection_task": 20, "_handle_coordination_request": 20, "_handle_infrastructure_task": 20, "_handle_research_plan": 20, "_handle_resource_request": 20, "_handle_task_complet": 20, "_initial_coordin": 20, "_initial_setup": 19, "_initial_visual_explor": 21, "_initialize_ag": 20, "_is_entity_pixel": 21, "_is_resource_region": 21, "_monitor_and_optim": 19, "_monitor_min": 15, "_monitoring_and_optim": 20, "_multiplayer_": 23, "_must_": 14, "_process_messag": 20, "_setup_min": [15, 19], "_task_distribut": 20, "_tools_": 14, "_visual_monitor": 21, "_visual_setup": 21, "a2a": 3, "abl": 24, "about": [0, 1, 12, 13, 16, 24, 30], "abov": 6, "absolut": 6, "abstract": [3, 15, 24], "accept": [6, 26, 28], "access": [0, 1, 16], "account": [26, 28, 29], "accru": 10, "accumul": [2, 6, 7], "accuraci": 21, "achiev": [4, 5, 12, 17], "acid": [6, 7], "across": [1, 15, 21, 22], "act": [15, 19, 20, 21, 24], "action": [1, 9, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25], "action1": 16, "action2": 16, "action3": 16, "action_0": 0, "action_1": 0, "activ": 23, "actual": [0, 26, 28], "adapt": [14, 15, 17], "add": [0, 5, 12, 14, 19, 21, 23, 24, 26], "add_agent_messag": 5, "add_result": 5, "add_user_messag": 5, "addit": [16, 18, 23], "address": [1, 9, 23], "adjust": [15, 17, 20, 21, 22], "advanc": [7, 14, 19, 20, 21, 23, 25], "advanced_circuit_throughput": 1, "advancedassemblingmachin": [2, 6, 7], "advancedcircuit": 7, "advancedelectron": 7, "advancedelectronics2": 7, "advancedmaterialprocess": 7, "advancedmaterialprocessing2": 7, "advancedoilprocess": 7, "advantag": 5, "affect": [1, 9, 14], "after": [5, 24, 28], "ag": 23, "against": 17, "agent": [1, 9, 10, 12, 13, 14, 16, 17, 18, 22, 23, 24, 25, 26, 28, 29, 30], "agent_abc": [2, 15, 19, 20, 21], "agent_count": 20, "agent_idx": [0, 1, 9, 12, 15, 19, 20, 21], "agent_index": 10, "agent_instruct": 12, "agent_messag": 5, "agent_specialization_effect": 20, "agent_typ": [15, 16, 19, 20, 21], "agentabc": [2, 3], "agentcard": 3, "alert": [1, 9], "algorithm": [2, 15, 20, 21], "alia": [1, 9], "align": 14, "all": [0, 1, 2, 5, 6, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 28, 29], "all_technologies_research": [1, 9], "all_technology_reserach": 12, "allow": [1, 6, 13, 17, 18, 22, 26, 28, 29, 30], "also": 6, "alwai": [18, 27, 29, 30], "ammo": [2, 6, 7], "among": 20, "amount": [14, 18], "an": [1, 4, 5, 6, 7, 9, 12, 14, 15, 16, 22, 24, 25, 26, 29, 30], "analysi": [16, 25, 29], "analyz": [14, 15, 20, 21, 29], "ani": [0, 1, 4, 5, 6, 13, 15, 19, 20, 21], "annot": [10, 14], "ant": 23, "anthrop": 23, "anthropic_api_kei": 23, "api": [18, 24], "append": [15, 20, 21], "applic": 29, "approach": 15, "appropri": [17, 18, 26, 30], "ar": [0, 1, 5, 9, 14, 15, 17, 18, 22, 23, 24, 30], "arbitrary_types_allow": [5, 6], "architectur": 25, "area": [14, 18, 19, 30], "arg": [3, 5, 6, 10, 15, 18], "arg1": 14, "arg2": 14, "argument": 6, "armor": 7, "around": [14, 18], "arrai": 21, "assembl": [6, 7, 14, 20], "assembling_machine_input": 6, "assembling_machine_modul": 6, "assembling_machine_output": 6, "assemblingmachin": [2, 6, 7, 13], "assemblingmachine1": 7, "assemblingmachine2": 7, "assemblingmachine3": 7, "assert": [0, 15, 17, 18, 24], "assign": [20, 24], "assmbl": 6, "ast": 10, "async": 3, "attribut": [5, 6, 10], "auto": 14, "autodoc": [], "autom": [0, 7, 13, 16, 17, 19, 20, 24], "automat": [1, 14, 16, 17, 18, 22, 24], "automation2": 7, "automation3": 7, "automation_science_pack_throughput": 1, "automationsciencepack": 7, "avail": [0, 9, 13, 14, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30], "averag": [16, 19, 20], "avg_query_tim": 16, "avoid": 14, "axi": 21, "b": 23, "b64decod": 21, "back": [1, 9, 10, 14], "backend": 16, "background": 21, "backup": 25, "backup_id": 16, "backward": 18, "balanc": 17, "bar": 7, "barrel": [6, 7], "barrelfil": 7, "base": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 19, 21, 25], "base64": [13, 21], "basemodel": [4, 5, 6], "basetask": 17, "bash": 23, "basic": [0, 7, 14, 15, 18, 20, 21, 25, 26, 27, 28, 29, 30], "basic_ag": 19, "basic_agent_config": 19, "basic_setup": 20, "basicag": 19, "basicoilprocess": 7, "batch": 16, "batch_save_step": 16, "batteri": [6, 7], "battery_throughput": 1, "batterytechnologi": 7, "been": [1, 9], "befor": [0, 1, 9, 16, 26, 28, 29], "begin": [19, 20], "behav": 6, "behavior": [0, 14, 15, 20, 25], "below": [6, 20], "belt": [6, 7, 13, 14], "beltgroup": [2, 6, 7], "best": [14, 25], "beta": 23, "better": [24, 27], "between": [0, 1, 5, 6, 13, 14, 15, 17, 20, 21, 22, 27], "big": 7, "bigelectricpol": 7, "bind": 5, "black": 21, "block": [0, 10, 23], "bodi": 10, "boiler": [2, 6, 7], "bonu": 7, "bool": [3, 4, 5, 6, 9, 18, 26, 28, 29, 30], "bottleneck": [19, 21], "bottom": 6, "bound": 6, "boundari": 14, "bounding_box": 6, "boundingbox": [2, 6], "box": 6, "branch": 23, "break": [20, 29], "breakdown": 20, "brick": 7, "brown": 21, "buffer_capac": 6, "build": [1, 6, 12, 14, 17, 20, 22, 24, 25, 29, 30], "build_infrastructur": 20, "buildabl": 14, "building_materi": 29, "building_typ": 20, "buildingbox": [2, 6], "built": [20, 24], "burn": 6, "burnabl": 6, "burner": [7, 13, 24, 29], "burnerinsert": [2, 6, 7], "burnerminingdril": [2, 6, 7, 24], "burnertyp": [2, 6], "byte": 5, "bytesio": 21, "cabl": 7, "cach": [16, 18], "cache_script": [1, 9], "calcul": [5, 6, 14, 17], "call": [6, 14, 18], "callabl": [5, 14], "can": [0, 1, 6, 7, 9, 14, 15, 17, 18, 22, 23, 24, 26, 27, 28], "cannot": [6, 26, 28], "capabl": [3, 15, 17, 18, 29], "capac": [7, 28], "captur": [0, 5], "card": 3, "case": [1, 9, 15, 17, 18, 26, 27, 28], "categori": [6, 25], "caught": 0, "caus": [26, 28, 29, 30], "cd": [18, 23], "cell": 7, "center": [6, 18], "center_po": 18, "centrifug": 7, "chain": [0, 19, 24, 27], "challeng": [12, 17], "chang": [10, 14, 17, 21, 26, 28, 29, 30], "charact": 7, "characterinventoryslot": 7, "charg": 6, "check": [3, 5, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30], "check_step_complet": 3, "checkpoint": 16, "chemic": [1, 6, 7, 14], "chemical_science_pack_throughput": 1, "chemicalpl": [2, 6, 7], "chemicalsciencepack": 7, "chest": [0, 2, 6, 7, 13, 14, 15, 19, 20, 21, 24, 26, 27, 28, 29], "children": 5, "choos": [24, 30], "circuit": [1, 7], "circular": 18, "cl": 7, "class": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 24, 25], "classdict": 7, "classif": 21, "classmethod": [5, 6, 9], "classvar": [4, 5, 6, 13], "clean": [1, 15], "cleanup": [1, 3, 9, 16], "clear": [15, 17, 18, 20, 26, 27, 30], "clear_ent": [1, 9], "cli": 24, "click": 23, "client": [14, 18, 25], "close": [1, 15, 19, 20, 21], "closest": 14, "cluster": [24, 25], "coal": [7, 13, 15, 17, 19, 20, 24, 28, 29], "coal_po": 19, "coalliquefact": 7, "coalliquifact": 7, "code": [1, 4, 5, 12, 15, 16, 19, 20, 21, 23, 24, 25, 27], "code_lin": 15, "collabor": 20, "collaborative_planning_success": 20, "collect": [14, 15, 18, 19, 20, 27], "collect_": 20, "collect_copper_or": 20, "collect_iron_or": 20, "collected_resourc": 15, "collector": 25, "color": 21, "com": 18, "combin": 27, "command": [19, 20, 21, 22], "common": [0, 1, 9, 14, 16, 19, 25], "commun": [13, 15, 20, 29], "communication_effici": 20, "communication_en": 20, "communication_lat": 20, "compat": [1, 13, 14, 16, 18, 28], "compet": 17, "complet": [2, 3, 5, 12, 13, 14, 15, 16, 17, 18, 20], "completion_token_usag": 5, "completionreason": [2, 4], "completionresult": [2, 4], "complex": [0, 14, 24, 27], "compon": [1, 13, 14, 25], "compos": 22, "comprehens": [0, 1, 14, 17, 18], "compress": 21, "compris": 24, "comput": [21, 24], "computer_vision_model": 21, "concept": 25, "concret": [7, 15], "condit": [0, 12, 17, 27], "confid": 21, "config": [4, 5, 6, 13, 15, 17, 19, 20, 21, 22, 24], "configdict": [4, 5, 6, 13], "configur": [1, 4, 5, 6, 9, 13, 14, 24, 25], "confirm": 23, "conflict": [15, 18, 20, 30], "conflict_resolut": 20, "conflict_resolution_success": 20, "conform": [4, 5, 6, 13], "connect": [1, 6, 16, 21, 22, 23], "connect_ent": [14, 27], "connect_to_serv": [1, 9], "connected_to": 6, "connection_count": 16, "connection_point": 6, "connection_timeout": 16, "consid": [16, 18], "constraint": 17, "construct": [17, 20, 24], "construction_queu": 20, "construction_specialist": 20, "constructionspecialist": 20, "consumpt": [15, 17, 19], "contain": [1, 2, 3, 5, 12, 13, 14, 22, 26, 27, 28, 29, 30], "content": [5, 6, 14, 20, 26, 28, 29], "context": [0, 3, 6, 14, 24], "continu": 1, "control": [0, 5, 7, 10, 16], "convers": [2, 3, 5], "convert": [0, 1, 5, 6, 9, 17, 21], "conveyor": [6, 13], "coordin": [0, 6, 14, 15, 17, 18, 20], "coordination_effect": 20, "coordination_effici": 20, "coordination_en": 20, "coordination_request": 20, "coordination_start": 20, "copper": [7, 15, 19, 20, 29], "copper_or": [17, 19, 20, 21], "copper_po": [19, 20, 21], "copperc": 7, "copperor": 7, "copperpl": 7, "core": [5, 6, 23, 25], "correctli": [21, 30], "corrupt": 16, "cost": 17, "count": [6, 13, 14, 15, 16, 17, 18, 19, 24, 26, 28, 29], "cpu": 21, "cpu_util": 21, "crack": 7, "craft": [5, 6, 13], "craft_item": 14, "creat": [0, 1, 3, 5, 6, 12, 15, 16, 19, 20, 21, 22, 24, 25, 27], "create_backup": 16, "create_default_agent_card": [2, 3], "create_task": 12, "created_at": [4, 5], "creation": [1, 17], "criteria": [15, 17], "crude": [6, 7], "crude_oil_throughput": 1, "crudeoil": 7, "cue": 21, "current": [0, 1, 3, 5, 9, 12, 13, 15, 16, 17, 19, 20, 21], "current_research": 5, "current_tim": 17, "current_typ": 20, "current_vers": 16, "custom": [1, 12, 16, 22, 27], "d": 16, "dai": 6, "data": [1, 4, 5, 6, 13, 16, 18, 21, 22, 24, 27], "databas": [23, 25], "databasecli": 16, "dataset": 16, "datetim": [4, 5], "db": 16, "db_client": 16, "debug": [0, 19, 24], "debug_mod": 19, "decis": [13, 15, 19, 20], "declar": 3, "decod": 21, "def": [0, 15, 17, 18, 19, 20, 21], "default": [3, 6, 9, 16, 18, 20, 23, 26, 28, 30], "defaulttask": [2, 12], "defin": [0, 1, 10, 12, 15, 17, 18, 20, 24], "definit": [1, 9, 12, 25], "delet": 10, "deliv": 20, "deliveri": 20, "demonstr": [19, 20, 21], "deni": 29, "densiti": 7, "density_map": 21, "depend": [17, 18, 24], "deploy": 16, "deposit": 14, "depth": 5, "describ": [3, 18], "descript": [0, 14, 17, 18, 27], "design": [15, 18, 20], "desir": [14, 24], "detail": [0, 1, 13, 14, 19, 22, 24, 27], "detect": 21, "develop": [16, 21, 25], "devic": [6, 13], "dialogu": 5, "dict": [0, 1, 4, 5, 6, 10, 12, 15, 18, 19, 20, 21], "dictionari": [0, 4, 5, 6, 12, 13, 18, 26, 28, 29, 30], "differ": [6, 20, 22, 28, 30], "difficulti": 17, "dimens": [2, 6, 13, 14], "direct": [0, 2, 6, 9, 14, 15, 19, 20, 21, 24, 25, 27, 30], "direction_str": 6, "directionintern": [2, 9], "directli": [5, 6, 12], "directori": [14, 18, 22, 24], "dirt": 21, "discharg": 6, "disconnect": 23, "discov": [1, 18], "discoveri": [15, 17, 18, 19], "discret": 0, "disk": 22, "distanc": [6, 17], "distribut": [6, 7, 13, 15, 20], "divid": [6, 20], "dlc": 23, "do": 18, "doc": 23, "docker": [16, 22, 23], "docstr": 5, "document": [15, 16, 17, 18, 19], "doe": [14, 26, 28, 29], "doesn": [26, 28, 29], "domin": 21, "dominant_color": 21, "don": 26, "done": [19, 20, 21], "down": [6, 9, 24], "downgrad": 23, "drain": 6, "drill": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "drill_east": 30, "drill_north": 30, "drill_south": 30, "drill_west": 30, "drop_posit": [0, 6, 15, 19, 21, 24, 27], "durat": [5, 14], "dure": [0, 6, 17, 23, 24, 29], "dynam": [15, 17], "dynamic_profit_multipli": 5, "e": [3, 12, 14, 16, 19, 20, 21, 24], "each": [14, 17, 22], "east": [6, 9, 30], "edg": [15, 17, 18, 21, 27], "effect": [20, 21], "effici": [13, 15, 17, 18, 19, 20, 21], "either": 6, "elaps": [1, 9], "elapsed_tim": 17, "electr": [2, 6, 7, 13], "electric_output_flow_limit": 6, "electrical_id": 6, "electricalproduc": [2, 6], "electricenergi": 7, "electricenergy2": 7, "electricengin": 7, "electricengineunit": 7, "electricfurnac": [2, 6, 7], "electricitygroup": [2, 6, 7], "electricitypol": [2, 6, 7], "electricminingdril": [2, 6, 7], "electron": 7, "electronic_circuit_throughput": 1, "electroniccircuit": 7, "elif": [15, 19, 20, 21], "els": [15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "empti": [6, 7, 18, 29], "emptybarrel": 7, "emptycrudeoilbarrel": 7, "emptyheavyoilbarrel": 7, "emptylightoilbarrel": 7, "emptylubricantbarrel": 7, "emptypetroleumgasbarrel": 7, "emptysulfuricacidbarrel": 7, "emptywaterbarrel": 7, "enabl": [5, 6, 18, 19, 20, 24], "encapsul": [0, 24], "encod": [13, 21], "end": [3, 18], "end_posit": 6, "end_tim": [5, 16], "energi": [6, 7, 13, 24], "energy_sourc": 6, "energyshield": 7, "energyshield2": 7, "energysourc": [2, 6], "engin": 7, "engine_unit_throughput": 1, "engineunit": 7, "enhanc": [21, 24], "enhance_response_with_task_output": 12, "enough": 30, "ensur": [0, 1, 9, 13, 18, 21, 22, 23, 28, 30], "enter_loop": 10, "entiti": [0, 1, 2, 5, 7, 9, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "entities_built": 20, "entity_class_nam": 7, "entity_loc": 21, "entity_util": 19, "entitycor": [2, 6, 13], "entitygroup": [2, 6], "entityinfo": [2, 6], "entitystatu": [0, 2, 6, 13, 15, 19, 20, 21, 24], "enum": [0, 4, 6, 7, 9, 30], "enumer": [4, 6, 7, 9], "enummeta": 7, "env": [0, 1, 2, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24], "environ": [0, 3, 5, 9, 12, 15, 16, 17, 19, 20, 21, 22, 23, 27], "episod": [15, 19, 20, 21, 24], "episode_count": 15, "equip": [7, 29], "error": [4, 9, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], "error_r": 19, "essenti": 14, "etc": [6, 14], "eval": [1, 2, 9, 14, 17, 19, 20, 21, 23, 24], "eval_dict": 10, "eval_with_error": [1, 9], "eval_with_timeout": 10, "evalu": [1, 9, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25], "everi": 16, "exact": 6, "examin": 29, "exampl": [12, 14, 27], "except": [0, 10, 21, 24], "exchang": [6, 7], "execut": [1, 3, 5, 10, 14, 15, 17, 18, 24, 25], "execute_bodi": 10, "execute_nod": 10, "exhaust": 0, "exist": [15, 20, 23, 29, 30], "exit_loop": 10, "expect": [0, 30], "expens": 18, "experi": [15, 16, 17, 23], "explicitli": 6, "explor": [17, 19, 21, 24], "exploration_const": 5, "export": 16, "expr": [1, 9, 10], "express": [1, 7, 9, 10], "expressinsert": 7, "expresssplitt": 7, "expresstransportbelt": 7, "expressundergroundbelt": 7, "extend": 18, "extens": [15, 16], "extra": [6, 13], "extract": [6, 13, 14, 21, 26], "extract_item": [14, 28, 29], "extracted_count": 26, "f": [0, 15, 16, 18, 19, 20, 21, 26, 27, 28, 29, 30], "facil": 13, "factori": [1, 5, 12, 22, 24], "factorio": [0, 1, 3, 5, 9, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 27], "factorioinst": [2, 9, 12, 25], "factorionamespac": [1, 2, 9, 10], "fail": [0, 1, 26, 28, 29, 30], "failur": [0, 1, 14, 18, 20, 21, 27], "fals": [1, 9, 10, 12, 13, 19, 20, 21], "fast": [1, 7, 9], "fastinsert": 7, "fastsplitt": 7, "fasttransportbelt": 7, "fastundergroundbelt": 7, "featur": [16, 23, 25], "feedback": [16, 21, 24], "field": 6, "file": [1, 9, 12, 14, 16, 17, 18, 22, 23, 24], "fill": 7, "fillcrudeoilbarrel": 7, "fillheavyoilbarrel": 7, "filllightoilbarrel": 7, "filllubricantbarrel": 7, "fillpetroleumgasbarrel": 7, "fillsulfuricacidbarrel": 7, "fillwaterbarrel": 7, "filter": [2, 5, 6, 7, 14, 18, 29], "filter_serializable_var": [2, 5], "filterinsert": [2, 6, 7], "final": 14, "find": [14, 19, 20, 21, 26, 27, 28, 29, 30], "find_entities_filt": 18, "firearm": 7, "firearmmagazin": 7, "firewal": 22, "first": [6, 22, 24], "first_namespac": [1, 9], "fix": 22, "flag": 30, "fle": [0, 1, 2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "fle123": 16, "fle_databas": 16, "fle_db_typ": 16, "fle_us": 16, "flexibl": 15, "float": [1, 4, 5, 6, 9, 12, 13], "flow": [4, 5, 6, 10, 13], "flow_rat": 6, "fluid": [1, 6, 7, 13], "fluid_box": 6, "fluid_ingredient_shortag": 6, "fluid_system": 6, "fluidbox_id": 6, "fluidhandl": [2, 6], "fly": 7, "flyingrobotfram": 7, "focus": 17, "follow": [0, 13, 15, 17, 27], "forc": 23, "form": [6, 10], "format": [0, 5, 14, 21], "found": [18, 19, 21, 23, 29], "fp": 13, "fraction": [19, 20, 21], "frame": 7, "framework": [12, 15, 25], "frequenc": 20, "frequency_penalti": 5, "frequent": 16, "from": [1, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 29, 30], "from_attribut": 5, "from_dict": 5, "from_factorio_direct": 9, "from_inst": 5, "from_int": 6, "from_row": 5, "from_str": 6, "fuel": [6, 7, 19, 24], "full": [0, 16, 19, 26, 28, 29], "full_burnt_result_output": 6, "full_output": 6, "fully_charg": 6, "func": 5, "func_data": 5, "function": [0, 1, 3, 5, 6, 9, 10, 12, 13, 14, 18, 24], "furnac": [2, 6, 7, 14, 20, 28, 29], "furnace_result": 6, "furnace_sourc": 6, "g": [12, 14, 24], "ga": 7, "game": [0, 1, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 24, 25, 27, 29, 30], "game_info": [13, 15, 17, 19], "game_st": [0, 1, 9, 15, 19, 20, 21], "game_typ": [2, 15, 17, 18, 19, 20, 21], "gamecontrol": [2, 9], "gameinfo": 13, "gamest": [0, 2, 5], "gate": 7, "gather": 14, "gear": 7, "gener": [2, 6, 7, 13, 15, 16, 19, 21, 22, 23, 24], "generationparamet": [2, 5], "get": [0, 1, 3, 5, 6, 9, 10, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], "get_agent_card": 3, "get_agent_instruct": 12, "get_connection_amount": 14, "get_elapsed_tick": [1, 9], "get_ent": [0, 6, 13, 14, 15, 19, 20, 21, 24, 26, 28, 29], "get_environment_info": 1, "get_funct": 10, "get_messag": 10, "get_migration_statu": 16, "get_new_flow": 5, "get_performance_metr": 16, "get_posit": [0, 19, 21], "get_prototype_recip": 14, "get_research_progress": [14, 20], "get_resource_patch": 14, "get_reward": 17, "get_spe": [1, 9], "get_statist": 16, "get_step": 5, "get_system_prompt": [1, 9], "get_uct": 5, "get_warn": [1, 9], "global": [5, 14, 18], "goal": 13, "goal_descript": 12, "gold": 21, "gracefulli": [0, 15, 18], "gradual": 19, "grai": 21, "graphic": 23, "grenad": 7, "grid": 6, "ground": 7, "group": [6, 7, 14, 16], "guid": [22, 27], "guidanc": 21, "gun": 7, "gunturret": [2, 6, 7], "gym": [0, 17, 19, 20, 21, 25], "gym_env": [0, 1, 2, 15, 19, 20, 21], "gym_run_config": 24, "ha": [14, 22, 23, 26], "hand": 7, "handl": [6, 7, 9, 10, 14, 15, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30], "handle_break": 10, "handle_continu": 10, "harvest": [5, 14], "harvest_resourc": 14, "hasattr": [15, 19, 20, 21], "have": [1, 9, 10, 15, 23, 26, 28, 29], "health": [6, 13, 16], "heat": [6, 7], "heatexchang": [2, 6, 7], "heatpip": 7, "heavi": [7, 14], "heavyoil": 7, "heavyoilcrack": 7, "height": [6, 7, 13], "hello": [1, 13, 15, 16], "help": 23, "helper": 10, "here": [15, 17, 18], "hierarch": [17, 24], "high": [16, 17, 20, 21, 23], "hint": [18, 27], "histori": 16, "holdout_valu": 5, "holdout_wait_period": 12, "how": [0, 14, 19, 20, 21], "html": 23, "http": 18, "i": [0, 1, 3, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "id": [1, 5, 6, 13, 16], "ideal": 16, "identif": 21, "identifi": [19, 21], "imag": [13, 21], "image_bound": 21, "image_cent": 21, "image_data": 21, "image_mod": 21, "image_process": 21, "image_processing_tim": 21, "image_s": 21, "img_arrai": 21, "immedi": 9, "implement": [1, 9, 14, 16, 18, 24, 25, 27, 29], "import": [1, 6, 12, 15, 16, 17, 18, 19, 20, 21, 23], "improv": [15, 19, 21], "includ": [0, 1, 5, 9, 12, 13, 14, 16, 18, 29], "index": [0, 14, 16, 25], "indexedposit": [2, 6], "indic": [12, 21], "individu": [13, 16], "info": [1, 13, 19, 20, 21], "inform": [0, 1, 5, 12, 14, 15, 16, 20, 21, 25, 27, 30], "infra": 23, "infrastructur": 20, "ingredi": [2, 5, 6, 14, 24], "inherit": [14, 15, 18], "init": 24, "initi": [5, 14, 15, 16, 19, 20, 21, 23], "initialis": [1, 6, 9], "inject": 3, "input": [1, 5, 6, 9, 14, 18, 21, 27], "input_connection_point": 6, "input_flow_limit": 6, "input_fluid": 6, "input_posit": 6, "insert": [2, 6, 7, 13, 14, 18, 28], "insert_item": [14, 26, 29], "inserted_count": 28, "inserter_throughput": 1, "inspect": [0, 27, 29], "inspect_inventori": [14, 15, 19, 20, 21, 26, 28], "inspectionresult": [2, 6], "instal": 25, "instanc": [0, 1, 2, 5, 6, 10, 12, 22], "insuffici": [29, 30], "int": [0, 4, 5, 6, 12, 13, 18, 26, 28], "integr": [1, 16], "intention": 24, "inter": [13, 20], "interact": [0, 1, 6, 9, 14, 15, 19, 21, 23, 25], "interfac": [1, 15, 16, 18], "intern": 24, "intflag": 6, "intuit": [15, 18], "invalid": [0, 1, 18, 24, 26, 27, 28, 29, 30], "inventori": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 24, 25, 26, 28, 29, 30], "inventory_threshold": 15, "inventory_typ": 29, "invok": 14, "io": 21, "iron": [0, 7, 12, 13, 15, 17, 18, 19, 20, 24, 26, 28, 29, 30], "iron_gear_wheel_throughput": 1, "iron_or": [17, 19, 20, 21, 29], "iron_ore_throughput": [1, 13, 16, 19, 20, 21], "iron_pl": 17, "iron_plate_task": 12, "iron_plate_throughput": [1, 12, 17], "iron_plate_throughput_16": 12, "iron_po": [19, 20, 21, 30], "ironchest": [0, 7, 15, 19, 20, 21, 24, 27], "irongearwheel": 7, "ironor": [0, 7, 24, 27, 30], "ironpl": 7, "ironplatethroughputtask": 17, "ironstick": 7, "is_clos": 6, "is_complet": 17, "is_input": 6, "is_multiag": [1, 5, 9], "is_paus": 9, "is_sourc": 6, "is_terminu": 6, "is_valid": 5, "is_work": 0, "isinst": 15, "issu": [1, 16, 19, 20, 21, 22, 23], "item": [1, 5, 6, 13, 14, 15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "item_data": 28, "item_ingredient_shortag": 6, "items_to_insert": 28, "its": 3, "ivborw0kggoaaaansuheugaa": 13, "jack": 6, "join": 15, "joint": 20, "json": [1, 5, 12, 17, 19, 20, 21, 24], "json_str": 5, "kei": [6, 12, 25], "keyword": 6, "kill": 6, "kwarg": [1, 3, 5, 6, 9], "kwd": 7, "lab": [1, 2, 6, 7, 13, 20, 22], "lab_input": 6, "lab_modul": 6, "lab_plai": 1, "label": 6, "laboratori": 6, "lamp": 7, "landfil": 7, "larg": [16, 17, 21, 23], "largest": [1, 22], "last": [1, 3, 9, 13, 24], "latenc": 20, "later": [0, 24], "latest": 16, "latest_vers": 16, "launch": [6, 14], "launch_count": 6, "launch_progress": 6, "launch_rocket": 14, "launching_rocket": 6, "layer": [2, 6], "learn": [0, 1, 5, 12, 15, 19, 20, 23, 24, 27], "leav": [1, 9], "left": [6, 9], "left_bottom": 6, "left_top": 6, "len": [19, 20, 21], "length": 0, "level": [5, 19], "leverag": [0, 27, 29], "librari": [0, 24], "licens": 23, "lift": 14, "light": 7, "lightoil": 7, "lightoilcrack": 7, "lightweight": 16, "like": [6, 14], "limit": [0, 15, 17, 18, 20, 22], "line": [0, 1, 9, 10, 19, 20, 21], "liquefact": 7, "liquifact": 7, "list": [1, 5, 6, 10, 13, 14, 15, 16, 18, 19, 20, 21, 29], "list_available_environ": 1, "list_backup": 16, "liter": 6, "live": 14, "llm": [5, 23, 25], "load": [1, 9, 10, 12, 15, 16, 18], "load_game_st": 16, "load_messag": 10, "load_step": 16, "load_trajectori": 16, "local": 18, "localhost": [1, 9, 16, 23], "locat": [14, 20, 30], "log": [10, 19], "log_level": 19, "logic": [14, 15, 17, 18, 24], "logist": [7, 20], "logistics2": 7, "logistics3": 7, "logistics_science_pack_throughput": 1, "logisticssciencepack": 7, "logit_bia": 5, "long": 7, "longer": 29, "longhandedinsert": 7, "look": [1, 9, 19, 21], "loop": 24, "loop_nod": 10, "loopcontext": [2, 10], "low": [7, 20], "low_density_structure_throughput": 1, "low_input_fluid": 6, "low_pow": 6, "low_temperatur": 6, "lowdensitystructur": 7, "lua": [14, 18], "lubric": 7, "m": 23, "machin": [6, 7, 13, 14, 20], "made": [6, 18], "magazin": 7, "magazine_s": 6, "mai": 24, "main": 1, "maintain": [0, 10, 21, 24, 25], "mainten": 25, "make": [0, 1, 5, 13, 15, 19, 20, 21, 22, 23, 30], "manag": [5, 15, 16, 19, 20, 21, 24, 25], "manual": [16, 23], "map": [6, 10, 13, 17, 19, 21, 22], "map_imag": [13, 21], "markdown": 14, "materi": [1, 7, 29], "max_connect": 16, "max_ent": 17, "max_length": 0, "max_mining_setup": [15, 19], "max_pow": 17, "max_static_unit_profit_cap": 5, "max_step": [15, 19, 20, 21], "max_token": 5, "maxim": 12, "maximum": 14, "mb": 21, "mcp": 23, "md": [14, 18], "meaning": 18, "meant": 6, "measur": 17, "medium": [7, 16, 20, 21], "mediumelectricpol": 7, "member": 10, "memori": [15, 20, 21, 22, 24], "memory_usag": 21, "messag": [0, 2, 5, 10, 13, 18, 20, 26, 28, 29, 30], "message_delivery_r": 20, "message_processing_tim": 20, "message_timeout": 20, "meta": [4, 5], "metadata": [4, 5, 12, 16], "method": [3, 6, 13, 14, 18, 21, 29], "metric": [5, 12, 13, 15, 16, 18, 25], "might": 21, "migrat": 25, "militari": [1, 7], "military_science_pack_throughput": 1, "militarysci": 7, "militarysciencepack": 7, "mine": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "minim": [16, 19], "mining_dril": [20, 21], "mining_item": 29, "mining_op": 0, "mining_radiu": 15, "mining_setup": [15, 19, 20], "miningdril": [0, 2, 6, 13, 15, 19, 20, 21, 24, 27, 30], "miningoper": 0, "minut": 19, "miss": [1, 21], "missing_required_fluid": 6, "missing_science_pack": 6, "mistak": 24, "mk2": 7, "mkdir": 18, "mock": 17, "mod": 22, "mode": [14, 18, 19, 21, 27], "model": [3, 6, 13, 21, 25], "model_config": [4, 5, 6, 13], "model_post_init": 6, "modif": 3, "modul": [1, 25], "modular": [7, 15], "modulararmor": 7, "moment": 24, "monitor": [0, 14, 15, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "monitoring_interv": 19, "more": [19, 21, 22, 26, 28], "most": [1, 3, 14, 27], "mount": 22, "move": [6, 13, 14], "move_to": 14, "movement": 0, "multi": [14, 15, 16, 17, 25], "multi_agent_perform": 20, "multiagent_config": 20, "multiagent_coordin": 20, "multiagentcoordin": 20, "multifluidhandl": [2, 6], "multipl": [6, 14, 16, 17, 20, 22, 23, 28], "must": [18, 30], "my": 18, "my_custom_ag": 15, "my_custom_task": 17, "my_tool": [14, 18], "myagent": 16, "mycustomag": 15, "mycustomtask": 17, "mytool": 18, "n": [1, 5, 9, 15], "name": [0, 3, 5, 6, 7, 10, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 28, 29], "namespac": [0, 2, 3, 5, 9, 24, 25], "namespace_class": [1, 9], "namespace_str": 10, "narrow": [14, 18], "natur": 6, "navig": 23, "ndarrai": 21, "nearest": [0, 14, 15, 19, 20, 21, 24, 27, 30], "nearest_build": [14, 30], "necessari": 22, "need": [6, 10, 14, 15, 16, 18, 19, 20, 22, 23], "neg": 18, "neighbour": [6, 24], "nest": 10, "network": [1, 6, 16, 22, 29], "new": [3, 5, 6, 13, 14, 15, 17, 18], "next": [0, 3, 14, 25, 27], "next_clockwis": 9, "next_counterclockwis": 9, "night": 7, "nightvis": 7, "no_ammo": 6, "no_fuel": [6, 19], "no_ingredi": 6, "no_input_fluid": 6, "no_minable_resourc": 6, "no_pow": [6, 15, 19], "no_recip": 6, "no_research_in_progress": 6, "node": 10, "non": 6, "none": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 18, 19, 20, 21, 24], "normal": [6, 10, 19, 23, 24], "north": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "not_connect": 6, "not_connected_to_rail": 6, "not_plugged_in_electric_network": 6, "np": 21, "nuclear": [6, 7], "nuclearfuelreprocess": 7, "nuclearpow": 7, "nuclearreactor": 7, "num_ag": [0, 1, 5, 9], "number": [0, 1, 9, 10, 12, 18, 20, 26, 28], "numpi": 21, "ob": [1, 19, 20, 21], "object": [0, 1, 3, 5, 7, 9, 10, 12, 13, 14, 17, 21, 22, 24, 30], "object_detect": 21, "object_detection_threshold": 21, "object_interaction_predict": 21, "observ": [1, 15, 16, 19, 20, 21, 24, 25], "obstacl": 14, "offici": 23, "offshor": [6, 7], "offshorepump": [2, 6, 7], "oil": [1, 6, 7], "oilprocess": 7, "oilrefineri": [2, 6, 7], "old": 16, "onc": 23, "onli": [1, 5, 6, 9, 23], "open": [1, 21, 22, 23, 25], "open_plai": 1, "openai": [1, 23], "openai_api_kei": 23, "oper": [0, 5, 6, 13, 14, 15, 16, 18, 19, 20, 21, 24, 27, 29], "operation_nam": 5, "opportun": 20, "opposit": 9, "optim": [12, 15, 17, 18, 19, 20, 21, 25], "optimization_en": 19, "optimization_request": 20, "option": [0, 1, 4, 5, 6, 12, 13, 14, 18, 25, 26, 28, 29, 30], "orchestr": 22, "ore": [7, 13, 15, 18, 19, 20, 24, 26, 28, 29, 30], "ores": 14, "organ": 24, "orient": [6, 14, 30], "origin": [6, 10], "other": [1, 6, 14, 15, 16, 18, 20, 23, 28, 29, 30], "out": [1, 9], "output": [0, 5, 6, 13, 16, 18, 21, 24, 25], "output_connection_point": 6, "output_flow_limit": 6, "output_fluid": 6, "output_posit": 6, "over": [15, 19, 29], "overal": 20, "overall_system_perform": 20, "overhead": 20, "overrid": 3, "overview": [14, 18, 25], "p": [16, 22], "pack": [1, 7], "packag": 23, "page": 25, "pair": 18, "panel": [6, 7], "parallel": 21, "param": [1, 3, 9], "param1": [15, 18], "param2": 18, "param3": 18, "paramet": [0, 6, 12, 14, 15, 16, 17, 18, 21, 22, 27], "parent_id": 5, "parent_nod": 10, "parent_visit": 5, "pars": [5, 6, 17, 18], "parse_agent_messag": 5, "parse_arg": 6, "parse_raw": 5, "part": 7, "partial": [26, 28], "pass": [6, 17, 20], "patch": [0, 19, 21, 24], "path": 16, "pathfind": 14, "pattern": [14, 21, 24, 25], "paus": [1, 9, 14], "pause_at_spe": 9, "payload": 6, "peac": [1, 9], "per": [1, 17, 19, 21], "percentag": 14, "perform": [12, 13, 14, 15, 17, 18, 24, 25, 27], "permiss": [22, 23, 29], "persist": [0, 1, 15, 22], "petroleum": 7, "petroleum_gas_throughput": 1, "petroleumga": 7, "phase": 19, "pickl": 5, "pickup_ent": [14, 30], "pickup_posit": 6, "pierc": 7, "piercing_round_throughput": 1, "piercingroundsmagazin": 7, "pil": 21, "pip": 23, "pipe": [2, 6, 7, 13, 14], "pipegroup": [2, 6, 7], "pixel": 21, "place": [0, 6, 14, 19, 20, 21, 24, 27, 28, 29, 30], "place_ent": [0, 13, 14, 15, 19, 20, 21, 24, 27, 29], "place_entity_next_to": [0, 14, 15, 19, 20, 21, 24, 27, 30], "place_mining_setup": 0, "placeabl": 14, "placement": [0, 14, 17, 19, 30], "plai": [1, 22], "plan": [14, 18, 19, 20, 21], "plant": [6, 7, 14], "plastic": [6, 7], "plastic_bar_throughput": 1, "plasticbar": 7, "plate": [7, 12, 13, 17, 29], "player": [6, 13, 14, 26, 27, 28, 29], "player_posit": 6, "png": [13, 21], "point": 16, "pole": [6, 7], "polici": [3, 15], "pool": 16, "poor": 21, "popular": 24, "populate_by_nam": 6, "port": [22, 23], "posit": [0, 2, 6, 14, 15, 18, 19, 20, 21, 24, 25, 27, 30], "possibl": [1, 18, 22], "post": 5, "postgr": 16, "postgres_db": 16, "postgres_password": 16, "postgres_us": 16, "postgresql": [23, 25], "power": [6, 7, 14, 15, 17, 19], "power_usag": 19, "powerarmor": 7, "powerarmor2": 7, "powerpol": 13, "practic": [14, 25], "pre": 14, "pre_holdout_wait_period": 12, "predict": 21, "preexist": 10, "preparing_rocket_for_launch": 6, "prerequisit": [5, 13, 14, 25], "presence_penalti": 5, "preserv": [1, 9], "prevent": 0, "previou": [1, 9], "previous": 24, "price_list": 5, "print": [0, 1, 14, 15, 16, 18, 19, 20, 21, 24, 26, 27, 28, 29, 30], "prioriti": 20, "priority_bas": 20, "privat": 6, "proactiv": 24, "probabl": 6, "problem": 20, "procedur": 22, "process": [6, 7, 15, 20, 25], "processing_perform": 21, "processing_unit_throughput": 1, "processingunit": 7, "produc": [6, 17, 19], "product": [2, 5, 6, 7, 12, 13, 14, 16, 20], "production_science_pack_throughput": 1, "productionflow": [2, 4, 5], "productionsciencepack": 7, "productivitymodul": 7, "productivitymodule2": 7, "productivitymodule3": 7, "profit": 5, "profitconfig": [2, 5], "program": [2, 5, 14, 23, 24], "program_id": 4, "progress": [5, 13, 14, 19], "prompt": [1, 9], "prompt_token_usag": 5, "proper": [5, 27, 29], "properli": [15, 22, 23], "properti": [1, 5, 6, 7, 9, 13, 23], "protocol": [15, 20, 23], "prototyp": [0, 2, 6, 7, 13, 15, 19, 20, 21, 24, 27, 30], "prototype_nam": 7, "prototypemetaclass": [2, 7], "provid": [0, 1, 12, 13, 15, 16, 18, 22, 23, 24, 29], "provis": 12, "psql": 23, "pump": [2, 6, 7], "pumpjack": [2, 6, 7], "purchas": 23, "py": [1, 14, 17, 18, 23], "pydant": [4, 5, 6, 13], "pydantic_cor": 6, "pytest": [15, 17, 18], "python": [0, 1, 10, 12, 14, 15, 17, 18, 23, 24], "python3": 23, "qualiti": 21, "quantiti": [6, 13, 14], "queri": [13, 16, 24], "queue": 14, "quick": [16, 23], "quickstart": 25, "quota": 12, "radar": 7, "radiu": [6, 14, 18], "rag": 3, "rail": [2, 6, 7], "railwai": [6, 7], "railwaytransport": 7, "rais": [1, 6, 9, 24], "rang": 21, "rate": [12, 17, 19, 20], "raw": 1, "raw_reward": 5, "raw_text": 13, "rcon_client": 9, "reactiv": 24, "reactor": [2, 6, 7], "read": 24, "readabl": 0, "reason": [4, 21], "recent": 3, "recip": [2, 6, 7, 13, 14], "recipenam": [2, 7], "recognit": 21, "recommend": [14, 16, 23], "reconstruct": 5, "record": 19, "recoveri": [19, 20, 21, 25], "recovery_tim": 19, "recurs": 14, "reduc": [20, 21], "refer": [0, 2, 14, 20], "reference_posit": [0, 15, 19, 20, 21, 24, 27], "refineri": [6, 7], "regardless": [1, 9], "region": 21, "regist": [1, 15, 17, 18], "register_ag": 15, "register_all_environ": 1, "registr": 25, "registri": [15, 17, 25], "regular": 16, "reinforc": 1, "rel": [14, 30], "relationship": 21, "relev": 24, "reliabl": 19, "reload_tim": 6, "remain": 14, "remov": [14, 16, 26, 27, 28, 29, 30], "render": [6, 23], "render_message_tool": 9, "repl": 24, "replac": [15, 20], "replai": 15, "report": [0, 20], "repres": [5, 6, 14, 24], "represent": [5, 24], "reprocess": 7, "request": [0, 20], "requir": [1, 6, 13, 14, 16, 17, 18, 20, 22, 24, 26, 28, 30], "research": [5, 6, 7, 17, 20, 22, 25], "research_plan": 20, "research_prior": 20, "research_progress": 5, "research_queu": [5, 20], "research_specialist": 20, "research_start": 20, "research_unit_count": 5, "research_unit_energi": 5, "researchspe": 7, "researchspecialist": 20, "researchst": [2, 5], "reset": [0, 1, 9, 10, 15, 17, 19, 20, 21], "reset_paus": [1, 9], "reset_posit": [1, 9], "reset_spe": [1, 9], "reset_to_default": 9, "reshap": 21, "resnet50": 21, "resolut": [15, 20, 21], "resolv": 20, "resourc": [0, 2, 6, 7, 13, 17, 19, 20, 21, 22, 24, 25, 29, 30], "resource_collect": 20, "resource_identif": 21, "resource_patch": 21, "resource_po": [15, 20], "resource_request": 20, "resource_scann": 18, "resource_specialist": 20, "resource_typ": [0, 18, 20], "resource_util": 19, "resource_wast": 19, "resourcecollectorag": 15, "resourcenam": [2, 7], "resourcepatch": [2, 6, 7], "resourcescann": 18, "resourcespecialist": 20, "respect": 14, "respons": [2, 3, 4, 5, 12, 16, 20], "restart": 22, "restor": [1, 5, 9, 16], "restore_backup": 16, "result": [0, 1, 5, 9, 10, 14, 18, 20, 26, 27, 28, 29, 30], "retri": 29, "retriev": [1, 13, 14, 24], "return": [0, 1, 3, 5, 6, 9, 10, 12, 14, 15, 17, 18, 19, 20, 21, 24, 27], "reus": [1, 16, 24], "reusabl": [1, 15], "reward": [1, 12, 16, 17, 19, 20, 21], "rgb": 21, "rich": [1, 13], "right": [6, 9, 23], "right_bottom": 6, "right_top": 6, "robot": 7, "robust": [0, 17, 20, 21], "rock": [6, 14], "rocket": [2, 6, 7, 14], "rocket_inventori": 6, "rocket_part": 6, "rocket_progress": 6, "rocketcontrol": 7, "rocketcontrolunit": 7, "rocketfuel": 7, "rocketpart": 7, "rocketsilo": [2, 6, 7], "rocketsilotechnologi": 7, "role": [5, 20], "rotat": [14, 23], "rotate_ent": [14, 30], "round": 7, "round_robin": 20, "row": 5, "rtd": [], "rtype": [1, 9], "rule": [14, 17], "run": [0, 1, 14, 16, 22, 23, 24, 25], "runtim": [0, 24], "runtime_error": 4, "safe": 23, "satellit": 7, "save": [16, 22, 24], "save_game_st": 16, "save_step": 16, "save_trajectori": 16, "scalabl": [20, 22], "scale": [16, 17, 23, 24], "scan": [15, 17, 18], "scanner": 25, "scenario": [15, 16, 17, 18, 19, 25, 27], "schedul": 16, "schema": [1, 9, 25], "scienc": [1, 7], "score": [4, 12, 13], "screenshot": 21, "script": 23, "sdk": 23, "search": [14, 25], "second": [1, 5, 6, 9, 14, 17, 20, 21, 24], "section": [2, 6, 27], "secur": [16, 18], "see": [14, 22, 24, 27], "segment": 21, "select": 23, "self": [0, 6, 14, 15, 17, 18, 19, 20, 21, 24], "send": 20, "send_messag": 20, "sens": 30, "sent": [6, 14], "sequenc": [10, 14], "serial": [5, 10, 14, 15], "serializ": 5, "serializablefunct": [2, 5, 10], "serialize_model": 6, "serialized_funct": 13, "server": [14, 16, 18, 22, 23, 29], "set": [1, 6, 9, 15, 16, 19, 21, 22, 23, 30], "set_convers": 3, "set_entity_recip": 14, "set_research": [14, 20], "set_spe": [1, 9], "set_speed_and_unpaus": [1, 9], "set_system_messag": 5, "setup": [0, 6, 12, 16, 19, 20, 21, 25], "setup_api_kei": 23, "setup_inst": 12, "sever": [1, 9, 16, 22], "shape": 21, "share": [15, 20], "shared_st": 20, "shared_state_s": 20, "shield": 7, "shortli": 23, "should": [3, 4, 5, 6, 13, 14], "show": 14, "show_number_of_steps_left_in_prompt": 12, "side": [14, 18, 25], "signatur": [0, 1, 5, 9, 13, 14], "silo": [6, 7, 14], "simpl": [15, 18, 19, 21, 27], "simplifi": 21, "simul": 24, "sinc": [1, 6, 9], "singl": [3, 5, 10, 16], "site": 23, "size": [6, 13, 14, 16, 17, 20, 21], "sk": 23, "skills_db_host": 16, "skills_db_nam": 16, "skills_db_password": 16, "skills_db_port": 16, "skills_db_us": 16, "sleep": [0, 14, 24], "slot": 7, "slow": [20, 21], "small": [7, 16], "smallelectricpol": 7, "smalllamp": 7, "smelt": 6, "snapshot": 16, "solar": [6, 7], "solarenergi": 7, "solarpanel": [2, 6, 7], "solid": [6, 7], "solidfuel": 7, "solidfuelfromheavyoil": 7, "solidfuelfromlightoil": 7, "solidfuelfrompetroleumga": 7, "solut": [26, 28, 29, 30], "someth": 18, "sophist": 21, "sourc": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 23, 25], "south": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "space": [1, 7, 14, 22, 23, 25], "spacesci": 7, "spacesciencepack": 7, "spatial": [17, 21], "spatial_analysis_depth": 21, "spatial_featur": 21, "spatial_reason": 21, "spatial_understand": 21, "special": [10, 14, 15, 25], "specialist": 20, "specif": [1, 6, 12, 14, 15, 16, 17, 18, 20, 21, 23, 27, 29], "specifi": 30, "speed": [1, 7, 9, 13, 14], "sphinx": 23, "split": 20, "splitter": [2, 6, 7], "sql": 16, "sqlite": 25, "sqlite_db_fil": 16, "stack": [0, 7], "stackfilterinsert": 7, "stackinsert": 7, "stackinsertercapacity1": 7, "stackinsertercapacity2": 7, "stale": 14, "standard": [0, 1, 12, 24], "start": [1, 9, 17, 19, 20, 21, 23, 24], "start_posit": 6, "start_tim": [5, 16, 17], "starting_inventori": 12, "startswith": 20, "startup": 16, "stat": [16, 22], "state": [0, 1, 3, 5, 9, 12, 14, 15, 16, 17, 18, 19, 20, 24, 25], "state_id": 16, "statement": 0, "static": [1, 5, 6, 9, 12], "static_item": 5, "staticent": [2, 6], "statist": [12, 13, 16, 18], "statu": [0, 6, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "status_int": 6, "status_str": 6, "status_upd": 20, "stderr": [13, 24], "stdout": [13, 14, 24], "steam": [6, 7, 23], "steam_output_point": 6, "steamengin": 7, "steel": 7, "steel_plate_throughput": 1, "steelchest": 7, "steelfurnac": 7, "steelplat": 7, "steelprocess": 7, "step": [1, 3, 4, 12, 14, 16, 19, 20, 21, 23, 25], "step_count": [19, 20, 21], "step_numb": 16, "step_statist": 12, "stick": 7, "stone": [7, 19, 21, 29], "stone_wall_throughput": 1, "stonebrick": 7, "stonefurnac": 7, "stonewal": 7, "stop": 22, "stop_sequ": 5, "storag": [0, 1, 6, 7, 13, 19, 21, 24, 26, 28, 29], "storagetank": [2, 6, 7], "store": [0, 1, 5, 6, 13, 16, 21, 24], "str": [0, 1, 3, 4, 5, 6, 9, 12, 13, 15, 18, 19, 20, 21, 26, 28, 29, 30], "strategi": [3, 15, 20], "stream": 24, "string": [5, 10, 14, 18], "strong": 21, "structur": [1, 7, 14, 22, 25, 27], "sub": 17, "succe": 21, "succeed": [18, 26, 28, 29, 30], "success": [4, 12, 15, 16, 17, 18, 20, 24, 26, 27, 28, 29, 30], "success_threshold": [15, 19, 20, 21], "sudo": [22, 23], "sufuric_acid_throughput": 1, "suggest": 0, "suit": 14, "sulfur": [6, 7], "sulfur_throughput": 1, "sulfuricacid": 7, "sulfurprocess": 7, "sum": [19, 20, 21, 29], "summaris": 3, "sunlight": 6, "super": [15, 17, 19, 20, 21], "suppli": [6, 19], "support": [0, 10, 12, 14, 16, 22, 23, 26, 28, 29, 30], "sure": [22, 23], "surfac": 18, "symbol": 24, "syntax": 0, "synthes": 14, "synthesi": [0, 1, 15, 24], "system": [1, 5, 9, 12, 15, 16, 18, 19, 22, 23, 24, 25], "system_prompt": 3, "t": [26, 28, 29], "t1": 16, "tabl": [14, 16, 18], "take": [0, 1, 6], "tank": [6, 7], "target": [13, 15, 17], "target_ag": 20, "target_resourc": [15, 19, 20], "task": [1, 2, 4, 15, 16, 19, 20, 22, 25, 27], "task_assign": 20, "task_complet": 20, "task_completion_r": 20, "task_definit": [1, 17], "task_distribut": 20, "task_info": 13, "task_kei": [1, 12], "task_path": 12, "task_queu": 20, "task_respons": 12, "task_verif": 13, "taskabc": [2, 12], "taskfactori": [2, 12], "taskrespons": [2, 4, 12], "taskverif": 13, "tcp_port": [1, 9], "techniqu": 21, "technologi": [2, 5, 7, 13, 14, 17, 20, 22], "technologyst": [2, 5], "temperatur": 5, "termin": [1, 19, 20, 21], "terrain": 30, "test": [14, 16, 19, 20, 25, 27], "test_agent_act": 15, "test_agent_cr": 15, "test_agent_reset": 15, "test_task_complet": 17, "test_task_cr": 17, "test_task_evalu": 17, "test_tool_cr": 18, "test_tool_error_handl": 18, "test_tool_execut": 18, "test_tool_with_posit": 18, "text": 0, "than": 26, "thei": 24, "them": [14, 26, 27], "theme": [], "thi": [0, 1, 2, 3, 5, 6, 9, 12, 14, 19, 20, 21, 22, 23, 24, 27], "third": 6, "thoroughli": [19, 20, 27], "threshold": 21, "through": [0, 1, 15, 22, 24], "throughout": [5, 24], "throughput": [1, 12, 13, 17, 19], "throughput_ent": 12, "throughput_task": 1, "throughputtask": [2, 12], "thu": 6, "tick": [1, 4, 5, 9, 13, 17], "tier": 6, "tile": [6, 14, 18], "tile_dimens": [6, 13, 24], "tile_height": [6, 24], "tile_width": [6, 24], "tiledimens": [2, 6, 13, 24], "time": [5, 13, 14, 15, 16, 17, 19, 20, 21, 22, 24, 29], "time_elaps": 6, "time_limit": 17, "timeout": [1, 4, 9, 10], "timestamp": [5, 16], "timing_metr": 5, "timingmetr": [2, 5], "to_bounding_box": 6, "to_dict": [0, 5], "to_factorio_direct": 9, "to_inst": 5, "to_raw": 5, "togeth": [16, 20, 27], "token_usag": 5, "toler": 6, "tolist": 21, "tool": [0, 1, 24], "tool_nam": 27, "top": [6, 21], "total": [5, 14, 16, 19, 21, 29], "total_dur": 5, "total_item": [19, 21, 29], "total_materi": 29, "total_reward": [15, 16], "toward": [6, 13], "trace": 0, "track": [5, 6, 13, 14, 15, 16, 19, 21, 26, 27, 28, 29], "train": 6, "trajectori": [3, 16, 24], "trajectory_001": 16, "trajectory_id": 16, "trajectory_length": 12, "transfer": [13, 14, 26, 28], "transport": [6, 7, 13], "transportbelt": [2, 6, 7, 13], "treat": 14, "tree": [6, 13, 14], "troubleshoot": 25, "true": [1, 3, 5, 6, 9, 10, 12, 16, 18, 19, 20, 21], "truncat": [1, 19, 20, 21], "try": [0, 10, 21], "tune": 21, "tupl": [6, 21], "turn": 3, "turret": 7, "turret_ammo": 6, "two": 5, "type": [0, 1, 3, 5, 6, 9, 10, 12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30], "typehint": [], "unbound": [1, 12, 22], "unboundedthroughputtask": [2, 12], "uncheck": 23, "underground": [6, 7], "undergroundbelt": [2, 6, 7], "undergroundpip": 7, "understand": [14, 21], "understood": 21, "unifi": 16, "union": 6, "uniqu": 21, "unique_color": 21, "unit": [1, 7], "unlock": 13, "unlock_all_research": 12, "unpaus": [1, 9], "unpickl": 5, "unwrap": 10, "unwrap_after_deseri": [2, 10], "up": [1, 6, 9, 13, 15, 19, 21, 22, 23, 24], "updat": [3, 14, 15, 18, 20, 26, 28], "update_st": 3, "upper": [15, 20], "uptim": 19, "uranium": 7, "uranium235": 7, "uranium238": 7, "uraniumfuelcel": 7, "uraniumor": 7, "uraniumprocess": 7, "us": [0, 1, 3, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 23, 24, 26, 27, 28, 29, 30], "usag": [0, 12, 14, 15, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30], "use_populated_inventori": 12, "user": [16, 22, 23], "util": [5, 7, 19, 21, 24, 29], "utility_science_pack_throughput": 1, "utilitysciencepack": 7, "uv": 23, "v": 0, "valid": [5, 6, 13, 14, 16, 18, 19, 23, 25, 27, 30], "validate_by_alia": 6, "validate_by_nam": 6, "validationerror": 6, "valu": [0, 4, 5, 6, 7, 9, 10, 12, 18, 19, 20, 21, 27, 29, 30], "value1": [15, 18], "valueerror": 0, "variabl": [0, 1, 3, 10, 16, 22, 24], "variou": [5, 12, 14, 15, 17, 27, 29, 30], "vars_dict": 5, "verif": 25, "verifi": [0, 12, 16, 18, 19, 22, 23, 24, 26, 28, 29], "version": [5, 16, 18, 23], "version_descript": 5, "vision": [7, 21], "vision_en": 21, "visit": 5, "visual": [15, 25], "visual_accuraci": 21, "visual_ag": 21, "visual_agent_config": 21, "visual_analysi": 21, "visual_memori": 21, "visual_memory_s": 21, "visual_planning_effect": 21, "visual_reason": 21, "visualag": 21, "volum": [22, 23], "vote": 20, "wa": 29, "wait": 14, "waiting_for_source_item": 6, "waiting_for_space_in_destin": 6, "waiting_to_launch_rocket": 6, "wall": [6, 7], "wallgroup": [2, 6], "warn": [1, 6, 13], "wast": 19, "water": [6, 7, 14], "we": [1, 9, 15], "websit": 23, "west": [6, 9, 30], "what": [6, 14], "wheel": 7, "when": [1, 3, 6, 9, 16, 18, 24], "where": [6, 26, 28, 30], "whether": [13, 18, 26, 28, 29, 30], "which": [1, 5, 14, 24], "while": [10, 14, 19, 20, 21], "whose": 29, "width": [6, 7, 13], "within": 16, "without": [1, 9, 22, 23], "wood": 7, "wooden": 7, "woodenchest": 7, "work": [0, 6, 14, 15, 19, 20, 21, 24], "workflow": 14, "working_ent": [19, 20, 21], "world": [13, 14, 24, 30], "wrap": 10, "wrap_for_seri": [2, 10], "wrapper": 5, "write": 18, "written": 24, "x": [6, 13, 18, 19, 21, 23, 24, 30], "y": [6, 13, 18, 19, 21, 24, 30], "you": [14, 17, 18, 22, 23, 24], "your": [14, 15, 17, 18, 22, 23], "zero": 18}, "titles": ["Action Space", "Environment API", "API Modules", "fle.agents.agent_abc module", "fle.agents.models module", "fle.commons.models module", "fle.env.entities module", "fle.env.game_types module", "fle.env.gym_env module", "fle.env.instance module", "fle.env.namespace module", "fle.eval.algorithms module", "fle.eval.tasks module", "Observation Space", "Tools API", "Implementing Custom Agents", "Database Configuration", "Creating Custom Tasks", "Creating Custom Tools", "Basic Agent Example", "Multi-Agent Example", "Visual Agent Example", "Cluster Setup", "Installation", "Quickstart", "Welcome to Factorio Learning Environment\u2019s documentation!", "extract_item", "Tools Documentation", "insert_item", "inspect_inventory", "place_entity"], "titleterms": {"": 25, "action": 0, "advanc": [15, 17, 18, 22], "agent": [0, 2, 3, 4, 15, 19, 20, 21], "agent_abc": 3, "algorithm": 11, "analysi": 21, "api": [1, 2, 14, 23, 25], "architectur": [14, 15, 18, 20], "avail": 1, "backup": 16, "base": 15, "basic": 19, "behavior": 19, "best": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "build": 23, "categori": [14, 27], "class": 15, "client": [16, 23], "cluster": 22, "code": 0, "collector": 15, "common": [2, 5], "compon": 0, "concept": [1, 24], "configur": [15, 16, 17, 19, 20, 21, 22, 23], "connect": [14, 27], "control": [14, 27], "core": [1, 2, 14, 27], "craft": [14, 27], "creat": [14, 17, 18], "custom": [14, 15, 17, 18, 25], "databas": 16, "debug": [14, 27], "definit": [0, 17], "develop": [18, 27], "direct": 13, "document": [14, 23, 25, 27], "entiti": [6, 13, 14, 27], "env": [6, 7, 8, 9, 10], "environ": [1, 2, 24, 25], "error": [0, 1], "eval": [11, 12], "evalu": 2, "exampl": [0, 1, 13, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "execut": 0, "extract_item": 26, "factorio": 25, "factorioinst": 1, "failur": [26, 28, 29, 30], "featur": [15, 17, 18, 21], "fle": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "game": 13, "game_typ": 7, "get": 25, "gym": 1, "gym_env": 8, "handl": [0, 1], "implement": [15, 17, 19, 20, 21], "indic": 25, "inform": 13, "insert_item": 28, "inspect_inventori": 29, "instal": 23, "instanc": 9, "interact": 24, "inventori": [13, 14, 27], "kei": [1, 15, 16, 23, 24], "learn": 25, "maintain": 23, "mainten": 16, "manag": [1, 13, 14, 22, 27], "method": [1, 15, 16], "metric": [19, 20, 21], "migrat": 16, "mode": [26, 28, 29, 30], "model": [2, 4, 5], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "monitor": 16, "movement": [14, 27], "multi": [0, 20], "namespac": [1, 10], "next": 24, "observ": 13, "optim": 16, "option": 23, "output": [14, 19, 27], "overview": [19, 20, 21, 24, 26, 28, 29, 30], "paramet": [26, 28, 29, 30], "pattern": 27, "perform": [16, 19, 20, 21], "place_ent": 30, "posit": 13, "postgresql": 16, "practic": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "prerequisit": 23, "process": [18, 21], "queri": [14, 27], "quickstart": 24, "recoveri": 16, "refer": 25, "registr": [15, 17, 18], "registri": 1, "relat": [26, 28, 29, 30], "research": [13, 14, 27], "resourc": [14, 15, 18, 27], "return": [26, 28, 29, 30], "run": [19, 20, 21], "scanner": 18, "scenario": 22, "schema": 16, "setup": [22, 23], "side": 23, "space": [0, 13], "special": 20, "sqlite": 16, "start": [22, 25], "state": 13, "step": 24, "structur": [0, 13, 17, 18], "system": [13, 20], "tabl": 25, "task": [12, 13, 17], "test": [15, 17, 18], "tool": [14, 18, 25, 26, 27, 28, 29, 30], "troubleshoot": [16, 19, 20, 21, 22, 23], "type": [13, 15, 16, 17], "usag": [1, 16, 27], "valid": 0, "verif": 13, "visual": 21, "welcom": 25}}) \ No newline at end of file +Search.setIndex({"alltitles": {"API Key Configuration": [[23, "api-key-configuration"]], "API Modules": [[2, null]], "API Reference": [[25, null]], "Action Components": [[0, "action-components"]], "Action Space": [[0, null]], "Action Space Definition": [[0, "action-space-definition"]], "Action Structure": [[0, "action-structure"]], "Action Validation": [[0, "action-validation"]], "Advanced Agent Features": [[15, "advanced-agent-features"]], "Advanced Configuration": [[22, "advanced-configuration"]], "Advanced Features": [[17, "advanced-features"], [18, "advanced-features"]], "Agent Architecture": [[15, "agent-architecture"], [20, "agent-architecture"]], "Agent Behavior": [[19, "agent-behavior"]], "Agent Configuration": [[15, "agent-configuration"], [19, "agent-configuration"], [21, "agent-configuration"]], "Agent Implementation": [[15, "agent-implementation"], [19, "agent-implementation"], [21, "agent-implementation"]], "Agent Overview": [[19, "agent-overview"], [21, "agent-overview"]], "Agent Registration": [[15, "agent-registration"]], "Agent Testing": [[15, "agent-testing"]], "Agent Types": [[15, "agent-types"]], "Agents": [[2, "agents"]], "Available Environments": [[1, "available-environments"]], "Backup and Recovery": [[16, "backup-and-recovery"]], "Base Agent Class": [[15, "base-agent-class"]], "Basic Agent Example": [[19, null]], "Best Practices": [[0, "best-practices"], [15, "best-practices"], [16, "best-practices"], [17, "best-practices"], [18, "best-practices"], [19, "best-practices"], [20, "best-practices"], [21, "best-practices"], [26, "best-practices"], [27, "best-practices"], [28, "best-practices"], [29, "best-practices"], [30, "best-practices"]], "Building Documentation (Maintainers)": [[23, "building-documentation-maintainers"]], "Client-side Setup (Optional)": [[23, "client-side-setup-optional"]], "Cluster Management": [[22, "cluster-management"]], "Cluster Setup": [[22, null]], "Code Execution": [[0, "code-execution"]], "Common Models": [[2, "common-models"]], "Configuration": [[22, "configuration"]], "Connection Management": [[14, "connection-management"], [27, "connection-management"]], "Core Concepts": [[1, "core-concepts"]], "Core Environment": [[2, "core-environment"]], "Core Tools": [[14, "core-tools"], [27, "core-tools"]], "Crafting and Research": [[14, "crafting-and-research"], [27, "crafting-and-research"]], "Creating Custom Tasks": [[17, null]], "Creating Custom Tools": [[14, "creating-custom-tools"], [18, null]], "Customization": [[25, null]], "Database Client": [[16, "database-client"]], "Database Configuration": [[16, null]], "Database Migration": [[16, "database-migration"]], "Database Schema": [[16, "database-schema"]], "Database Types": [[16, "database-types"]], "Debugging and Output": [[14, "debugging-and-output"], [27, "debugging-and-output"]], "Entity Information": [[13, "entity-information"]], "Entity Management": [[14, "entity-management"], [27, "entity-management"]], "Entity Queries": [[14, "entity-queries"], [27, "entity-queries"]], "Entity Types": [[13, "entity-types"]], "Environment API": [[1, null]], "Environment Overview": [[24, "environment-overview"]], "Environment Registry": [[1, "environment-registry"]], "Error Handling": [[0, "error-handling"], [1, "error-handling"]], "Evaluation": [[2, "evaluation"]], "Example Actions": [[0, "example-actions"]], "Example Agent: Resource Collector": [[15, "example-agent-resource-collector"]], "Example Backup": [[16, "example-backup"]], "Example Configuration": [[15, "example-configuration"]], "Example Error Handling": [[0, "example-error-handling"]], "Example Interaction": [[24, "example-interaction"]], "Example Metrics": [[19, "example-metrics"], [20, "example-metrics"], [21, "example-metrics"]], "Example Migration": [[16, "example-migration"]], "Example Monitoring": [[16, "example-monitoring"]], "Example Observation": [[13, "example-observation"]], "Example Optimization": [[16, "example-optimization"]], "Example Output": [[19, "example-output"]], "Example Registration": [[15, "example-registration"]], "Example Task": [[17, "example-task"]], "Example Tool: Resource Scanner": [[18, "example-tool-resource-scanner"]], "Example Usage": [[1, "example-usage"], [16, "example-usage"]], "Example Visual Analysis": [[21, "example-visual-analysis"]], "Examples": [[25, null], [26, "examples"], [28, "examples"], [29, "examples"], [30, "examples"]], "FactorioInstance": [[1, "factorioinstance"]], "Failure Modes": [[26, "failure-modes"], [28, "failure-modes"], [29, "failure-modes"], [30, "failure-modes"]], "Game State Information": [[13, "game-state-information"]], "Getting Started": [[25, null]], "Gym Environment": [[1, "gym-environment"]], "Implementing Custom Agents": [[15, null]], "Indices and tables": [[25, "indices-and-tables"]], "Installation": [[23, null], [23, "id1"]], "Inventory Management": [[13, "inventory-management"], [14, "inventory-management"], [27, "inventory-management"]], "Key Concepts": [[24, "key-concepts"]], "Key Methods": [[1, "key-methods"], [15, "key-methods"], [16, "key-methods"]], "Monitoring and Maintenance": [[16, "monitoring-and-maintenance"]], "Movement and Control": [[14, "movement-and-control"], [27, "movement-and-control"]], "Multi-Agent Actions": [[0, "multi-agent-actions"]], "Multi-Agent Configuration": [[20, "multi-agent-configuration"]], "Multi-Agent Example": [[20, null]], "Multi-Agent Implementation": [[20, "multi-agent-implementation"]], "Multi-Agent Overview": [[20, "multi-agent-overview"]], "Namespace Management": [[1, "namespace-management"]], "Next Steps": [[24, "next-steps"]], "Observation Space": [[13, null]], "Observation Structure": [[13, "observation-structure"]], "Overview": [[26, "overview"], [28, "overview"], [29, "overview"], [30, "overview"]], "Parameters": [[26, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"]], "Performance Metrics": [[19, "performance-metrics"], [20, "performance-metrics"], [21, "performance-metrics"]], "Performance Optimization": [[16, "performance-optimization"]], "Position and Direction": [[13, "position-and-direction"]], "PostgreSQL Configuration": [[16, "postgresql-configuration"]], "Prerequisites": [[23, "prerequisites"]], "Quickstart": [[24, null]], "Related Tools": [[26, "related-tools"], [28, "related-tools"], [29, "related-tools"], [30, "related-tools"]], "Research System": [[13, "research-system"]], "Resource Management": [[14, "resource-management"], [27, "resource-management"]], "Returns": [[26, "returns"], [28, "returns"], [29, "returns"], [30, "returns"]], "Running Multi-Agent Systems": [[20, "running-multi-agent-systems"]], "Running the Agent": [[19, "running-the-agent"]], "Running the Visual Agent": [[21, "running-the-visual-agent"]], "SQLite Configuration": [[16, "sqlite-configuration"]], "Scenarios": [[22, "scenarios"]], "Specialized Agents": [[20, "specialized-agents"]], "Starting a Cluster": [[22, "starting-a-cluster"]], "Task Configuration": [[17, "task-configuration"]], "Task Definition": [[17, "task-definition"]], "Task Implementation": [[17, "task-implementation"]], "Task Registration": [[17, "task-registration"]], "Task Structure": [[17, "task-structure"]], "Task Types": [[17, "task-types"]], "Task Verification": [[13, "task-verification"]], "Testing Tasks": [[17, "testing-tasks"]], "Testing Tools": [[18, "testing-tools"]], "Tool Architecture": [[14, "tool-architecture"], [18, "tool-architecture"]], "Tool Categories": [[14, "tool-categories"], [27, "tool-categories"]], "Tool Development": [[27, "tool-development"]], "Tool Development Process": [[18, "tool-development-process"]], "Tool Documentation": [[14, "tool-documentation"]], "Tool Registration": [[18, "tool-registration"]], "Tool Structure": [[18, "tool-structure"]], "Tool Usage Patterns": [[27, "tool-usage-patterns"]], "Tools": [[25, null]], "Tools API": [[14, null]], "Tools Documentation": [[27, null]], "Troubleshooting": [[16, "troubleshooting"], [19, "troubleshooting"], [20, "troubleshooting"], [21, "troubleshooting"], [22, "troubleshooting"], [23, "troubleshooting"]], "Visual Agent Example": [[21, null]], "Visual Processing Features": [[21, "visual-processing-features"]], "Welcome to Factorio Learning Environment\u2019s documentation!": [[25, null]], "extract_item": [[26, null]], "fle.agents.agent_abc module": [[3, null]], "fle.agents.models module": [[4, null]], "fle.commons.models module": [[5, null]], "fle.env.entities module": [[6, null]], "fle.env.game_types module": [[7, null]], "fle.env.gym_env module": [[8, null]], "fle.env.instance module": [[9, null]], "fle.env.namespace module": [[10, null]], "fle.eval.algorithms module": [[11, null]], "fle.eval.tasks module": [[12, null]], "insert_item": [[28, null]], "inspect_inventory": [[29, null]], "place_entity": [[30, null]]}, "docnames": ["api/action", "api/environment", "api/modules", "api/modules/fle.agents.agent_abc", "api/modules/fle.agents.models", "api/modules/fle.commons.models", "api/modules/fle.env.entities", "api/modules/fle.env.game_types", "api/modules/fle.env.gym_env", "api/modules/fle.env.instance", "api/modules/fle.env.namespace", "api/modules/fle.eval.algorithms", "api/modules/fle.eval.tasks", "api/observation", "api/tools", "customization/agents", "customization/database", "customization/tasks", "customization/tools", "examples/basic_agent", "examples/multiagent", "examples/visual_agent", "getting_started/cluster", "getting_started/installation", "getting_started/quickstart", "index", "tools/extract_item", "tools/index", "tools/insert_item", "tools/inspect_inventory", "tools/place_entity"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["api/action.rst", "api/environment.rst", "api/modules.rst", "api/modules/fle.agents.agent_abc.rst", "api/modules/fle.agents.models.rst", "api/modules/fle.commons.models.rst", "api/modules/fle.env.entities.rst", "api/modules/fle.env.game_types.rst", "api/modules/fle.env.gym_env.rst", "api/modules/fle.env.instance.rst", "api/modules/fle.env.namespace.rst", "api/modules/fle.eval.algorithms.rst", "api/modules/fle.eval.tasks.rst", "api/observation.rst", "api/tools.rst", "customization/agents.rst", "customization/database.rst", "customization/tasks.rst", "customization/tools.rst", "examples/basic_agent.rst", "examples/multiagent.rst", "examples/visual_agent.rst", "getting_started/cluster.rst", "getting_started/installation.rst", "getting_started/quickstart.rst", "index.rst", "tools/extract_item.rst", "tools/index.rst", "tools/insert_item.rst", "tools/inspect_inventory.rst", "tools/place_entity.rst"], "indexentries": {"__call__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__call__", false]], "__getstate__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__getstate__", false]], "__init__() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.__init__", false]], "__init__() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.__init__", false]], "__init__() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.__init__", false]], "__init__() (fle.commons.models.profitconfig method)": [[5, "fle.commons.models.ProfitConfig.__init__", false]], "__init__() (fle.commons.models.researchstate method)": [[5, "fle.commons.models.ResearchState.__init__", false]], "__init__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__init__", false]], "__init__() (fle.commons.models.technologystate method)": [[5, "fle.commons.models.TechnologyState.__init__", false]], "__init__() (fle.env.entities.indexedposition method)": [[6, "fle.env.entities.IndexedPosition.__init__", false]], "__init__() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.__init__", false]], "__init__() (fle.env.game_types.prototype method)": [[7, "fle.env.game_types.Prototype.__init__", false]], "__init__() (fle.env.gym_env.action.action method)": [[0, "fle.env.gym_env.action.Action.__init__", false]], "__init__() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.__init__", false], [9, "fle.env.instance.FactorioInstance.__init__", false]], "__init__() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.__init__", false]], "__init__() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.__init__", false]], "__init__() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.__init__", false]], "__init__() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.__init__", false]], "__init__() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.__init__", false]], "__init__() (fle.eval.tasks.taskfactory method)": [[12, "fle.eval.tasks.TaskFactory.__init__", false]], "__init__() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.__init__", false]], "__init__() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.__init__", false]], "__setstate__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__setstate__", false]], "__str__() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.__str__", false]], "above() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.above", false]], "accumulator (class in fle.env.entities)": [[6, "fle.env.entities.Accumulator", false]], "accumulator (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Accumulator", false]], "achievements (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.achievements", false]], "achievements (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.achievements", false]], "action (class in fle.env.gym_env.action)": [[0, "fle.env.gym_env.action.Action", false]], "add_agent_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_agent_message", false]], "add_result() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_result", false]], "add_user_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.add_user_message", false]], "advancedassemblingmachine (class in fle.env.entities)": [[6, "fle.env.entities.AdvancedAssemblingMachine", false]], "advancedcircuit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AdvancedCircuit", false]], "advancedelectronics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedElectronics", false]], "advancedelectronics2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedElectronics2", false]], "advancedmaterialprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedMaterialProcessing", false]], "advancedmaterialprocessing2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedMaterialProcessing2", false]], "advancedoilprocessing (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AdvancedOilProcessing", false]], "advancedoilprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.AdvancedOilProcessing", false]], "advancedoilprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.AdvancedOilProcessing", false]], "advantage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.advantage", false]], "agent_idx (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.agent_idx", false]], "agent_messages (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.agent_messages", false]], "agentabc (class in fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.AgentABC", false]], "all (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ALL", false]], "ammo (class in fle.env.entities)": [[6, "fle.env.entities.Ammo", false]], "assembling_machine_input (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_input", false]], "assembling_machine_modules (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_modules", false]], "assembling_machine_output (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.assembling_machine_output", false]], "assemblingmachine (class in fle.env.entities)": [[6, "fle.env.entities.AssemblingMachine", false]], "assemblingmachine1 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine1", false]], "assemblingmachine2 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine2", false]], "assemblingmachine3 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AssemblingMachine3", false]], "automation (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation", false]], "automation2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation2", false]], "automation3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Automation3", false]], "automationsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.AutomationSciencePack", false]], "barrelfilling (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.BarrelFilling", false]], "basicoilprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.BasicOilProcessing", false]], "battery (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Battery", false]], "batterytechnology (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.BatteryTechnology", false]], "below() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.below", false]], "beltgroup (class in fle.env.entities)": [[6, "fle.env.entities.BeltGroup", false]], "beltgroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BeltGroup", false]], "belts (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.belts", false]], "bigelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BigElectricPole", false]], "bind() (fle.commons.models.serializablefunction method)": [[5, "fle.commons.models.SerializableFunction.bind", false]], "boiler (class in fle.env.entities)": [[6, "fle.env.entities.Boiler", false]], "boiler (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Boiler", false]], "bounding_box (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.bounding_box", false]], "boundingbox (class in fle.env.entities)": [[6, "fle.env.entities.BoundingBox", false]], "buffer_capacity (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.buffer_capacity", false]], "buildingbox (class in fle.env.entities)": [[6, "fle.env.entities.BuildingBox", false]], "burnerinserter (class in fle.env.entities)": [[6, "fle.env.entities.BurnerInserter", false]], "burnerinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BurnerInserter", false]], "burnerminingdrill (class in fle.env.entities)": [[6, "fle.env.entities.BurnerMiningDrill", false]], "burnerminingdrill (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.BurnerMiningDrill", false]], "burnertype (class in fle.env.entities)": [[6, "fle.env.entities.BurnerType", false]], "category (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.category", false]], "center (fle.env.entities.boundingbox property)": [[6, "fle.env.entities.BoundingBox.center", false]], "centrifuge (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Centrifuge", false]], "characterinventoryslots (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.CharacterInventorySlots", false]], "charging (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.CHARGING", false]], "check_step_completion() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.check_step_completion", false]], "chemicalplant (class in fle.env.entities)": [[6, "fle.env.entities.ChemicalPlant", false]], "chemicalplant (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ChemicalPlant", false]], "chemicalsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ChemicalSciencePack", false]], "chemicalsciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ChemicalSciencePack", false]], "chest (class in fle.env.entities)": [[6, "fle.env.entities.Chest", false]], "children (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.children", false]], "cleanup() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.cleanup", false], [9, "fle.env.instance.FactorioInstance.cleanup", false]], "coal (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Coal", false]], "coal (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Coal", false]], "coal (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Coal", false]], "coalliquefaction (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.CoalLiquefaction", false]], "coalliquifaction (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CoalLiquifaction", false]], "code (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.code", false]], "code (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.code", false]], "code (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.code", false]], "completion_token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.completion_token_usage", false]], "completionreason (class in fle.agents.models)": [[4, "fle.agents.models.CompletionReason", false]], "completionresult (class in fle.agents.models)": [[4, "fle.agents.models.CompletionResult", false]], "concrete (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Concrete", false]], "connect_to_server() (fle.env.instance.factorioinstance static method)": [[1, "fle.env.instance.FactorioInstance.connect_to_server", false], [9, "fle.env.instance.FactorioInstance.connect_to_server", false]], "connected_to (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.connected_to", false]], "connection_points (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.connection_points", false]], "connections (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.CONNECTIONS", false]], "content (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.content", false]], "contents (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.contents", false]], "contents (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.contents", false]], "conversation (class in fle.commons.models)": [[5, "fle.commons.models.Conversation", false]], "conversation (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.conversation", false]], "conversation (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.conversation", false]], "coppercable (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperCable", false]], "copperore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperOre", false]], "copperore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.CopperOre", false]], "copperore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.CopperOre", false]], "copperplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.CopperPlate", false]], "count (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.count", false]], "crafted (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.crafted", false]], "create_default_agent_card() (in module fle.agents.agent_abc)": [[3, "fle.agents.agent_abc.create_default_agent_card", false]], "create_task() (fle.eval.tasks.taskfactory static method)": [[12, "fle.eval.tasks.TaskFactory.create_task", false]], "created_at (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.created_at", false]], "created_at (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.created_at", false]], "crudeoil (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.CrudeOil", false]], "crudeoil (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.CrudeOil", false]], "current_research (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.current_research", false]], "defaulttask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.DefaultTask", false]], "depth (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.depth", false]], "dimensions (class in fle.env.entities)": [[6, "fle.env.entities.Dimensions", false]], "dimensions (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.dimensions", false], [13, "fle.env.entities.Entity.dimensions", false]], "direction (class in fle.env.entities)": [[6, "fle.env.entities.Direction", false]], "direction (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.direction", false]], "direction (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.direction", false]], "directioninternal (class in fle.env.instance)": [[9, "fle.env.instance.DirectionInternal", false]], "discharging (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.DISCHARGING", false]], "distance() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.distance", false]], "down (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.DOWN", false]], "down (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.DOWN", false]], "down() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.down", false]], "drain (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.drain", false]], "drop_position (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.drop_position", false]], "drop_position (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.drop_position", false]], "duration (fle.commons.models.timingmetrics property)": [[5, "fle.commons.models.TimingMetrics.duration", false]], "dynamic_profit_multiplier (fle.commons.models.profitconfig attribute)": [[5, "fle.commons.models.ProfitConfig.dynamic_profit_multiplier", false]], "east (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.EAST", false]], "east (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.EAST", false]], "electric (class in fle.env.entities)": [[6, "fle.env.entities.Electric", false]], "electric_output_flow_limit (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.electric_output_flow_limit", false]], "electrical_id (fle.env.entities.electric attribute)": [[6, "fle.env.entities.Electric.electrical_id", false]], "electricalproducer (class in fle.env.entities)": [[6, "fle.env.entities.ElectricalProducer", false]], "electricenergy (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEnergy", false]], "electricenergy2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEnergy2", false]], "electricengineering (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ElectricEngineering", false]], "electricengineunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricEngineUnit", false]], "electricfurnace (class in fle.env.entities)": [[6, "fle.env.entities.ElectricFurnace", false]], "electricfurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricFurnace", false]], "electricity (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ELECTRICITY", false]], "electricitygroup (class in fle.env.entities)": [[6, "fle.env.entities.ElectricityGroup", false]], "electricitygroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricityGroup", false]], "electricitypole (class in fle.env.entities)": [[6, "fle.env.entities.ElectricityPole", false]], "electricminingdrill (class in fle.env.entities)": [[6, "fle.env.entities.ElectricMiningDrill", false]], "electricminingdrill (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectricMiningDrill", false]], "electroniccircuit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ElectronicCircuit", false]], "electronics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Electronics", false]], "empty (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.EMPTY", false]], "emptybarrel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.EmptyBarrel", false]], "emptycrudeoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyCrudeOilBarrel", false]], "emptyheavyoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyHeavyOilBarrel", false]], "emptylightoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyLightOilBarrel", false]], "emptylubricantbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyLubricantBarrel", false]], "emptypetroleumgasbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyPetroleumGasBarrel", false]], "emptysulfuricacidbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptySulfuricAcidBarrel", false]], "emptywaterbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.EmptyWaterBarrel", false]], "enabled (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.enabled", false]], "enabled (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.enabled", false]], "end() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.end", false]], "end_position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.end_position", false]], "end_time (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.end_time", false]], "energy (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.energy", false], [13, "fle.env.entities.Entity.energy", false]], "energy (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.energy", false]], "energy_source (fle.env.entities.accumulator attribute)": [[6, "fle.env.entities.Accumulator.energy_source", false]], "energy_source (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.energy_source", false]], "energyshield (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.EnergyShield", false]], "energyshield2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.EnergyShield2", false]], "energysource (class in fle.env.entities)": [[6, "fle.env.entities.EnergySource", false]], "engineunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.EngineUnit", false]], "enhance_response_with_task_output() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.enhance_response_with_task_output", false]], "enhance_response_with_task_output() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.enhance_response_with_task_output", false]], "enhance_response_with_task_output() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.enhance_response_with_task_output", false]], "enter_loop() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.enter_loop", false]], "entities (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.entities", false]], "entities (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.entities", false]], "entities (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ENTITIES", false]], "entities (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.entities", false]], "entity (class in fle.env.entities)": [[6, "fle.env.entities.Entity", false], [13, "fle.env.entities.Entity", false]], "entitycore (class in fle.env.entities)": [[6, "fle.env.entities.EntityCore", false]], "entitygroup (class in fle.env.entities)": [[6, "fle.env.entities.EntityGroup", false]], "entityinfo (class in fle.env.entities)": [[6, "fle.env.entities.EntityInfo", false]], "entitystatus (class in fle.env.entities)": [[6, "fle.env.entities.EntityStatus", false]], "error (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.error", false]], "eval() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval", false], [9, "fle.env.instance.FactorioInstance.eval", false]], "eval_with_error() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.eval_with_error", false], [9, "fle.env.instance.FactorioInstance.eval_with_error", false]], "eval_with_timeout() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.eval_with_timeout", false]], "execute_body() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.execute_body", false]], "execute_node() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.execute_node", false]], "exit_loop() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.exit_loop", false]], "expressinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressInserter", false]], "expresssplitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressSplitter", false]], "expresstransportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressTransportBelt", false]], "expressundergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ExpressUndergroundBelt", false]], "factorioinstance (class in fle.env.instance)": [[1, "fle.env.instance.FactorioInstance", false], [9, "fle.env.instance.FactorioInstance", false]], "factorionamespace (class in fle.env.namespace)": [[10, "fle.env.namespace.FactorioNamespace", false]], "fastinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastInserter", false]], "fastinserter (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.FastInserter", false]], "fastsplitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastSplitter", false]], "fasttransportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastTransportBelt", false]], "fastundergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FastUndergroundBelt", false]], "fillcrudeoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillCrudeOilBarrel", false]], "fillheavyoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillHeavyOilBarrel", false]], "filllightoilbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillLightOilBarrel", false]], "filllubricantbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillLubricantBarrel", false]], "fillpetroleumgasbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillPetroleumGasBarrel", false]], "fillsulfuricacidbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillSulfuricAcidBarrel", false]], "fillwaterbarrel (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.FillWaterBarrel", false]], "filter (fle.env.entities.filtered attribute)": [[6, "fle.env.entities.Filtered.filter", false]], "filter_serializable_vars() (in module fle.commons.models)": [[5, "fle.commons.models.filter_serializable_vars", false]], "filtered (class in fle.env.entities)": [[6, "fle.env.entities.Filtered", false]], "filterinserter (class in fle.env.entities)": [[6, "fle.env.entities.FilterInserter", false]], "filterinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FilterInserter", false]], "firearmmagazine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FirearmMagazine", false]], "first_namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.first_namespace", false], [9, "fle.env.instance.FactorioInstance.first_namespace", false]], "fle.agents.agent_abc": [[3, "module-fle.agents.agent_abc", false]], "fle.agents.models": [[4, "module-fle.agents.models", false]], "fle.commons.models": [[5, "module-fle.commons.models", false]], "fle.env.entities": [[6, "module-fle.env.entities", false]], "fle.env.game_types": [[7, "module-fle.env.game_types", false]], "fle.env.gym_env": [[8, "module-fle.env.gym_env", false]], "fle.env.instance": [[9, "module-fle.env.instance", false]], "fle.env.namespace": [[10, "module-fle.env.namespace", false]], "fle.eval.algorithms": [[11, "module-fle.eval.algorithms", false]], "fle.eval.tasks": [[12, "module-fle.eval.tasks", false]], "flow_rate (fle.env.entities.electricitypole attribute)": [[6, "fle.env.entities.ElectricityPole.flow_rate", false]], "flow_rate (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.flow_rate", false]], "flows (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.flows", false]], "flows (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.flows", false]], "fluid (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.fluid", false]], "fluid_box (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.fluid_box", false]], "fluid_box (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.fluid_box", false]], "fluid_ingredient_shortage (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FLUID_INGREDIENT_SHORTAGE", false]], "fluid_systems (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.fluid_systems", false]], "fluid_systems (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.fluid_systems", false]], "fluidbox_id (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.fluidbox_id", false]], "fluidhandler (class in fle.env.entities)": [[6, "fle.env.entities.FluidHandler", false]], "flyingrobotframe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.FlyingRobotFrame", false]], "frequency_penalty (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.frequency_penalty", false]], "from_dict() (fle.commons.models.productionflows class method)": [[5, "fle.commons.models.ProductionFlows.from_dict", false]], "from_factorio_direction() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.from_factorio_direction", false]], "from_instance() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.from_instance", false]], "from_int() (fle.env.entities.entitystatus class method)": [[6, "fle.env.entities.EntityStatus.from_int", false]], "from_row() (fle.commons.models.program class method)": [[5, "fle.commons.models.Program.from_row", false]], "from_string() (fle.env.entities.direction class method)": [[6, "fle.env.entities.Direction.from_string", false]], "from_string() (fle.env.entities.entitystatus class method)": [[6, "fle.env.entities.EntityStatus.from_string", false]], "fuel (fle.env.entities.burnertype attribute)": [[6, "fle.env.entities.BurnerType.fuel", false]], "full_burnt_result_output (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULL_BURNT_RESULT_OUTPUT", false]], "full_output (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULL_OUTPUT", false]], "fully_charged (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.FULLY_CHARGED", false]], "furnace (class in fle.env.entities)": [[6, "fle.env.entities.Furnace", false]], "furnace_result (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.furnace_result", false]], "furnace_result (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.furnace_result", false]], "furnace_source (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.furnace_source", false]], "furnace_source (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.furnace_source", false]], "game_state (fle.env.gym_env.action.action attribute)": [[0, "fle.env.gym_env.action.Action.game_state", false]], "gamecontrol (class in fle.env.instance)": [[9, "fle.env.instance.GameControl", false]], "gamestate (class in fle.commons.models)": [[5, "fle.commons.models.GameState", false]], "gate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Gate", false]], "generationparameters (class in fle.commons.models)": [[5, "fle.commons.models.GenerationParameters", false]], "generator (class in fle.env.entities)": [[6, "fle.env.entities.Generator", false]], "get() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.get", false]], "get_agent_card() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.get_agent_card", false]], "get_agent_instructions() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.get_agent_instructions", false]], "get_elapsed_ticks() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false], [9, "fle.env.instance.FactorioInstance.get_elapsed_ticks", false]], "get_elapsed_ticks() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.get_elapsed_ticks", false]], "get_entities() (fle.env.entities.inspectionresults method)": [[6, "fle.env.entities.InspectionResults.get_entities", false]], "get_entity() (fle.env.entities.inspectionresults method)": [[6, "fle.env.entities.InspectionResults.get_entity", false]], "get_environment_info() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.get_environment_info", false]], "get_functions() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.get_functions", false]], "get_messages() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.get_messages", false]], "get_new_flows() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.get_new_flows", false]], "get_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_speed", false], [9, "fle.env.instance.FactorioInstance.get_speed", false]], "get_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.get_speed", false]], "get_step() (fle.commons.models.program method)": [[5, "fle.commons.models.Program.get_step", false]], "get_system_prompt() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_system_prompt", false], [9, "fle.env.instance.FactorioInstance.get_system_prompt", false]], "get_uct() (fle.commons.models.program method)": [[5, "fle.commons.models.Program.get_uct", false]], "get_warnings() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.get_warnings", false], [9, "fle.env.instance.FactorioInstance.get_warnings", false]], "grenade (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Grenade", false]], "grenades (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Grenades", false]], "grid (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.GRID", false]], "gunturret (class in fle.env.entities)": [[6, "fle.env.entities.GunTurret", false]], "gunturret (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.GunTurret", false]], "handle_break() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.handle_break", false]], "handle_continue() (fle.env.namespace.loopcontext method)": [[10, "fle.env.namespace.LoopContext.handle_continue", false]], "harvested (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.harvested", false]], "health (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.health", false], [13, "fle.env.entities.Entity.health", false]], "heatexchanger (class in fle.env.entities)": [[6, "fle.env.entities.HeatExchanger", false]], "heatexchanger (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeatExchanger", false]], "heatpipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeatPipe", false]], "heavyoil (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.HeavyOil", false]], "heavyoilcracking (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.HeavyOilCracking", false]], "height (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.height", false]], "height (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.height", false]], "height (fle.env.entities.entity property)": [[6, "fle.env.entities.Entity.height", false], [13, "fle.env.entities.Entity.height", false]], "height (fle.env.game_types.prototype property)": [[7, "fle.env.game_types.Prototype.HEIGHT", false]], "height() (fle.env.entities.boundingbox method)": [[6, "fle.env.entities.BoundingBox.height", false]], "holdout_value (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.holdout_value", false]], "id (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.id", false]], "id (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.id", false], [13, "fle.env.entities.Entity.id", false]], "id (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.id", false]], "indexedposition (class in fle.env.entities)": [[6, "fle.env.entities.IndexedPosition", false]], "ingredient (class in fle.env.entities)": [[6, "fle.env.entities.Ingredient", false]], "ingredients (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.ingredients", false]], "ingredients (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.ingredients", false]], "initialise() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.initialise", false], [9, "fle.env.instance.FactorioInstance.initialise", false]], "input (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.input", false]], "input_connection_points (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.input_connection_points", false]], "input_flow_limit (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.input_flow_limit", false]], "input_fluids (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.input_fluids", false]], "input_position (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.input_position", false]], "input_positions (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.input_positions", false]], "inputs (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.inputs", false]], "inserter (class in fle.env.entities)": [[6, "fle.env.entities.Inserter", false]], "inserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Inserter", false]], "inspectionresults (class in fle.env.entities)": [[6, "fle.env.entities.InspectionResults", false]], "instance (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.instance", false]], "inventories (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.inventories", false]], "inventory (class in fle.env.entities)": [[6, "fle.env.entities.Inventory", false]], "inventory (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.inventory", false]], "inventory (fle.env.entities.chest attribute)": [[6, "fle.env.entities.Chest.inventory", false]], "inventory (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.inventory", false]], "inventory (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.inventory", false]], "ironchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronChest", false]], "irongearwheel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronGearWheel", false]], "ironore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronOre", false]], "ironore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.IronOre", false]], "ironore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.IronOre", false]], "ironplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronPlate", false]], "ironstick (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.IronStick", false]], "is_close() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.is_close", false]], "is_input (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.is_input", false]], "is_multiagent (fle.commons.models.gamestate property)": [[5, "fle.commons.models.GameState.is_multiagent", false]], "is_multiagent (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.is_multiagent", false], [9, "fle.env.instance.FactorioInstance.is_multiagent", false]], "is_paused() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.is_paused", false]], "is_source (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.is_source", false]], "is_terminus (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.is_terminus", false]], "is_valid() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.is_valid", false]], "item_ingredient_shortage (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.ITEM_INGREDIENT_SHORTAGE", false]], "items() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.items", false]], "keys() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.keys", false]], "kills (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.kills", false]], "lab (class in fle.env.entities)": [[6, "fle.env.entities.Lab", false]], "lab (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Lab", false]], "lab_input (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.lab_input", false]], "lab_modules (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.lab_modules", false]], "labels (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.LABELS", false]], "landfill (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Landfill", false]], "launch_count (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.launch_count", false]], "launch_progress (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.launch_progress", false]], "launching_rocket (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LAUNCHING_ROCKET", false]], "layer (class in fle.env.entities)": [[6, "fle.env.entities.Layer", false]], "left (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.LEFT", false]], "left (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.LEFT", false]], "left() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.left", false]], "left_bottom (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.left_bottom", false]], "left_top (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.left_top", false]], "level (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.level", false]], "lightoil (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LightOil", false]], "lightoilcracking (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.LightOilCracking", false]], "list_available_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.list_available_environments", false]], "load() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.load", false]], "load_messages() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.load_messages", false]], "log() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.log", false]], "logistics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics", false]], "logistics2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics2", false]], "logistics3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Logistics3", false]], "logisticssciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LogisticsSciencePack", false]], "logisticssciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.LogisticsSciencePack", false]], "logit_bias (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.logit_bias", false]], "longhandedinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LongHandedInserter", false]], "loopcontext (class in fle.env.namespace)": [[10, "fle.env.namespace.LoopContext", false]], "low_input_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_INPUT_FLUID", false]], "low_power (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_POWER", false]], "low_temperature (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.LOW_TEMPERATURE", false]], "lowdensitystructure (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.LowDensityStructure", false]], "lowdensitystructure (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.LowDensityStructure", false]], "lubricant (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Lubricant", false]], "lubricant (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Lubricant", false]], "magazine_size (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.magazine_size", false]], "max_static_unit_profit_cap (fle.commons.models.profitconfig attribute)": [[5, "fle.commons.models.ProfitConfig.max_static_unit_profit_cap", false]], "max_tokens (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.max_tokens", false]], "mediumelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.MediumElectricPole", false]], "message (class in fle.commons.models)": [[5, "fle.commons.models.Message", false]], "messages (fle.commons.models.conversation attribute)": [[5, "fle.commons.models.Conversation.messages", false]], "meta (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.meta", false]], "meta (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.meta", false]], "metadata (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.metadata", false]], "metadata (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.metadata", false]], "metadata (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.metadata", false]], "militaryscience (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.MilitaryScience", false]], "militarysciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.MilitarySciencePack", false]], "militarysciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.MilitarySciencePack", false]], "miningdrill (class in fle.env.entities)": [[6, "fle.env.entities.MiningDrill", false]], "missing_required_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.MISSING_REQUIRED_FLUID", false]], "missing_science_packs (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.MISSING_SCIENCE_PACKS", false]], "model (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.model", false]], "model (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.model", false]], "model (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.model", false]], "model_config (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.model_config", false]], "model_config (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.model_config", false]], "model_config (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.model_config", false]], "model_config (fle.commons.models.conversation attribute)": [[5, "fle.commons.models.Conversation.model_config", false]], "model_config (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.model_config", false]], "model_config (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.model_config", false]], "model_config (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.model_config", false]], "model_config (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.model_config", false]], "model_config (fle.env.entities.accumulator attribute)": [[6, "fle.env.entities.Accumulator.model_config", false]], "model_config (fle.env.entities.advancedassemblingmachine attribute)": [[6, "fle.env.entities.AdvancedAssemblingMachine.model_config", false]], "model_config (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.model_config", false]], "model_config (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.model_config", false]], "model_config (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.model_config", false]], "model_config (fle.env.entities.boiler attribute)": [[6, "fle.env.entities.Boiler.model_config", false]], "model_config (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.model_config", false]], "model_config (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.model_config", false]], "model_config (fle.env.entities.burnerinserter attribute)": [[6, "fle.env.entities.BurnerInserter.model_config", false]], "model_config (fle.env.entities.burnerminingdrill attribute)": [[6, "fle.env.entities.BurnerMiningDrill.model_config", false]], "model_config (fle.env.entities.burnertype attribute)": [[6, "fle.env.entities.BurnerType.model_config", false]], "model_config (fle.env.entities.chemicalplant attribute)": [[6, "fle.env.entities.ChemicalPlant.model_config", false]], "model_config (fle.env.entities.chest attribute)": [[6, "fle.env.entities.Chest.model_config", false]], "model_config (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.model_config", false]], "model_config (fle.env.entities.electric attribute)": [[6, "fle.env.entities.Electric.model_config", false]], "model_config (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.model_config", false]], "model_config (fle.env.entities.electricfurnace attribute)": [[6, "fle.env.entities.ElectricFurnace.model_config", false]], "model_config (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.model_config", false]], "model_config (fle.env.entities.electricitypole attribute)": [[6, "fle.env.entities.ElectricityPole.model_config", false]], "model_config (fle.env.entities.electricminingdrill attribute)": [[6, "fle.env.entities.ElectricMiningDrill.model_config", false]], "model_config (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.model_config", false]], "model_config (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.model_config", false], [13, "fle.env.entities.Entity.model_config", false]], "model_config (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.model_config", false]], "model_config (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.model_config", false]], "model_config (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.model_config", false]], "model_config (fle.env.entities.filtered attribute)": [[6, "fle.env.entities.Filtered.model_config", false]], "model_config (fle.env.entities.filterinserter attribute)": [[6, "fle.env.entities.FilterInserter.model_config", false]], "model_config (fle.env.entities.fluidhandler attribute)": [[6, "fle.env.entities.FluidHandler.model_config", false]], "model_config (fle.env.entities.furnace attribute)": [[6, "fle.env.entities.Furnace.model_config", false]], "model_config (fle.env.entities.generator attribute)": [[6, "fle.env.entities.Generator.model_config", false]], "model_config (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.model_config", false]], "model_config (fle.env.entities.heatexchanger attribute)": [[6, "fle.env.entities.HeatExchanger.model_config", false]], "model_config (fle.env.entities.indexedposition attribute)": [[6, "fle.env.entities.IndexedPosition.model_config", false]], "model_config (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.model_config", false]], "model_config (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.model_config", false]], "model_config (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.model_config", false]], "model_config (fle.env.entities.inventory attribute)": [[6, "fle.env.entities.Inventory.model_config", false]], "model_config (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.model_config", false]], "model_config (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.model_config", false]], "model_config (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.model_config", false]], "model_config (fle.env.entities.offshorepump attribute)": [[6, "fle.env.entities.OffshorePump.model_config", false]], "model_config (fle.env.entities.oilrefinery attribute)": [[6, "fle.env.entities.OilRefinery.model_config", false]], "model_config (fle.env.entities.pipe attribute)": [[6, "fle.env.entities.Pipe.model_config", false]], "model_config (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.model_config", false]], "model_config (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.model_config", false]], "model_config (fle.env.entities.product attribute)": [[6, "fle.env.entities.Product.model_config", false]], "model_config (fle.env.entities.pump attribute)": [[6, "fle.env.entities.Pump.model_config", false]], "model_config (fle.env.entities.pumpjack attribute)": [[6, "fle.env.entities.PumpJack.model_config", false]], "model_config (fle.env.entities.rail attribute)": [[6, "fle.env.entities.Rail.model_config", false]], "model_config (fle.env.entities.reactor attribute)": [[6, "fle.env.entities.Reactor.model_config", false]], "model_config (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.model_config", false]], "model_config (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.model_config", false]], "model_config (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.model_config", false]], "model_config (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.model_config", false]], "model_config (fle.env.entities.solarpanel attribute)": [[6, "fle.env.entities.SolarPanel.model_config", false]], "model_config (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.model_config", false]], "model_config (fle.env.entities.staticentity attribute)": [[6, "fle.env.entities.StaticEntity.model_config", false]], "model_config (fle.env.entities.storagetank attribute)": [[6, "fle.env.entities.StorageTank.model_config", false]], "model_config (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.model_config", false]], "model_config (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.model_config", false]], "model_config (fle.env.entities.undergroundbelt attribute)": [[6, "fle.env.entities.UndergroundBelt.model_config", false]], "model_config (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.model_config", false]], "model_post_init() (fle.env.entities.accumulator method)": [[6, "fle.env.entities.Accumulator.model_post_init", false]], "model_post_init() (fle.env.entities.advancedassemblingmachine method)": [[6, "fle.env.entities.AdvancedAssemblingMachine.model_post_init", false]], "model_post_init() (fle.env.entities.assemblingmachine method)": [[6, "fle.env.entities.AssemblingMachine.model_post_init", false]], "model_post_init() (fle.env.entities.boiler method)": [[6, "fle.env.entities.Boiler.model_post_init", false]], "model_post_init() (fle.env.entities.burnerinserter method)": [[6, "fle.env.entities.BurnerInserter.model_post_init", false]], "model_post_init() (fle.env.entities.burnerminingdrill method)": [[6, "fle.env.entities.BurnerMiningDrill.model_post_init", false]], "model_post_init() (fle.env.entities.chemicalplant method)": [[6, "fle.env.entities.ChemicalPlant.model_post_init", false]], "model_post_init() (fle.env.entities.chest method)": [[6, "fle.env.entities.Chest.model_post_init", false]], "model_post_init() (fle.env.entities.electricfurnace method)": [[6, "fle.env.entities.ElectricFurnace.model_post_init", false]], "model_post_init() (fle.env.entities.electricitypole method)": [[6, "fle.env.entities.ElectricityPole.model_post_init", false]], "model_post_init() (fle.env.entities.electricminingdrill method)": [[6, "fle.env.entities.ElectricMiningDrill.model_post_init", false]], "model_post_init() (fle.env.entities.filterinserter method)": [[6, "fle.env.entities.FilterInserter.model_post_init", false]], "model_post_init() (fle.env.entities.furnace method)": [[6, "fle.env.entities.Furnace.model_post_init", false]], "model_post_init() (fle.env.entities.generator method)": [[6, "fle.env.entities.Generator.model_post_init", false]], "model_post_init() (fle.env.entities.gunturret method)": [[6, "fle.env.entities.GunTurret.model_post_init", false]], "model_post_init() (fle.env.entities.heatexchanger method)": [[6, "fle.env.entities.HeatExchanger.model_post_init", false]], "model_post_init() (fle.env.entities.inserter method)": [[6, "fle.env.entities.Inserter.model_post_init", false]], "model_post_init() (fle.env.entities.lab method)": [[6, "fle.env.entities.Lab.model_post_init", false]], "model_post_init() (fle.env.entities.offshorepump method)": [[6, "fle.env.entities.OffshorePump.model_post_init", false]], "model_post_init() (fle.env.entities.oilrefinery method)": [[6, "fle.env.entities.OilRefinery.model_post_init", false]], "model_post_init() (fle.env.entities.pipe method)": [[6, "fle.env.entities.Pipe.model_post_init", false]], "model_post_init() (fle.env.entities.pump method)": [[6, "fle.env.entities.Pump.model_post_init", false]], "model_post_init() (fle.env.entities.pumpjack method)": [[6, "fle.env.entities.PumpJack.model_post_init", false]], "model_post_init() (fle.env.entities.rail method)": [[6, "fle.env.entities.Rail.model_post_init", false]], "model_post_init() (fle.env.entities.reactor method)": [[6, "fle.env.entities.Reactor.model_post_init", false]], "model_post_init() (fle.env.entities.rocketsilo method)": [[6, "fle.env.entities.RocketSilo.model_post_init", false]], "model_post_init() (fle.env.entities.solarpanel method)": [[6, "fle.env.entities.SolarPanel.model_post_init", false]], "model_post_init() (fle.env.entities.splitter method)": [[6, "fle.env.entities.Splitter.model_post_init", false]], "model_post_init() (fle.env.entities.storagetank method)": [[6, "fle.env.entities.StorageTank.model_post_init", false]], "model_post_init() (fle.env.entities.transportbelt method)": [[6, "fle.env.entities.TransportBelt.model_post_init", false]], "model_post_init() (fle.env.entities.undergroundbelt method)": [[6, "fle.env.entities.UndergroundBelt.model_post_init", false]], "modulararmor (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ModularArmor", false]], "module": [[3, "module-fle.agents.agent_abc", false], [4, "module-fle.agents.models", false], [5, "module-fle.commons.models", false], [6, "module-fle.env.entities", false], [7, "module-fle.env.game_types", false], [8, "module-fle.env.gym_env", false], [9, "module-fle.env.instance", false], [10, "module-fle.env.namespace", false], [11, "module-fle.eval.algorithms", false], [12, "module-fle.eval.tasks", false]], "multifluidhandler (class in fle.env.entities)": [[6, "fle.env.entities.MultiFluidHandler", false]], "n (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.n", false]], "name (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.name", false]], "name (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.name", false]], "name (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.name", false]], "name (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.name", false]], "name (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.name", false]], "name (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.name", false]], "name (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.name", false]], "name (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.name", false]], "name (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.name", false]], "name (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.name", false]], "name (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.name", false]], "name (fle.env.entities.wallgroup attribute)": [[6, "fle.env.entities.WallGroup.name", false]], "namespace (fle.env.instance.factorioinstance property)": [[1, "fle.env.instance.FactorioInstance.namespace", false], [9, "fle.env.instance.FactorioInstance.namespace", false]], "namespace_class (fle.env.instance.factorioinstance attribute)": [[1, "fle.env.instance.FactorioInstance.namespace_class", false], [9, "fle.env.instance.FactorioInstance.namespace_class", false]], "namespaces (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.namespaces", false]], "natural (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.NATURAL", false]], "neighbours (fle.env.entities.staticentity attribute)": [[6, "fle.env.entities.StaticEntity.neighbours", false]], "next_clockwise() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.next_clockwise", false]], "next_counterclockwise() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.next_counterclockwise", false]], "nightvision (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.NightVision", false]], "no_ammo (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_AMMO", false]], "no_fuel (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_FUEL", false]], "no_ingredients (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_INGREDIENTS", false]], "no_input_fluid (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_INPUT_FLUID", false]], "no_minable_resources (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_MINABLE_RESOURCES", false]], "no_power (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_POWER", false]], "no_recipe (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_RECIPE", false]], "no_research_in_progress (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NO_RESEARCH_IN_PROGRESS", false]], "none (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.NONE", false]], "normal (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NORMAL", false]], "north (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.NORTH", false]], "north (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.NORTH", false]], "not_connected (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_CONNECTED", false]], "not_connected_to_rail (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_CONNECTED_TO_RAIL", false]], "not_plugged_in_electric_network (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.NOT_PLUGGED_IN_ELECTRIC_NETWORK", false]], "nuclearfuelreprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.NuclearFuelReprocessing", false]], "nuclearpower (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.NuclearPower", false]], "nuclearreactor (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.NuclearReactor", false]], "num_agents (fle.commons.models.gamestate property)": [[5, "fle.commons.models.GameState.num_agents", false]], "offshorepump (class in fle.env.entities)": [[6, "fle.env.entities.OffshorePump", false]], "offshorepump (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.OffshorePump", false]], "oilprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.OilProcessing", false]], "oilrefinery (class in fle.env.entities)": [[6, "fle.env.entities.OilRefinery", false]], "oilrefinery (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.OilRefinery", false]], "operation_name (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.operation_name", false]], "opposite() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.opposite", false]], "origin (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ORIGIN", false]], "output (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.output", false]], "output_connection_points (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.output_connection_points", false]], "output_flow_limit (fle.env.entities.energysource attribute)": [[6, "fle.env.entities.EnergySource.output_flow_limit", false]], "output_fluids (fle.env.entities.multifluidhandler attribute)": [[6, "fle.env.entities.MultiFluidHandler.output_fluids", false]], "output_position (fle.env.entities.transportbelt attribute)": [[6, "fle.env.entities.TransportBelt.output_position", false]], "output_positions (fle.env.entities.splitter attribute)": [[6, "fle.env.entities.Splitter.output_positions", false]], "outputs (fle.env.entities.beltgroup attribute)": [[6, "fle.env.entities.BeltGroup.outputs", false]], "parent_id (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.parent_id", false]], "parse() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.parse", false]], "parse_agent_messages() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.parse_agent_messages", false]], "parse_args() (fle.env.entities.position class method)": [[6, "fle.env.entities.Position.parse_args", false]], "parse_raw() (fle.commons.models.conversation class method)": [[5, "fle.commons.models.Conversation.parse_raw", false]], "parse_raw() (fle.commons.models.gamestate class method)": [[5, "fle.commons.models.GameState.parse_raw", false]], "pause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.pause", false], [9, "fle.env.instance.FactorioInstance.pause", false]], "pause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.pause", false]], "pause_at_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.pause_at_speed", false]], "payload (fle.env.entities.rocket attribute)": [[6, "fle.env.entities.Rocket.payload", false]], "petroleumgas (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PetroleumGas", false]], "pickup_position (fle.env.entities.inserter attribute)": [[6, "fle.env.entities.Inserter.pickup_position", false]], "piercingroundsmagazine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PiercingRoundsMagazine", false]], "pipe (class in fle.env.entities)": [[6, "fle.env.entities.Pipe", false]], "pipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Pipe", false]], "pipegroup (class in fle.env.entities)": [[6, "fle.env.entities.PipeGroup", false]], "pipegroup (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PipeGroup", false]], "pipes (fle.env.entities.pipegroup attribute)": [[6, "fle.env.entities.PipeGroup.pipes", false]], "plasticbar (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PlasticBar", false]], "plastics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Plastics", false]], "player (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.PLAYER", false]], "player_position (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.player_position", false]], "poles (fle.env.entities.electricitygroup attribute)": [[6, "fle.env.entities.ElectricityGroup.poles", false]], "position (class in fle.env.entities)": [[6, "fle.env.entities.Position", false]], "position (fle.env.entities.entitycore attribute)": [[6, "fle.env.entities.EntityCore.position", false]], "position (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.position", false]], "position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.position", false]], "powerarmor (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.PowerArmor", false]], "powerarmor2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.PowerArmor2", false]], "preparing_rocket_for_launch (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.PREPARING_ROCKET_FOR_LAUNCH", false]], "prerequisites (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.prerequisites", false]], "presence_penalty (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.presence_penalty", false]], "price_list (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.price_list", false]], "probability (fle.env.entities.product attribute)": [[6, "fle.env.entities.Product.probability", false]], "processingunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProcessingUnit", false]], "product (class in fle.env.entities)": [[6, "fle.env.entities.Product", false]], "production (fle.env.entities.electricalproducer attribute)": [[6, "fle.env.entities.ElectricalProducer.production", false]], "productionflows (class in fle.commons.models)": [[5, "fle.commons.models.ProductionFlows", false]], "productionsciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductionSciencePack", false]], "productionsciencepack (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductionSciencePack", false]], "productivitymodule (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule", false]], "productivitymodule (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule", false]], "productivitymodule2 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule2", false]], "productivitymodule2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule2", false]], "productivitymodule3 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.ProductivityModule3", false]], "productivitymodule3 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ProductivityModule3", false]], "products (fle.env.entities.recipe attribute)": [[6, "fle.env.entities.Recipe.products", false]], "profitconfig (class in fle.commons.models)": [[5, "fle.commons.models.ProfitConfig", false]], "program (class in fle.commons.models)": [[5, "fle.commons.models.Program", false]], "program_id (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.program_id", false]], "progress (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.progress", false]], "prompt_token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.prompt_token_usage", false]], "prototype (class in fle.env.game_types)": [[7, "fle.env.game_types.Prototype", false]], "prototype (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.prototype", false], [13, "fle.env.entities.Entity.prototype", false]], "prototypemetaclass (class in fle.env.game_types)": [[7, "fle.env.game_types.PrototypeMetaclass", false]], "pump (class in fle.env.entities)": [[6, "fle.env.entities.Pump", false]], "pump (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Pump", false]], "pumpjack (class in fle.env.entities)": [[6, "fle.env.entities.PumpJack", false]], "pumpjack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.PumpJack", false]], "quantity (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.quantity", false]], "radar (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Radar", false]], "radius (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.radius", false]], "rail (class in fle.env.entities)": [[6, "fle.env.entities.Rail", false]], "rail (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Rail", false]], "railwaytransportation (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RailwayTransportation", false]], "raw_reward (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.raw_reward", false]], "reactor (class in fle.env.entities)": [[6, "fle.env.entities.Reactor", false]], "reason (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.reason", false]], "recipe (class in fle.env.entities)": [[6, "fle.env.entities.Recipe", false]], "recipe (fle.env.entities.assemblingmachine attribute)": [[6, "fle.env.entities.AssemblingMachine.recipe", false]], "recipename (class in fle.env.game_types)": [[7, "fle.env.game_types.RecipeName", false]], "reconstruct() (fle.commons.models.serializablefunction static method)": [[5, "fle.commons.models.SerializableFunction.reconstruct", false]], "register_all_environments() (in module fle.env.gym_env.registry)": [[1, "fle.env.gym_env.registry.register_all_environments", false]], "reload_time (fle.env.entities.ammo attribute)": [[6, "fle.env.entities.Ammo.reload_time", false]], "research (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.research", false]], "research (fle.env.entities.lab attribute)": [[6, "fle.env.entities.Lab.research", false]], "research_progress (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.research_progress", false]], "research_queue (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.research_queue", false]], "research_unit_count (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.research_unit_count", false]], "research_unit_energy (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.research_unit_energy", false]], "researched (fle.commons.models.technologystate attribute)": [[5, "fle.commons.models.TechnologyState.researched", false]], "researchspeed (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.ResearchSpeed", false]], "researchstate (class in fle.commons.models)": [[5, "fle.commons.models.ResearchState", false]], "reset() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.reset", false], [1, "id0", false], [9, "fle.env.instance.FactorioInstance.reset", false]], "reset() (fle.env.namespace.factorionamespace method)": [[10, "fle.env.namespace.FactorioNamespace.reset", false]], "reset_to_defaults() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.reset_to_defaults", false]], "resource (class in fle.env.game_types)": [[7, "fle.env.game_types.Resource", false]], "resourcename (class in fle.env.game_types)": [[7, "fle.env.game_types.ResourceName", false]], "resourcepatch (class in fle.env.entities)": [[6, "fle.env.entities.ResourcePatch", false]], "resources (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.RESOURCES", false]], "resources (fle.env.entities.miningdrill attribute)": [[6, "fle.env.entities.MiningDrill.resources", false]], "response (class in fle.agents.models)": [[4, "fle.agents.models.Response", false]], "response (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.response", false]], "response (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.response", false]], "right (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.RIGHT", false]], "right (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.RIGHT", false]], "right() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.right", false]], "right_bottom (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.right_bottom", false]], "right_top (fle.env.entities.boundingbox attribute)": [[6, "fle.env.entities.BoundingBox.right_top", false]], "robotics (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.Robotics", false]], "rocket (class in fle.env.entities)": [[6, "fle.env.entities.Rocket", false]], "rocket (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Rocket", false]], "rocket_inventory (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_inventory", false]], "rocket_parts (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_parts", false]], "rocket_progress (fle.env.entities.rocketsilo attribute)": [[6, "fle.env.entities.RocketSilo.rocket_progress", false]], "rocketcontrol (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketControl", false]], "rocketcontrolunit (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketControlUnit", false]], "rocketfuel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketFuel", false]], "rocketfuel (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketFuel", false]], "rocketpart (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketPart", false]], "rocketsilo (class in fle.env.entities)": [[6, "fle.env.entities.RocketSilo", false]], "rocketsilo (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.RocketSilo", false]], "rocketsilotechnology (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.RocketSiloTechnology", false]], "rocks (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.ROCKS", false]], "role (fle.commons.models.message attribute)": [[5, "fle.commons.models.Message.role", false]], "runtime_error (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.RUNTIME_ERROR", false]], "satellite (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Satellite", false]], "score (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.score", false]], "serializablefunction (class in fle.commons.models)": [[5, "fle.commons.models.SerializableFunction", false]], "serialize_model() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.serialize_model", false]], "set_conversation() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.set_conversation", false]], "set_speed() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed", false], [9, "fle.env.instance.FactorioInstance.set_speed", false]], "set_speed() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.set_speed", false]], "set_speed_and_unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false], [9, "fle.env.instance.FactorioInstance.set_speed_and_unpause", false]], "set_speed_and_unpause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.set_speed_and_unpause", false]], "set_system_message() (fle.commons.models.conversation method)": [[5, "fle.commons.models.Conversation.set_system_message", false]], "setup() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.setup", false]], "setup_instance() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.setup_instance", false]], "setup_instance() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.setup_instance", false]], "setup_instance() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.setup_instance", false]], "setup_instance() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.setup_instance", false]], "size (fle.env.entities.resourcepatch attribute)": [[6, "fle.env.entities.ResourcePatch.size", false]], "smallelectricpole (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SmallElectricPole", false]], "smalllamp (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SmallLamp", false]], "solarenergy (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SolarEnergy", false]], "solarpanel (class in fle.env.entities)": [[6, "fle.env.entities.SolarPanel", false]], "solarpanel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SolarPanel", false]], "solidfuel (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SolidFuel", false]], "solidfuelfromheavyoil (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromHeavyOil", false]], "solidfuelfromlightoil (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromLightOil", false]], "solidfuelfrompetroleumgas (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SolidFuelFromPetroleumGas", false]], "south (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.SOUTH", false]], "south (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.SOUTH", false]], "spacescience (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SpaceScience", false]], "spacesciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SpaceSciencePack", false]], "splitter (class in fle.env.entities)": [[6, "fle.env.entities.Splitter", false]], "splitter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Splitter", false]], "stackfilterinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StackFilterInserter", false]], "stackinserter (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StackInserter", false]], "stackinserter (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserter", false]], "stackinsertercapacity1 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserterCapacity1", false]], "stackinsertercapacity2 (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StackInserterCapacity2", false]], "start_position (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.start_position", false]], "start_time (fle.commons.models.timingmetrics attribute)": [[5, "fle.commons.models.TimingMetrics.start_time", false]], "state (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.state", false]], "static_items (fle.commons.models.productionflows attribute)": [[5, "fle.commons.models.ProductionFlows.static_items", false]], "staticentity (class in fle.env.entities)": [[6, "fle.env.entities.StaticEntity", false]], "status (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.status", false], [13, "fle.env.entities.Entity.status", false]], "status (fle.env.entities.entitygroup attribute)": [[6, "fle.env.entities.EntityGroup.status", false]], "status (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.status", false]], "steam_output_point (fle.env.entities.boiler attribute)": [[6, "fle.env.entities.Boiler.steam_output_point", false]], "steamengine (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteamEngine", false]], "steelchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelChest", false]], "steelfurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelFurnace", false]], "steelplate (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SteelPlate", false]], "steelprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SteelProcessing", false]], "step (fle.agents.models.completionresult attribute)": [[4, "fle.agents.models.CompletionResult.step", false]], "step (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.step", false]], "step() (fle.agents.agent_abc.agentabc method)": [[3, "fle.agents.agent_abc.AgentABC.step", false]], "stone (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Stone", false]], "stone (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Stone", false]], "stone (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Stone", false]], "stonebrick (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneBrick", false]], "stonefurnace (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneFurnace", false]], "stonewall (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StoneWall", false]], "stop_sequences (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.stop_sequences", false]], "storagetank (class in fle.env.entities)": [[6, "fle.env.entities.StorageTank", false]], "storagetank (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.StorageTank", false]], "storagetanks (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.StorageTanks", false]], "success (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.SUCCESS", false]], "success (fle.agents.models.taskresponse attribute)": [[4, "fle.agents.models.TaskResponse.success", false]], "sulfur (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Sulfur", false]], "sulfuricacid (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.SulfuricAcid", false]], "sulfuricacid (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.SulfuricAcid", false]], "sulfurprocessing (fle.env.game_types.technology attribute)": [[7, "fle.env.game_types.Technology.SulfurProcessing", false]], "system_prompt (fle.agents.agent_abc.agentabc attribute)": [[3, "fle.agents.agent_abc.AgentABC.system_prompt", false]], "task (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.task", false]], "taskabc (class in fle.eval.tasks)": [[12, "fle.eval.tasks.TaskABC", false]], "taskfactory (class in fle.eval.tasks)": [[12, "fle.eval.tasks.TaskFactory", false]], "taskresponse (class in fle.agents.models)": [[4, "fle.agents.models.TaskResponse", false]], "technologies (fle.commons.models.researchstate attribute)": [[5, "fle.commons.models.ResearchState.technologies", false]], "technology (class in fle.env.game_types)": [[7, "fle.env.game_types.Technology", false]], "technologystate (class in fle.commons.models)": [[5, "fle.commons.models.TechnologyState", false]], "temperature (fle.commons.models.generationparameters attribute)": [[5, "fle.commons.models.GenerationParameters.temperature", false]], "throughputtask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.ThroughputTask", false]], "ticks (fle.agents.models.response attribute)": [[4, "fle.agents.models.Response.ticks", false]], "ticks (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.ticks", false]], "tile_dimensions (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.tile_dimensions", false], [13, "fle.env.entities.Entity.tile_dimensions", false]], "tile_height (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.tile_height", false]], "tile_width (fle.env.entities.tiledimensions attribute)": [[6, "fle.env.entities.TileDimensions.tile_width", false]], "tiledimensions (class in fle.env.entities)": [[6, "fle.env.entities.TileDimensions", false]], "time_elapsed (fle.env.entities.inspectionresults attribute)": [[6, "fle.env.entities.InspectionResults.time_elapsed", false]], "timeout (fle.agents.models.completionreason attribute)": [[4, "fle.agents.models.CompletionReason.TIMEOUT", false]], "timestamp (fle.commons.models.gamestate attribute)": [[5, "fle.commons.models.GameState.timestamp", false]], "timing_metrics (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.timing_metrics", false]], "timingmetrics (class in fle.commons.models)": [[5, "fle.commons.models.TimingMetrics", false]], "to_bounding_box() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.to_bounding_box", false]], "to_dict() (fle.commons.models.productionflows method)": [[5, "fle.commons.models.ProductionFlows.to_dict", false]], "to_dict() (fle.commons.models.timingmetrics method)": [[5, "fle.commons.models.TimingMetrics.to_dict", false]], "to_dict() (fle.env.gym_env.action.action method)": [[0, "fle.env.gym_env.action.Action.to_dict", false]], "to_factorio_direction() (fle.env.instance.directioninternal class method)": [[9, "fle.env.instance.DirectionInternal.to_factorio_direction", false]], "to_instance() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.to_instance", false]], "to_raw() (fle.commons.models.gamestate method)": [[5, "fle.commons.models.GameState.to_raw", false]], "token_usage (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.token_usage", false]], "total_duration (fle.commons.models.timingmetrics property)": [[5, "fle.commons.models.TimingMetrics.total_duration", false]], "transportbelt (class in fle.env.entities)": [[6, "fle.env.entities.TransportBelt", false]], "transportbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.TransportBelt", false]], "trees (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.TREES", false]], "turret_ammo (fle.env.entities.gunturret attribute)": [[6, "fle.env.entities.GunTurret.turret_ammo", false]], "type (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.type", false], [13, "fle.env.entities.Entity.type", false]], "type (fle.env.entities.indexedposition attribute)": [[6, "fle.env.entities.IndexedPosition.type", false]], "type (fle.env.entities.ingredient attribute)": [[6, "fle.env.entities.Ingredient.type", false]], "unboundedthroughputtask (class in fle.eval.tasks)": [[12, "fle.eval.tasks.UnboundedThroughputTask", false]], "undergroundbelt (class in fle.env.entities)": [[6, "fle.env.entities.UndergroundBelt", false]], "undergroundbelt (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UndergroundBelt", false]], "undergroundpipe (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UndergroundPipe", false]], "unpause() (fle.env.instance.factorioinstance method)": [[1, "fle.env.instance.FactorioInstance.unpause", false], [9, "fle.env.instance.FactorioInstance.unpause", false]], "unpause() (fle.env.instance.gamecontrol method)": [[9, "fle.env.instance.GameControl.unpause", false]], "unwrap_after_deserialization() (in module fle.env.namespace)": [[10, "fle.env.namespace.unwrap_after_deserialization", false]], "up (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.UP", false]], "up (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.UP", false]], "up() (fle.env.entities.position method)": [[6, "fle.env.entities.Position.up", false]], "uranium235 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Uranium235", false]], "uranium238 (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Uranium238", false]], "uraniumfuelcell (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UraniumFuelCell", false]], "uraniumore (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UraniumOre", false]], "uraniumore (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.UraniumOre", false]], "uraniumore (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.UraniumOre", false]], "uraniumprocessing (fle.env.game_types.recipename attribute)": [[7, "fle.env.game_types.RecipeName.UraniumProcessing", false]], "utilitysciencepack (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.UtilitySciencePack", false]], "value (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.value", false]], "values() (fle.env.entities.inventory method)": [[6, "fle.env.entities.Inventory.values", false]], "verify() (fle.eval.tasks.defaulttask method)": [[12, "fle.eval.tasks.DefaultTask.verify", false]], "verify() (fle.eval.tasks.taskabc method)": [[12, "fle.eval.tasks.TaskABC.verify", false]], "verify() (fle.eval.tasks.throughputtask method)": [[12, "fle.eval.tasks.ThroughputTask.verify", false]], "verify() (fle.eval.tasks.unboundedthroughputtask method)": [[12, "fle.eval.tasks.UnboundedThroughputTask.verify", false]], "version (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.version", false]], "version_description (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.version_description", false]], "visits (fle.commons.models.program attribute)": [[5, "fle.commons.models.Program.visits", false]], "waiting_for_source_items (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_FOR_SOURCE_ITEMS", false]], "waiting_for_space_in_destination (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_FOR_SPACE_IN_DESTINATION", false]], "waiting_to_launch_rocket (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WAITING_TO_LAUNCH_ROCKET", false]], "wallgroup (class in fle.env.entities)": [[6, "fle.env.entities.WallGroup", false]], "warning (fle.env.entities.entityinfo attribute)": [[6, "fle.env.entities.EntityInfo.warning", false]], "warnings (fle.env.entities.entity attribute)": [[6, "fle.env.entities.Entity.warnings", false], [13, "fle.env.entities.Entity.warnings", false]], "water (fle.env.entities.layer attribute)": [[6, "fle.env.entities.Layer.WATER", false]], "water (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Water", false]], "water (fle.env.game_types.resourcename attribute)": [[7, "fle.env.game_types.ResourceName.Water", false]], "west (fle.env.entities.direction attribute)": [[6, "fle.env.entities.Direction.WEST", false]], "west (fle.env.instance.directioninternal attribute)": [[9, "fle.env.instance.DirectionInternal.WEST", false]], "width (fle.env.entities.buildingbox attribute)": [[6, "fle.env.entities.BuildingBox.width", false]], "width (fle.env.entities.dimensions attribute)": [[6, "fle.env.entities.Dimensions.width", false]], "width (fle.env.entities.entity property)": [[6, "fle.env.entities.Entity.width", false], [13, "fle.env.entities.Entity.width", false]], "width (fle.env.game_types.prototype property)": [[7, "fle.env.game_types.Prototype.WIDTH", false]], "width() (fle.env.entities.boundingbox method)": [[6, "fle.env.entities.BoundingBox.width", false]], "wood (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.Wood", false]], "wood (fle.env.game_types.resource attribute)": [[7, "fle.env.game_types.Resource.Wood", false]], "woodenchest (fle.env.game_types.prototype attribute)": [[7, "fle.env.game_types.Prototype.WoodenChest", false]], "working (fle.env.entities.entitystatus attribute)": [[6, "fle.env.entities.EntityStatus.WORKING", false]], "wrap_for_serialization() (in module fle.env.namespace)": [[10, "fle.env.namespace.wrap_for_serialization", false]], "x (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.x", false]], "y (fle.env.entities.position attribute)": [[6, "fle.env.entities.Position.y", false]]}, "objects": {"fle.agents": [[3, 0, 0, "-", "agent_abc"], [4, 0, 0, "-", "models"]], "fle.agents.agent_abc": [[3, 1, 1, "", "AgentABC"], [3, 4, 1, "", "create_default_agent_card"]], "fle.agents.agent_abc.AgentABC": [[3, 2, 1, "", "__init__"], [3, 2, 1, "", "check_step_completion"], [3, 3, 1, "", "conversation"], [3, 2, 1, "", "end"], [3, 2, 1, "", "get_agent_card"], [3, 3, 1, "", "model"], [3, 2, 1, "", "set_conversation"], [3, 2, 1, "", "step"], [3, 3, 1, "", "system_prompt"]], "fle.agents.models": [[4, 1, 1, "", "CompletionReason"], [4, 1, 1, "", "CompletionResult"], [4, 1, 1, "", "Response"], [4, 1, 1, "", "TaskResponse"]], "fle.agents.models.CompletionReason": [[4, 3, 1, "", "RUNTIME_ERROR"], [4, 3, 1, "", "SUCCESS"], [4, 3, 1, "", "TIMEOUT"]], "fle.agents.models.CompletionResult": [[4, 3, 1, "", "metadata"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "reason"], [4, 3, 1, "", "step"]], "fle.agents.models.Response": [[4, 3, 1, "", "achievements"], [4, 3, 1, "", "code"], [4, 3, 1, "", "created_at"], [4, 3, 1, "", "error"], [4, 3, 1, "", "flows"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "program_id"], [4, 3, 1, "", "response"], [4, 3, 1, "", "score"], [4, 3, 1, "", "step"], [4, 3, 1, "", "task"], [4, 3, 1, "", "ticks"]], "fle.agents.models.TaskResponse": [[4, 3, 1, "", "meta"], [4, 3, 1, "", "model_config"], [4, 3, 1, "", "success"]], "fle.commons": [[5, 0, 0, "-", "models"]], "fle.commons.models": [[5, 1, 1, "", "Conversation"], [5, 1, 1, "", "GameState"], [5, 1, 1, "", "GenerationParameters"], [5, 1, 1, "", "Message"], [5, 1, 1, "", "ProductionFlows"], [5, 1, 1, "", "ProfitConfig"], [5, 1, 1, "", "Program"], [5, 1, 1, "", "ResearchState"], [5, 1, 1, "", "SerializableFunction"], [5, 1, 1, "", "TechnologyState"], [5, 1, 1, "", "TimingMetrics"], [5, 4, 1, "", "filter_serializable_vars"]], "fle.commons.models.Conversation": [[5, 2, 1, "", "add_agent_message"], [5, 2, 1, "", "add_result"], [5, 2, 1, "", "add_user_message"], [5, 3, 1, "", "messages"], [5, 3, 1, "", "model_config"], [5, 2, 1, "", "parse_raw"], [5, 2, 1, "", "set_system_message"]], "fle.commons.models.GameState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "agent_messages"], [5, 3, 1, "", "entities"], [5, 2, 1, "", "from_instance"], [5, 3, 1, "", "inventories"], [5, 5, 1, "", "is_multiagent"], [5, 3, 1, "", "namespaces"], [5, 5, 1, "", "num_agents"], [5, 2, 1, "", "parse"], [5, 2, 1, "", "parse_agent_messages"], [5, 2, 1, "", "parse_raw"], [5, 3, 1, "", "research"], [5, 3, 1, "", "timestamp"], [5, 2, 1, "", "to_instance"], [5, 2, 1, "", "to_raw"]], "fle.commons.models.GenerationParameters": [[5, 3, 1, "", "frequency_penalty"], [5, 3, 1, "", "logit_bias"], [5, 3, 1, "", "max_tokens"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "n"], [5, 3, 1, "", "presence_penalty"], [5, 3, 1, "", "stop_sequences"], [5, 3, 1, "", "temperature"]], "fle.commons.models.Message": [[5, 3, 1, "", "content"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "role"]], "fle.commons.models.ProductionFlows": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "crafted"], [5, 2, 1, "", "from_dict"], [5, 2, 1, "", "get_new_flows"], [5, 3, 1, "", "harvested"], [5, 3, 1, "", "input"], [5, 2, 1, "", "is_valid"], [5, 3, 1, "", "output"], [5, 3, 1, "", "price_list"], [5, 3, 1, "", "static_items"], [5, 2, 1, "", "to_dict"]], "fle.commons.models.ProfitConfig": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "dynamic_profit_multiplier"], [5, 3, 1, "", "max_static_unit_profit_cap"]], "fle.commons.models.Program": [[5, 3, 1, "", "achievements"], [5, 3, 1, "", "advantage"], [5, 3, 1, "", "code"], [5, 3, 1, "", "completion_token_usage"], [5, 3, 1, "", "conversation"], [5, 3, 1, "", "created_at"], [5, 3, 1, "", "depth"], [5, 3, 1, "", "flows"], [5, 2, 1, "", "from_row"], [5, 2, 1, "", "get_step"], [5, 2, 1, "", "get_uct"], [5, 3, 1, "", "holdout_value"], [5, 3, 1, "", "id"], [5, 3, 1, "", "instance"], [5, 3, 1, "", "meta"], [5, 3, 1, "", "model"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "parent_id"], [5, 3, 1, "", "prompt_token_usage"], [5, 3, 1, "", "raw_reward"], [5, 3, 1, "", "response"], [5, 3, 1, "", "state"], [5, 3, 1, "", "ticks"], [5, 3, 1, "", "timing_metrics"], [5, 3, 1, "", "token_usage"], [5, 3, 1, "", "value"], [5, 3, 1, "", "version"], [5, 3, 1, "", "version_description"], [5, 3, 1, "", "visits"]], "fle.commons.models.ResearchState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "current_research"], [5, 3, 1, "", "progress"], [5, 3, 1, "", "research_progress"], [5, 3, 1, "", "research_queue"], [5, 3, 1, "", "technologies"]], "fle.commons.models.SerializableFunction": [[5, 2, 1, "", "__call__"], [5, 2, 1, "", "__getstate__"], [5, 2, 1, "", "__init__"], [5, 2, 1, "", "__setstate__"], [5, 2, 1, "", "__str__"], [5, 2, 1, "", "bind"], [5, 2, 1, "", "reconstruct"]], "fle.commons.models.TechnologyState": [[5, 2, 1, "", "__init__"], [5, 3, 1, "", "enabled"], [5, 3, 1, "", "ingredients"], [5, 3, 1, "", "level"], [5, 3, 1, "", "name"], [5, 3, 1, "", "prerequisites"], [5, 3, 1, "", "research_unit_count"], [5, 3, 1, "", "research_unit_energy"], [5, 3, 1, "", "researched"]], "fle.commons.models.TimingMetrics": [[5, 3, 1, "", "children"], [5, 5, 1, "", "duration"], [5, 3, 1, "", "end_time"], [5, 3, 1, "", "metadata"], [5, 3, 1, "", "model_config"], [5, 3, 1, "", "operation_name"], [5, 3, 1, "", "start_time"], [5, 2, 1, "", "to_dict"], [5, 5, 1, "", "total_duration"]], "fle.env": [[6, 0, 0, "-", "entities"], [7, 0, 0, "-", "game_types"], [8, 0, 0, "-", "gym_env"], [9, 0, 0, "-", "instance"], [10, 0, 0, "-", "namespace"]], "fle.env.entities": [[6, 1, 1, "", "Accumulator"], [6, 1, 1, "", "AdvancedAssemblingMachine"], [6, 1, 1, "", "Ammo"], [6, 1, 1, "", "AssemblingMachine"], [6, 1, 1, "", "BeltGroup"], [6, 1, 1, "", "Boiler"], [6, 1, 1, "", "BoundingBox"], [6, 1, 1, "", "BuildingBox"], [6, 1, 1, "", "BurnerInserter"], [6, 1, 1, "", "BurnerMiningDrill"], [6, 1, 1, "", "BurnerType"], [6, 1, 1, "", "ChemicalPlant"], [6, 1, 1, "", "Chest"], [6, 1, 1, "", "Dimensions"], [6, 1, 1, "", "Direction"], [6, 1, 1, "", "Electric"], [6, 1, 1, "", "ElectricFurnace"], [6, 1, 1, "", "ElectricMiningDrill"], [6, 1, 1, "", "ElectricalProducer"], [6, 1, 1, "", "ElectricityGroup"], [6, 1, 1, "", "ElectricityPole"], [6, 1, 1, "", "EnergySource"], [13, 1, 1, "", "Entity"], [6, 1, 1, "", "EntityCore"], [6, 1, 1, "", "EntityGroup"], [6, 1, 1, "", "EntityInfo"], [6, 1, 1, "", "EntityStatus"], [6, 1, 1, "", "FilterInserter"], [6, 1, 1, "", "Filtered"], [6, 1, 1, "", "FluidHandler"], [6, 1, 1, "", "Furnace"], [6, 1, 1, "", "Generator"], [6, 1, 1, "", "GunTurret"], [6, 1, 1, "", "HeatExchanger"], [6, 1, 1, "", "IndexedPosition"], [6, 1, 1, "", "Ingredient"], [6, 1, 1, "", "Inserter"], [6, 1, 1, "", "InspectionResults"], [6, 1, 1, "", "Inventory"], [6, 1, 1, "", "Lab"], [6, 1, 1, "", "Layer"], [6, 1, 1, "", "MiningDrill"], [6, 1, 1, "", "MultiFluidHandler"], [6, 1, 1, "", "OffshorePump"], [6, 1, 1, "", "OilRefinery"], [6, 1, 1, "", "Pipe"], [6, 1, 1, "", "PipeGroup"], [6, 1, 1, "", "Position"], [6, 1, 1, "", "Product"], [6, 1, 1, "", "Pump"], [6, 1, 1, "", "PumpJack"], [6, 1, 1, "", "Rail"], [6, 1, 1, "", "Reactor"], [6, 1, 1, "", "Recipe"], [6, 1, 1, "", "ResourcePatch"], [6, 1, 1, "", "Rocket"], [6, 1, 1, "", "RocketSilo"], [6, 1, 1, "", "SolarPanel"], [6, 1, 1, "", "Splitter"], [6, 1, 1, "", "StaticEntity"], [6, 1, 1, "", "StorageTank"], [6, 1, 1, "", "TileDimensions"], [6, 1, 1, "", "TransportBelt"], [6, 1, 1, "", "UndergroundBelt"], [6, 1, 1, "", "WallGroup"]], "fle.env.entities.Accumulator": [[6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.AdvancedAssemblingMachine": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Ammo": [[6, 3, 1, "", "magazine_size"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "reload_time"]], "fle.env.entities.AssemblingMachine": [[6, 3, 1, "", "assembling_machine_input"], [6, 3, 1, "", "assembling_machine_modules"], [6, 3, 1, "", "assembling_machine_output"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "recipe"]], "fle.env.entities.BeltGroup": [[6, 3, 1, "", "belts"], [6, 3, 1, "", "inputs"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "outputs"]], "fle.env.entities.Boiler": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "steam_output_point"]], "fle.env.entities.BoundingBox": [[6, 5, 1, "", "center"], [6, 2, 1, "", "height"], [6, 3, 1, "", "left_bottom"], [6, 3, 1, "", "left_top"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "right_bottom"], [6, 3, 1, "", "right_top"], [6, 2, 1, "", "width"]], "fle.env.entities.BuildingBox": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.BurnerInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.BurnerType": [[6, 3, 1, "", "fuel"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ChemicalPlant": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Chest": [[6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Dimensions": [[6, 3, 1, "", "height"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "width"]], "fle.env.entities.Direction": [[6, 3, 1, "", "DOWN"], [6, 3, 1, "", "EAST"], [6, 3, 1, "", "LEFT"], [6, 3, 1, "", "NORTH"], [6, 3, 1, "", "RIGHT"], [6, 3, 1, "", "SOUTH"], [6, 3, 1, "", "UP"], [6, 3, 1, "", "WEST"], [6, 2, 1, "", "from_string"]], "fle.env.entities.Electric": [[6, 3, 1, "", "electrical_id"], [6, 3, 1, "", "model_config"]], "fle.env.entities.ElectricFurnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricMiningDrill": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.ElectricalProducer": [[6, 3, 1, "", "electric_output_flow_limit"], [6, 3, 1, "", "energy_source"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "production"]], "fle.env.entities.ElectricityGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "poles"]], "fle.env.entities.ElectricityPole": [[6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.EnergySource": [[6, 3, 1, "", "buffer_capacity"], [6, 3, 1, "", "drain"], [6, 3, 1, "", "input_flow_limit"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_flow_limit"]], "fle.env.entities.Entity": [[13, 3, 1, "", "dimensions"], [13, 3, 1, "", "energy"], [13, 3, 1, "", "health"], [13, 5, 1, "", "height"], [13, 3, 1, "", "id"], [13, 3, 1, "", "model_config"], [13, 3, 1, "", "prototype"], [13, 3, 1, "", "status"], [13, 3, 1, "", "tile_dimensions"], [13, 3, 1, "", "type"], [13, 3, 1, "", "warnings"], [13, 5, 1, "", "width"]], "fle.env.entities.EntityCore": [[6, 3, 1, "", "direction"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"]], "fle.env.entities.EntityGroup": [[6, 3, 1, "", "id"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "status"]], "fle.env.entities.EntityInfo": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "direction"], [6, 3, 1, "", "end_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "position"], [6, 3, 1, "", "quantity"], [6, 3, 1, "", "start_position"], [6, 3, 1, "", "status"], [6, 3, 1, "", "warning"]], "fle.env.entities.EntityStatus": [[6, 3, 1, "", "CHARGING"], [6, 3, 1, "", "DISCHARGING"], [6, 3, 1, "", "EMPTY"], [6, 3, 1, "", "FLUID_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "FULLY_CHARGED"], [6, 3, 1, "", "FULL_BURNT_RESULT_OUTPUT"], [6, 3, 1, "", "FULL_OUTPUT"], [6, 3, 1, "", "ITEM_INGREDIENT_SHORTAGE"], [6, 3, 1, "", "LAUNCHING_ROCKET"], [6, 3, 1, "", "LOW_INPUT_FLUID"], [6, 3, 1, "", "LOW_POWER"], [6, 3, 1, "", "LOW_TEMPERATURE"], [6, 3, 1, "", "MISSING_REQUIRED_FLUID"], [6, 3, 1, "", "MISSING_SCIENCE_PACKS"], [6, 3, 1, "", "NORMAL"], [6, 3, 1, "", "NOT_CONNECTED"], [6, 3, 1, "", "NOT_CONNECTED_TO_RAIL"], [6, 3, 1, "", "NOT_PLUGGED_IN_ELECTRIC_NETWORK"], [6, 3, 1, "", "NO_AMMO"], [6, 3, 1, "", "NO_FUEL"], [6, 3, 1, "", "NO_INGREDIENTS"], [6, 3, 1, "", "NO_INPUT_FLUID"], [6, 3, 1, "", "NO_MINABLE_RESOURCES"], [6, 3, 1, "", "NO_POWER"], [6, 3, 1, "", "NO_RECIPE"], [6, 3, 1, "", "NO_RESEARCH_IN_PROGRESS"], [6, 3, 1, "", "PREPARING_ROCKET_FOR_LAUNCH"], [6, 3, 1, "", "WAITING_FOR_SOURCE_ITEMS"], [6, 3, 1, "", "WAITING_FOR_SPACE_IN_DESTINATION"], [6, 3, 1, "", "WAITING_TO_LAUNCH_ROCKET"], [6, 3, 1, "", "WORKING"], [6, 2, 1, "", "from_int"], [6, 2, 1, "", "from_string"]], "fle.env.entities.FilterInserter": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Filtered": [[6, 3, 1, "", "filter"], [6, 3, 1, "", "model_config"]], "fle.env.entities.FluidHandler": [[6, 3, 1, "", "connection_points"], [6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "model_config"]], "fle.env.entities.Furnace": [[6, 3, 1, "", "furnace_result"], [6, 3, 1, "", "furnace_source"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Generator": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.GunTurret": [[6, 3, 1, "", "kills"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "turret_ammo"]], "fle.env.entities.HeatExchanger": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.IndexedPosition": [[6, 2, 1, "", "__init__"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "type"]], "fle.env.entities.Ingredient": [[6, 3, 1, "", "count"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "type"]], "fle.env.entities.Inserter": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "pickup_position"]], "fle.env.entities.InspectionResults": [[6, 3, 1, "", "entities"], [6, 2, 1, "", "get_entities"], [6, 2, 1, "", "get_entity"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "player_position"], [6, 3, 1, "", "radius"], [6, 3, 1, "", "time_elapsed"]], "fle.env.entities.Inventory": [[6, 2, 1, "", "get"], [6, 2, 1, "", "items"], [6, 2, 1, "", "keys"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "serialize_model"], [6, 2, 1, "", "values"]], "fle.env.entities.Lab": [[6, 3, 1, "", "lab_input"], [6, 3, 1, "", "lab_modules"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "research"]], "fle.env.entities.Layer": [[6, 3, 1, "", "ALL"], [6, 3, 1, "", "CONNECTIONS"], [6, 3, 1, "", "ELECTRICITY"], [6, 3, 1, "", "ENTITIES"], [6, 3, 1, "", "GRID"], [6, 3, 1, "", "LABELS"], [6, 3, 1, "", "NATURAL"], [6, 3, 1, "", "NONE"], [6, 3, 1, "", "ORIGIN"], [6, 3, 1, "", "PLAYER"], [6, 3, 1, "", "RESOURCES"], [6, 3, 1, "", "ROCKS"], [6, 3, 1, "", "TREES"], [6, 3, 1, "", "WATER"]], "fle.env.entities.MiningDrill": [[6, 3, 1, "", "drop_position"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "resources"]], "fle.env.entities.MultiFluidHandler": [[6, 3, 1, "", "fluid_box"], [6, 3, 1, "", "fluid_systems"], [6, 3, 1, "", "input_connection_points"], [6, 3, 1, "", "input_fluids"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "output_connection_points"], [6, 3, 1, "", "output_fluids"]], "fle.env.entities.OffshorePump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.OilRefinery": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Pipe": [[6, 3, 1, "", "contents"], [6, 3, 1, "", "flow_rate"], [6, 3, 1, "", "fluid"], [6, 3, 1, "", "fluidbox_id"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PipeGroup": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "pipes"]], "fle.env.entities.Position": [[6, 2, 1, "", "__init__"], [6, 2, 1, "", "above"], [6, 2, 1, "", "below"], [6, 2, 1, "", "distance"], [6, 2, 1, "", "down"], [6, 2, 1, "", "is_close"], [6, 2, 1, "", "left"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "parse_args"], [6, 2, 1, "", "right"], [6, 2, 1, "", "to_bounding_box"], [6, 2, 1, "", "up"], [6, 3, 1, "", "x"], [6, 3, 1, "", "y"]], "fle.env.entities.Product": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "probability"]], "fle.env.entities.Pump": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.PumpJack": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Rail": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Reactor": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Recipe": [[6, 3, 1, "", "category"], [6, 3, 1, "", "enabled"], [6, 3, 1, "", "energy"], [6, 3, 1, "", "ingredients"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "products"]], "fle.env.entities.ResourcePatch": [[6, 3, 1, "", "bounding_box"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"], [6, 3, 1, "", "size"]], "fle.env.entities.Rocket": [[6, 3, 1, "", "launch_progress"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "payload"]], "fle.env.entities.RocketSilo": [[6, 3, 1, "", "launch_count"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "rocket_inventory"], [6, 3, 1, "", "rocket_parts"], [6, 3, 1, "", "rocket_progress"]], "fle.env.entities.SolarPanel": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.Splitter": [[6, 3, 1, "", "input_positions"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_positions"]], "fle.env.entities.StaticEntity": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "neighbours"]], "fle.env.entities.StorageTank": [[6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.TileDimensions": [[6, 3, 1, "", "model_config"], [6, 3, 1, "", "tile_height"], [6, 3, 1, "", "tile_width"]], "fle.env.entities.TransportBelt": [[6, 3, 1, "", "input_position"], [6, 3, 1, "", "inventory"], [6, 3, 1, "", "is_source"], [6, 3, 1, "", "is_terminus"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"], [6, 3, 1, "", "output_position"]], "fle.env.entities.UndergroundBelt": [[6, 3, 1, "", "connected_to"], [6, 3, 1, "", "is_input"], [6, 3, 1, "", "model_config"], [6, 2, 1, "", "model_post_init"]], "fle.env.entities.WallGroup": [[6, 3, 1, "", "entities"], [6, 3, 1, "", "model_config"], [6, 3, 1, "", "name"]], "fle.env.game_types": [[7, 1, 1, "", "Prototype"], [7, 1, 1, "", "PrototypeMetaclass"], [7, 1, 1, "", "RecipeName"], [7, 1, 1, "", "Resource"], [7, 1, 1, "", "ResourceName"], [7, 1, 1, "", "Technology"]], "fle.env.game_types.Prototype": [[7, 3, 1, "", "Accumulator"], [7, 3, 1, "", "AdvancedCircuit"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "AssemblingMachine1"], [7, 3, 1, "", "AssemblingMachine2"], [7, 3, 1, "", "AssemblingMachine3"], [7, 3, 1, "", "AutomationSciencePack"], [7, 3, 1, "", "Battery"], [7, 3, 1, "", "BeltGroup"], [7, 3, 1, "", "BigElectricPole"], [7, 3, 1, "", "Boiler"], [7, 3, 1, "", "BurnerInserter"], [7, 3, 1, "", "BurnerMiningDrill"], [7, 3, 1, "", "Centrifuge"], [7, 3, 1, "", "ChemicalPlant"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "Coal"], [7, 3, 1, "", "CoalLiquifaction"], [7, 3, 1, "", "Concrete"], [7, 3, 1, "", "CopperCable"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CopperPlate"], [7, 3, 1, "", "ElectricEngineUnit"], [7, 3, 1, "", "ElectricFurnace"], [7, 3, 1, "", "ElectricMiningDrill"], [7, 3, 1, "", "ElectricityGroup"], [7, 3, 1, "", "ElectronicCircuit"], [7, 3, 1, "", "EmptyBarrel"], [7, 3, 1, "", "EngineUnit"], [7, 3, 1, "", "ExpressInserter"], [7, 3, 1, "", "ExpressSplitter"], [7, 3, 1, "", "ExpressTransportBelt"], [7, 3, 1, "", "ExpressUndergroundBelt"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "FastSplitter"], [7, 3, 1, "", "FastTransportBelt"], [7, 3, 1, "", "FastUndergroundBelt"], [7, 3, 1, "", "FilterInserter"], [7, 3, 1, "", "FirearmMagazine"], [7, 3, 1, "", "FlyingRobotFrame"], [7, 3, 1, "", "Gate"], [7, 3, 1, "", "Grenade"], [7, 3, 1, "", "GunTurret"], [7, 5, 1, "", "HEIGHT"], [7, 3, 1, "", "HeatExchanger"], [7, 3, 1, "", "HeatPipe"], [7, 3, 1, "", "HeavyOil"], [7, 3, 1, "", "Inserter"], [7, 3, 1, "", "IronChest"], [7, 3, 1, "", "IronGearWheel"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "IronPlate"], [7, 3, 1, "", "IronStick"], [7, 3, 1, "", "Lab"], [7, 3, 1, "", "LightOil"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LongHandedInserter"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MediumElectricPole"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "NuclearReactor"], [7, 3, 1, "", "OffshorePump"], [7, 3, 1, "", "OilRefinery"], [7, 3, 1, "", "PetroleumGas"], [7, 3, 1, "", "PiercingRoundsMagazine"], [7, 3, 1, "", "Pipe"], [7, 3, 1, "", "PipeGroup"], [7, 3, 1, "", "PlasticBar"], [7, 3, 1, "", "ProcessingUnit"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "Pump"], [7, 3, 1, "", "PumpJack"], [7, 3, 1, "", "Radar"], [7, 3, 1, "", "Rail"], [7, 3, 1, "", "Rocket"], [7, 3, 1, "", "RocketControlUnit"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketPart"], [7, 3, 1, "", "RocketSilo"], [7, 3, 1, "", "Satellite"], [7, 3, 1, "", "SmallElectricPole"], [7, 3, 1, "", "SmallLamp"], [7, 3, 1, "", "SolarPanel"], [7, 3, 1, "", "SolidFuel"], [7, 3, 1, "", "SpaceSciencePack"], [7, 3, 1, "", "Splitter"], [7, 3, 1, "", "StackFilterInserter"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "SteamEngine"], [7, 3, 1, "", "SteelChest"], [7, 3, 1, "", "SteelFurnace"], [7, 3, 1, "", "SteelPlate"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "StoneBrick"], [7, 3, 1, "", "StoneFurnace"], [7, 3, 1, "", "StoneWall"], [7, 3, 1, "", "StorageTank"], [7, 3, 1, "", "Sulfur"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "TransportBelt"], [7, 3, 1, "", "UndergroundBelt"], [7, 3, 1, "", "UndergroundPipe"], [7, 3, 1, "", "Uranium235"], [7, 3, 1, "", "Uranium238"], [7, 3, 1, "", "UraniumFuelCell"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "UtilitySciencePack"], [7, 5, 1, "", "WIDTH"], [7, 3, 1, "", "Wood"], [7, 3, 1, "", "WoodenChest"], [7, 2, 1, "", "__init__"]], "fle.env.game_types.RecipeName": [[7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "BasicOilProcessing"], [7, 3, 1, "", "CoalLiquefaction"], [7, 3, 1, "", "EmptyCrudeOilBarrel"], [7, 3, 1, "", "EmptyHeavyOilBarrel"], [7, 3, 1, "", "EmptyLightOilBarrel"], [7, 3, 1, "", "EmptyLubricantBarrel"], [7, 3, 1, "", "EmptyPetroleumGasBarrel"], [7, 3, 1, "", "EmptySulfuricAcidBarrel"], [7, 3, 1, "", "EmptyWaterBarrel"], [7, 3, 1, "", "FillCrudeOilBarrel"], [7, 3, 1, "", "FillHeavyOilBarrel"], [7, 3, 1, "", "FillLightOilBarrel"], [7, 3, 1, "", "FillLubricantBarrel"], [7, 3, 1, "", "FillPetroleumGasBarrel"], [7, 3, 1, "", "FillSulfuricAcidBarrel"], [7, 3, 1, "", "FillWaterBarrel"], [7, 3, 1, "", "HeavyOilCracking"], [7, 3, 1, "", "LightOilCracking"], [7, 3, 1, "", "NuclearFuelReprocessing"], [7, 3, 1, "", "SolidFuelFromHeavyOil"], [7, 3, 1, "", "SolidFuelFromLightOil"], [7, 3, 1, "", "SolidFuelFromPetroleumGas"], [7, 3, 1, "", "SulfuricAcid"], [7, 3, 1, "", "UraniumProcessing"]], "fle.env.game_types.Resource": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"], [7, 3, 1, "", "Wood"]], "fle.env.game_types.ResourceName": [[7, 3, 1, "", "Coal"], [7, 3, 1, "", "CopperOre"], [7, 3, 1, "", "CrudeOil"], [7, 3, 1, "", "IronOre"], [7, 3, 1, "", "Stone"], [7, 3, 1, "", "UraniumOre"], [7, 3, 1, "", "Water"]], "fle.env.game_types.Technology": [[7, 3, 1, "", "AdvancedElectronics"], [7, 3, 1, "", "AdvancedElectronics2"], [7, 3, 1, "", "AdvancedMaterialProcessing"], [7, 3, 1, "", "AdvancedMaterialProcessing2"], [7, 3, 1, "", "AdvancedOilProcessing"], [7, 3, 1, "", "Automation"], [7, 3, 1, "", "Automation2"], [7, 3, 1, "", "Automation3"], [7, 3, 1, "", "BarrelFilling"], [7, 3, 1, "", "BatteryTechnology"], [7, 3, 1, "", "CharacterInventorySlots"], [7, 3, 1, "", "ChemicalSciencePack"], [7, 3, 1, "", "ElectricEnergy"], [7, 3, 1, "", "ElectricEnergy2"], [7, 3, 1, "", "ElectricEngineering"], [7, 3, 1, "", "Electronics"], [7, 3, 1, "", "EnergyShield"], [7, 3, 1, "", "EnergyShield2"], [7, 3, 1, "", "FastInserter"], [7, 3, 1, "", "Grenades"], [7, 3, 1, "", "Landfill"], [7, 3, 1, "", "Logistics"], [7, 3, 1, "", "Logistics2"], [7, 3, 1, "", "Logistics3"], [7, 3, 1, "", "LogisticsSciencePack"], [7, 3, 1, "", "LowDensityStructure"], [7, 3, 1, "", "Lubricant"], [7, 3, 1, "", "MilitaryScience"], [7, 3, 1, "", "MilitarySciencePack"], [7, 3, 1, "", "ModularArmor"], [7, 3, 1, "", "NightVision"], [7, 3, 1, "", "NuclearPower"], [7, 3, 1, "", "OilProcessing"], [7, 3, 1, "", "Plastics"], [7, 3, 1, "", "PowerArmor"], [7, 3, 1, "", "PowerArmor2"], [7, 3, 1, "", "ProductionSciencePack"], [7, 3, 1, "", "ProductivityModule"], [7, 3, 1, "", "ProductivityModule2"], [7, 3, 1, "", "ProductivityModule3"], [7, 3, 1, "", "RailwayTransportation"], [7, 3, 1, "", "ResearchSpeed"], [7, 3, 1, "", "Robotics"], [7, 3, 1, "", "RocketControl"], [7, 3, 1, "", "RocketFuel"], [7, 3, 1, "", "RocketSiloTechnology"], [7, 3, 1, "", "SolarEnergy"], [7, 3, 1, "", "SpaceScience"], [7, 3, 1, "", "StackInserter"], [7, 3, 1, "", "StackInserterCapacity1"], [7, 3, 1, "", "StackInserterCapacity2"], [7, 3, 1, "", "SteelProcessing"], [7, 3, 1, "", "StorageTanks"], [7, 3, 1, "", "SulfurProcessing"]], "fle.env.gym_env.action": [[0, 1, 1, "", "Action"]], "fle.env.gym_env.action.Action": [[0, 2, 1, "", "__init__"], [0, 3, 1, "", "agent_idx"], [0, 3, 1, "", "code"], [0, 3, 1, "", "game_state"], [0, 2, 1, "", "to_dict"]], "fle.env.gym_env.registry": [[1, 4, 1, "", "get_environment_info"], [1, 4, 1, "", "list_available_environments"], [1, 4, 1, "", "register_all_environments"]], "fle.env.instance": [[9, 1, 1, "", "DirectionInternal"], [1, 1, 1, "", "FactorioInstance"], [9, 1, 1, "", "GameControl"]], "fle.env.instance.DirectionInternal": [[9, 3, 1, "", "DOWN"], [9, 3, 1, "", "EAST"], [9, 3, 1, "", "LEFT"], [9, 3, 1, "", "NORTH"], [9, 3, 1, "", "RIGHT"], [9, 3, 1, "", "SOUTH"], [9, 3, 1, "", "UP"], [9, 3, 1, "", "WEST"], [9, 2, 1, "", "from_factorio_direction"], [9, 2, 1, "", "next_clockwise"], [9, 2, 1, "", "next_counterclockwise"], [9, 2, 1, "", "opposite"], [9, 2, 1, "", "to_factorio_direction"]], "fle.env.instance.FactorioInstance": [[1, 2, 1, "", "__init__"], [1, 2, 1, "", "cleanup"], [1, 2, 1, "", "connect_to_server"], [1, 2, 1, "", "eval"], [1, 2, 1, "", "eval_with_error"], [1, 5, 1, "", "first_namespace"], [1, 2, 1, "", "get_elapsed_ticks"], [1, 2, 1, "", "get_speed"], [1, 2, 1, "", "get_system_prompt"], [1, 2, 1, "", "get_warnings"], [1, 2, 1, "", "initialise"], [1, 5, 1, "", "is_multiagent"], [1, 5, 1, "", "namespace"], [1, 3, 1, "", "namespace_class"], [1, 2, 1, "", "pause"], [1, 2, 1, "id0", "reset"], [1, 2, 1, "", "set_speed"], [1, 2, 1, "", "set_speed_and_unpause"], [1, 2, 1, "", "unpause"]], "fle.env.instance.GameControl": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "get_elapsed_ticks"], [9, 2, 1, "", "get_speed"], [9, 2, 1, "", "is_paused"], [9, 2, 1, "", "pause"], [9, 2, 1, "", "pause_at_speed"], [9, 2, 1, "", "reset_to_defaults"], [9, 2, 1, "", "set_speed"], [9, 2, 1, "", "set_speed_and_unpause"], [9, 2, 1, "", "unpause"]], "fle.env.namespace": [[10, 1, 1, "", "FactorioNamespace"], [10, 1, 1, "", "LoopContext"], [10, 4, 1, "", "unwrap_after_deserialization"], [10, 4, 1, "", "wrap_for_serialization"]], "fle.env.namespace.FactorioNamespace": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "eval_with_timeout"], [10, 2, 1, "", "execute_body"], [10, 2, 1, "", "execute_node"], [10, 2, 1, "", "get_functions"], [10, 2, 1, "", "get_messages"], [10, 2, 1, "", "load"], [10, 2, 1, "", "load_messages"], [10, 2, 1, "", "log"], [10, 2, 1, "", "reset"]], "fle.env.namespace.LoopContext": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "enter_loop"], [10, 2, 1, "", "exit_loop"], [10, 2, 1, "", "handle_break"], [10, 2, 1, "", "handle_continue"]], "fle.eval": [[11, 0, 0, "-", "algorithms"], [12, 0, 0, "-", "tasks"]], "fle.eval.tasks": [[12, 1, 1, "", "DefaultTask"], [12, 1, 1, "", "TaskABC"], [12, 1, 1, "", "TaskFactory"], [12, 1, 1, "", "ThroughputTask"], [12, 1, 1, "", "UnboundedThroughputTask"]], "fle.eval.tasks.DefaultTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskABC": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "get_agent_instructions"], [12, 2, 1, "", "setup"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.TaskFactory": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "create_task"]], "fle.eval.tasks.ThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]], "fle.eval.tasks.UnboundedThroughputTask": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "enhance_response_with_task_output"], [12, 2, 1, "", "setup_instance"], [12, 2, 1, "", "verify"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "terms": {"": [3, 6, 14, 15, 17, 18, 26, 29], "0": [0, 1, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 29, 30], "00": 16, "00z": 16, "01": 16, "01t00": 16, "01t01": 16, "02": 19, "05": [19, 20], "1": [0, 1, 5, 6, 7, 9, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28], "10": [0, 1, 5, 9, 15, 16, 18, 19, 20, 21, 23, 24, 26, 27, 28, 30], "100": [12, 15, 17, 18, 19, 20, 21], "1000": [13, 15, 17, 19, 20, 21], "10000": [0, 17], "1000000": 0, "1024": [6, 21], "110": [18, 23], "128": [6, 21], "139": 21, "15": [14, 16, 19], "150": [13, 16], "16": [1, 6, 13, 17, 19], "19": 21, "2": [6, 7, 9, 13, 16, 19, 20, 21, 23, 24], "20": [18, 19, 20, 21, 27, 30], "200": [18, 21], "2000": [17, 19, 20, 21], "2024": 16, "2047": 6, "215": 21, "235": 7, "238": 7, "24": [1, 6, 22], "250": 1, "255": 21, "256": [6, 21], "264": 21, "2666": 24, "27": [13, 19, 24], "27000": [1, 9], "28": [13, 19, 24], "2d": 21, "3": [7, 13, 14, 16, 18, 19, 20, 21, 23, 24], "30": [16, 19, 20, 30], "300": 21, "30000": 24, "32": 6, "34197": 23, "3600": 17, "4": [6, 9, 13, 19, 24], "400": 21, "41": 5, "42": 18, "45": 19, "5": [5, 6, 13, 15, 19, 20, 21, 24], "50": [12, 17, 28], "500": [14, 17], "5000": 17, "512": [6, 21], "520": 21, "5432": 16, "59": [13, 19, 24], "6": [6, 9, 19, 21], "60": [1, 9, 12, 17], "61": [13, 19, 24], "64": 6, "65": 21, "6666666667": 24, "67": 13, "69": 21, "7": [20, 21], "70": [20, 21], "75": [13, 19, 20, 21, 24], "8": [6, 15, 19, 20, 21], "80": [20, 21], "85": [20, 21], "9": 21, "90": [20, 21], "95": [19, 20], "A": [3, 6, 17], "For": [0, 16, 22, 23], "If": [1, 29], "It": [6, 29, 30], "No": [18, 19, 23], "Not": [26, 28, 29, 30], "Or": 12, "The": [0, 1, 3, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "These": [1, 9], "To": 23, "With": [18, 23, 30], "_": [15, 18, 20], "__call__": [5, 14, 18], "__getstate__": 5, "__init__": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 19, 20, 21], "__setstate__": 5, "__str__": 5, "_analyze_connect": 21, "_analyze_visual_data": 21, "_calculate_density_map": 21, "_classify_ent": 21, "_classify_resourc": 21, "_default_construction_behavior": 20, "_default_research_behavior": 20, "_default_resource_behavior": 20, "_detect_ent": 21, "_detect_resource_patch": 21, "_estimate_resource_s": 21, "_extract_dominant_color": 21, "_extract_spatial_featur": 21, "_generate_action_cod": 15, "_handle_collection_task": 20, "_handle_coordination_request": 20, "_handle_infrastructure_task": 20, "_handle_research_plan": 20, "_handle_resource_request": 20, "_handle_task_complet": 20, "_initial_coordin": 20, "_initial_setup": 19, "_initial_visual_explor": 21, "_initialize_ag": 20, "_is_entity_pixel": 21, "_is_resource_region": 21, "_monitor_and_optim": 19, "_monitor_min": 15, "_monitoring_and_optim": 20, "_multiplayer_": 23, "_must_": 14, "_process_messag": 20, "_setup_min": [15, 19], "_task_distribut": 20, "_tools_": 14, "_visual_monitor": 21, "_visual_setup": 21, "a2a": 3, "abl": 24, "about": [0, 1, 12, 13, 16, 24, 30], "abov": 6, "absolut": 6, "abstract": [3, 15, 24], "accept": [6, 26, 28], "access": [0, 1, 16], "account": [26, 28, 29], "accru": 10, "accumul": [2, 6, 7], "accuraci": 21, "achiev": [4, 5, 12, 17], "acid": [6, 7], "across": [1, 15, 21, 22], "act": [15, 19, 20, 21, 24], "action": [1, 9, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25], "action1": 16, "action2": 16, "action3": 16, "action_0": 0, "action_1": 0, "activ": 23, "actual": [0, 26, 28], "adapt": [14, 15, 17], "add": [0, 5, 12, 14, 19, 21, 23, 24, 26], "add_agent_messag": 5, "add_result": 5, "add_user_messag": 5, "addit": [16, 18, 23], "address": [1, 9, 23], "adjust": [15, 17, 20, 21, 22], "advanc": [7, 14, 19, 20, 21, 23, 25], "advanced_circuit_throughput": 1, "advancedassemblingmachin": [2, 6, 7], "advancedcircuit": 7, "advancedelectron": 7, "advancedelectronics2": 7, "advancedmaterialprocess": 7, "advancedmaterialprocessing2": 7, "advancedoilprocess": 7, "advantag": 5, "affect": [1, 9, 14], "after": [5, 24, 28], "ag": 23, "against": 17, "agent": [1, 9, 10, 12, 13, 14, 16, 17, 18, 22, 23, 24, 25, 26, 28, 29, 30], "agent_abc": [2, 15, 19, 20, 21], "agent_count": 20, "agent_idx": [0, 1, 9, 12, 15, 19, 20, 21], "agent_index": 10, "agent_instruct": 12, "agent_messag": 5, "agent_specialization_effect": 20, "agent_typ": [15, 16, 19, 20, 21], "agentabc": [2, 3], "agentcard": 3, "alert": [1, 9], "algorithm": [2, 15, 20, 21], "alia": [1, 9], "align": 14, "all": [0, 1, 2, 5, 6, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 27, 28, 29], "all_technologies_research": [1, 9], "all_technology_reserach": 12, "allow": [1, 6, 13, 17, 18, 22, 26, 28, 29, 30], "also": 6, "alwai": [18, 27, 29, 30], "ammo": [2, 6, 7], "among": 20, "amount": [14, 18], "an": [1, 4, 5, 6, 7, 9, 12, 14, 15, 16, 22, 24, 25, 26, 29, 30], "analysi": [16, 25, 29], "analyz": [14, 15, 20, 21, 29], "ani": [0, 1, 4, 5, 6, 13, 15, 19, 20, 21], "annot": [10, 14], "ant": 23, "anthrop": 23, "anthropic_api_kei": 23, "api": [18, 24], "append": [15, 20, 21], "applic": 29, "approach": 15, "appropri": [17, 18, 26, 30], "ar": [0, 1, 5, 9, 14, 15, 17, 18, 22, 23, 24, 30], "arbitrary_types_allow": [5, 6], "architectur": 25, "area": [14, 18, 19, 30], "arg": [3, 5, 6, 10, 15, 18], "arg1": 14, "arg2": 14, "argument": 6, "armor": 7, "around": [14, 18], "arrai": 21, "assembl": [6, 7, 14, 20], "assembling_machine_input": 6, "assembling_machine_modul": 6, "assembling_machine_output": 6, "assemblingmachin": [2, 6, 7, 13], "assemblingmachine1": 7, "assemblingmachine2": 7, "assemblingmachine3": 7, "assert": [0, 15, 17, 18, 24], "assign": [20, 24], "assmbl": 6, "ast": 10, "async": 3, "attribut": [5, 6, 10], "auto": 14, "autodoc": [], "autom": [0, 7, 13, 16, 17, 19, 20, 24], "automat": [1, 14, 16, 17, 18, 22, 24], "automation2": 7, "automation3": 7, "automation_science_pack_throughput": 1, "automationsciencepack": 7, "avail": [0, 9, 13, 14, 17, 18, 19, 20, 22, 24, 26, 27, 28, 30], "averag": [16, 19, 20], "avg_query_tim": 16, "avoid": 14, "axi": 21, "b": 23, "b64decod": 21, "back": [1, 9, 10, 14], "backend": 16, "background": 21, "backup": 25, "backup_id": 16, "backward": 18, "balanc": 17, "bar": 7, "barrel": [6, 7], "barrelfil": 7, "base": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 17, 18, 19, 21, 25], "base64": [13, 21], "basemodel": [4, 5, 6], "basetask": 17, "bash": 23, "basic": [0, 7, 14, 15, 18, 20, 21, 25, 26, 27, 28, 29, 30], "basic_ag": 19, "basic_agent_config": 19, "basic_setup": 20, "basicag": 19, "basicoilprocess": 7, "batch": 16, "batch_save_step": 16, "batteri": [6, 7], "battery_throughput": 1, "batterytechnologi": 7, "been": [1, 9], "befor": [0, 1, 9, 16, 26, 28, 29], "begin": [19, 20], "behav": 6, "behavior": [0, 14, 15, 20, 25], "below": [6, 20], "belt": [6, 7, 13, 14], "beltgroup": [2, 6, 7], "best": [14, 25], "beta": 23, "better": [24, 27], "between": [0, 1, 5, 6, 13, 14, 15, 17, 20, 21, 22, 27], "big": 7, "bigelectricpol": 7, "bind": 5, "black": 21, "block": [0, 10, 23], "bodi": 10, "boiler": [2, 6, 7], "bonu": 7, "bool": [3, 4, 5, 6, 9, 18, 26, 28, 29, 30], "bottleneck": [19, 21], "bottom": 6, "bound": 6, "boundari": 14, "bounding_box": 6, "boundingbox": [2, 6], "box": 6, "branch": 23, "break": [20, 29], "breakdown": 20, "brick": 7, "brown": 21, "buffer_capac": 6, "build": [1, 6, 12, 14, 17, 20, 22, 24, 25, 29, 30], "build_infrastructur": 20, "buildabl": 14, "building_materi": 29, "building_typ": 20, "buildingbox": [2, 6], "built": [20, 24], "burn": 6, "burnabl": 6, "burner": [7, 13, 24, 29], "burnerinsert": [2, 6, 7], "burnerminingdril": [2, 6, 7, 24], "burnertyp": [2, 6], "byte": 5, "bytesio": 21, "cabl": 7, "cach": [16, 18], "cache_script": [1, 9], "calcul": [5, 6, 14, 17], "call": [6, 14, 18], "callabl": [5, 14], "can": [0, 1, 6, 7, 9, 14, 15, 17, 18, 22, 23, 24, 26, 27, 28], "cannot": [6, 26, 28], "capabl": [3, 15, 17, 18, 29], "capac": [7, 28], "captur": [0, 5], "card": 3, "case": [1, 9, 15, 17, 18, 26, 27, 28], "categori": [6, 25], "caught": 0, "caus": [26, 28, 29, 30], "cd": [18, 23], "cell": 7, "center": [6, 18], "center_po": 18, "centrifug": 7, "chain": [0, 19, 24, 27], "challeng": [12, 17], "chang": [10, 14, 17, 21, 26, 28, 29, 30], "charact": 7, "characterinventoryslot": 7, "charg": 6, "check": [3, 5, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30], "check_step_complet": 3, "checkpoint": 16, "chemic": [1, 6, 7, 14], "chemical_science_pack_throughput": 1, "chemicalpl": [2, 6, 7], "chemicalsciencepack": 7, "chest": [0, 2, 6, 7, 13, 14, 15, 19, 20, 21, 24, 26, 27, 28, 29], "children": 5, "choos": [24, 30], "circuit": [1, 7], "circular": 18, "cl": 7, "class": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 24, 25], "classdict": 7, "classif": 21, "classmethod": [5, 6, 9], "classvar": [4, 5, 6, 13], "clean": [1, 15], "cleanup": [1, 3, 9, 16], "clear": [15, 17, 18, 20, 26, 27, 30], "clear_ent": [1, 9], "cli": 24, "click": 23, "client": [14, 18, 25], "close": [1, 15, 19, 20, 21], "closest": 14, "cluster": [24, 25], "coal": [7, 13, 15, 17, 19, 20, 24, 28, 29], "coal_po": 19, "coalliquefact": 7, "coalliquifact": 7, "code": [1, 4, 5, 12, 15, 16, 19, 20, 21, 23, 24, 25, 27], "code_lin": 15, "collabor": 20, "collaborative_planning_success": 20, "collect": [14, 15, 18, 19, 20, 27], "collect_": 20, "collect_copper_or": 20, "collect_iron_or": 20, "collected_resourc": 15, "collector": 25, "color": 21, "com": 18, "combin": 27, "command": [19, 20, 21, 22], "common": [0, 1, 9, 14, 16, 19, 25], "commun": [13, 15, 20, 29], "communication_effici": 20, "communication_en": 20, "communication_lat": 20, "compat": [1, 13, 14, 16, 18, 28], "compet": 17, "complet": [2, 3, 5, 12, 13, 14, 15, 16, 17, 18, 20], "completion_token_usag": 5, "completionreason": [2, 4], "completionresult": [2, 4], "complex": [0, 14, 24, 27], "compon": [1, 13, 14, 25], "compos": 22, "comprehens": [0, 1, 14, 17, 18], "compress": 21, "compris": 24, "comput": [21, 24], "computer_vision_model": 21, "concept": 25, "concret": [7, 15], "condit": [0, 12, 17, 27], "confid": 21, "config": [4, 5, 6, 13, 15, 17, 19, 20, 21, 22, 24], "configdict": [4, 5, 6, 13], "configur": [1, 4, 5, 6, 9, 13, 14, 24, 25], "confirm": 23, "conflict": [15, 18, 20, 30], "conflict_resolut": 20, "conflict_resolution_success": 20, "conform": [4, 5, 6, 13], "connect": [1, 6, 16, 21, 22, 23], "connect_ent": [14, 27], "connect_to_serv": [1, 9], "connected_to": 6, "connection_count": 16, "connection_point": 6, "connection_timeout": 16, "consid": [16, 18], "constraint": 17, "construct": [17, 20, 24], "construction_queu": 20, "construction_specialist": 20, "constructionspecialist": 20, "consumpt": [15, 17, 19], "contain": [1, 2, 3, 5, 12, 13, 14, 22, 26, 27, 28, 29, 30], "content": [5, 6, 14, 20, 26, 28, 29], "context": [0, 3, 6, 14, 24], "continu": 1, "control": [0, 5, 7, 10, 16], "convers": [2, 3, 5], "convert": [0, 1, 5, 6, 9, 17, 21], "conveyor": [6, 13], "coordin": [0, 6, 14, 15, 17, 18, 20], "coordination_effect": 20, "coordination_effici": 20, "coordination_en": 20, "coordination_request": 20, "coordination_start": 20, "copper": [7, 15, 19, 20, 29], "copper_or": [17, 19, 20, 21], "copper_po": [19, 20, 21], "copperc": 7, "copperor": 7, "copperpl": 7, "core": [5, 6, 23, 25], "correctli": [21, 30], "corrupt": 16, "cost": 17, "count": [6, 13, 14, 15, 16, 17, 18, 19, 24, 26, 28, 29], "cpu": 21, "cpu_util": 21, "crack": 7, "craft": [5, 6, 13], "craft_item": 14, "creat": [0, 1, 3, 5, 6, 12, 15, 16, 19, 20, 21, 22, 24, 25, 27], "create_backup": 16, "create_default_agent_card": [2, 3], "create_task": 12, "created_at": [4, 5], "creation": [1, 17], "criteria": [15, 17], "crude": [6, 7], "crude_oil_throughput": 1, "crudeoil": 7, "cue": 21, "current": [0, 1, 3, 5, 9, 12, 13, 15, 16, 17, 19, 20, 21], "current_research": 5, "current_tim": 17, "current_typ": 20, "current_vers": 16, "custom": [1, 12, 16, 22, 27], "d": 16, "dai": 6, "data": [1, 4, 5, 6, 13, 16, 18, 21, 22, 24, 27], "databas": [23, 25], "databasecli": 16, "dataset": 16, "datetim": [4, 5], "db": 16, "db_client": 16, "debug": [0, 19, 24], "debug_mod": 19, "decis": [13, 15, 19, 20], "declar": 3, "decod": 21, "def": [0, 15, 17, 18, 19, 20, 21], "default": [3, 6, 9, 16, 18, 20, 23, 26, 28, 30], "defaulttask": [2, 12], "defin": [0, 1, 10, 12, 15, 17, 18, 20, 24], "definit": [1, 9, 12, 25], "delet": 10, "deliv": 20, "deliveri": 20, "demonstr": [19, 20, 21], "deni": 29, "densiti": 7, "density_map": 21, "depend": [17, 18, 24], "deploy": 16, "deposit": 14, "depth": 5, "describ": [3, 18], "descript": [0, 14, 17, 18, 27], "design": [15, 18, 20], "desir": [14, 24], "detail": [0, 1, 13, 14, 19, 22, 24, 27], "detect": 21, "develop": [16, 21, 25], "devic": [6, 13], "dialogu": 5, "dict": [0, 1, 4, 5, 6, 10, 12, 15, 18, 19, 20, 21], "dictionari": [0, 4, 5, 6, 12, 13, 18, 26, 28, 29, 30], "differ": [6, 20, 22, 28, 30], "difficulti": 17, "dimens": [2, 6, 13, 14], "direct": [0, 2, 6, 9, 14, 15, 19, 20, 21, 24, 25, 27, 30], "direction_str": 6, "directionintern": [2, 9], "directli": [5, 6, 12], "directori": [14, 18, 22, 24], "dirt": 21, "discharg": 6, "disconnect": 23, "discov": [1, 18], "discoveri": [15, 17, 18, 19], "discret": 0, "disk": 22, "distanc": [6, 17], "distribut": [6, 7, 13, 15, 20], "divid": [6, 20], "dlc": 23, "do": 18, "doc": 23, "docker": [16, 22, 23], "docstr": 5, "document": [15, 16, 17, 18, 19], "doe": [14, 26, 28, 29], "doesn": [26, 28, 29], "domin": 21, "dominant_color": 21, "don": 26, "done": [19, 20, 21], "down": [6, 9, 24], "downgrad": 23, "drain": 6, "drill": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "drill_east": 30, "drill_north": 30, "drill_south": 30, "drill_west": 30, "drop_posit": [0, 6, 15, 19, 21, 24, 27], "durat": [5, 14], "dure": [0, 6, 17, 23, 24, 29], "dynam": [15, 17], "dynamic_profit_multipli": 5, "e": [3, 12, 14, 16, 19, 20, 21, 24], "each": [14, 17, 22], "east": [6, 9, 30], "edg": [15, 17, 18, 21, 27], "effect": [20, 21], "effici": [13, 15, 17, 18, 19, 20, 21], "either": 6, "elaps": [1, 9], "elapsed_tim": 17, "electr": [2, 6, 7, 13], "electric_output_flow_limit": 6, "electrical_id": 6, "electricalproduc": [2, 6], "electricenergi": 7, "electricenergy2": 7, "electricengin": 7, "electricengineunit": 7, "electricfurnac": [2, 6, 7], "electricitygroup": [2, 6, 7], "electricitypol": [2, 6, 7], "electricminingdril": [2, 6, 7], "electron": 7, "electronic_circuit_throughput": 1, "electroniccircuit": 7, "elif": [15, 19, 20, 21], "els": [15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "empti": [6, 7, 18, 29], "emptybarrel": 7, "emptycrudeoilbarrel": 7, "emptyheavyoilbarrel": 7, "emptylightoilbarrel": 7, "emptylubricantbarrel": 7, "emptypetroleumgasbarrel": 7, "emptysulfuricacidbarrel": 7, "emptywaterbarrel": 7, "enabl": [5, 6, 18, 19, 20, 24], "encapsul": [0, 24], "encod": [13, 21], "end": [3, 18], "end_posit": 6, "end_tim": [5, 16], "energi": [6, 7, 13, 24], "energy_sourc": 6, "energyshield": 7, "energyshield2": 7, "energysourc": [2, 6], "engin": 7, "engine_unit_throughput": 1, "engineunit": 7, "enhanc": [21, 24], "enhance_response_with_task_output": 12, "enough": 30, "ensur": [0, 1, 9, 13, 18, 21, 22, 23, 28, 30], "enter_loop": 10, "entiti": [0, 1, 2, 5, 7, 9, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "entities_built": 20, "entity_class_nam": 7, "entity_loc": 21, "entity_util": 19, "entitycor": [2, 6, 13], "entitygroup": [2, 6], "entityinfo": [2, 6], "entitystatu": [0, 2, 6, 13, 15, 19, 20, 21, 24], "enum": [0, 4, 6, 7, 9, 30], "enumer": [4, 6, 7, 9], "enummeta": 7, "env": [0, 1, 2, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24], "environ": [0, 3, 5, 9, 12, 15, 16, 17, 19, 20, 21, 22, 23, 27], "episod": [15, 19, 20, 21, 24], "episode_count": 15, "equip": [7, 29], "error": [4, 9, 14, 15, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], "error_r": 19, "essenti": 14, "etc": [6, 14], "eval": [1, 2, 9, 14, 17, 19, 20, 21, 23, 24], "eval_dict": 10, "eval_with_error": [1, 9], "eval_with_timeout": 10, "evalu": [1, 9, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25], "everi": 16, "exact": 6, "examin": 29, "exampl": [12, 14, 27], "except": [0, 10, 21, 24], "exchang": [6, 7], "execut": [1, 3, 5, 10, 14, 15, 17, 18, 24, 25], "execute_bodi": 10, "execute_nod": 10, "exhaust": 0, "exist": [15, 20, 23, 29, 30], "exit_loop": 10, "expect": [0, 30], "expens": 18, "experi": [15, 16, 17, 23], "explicitli": 6, "explor": [17, 19, 21, 24], "exploration_const": 5, "export": 16, "expr": [1, 9, 10], "express": [1, 7, 9, 10], "expressinsert": 7, "expresssplitt": 7, "expresstransportbelt": 7, "expressundergroundbelt": 7, "extend": 18, "extens": [15, 16], "extra": [6, 13], "extract": [6, 13, 14, 21, 26], "extract_item": [14, 28, 29], "extracted_count": 26, "f": [0, 15, 16, 18, 19, 20, 21, 26, 27, 28, 29, 30], "facil": 13, "factori": [1, 5, 12, 22, 24], "factorio": [0, 1, 3, 5, 9, 12, 13, 14, 16, 18, 19, 20, 22, 23, 24, 27], "factorioinst": [2, 9, 12, 25], "factorionamespac": [1, 2, 9, 10], "fail": [0, 1, 26, 28, 29, 30], "failur": [0, 1, 14, 18, 20, 21, 27], "fals": [1, 9, 10, 12, 13, 19, 20, 21], "fast": [1, 7, 9], "fastinsert": 7, "fastsplitt": 7, "fasttransportbelt": 7, "fastundergroundbelt": 7, "featur": [16, 23, 25], "feedback": [16, 21, 24], "field": 6, "file": [1, 9, 12, 14, 16, 17, 18, 22, 23, 24], "fill": 7, "fillcrudeoilbarrel": 7, "fillheavyoilbarrel": 7, "filllightoilbarrel": 7, "filllubricantbarrel": 7, "fillpetroleumgasbarrel": 7, "fillsulfuricacidbarrel": 7, "fillwaterbarrel": 7, "filter": [2, 5, 6, 7, 14, 18, 29], "filter_serializable_var": [2, 5], "filterinsert": [2, 6, 7], "final": 14, "find": [14, 19, 20, 21, 26, 27, 28, 29, 30], "find_entities_filt": 18, "firearm": 7, "firearmmagazin": 7, "firewal": 22, "first": [6, 22, 24], "first_namespac": [1, 9], "fix": 22, "flag": 30, "fle": [0, 1, 2, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "fle123": 16, "fle_databas": 16, "fle_db_typ": 16, "fle_us": 16, "flexibl": 15, "float": [1, 4, 5, 6, 9, 12, 13], "flow": [4, 5, 6, 10, 13], "flow_rat": 6, "fluid": [1, 6, 7, 13], "fluid_box": 6, "fluid_ingredient_shortag": 6, "fluid_system": 6, "fluidbox_id": 6, "fluidhandl": [2, 6], "fly": 7, "flyingrobotfram": 7, "focus": 17, "follow": [0, 13, 15, 17, 27], "forc": 23, "form": [6, 10], "format": [0, 5, 14, 21], "found": [18, 19, 21, 23, 29], "fp": 13, "fraction": [19, 20, 21], "frame": 7, "framework": [12, 15, 25], "frequenc": 20, "frequency_penalti": 5, "frequent": 16, "from": [1, 3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 29, 30], "from_attribut": 5, "from_dict": 5, "from_factorio_direct": 9, "from_inst": 5, "from_int": 6, "from_row": 5, "from_str": 6, "fuel": [6, 7, 19, 24], "full": [0, 16, 19, 26, 28, 29], "full_burnt_result_output": 6, "full_output": 6, "fully_charg": 6, "func": 5, "func_data": 5, "function": [0, 1, 3, 5, 6, 9, 10, 12, 13, 14, 18, 24], "furnac": [2, 6, 7, 14, 20, 28, 29], "furnace_result": 6, "furnace_sourc": 6, "g": [12, 14, 24], "ga": 7, "game": [0, 1, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 24, 25, 27, 29, 30], "game_info": [13, 15, 17, 19], "game_st": [0, 1, 9, 15, 19, 20, 21], "game_typ": [2, 15, 17, 18, 19, 20, 21], "gamecontrol": [2, 9], "gameinfo": 13, "gamest": [0, 2, 5], "gate": 7, "gather": 14, "gear": 7, "gener": [2, 6, 7, 13, 15, 16, 19, 21, 22, 23, 24], "generationparamet": [2, 5], "get": [0, 1, 3, 5, 6, 9, 10, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], "get_agent_card": 3, "get_agent_instruct": 12, "get_connection_amount": 14, "get_elapsed_tick": [1, 9], "get_ent": [0, 6, 13, 14, 15, 19, 20, 21, 24, 26, 28, 29], "get_environment_info": 1, "get_funct": 10, "get_messag": 10, "get_migration_statu": 16, "get_new_flow": 5, "get_performance_metr": 16, "get_posit": [0, 19, 21], "get_prototype_recip": 14, "get_research_progress": [14, 20], "get_resource_patch": 14, "get_reward": 17, "get_spe": [1, 9], "get_statist": 16, "get_step": 5, "get_system_prompt": [1, 9], "get_uct": 5, "get_warn": [1, 9], "global": [5, 14, 18], "goal": 13, "goal_descript": 12, "gold": 21, "gracefulli": [0, 15, 18], "gradual": 19, "grai": 21, "graphic": 23, "grenad": 7, "grid": 6, "ground": 7, "group": [6, 7, 14, 16], "guid": [22, 27], "guidanc": 21, "gun": 7, "gunturret": [2, 6, 7], "gym": [0, 17, 19, 20, 21, 25], "gym_env": [0, 1, 2, 15, 19, 20, 21], "gym_run_config": 24, "ha": [14, 22, 23, 26], "hand": 7, "handl": [6, 7, 9, 10, 14, 15, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30], "handle_break": 10, "handle_continu": 10, "harvest": [5, 14], "harvest_resourc": 14, "hasattr": [15, 19, 20, 21], "have": [1, 9, 10, 15, 23, 26, 28, 29], "health": [6, 13, 16], "heat": [6, 7], "heatexchang": [2, 6, 7], "heatpip": 7, "heavi": [7, 14], "heavyoil": 7, "heavyoilcrack": 7, "height": [6, 7, 13], "hello": [1, 13, 15, 16], "help": 23, "helper": 10, "here": [15, 17, 18], "hierarch": [17, 24], "high": [16, 17, 20, 21, 23], "hint": [18, 27], "histori": 16, "holdout_valu": 5, "holdout_wait_period": 12, "how": [0, 14, 19, 20, 21], "html": 23, "http": 18, "i": [0, 1, 3, 5, 6, 9, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 30], "id": [1, 5, 6, 13, 16], "ideal": 16, "identif": 21, "identifi": [19, 21], "imag": [13, 21], "image_bound": 21, "image_cent": 21, "image_data": 21, "image_mod": 21, "image_process": 21, "image_processing_tim": 21, "image_s": 21, "img_arrai": 21, "immedi": 9, "implement": [1, 9, 14, 16, 18, 24, 25, 27, 29], "import": [1, 6, 12, 15, 16, 17, 18, 19, 20, 21, 23], "improv": [15, 19, 21], "includ": [0, 1, 5, 9, 12, 13, 14, 16, 18, 29], "index": [0, 14, 16, 25], "indexedposit": [2, 6], "indic": [12, 21], "individu": [13, 16], "info": [1, 13, 19, 20, 21], "inform": [0, 1, 5, 12, 14, 15, 16, 20, 21, 25, 27, 30], "infra": 23, "infrastructur": 20, "ingredi": [2, 5, 6, 14, 24], "inherit": [14, 15, 18], "init": 24, "initi": [5, 14, 15, 16, 19, 20, 21, 23], "initialis": [1, 6, 9], "inject": 3, "input": [1, 5, 6, 9, 14, 18, 21, 27], "input_connection_point": 6, "input_flow_limit": 6, "input_fluid": 6, "input_posit": 6, "insert": [2, 6, 7, 13, 14, 18, 28], "insert_item": [14, 26, 29], "inserted_count": 28, "inserter_throughput": 1, "inspect": [0, 27, 29], "inspect_inventori": [14, 15, 19, 20, 21, 26, 28], "inspectionresult": [2, 6], "instal": 25, "instanc": [0, 1, 2, 5, 6, 10, 12, 22], "insuffici": [29, 30], "int": [0, 4, 5, 6, 12, 13, 18, 26, 28], "integr": [1, 16], "intention": 24, "inter": [13, 20], "interact": [0, 1, 6, 9, 14, 15, 19, 21, 23, 25], "interfac": [1, 15, 16, 18], "intern": 24, "intflag": 6, "intuit": [15, 18], "invalid": [0, 1, 18, 24, 26, 27, 28, 29, 30], "inventori": [1, 2, 5, 6, 7, 9, 15, 16, 17, 19, 20, 21, 24, 25, 26, 28, 29, 30], "inventory_threshold": 15, "inventory_typ": 29, "invok": 14, "io": 21, "iron": [0, 7, 12, 13, 15, 17, 18, 19, 20, 24, 26, 28, 29, 30], "iron_gear_wheel_throughput": 1, "iron_or": [17, 19, 20, 21, 29], "iron_ore_throughput": [1, 13, 16, 19, 20, 21], "iron_pl": 17, "iron_plate_task": 12, "iron_plate_throughput": [1, 12, 17], "iron_plate_throughput_16": 12, "iron_po": [19, 20, 21, 30], "ironchest": [0, 7, 15, 19, 20, 21, 24, 27], "irongearwheel": 7, "ironor": [0, 7, 24, 27, 30], "ironpl": 7, "ironplatethroughputtask": 17, "ironstick": 7, "is_clos": 6, "is_complet": 17, "is_input": 6, "is_multiag": [1, 5, 9], "is_paus": 9, "is_sourc": 6, "is_terminu": 6, "is_valid": 5, "is_work": 0, "isinst": 15, "issu": [1, 16, 19, 20, 21, 22, 23], "item": [1, 5, 6, 13, 14, 15, 17, 19, 20, 21, 26, 27, 28, 29, 30], "item_data": 28, "item_ingredient_shortag": 6, "items_to_insert": 28, "its": 3, "ivborw0kggoaaaansuheugaa": 13, "jack": 6, "join": 15, "joint": 20, "json": [1, 5, 12, 17, 19, 20, 21, 24], "json_str": 5, "kei": [6, 12, 25], "keyword": 6, "kill": 6, "kwarg": [1, 3, 5, 6, 9], "kwd": 7, "lab": [1, 2, 6, 7, 13, 20, 22], "lab_input": 6, "lab_modul": 6, "lab_plai": 1, "label": 6, "laboratori": 6, "lamp": 7, "landfil": 7, "larg": [16, 17, 21, 23], "largest": [1, 22], "last": [1, 3, 9, 13, 24], "latenc": 20, "later": [0, 24], "latest": 16, "latest_vers": 16, "launch": [6, 14], "launch_count": 6, "launch_progress": 6, "launch_rocket": 14, "launching_rocket": 6, "layer": [2, 6], "learn": [0, 1, 5, 12, 15, 19, 20, 23, 24, 27], "leav": [1, 9], "left": [6, 9], "left_bottom": 6, "left_top": 6, "len": [19, 20, 21], "length": 0, "level": [5, 19], "leverag": [0, 27, 29], "librari": [0, 24], "licens": 23, "lift": 14, "light": 7, "lightoil": 7, "lightoilcrack": 7, "lightweight": 16, "like": [6, 14], "limit": [0, 15, 17, 18, 20, 22], "line": [0, 1, 9, 10, 19, 20, 21], "liquefact": 7, "liquifact": 7, "list": [1, 5, 6, 10, 13, 14, 15, 16, 18, 19, 20, 21, 29], "list_available_environ": 1, "list_backup": 16, "liter": 6, "live": 14, "llm": [5, 23, 25], "load": [1, 9, 10, 12, 15, 16, 18], "load_game_st": 16, "load_messag": 10, "load_step": 16, "load_trajectori": 16, "local": 18, "localhost": [1, 9, 16, 23], "locat": [14, 20, 30], "log": [10, 19], "log_level": 19, "logic": [14, 15, 17, 18, 24], "logist": [7, 20], "logistics2": 7, "logistics3": 7, "logistics_science_pack_throughput": 1, "logisticssciencepack": 7, "logit_bia": 5, "long": 7, "longer": 29, "longhandedinsert": 7, "look": [1, 9, 19, 21], "loop": 24, "loop_nod": 10, "loopcontext": [2, 10], "low": [7, 20], "low_density_structure_throughput": 1, "low_input_fluid": 6, "low_pow": 6, "low_temperatur": 6, "lowdensitystructur": 7, "lua": [14, 18], "lubric": 7, "m": 23, "machin": [6, 7, 13, 14, 20], "made": [6, 18], "magazin": 7, "magazine_s": 6, "mai": 24, "main": 1, "maintain": [0, 10, 21, 24, 25], "mainten": 25, "make": [0, 1, 5, 13, 15, 19, 20, 21, 22, 23, 30], "manag": [5, 15, 16, 19, 20, 21, 24, 25], "manual": [16, 23], "map": [6, 10, 13, 17, 19, 21, 22], "map_imag": [13, 21], "markdown": 14, "materi": [1, 7, 29], "max_connect": 16, "max_ent": 17, "max_length": 0, "max_mining_setup": [15, 19], "max_pow": 17, "max_static_unit_profit_cap": 5, "max_step": [15, 19, 20, 21], "max_token": 5, "maxim": 12, "maximum": 14, "mb": 21, "mcp": 23, "md": [14, 18], "meaning": 18, "meant": 6, "measur": 17, "medium": [7, 16, 20, 21], "mediumelectricpol": 7, "member": 10, "memori": [15, 20, 21, 22, 24], "memory_usag": 21, "messag": [0, 2, 5, 10, 13, 18, 20, 26, 28, 29, 30], "message_delivery_r": 20, "message_processing_tim": 20, "message_timeout": 20, "meta": [4, 5], "metadata": [4, 5, 12, 16], "method": [3, 6, 13, 14, 18, 21, 29], "metric": [5, 12, 13, 15, 16, 18, 25], "might": 21, "migrat": 25, "militari": [1, 7], "military_science_pack_throughput": 1, "militarysci": 7, "militarysciencepack": 7, "mine": [0, 6, 7, 13, 15, 19, 20, 21, 24, 27, 29, 30], "minim": [16, 19], "mining_dril": [20, 21], "mining_item": 29, "mining_op": 0, "mining_radiu": 15, "mining_setup": [15, 19, 20], "miningdril": [0, 2, 6, 13, 15, 19, 20, 21, 24, 27, 30], "miningoper": 0, "minut": 19, "miss": [1, 21], "missing_required_fluid": 6, "missing_science_pack": 6, "mistak": 24, "mk2": 7, "mkdir": 18, "mock": 17, "mod": 22, "mode": [14, 18, 19, 21, 27], "model": [3, 6, 13, 21, 25], "model_config": [4, 5, 6, 13], "model_post_init": 6, "modif": 3, "modul": [1, 25], "modular": [7, 15], "modulararmor": 7, "moment": 24, "monitor": [0, 14, 15, 19, 20, 21, 22, 25, 26, 27, 28, 29, 30], "monitoring_interv": 19, "more": [19, 21, 22, 26, 28], "most": [1, 3, 14, 27], "mount": 22, "move": [6, 13, 14], "move_to": 14, "movement": 0, "multi": [14, 15, 16, 17, 25], "multi_agent_perform": 20, "multiagent_config": 20, "multiagent_coordin": 20, "multiagentcoordin": 20, "multifluidhandl": [2, 6], "multipl": [6, 14, 16, 17, 20, 22, 23, 28], "must": [18, 30], "my": 18, "my_custom_ag": 15, "my_custom_task": 17, "my_tool": [14, 18], "myagent": 16, "mycustomag": 15, "mycustomtask": 17, "mytool": 18, "n": [1, 5, 9, 15], "name": [0, 3, 5, 6, 7, 10, 13, 15, 16, 17, 18, 19, 20, 21, 24, 26, 28, 29], "namespac": [0, 2, 3, 5, 9, 24, 25], "namespace_class": [1, 9], "namespace_str": 10, "narrow": [14, 18], "natur": 6, "navig": 23, "ndarrai": 21, "nearest": [0, 14, 15, 19, 20, 21, 24, 27, 30], "nearest_build": [14, 30], "necessari": 22, "need": [6, 10, 14, 15, 16, 18, 19, 20, 22, 23], "neg": 18, "neighbour": [6, 24], "nest": 10, "network": [1, 6, 16, 22, 29], "new": [3, 5, 6, 13, 14, 15, 17, 18], "next": [0, 3, 14, 25, 27], "next_clockwis": 9, "next_counterclockwis": 9, "night": 7, "nightvis": 7, "no_ammo": 6, "no_fuel": [6, 19], "no_ingredi": 6, "no_input_fluid": 6, "no_minable_resourc": 6, "no_pow": [6, 15, 19], "no_recip": 6, "no_research_in_progress": 6, "node": 10, "non": 6, "none": [0, 1, 3, 5, 6, 7, 9, 10, 12, 15, 17, 18, 19, 20, 21, 24], "normal": [6, 10, 19, 23, 24], "north": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "not_connect": 6, "not_connected_to_rail": 6, "not_plugged_in_electric_network": 6, "np": 21, "nuclear": [6, 7], "nuclearfuelreprocess": 7, "nuclearpow": 7, "nuclearreactor": 7, "num_ag": [0, 1, 5, 9], "number": [0, 1, 9, 10, 12, 18, 20, 26, 28], "numpi": 21, "ob": [1, 19, 20, 21], "object": [0, 1, 3, 5, 7, 9, 10, 12, 13, 14, 17, 21, 22, 24, 30], "object_detect": 21, "object_detection_threshold": 21, "object_interaction_predict": 21, "observ": [1, 15, 16, 19, 20, 21, 24, 25], "obstacl": 14, "offici": 23, "offshor": [6, 7], "offshorepump": [2, 6, 7], "oil": [1, 6, 7], "oilprocess": 7, "oilrefineri": [2, 6, 7], "old": 16, "onc": 23, "onli": [1, 5, 6, 9, 23], "open": [1, 21, 22, 23, 25], "open_plai": 1, "openai": [1, 23], "openai_api_kei": 23, "oper": [0, 5, 6, 13, 14, 15, 16, 18, 19, 20, 21, 24, 27, 29], "operation_nam": 5, "opportun": 20, "opposit": 9, "optim": [12, 15, 17, 18, 19, 20, 21, 25], "optimization_en": 19, "optimization_request": 20, "option": [0, 1, 4, 5, 6, 12, 13, 14, 18, 25, 26, 28, 29, 30], "orchestr": 22, "ore": [7, 13, 15, 18, 19, 20, 24, 26, 28, 29, 30], "ores": 14, "organ": 24, "orient": [6, 14, 30], "origin": [6, 10], "other": [1, 6, 14, 15, 16, 18, 20, 23, 28, 29, 30], "out": [1, 9], "output": [0, 5, 6, 13, 16, 18, 21, 24, 25], "output_connection_point": 6, "output_flow_limit": 6, "output_fluid": 6, "output_posit": 6, "over": [15, 19, 29], "overal": 20, "overall_system_perform": 20, "overhead": 20, "overrid": 3, "overview": [14, 18, 25], "p": [16, 22], "pack": [1, 7], "packag": 23, "page": 25, "pair": 18, "panel": [6, 7], "parallel": 21, "param": [1, 3, 9], "param1": [15, 18], "param2": 18, "param3": 18, "paramet": [0, 6, 12, 14, 15, 16, 17, 18, 21, 22, 27], "parent_id": 5, "parent_nod": 10, "parent_visit": 5, "pars": [5, 6, 17, 18], "parse_agent_messag": 5, "parse_arg": 6, "parse_raw": 5, "part": 7, "partial": [26, 28], "pass": [6, 17, 20], "patch": [0, 19, 21, 24], "path": 16, "pathfind": 14, "pattern": [14, 21, 24, 25], "paus": [1, 9, 14], "pause_at_spe": 9, "payload": 6, "peac": [1, 9], "per": [1, 17, 19, 21], "percentag": 14, "perform": [12, 13, 14, 15, 17, 18, 24, 25, 27], "permiss": [22, 23, 29], "persist": [0, 1, 15, 22], "petroleum": 7, "petroleum_gas_throughput": 1, "petroleumga": 7, "phase": 19, "pickl": 5, "pickup_ent": [14, 30], "pickup_posit": 6, "pierc": 7, "piercing_round_throughput": 1, "piercingroundsmagazin": 7, "pil": 21, "pip": 23, "pipe": [2, 6, 7, 13, 14], "pipegroup": [2, 6, 7], "pixel": 21, "place": [0, 6, 14, 19, 20, 21, 24, 27, 28, 29, 30], "place_ent": [0, 13, 14, 15, 19, 20, 21, 24, 27, 29], "place_entity_next_to": [0, 14, 15, 19, 20, 21, 24, 27, 30], "place_mining_setup": 0, "placeabl": 14, "placement": [0, 14, 17, 19, 30], "plai": [1, 22], "plan": [14, 18, 19, 20, 21], "plant": [6, 7, 14], "plastic": [6, 7], "plastic_bar_throughput": 1, "plasticbar": 7, "plate": [7, 12, 13, 17, 29], "player": [6, 13, 14, 26, 27, 28, 29], "player_posit": 6, "png": [13, 21], "point": 16, "pole": [6, 7], "polici": [3, 15], "pool": 16, "poor": 21, "popular": 24, "populate_by_nam": 6, "port": [22, 23], "posit": [0, 2, 6, 14, 15, 18, 19, 20, 21, 24, 25, 27, 30], "possibl": [1, 18, 22], "post": 5, "postgr": 16, "postgres_db": 16, "postgres_password": 16, "postgres_us": 16, "postgresql": [23, 25], "power": [6, 7, 14, 15, 17, 19], "power_usag": 19, "powerarmor": 7, "powerarmor2": 7, "powerpol": 13, "practic": [14, 25], "pre": 14, "pre_holdout_wait_period": 12, "predict": 21, "preexist": 10, "preparing_rocket_for_launch": 6, "prerequisit": [5, 13, 14, 25], "presence_penalti": 5, "preserv": [1, 9], "prevent": 0, "previou": [1, 9], "previous": 24, "price_list": 5, "print": [0, 1, 14, 15, 16, 18, 19, 20, 21, 24, 26, 27, 28, 29, 30], "prioriti": 20, "priority_bas": 20, "privat": 6, "proactiv": 24, "probabl": 6, "problem": 20, "procedur": 22, "process": [6, 7, 15, 20, 25], "processing_perform": 21, "processing_unit_throughput": 1, "processingunit": 7, "produc": [6, 17, 19], "product": [2, 5, 6, 7, 12, 13, 14, 16, 20], "production_science_pack_throughput": 1, "productionflow": [2, 4, 5], "productionsciencepack": 7, "productivitymodul": 7, "productivitymodule2": 7, "productivitymodule3": 7, "profit": 5, "profitconfig": [2, 5], "program": [2, 5, 14, 23, 24], "program_id": 4, "progress": [5, 13, 14, 19], "prompt": [1, 9], "prompt_token_usag": 5, "proper": [5, 27, 29], "properli": [15, 22, 23], "properti": [1, 5, 6, 7, 9, 13, 23], "protocol": [15, 20, 23], "prototyp": [0, 2, 6, 7, 13, 15, 19, 20, 21, 24, 27, 30], "prototype_nam": 7, "prototypemetaclass": [2, 7], "provid": [0, 1, 12, 13, 15, 16, 18, 22, 23, 24, 29], "provis": 12, "psql": 23, "pump": [2, 6, 7], "pumpjack": [2, 6, 7], "purchas": 23, "py": [1, 14, 17, 18, 23], "pydant": [4, 5, 6, 13], "pydantic_cor": 6, "pytest": [15, 17, 18], "python": [0, 1, 10, 12, 14, 15, 17, 18, 23, 24], "python3": 23, "qualiti": 21, "quantiti": [6, 13, 14], "queri": [13, 16, 24], "queue": 14, "quick": [16, 23], "quickstart": 25, "quota": 12, "radar": 7, "radiu": [6, 14, 18], "rag": 3, "rail": [2, 6, 7], "railwai": [6, 7], "railwaytransport": 7, "rais": [1, 6, 9, 24], "rang": 21, "rate": [12, 17, 19, 20], "raw": 1, "raw_reward": 5, "raw_text": 13, "rcon_client": 9, "reactiv": 24, "reactor": [2, 6, 7], "read": 24, "readabl": 0, "reason": [4, 21], "recent": 3, "recip": [2, 6, 7, 13, 14], "recipenam": [2, 7], "recognit": 21, "recommend": [14, 16, 23], "reconstruct": 5, "record": 19, "recoveri": [19, 20, 21, 25], "recovery_tim": 19, "recurs": 14, "reduc": [20, 21], "refer": [0, 2, 14, 20], "reference_posit": [0, 15, 19, 20, 21, 24, 27], "refineri": [6, 7], "regardless": [1, 9], "region": 21, "regist": [1, 15, 17, 18], "register_ag": 15, "register_all_environ": 1, "registr": 25, "registri": [15, 17, 25], "regular": 16, "reinforc": 1, "rel": [14, 30], "relationship": 21, "relev": 24, "reliabl": 19, "reload_tim": 6, "remain": 14, "remov": [14, 16, 26, 27, 28, 29, 30], "render": [6, 23], "render_message_tool": 9, "repl": 24, "replac": [15, 20], "replai": 15, "report": [0, 20], "repres": [5, 6, 14, 24], "represent": [5, 24], "reprocess": 7, "request": [0, 20], "requir": [1, 6, 13, 14, 16, 17, 18, 20, 22, 24, 26, 28, 30], "research": [5, 6, 7, 17, 20, 22, 25], "research_plan": 20, "research_prior": 20, "research_progress": 5, "research_queu": [5, 20], "research_specialist": 20, "research_start": 20, "research_unit_count": 5, "research_unit_energi": 5, "researchspe": 7, "researchspecialist": 20, "researchst": [2, 5], "reset": [0, 1, 9, 10, 15, 17, 19, 20, 21], "reset_paus": [1, 9], "reset_posit": [1, 9], "reset_spe": [1, 9], "reset_to_default": 9, "reshap": 21, "resnet50": 21, "resolut": [15, 20, 21], "resolv": 20, "resourc": [0, 2, 6, 7, 13, 17, 19, 20, 21, 22, 24, 25, 29, 30], "resource_collect": 20, "resource_identif": 21, "resource_patch": 21, "resource_po": [15, 20], "resource_request": 20, "resource_scann": 18, "resource_specialist": 20, "resource_typ": [0, 18, 20], "resource_util": 19, "resource_wast": 19, "resourcecollectorag": 15, "resourcenam": [2, 7], "resourcepatch": [2, 6, 7], "resourcescann": 18, "resourcespecialist": 20, "respect": 14, "respons": [2, 3, 4, 5, 12, 16, 20], "restart": 22, "restor": [1, 5, 9, 16], "restore_backup": 16, "result": [0, 1, 5, 9, 10, 14, 18, 20, 26, 27, 28, 29, 30], "retri": 29, "retriev": [1, 13, 14, 24], "return": [0, 1, 3, 5, 6, 9, 10, 12, 14, 15, 17, 18, 19, 20, 21, 24, 27], "reus": [1, 16, 24], "reusabl": [1, 15], "reward": [1, 12, 16, 17, 19, 20, 21], "rgb": 21, "rich": [1, 13], "right": [6, 9, 23], "right_bottom": 6, "right_top": 6, "robot": 7, "robust": [0, 17, 20, 21], "rock": [6, 14], "rocket": [2, 6, 7, 14], "rocket_inventori": 6, "rocket_part": 6, "rocket_progress": 6, "rocketcontrol": 7, "rocketcontrolunit": 7, "rocketfuel": 7, "rocketpart": 7, "rocketsilo": [2, 6, 7], "rocketsilotechnologi": 7, "role": [5, 20], "rotat": [14, 23], "rotate_ent": [14, 30], "round": 7, "round_robin": 20, "row": 5, "rtd": [], "rtype": [1, 9], "rule": [14, 17], "run": [0, 1, 14, 16, 22, 23, 24, 25], "runtim": [0, 24], "runtime_error": 4, "safe": 23, "satellit": 7, "save": [16, 22, 24], "save_game_st": 16, "save_step": 16, "save_trajectori": 16, "scalabl": [20, 22], "scale": [16, 17, 23, 24], "scan": [15, 17, 18], "scanner": 25, "scenario": [15, 16, 17, 18, 19, 25, 27], "schedul": 16, "schema": [1, 9, 25], "scienc": [1, 7], "score": [4, 12, 13], "screenshot": 21, "script": 23, "sdk": 23, "search": [14, 25], "second": [1, 5, 6, 9, 14, 17, 20, 21, 24], "section": [2, 6, 27], "secur": [16, 18], "see": [14, 22, 24, 27], "segment": 21, "select": 23, "self": [0, 6, 14, 15, 17, 18, 19, 20, 21, 24], "send": 20, "send_messag": 20, "sens": 30, "sent": [6, 14], "sequenc": [10, 14], "serial": [5, 10, 14, 15], "serializ": 5, "serializablefunct": [2, 5, 10], "serialize_model": 6, "serialized_funct": 13, "server": [14, 16, 18, 22, 23, 29], "set": [1, 6, 9, 15, 16, 19, 21, 22, 23, 30], "set_convers": 3, "set_entity_recip": 14, "set_research": [14, 20], "set_spe": [1, 9], "set_speed_and_unpaus": [1, 9], "set_system_messag": 5, "setup": [0, 6, 12, 16, 19, 20, 21, 25], "setup_api_kei": 23, "setup_inst": 12, "sever": [1, 9, 16, 22], "shape": 21, "share": [15, 20], "shared_st": 20, "shared_state_s": 20, "shield": 7, "shortli": 23, "should": [3, 4, 5, 6, 13, 14], "show": 14, "show_number_of_steps_left_in_prompt": 12, "side": [14, 18, 25], "signatur": [0, 1, 5, 9, 13, 14], "silo": [6, 7, 14], "simpl": [15, 18, 19, 21, 27], "simplifi": 21, "simul": 24, "sinc": [1, 6, 9], "singl": [3, 5, 10, 16], "site": 23, "size": [6, 13, 14, 16, 17, 20, 21], "sk": 23, "skills_db_host": 16, "skills_db_nam": 16, "skills_db_password": 16, "skills_db_port": 16, "skills_db_us": 16, "sleep": [0, 14, 24], "slot": 7, "slow": [20, 21], "small": [7, 16], "smallelectricpol": 7, "smalllamp": 7, "smelt": 6, "snapshot": 16, "solar": [6, 7], "solarenergi": 7, "solarpanel": [2, 6, 7], "solid": [6, 7], "solidfuel": 7, "solidfuelfromheavyoil": 7, "solidfuelfromlightoil": 7, "solidfuelfrompetroleumga": 7, "solut": [26, 28, 29, 30], "someth": 18, "sophist": 21, "sourc": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 16, 23, 25], "south": [0, 6, 9, 15, 19, 20, 21, 24, 27, 30], "space": [1, 7, 14, 22, 23, 25], "spacesci": 7, "spacesciencepack": 7, "spatial": [17, 21], "spatial_analysis_depth": 21, "spatial_featur": 21, "spatial_reason": 21, "spatial_understand": 21, "special": [10, 14, 15, 25], "specialist": 20, "specif": [1, 6, 12, 14, 15, 16, 17, 18, 20, 21, 23, 27, 29], "specifi": 30, "speed": [1, 7, 9, 13, 14], "sphinx": 23, "split": 20, "splitter": [2, 6, 7], "sql": 16, "sqlite": 25, "sqlite_db_fil": 16, "stack": [0, 7], "stackfilterinsert": 7, "stackinsert": 7, "stackinsertercapacity1": 7, "stackinsertercapacity2": 7, "stale": 14, "standard": [0, 1, 12, 24], "start": [1, 9, 17, 19, 20, 21, 23, 24], "start_posit": 6, "start_tim": [5, 16, 17], "starting_inventori": 12, "startswith": 20, "startup": 16, "stat": [16, 22], "state": [0, 1, 3, 5, 9, 12, 14, 15, 16, 17, 18, 19, 20, 24, 25], "state_id": 16, "statement": 0, "static": [1, 5, 6, 9, 12], "static_item": 5, "staticent": [2, 6], "statist": [12, 13, 16, 18], "statu": [0, 6, 12, 13, 14, 15, 16, 19, 20, 21, 22, 24], "status_int": 6, "status_str": 6, "status_upd": 20, "stderr": [13, 24], "stdout": [13, 14, 24], "steam": [6, 7, 23], "steam_output_point": 6, "steamengin": 7, "steel": 7, "steel_plate_throughput": 1, "steelchest": 7, "steelfurnac": 7, "steelplat": 7, "steelprocess": 7, "step": [1, 3, 4, 12, 14, 16, 19, 20, 21, 23, 25], "step_count": [19, 20, 21], "step_numb": 16, "step_statist": 12, "stick": 7, "stone": [7, 19, 21, 29], "stone_wall_throughput": 1, "stonebrick": 7, "stonefurnac": 7, "stonewal": 7, "stop": 22, "stop_sequ": 5, "storag": [0, 1, 6, 7, 13, 19, 21, 24, 26, 28, 29], "storagetank": [2, 6, 7], "store": [0, 1, 5, 6, 13, 16, 21, 24], "str": [0, 1, 3, 4, 5, 6, 9, 12, 13, 15, 18, 19, 20, 21, 26, 28, 29, 30], "strategi": [3, 15, 20], "stream": 24, "string": [5, 10, 14, 18], "strong": 21, "structur": [1, 7, 14, 22, 25, 27], "sub": 17, "succe": 21, "succeed": [18, 26, 28, 29, 30], "success": [4, 12, 15, 16, 17, 18, 20, 24, 26, 27, 28, 29, 30], "success_threshold": [15, 19, 20, 21], "sudo": [22, 23], "sufuric_acid_throughput": 1, "suggest": 0, "suit": 14, "sulfur": [6, 7], "sulfur_throughput": 1, "sulfuricacid": 7, "sulfurprocess": 7, "sum": [19, 20, 21, 29], "summaris": 3, "sunlight": 6, "super": [15, 17, 19, 20, 21], "suppli": [6, 19], "support": [0, 10, 12, 14, 16, 22, 23, 26, 28, 29, 30], "sure": [22, 23], "surfac": 18, "symbol": 24, "syntax": 0, "synthes": 14, "synthesi": [0, 1, 15, 24], "system": [1, 5, 9, 12, 15, 16, 18, 19, 22, 23, 24, 25], "system_prompt": 3, "t": [26, 28, 29], "t1": 16, "tabl": [14, 16, 18], "take": [0, 1, 6], "tank": [6, 7], "target": [13, 15, 17], "target_ag": 20, "target_resourc": [15, 19, 20], "task": [1, 2, 4, 15, 16, 19, 20, 22, 25, 27], "task_assign": 20, "task_complet": 20, "task_completion_r": 20, "task_definit": [1, 17], "task_distribut": 20, "task_info": 13, "task_kei": [1, 12], "task_path": 12, "task_queu": 20, "task_respons": 12, "task_verif": 13, "taskabc": [2, 12], "taskfactori": [2, 12], "taskrespons": [2, 4, 12], "taskverif": 13, "tcp_port": [1, 9], "techniqu": 21, "technologi": [2, 5, 7, 13, 14, 17, 20, 22], "technologyst": [2, 5], "temperatur": 5, "termin": [1, 19, 20, 21], "terrain": 30, "test": [14, 16, 19, 20, 25, 27], "test_agent_act": 15, "test_agent_cr": 15, "test_agent_reset": 15, "test_task_complet": 17, "test_task_cr": 17, "test_task_evalu": 17, "test_tool_cr": 18, "test_tool_error_handl": 18, "test_tool_execut": 18, "test_tool_with_posit": 18, "text": 0, "than": 26, "thei": 24, "them": [14, 26, 27], "theme": [], "thi": [0, 1, 2, 3, 5, 6, 9, 12, 14, 19, 20, 21, 22, 23, 24, 27], "third": 6, "thoroughli": [19, 20, 27], "threshold": 21, "through": [0, 1, 15, 22, 24], "throughout": [5, 24], "throughput": [1, 12, 13, 17, 19], "throughput_ent": 12, "throughput_task": 1, "throughputtask": [2, 12], "thu": 6, "tick": [1, 4, 5, 9, 13, 17], "tier": 6, "tile": [6, 14, 18], "tile_dimens": [6, 13, 24], "tile_height": [6, 24], "tile_width": [6, 24], "tiledimens": [2, 6, 13, 24], "time": [5, 13, 14, 15, 16, 17, 19, 20, 21, 22, 24, 29], "time_elaps": 6, "time_limit": 17, "timeout": [1, 4, 9, 10], "timestamp": [5, 16], "timing_metr": 5, "timingmetr": [2, 5], "to_bounding_box": 6, "to_dict": [0, 5], "to_factorio_direct": 9, "to_inst": 5, "to_raw": 5, "togeth": [16, 20, 27], "token_usag": 5, "toler": 6, "tolist": 21, "tool": [0, 1, 24], "tool_nam": 27, "top": [6, 21], "total": [5, 14, 16, 19, 21, 29], "total_dur": 5, "total_item": [19, 21, 29], "total_materi": 29, "total_reward": [15, 16], "toward": [6, 13], "trace": 0, "track": [5, 6, 13, 14, 15, 16, 19, 21, 26, 27, 28, 29], "train": 6, "trajectori": [3, 16, 24], "trajectory_001": 16, "trajectory_id": 16, "trajectory_length": 12, "transfer": [13, 14, 26, 28], "transport": [6, 7, 13], "transportbelt": [2, 6, 7, 13], "treat": 14, "tree": [6, 13, 14], "troubleshoot": 25, "true": [1, 3, 5, 6, 9, 10, 12, 16, 18, 19, 20, 21], "truncat": [1, 19, 20, 21], "try": [0, 10, 21], "tune": 21, "tupl": [6, 21], "turn": 3, "turret": 7, "turret_ammo": 6, "two": 5, "type": [0, 1, 3, 5, 6, 9, 10, 12, 14, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30], "typehint": [], "unbound": [1, 12, 22], "unboundedthroughputtask": [2, 12], "uncheck": 23, "underground": [6, 7], "undergroundbelt": [2, 6, 7], "undergroundpip": 7, "understand": [14, 21], "understood": 21, "unifi": 16, "union": 6, "uniqu": 21, "unique_color": 21, "unit": [1, 7], "unlock": 13, "unlock_all_research": 12, "unpaus": [1, 9], "unpickl": 5, "unwrap": 10, "unwrap_after_deseri": [2, 10], "up": [1, 6, 9, 13, 15, 19, 21, 22, 23, 24], "updat": [3, 14, 15, 18, 20, 26, 28], "update_st": 3, "upper": [15, 20], "uptim": 19, "uranium": 7, "uranium235": 7, "uranium238": 7, "uraniumfuelcel": 7, "uraniumor": 7, "uraniumprocess": 7, "us": [0, 1, 3, 5, 6, 7, 9, 12, 14, 15, 16, 18, 21, 22, 23, 24, 26, 27, 28, 29, 30], "usag": [0, 12, 14, 15, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30], "use_populated_inventori": 12, "user": [16, 22, 23], "util": [5, 7, 19, 21, 24, 29], "utility_science_pack_throughput": 1, "utilitysciencepack": 7, "uv": 23, "v": 0, "valid": [5, 6, 13, 14, 16, 18, 19, 23, 25, 27, 30], "validate_by_alia": 6, "validate_by_nam": 6, "validationerror": 6, "valu": [0, 4, 5, 6, 7, 9, 10, 12, 18, 19, 20, 21, 27, 29, 30], "value1": [15, 18], "valueerror": 0, "variabl": [0, 1, 3, 10, 16, 22, 24], "variou": [5, 12, 14, 15, 17, 27, 29, 30], "vars_dict": 5, "verif": 25, "verifi": [0, 12, 16, 18, 19, 22, 23, 24, 26, 28, 29], "version": [5, 16, 18, 23], "version_descript": 5, "vision": [7, 21], "vision_en": 21, "visit": 5, "visual": [15, 25], "visual_accuraci": 21, "visual_ag": 21, "visual_agent_config": 21, "visual_analysi": 21, "visual_memori": 21, "visual_memory_s": 21, "visual_planning_effect": 21, "visual_reason": 21, "visualag": 21, "volum": [22, 23], "vote": 20, "wa": 29, "wait": 14, "waiting_for_source_item": 6, "waiting_for_space_in_destin": 6, "waiting_to_launch_rocket": 6, "wall": [6, 7], "wallgroup": [2, 6], "warn": [1, 6, 13], "wast": 19, "water": [6, 7, 14], "we": [1, 9, 15], "websit": 23, "west": [6, 9, 30], "what": [6, 14], "wheel": 7, "when": [1, 3, 6, 9, 16, 18, 24], "where": [6, 26, 28, 30], "whether": [13, 18, 26, 28, 29, 30], "which": [1, 5, 14, 24], "while": [10, 14, 19, 20, 21], "whose": 29, "width": [6, 7, 13], "within": 16, "without": [1, 9, 22, 23], "wood": 7, "wooden": 7, "woodenchest": 7, "work": [0, 6, 14, 15, 19, 20, 21, 24], "workflow": 14, "working_ent": [19, 20, 21], "world": [13, 14, 24, 30], "wrap": 10, "wrap_for_seri": [2, 10], "wrapper": 5, "write": 18, "written": 24, "x": [6, 13, 18, 19, 21, 23, 24, 30], "y": [6, 13, 18, 19, 21, 24, 30], "you": [14, 17, 18, 22, 23, 24], "your": [14, 15, 17, 18, 22, 23], "zero": 18}, "titles": ["Action Space", "Environment API", "API Modules", "fle.agents.agent_abc module", "fle.agents.models module", "fle.commons.models module", "fle.env.entities module", "fle.env.game_types module", "fle.env.gym_env module", "fle.env.instance module", "fle.env.namespace module", "fle.eval.algorithms module", "fle.eval.tasks module", "Observation Space", "Tools API", "Implementing Custom Agents", "Database Configuration", "Creating Custom Tasks", "Creating Custom Tools", "Basic Agent Example", "Multi-Agent Example", "Visual Agent Example", "Cluster Setup", "Installation", "Quickstart", "Welcome to Factorio Learning Environment\u2019s documentation!", "extract_item", "Tools Documentation", "insert_item", "inspect_inventory", "place_entity"], "titleterms": {"": 25, "action": 0, "advanc": [15, 17, 18, 22], "agent": [0, 2, 3, 4, 15, 19, 20, 21], "agent_abc": 3, "algorithm": 11, "analysi": 21, "api": [1, 2, 14, 23, 25], "architectur": [14, 15, 18, 20], "avail": 1, "backup": 16, "base": 15, "basic": 19, "behavior": 19, "best": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "build": 23, "categori": [14, 27], "class": 15, "client": [16, 23], "cluster": 22, "code": 0, "collector": 15, "common": [2, 5], "compon": 0, "concept": [1, 24], "configur": [15, 16, 17, 19, 20, 21, 22, 23], "connect": [14, 27], "control": [14, 27], "core": [1, 2, 14, 27], "craft": [14, 27], "creat": [14, 17, 18], "custom": [14, 15, 17, 18, 25], "databas": 16, "debug": [14, 27], "definit": [0, 17], "develop": [18, 27], "direct": 13, "document": [14, 23, 25, 27], "entiti": [6, 13, 14, 27], "env": [6, 7, 8, 9, 10], "environ": [1, 2, 24, 25], "error": [0, 1], "eval": [11, 12], "evalu": 2, "exampl": [0, 1, 13, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30], "execut": 0, "extract_item": 26, "factorio": 25, "factorioinst": 1, "failur": [26, 28, 29, 30], "featur": [15, 17, 18, 21], "fle": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "game": 13, "game_typ": 7, "get": 25, "gym": 1, "gym_env": 8, "handl": [0, 1], "implement": [15, 17, 19, 20, 21], "indic": 25, "inform": 13, "insert_item": 28, "inspect_inventori": 29, "instal": 23, "instanc": 9, "interact": 24, "inventori": [13, 14, 27], "kei": [1, 15, 16, 23, 24], "learn": 25, "maintain": 23, "mainten": 16, "manag": [1, 13, 14, 22, 27], "method": [1, 15, 16], "metric": [19, 20, 21], "migrat": 16, "mode": [26, 28, 29, 30], "model": [2, 4, 5], "modul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "monitor": 16, "movement": [14, 27], "multi": [0, 20], "namespac": [1, 10], "next": 24, "observ": 13, "optim": 16, "option": 23, "output": [14, 19, 27], "overview": [19, 20, 21, 24, 26, 28, 29, 30], "paramet": [26, 28, 29, 30], "pattern": 27, "perform": [16, 19, 20, 21], "place_ent": 30, "posit": 13, "postgresql": 16, "practic": [0, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], "prerequisit": 23, "process": [18, 21], "queri": [14, 27], "quickstart": 24, "recoveri": 16, "refer": 25, "registr": [15, 17, 18], "registri": 1, "relat": [26, 28, 29, 30], "research": [13, 14, 27], "resourc": [14, 15, 18, 27], "return": [26, 28, 29, 30], "run": [19, 20, 21], "scanner": 18, "scenario": 22, "schema": 16, "setup": [22, 23], "side": 23, "space": [0, 13], "special": 20, "sqlite": 16, "start": [22, 25], "state": 13, "step": 24, "structur": [0, 13, 17, 18], "system": [13, 20], "tabl": 25, "task": [12, 13, 17], "test": [15, 17, 18], "tool": [14, 18, 25, 26, 27, 28, 29, 30], "troubleshoot": [16, 19, 20, 21, 22, 23], "type": [13, 15, 16, 17], "usag": [1, 16, 27], "valid": 0, "verif": 13, "visual": 21, "welcom": 25}}) \ No newline at end of file diff --git a/docs/sphinx/build/html/tools/extract_item.html b/docs/sphinx/build/html/tools/extract_item.html index 4fb0f7540..2aca8a078 100644 --- a/docs/sphinx/build/html/tools/extract_item.html +++ b/docs/sphinx/build/html/tools/extract_item.html @@ -88,7 +88,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/tools/index.html b/docs/sphinx/build/html/tools/index.html index e9bfe3afe..f73c0e136 100644 --- a/docs/sphinx/build/html/tools/index.html +++ b/docs/sphinx/build/html/tools/index.html @@ -122,7 +122,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/tools/insert_item.html b/docs/sphinx/build/html/tools/insert_item.html index 2aff470d9..c26cb4e58 100644 --- a/docs/sphinx/build/html/tools/insert_item.html +++ b/docs/sphinx/build/html/tools/insert_item.html @@ -88,7 +88,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/tools/inspect_inventory.html b/docs/sphinx/build/html/tools/inspect_inventory.html index 9be1700c9..1c1beaa48 100644 --- a/docs/sphinx/build/html/tools/inspect_inventory.html +++ b/docs/sphinx/build/html/tools/inspect_inventory.html @@ -88,7 +88,6 @@
  • - View page source

  • diff --git a/docs/sphinx/build/html/tools/place_entity.html b/docs/sphinx/build/html/tools/place_entity.html index e10d3bae0..6546eefb7 100644 --- a/docs/sphinx/build/html/tools/place_entity.html +++ b/docs/sphinx/build/html/tools/place_entity.html @@ -88,7 +88,6 @@
  • - View page source

  • diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py index c78bdff16..f920cea29 100644 --- a/docs/sphinx/source/conf.py +++ b/docs/sphinx/source/conf.py @@ -49,6 +49,9 @@ # a list of builtin themes. html_theme = 'sphinx_rtd_theme' +# Disable "View page source" links on all pages +html_show_sourcelink = False + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". From 174fba00f506949f89ff2067c3dfa8c509966ab9 Mon Sep 17 00:00:00 2001 From: Kian Kyars Date: Sat, 22 Nov 2025 08:14:22 -0700 Subject: [PATCH 9/9] Commit claude code changes with cleaned up docs --- README.md | 3 + docs/sphinx/source/advanced/database.rst | 407 +++++++++++++ docs/sphinx/source/advanced/mcp.rst | 276 +++++++++ docs/sphinx/source/advanced/sprites.rst | 351 +++++++++++ docs/sphinx/source/api/action.rst | 251 -------- docs/sphinx/source/api/environment.rst | 128 ---- docs/sphinx/source/api/modules.rst | 42 -- .../api/modules/fle.agents.agent_abc.rst | 7 - .../source/api/modules/fle.agents.models.rst | 7 - .../source/api/modules/fle.commons.models.rst | 7 - .../source/api/modules/fle.env.entities.rst | 7 - .../source/api/modules/fle.env.game_types.rst | 7 - .../source/api/modules/fle.env.gym_env.rst | 7 - .../source/api/modules/fle.env.instance.rst | 7 - .../source/api/modules/fle.env.namespace.rst | 7 - .../api/modules/fle.eval.algorithms.rst | 7 - .../source/api/modules/fle.eval.tasks.rst | 7 - docs/sphinx/source/api/observation.rst | 178 ------ docs/sphinx/source/api/tools.rst | 252 -------- docs/sphinx/source/customization/agents.rst | 331 ---------- docs/sphinx/source/customization/database.rst | 357 ----------- docs/sphinx/source/customization/tasks.rst | 276 --------- docs/sphinx/source/customization/tools.rst | 335 ----------- .../source/environment/gym_registry.rst | 335 +++++++++++ docs/sphinx/source/environment/overview.rst | 240 ++++++++ docs/sphinx/source/examples/basic_agent.rst | 336 ----------- docs/sphinx/source/examples/multiagent.rst | 565 ------------------ docs/sphinx/source/examples/visual_agent.rst | 450 -------------- .../sphinx/source/getting_started/cluster.rst | 91 --- .../source/getting_started/installation.rst | 153 +++-- .../source/getting_started/quickstart.rst | 182 ++++-- .../getting_started/troubleshooting.rst | 214 +++++++ docs/sphinx/source/index.rst | 68 ++- docs/sphinx/source/project_structure.rst | 317 ++++++++++ docs/sphinx/source/tools/core_tools.rst | 563 +++++++++++++++++ docs/sphinx/source/tools/custom_tools.rst | 454 ++++++++++++++ docs/sphinx/source/tools/extract_item.rst | 98 --- docs/sphinx/source/tools/index.rst | 209 ------- docs/sphinx/source/tools/insert_item.rst | 101 ---- .../sphinx/source/tools/inspect_inventory.rst | 153 ----- docs/sphinx/source/tools/overview.rst | 189 ++++++ docs/sphinx/source/tools/place_entity.rst | 134 ----- pyproject.toml | 3 - 43 files changed, 3624 insertions(+), 4488 deletions(-) create mode 100644 docs/sphinx/source/advanced/database.rst create mode 100644 docs/sphinx/source/advanced/mcp.rst create mode 100644 docs/sphinx/source/advanced/sprites.rst delete mode 100644 docs/sphinx/source/api/action.rst delete mode 100644 docs/sphinx/source/api/environment.rst delete mode 100644 docs/sphinx/source/api/modules.rst delete mode 100644 docs/sphinx/source/api/modules/fle.agents.agent_abc.rst delete mode 100644 docs/sphinx/source/api/modules/fle.agents.models.rst delete mode 100644 docs/sphinx/source/api/modules/fle.commons.models.rst delete mode 100644 docs/sphinx/source/api/modules/fle.env.entities.rst delete mode 100644 docs/sphinx/source/api/modules/fle.env.game_types.rst delete mode 100644 docs/sphinx/source/api/modules/fle.env.gym_env.rst delete mode 100644 docs/sphinx/source/api/modules/fle.env.instance.rst delete mode 100644 docs/sphinx/source/api/modules/fle.env.namespace.rst delete mode 100644 docs/sphinx/source/api/modules/fle.eval.algorithms.rst delete mode 100644 docs/sphinx/source/api/modules/fle.eval.tasks.rst delete mode 100644 docs/sphinx/source/api/observation.rst delete mode 100644 docs/sphinx/source/api/tools.rst delete mode 100644 docs/sphinx/source/customization/agents.rst delete mode 100644 docs/sphinx/source/customization/database.rst delete mode 100644 docs/sphinx/source/customization/tasks.rst delete mode 100644 docs/sphinx/source/customization/tools.rst create mode 100644 docs/sphinx/source/environment/gym_registry.rst create mode 100644 docs/sphinx/source/environment/overview.rst delete mode 100644 docs/sphinx/source/examples/basic_agent.rst delete mode 100644 docs/sphinx/source/examples/multiagent.rst delete mode 100644 docs/sphinx/source/examples/visual_agent.rst delete mode 100644 docs/sphinx/source/getting_started/cluster.rst create mode 100644 docs/sphinx/source/getting_started/troubleshooting.rst create mode 100644 docs/sphinx/source/project_structure.rst create mode 100644 docs/sphinx/source/tools/core_tools.rst create mode 100644 docs/sphinx/source/tools/custom_tools.rst delete mode 100644 docs/sphinx/source/tools/extract_item.rst delete mode 100644 docs/sphinx/source/tools/index.rst delete mode 100644 docs/sphinx/source/tools/insert_item.rst delete mode 100644 docs/sphinx/source/tools/inspect_inventory.rst create mode 100644 docs/sphinx/source/tools/overview.rst delete mode 100644 docs/sphinx/source/tools/place_entity.rst diff --git a/README.md b/README.md index 153e7be4f..b73ead41c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,9 @@ uv sync Use the CLI: ```bash +# Activate venv +source .venv/bin/activate + # Start Factorio cluster fle cluster start diff --git a/docs/sphinx/source/advanced/database.rst b/docs/sphinx/source/advanced/database.rst new file mode 100644 index 000000000..600da6aa3 --- /dev/null +++ b/docs/sphinx/source/advanced/database.rst @@ -0,0 +1,407 @@ +Database Configuration +====================== + +FLE supports database checkpointing for long-running trajectories. The database stores agent outputs, environment feedback, game states, and histories of trajectories. + +Overview +-------- + +The database system enables: + +- **Checkpointing**: Save game state at every agent step +- **Resume Capability**: Continue trajectories from any checkpoint +- **Trajectory History**: Track complete agent interaction history +- **Analytics**: Analyze agent behavior across runs + +Supported Databases +------------------- + +FLE supports two database backends out of the box: + +1. **SQLite** (Default): File-based, zero-configuration +2. **PostgreSQL**: Client-server, better for concurrent access + +SQLite Configuration +-------------------- + +SQLite is the default database and requires minimal configuration. + +Setup +~~~~~ + +1. Set the database type in ``.env``: + + .. code-block:: bash + + FLE_DB_TYPE="sqlite" + +2. Configure the database file location: + + .. code-block:: bash + + SQLITE_DB_FILE=".fle/data.db" + +The SQLite file will be created automatically in the specified location if it doesn't exist. + +Benefits +~~~~~~~~ + +- **Zero Setup**: No server required +- **Portable**: Single file contains all data +- **Simple**: Easy to backup and share + +Limitations +~~~~~~~~~~~ + +- Not suitable for concurrent writes +- Limited scalability for very large datasets +- Single-threaded access + +PostgreSQL Configuration +------------------------ + +PostgreSQL provides better performance for large-scale experiments and concurrent access. + +Setup with Docker +~~~~~~~~~~~~~~~~~ + +The easiest way to set up PostgreSQL is using Docker: + +.. code-block:: bash + + docker run --name fle-postgres \ + -e POSTGRES_PASSWORD=fle123 \ + -e POSTGRES_USER=fle_user \ + -e POSTGRES_DB=fle_database \ + -p 5432:5432 \ + -d postgres:15 + +Environment Variables +~~~~~~~~~~~~~~~~~~~~~ + +Configure PostgreSQL in your ``.env`` file: + +.. code-block:: bash + + # Database Configuration - Set to postgres to use PostgreSQL + FLE_DB_TYPE="postgres" + + # PostgreSQL Configuration + SKILLS_DB_HOST=localhost + SKILLS_DB_PORT=5432 + SKILLS_DB_NAME=fle_database + SKILLS_DB_USER=fle_user + SKILLS_DB_PASSWORD=fle123 + +Manual PostgreSQL Setup +~~~~~~~~~~~~~~~~~~~~~~~~ + +If you prefer to install PostgreSQL manually: + +1. Install PostgreSQL 15+ +2. Create a database: + + .. code-block:: sql + + CREATE DATABASE fle_database; + CREATE USER fle_user WITH PASSWORD 'fle123'; + GRANT ALL PRIVILEGES ON DATABASE fle_database TO fle_user; + +3. Update ``.env`` with your connection details + +Benefits +~~~~~~~~ + +- **Concurrent Access**: Multiple processes can write simultaneously +- **Scalability**: Handles large datasets efficiently +- **Advanced Features**: Better query optimization, indexes, etc. + +Limitations +~~~~~~~~~~~ + +- Requires server setup and management +- More complex configuration +- Network dependency + +Database Schema +--------------- + +The FLE database stores: + +Trajectories +~~~~~~~~~~~~ + +- ``id``: Unique trajectory identifier +- ``task_id``: Associated task +- ``start_time``: When trajectory began +- ``end_time``: When trajectory completed +- ``status``: Current status (running, completed, failed) + +Steps +~~~~~ + +- ``id``: Unique step identifier +- ``trajectory_id``: Parent trajectory +- ``step_number``: Sequential step number +- ``agent_code``: Code executed by agent +- ``environment_feedback``: Response from environment +- ``game_state``: Serialized game state +- ``timestamp``: When step occurred + +Game States +~~~~~~~~~~~ + +- ``id``: Unique state identifier +- ``trajectory_id``: Associated trajectory +- ``step_id``: Associated step +- ``state_data``: Serialized game state +- ``timestamp``: When state was captured + +Using the Database +------------------ + +Accessing the Database +~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + from fle.commons.db_client import get_db_client + + # Get database client (auto-detects type from .env) + db = get_db_client() + + # Query trajectories + trajectories = db.get_all_trajectories() + + # Get specific trajectory + trajectory = db.get_trajectory(trajectory_id) + + # Get steps for a trajectory + steps = db.get_trajectory_steps(trajectory_id) + +Saving Checkpoints +~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + # Save a checkpoint + db.save_checkpoint( + trajectory_id=trajectory_id, + step_number=step_num, + agent_code=code, + environment_feedback=feedback, + game_state=state + ) + +Resuming from Checkpoint +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + # Load checkpoint + checkpoint = db.get_checkpoint(trajectory_id, step_number) + + # Resume environment from checkpoint + env.load_state(checkpoint['game_state']) + + # Continue execution + obs, reward, done, truncated, info = env.step(next_action) + +Database Client API +------------------- + +Core Methods +~~~~~~~~~~~~ + +.. code-block:: python + + # Create new trajectory + trajectory_id = db.create_trajectory(task_id, metadata) + + # Save step + db.save_step(trajectory_id, step_data) + + # Get trajectory + trajectory = db.get_trajectory(trajectory_id) + + # Get all trajectories for a task + trajectories = db.get_task_trajectories(task_id) + + # Delete trajectory + db.delete_trajectory(trajectory_id) + +Query Methods +~~~~~~~~~~~~~ + +.. code-block:: python + + # Get latest checkpoint + checkpoint = db.get_latest_checkpoint(trajectory_id) + + # Get checkpoint at specific step + checkpoint = db.get_checkpoint(trajectory_id, step_number) + + # Count steps in trajectory + count = db.count_steps(trajectory_id) + + # Check if trajectory exists + exists = db.trajectory_exists(trajectory_id) + +Migration +--------- + +Switching Databases +~~~~~~~~~~~~~~~~~~~ + +To migrate from SQLite to PostgreSQL: + +1. Export data from SQLite: + + .. code-block:: python + + from fle.commons.db_client import SQLiteClient + + sqlite_db = SQLiteClient(db_file='.fle/data.db') + trajectories = sqlite_db.export_all() + +2. Import into PostgreSQL: + + .. code-block:: python + + from fle.commons.db_client import PostgreSQLClient + + pg_db = PostgreSQLClient( + host='localhost', + port=5432, + database='fle_database', + user='fle_user', + password='fle123' + ) + pg_db.import_all(trajectories) + +3. Update ``.env`` to use PostgreSQL + +Backup and Restore +------------------ + +SQLite Backup +~~~~~~~~~~~~~ + +.. code-block:: bash + + # Simple file copy + cp .fle/data.db .fle/data.db.backup + + # Or use SQLite command + sqlite3 .fle/data.db ".backup '.fle/data.db.backup'" + +PostgreSQL Backup +~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + + # Dump database + pg_dump -h localhost -U fle_user fle_database > backup.sql + + # Restore database + psql -h localhost -U fle_user fle_database < backup.sql + +Performance Optimization +------------------------ + +SQLite Optimization +~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + # Use WAL mode for better concurrency + db.execute("PRAGMA journal_mode=WAL") + + # Increase cache size + db.execute("PRAGMA cache_size=-64000") # 64MB + +PostgreSQL Optimization +~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sql + + -- Create indexes for common queries + CREATE INDEX idx_trajectory_task ON trajectories(task_id); + CREATE INDEX idx_step_trajectory ON steps(trajectory_id); + CREATE INDEX idx_step_timestamp ON steps(timestamp); + + -- Analyze tables + ANALYZE trajectories; + ANALYZE steps; + +Troubleshooting +--------------- + +Connection Errors +~~~~~~~~~~~~~~~~~ + +**SQLite**: + +- Verify file path exists and is writable +- Check file permissions +- Ensure parent directory exists + +**PostgreSQL**: + +- Verify server is running: ``docker ps`` or ``systemctl status postgresql`` +- Check connection details in ``.env`` +- Test connection: ``psql -h localhost -U fle_user fle_database`` + +Performance Issues +~~~~~~~~~~~~~~~~~~ + +**SQLite**: + +- Enable WAL mode +- Increase cache size +- Consider switching to PostgreSQL for large datasets + +**PostgreSQL**: + +- Add indexes on frequently queried columns +- Tune PostgreSQL configuration (``postgresql.conf``) +- Monitor query performance with ``EXPLAIN ANALYZE`` + +Disk Space +~~~~~~~~~~ + +**SQLite**: + +.. code-block:: bash + + # Check database size + du -h .fle/data.db + + # Vacuum to reclaim space + sqlite3 .fle/data.db "VACUUM;" + +**PostgreSQL**: + +.. code-block:: sql + + -- Check database size + SELECT pg_size_pretty(pg_database_size('fle_database')); + + -- Vacuum to reclaim space + VACUUM ANALYZE; + +Best Practices +-------------- + +1. **Regular Backups**: Back up your database regularly, especially before major experiments +2. **Use PostgreSQL for Large Runs**: For experiments with >1000 steps, use PostgreSQL +3. **Clean Up Old Data**: Periodically remove old trajectories you no longer need +4. **Monitor Disk Space**: Keep an eye on database size, especially with SQLite +5. **Use Transactions**: Batch multiple operations in transactions for better performance + +Next Steps +---------- + +- Review :doc:`../getting_started/quickstart` for basic usage +- See :doc:`../environment/overview` for environment context +- Check :doc:`../getting_started/troubleshooting` for common issues diff --git a/docs/sphinx/source/advanced/mcp.rst b/docs/sphinx/source/advanced/mcp.rst new file mode 100644 index 000000000..2f2fc935f --- /dev/null +++ b/docs/sphinx/source/advanced/mcp.rst @@ -0,0 +1,276 @@ +Model Context Protocol (MCP) +============================ + +FLE supports the `Model Context Protocol `_ (MCP) to enable LLM reasoning models to invoke tools directly. + +Overview +-------- + +The Model Context Protocol is a standardized interface that allows AI models to interact with external tools and services. FLE's MCP integration enables: + +- Direct tool invocation from LLM reasoning models +- Standardized request/response formats +- Seamless integration with MCP-compatible clients + +What is MCP? +------------ + +MCP provides a universal interface for: + +1. **Tool Discovery**: Models can discover available tools and their capabilities +2. **Tool Invocation**: Models can call tools with structured parameters +3. **Result Handling**: Models receive typed responses from tool calls + +Benefits +-------- + +Using MCP with FLE provides: + +- **Standardization**: Works with any MCP-compatible client +- **Type Safety**: Structured tool definitions with parameter types +- **Extensibility**: Easy to add new tools to the MCP interface +- **Interoperability**: Compatible with the broader MCP ecosystem + +Installation +------------ + +To use MCP features, install FLE with MCP support: + +.. code-block:: bash + + pip install factorio-learning-environment[mcp] + + # Or with uv + uv add factorio-learning-environment[mcp] + +Configuration +------------- + +MCP configuration is located in ``fle/env/protocols/_mcp/``. The MCP server automatically exposes all agent-accessible tools. + +Using MCP +--------- + +Starting the MCP Server +~~~~~~~~~~~~~~~~~~~~~~~ + +The MCP server can be started alongside the FLE environment: + +.. code-block:: python + + from fle.env.protocols.mcp import MCPServer + + # Initialize MCP server + server = MCPServer() + server.start() + +Tool Discovery +~~~~~~~~~~~~~~ + +MCP clients can discover available tools: + +.. code-block:: python + + # List all available tools + tools = server.list_tools() + + for tool in tools: + print(f"Tool: {tool.name}") + print(f"Description: {tool.description}") + print(f"Parameters: {tool.parameters}") + +Invoking Tools +~~~~~~~~~~~~~~ + +Tools can be invoked through the MCP interface: + +.. code-block:: python + + # Invoke a tool + result = server.invoke_tool( + tool_name="place_entity", + parameters={ + "entity": "burner-mining-drill", + "position": {"x": 10, "y": 20}, + "direction": "north" + } + ) + + print(f"Result: {result}") + +Integration with LLM Clients +----------------------------- + +MCP-Compatible Clients +~~~~~~~~~~~~~~~~~~~~~~ + +FLE's MCP implementation works with: + +- Claude Desktop +- Other MCP-compatible AI assistants +- Custom MCP clients + +Example Integration +~~~~~~~~~~~~~~~~~~~ + +Here's how to integrate FLE with an MCP-compatible client: + +.. code-block:: json + + { + "mcpServers": { + "factorio": { + "command": "python", + "args": ["-m", "fle.env.protocols.mcp.server"], + "env": { + "FLE_CLUSTER_HOST": "localhost", + "FLE_CLUSTER_PORT": "34197" + } + } + } + } + +Tool Definitions +---------------- + +MCP tools are automatically generated from FLE's tool definitions. Each tool includes: + +- **Name**: The tool identifier +- **Description**: What the tool does (from ``agent.md``) +- **Parameters**: Typed parameter schema +- **Return Type**: Expected response format + +Example Tool Definition +~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: json + + { + "name": "place_entity", + "description": "Places an entity in the world at a specified position", + "parameters": { + "type": "object", + "properties": { + "entity": { + "type": "string", + "description": "The entity prototype to place" + }, + "position": { + "type": "object", + "properties": { + "x": {"type": "number"}, + "y": {"type": "number"} + } + }, + "direction": { + "type": "string", + "enum": ["north", "south", "east", "west"] + } + }, + "required": ["entity", "position"] + } + } + +Advanced Usage +-------------- + +Custom MCP Tools +~~~~~~~~~~~~~~~~ + +You can create custom MCP-specific tools by following the :doc:`../tools/custom_tools` guide. Tools created this way are automatically exposed via MCP. + +Error Handling +~~~~~~~~~~~~~~ + +MCP calls return structured errors: + +.. code-block:: json + + { + "error": { + "code": "InvalidParameters", + "message": "Entity 'invalid-entity' not found", + "details": { + "entity": "invalid-entity", + "available_entities": ["burner-mining-drill", "iron-chest", ...] + } + } + } + +State Management +~~~~~~~~~~~~~~~~ + +MCP maintains state between tool calls: + +- Variables persist in the namespace +- Entities remain referenced across calls +- Game state is preserved + +Architecture +------------ + +.. code-block:: text + + ┌─────────────────────┐ + │ MCP Client │ + │ (Claude, etc.) │ + └──────────┬──────────┘ + │ + │ MCP Protocol + │ + ┌──────────▼──────────┐ + │ MCP Server │ + │ (FLE Protocol) │ + └──────────┬──────────┘ + │ + │ Tool Calls + │ + ┌──────────▼──────────┐ + │ FLE Environment │ + │ (Game Instance) │ + └─────────────────────┘ + +Documentation +------------- + +For detailed MCP documentation, see: + +- `Official MCP Documentation `_ +- ``fle/env/protocols/_mcp/README.md`` in the repository + +Troubleshooting +--------------- + +Connection Issues +~~~~~~~~~~~~~~~~~ + +If MCP clients can't connect: + +1. Verify the MCP server is running +2. Check port configuration +3. Ensure Factorio cluster is started + +Tool Not Found +~~~~~~~~~~~~~~ + +If a tool is not available via MCP: + +1. Verify the tool exists in ``fle/env/tools/agent/`` +2. Check that the tool has all required files (``client.py``, ``server.lua``, ``agent.md``) +3. Restart the MCP server + +Invalid Parameters +~~~~~~~~~~~~~~~~~~ + +If tool calls fail with parameter errors: + +1. Check the tool's parameter schema +2. Verify parameter types match the schema +3. Ensure required parameters are provided + +Next Steps +---------- + +- Review :doc:`../tools/overview` to understand available tools +- See :doc:`../tools/custom_tools` to create MCP-compatible tools +- Check the official MCP documentation for client integration diff --git a/docs/sphinx/source/advanced/sprites.rst b/docs/sphinx/source/advanced/sprites.rst new file mode 100644 index 000000000..2d26bffda --- /dev/null +++ b/docs/sphinx/source/advanced/sprites.rst @@ -0,0 +1,351 @@ +Sprites +======= + +FLE includes sprite management functionality for downloading spritemaps, extracting individual entity sprites, icons, and other visual assets from HuggingFace for use in visual reasoning tasks. + +Overview +-------- + +The sprite system provides: + +- **Sprite Downloads**: Automatic downloading of Factorio sprite assets +- **Extraction**: Processing spritemaps into individual entity sprites +- **Icons**: Entity and item icons for visual identification +- **Visual Reasoning**: Support for vision-enabled agents + +Why Use Sprites? +---------------- + +Sprites enable visual reasoning capabilities for agents: + +1. **Visual Observations**: Agents can see the game state as images +2. **Entity Recognition**: Identify entities by their visual appearance +3. **Spatial Reasoning**: Understand layouts and positioning visually +4. **Multimodal Learning**: Combine text and visual information + +Installation +------------ + +Sprites are automatically downloaded when needed, but you can pre-download them: + +.. code-block:: bash + + # Download and generate sprites + fle sprites + + # Force re-download even if sprites exist + fle sprites --force + + # Use custom directories and worker count + fle sprites --spritemap-dir .fle/spritemaps --sprite-dir .fle/sprites --workers 5 + +Default Locations +----------------- + +By default, sprites are stored in: + +- **Spritemaps**: ``.fle/spritemaps/`` - Raw spritemap files from HuggingFace +- **Sprites**: ``.fle/sprites/`` - Extracted individual entity/item sprites + +You can customize these locations using command-line arguments. + +CLI Usage +--------- + +Basic Command +~~~~~~~~~~~~~ + +.. code-block:: bash + + # Download and extract sprites + fle sprites + +Options +~~~~~~~ + +.. code-block:: bash + + # Force re-download + fle sprites --force + + # Custom directories + fle sprites --spritemap-dir /path/to/spritemaps --sprite-dir /path/to/sprites + + # Parallel processing (default: 4 workers) + fle sprites --workers 8 + +Programmatic Usage +------------------ + +Loading Sprites +~~~~~~~~~~~~~~~ + +.. code-block:: python + + from fle.env.sprites import SpriteManager + + # Initialize sprite manager + sprite_manager = SpriteManager() + + # Get sprite for an entity + sprite = sprite_manager.get_sprite('burner-mining-drill') + + # Get icon for an item + icon = sprite_manager.get_icon('iron-plate') + + # Get all available sprites + available = sprite_manager.list_sprites() + +Using Sprites with Agents +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + from fle.agents import VisualAgent + import gym + + # Create environment with visual observations + env = gym.make("iron_ore_throughput") + + # Create visual agent + agent = VisualAgent( + sprite_manager=SpriteManager(), + model="gpt-4-vision" + ) + + # Agent can now use visual information + obs = env.reset() + action = agent.get_action(obs, include_visual=True) + +Visual Observations +------------------- + +Visual observations include: + +- **Map Image**: Base64 encoded PNG of the game map +- **Entity Sprites**: Individual entity appearances +- **Overlays**: Visual indicators for status, connections, etc. + +Example observation with visuals: + +.. code-block:: python + + { + 'raw_text': '...', + 'entities': [...], + 'map_image': 'data:image/png;base64,...', + 'sprites': { + 'burner-mining-drill': 'data:image/png;base64,...', + 'iron-chest': 'data:image/png;base64,...' + } + } + +Sprite Categories +----------------- + +Entity Sprites +~~~~~~~~~~~~~~ + +Visual representations of game entities: + +- Mining drills +- Furnaces +- Assembling machines +- Inserters +- Transport belts +- Pipes +- Power poles + +Item Icons +~~~~~~~~~~ + +Icons for items and resources: + +- Raw materials (ore, wood, stone) +- Plates (iron, copper, steel) +- Intermediate products +- Science packs +- Modules + +Performance Considerations +-------------------------- + +Sprite Loading +~~~~~~~~~~~~~~ + +- Sprites are loaded on-demand by default +- Pre-loading all sprites increases memory usage but improves performance +- Use worker processes for faster initial extraction + +Caching +~~~~~~~ + +- Extracted sprites are cached on disk +- Subsequent loads are much faster +- Clear cache with ``fle sprites --force`` + +Resolution +~~~~~~~~~~ + +Sprites are provided at their native resolution. You can resize them as needed: + +.. code-block:: python + + from PIL import Image + import base64 + from io import BytesIO + + # Decode base64 sprite + sprite_data = base64.b64decode(sprite_base64) + image = Image.open(BytesIO(sprite_data)) + + # Resize + resized = image.resize((32, 32)) + +Advanced Usage +-------------- + +Custom Sprite Sources +~~~~~~~~~~~~~~~~~~~~~ + +You can provide custom sprite sources: + +.. code-block:: python + + sprite_manager = SpriteManager( + spritemap_dir='/custom/path/spritemaps', + sprite_dir='/custom/path/sprites' + ) + +Batch Processing +~~~~~~~~~~~~~~~~ + +Process multiple sprites efficiently: + +.. code-block:: python + + # Get multiple sprites at once + sprites = sprite_manager.get_sprites([ + 'burner-mining-drill', + 'iron-chest', + 'stone-furnace' + ]) + +Export Sprites +~~~~~~~~~~~~~~ + +Export sprites to individual files: + +.. code-block:: bash + + # Export all sprites to directory + fle sprites --export-dir ./exported_sprites + +Integration with Vision Models +------------------------------- + +GPT-4 Vision +~~~~~~~~~~~~ + +.. code-block:: python + + import openai + import base64 + + # Get map image + map_image = obs['map_image'] + + # Send to GPT-4 Vision + response = openai.ChatCompletion.create( + model="gpt-4-vision-preview", + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": "Analyze this Factorio base layout:"}, + {"type": "image_url", "image_url": {"url": map_image}} + ] + } + ] + ) + +Claude Vision +~~~~~~~~~~~~~ + +.. code-block:: python + + import anthropic + + client = anthropic.Anthropic() + + # Get map image (remove data URL prefix) + map_image_data = obs['map_image'].split(',')[1] + + message = client.messages.create( + model="claude-3-opus-20240229", + messages=[ + { + "role": "user", + "content": [ + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/png", + "data": map_image_data + } + }, + { + "type": "text", + "text": "What entities do you see in this layout?" + } + ] + } + ] + ) + +Troubleshooting +--------------- + +Download Fails +~~~~~~~~~~~~~~ + +If sprite download fails: + +1. Check your internet connection +2. Verify access to HuggingFace +3. Try again with ``--force`` flag + +Missing Sprites +~~~~~~~~~~~~~~~ + +If specific sprites are missing: + +1. Run ``fle sprites --force`` to re-download +2. Check the sprite directory exists +3. Verify sprite names match Factorio prototypes + +Memory Issues +~~~~~~~~~~~~~ + +If you encounter memory issues: + +1. Don't pre-load all sprites +2. Use on-demand loading +3. Clear sprite cache periodically + +Image Format Issues +~~~~~~~~~~~~~~~~~~~ + +If image decoding fails: + +1. Verify base64 encoding is correct +2. Check image format (should be PNG) +3. Ensure data URL prefix is handled correctly + +Next Steps +---------- + +- Learn about :doc:`../tools/overview` for non-visual interactions +- See the `Visual Agent example `_ +- Review :doc:`../environment/overview` for context diff --git a/docs/sphinx/source/api/action.rst b/docs/sphinx/source/api/action.rst deleted file mode 100644 index 8f9737f24..000000000 --- a/docs/sphinx/source/api/action.rst +++ /dev/null @@ -1,251 +0,0 @@ -Action Space -============ - -The action space defines how agents interact with the Factorio Learning Environment through Python code synthesis. - -Action Structure ----------------- - -Actions are defined by the Action class: - -.. autoclass:: fle.env.gym_env.action.Action - :members: - :undoc-members: - :show-inheritance: - -Action Components ------------------ - -**agent_idx** - Index of the agent taking the action (for multi-agent environments) - -**code** - Python code to execute in the game environment - -**game_state** - Optional game state to reset to before running code - -Action Space Definition ------------------------- - -The action space follows this structure: - -.. code-block:: python - - { - 'agent_idx': Discrete(instance.num_agents), # Index of the agent taking the action - 'game_state': Text(max_length=1000000), # Optional: game state to reset to before running code - 'code': Text(max_length=10000) # Python code to execute - } - -Code Execution --------------- - -The environment executes Python code in a controlled namespace that includes: - -**Standard Library** - Full Python standard library access - -**FLE Tools** - All available tools for game interaction - -**Namespace Persistence** - Variables and functions persist between actions - -**Error Handling** - Comprehensive exception handling with detailed error messages - -Example Actions ---------------- - -**Basic Movement** - .. code-block:: python - - action = Action( - agent_idx=0, - code='position = get_position()', - game_state=None - ) - -**Entity Placement** - .. code-block:: python - - action = Action( - agent_idx=0, - code=''' - drill = place_entity( - entity=Prototype.MiningDrill, - position=nearest(Resource.IronOre), - direction=Direction.NORTH - ) - ''', - game_state=None - ) - -**Complex Automation** - .. code-block:: python - - action = Action( - agent_idx=0, - code=''' - # Get iron patch and place mining drill - drill = place_entity( - entity=Prototype.MiningDrill, - position=nearest(Resource.IronOre), - direction=Direction.NORTH - ) - # Add output storage - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - # Verify automation chain - sleep(10) - assert drill.status == EntityStatus.WORKING - print(get_entities()) - ''', - game_state=None - ) - -**Function Definition** - .. code-block:: python - - action = Action( - agent_idx=0, - code=''' - def place_mining_setup(resource_type, direction): - drill = place_entity( - entity=Prototype.MiningDrill, - position=nearest(resource_type), - direction=direction - ) - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - return drill, chest - - # Use the function - drill, chest = place_mining_setup(Resource.IronOre, Direction.NORTH) - ''', - game_state=None - ) - -**Class Definition** - .. code-block:: python - - action = Action( - agent_idx=0, - code=''' - class MiningOperation: - def __init__(self, resource_type, position): - self.resource_type = resource_type - self.position = position - self.drill = None - self.chest = None - - def setup(self): - self.drill = place_entity( - entity=Prototype.MiningDrill, - position=self.position, - direction=Direction.NORTH - ) - self.chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=self.drill.drop_position, - direction=Direction.SOUTH - ) - - def is_working(self): - return self.drill.status == EntityStatus.WORKING - - # Create and use the class - mining_op = MiningOperation(Resource.IronOre, nearest(Resource.IronOre)) - mining_op.setup() - print(f"Mining operation working: {mining_op.is_working()}") - ''', - game_state=None - ) - -Error Handling --------------- - -The environment provides comprehensive error handling: - -**Syntax Errors** - Python syntax errors are caught and reported with line numbers - -**Runtime Errors** - Exceptions during code execution are captured with full stack traces - -**Tool Errors** - Invalid tool usage is reported with detailed error messages - -**Assertion Failures** - Failed assertions provide context about expected vs actual values - -Example Error Handling ----------------------- - -.. code-block:: python - - # Invalid tool usage - action = Action( - agent_idx=0, - code='place_entity(entity="invalid", position=(0, 0))', - game_state=None - ) - - # Results in error message: - # ValueError: Invalid entity type 'invalid'. Expected Prototype enum value. - -**Debugging Support** - The environment provides debugging information: - - - **Variable Inspection**: Access to all namespace variables - - **Function Signatures**: Available functions and their parameters - - **Entity State**: Current state of all game entities - - **Error Context**: Detailed error information with suggestions - -Multi-Agent Actions -------------------- - -For multi-agent environments, actions can be coordinated: - -.. code-block:: python - - # Agent 0 places a drill - action_0 = Action( - agent_idx=0, - code='drill = place_entity(entity=Prototype.MiningDrill, position=nearest(Resource.IronOre))', - game_state=None - ) - - # Agent 1 places a chest next to it - action_1 = Action( - agent_idx=1, - code='chest = place_entity_next_to(entity=Prototype.IronChest, reference_position=drill.drop_position)', - game_state=None - ) - -Action Validation ------------------ - -The environment validates actions before execution: - -- **Agent Index**: Ensures valid agent index -- **Code Length**: Limits code to prevent resource exhaustion -- **Game State**: Validates game state format if provided -- **Tool Availability**: Ensures requested tools are available - -Best Practices --------------- - -1. **Use Descriptive Variable Names**: Make code readable and maintainable -2. **Handle Errors Gracefully**: Use try-except blocks for robust code -3. **Leverage Namespace**: Store useful objects for later reference -4. **Use Functions**: Encapsulate common operations -5. **Debug with Print**: Use print statements to monitor execution -6. **Assert Conditions**: Use assertions to verify expected behavior diff --git a/docs/sphinx/source/api/environment.rst b/docs/sphinx/source/api/environment.rst deleted file mode 100644 index 486440c8c..000000000 --- a/docs/sphinx/source/api/environment.rst +++ /dev/null @@ -1,128 +0,0 @@ -Environment API -=============== - -The Factorio Learning Environment provides a comprehensive API for interacting with the game through Python code synthesis. - -Core Concepts -------------- - -**FactorioInstance** - The main interface for interacting with a Factorio game instance. Provides access to all game state and tools. - -**Namespace Management** - Python namespace that persists across agent actions, allowing for stateful interactions and code reuse. - -**Gym Environment Integration** - Standard OpenAI Gym interface for reinforcement learning integration. - -FactorioInstance ----------------- - -.. autoclass:: fle.env.instance.FactorioInstance - :members: - :undoc-members: - :show-inheritance: - -Key Methods -~~~~~~~~~~~ - -.. automethod:: fle.env.instance.FactorioInstance.reset -.. automethod:: fle.env.instance.FactorioInstance.step -.. automethod:: fle.env.instance.FactorioInstance.close - -Namespace Management --------------------- - -.. autoclass:: fle.env.namespace.Namespace - :members: - :undoc-members: - :show-inheritance: - -The namespace provides: - -- **Variable Storage**: Store and retrieve objects between actions -- **Function Definitions**: Define reusable functions -- **Class Definitions**: Create custom data structures -- **Import Management**: Handle Python imports and modules - -Gym Environment ---------------- - -.. autoclass:: fle.env.gym_env.FactorioGymEnv - :members: - :undoc-members: - :show-inheritance: - -The gym environment provides: - -- **Standard Interface**: Compatible with OpenAI Gym -- **Action Space**: Structured action space for agent actions -- **Observation Space**: Rich observation space with game state -- **Reward System**: Configurable reward functions - -Environment Registry --------------------- - -FLE uses a gym environment registry to automatically discover and register all available tasks. - -.. autofunction:: fle.env.gym_env.registry.list_available_environments -.. autofunction:: fle.env.gym_env.registry.get_environment_info -.. autofunction:: fle.env.gym_env.registry.register_all_environments - -Available Environments -~~~~~~~~~~~~~~~~~~~~~~~ - -**Throughput Tasks (Lab Play)** - All throughput tasks are defined in `fle/eval/tasks/task_definitions/lab_play/throughput_tasks.py`. The 24 available tasks are: - - - **Circuits**: `advanced_circuit_throughput`, `electronic_circuit_throughput`, `processing_unit_throughput` - - **Science Packs**: `automation_science_pack_throughput`, `logistics_science_pack_throughput`, `chemical_science_pack_throughput`, `military_science_pack_throughput`, `production_science_pack_throughput`, `utility_science_pack_throughput` - - **Components**: `battery_throughput`, `engine_unit_throughput`, `inserter_throughput`, `iron_gear_wheel_throughput`, `low_density_structure_throughput` - - **Raw Materials**: `iron_ore_throughput`, `iron_plate_throughput`, `steel_plate_throughput`, `plastic_bar_throughput` - - **Oil & Chemicals**: `crude_oil_throughput`, `petroleum_gas_throughput`, `sufuric_acid_throughput`, `sulfur_throughput` - - **Military**: `piercing_round_throughput`, `stone_wall_throughput` - - Most tasks require 16 items per 60 seconds; fluid tasks require 250 units per 60 seconds. - -**Open Play** - Unbounded task of building the largest possible factory: `open_play` - -Example Usage -------------- - -.. code-block:: python - - import gym - from fle.env.gym_env.action import Action - - # Create any available environment - env = gym.make("iron_ore_throughput") - - # Reset the environment - obs = env.reset(options={'game_state': None}) - - # Take an action - action = Action( - agent_idx=0, # Which agent takes the action - code='print("Hello Factorio!")', # Python code to execute - game_state=None # Optional: game state to reset to before running code - ) - - # Execute the action - obs, reward, terminated, truncated, info = env.step(action) - - # Clean up - env.close() - -Error Handling --------------- - -The environment includes comprehensive error handling for: - -- Missing task definition files -- Invalid JSON configurations -- Missing Factorio containers -- Environment creation failures -- Network connectivity issues - -If an environment fails to load, a warning will be printed but the registry will continue to load other environments. diff --git a/docs/sphinx/source/api/modules.rst b/docs/sphinx/source/api/modules.rst deleted file mode 100644 index 6b5e931a5..000000000 --- a/docs/sphinx/source/api/modules.rst +++ /dev/null @@ -1,42 +0,0 @@ -API Modules -=========== - -This section contains the complete API reference for all FLE modules. - -Core Environment ----------------- - -.. toctree:: - :maxdepth: 2 - - modules/fle.env.instance - modules/fle.env.namespace - modules/fle.env.gym_env - modules/fle.env.entities - modules/fle.env.game_types - -Agents ------- - -.. toctree:: - :maxdepth: 2 - - modules/fle.agents.agent_abc - modules/fle.agents.models - -Evaluation ----------- - -.. toctree:: - :maxdepth: 2 - - modules/fle.eval.tasks - modules/fle.eval.algorithms - -Common Models -------------- - -.. toctree:: - :maxdepth: 2 - - modules/fle.commons.models diff --git a/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst b/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst deleted file mode 100644 index 0b7dd4707..000000000 --- a/docs/sphinx/source/api/modules/fle.agents.agent_abc.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.agents.agent_abc module -=========================== - -.. automodule:: fle.agents.agent_abc - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.agents.models.rst b/docs/sphinx/source/api/modules/fle.agents.models.rst deleted file mode 100644 index 16f04c4a7..000000000 --- a/docs/sphinx/source/api/modules/fle.agents.models.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.agents.models module -======================== - -.. automodule:: fle.agents.models - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.commons.models.rst b/docs/sphinx/source/api/modules/fle.commons.models.rst deleted file mode 100644 index ffcd449b8..000000000 --- a/docs/sphinx/source/api/modules/fle.commons.models.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.commons.models module -========================= - -.. automodule:: fle.commons.models - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.entities.rst b/docs/sphinx/source/api/modules/fle.env.entities.rst deleted file mode 100644 index 8964ea1a3..000000000 --- a/docs/sphinx/source/api/modules/fle.env.entities.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.env.entities module -======================= - -.. automodule:: fle.env.entities - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.game_types.rst b/docs/sphinx/source/api/modules/fle.env.game_types.rst deleted file mode 100644 index 60ae7c422..000000000 --- a/docs/sphinx/source/api/modules/fle.env.game_types.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.env.game_types module -========================= - -.. automodule:: fle.env.game_types - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.gym_env.rst b/docs/sphinx/source/api/modules/fle.env.gym_env.rst deleted file mode 100644 index a31567df5..000000000 --- a/docs/sphinx/source/api/modules/fle.env.gym_env.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.env.gym_env module -====================== - -.. automodule:: fle.env.gym_env - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.instance.rst b/docs/sphinx/source/api/modules/fle.env.instance.rst deleted file mode 100644 index 7e181751e..000000000 --- a/docs/sphinx/source/api/modules/fle.env.instance.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.env.instance module -======================== - -.. automodule:: fle.env.instance - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.env.namespace.rst b/docs/sphinx/source/api/modules/fle.env.namespace.rst deleted file mode 100644 index bbf5c11b8..000000000 --- a/docs/sphinx/source/api/modules/fle.env.namespace.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.env.namespace module -======================== - -.. automodule:: fle.env.namespace - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.eval.algorithms.rst b/docs/sphinx/source/api/modules/fle.eval.algorithms.rst deleted file mode 100644 index 044d3a738..000000000 --- a/docs/sphinx/source/api/modules/fle.eval.algorithms.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.eval.algorithms module -========================== - -.. automodule:: fle.eval.algorithms - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/modules/fle.eval.tasks.rst b/docs/sphinx/source/api/modules/fle.eval.tasks.rst deleted file mode 100644 index b1c391a33..000000000 --- a/docs/sphinx/source/api/modules/fle.eval.tasks.rst +++ /dev/null @@ -1,7 +0,0 @@ -fle.eval.tasks module -===================== - -.. automodule:: fle.eval.tasks - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/source/api/observation.rst b/docs/sphinx/source/api/observation.rst deleted file mode 100644 index 1f54c065a..000000000 --- a/docs/sphinx/source/api/observation.rst +++ /dev/null @@ -1,178 +0,0 @@ -Observation Space -================== - -The observation space provides rich information about the current game state, allowing agents to make informed decisions. - -Observation Structure --------------------- - -The observation space includes the following components: - -**raw_text** - Output from the last action (stdout/stderr) - -**entities** - List of entities on the map with their current state - -**inventory** - Current inventory state of the player - -**research** - Research progress and available technologies - -**game_info** - Game state information (tick, time, speed) - -**score** - Current score and performance metrics - -**flows** - Production statistics and resource flows - -**task_verification** - Task completion status and progress - -**messages** - Inter-agent communication messages - -**serialized_functions** - Available functions and their signatures - -**task_info** - Information about the current task - -**map_image** - Base64 encoded PNG image of the current map - -Entity Information ------------------- - -Entities provide detailed information about game objects: - -.. autoclass:: fle.env.entities.Entity - :members: - :undoc-members: - :show-inheritance: - -Entity Types -~~~~~~~~~~~~ - -**MiningDrill** - Mining drills for extracting resources - -**Chest** - Storage containers for items - -**AssemblingMachine** - Machines for crafting items - -**Inserter** - Transport devices for moving items - -**TransportBelt** - Conveyor belts for item transport - -**Pipe** - Fluid transport systems - -**PowerPole** - Electrical distribution - -**Lab** - Research facilities - -Position and Direction ----------------------- - -.. autoclass:: fle.env.game_types.Position - :members: - :undoc-members: - :show-inheritance: - -.. autoclass:: fle.env.game_types.Direction - :members: - :undoc-members: - :show-inheritance: - -Inventory Management --------------------- - -.. autoclass:: fle.env.game_types.Inventory - :members: - :undoc-members: - :show-inheritance: - -The inventory system provides: - -- **Item Storage**: Store and retrieve items -- **Count Methods**: Query item quantities -- **Type Validation**: Ensure item compatibility -- **Transfer Operations**: Move items between inventories - -Research System ---------------- - -.. autoclass:: fle.env.game_types.Research - :members: - :undoc-members: - :show-inheritance: - -Research provides: - -- **Technology Tree**: Available technologies -- **Prerequisites**: Required research -- **Progress Tracking**: Current research status -- **Unlock Management**: New technologies and recipes - -Game State Information ----------------------- - -.. autoclass:: fle.env.game_types.GameInfo - :members: - :undoc-members: - :show-inheritance: - -Game info includes: - -- **Tick Information**: Current game tick -- **Time Data**: Game time and speed -- **Performance Metrics**: FPS and UPS -- **Map Information**: World size and generation - -Task Verification ----------------- - -.. autoclass:: fle.env.game_types.TaskVerification - :members: - :undoc-members: - :show-inheritance: - -Task verification provides: - -- **Completion Status**: Whether the task is complete -- **Progress Metrics**: Current progress toward goals -- **Objective Tracking**: Individual objective status -- **Performance Data**: Efficiency and throughput metrics - -Example Observation -------------------- - -.. code-block:: python - - { - 'raw_text': 'Hello Factorio!', - 'entities': [ - Entity(name='burner-mining-drill', position=Position(x=-28.0, y=-61.0), ...), - Entity(name='iron-chest', position=Position(x=-27.5, y=-59.5), ...) - ], - 'inventory': Inventory({'iron-ore': 75, 'coal': 4}), - 'research': Research(technologies=['automation'], progress=0.5), - 'game_info': GameInfo(tick=1000, time=16.67, speed=1.0), - 'score': 150, - 'flows': {'iron-ore': 2.5, 'iron-plate': 1.2}, - 'task_verification': TaskVerification(complete=False, progress=0.3), - 'messages': [], - 'serialized_functions': ['place_entity', 'get_entities', ...], - 'task_info': {'name': 'iron_ore_throughput', 'target': 16}, - 'map_image': 'iVBORw0KGgoAAAANSUhEUgAA...' - } diff --git a/docs/sphinx/source/api/tools.rst b/docs/sphinx/source/api/tools.rst deleted file mode 100644 index 29db00fe9..000000000 --- a/docs/sphinx/source/api/tools.rst +++ /dev/null @@ -1,252 +0,0 @@ -Tools API -========= - -Agents interact with the game using _tools_, which represent a narrow API into the game. Tools are functions that perform game actions and return typed objects. - -Tool Architecture ------------------ - -Tools live in `fle/env/tools/agent/` and require 3 files: - -1. **agent.md**: Documentation for the agent, including usage patterns, best practices and failure modes -2. **client.py**: Client-side implementation, a Python class that can be invoked by the agent -3. **server.lua**: Server-side implementation, which handles most of the logic and heavy lifting - -.. note:: - The tool workflow connects the agent's synthesized Python program to the client-side ``client.py`` and then to the Factorio server's ``server.lua``, returning structured results back to the agent for the next step. - -Core Tools ----------- - -Inventory Management -~~~~~~~~~~~~~~~~~~~~ - -**inspect_inventory** - Checks contents of player or entity inventories - - - Supports various inventory types (chests, furnaces, etc.) - - Returns Inventory object with count methods - - Can query specific items - -**insert_item** - Places items from player inventory into entities - - - Works with machines, chests, belts - - Validates item compatibility - - Returns updated entity - -**extract_item** - Removes items from entity inventories - - - Supports all inventory types - - Auto-transfers to player inventory - - Returns quantity extracted - -Entity Management -~~~~~~~~~~~~~~~~~ - -**place_entity** - Places entities in the world - - - Handles direction and positioning - - Validates placement requirements - - Returns placed Entity object - -**place_entity_next_to** - Places entities relative to others - - - Automatic spacing/alignment - - Handles entity dimensions - - Supports all entity types - -**pickup_entity** - Removes entities from the world - - - Returns items to inventory - - Handles entity groups - - Supports all placeable items - -**rotate_entity** - Changes entity orientation - - - Affects entity behavior (e.g., inserter direction) - - Validates rotation rules - - Returns updated entity - -Entity Queries -~~~~~~~~~~~~~~ - -**get_entity** - Retrieves entity objects at positions - - - Updates stale references - - Returns typed Entity objects - - Handles all entity types - -**get_entities** - Finds multiple entities in an area - - - Supports filtering by type - - Returns List[Entity] - - Groups connected entities - -**nearest** - Locates closest resources/entities - - - Finds ores, water, trees - - Returns Position object - - 500 tile search radius - -**nearest_buildable** - Finds valid building locations - - - Respects entity dimensions - - Handles resource requirements - - Returns buildable position - -Resource Management -~~~~~~~~~~~~~~~~~~~ - -**get_resource_patch** - Analyzes resource deposits - - - Returns size and boundaries - - Supports all resource types - - Includes total resource amount - -**harvest_resource** - Gathers resources from the world - - - Supports ores, trees, rocks - - Auto-collects to inventory - - Returns amount harvested - -Connection Management -~~~~~~~~~~~~~~~~~~~~~ - -**connect_entities** - Creates connections between entities - - - Handles belts, pipes, power - - Automatic pathfinding - - Returns connection group - -**get_connection_amount** - Calculates required connection items - - - Pre-planning tool - - Works with all connection types - - Returns item count needed - -Crafting and Research -~~~~~~~~~~~~~~~~~~~~~ - -**set_entity_recipe** - Configures machine crafting recipes - - - Works with assemblers/chemical plants - - Validates recipe requirements - - Returns updated entity - -**get_prototype_recipe** - Retrieves crafting requirements - - - Shows ingredients/products - - Includes crafting time - - Returns Recipe object - -**craft_item** - Creates items from components - - - Handles recursive crafting - - Validates technology requirements - - Returns crafted amount - -**set_research** - Initiates technology research - - - Validates prerequisites - - Returns required ingredients - - Handles research queue - -**get_research_progress** - Monitors research status - - - Shows remaining requirements - - Tracks progress percentage - - Returns ingredient list - -Movement and Control -~~~~~~~~~~~~~~~~~~~~ - -**move_to** - Moves player to position - - - Pathfinds around obstacles - - Can place items while moving - - Returns final position - -**sleep** - Pauses execution - - - Waits for actions to complete - - Adapts to game speed - - Maximum 15 second duration - -**launch_rocket** - Controls rocket silo launches - - - Validates launch requirements - - Handles launch sequence - - Returns updated silo state - -Debugging and Output -~~~~~~~~~~~~~~~~~~~~ - -**print** - Outputs debug information to stdout - - - Supports various object types - - Useful for monitoring state - - Returns formatted string - -Tool Categories ----------------- - -**Core Tools** - Essential tools for basic game interaction - -**Advanced Tools** - Specialized tools for complex operations - -**Debugging Tools** - Tools for monitoring and debugging - -**Multi-Agent Tools** - Tools for coordinated multi-agent operations - -Creating Custom Tools ---------------------- - -1. Create a new directory in `fle/env/tools/agent/`, e.g `fle/env/tools/agent/my_tool` -2. Add a `client.py` file, which should contain a class inheriting `Tool` and implementing a `__call__` function to treat the class as a callable function. The method signature should contain type annotations. This function _must_ call `self.execute` to invoke the server-side logic. -3. Add a `server.lua` file, containing a function structured like `global.actions.my_tool = function(arg1, arg2, ...)`. This file should invoke the `Factorio API `_ to perform the desired action, and return a table that will be serialized and sent back to the client. -4. Add an `agent.md` file, which should contain a markdown description of the tool. This file will be used by the agent to understand how to use the tool - -Next time you run an eval, the tool will automatically be available to the agent and documented in the agent context. - -5. (Optional) Create a test suite in `fle/tests/actions` for your new tool. - -Tool Documentation ------------------- - -Each tool has comprehensive documentation including: - -- **Overview**: What the tool does -- **Parameters**: Input parameters and their types -- **Returns**: What the tool returns -- **Examples**: Usage examples -- **Best Practices**: Recommended usage patterns -- **Failure Modes**: Common errors and how to avoid them - -See the :doc:`tools index <../tools/index>` for detailed documentation of each tool. diff --git a/docs/sphinx/source/customization/agents.rst b/docs/sphinx/source/customization/agents.rst deleted file mode 100644 index 143602d55..000000000 --- a/docs/sphinx/source/customization/agents.rst +++ /dev/null @@ -1,331 +0,0 @@ -Implementing Custom Agents -========================== - -FLE provides a flexible framework for implementing custom agents. Agents interact with the environment through code synthesis and can be designed for various evaluation scenarios. - -Agent Architecture ------------------- - -Agents in FLE follow a specific architecture: - -**Base Agent Class** - Abstract base class defining the agent interface - -**Agent Implementation** - Concrete implementation of agent behavior - -**Agent Registration** - Registration with the evaluation system - -Base Agent Class ----------------- - -All agents inherit from the base agent class: - -.. autoclass:: fle.agents.agent_abc.Agent - :members: - :undoc-members: - :show-inheritance: - -Key Methods -~~~~~~~~~~~ - -**act(observation)** - Generate an action based on the current observation - -**reset()** - Reset the agent state for a new episode - -**close()** - Clean up agent resources - -Agent Implementation --------------------- - -Create a custom agent by inheriting from the base class: - -.. code-block:: python - - from fle.agents.agent_abc import Agent - from fle.env.gym_env.action import Action - from typing import Dict, Any - - class MyCustomAgent(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "MyCustomAgent" - self.episode_count = 0 - self.total_reward = 0.0 - - def act(self, observation: Dict[str, Any]) -> Action: - """ - Generate an action based on the current observation. - - Args: - observation: Current game state observation - - Returns: - Action to execute - """ - # Analyze the observation - entities = observation.get('entities', []) - inventory = observation.get('inventory', {}) - game_info = observation.get('game_info', {}) - - # Generate action code - code = self._generate_action_code(entities, inventory, game_info) - - return Action( - agent_idx=0, - code=code, - game_state=None - ) - - def reset(self): - """Reset agent state for new episode""" - self.episode_count += 1 - self.total_reward = 0.0 - super().reset() - - def close(self): - """Clean up agent resources""" - super().close() - - def _generate_action_code(self, entities, inventory, game_info): - """Generate Python code for the action""" - # Implement your action generation logic - return 'print("Hello from MyCustomAgent!")' - -Agent Types ------------ - -**Basic Agents** - Simple agents with basic decision-making - -**Visual Agents** - Agents that process visual information - -**Multi-Agent Systems** - Agents that coordinate with other agents - -**Learning Agents** - Agents that improve over time - -**Specialized Agents** - Agents designed for specific tasks - -Example Agent: Resource Collector ----------------------------------- - -Here's a complete example of a resource collection agent: - -.. code-block:: python - - from fle.agents.agent_abc import Agent - from fle.env.gym_env.action import Action - from fle.env.game_types import Position, Direction - from typing import Dict, Any, List - - class ResourceCollectorAgent(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "ResourceCollectorAgent" - self.target_resources = config.get('target_resources', ['iron-ore', 'copper-ore']) - self.collected_resources = {} - self.mining_setups = [] - - def act(self, observation: Dict[str, Any]) -> Action: - """Generate action to collect resources""" - entities = observation.get('entities', []) - inventory = observation.get('inventory', {}) - - # Check if we need to set up mining - if not self.mining_setups: - code = self._setup_mining(entities) - else: - code = self._monitor_mining(entities, inventory) - - return Action( - agent_idx=0, - code=code, - game_state=None - ) - - def _setup_mining(self, entities: List) -> str: - """Set up mining operations for target resources""" - code_lines = [] - - for resource in self.target_resources: - code_lines.append(f''' -# Set up mining for {resource} -resource_pos = nearest(Resource.{resource.replace('-', '_').upper()}) -if resource_pos: - drill = place_entity( - entity=Prototype.MiningDrill, - position=resource_pos, - direction=Direction.NORTH - ) - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - print(f"Set up mining for {{resource}} at {{resource_pos}}") -''') - - return '\n'.join(code_lines) - - def _monitor_mining(self, entities: List, inventory: Dict) -> str: - """Monitor and manage existing mining operations""" - return ''' -# Monitor mining operations -entities = get_entities() -for entity in entities: - if hasattr(entity, 'status') and entity.status == EntityStatus.WORKING: - print(f"Entity {entity.name} is working") - elif hasattr(entity, 'status') and entity.status == EntityStatus.NO_POWER: - print(f"Entity {entity.name} needs power") - -# Check inventory -inventory = inspect_inventory() -for item, count in inventory.items(): - if count > 0: - print(f"Have {count} {item}") -''' - -Agent Configuration -------------------- - -Agents can be configured with various parameters: - -**Behavior Parameters** - - Decision-making algorithms - - Action generation strategies - - State management approaches - -**Performance Parameters** - - Memory usage limits - - Processing time limits - - Resource consumption limits - -**Evaluation Parameters** - - Success criteria - - Performance metrics - - Evaluation scenarios - -Example Configuration --------------------- - -.. code-block:: json - - { - "agent_type": "ResourceCollectorAgent", - "config": { - "target_resources": ["iron-ore", "copper-ore", "coal"], - "max_mining_setups": 5, - "mining_radius": 100, - "inventory_threshold": 1000 - }, - "evaluation": { - "episodes": 10, - "max_steps": 1000, - "success_threshold": 0.8 - } - } - -Agent Testing -------------- - -Create test cases for your custom agents: - -.. code-block:: python - - import pytest - from fle.agents.my_custom_agent import MyCustomAgent - from fle.env.gym_env.action import Action - - def test_agent_creation(): - config = {'param1': 'value1'} - agent = MyCustomAgent(config) - assert agent.name == "MyCustomAgent" - - def test_agent_action(): - config = {} - agent = MyCustomAgent(config) - - observation = { - 'entities': [], - 'inventory': {}, - 'game_info': {} - } - - action = agent.act(observation) - assert isinstance(action, Action) - assert action.agent_idx == 0 - - def test_agent_reset(): - config = {} - agent = MyCustomAgent(config) - agent.reset() - assert agent.episode_count == 1 - -Advanced Agent Features ------------------------ - -**State Management** - - Persistent state across episodes - - State serialization and loading - - State sharing between agents - -**Learning Capabilities** - - Experience replay - - Policy updates - - Performance tracking - -**Multi-Agent Coordination** - - Communication protocols - - Task distribution - - Conflict resolution - -**Adaptive Behavior** - - Dynamic strategy adjustment - - Environment adaptation - - Performance optimization - -Agent Registration ------------------- - -Agents are registered with the evaluation system: - -1. **Agent Discovery**: The system scans for agent implementations -2. **Configuration Loading**: Agent configurations are loaded -3. **Initialization**: Agents are initialized with their configurations -4. **Registration**: Agents are registered with the evaluation system - -Example Registration ----------------------- - -.. code-block:: python - - from fle.agents.registry import register_agent - from fle.agents.my_custom_agent import MyCustomAgent - - # Register the agent - register_agent('my_custom_agent', MyCustomAgent) - - # Use in evaluation - config = { - 'agent_type': 'my_custom_agent', - 'config': {'param1': 'value1'} - } - -Best Practices --------------- - -1. **Clear Interface**: Design simple, intuitive interfaces -2. **Error Handling**: Handle errors gracefully -3. **State Management**: Manage agent state properly -4. **Performance**: Optimize for efficiency -5. **Testing**: Test all scenarios and edge cases -6. **Documentation**: Document agent behavior and configuration -7. **Modularity**: Design for reusability and extensibility diff --git a/docs/sphinx/source/customization/database.rst b/docs/sphinx/source/customization/database.rst deleted file mode 100644 index 49cb06342..000000000 --- a/docs/sphinx/source/customization/database.rst +++ /dev/null @@ -1,357 +0,0 @@ -Database Configuration -======================= - -FLE supports checkpointing at every agent step using a SQL database. The `db_client` implements the interface for saving and loading agent outputs, environment feedbacks, game states and histories of the current trajectory. - -Database Types --------------- - -FLE supports multiple database backends: - -**SQLite (Default)** - Lightweight, file-based database - -**PostgreSQL** - Full-featured, server-based database - -**Custom Databases** - Extensible database interface - -SQLite Configuration --------------------- - -SQLite is the default database and requires minimal configuration: - -.. code-block:: bash - - # Set database type - FLE_DB_TYPE="sqlite" - - # Set database file path (default: .fle/data.db) - SQLITE_DB_FILE=".fle/data.db" - -SQLite is ideal for: -- Development and testing -- Single-user scenarios -- Small to medium datasets -- Quick setup and deployment - -PostgreSQL Configuration ------------------------- - -For production use and large-scale experiments, PostgreSQL is recommended: - -**Docker Setup** - .. code-block:: bash - - docker run --name fle-postgres \ - -e POSTGRES_PASSWORD=fle123 \ - -e POSTGRES_USER=fle_user \ - -e POSTGRES_DB=fle_database \ - -p 5432:5432 \ - -d postgres:15 - -**Environment Variables** - .. code-block:: bash - - # Database Configuration - FLE_DB_TYPE="postgres" - - # PostgreSQL Configuration - SKILLS_DB_HOST=localhost - SKILLS_DB_PORT=5432 - SKILLS_DB_NAME=fle_database - SKILLS_DB_USER=fle_user - SKILLS_DB_PASSWORD=fle123 - -PostgreSQL is ideal for: -- Production deployments -- Multi-user scenarios -- Large datasets -- High-performance requirements - -Database Schema ---------------- - -The database schema includes several key tables: - -**Trajectories** - Store complete agent trajectories - -**Steps** - Individual agent steps within trajectories - -**Game States** - Complete game state snapshots - -**Agent Outputs** - Agent-generated code and actions - -**Environment Feedbacks** - Environment responses and observations - -**Metadata** - Additional information about trajectories - -Database Client ---------------- - -The database client provides a unified interface: - -.. autoclass:: fle.commons.db_client.DatabaseClient - :members: - :undoc-members: - :show-inheritance: - -Key Methods -~~~~~~~~~~~ - -**save_trajectory(trajectory)** - Save a complete trajectory - -**load_trajectory(trajectory_id)** - Load a trajectory by ID - -**save_step(step)** - Save an individual step - -**load_steps(trajectory_id)** - Load all steps for a trajectory - -**save_game_state(state)** - Save a game state snapshot - -**load_game_state(state_id)** - Load a game state by ID - -Example Usage -------------- - -**Saving a Trajectory** - .. code-block:: python - - from fle.commons.db_client import DatabaseClient - - # Initialize database client - db = DatabaseClient() - - # Save trajectory - trajectory = { - 'id': 'trajectory_001', - 'agent_type': 'MyAgent', - 'task': 'iron_ore_throughput', - 'start_time': '2024-01-01T00:00:00Z', - 'end_time': '2024-01-01T01:00:00Z', - 'total_reward': 150.0, - 'success': True - } - - db.save_trajectory(trajectory) - -**Loading a Trajectory** - .. code-block:: python - - # Load trajectory - trajectory = db.load_trajectory('trajectory_001') - print(f"Trajectory: {trajectory['id']}") - print(f"Agent: {trajectory['agent_type']}") - print(f"Reward: {trajectory['total_reward']}") - -**Saving Steps** - .. code-block:: python - - # Save individual step - step = { - 'trajectory_id': 'trajectory_001', - 'step_number': 1, - 'action': 'print("Hello Factorio!")', - 'observation': {'entities': [], 'inventory': {}}, - 'reward': 10.0, - 'timestamp': '2024-01-01T00:00:00Z' - } - - db.save_step(step) - -**Loading Steps** - .. code-block:: python - - # Load all steps for a trajectory - steps = db.load_steps('trajectory_001') - for step in steps: - print(f"Step {step['step_number']}: {step['action']}") - -Database Migration ------------------- - -FLE includes database migration support: - -**Automatic Migration** - The system automatically migrates the database schema on startup - -**Manual Migration** - Run migrations manually when needed - -**Version Control** - Track database schema versions - -Example Migration ------------------- - -.. code-block:: python - - from fle.commons.db_client import DatabaseClient - - # Initialize database client - db = DatabaseClient() - - # Run migrations - db.migrate() - - # Check migration status - status = db.get_migration_status() - print(f"Current version: {status['current_version']}") - print(f"Latest version: {status['latest_version']}") - -Performance Optimization ------------------------ - -**Connection Pooling** - Reuse database connections - -**Batch Operations** - Group multiple operations together - -**Indexing** - Optimize database queries - -**Caching** - Cache frequently accessed data - -Example Optimization -------------------- - -.. code-block:: python - - from fle.commons.db_client import DatabaseClient - - # Initialize with connection pooling - db = DatabaseClient( - max_connections=10, - connection_timeout=30 - ) - - # Batch save multiple steps - steps = [ - {'trajectory_id': 't1', 'step_number': 1, 'action': 'action1'}, - {'trajectory_id': 't1', 'step_number': 2, 'action': 'action2'}, - {'trajectory_id': 't1', 'step_number': 3, 'action': 'action3'} - ] - - db.batch_save_steps(steps) - -Backup and Recovery -------------------- - -**Automated Backups** - Schedule regular database backups - -**Point-in-Time Recovery** - Restore to specific timestamps - -**Data Export** - Export data for analysis - -**Data Import** - Import data from other sources - -Example Backup --------------- - -.. code-block:: python - - from fle.commons.db_client import DatabaseClient - - # Initialize database client - db = DatabaseClient() - - # Create backup - backup_id = db.create_backup() - print(f"Backup created: {backup_id}") - - # List backups - backups = db.list_backups() - for backup in backups: - print(f"Backup {backup['id']}: {backup['timestamp']}") - - # Restore from backup - db.restore_backup(backup_id) - -Monitoring and Maintenance --------------------------- - -**Performance Monitoring** - Monitor database performance - -**Health Checks** - Verify database health - -**Cleanup Operations** - Remove old data - -**Optimization** - Optimize database performance - -Example Monitoring ------------------ - -.. code-block:: python - - from fle.commons.db_client import DatabaseClient - - # Initialize database client - db = DatabaseClient() - - # Get database statistics - stats = db.get_statistics() - print(f"Total trajectories: {stats['trajectories']}") - print(f"Total steps: {stats['steps']}") - print(f"Database size: {stats['size']}") - - # Get performance metrics - metrics = db.get_performance_metrics() - print(f"Average query time: {metrics['avg_query_time']}") - print(f"Connection count: {metrics['connection_count']}") - -Troubleshooting --------------- - -**Connection Issues** - - Verify database server is running - - Check connection parameters - - Verify network connectivity - -**Performance Issues** - - Monitor database performance - - Optimize queries - - Consider connection pooling - -**Data Issues** - - Verify data integrity - - Check for corruption - - Run data validation - -**Migration Issues** - - Check migration status - - Verify schema compatibility - - Run manual migrations if needed - -Best Practices --------------- - -1. **Regular Backups**: Schedule automated backups -2. **Performance Monitoring**: Monitor database performance -3. **Connection Management**: Use connection pooling -4. **Data Validation**: Validate data integrity -5. **Migration Testing**: Test migrations before deployment -6. **Security**: Secure database access -7. **Documentation**: Document database configuration diff --git a/docs/sphinx/source/customization/tasks.rst b/docs/sphinx/source/customization/tasks.rst deleted file mode 100644 index ee64635b2..000000000 --- a/docs/sphinx/source/customization/tasks.rst +++ /dev/null @@ -1,276 +0,0 @@ -Creating Custom Tasks -===================== - -FLE allows you to create custom tasks for evaluating agent capabilities. Tasks define the objectives, constraints, and success criteria for agent evaluation. - -Task Structure --------------- - -Tasks are defined in `fle/eval/tasks/task_definitions/` and follow a specific structure: - -**Task Definition File** - JSON configuration file defining task parameters - -**Task Implementation** - Python class implementing the task logic - -**Task Registration** - Automatic registration with the gym environment registry - -Task Definition ---------------- - -Create a new task definition file in `fle/eval/tasks/task_definitions/`: - -.. code-block:: json - - { - "name": "my_custom_task", - "description": "A custom task for evaluating agent capabilities", - "type": "throughput", - "target": 16, - "time_limit": 3600, - "resources": { - "iron_ore": 10000, - "copper_ore": 5000, - "coal": 2000 - }, - "technologies": ["automation"], - "constraints": { - "max_entities": 100, - "max_power": 1000 - } - } - -Task Types ----------- - -**Throughput Tasks** - Tasks focused on producing a specific item at a target rate - -**Research Tasks** - Tasks focused on technology research and advancement - -**Construction Tasks** - Tasks focused on building specific structures - -**Exploration Tasks** - Tasks focused on map exploration and discovery - -**Multi-Objective Tasks** - Tasks with multiple competing objectives - -Task Implementation -------------------- - -Create a Python class implementing your task: - -.. code-block:: python - - from fle.eval.tasks.base import BaseTask - - class MyCustomTask(BaseTask): - def __init__(self, config): - super().__init__(config) - self.target = config.get('target', 16) - self.time_limit = config.get('time_limit', 3600) - - def evaluate(self, state): - """Evaluate the current state against task objectives""" - # Implement your evaluation logic - pass - - def is_complete(self, state): - """Check if the task is complete""" - # Implement completion criteria - pass - - def get_reward(self, state): - """Calculate reward for current state""" - # Implement reward calculation - pass - -Task Configuration ------------------- - -Tasks can be configured with various parameters: - -**Resource Constraints** - - Starting resources - - Resource availability - - Resource consumption rates - -**Technology Requirements** - - Required technologies - - Technology research costs - - Technology dependencies - -**Time Constraints** - - Time limits - - Time-based objectives - - Time-based rewards - -**Spatial Constraints** - - Map size limits - - Entity placement rules - - Distance requirements - -**Performance Constraints** - - Power consumption limits - - Entity count limits - - Efficiency requirements - -Task Registration ------------------ - -Tasks are automatically registered with the gym environment registry: - -1. **File Discovery**: The registry scans `fle/eval/tasks/task_definitions/` -2. **JSON Parsing**: Task definitions are parsed from JSON files -3. **Environment Creation**: Gym environments are created for each task -4. **Registration**: Environments are registered with gym - -Example Task ------------- - -Here's a complete example of a custom task: - -**Task Definition** (`my_custom_task.json`): - -.. code-block:: json - - { - "name": "iron_plate_throughput", - "description": "Produce iron plates at 16 items per 60 seconds", - "type": "throughput", - "target": 16, - "time_limit": 3600, - "resources": { - "iron_ore": 10000, - "coal": 2000 - }, - "technologies": ["automation"], - "constraints": { - "max_entities": 50, - "max_power": 500 - } - } - -**Task Implementation** (`my_custom_task.py`): - -.. code-block:: python - - from fle.eval.tasks.base import BaseTask - from fle.env.game_types import Entity, Inventory - - class IronPlateThroughputTask(BaseTask): - def __init__(self, config): - super().__init__(config) - self.target = config.get('target', 16) - self.time_limit = config.get('time_limit', 3600) - self.start_time = None - - def reset(self): - """Reset the task state""" - self.start_time = None - return super().reset() - - def evaluate(self, state): - """Evaluate current throughput""" - if self.start_time is None: - self.start_time = state.get('game_info', {}).get('tick', 0) - - current_time = state.get('game_info', {}).get('tick', 0) - elapsed_time = (current_time - self.start_time) / 60.0 # Convert to seconds - - if elapsed_time < 60: - return 0.0 - - # Calculate throughput - inventory = state.get('inventory', Inventory({})) - iron_plates = inventory.get('iron-plate', 0) - throughput = iron_plates / elapsed_time - - return throughput - - def is_complete(self, state): - """Check if target throughput is achieved""" - throughput = self.evaluate(state) - return throughput >= self.target - - def get_reward(self, state): - """Calculate reward based on throughput""" - throughput = self.evaluate(state) - if throughput >= self.target: - return 1.0 - else: - return throughput / self.target - -Testing Tasks --------------- - -Create test cases for your custom tasks: - -.. code-block:: python - - import pytest - from fle.eval.tasks.my_custom_task import MyCustomTask - - def test_task_creation(): - config = { - 'target': 16, - 'time_limit': 3600 - } - task = MyCustomTask(config) - assert task.target == 16 - assert task.time_limit == 3600 - - def test_task_evaluation(): - config = {'target': 16} - task = MyCustomTask(config) - - # Mock state - state = { - 'inventory': Inventory({'iron-plate': 100}), - 'game_info': {'tick': 3600} - } - - throughput = task.evaluate(state) - assert throughput > 0 - - def test_task_completion(): - config = {'target': 16} - task = MyCustomTask(config) - - # Mock state with high throughput - state = { - 'inventory': Inventory({'iron-plate': 1000}), - 'game_info': {'tick': 3600} - } - - assert task.is_complete(state) - -Advanced Features ----------------- - -**Multi-Agent Tasks** - Tasks that require coordination between multiple agents - -**Dynamic Tasks** - Tasks that change objectives during execution - -**Hierarchical Tasks** - Tasks with sub-objectives and dependencies - -**Adaptive Tasks** - Tasks that adjust difficulty based on agent performance - -Best Practices --------------- - -1. **Clear Objectives**: Define clear, measurable objectives -2. **Appropriate Difficulty**: Balance challenge with achievability -3. **Robust Evaluation**: Handle edge cases and error conditions -4. **Comprehensive Testing**: Test all task scenarios -5. **Documentation**: Document task requirements and constraints -6. **Performance**: Optimize evaluation for large-scale experiments diff --git a/docs/sphinx/source/customization/tools.rst b/docs/sphinx/source/customization/tools.rst deleted file mode 100644 index edb30acbd..000000000 --- a/docs/sphinx/source/customization/tools.rst +++ /dev/null @@ -1,335 +0,0 @@ -Creating Custom Tools -===================== - -FLE allows you to create custom tools for extending agent capabilities. Tools provide a narrow API into the game and enable agents to perform specific actions. - -Tool Architecture ------------------ - -Tools require 3 files: - -1. **agent.md**: Documentation for the agent -2. **client.py**: Client-side Python implementation -3. **server.lua**: Server-side Lua implementation - -Tool Structure --------------- - -Create a new directory in `fle/env/tools/agent/`: - -.. code-block:: bash - - mkdir fle/env/tools/agent/my_tool - cd fle/env/tools/agent/my_tool - -**client.py** - Client-side implementation: - -.. code-block:: python - - from fle.env.tools.base import Tool - from typing import List, Optional - - class MyTool(Tool): - def __call__(self, param1: str, param2: int, param3: Optional[bool] = None) -> dict: - """ - My custom tool for doing something useful. - - Args: - param1: Description of param1 - param2: Description of param2 - param3: Optional parameter - - Returns: - Dictionary with results - """ - return self.execute({ - 'param1': param1, - 'param2': param2, - 'param3': param3 - }) - -**server.lua** - Server-side implementation: - -.. code-block:: lua - - global.actions.my_tool = function(param1, param2, param3) - -- Validate parameters - if not param1 or type(param1) ~= "string" then - return {error = "param1 must be a string"} - end - - if not param2 or type(param2) ~= "number" then - return {error = "param2 must be a number"} - end - - -- Perform the action - local result = {} - - -- Your custom logic here - -- Use Factorio API: https://lua-api.factorio.com/1.1.110/ - - return result - end - -**agent.md** - Agent documentation: - -.. code-block:: markdown - - # My Tool - - ## Overview - My custom tool for doing something useful in the game. - - ## Parameters - - `param1` (str): Description of param1 - - `param2` (int): Description of param2 - - `param3` (bool, optional): Optional parameter - - ## Returns - Dictionary with results including: - - `success` (bool): Whether the action succeeded - - `data` (dict): Additional data - - ## Examples - - ```python - # Basic usage - result = my_tool("value1", 42) - print(result['success']) - - # With optional parameter - result = my_tool("value1", 42, True) - ``` - - ## Best Practices - - Always check the return value for success - - Handle errors gracefully - - Use appropriate parameter types - - ## Failure Modes - - Invalid parameter types - - Game state conflicts - - Resource limitations - -Tool Development Process ------------------------- - -1. **Design the Interface** - - Define parameters and return types - - Consider error handling - - Plan for edge cases - -2. **Implement Client Side** - - Create Python class inheriting from Tool - - Implement __call__ method with type hints - - Call self.execute() with parameters - -3. **Implement Server Side** - - Create Lua function in global.actions - - Validate parameters - - Use Factorio API to perform actions - - Return structured results - -4. **Write Documentation** - - Document parameters and return values - - Provide usage examples - - Describe failure modes - - Include best practices - -5. **Test the Tool** - - Create test cases - - Verify error handling - - Test edge cases - - Validate performance - -Example Tool: Resource Scanner ------------------------------- - -Here's a complete example of a custom tool for scanning resources: - -**client.py**: - -.. code-block:: python - - from fle.env.tools.base import Tool - from typing import List, Dict, Optional - from fle.env.game_types import Position - - class ResourceScanner(Tool): - def __call__(self, center: Position, radius: int = 100, resource_type: Optional[str] = None) -> Dict: - """ - Scan for resources in a circular area. - - Args: - center: Center position for scanning - radius: Scan radius in tiles - resource_type: Specific resource type to scan for (optional) - - Returns: - Dictionary with scan results - """ - return self.execute({ - 'center': center, - 'radius': radius, - 'resource_type': resource_type - }) - -**server.lua**: - -.. code-block:: lua - - global.actions.resource_scanner = function(center, radius, resource_type) - -- Validate parameters - if not center or not center.x or not center.y then - return {error = "center must be a position with x and y"} - end - - if not radius or type(radius) ~= "number" or radius <= 0 then - return {error = "radius must be a positive number"} - end - - -- Get surface - local surface = game.surfaces[1] - if not surface then - return {error = "No surface available"} - end - - -- Scan for resources - local resources = {} - local center_pos = {x = center.x, y = center.y} - - for _, entity in pairs(surface.find_entities_filtered{ - area = {{center_pos.x - radius, center_pos.y - radius}, - {center_pos.x + radius, center_pos.y + radius}}, - type = "resource" - }) do - if not resource_type or entity.name == resource_type then - table.insert(resources, { - name = entity.name, - position = {x = entity.position.x, y = entity.position.y}, - amount = entity.amount - }) - end - end - - return { - success = true, - resources = resources, - count = #resources - } - end - -**agent.md**: - -.. code-block:: markdown - - # Resource Scanner - - ## Overview - Scans for resources in a circular area around a center position. - - ## Parameters - - `center` (Position): Center position for scanning - - `radius` (int): Scan radius in tiles (default: 100) - - `resource_type` (str, optional): Specific resource type to scan for - - ## Returns - Dictionary with: - - `success` (bool): Whether the scan succeeded - - `resources` (list): List of found resources - - `count` (int): Number of resources found - - ## Examples - - ```python - # Scan all resources in area - result = resource_scanner(Position(0, 0), 200) - print(f"Found {result['count']} resources") - - # Scan for specific resource - result = resource_scanner(Position(0, 0), 100, "iron-ore") - for resource in result['resources']: - print(f"{resource['name']} at {resource['position']}") - ``` - - ## Best Practices - - Use appropriate radius for your needs - - Filter by resource type when possible - - Handle empty results gracefully - - ## Failure Modes - - Invalid position coordinates - - Negative or zero radius - - Surface not available - - Resource type not found - -Testing Tools --------------- - -Create test cases for your custom tools: - -.. code-block:: python - - import pytest - from fle.env.tools.agent.my_tool import MyTool - from fle.env.game_types import Position - - def test_tool_creation(): - tool = MyTool() - assert tool is not None - - def test_tool_execution(): - tool = MyTool() - result = tool("test", 42, True) - assert 'success' in result - - def test_tool_error_handling(): - tool = MyTool() - result = tool("", -1) # Invalid parameters - assert 'error' in result - - def test_tool_with_position(): - tool = MyTool() - position = Position(10, 20) - result = tool("test", 42, position=position) - assert result['success'] - -Tool Registration ------------------ - -Tools are automatically discovered and registered: - -1. **File Discovery**: The system scans `fle/env/tools/agent/` -2. **Import Loading**: Python classes are imported -3. **Lua Loading**: Server-side functions are loaded -4. **Documentation**: Agent documentation is parsed -5. **Registration**: Tools are made available to agents - -Advanced Features ----------------- - -**Tool Dependencies** - Tools can depend on other tools - -**Tool Caching** - Cache expensive operations - -**Tool Validation** - Validate tool usage and parameters - -**Tool Metrics** - Collect usage statistics - -**Tool Versioning** - Handle tool updates and compatibility - -Best Practices --------------- - -1. **Clear Interface**: Design simple, intuitive interfaces -2. **Error Handling**: Provide meaningful error messages -3. **Documentation**: Write comprehensive documentation -4. **Testing**: Test all scenarios and edge cases -5. **Performance**: Optimize for efficiency -6. **Compatibility**: Ensure backward compatibility -7. **Security**: Validate all inputs and outputs diff --git a/docs/sphinx/source/environment/gym_registry.rst b/docs/sphinx/source/environment/gym_registry.rst new file mode 100644 index 000000000..d869c8200 --- /dev/null +++ b/docs/sphinx/source/environment/gym_registry.rst @@ -0,0 +1,335 @@ +Gym Environment Registry +======================== + +The Factorio Learning Environment uses a gym environment registry to automatically discover and register all available tasks. This allows you to use ``gym.make()`` to create environments and reference them by their environment IDs. + +Overview +-------- + +The registry system automatically discovers all task definitions in ``fle/eval/tasks/task_definitions/`` and registers them as gym environments. This means you can create any Factorio environment using the familiar ``gym.make()`` pattern. + +Features +-------- + +- **Automatic Discovery**: Automatically discovers all task definitions in ``fle/eval/tasks/task_definitions/`` +- **Gym Integration**: All environments are registered with ``gym`` and can be created using ``gym.make()`` +- **Task Metadata**: Provides access to task descriptions, configurations, and metadata +- **Multi-agent Support**: Supports both single-agent and multi-agent environments +- **Command-line Tools**: Built-in tools for exploring and testing environments + +Quick Start +----------- + +1. List Available Environments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + from fle.env.gym_env.registry import list_available_environments + + # Get all available environment IDs + env_ids = list_available_environments() + print(f"Available environments: {env_ids}") + +Or use the command-line tool: + +.. code-block:: bash + + python fle/env/gym_env/example_usage.py --list + +2. Create an Environment +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + import gym + + # Create any available environment + env = gym.make("iron_ore_throughput") + +3. Use the Environment +~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + from fle.env.gym_env.action import Action + + # Reset the environment + obs = env.reset(options={'game_state': None}) + + # Take an action + action = Action( + agent_idx=0, # Which agent takes the action + code='print("Hello Factorio!")', # Python code to execute + game_state=None # Optional: game state to reset to before running code + ) + + # Execute the action + obs, reward, terminated, truncated, info = env.step(action) + + # Clean up + env.close() + +Available Environments +---------------------- + +Throughput Tasks (Lab Play) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All throughput tasks are defined in ``fle/eval/tasks/task_definitions/lab_play/throughput_tasks.py``. The 24 available tasks are: + +**Circuits** + +- ``advanced_circuit_throughput`` +- ``electronic_circuit_throughput`` +- ``processing_unit_throughput`` + +**Science Packs** + +- ``automation_science_pack_throughput`` +- ``logistics_science_pack_throughput`` +- ``chemical_science_pack_throughput`` +- ``military_science_pack_throughput`` +- ``production_science_pack_throughput`` +- ``utility_science_pack_throughput`` + +**Components** + +- ``battery_throughput`` +- ``engine_unit_throughput`` +- ``inserter_throughput`` +- ``iron_gear_wheel_throughput`` +- ``low_density_structure_throughput`` + +**Raw Materials** + +- ``iron_ore_throughput`` +- ``iron_plate_throughput`` +- ``steel_plate_throughput`` +- ``plastic_bar_throughput`` + +**Oil & Chemicals** + +- ``crude_oil_throughput`` +- ``petroleum_gas_throughput`` +- ``sulfuric_acid_throughput`` +- ``sulfur_throughput`` + +**Military** + +- ``piercing_round_throughput`` +- ``stone_wall_throughput`` + +.. note:: + Most tasks require 16 items per 60 seconds; fluid tasks require 250 units per 60 seconds. + +Open Play Environment +~~~~~~~~~~~~~~~~~~~~~ + +- ``open_play`` - An unbounded task of building the largest possible factory + +Example Usage +~~~~~~~~~~~~~ + +.. code-block:: python + + import gym + + # Create throughput environments + env = gym.make("iron_plate_throughput") + env = gym.make("automation_science_pack_throughput") + env = gym.make("crude_oil_throughput") + + # Create open play environment + env = gym.make("open_play") + +Command-Line Tools +------------------ + +The ``example_usage.py`` script provides both interactive examples and command-line tools: + +.. code-block:: bash + + # Run interactive examples + python fle/env/gym_env/example_usage.py + + # List all environments + python fle/env/gym_env/example_usage.py --list + + # Show detailed information + python fle/env/gym_env/example_usage.py --detail + + # Search for specific environments + python fle/env/gym_env/example_usage.py --search iron + + # Output in gym.make() format + python fle/env/gym_env/example_usage.py --gym-format + +Environment Interface +--------------------- + +Action Space +~~~~~~~~~~~~ + +.. code-block:: python + + { + 'agent_idx': Discrete(instance.num_agents), # Index of the agent taking the action + 'game_state': Text(max_length=1000000), # Optional: game state to reset to + 'code': Text(max_length=10000) # Python code to execute + } + +Observation Space +~~~~~~~~~~~~~~~~~ + +The observation space includes: + +- ``raw_text``: Output from the last action +- ``entities``: List of entities on the map +- ``inventory``: Current inventory state +- ``research``: Research progress and technologies +- ``game_info``: Game state (tick, time, speed) +- ``score``: Current score +- ``flows``: Production statistics +- ``task_verification``: Task completion status +- ``messages``: Inter-agent messages +- ``serialized_functions``: Available functions +- ``task_info``: Information about the task +- ``map_image``: Base64 encoded PNG image + +Methods +~~~~~~~ + +.. code-block:: python + + # Reset the environment + reset(options: Dict[str, Any], seed: Optional[int] = None) -> Dict[str, Any] + + # Take a step + step(action: Action) -> Tuple[Dict[str, Any], float, bool, bool, Dict[str, Any]] + + # Clean up + close() -> None + +API Reference +------------- + +Registry Functions +~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + # Returns a list of all registered environment IDs + list_available_environments() -> List[str] + + # Returns detailed information about a specific environment + get_environment_info(env_id: str) -> Optional[Dict[str, Any]] + + # Manually trigger environment discovery and registration + register_all_environments() -> None + +Environment Creation +~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + # Creates a Factorio gym environment + gym.make(env_id: str, **kwargs) -> FactorioGymEnv + +Complete Example +---------------- + +Here's a complete example that demonstrates the full workflow: + +.. code-block:: python + + import gym + from fle.env.gym_env.registry import list_available_environments, get_environment_info + from fle.env.gym_env.action import Action + + # 1. List available environments + env_ids = list_available_environments() + print(f"Found {len(env_ids)} environments") + + # 2. Get information about a specific environment + info = get_environment_info("iron_ore_throughput") + print(f"Description: {info['description']}") + + # 3. Create the environment + env = gym.make("iron_ore_throughput") + + # 4. Use the environment + obs = env.reset(options={'game_state': None}) + print(f"Initial observation keys: {list(obs.keys())}") + + # 5. Take actions + current_state = None + for step in range(5): + action = Action( + agent_idx=0, + game_state=current_state, + code=f'print("Step {step}: Hello Factorio!")' + ) + obs, reward, terminated, truncated, info = env.step(action) + done = terminated or truncated + current_state = info['output_game_state'] + print(f"Step {step}: Reward={reward}, Done={done}") + + if done: + break + + # 6. Clean up + env.close() + +Error Handling +-------------- + +The registry includes error handling for: + +- Missing task definition files +- Invalid JSON configurations +- Missing Factorio containers +- Environment creation failures + +If an environment fails to load, a warning will be printed but the registry will continue to load other environments. + +Troubleshooting +--------------- + +Environment Creation Fails +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If ``gym.make()`` fails with connection errors: + +1. Ensure Factorio containers are running +2. Check that the cluster setup is working +3. Verify network connectivity + +No Environments Found +~~~~~~~~~~~~~~~~~~~~~ + +If no environments are listed: + +1. Check that the task definitions directory exists +2. Verify JSON files are valid +3. Check file permissions + +Import Errors +~~~~~~~~~~~~~ + +If you get import errors: + +1. Ensure you're running from the correct directory +2. Check that all dependencies are installed +3. Verify the Python path includes the project root + +Testing +------- + +Run the test suite to verify the registry is working correctly: + +.. code-block:: bash + + python fle/env/tests/gym_env/test_registry.py + +This registry system provides a clean, standardized interface for working with Factorio gym environments, making it easy to experiment with different tasks and integrate with existing gym-based frameworks. diff --git a/docs/sphinx/source/environment/overview.rst b/docs/sphinx/source/environment/overview.rst new file mode 100644 index 000000000..56320c8d8 --- /dev/null +++ b/docs/sphinx/source/environment/overview.rst @@ -0,0 +1,240 @@ +Environment Overview +==================== + +FLE is an agent evaluation environment built on the game of Factorio, a popular resource management simulation game. + +The REPL Pattern +----------------- + +Agents interact with FLE through code synthesis using a **REPL** (Read-Eval-Print-Loop) pattern: + +1. **Observation**: The agent observes the world through the output streams (stderr/stdout) of their last program +2. **Action**: The agent generates a Python program to perform their desired action +3. **Feedback**: The environment executes the program, assigns variables, adds classes/functions to the namespace, and provides an output stream + +Example Interaction +~~~~~~~~~~~~~~~~~~~ + +**Action:** + +.. code-block:: python + + # 1. Get iron patch and place mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=nearest(Resource.IronOre), + direction=Direction.NORTH + ) + # 2. Add output storage + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + # 3. Verify automation chain and observe entities + sleep(10) # Sleep for 10 seconds + assert drill.status == EntityStatus.WORKING + print(get_entities()) + +**Feedback:** + +.. code-block:: python + + >>> [ BurnerMiningDrill(fuel=Inventory({'coal': 4}), + >>> name='burner-mining-drill', + >>> direction=Direction.DOWN, + >>> position=Position(x=-28.0, y=-61.0), + >>> energy=2666.6666666667, + >>> tile_dimensions=TileDimensions(tile_width=2.0, tile_height=2.0), + >>> status=EntityStatus.WORKING, + >>> neighbours=[Entity(name='iron-chest', direction=DOWN, position=Position(x=-27.5 y=-59.5)], + >>> drop_position=Position(x=-27.5, y=-59.5), + >>> resources=[Ingredient(name='iron-ore', count=30000, type=None)]), + >>> Chest(name='iron-chest', + >>> direction=Direction.UP, + >>> position=Position(x=-27.5, y=-59.5), + >>> energy=0.0, + >>> tile_dimensions=TileDimensions(tile_width=1.0, tile_height=1.0), + >>> status=EntityStatus.NORMAL, + >>> inventory=Inventory({'iron-ore': 75}))] + +Available Tools +--------------- + +Agents are provided with the Python standard library and an API comprising :doc:`../tools/overview` that they can use. + +**Tools** are functions that: + +- Perform a game action +- Return a typed object (e.g. an ``Inventory``) +- Can be stored as a named **variable** in the Python namespace for later use + +The Namespace +------------- + +The namespace acts as an **episodic symbolic memory system**. Saved objects represent an observation of the environment at the moment of query. + +This enables agents to: + +- Maintain complex state representations +- Build hierarchical abstractions as factories scale +- Reference previous observations and computations + +Observations +------------ + +Agents observe **stdout** and **stderr** - the output streams of their program. + +Agents may intentionally: + +- Print relevant objects to construct observations +- Print computations and intermediate results +- Use ``print()`` strategically to monitor state + +Error Handling +-------------- + +Mistakes in code or invalid operations raise typed **exceptions** with detailed context that is written to stderr. + +This enables agents to: + +- **Reactively debug** their programs after execution +- **Proactively use** runtime assertions during execution to self-verify actions +- Learn from detailed error messages + +Custom Functions and Classes +----------------------------- + +Agents can enhance their internal representation of the game state by defining: + +1. **Utility functions** for reuse throughout an episode, to encapsulate previously successful logic +2. **Classes** in the namespace to better organize the data retrieved from the game + +These definitions persist in the namespace across actions within an episode. + +Action Space +------------ + +The action space is defined as: + +.. code-block:: python + + { + 'agent_idx': Discrete(instance.num_agents), # Index of the agent taking the action + 'game_state': Text(max_length=1000000), # Optional: game state to reset to + 'code': Text(max_length=10000) # Python code to execute + } + +Observation Space +----------------- + +The observation space includes: + +- ``raw_text``: Output from the last action +- ``entities``: List of entities on the map +- ``inventory``: Current inventory state +- ``research``: Research progress and technologies +- ``game_info``: Game state (tick, time, speed) +- ``score``: Current score +- ``flows``: Production statistics +- ``task_verification``: Task completion status +- ``messages``: Inter-agent messages (for multi-agent scenarios) +- ``serialized_functions``: Available functions +- ``task_info``: Information about the task +- ``map_image``: Base64 encoded PNG image + +Environment Methods +------------------- + +Standard Gym Interface +~~~~~~~~~~~~~~~~~~~~~~ + +All FLE environments follow the standard OpenAI Gym interface: + +.. code-block:: python + + # Reset the environment + obs = env.reset(options: Dict[str, Any], seed: Optional[int] = None) -> Dict[str, Any] + + # Take a step + obs, reward, terminated, truncated, info = env.step(action: Action) + + # Clean up + env.close() + +Architecture +------------ + +.. code-block:: text + + ┌─────────────────┐ + │ Agent │ + │ (Synthesizes │ + │ Python Code) │ + └────────┬────────┘ + │ + ▼ + ┌─────────────────────────────┐ + │ Learning Environment │ + │ ┌─────────────────────┐ │ + │ │ Interpreter │ │ + │ │ - Executes code │ │ + │ │ - Manages │ │ + │ │ namespace │ │ + │ └──────┬──────────────┘ │ + │ │ │ + │ ┌──────▼──────────────┐ │ + │ │ client.py │ │ + │ │ (Tool Interface) │ │ + │ └──────┬──────────────┘ │ + └─────────┼──────────────────┘ + │ Remote TCP Call + ▼ + ┌─────────────────────────────┐ + │ Factorio Server │ + │ ┌─────────────────────┐ │ + │ │ server.lua │ │ + │ │ (Game Logic) │ │ + │ └──────┬──────────────┘ │ + │ │ │ + │ ┌──────▼──────────────┐ │ + │ │ Factorio Engine │ │ + │ │ (Game Simulation) │ │ + │ └─────────────────────┘ │ + └─────────────────────────────┘ + +Task Types +---------- + +FLE provides two main evaluation settings: + +Lab-Play +~~~~~~~~ + +24 structured tasks with fixed resources, testing specific capabilities: + +- **Circuits**: Advanced circuits, electronic circuits, processing units +- **Science Packs**: Automation, logistics, chemical, military, production, utility +- **Components**: Batteries, engines, inserters, gears, low density structures +- **Raw Materials**: Iron ore, iron plates, steel plates, plastic bars +- **Oil & Chemicals**: Crude oil, petroleum gas, sulfuric acid, sulfur +- **Military**: Piercing rounds, stone walls + +Most tasks require 16 items per 60 seconds; fluid tasks require 250 units per 60 seconds. + +Open-Play +~~~~~~~~~ + +An unbounded task of building the largest possible factory on a procedurally generated map. This tests: + +- Long-term planning +- Resource optimization +- Scaling strategies +- Error recovery + +Next Steps +---------- + +- Explore the :doc:`gym_registry` to see all available tasks +- Learn about :doc:`../tools/overview` available to agents +- See :doc:`../getting_started/quickstart` for usage examples diff --git a/docs/sphinx/source/examples/basic_agent.rst b/docs/sphinx/source/examples/basic_agent.rst deleted file mode 100644 index 4cb57aa84..000000000 --- a/docs/sphinx/source/examples/basic_agent.rst +++ /dev/null @@ -1,336 +0,0 @@ -Basic Agent Example -=================== - -This example demonstrates how to create a basic agent that interacts with the Factorio Learning Environment. - -Agent Overview --------------- - -The basic agent performs simple resource collection and automation tasks: - -1. **Resource Discovery**: Find and identify available resources -2. **Mining Setup**: Place mining drills on resource patches -3. **Storage Management**: Create storage for collected resources -4. **Automation**: Set up basic automation chains - -Agent Implementation --------------------- - -.. code-block:: python - - from fle.agents.agent_abc import Agent - from fle.env.gym_env.action import Action - from fle.env.game_types import Position, Direction - from typing import Dict, Any, List - - class BasicAgent(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "BasicAgent" - self.target_resources = ['iron-ore', 'copper-ore', 'coal'] - self.mining_setups = [] - self.step_count = 0 - - def act(self, observation: Dict[str, Any]) -> Action: - """Generate action based on current observation""" - self.step_count += 1 - - # Get current state - entities = observation.get('entities', []) - inventory = observation.get('inventory', {}) - game_info = observation.get('game_info', {}) - - # Generate action code - if self.step_count == 1: - code = self._initial_setup() - elif self.step_count <= 10: - code = self._setup_mining() - else: - code = self._monitor_and_optimize(entities, inventory) - - return Action( - agent_idx=0, - code=code, - game_state=None - ) - - def _initial_setup(self) -> str: - """Initial setup and exploration""" - return ''' - # Initial setup and exploration - print("Starting BasicAgent exploration") - - # Get current position - position = get_position() - print(f"Starting position: {position}") - - # Explore the area - entities = get_entities() - print(f"Found {len(entities)} entities") - - # Look for resources - iron_pos = nearest(Resource.IRON_ORE) - copper_pos = nearest(Resource.COPPER_ORE) - coal_pos = nearest(Resource.COAL) - - print(f"Iron ore at: {iron_pos}") - print(f"Copper ore at: {copper_pos}") - print(f"Coal at: {coal_pos}") - ''' - - def _setup_mining(self) -> str: - """Set up mining operations""" - return ''' - # Set up mining operations - print("Setting up mining operations") - - # Find and place mining drills - iron_pos = nearest(Resource.IRON_ORE) - if iron_pos: - drill = place_entity( - entity=Prototype.MiningDrill, - position=iron_pos, - direction=Direction.NORTH - ) - print(f"Placed mining drill at {iron_pos}") - - # Add storage chest - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - print(f"Placed chest at {chest.position}") - - # Check inventory - inventory = inspect_inventory() - print(f"Current inventory: {inventory}") - ''' - - def _monitor_and_optimize(self, entities: List, inventory: Dict) -> str: - """Monitor and optimize operations""" - return ''' - # Monitor and optimize operations - print("Monitoring operations") - - # Check all entities - entities = get_entities() - working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] - print(f"Working entities: {len(working_entities)}") - - # Check inventory - inventory = inspect_inventory() - total_items = sum(inventory.values()) - print(f"Total items in inventory: {total_items}") - - # Print detailed inventory - for item, count in inventory.items(): - if count > 0: - print(f" {item}: {count}") - - # Check for any issues - for entity in entities: - if hasattr(entity, 'status') and entity.status == EntityStatus.NO_POWER: - print(f"Entity {entity.name} needs power") - elif hasattr(entity, 'status') and entity.status == EntityStatus.NO_FUEL: - print(f"Entity {entity.name} needs fuel") - ''' - -Running the Agent ------------------ - -**Environment Setup** - .. code-block:: python - - import gym - from fle.agents.basic_agent import BasicAgent - - # Create environment - env = gym.make("iron_ore_throughput") - - # Create agent - agent = BasicAgent({}) - - # Run episode - obs = env.reset() - done = False - step = 0 - - while not done and step < 100: - action = agent.act(obs) - obs, reward, terminated, truncated, info = env.step(action) - done = terminated or truncated - step += 1 - print(f"Step {step}: Reward = {reward}") - - env.close() - -**Command Line Usage** - .. code-block:: bash - - # Run basic agent evaluation - fle eval --agent basic_agent --config configs/basic_agent_config.json - -Agent Configuration -------------------- - -**Basic Configuration** - .. code-block:: json - - { - "agent_type": "BasicAgent", - "config": { - "target_resources": ["iron-ore", "copper-ore", "coal"], - "max_mining_setups": 5, - "monitoring_interval": 10 - }, - "evaluation": { - "episodes": 5, - "max_steps": 1000, - "success_threshold": 0.5 - } - } - -**Advanced Configuration** - .. code-block:: json - - { - "agent_type": "BasicAgent", - "config": { - "target_resources": ["iron-ore", "copper-ore", "coal", "stone"], - "max_mining_setups": 10, - "monitoring_interval": 5, - "optimization_enabled": true, - "debug_mode": true - }, - "evaluation": { - "episodes": 10, - "max_steps": 2000, - "success_threshold": 0.8, - "metrics": ["throughput", "efficiency", "resource_utilization"] - } - } - -Agent Behavior --------------- - -**Phase 1: Exploration (Steps 1-5)** - - Explore the starting area - - Identify available resources - - Plan mining operations - -**Phase 2: Setup (Steps 6-15)** - - Place mining drills on resource patches - - Create storage chests - - Set up basic automation - -**Phase 3: Monitoring (Steps 16+)** - - Monitor entity status - - Check inventory levels - - Optimize operations - -Example Output --------------- - -**Step 1: Initial Setup** - .. code-block:: - - Starting BasicAgent exploration - Starting position: Position(x=0.0, y=0.0) - Found 0 entities - Iron ore at: Position(x=-28.0, y=-61.0) - Copper ore at: Position(x=45.0, y=-30.0) - Coal at: Position(x=-15.0, y=20.0) - -**Step 5: Mining Setup** - .. code-block:: - - Setting up mining operations - Placed mining drill at Position(x=-28.0, y=-61.0) - Placed chest at Position(x=-27.5, y=-59.5) - Current inventory: {'iron-ore': 0, 'coal': 4} - -**Step 20: Monitoring** - .. code-block:: - - Monitoring operations - Working entities: 1 - Total items in inventory: 75 - iron-ore: 75 - coal: 4 - -Performance Metrics -------------------- - -**Throughput** - - Items produced per minute - - Resource utilization efficiency - - Automation chain performance - -**Efficiency** - - Power consumption per item - - Entity utilization rate - - Resource waste minimization - -**Reliability** - - System uptime - - Error rate - - Recovery time - -Example Metrics -~~~~~~~~~~~~~~~ - -.. code-block:: python - - { - "throughput": { - "iron_ore": 2.5, # items per minute - "copper_ore": 1.8, - "coal": 3.2 - }, - "efficiency": { - "power_usage": 0.8, # normalized power usage - "entity_utilization": 0.75, # fraction of entities working - "resource_waste": 0.05 # fraction of resources wasted - }, - "reliability": { - "uptime": 0.95, # fraction of time system is working - "error_rate": 0.02, # errors per step - "recovery_time": 5.0 # average recovery time in steps - } - } - -Troubleshooting ---------------- - -**Common Issues** - - **No resources found**: Check map generation and resource placement - - **Mining drills not working**: Verify power and fuel supply - - **Inventory full**: Add more storage or optimize collection - -**Debug Mode** - Enable debug mode for detailed logging: - - .. code-block:: json - - { - "config": { - "debug_mode": true, - "log_level": "DEBUG" - } - } - -**Performance Issues** - - Monitor entity count and performance - - Check for resource bottlenecks - - Optimize automation chains - -Best Practices --------------- - -1. **Start Simple**: Begin with basic operations -2. **Monitor Progress**: Track performance metrics -3. **Handle Errors**: Implement error recovery -4. **Optimize Gradually**: Improve efficiency over time -5. **Test Thoroughly**: Validate all scenarios -6. **Document Behavior**: Record agent decisions diff --git a/docs/sphinx/source/examples/multiagent.rst b/docs/sphinx/source/examples/multiagent.rst deleted file mode 100644 index 4d813e7dd..000000000 --- a/docs/sphinx/source/examples/multiagent.rst +++ /dev/null @@ -1,565 +0,0 @@ -Multi-Agent Example -=================== - -This example demonstrates how to create and coordinate multiple agents in the Factorio Learning Environment. - -Multi-Agent Overview -------------------- - -Multi-agent systems in FLE enable: - -1. **Agent Coordination**: Multiple agents working together -2. **Task Distribution**: Dividing tasks among agents -3. **Communication**: Inter-agent message passing -4. **Collaborative Planning**: Joint decision making - -Agent Architecture ------------------- - -**Agent Roles** - - **Coordinator**: Manages overall strategy - - **Resource Specialist**: Handles resource collection - - **Construction Specialist**: Manages building operations - - **Research Specialist**: Handles technology advancement - -**Communication Protocol** - - Message passing between agents - - Shared state information - - Task assignment and reporting - - Conflict resolution - -Multi-Agent Implementation -------------------------- - -.. code-block:: python - - from fle.agents.agent_abc import Agent - from fle.env.gym_env.action import Action - from fle.env.game_types import Position, Direction - from typing import Dict, Any, List - import json - - class MultiAgentCoordinator(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "MultiAgentCoordinator" - self.agent_count = config.get('agent_count', 3) - self.agents = self._initialize_agents(config) - self.shared_state = {} - self.task_queue = [] - self.step_count = 0 - - def _initialize_agents(self, config: Dict[str, Any]) -> List[Agent]: - """Initialize specialized agents""" - agents = [] - - # Resource specialist - agents.append(ResourceSpecialist({ - 'role': 'resource_specialist', - 'target_resources': ['iron-ore', 'copper-ore', 'coal'] - })) - - # Construction specialist - agents.append(ConstructionSpecialist({ - 'role': 'construction_specialist', - 'building_types': ['assembling-machine', 'furnace', 'lab'] - })) - - # Research specialist - agents.append(ResearchSpecialist({ - 'role': 'research_specialist', - 'research_priorities': ['automation', 'logistics', 'production'] - })) - - return agents - - def act(self, observation: Dict[str, Any]) -> Action: - """Coordinate multi-agent actions""" - self.step_count += 1 - - # Get messages from other agents - messages = observation.get('messages', []) - - # Process messages and update shared state - self._process_messages(messages) - - # Coordinate agent actions - if self.step_count == 1: - code = self._initial_coordination() - elif self.step_count <= 20: - code = self._task_distribution() - else: - code = self._monitoring_and_optimization() - - return Action( - agent_idx=0, - code=code, - game_state=None - ) - - def _process_messages(self, messages: List[Dict[str, Any]]): - """Process messages from other agents""" - for message in messages: - if message['type'] == 'task_completion': - self._handle_task_completion(message) - elif message['type'] == 'resource_request': - self._handle_resource_request(message) - elif message['type'] == 'coordination_request': - self._handle_coordination_request(message) - - def _initial_coordination(self) -> str: - """Initial coordination and planning""" - return ''' - # Initial multi-agent coordination - print("Starting multi-agent coordination") - - # Send initial messages to all agents - send_message({ - 'type': 'coordination_start', - 'content': 'Beginning multi-agent coordination', - 'target_agents': 'all' - }) - - # Analyze current state - entities = get_entities() - inventory = inspect_inventory() - - print(f"Current state: {len(entities)} entities, {sum(inventory.values())} items") - - # Plan initial tasks - tasks = [ - {'type': 'resource_collection', 'priority': 'high', 'agent': 'resource_specialist'}, - {'type': 'basic_setup', 'priority': 'medium', 'agent': 'construction_specialist'}, - {'type': 'research_planning', 'priority': 'low', 'agent': 'research_specialist'} - ] - - print(f"Planned tasks: {tasks}") - ''' - - def _task_distribution(self) -> str: - """Distribute tasks among agents""" - return ''' - # Task distribution and coordination - print("Distributing tasks among agents") - - # Check for available resources - iron_pos = nearest(Resource.IRON_ORE) - copper_pos = nearest(Resource.COPPER_ORE) - - if iron_pos: - # Assign resource collection task - send_message({ - 'type': 'task_assignment', - 'content': { - 'task': 'collect_iron_ore', - 'location': str(iron_pos), - 'priority': 'high' - }, - 'target_agents': ['resource_specialist'] - }) - - if copper_pos: - # Assign copper collection task - send_message({ - 'type': 'task_assignment', - 'content': { - 'task': 'collect_copper_ore', - 'location': str(copper_pos), - 'priority': 'medium' - }, - 'target_agents': ['resource_specialist'] - }) - - # Check construction needs - entities = get_entities() - if len(entities) < 5: - send_message({ - 'type': 'task_assignment', - 'content': { - 'task': 'build_infrastructure', - 'requirements': ['mining_drill', 'chest', 'furnace'], - 'priority': 'high' - }, - 'target_agents': ['construction_specialist'] - }) - ''' - - def _monitoring_and_optimization(self) -> str: - """Monitor and optimize multi-agent operations""" - return ''' - # Multi-agent monitoring and optimization - print("Monitoring multi-agent operations") - - # Check agent status - entities = get_entities() - inventory = inspect_inventory() - - print(f"Current state: {len(entities)} entities, {sum(inventory.values())} items") - - # Check for coordination issues - working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] - print(f"Working entities: {len(working_entities)}") - - # Send status updates - send_message({ - 'type': 'status_update', - 'content': { - 'entities': len(entities), - 'inventory': sum(inventory.values()), - 'working_entities': len(working_entities) - }, - 'target_agents': 'all' - }) - - # Check for optimization opportunities - if len(working_entities) < len(entities) * 0.8: - send_message({ - 'type': 'optimization_request', - 'content': 'System efficiency below 80%', - 'target_agents': 'all' - }) - ''' - -Specialized Agents ------------------- - -**Resource Specialist** - .. code-block:: python - - class ResourceSpecialist(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "ResourceSpecialist" - self.target_resources = config.get('target_resources', []) - self.mining_setups = [] - - def act(self, observation: Dict[str, Any]) -> Action: - """Handle resource collection tasks""" - messages = observation.get('messages', []) - - # Process task assignments - for message in messages: - if message['type'] == 'task_assignment': - task = message['content'] - if task['task'].startswith('collect_'): - return self._handle_collection_task(task) - - # Default resource collection behavior - return self._default_resource_behavior() - - def _handle_collection_task(self, task: Dict[str, Any]) -> Action: - """Handle specific collection tasks""" - resource_type = task['task'].split('_')[1] - location = task.get('location') - - code = f''' - # Handle collection task: {task['task']} - print("Resource specialist handling collection task") - - # Find and collect {resource_type} - resource_pos = nearest(Resource.{resource_type.upper().replace('-', '_')}) - if resource_pos: - drill = place_entity( - entity=Prototype.MiningDrill, - position=resource_pos, - direction=Direction.NORTH - ) - print(f"Placed mining drill for {resource_type} at {resource_pos}") - - # Report task completion - send_message({{ - 'type': 'task_completion', - 'content': {{ - 'task': '{task['task']}', - 'status': 'completed', - 'location': str(resource_pos) - }}, - 'target_agents': ['coordinator'] - }}) - ''' - - return Action(agent_idx=1, code=code, game_state=None) - -**Construction Specialist** - .. code-block:: python - - class ConstructionSpecialist(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "ConstructionSpecialist" - self.building_types = config.get('building_types', []) - self.construction_queue = [] - - def act(self, observation: Dict[str, Any]) -> Action: - """Handle construction tasks""" - messages = observation.get('messages', []) - - # Process construction requests - for message in messages: - if message['type'] == 'task_assignment': - task = message['content'] - if task['task'] == 'build_infrastructure': - return self._handle_infrastructure_task(task) - - # Default construction behavior - return self._default_construction_behavior() - - def _handle_infrastructure_task(self, task: Dict[str, Any]) -> Action: - """Handle infrastructure construction""" - requirements = task.get('requirements', []) - - code = f''' - # Handle infrastructure construction - print("Construction specialist building infrastructure") - - # Build required entities - entities = get_entities() - current_types = [e.name for e in entities] - - for requirement in {requirements}: - if requirement not in current_types: - # Build the required entity - if requirement == 'mining_drill': - resource_pos = nearest(Resource.IRON_ORE) - if resource_pos: - drill = place_entity( - entity=Prototype.MiningDrill, - position=resource_pos, - direction=Direction.NORTH - ) - print(f"Built {requirement} at {resource_pos}") - - elif requirement == 'chest': - # Place chest near existing entities - if entities: - reference = entities[0] - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=reference.position, - direction=Direction.SOUTH - ) - print(f"Built {requirement} at {chest.position}") - - # Report construction completion - send_message({{ - 'type': 'task_completion', - 'content': {{ - 'task': 'build_infrastructure', - 'status': 'completed', - 'entities_built': len(get_entities()) - }}, - 'target_agents': ['coordinator'] - }}) - ''' - - return Action(agent_idx=2, code=code, game_state=None) - -**Research Specialist** - .. code-block:: python - - class ResearchSpecialist(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "ResearchSpecialist" - self.research_priorities = config.get('research_priorities', []) - self.research_queue = [] - - def act(self, observation: Dict[str, Any]) -> Action: - """Handle research tasks""" - messages = observation.get('messages', []) - - # Process research requests - for message in messages: - if message['type'] == 'task_assignment': - task = message['content'] - if task['task'] == 'research_planning': - return self._handle_research_planning(task) - - # Default research behavior - return self._default_research_behavior() - - def _handle_research_planning(self, task: Dict[str, Any]) -> Action: - """Handle research planning tasks""" - code = ''' - # Handle research planning - print("Research specialist planning research") - - # Check current research status - research = get_research_progress() - print(f"Current research: {research}") - - # Plan research priorities - priorities = ['automation', 'logistics', 'production'] - for priority in priorities: - if priority not in research.get('completed', []): - # Start research - result = set_research(priority) - if result: - print(f"Started research: {priority}") - break - - # Report research status - send_message({ - 'type': 'task_completion', - 'content': { - 'task': 'research_planning', - 'status': 'completed', - 'research_started': priority - }, - 'target_agents': ['coordinator'] - }) - ''' - - return Action(agent_idx=3, code=code, game_state=None) - -Running Multi-Agent Systems ---------------------------- - -**Environment Setup** - .. code-block:: python - - import gym - from fle.agents.multiagent_coordinator import MultiAgentCoordinator - - # Create environment - env = gym.make("iron_ore_throughput") - - # Create multi-agent coordinator - coordinator = MultiAgentCoordinator({ - 'agent_count': 3, - 'coordination_enabled': True, - 'communication_enabled': True - }) - - # Run episode - obs = env.reset() - done = False - step = 0 - - while not done and step < 100: - action = coordinator.act(obs) - obs, reward, terminated, truncated, info = env.step(action) - done = terminated or truncated - step += 1 - print(f"Step {step}: Reward = {reward}") - - env.close() - -**Command Line Usage** - .. code-block:: bash - - # Run multi-agent evaluation - fle eval --agent multiagent_coordinator --config configs/multiagent_config.json - -Multi-Agent Configuration -------------------------- - -**Basic Configuration** - .. code-block:: json - - { - "agent_type": "MultiAgentCoordinator", - "config": { - "agent_count": 3, - "coordination_enabled": true, - "communication_enabled": true, - "task_distribution": "round_robin" - }, - "evaluation": { - "episodes": 5, - "max_steps": 1000, - "success_threshold": 0.7 - } - } - -**Advanced Configuration** - .. code-block:: json - - { - "agent_type": "MultiAgentCoordinator", - "config": { - "agent_count": 5, - "coordination_enabled": true, - "communication_enabled": true, - "task_distribution": "priority_based", - "conflict_resolution": "voting", - "shared_state_size": 1000, - "message_timeout": 30 - }, - "evaluation": { - "episodes": 10, - "max_steps": 2000, - "success_threshold": 0.8, - "metrics": ["coordination_effectiveness", "communication_efficiency", "task_completion_rate"] - } - } - -Performance Metrics -------------------- - -**Coordination Effectiveness** - - Task completion rate - - Coordination efficiency - - Conflict resolution success - -**Communication Efficiency** - - Message delivery rate - - Communication latency - - Message processing time - -**Multi-Agent Performance** - - Overall system performance - - Agent specialization effectiveness - - Collaborative planning success - -Example Metrics -~~~~~~~~~~~~~~~ - -.. code-block:: python - - { - "coordination_effectiveness": { - "task_completion_rate": 0.85, # fraction of tasks completed - "coordination_efficiency": 0.75, # fraction of coordinated actions - "conflict_resolution_success": 0.90 # fraction of conflicts resolved - }, - "communication_efficiency": { - "message_delivery_rate": 0.95, # fraction of messages delivered - "communication_latency": 0.1, # average latency in seconds - "message_processing_time": 0.05 # average processing time in seconds - }, - "multi_agent_performance": { - "overall_system_performance": 0.80, # overall system effectiveness - "agent_specialization_effectiveness": 0.85, # effectiveness of specialization - "collaborative_planning_success": 0.70 # success rate of collaborative plans - } - } - -Troubleshooting ---------------- - -**Coordination Issues** - - **Task conflicts**: Implement conflict resolution - - **Communication failures**: Check message delivery - - **Coordination breakdown**: Monitor coordination effectiveness - -**Performance Issues** - - **Slow coordination**: Optimize coordination algorithms - - **High communication overhead**: Reduce message frequency - - **Memory issues**: Limit shared state size - -**Agent Issues** - - **Agent failures**: Implement agent recovery - - **Specialization problems**: Adjust agent roles - - **Communication errors**: Handle message errors - -Best Practices --------------- - -1. **Clear Roles**: Define clear agent roles and responsibilities -2. **Effective Communication**: Implement efficient communication protocols -3. **Conflict Resolution**: Handle conflicts between agents -4. **Performance Monitoring**: Monitor multi-agent performance -5. **Scalability**: Design for different numbers of agents -6. **Error Handling**: Implement robust error recovery -7. **Testing**: Test multi-agent coordination thoroughly diff --git a/docs/sphinx/source/examples/visual_agent.rst b/docs/sphinx/source/examples/visual_agent.rst deleted file mode 100644 index 70cb5ae8b..000000000 --- a/docs/sphinx/source/examples/visual_agent.rst +++ /dev/null @@ -1,450 +0,0 @@ -Visual Agent Example -==================== - -This example demonstrates how to create a visual agent that processes visual information from the game environment. - -Agent Overview --------------- - -The visual agent uses computer vision techniques to: - -1. **Image Processing**: Analyze game screenshots and map images -2. **Object Detection**: Identify entities and resources in the visual data -3. **Spatial Reasoning**: Understand spatial relationships between objects -4. **Visual Planning**: Plan actions based on visual information - -Agent Implementation --------------------- - -.. code-block:: python - - from fle.agents.agent_abc import Agent - from fle.env.gym_env.action import Action - from fle.env.game_types import Position, Direction - from typing import Dict, Any, List - import base64 - import io - from PIL import Image - import numpy as np - - class VisualAgent(Agent): - def __init__(self, config: Dict[str, Any]): - super().__init__(config) - self.name = "VisualAgent" - self.vision_enabled = config.get('vision_enabled', True) - self.image_processing = config.get('image_processing', True) - self.spatial_reasoning = config.get('spatial_reasoning', True) - self.visual_memory = {} - self.step_count = 0 - - def act(self, observation: Dict[str, Any]) -> Action: - """Generate action based on visual observation""" - self.step_count += 1 - - # Get visual information - map_image = observation.get('map_image', '') - entities = observation.get('entities', []) - inventory = observation.get('inventory', {}) - - # Process visual information - if self.vision_enabled and map_image: - visual_analysis = self._analyze_visual_data(map_image) - else: - visual_analysis = {} - - # Generate action based on visual analysis - if self.step_count == 1: - code = self._initial_visual_exploration(visual_analysis) - elif self.step_count <= 10: - code = self._visual_setup(visual_analysis, entities) - else: - code = self._visual_monitoring(visual_analysis, entities, inventory) - - return Action( - agent_idx=0, - code=code, - game_state=None - ) - - def _analyze_visual_data(self, map_image: str) -> Dict[str, Any]: - """Analyze visual data from map image""" - try: - # Decode base64 image - image_data = base64.b64decode(map_image) - image = Image.open(io.BytesIO(image_data)) - - # Convert to numpy array - img_array = np.array(image) - - # Perform visual analysis - analysis = { - 'image_size': image.size, - 'image_mode': image.mode, - 'dominant_colors': self._extract_dominant_colors(img_array), - 'entity_locations': self._detect_entities(img_array), - 'resource_patches': self._detect_resource_patches(img_array), - 'spatial_features': self._extract_spatial_features(img_array) - } - - return analysis - - except Exception as e: - print(f"Visual analysis error: {e}") - return {} - - def _extract_dominant_colors(self, img_array: np.ndarray) -> List[tuple]: - """Extract dominant colors from image""" - # Reshape image to 2D array of pixels - pixels = img_array.reshape(-1, img_array.shape[-1]) - - # Simple color extraction (in practice, use more sophisticated methods) - unique_colors = np.unique(pixels, axis=0) - return unique_colors[:10].tolist() # Return top 10 colors - - def _detect_entities(self, img_array: np.ndarray) -> List[Dict[str, Any]]: - """Detect entities in the image""" - # Simple entity detection (in practice, use computer vision models) - entities = [] - - # Look for specific color patterns that might indicate entities - # This is a simplified example - for y in range(0, img_array.shape[0], 10): - for x in range(0, img_array.shape[1], 10): - pixel = img_array[y, x] - if self._is_entity_pixel(pixel): - entities.append({ - 'position': (x, y), - 'type': self._classify_entity(pixel), - 'confidence': 0.8 - }) - - return entities - - def _detect_resource_patches(self, img_array: np.ndarray) -> List[Dict[str, Any]]: - """Detect resource patches in the image""" - resource_patches = [] - - # Look for resource-specific color patterns - for y in range(0, img_array.shape[0], 20): - for x in range(0, img_array.shape[1], 20): - region = img_array[y:y+20, x:x+20] - if self._is_resource_region(region): - resource_patches.append({ - 'position': (x, y), - 'type': self._classify_resource(region), - 'size': self._estimate_resource_size(region) - }) - - return resource_patches - - def _extract_spatial_features(self, img_array: np.ndarray) -> Dict[str, Any]: - """Extract spatial features from the image""" - return { - 'image_center': (img_array.shape[1] // 2, img_array.shape[0] // 2), - 'image_bounds': (0, 0, img_array.shape[1], img_array.shape[0]), - 'density_map': self._calculate_density_map(img_array), - 'connectivity': self._analyze_connectivity(img_array) - } - - def _initial_visual_exploration(self, visual_analysis: Dict[str, Any]) -> str: - """Initial visual exploration""" - return f''' - # Initial visual exploration - print("Starting VisualAgent exploration") - - # Analyze visual data - visual_analysis = {visual_analysis} - print(f"Visual analysis: {visual_analysis}") - - # Get current position - position = get_position() - print(f"Starting position: {{position}}") - - # Look for resources using visual analysis - if visual_analysis.get('resource_patches'): - for patch in visual_analysis['resource_patches']: - print(f"Found resource patch: {{patch['type']}} at {{patch['position']}}") - - # Look for entities using visual analysis - if visual_analysis.get('entity_locations'): - for entity in visual_analysis['entity_locations']: - print(f"Found entity: {{entity['type']}} at {{entity['position']}}") - ''' - - def _visual_setup(self, visual_analysis: Dict[str, Any], entities: List) -> str: - """Set up operations based on visual analysis""" - return ''' - # Visual-based setup - print("Setting up operations based on visual analysis") - - # Find resources using visual cues - iron_pos = nearest(Resource.IRON_ORE) - copper_pos = nearest(Resource.COPPER_ORE) - - if iron_pos: - # Place mining drill with visual guidance - drill = place_entity( - entity=Prototype.MiningDrill, - position=iron_pos, - direction=Direction.NORTH - ) - print(f"Placed mining drill at {iron_pos} based on visual analysis") - - # Add storage with visual positioning - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - print(f"Placed chest at {chest.position}") - - # Check visual feedback - entities = get_entities() - print(f"Current entities: {len(entities)}") - ''' - - def _visual_monitoring(self, visual_analysis: Dict[str, Any], entities: List, inventory: Dict) -> str: - """Monitor operations using visual feedback""" - return ''' - # Visual monitoring - print("Monitoring operations with visual feedback") - - # Check entities - entities = get_entities() - working_entities = [e for e in entities if hasattr(e, 'status') and e.status == EntityStatus.WORKING] - print(f"Working entities: {len(working_entities)}") - - # Check inventory - inventory = inspect_inventory() - total_items = sum(inventory.values()) - print(f"Total items: {total_items}") - - # Visual analysis feedback - if visual_analysis: - print(f"Visual analysis: {visual_analysis}") - if 'spatial_features' in visual_analysis: - features = visual_analysis['spatial_features'] - print(f"Spatial features: {features}") - ''' - -Visual Processing Features --------------------------- - -**Image Analysis** - - Dominant color extraction - - Entity detection and classification - - Resource patch identification - - Spatial feature extraction - -**Computer Vision Techniques** - - Edge detection - - Color segmentation - - Object recognition - - Spatial reasoning - -**Visual Memory** - - Store visual information across steps - - Track changes in visual data - - Maintain spatial maps - -Example Visual Analysis ------------------------ - -**Input Image** - Base64 encoded PNG image of the game map - -**Output Analysis** - .. code-block:: python - - { - 'image_size': (1024, 1024), - 'image_mode': 'RGB', - 'dominant_colors': [ - [0, 0, 0], # Black (background) - [139, 69, 19], # Brown (dirt) - [128, 128, 128], # Gray (stone) - [255, 215, 0] # Gold (resources) - ], - 'entity_locations': [ - { - 'position': (512, 256), - 'type': 'mining_drill', - 'confidence': 0.9 - }, - { - 'position': (520, 264), - 'type': 'chest', - 'confidence': 0.8 - } - ], - 'resource_patches': [ - { - 'position': (100, 200), - 'type': 'iron_ore', - 'size': 'large' - }, - { - 'position': (300, 400), - 'type': 'copper_ore', - 'size': 'medium' - } - ], - 'spatial_features': { - 'image_center': (512, 512), - 'image_bounds': (0, 0, 1024, 1024), - 'density_map': {...}, - 'connectivity': {...} - } - } - -Running the Visual Agent ------------------------ - -**Environment Setup** - .. code-block:: python - - import gym - from fle.agents.visual_agent import VisualAgent - - # Create environment - env = gym.make("iron_ore_throughput") - - # Create visual agent - agent = VisualAgent({ - 'vision_enabled': True, - 'image_processing': True, - 'spatial_reasoning': True - }) - - # Run episode - obs = env.reset() - done = False - step = 0 - - while not done and step < 100: - action = agent.act(obs) - obs, reward, terminated, truncated, info = env.step(action) - done = terminated or truncated - step += 1 - print(f"Step {step}: Reward = {reward}") - - env.close() - -**Command Line Usage** - .. code-block:: bash - - # Run visual agent evaluation - fle eval --agent visual_agent --config configs/visual_agent_config.json - -Agent Configuration -------------------- - -**Basic Configuration** - .. code-block:: json - - { - "agent_type": "VisualAgent", - "config": { - "vision_enabled": true, - "image_processing": true, - "spatial_reasoning": true, - "visual_memory_size": 100 - }, - "evaluation": { - "episodes": 5, - "max_steps": 1000, - "success_threshold": 0.6 - } - } - -**Advanced Configuration** - .. code-block:: json - - { - "agent_type": "VisualAgent", - "config": { - "vision_enabled": true, - "image_processing": true, - "spatial_reasoning": true, - "visual_memory_size": 1000, - "computer_vision_model": "resnet50", - "object_detection_threshold": 0.7, - "spatial_analysis_depth": 3 - }, - "evaluation": { - "episodes": 10, - "max_steps": 2000, - "success_threshold": 0.8, - "metrics": ["visual_accuracy", "spatial_reasoning", "object_detection"] - } - } - -Performance Metrics -------------------- - -**Visual Accuracy** - - Object detection accuracy - - Resource identification accuracy - - Spatial reasoning accuracy - -**Processing Performance** - - Image processing time - - Memory usage - - CPU utilization - -**Visual Reasoning** - - Spatial relationship understanding - - Object interaction prediction - - Visual planning effectiveness - -Example Metrics -~~~~~~~~~~~~~~~ - -.. code-block:: python - - { - "visual_accuracy": { - "object_detection": 0.85, # fraction of objects correctly identified - "resource_identification": 0.90, # fraction of resources correctly identified - "spatial_reasoning": 0.75 # fraction of spatial relationships correctly understood - }, - "processing_performance": { - "image_processing_time": 0.1, # seconds per image - "memory_usage": 512, # MB - "cpu_utilization": 0.3 # fraction of CPU used - }, - "visual_reasoning": { - "spatial_understanding": 0.80, # fraction of spatial relationships understood - "object_interaction_prediction": 0.70, # fraction of interactions correctly predicted - "visual_planning_effectiveness": 0.65 # fraction of visual plans that succeed - } - } - -Troubleshooting ---------------- - -**Visual Processing Issues** - - **Poor image quality**: Check image resolution and format - - **Detection failures**: Adjust detection thresholds - - **Memory issues**: Reduce visual memory size - -**Performance Issues** - - **Slow processing**: Optimize image processing algorithms - - **High memory usage**: Implement image compression - - **CPU bottlenecks**: Use parallel processing - -**Accuracy Issues** - - **False positives**: Adjust detection thresholds - - **Missed objects**: Improve detection algorithms - - **Spatial errors**: Enhance spatial reasoning - -Best Practices --------------- - -1. **Image Quality**: Ensure high-quality input images -2. **Detection Thresholds**: Tune detection parameters -3. **Memory Management**: Monitor and optimize memory usage -4. **Performance Optimization**: Use efficient algorithms -5. **Error Handling**: Implement robust error recovery -6. **Visual Memory**: Maintain useful visual information -7. **Spatial Reasoning**: Develop strong spatial understanding diff --git a/docs/sphinx/source/getting_started/cluster.rst b/docs/sphinx/source/getting_started/cluster.rst deleted file mode 100644 index b935eb8c1..000000000 --- a/docs/sphinx/source/getting_started/cluster.rst +++ /dev/null @@ -1,91 +0,0 @@ -Cluster Setup -============= - -FLE uses Docker to run Factorio servers in a cluster configuration. This allows for scalable evaluation of agents across multiple game instances. - -Starting a Cluster ------------------ - -.. code-block:: bash - - # Start Factorio cluster - fle cluster start - -This command will: - -- Start Docker containers running Factorio servers -- Configure networking between containers -- Set up the evaluation environment -- Create necessary directories and configurations - -Cluster Management ------------------- - -The cluster system provides several management commands: - -.. code-block:: bash - - # Check cluster status - fle cluster status - - # Stop the cluster - fle cluster stop - - # Restart the cluster - fle cluster restart - -Configuration -------------- - -Cluster configuration is managed through: - -- `.env` file: Environment variables for cluster setup -- `configs/` directory: Configuration files for different scenarios -- Docker Compose: Container orchestration - -The cluster automatically creates these files on first run. - -Scenarios ---------- - -FLE supports different game scenarios: - -- **Lab-play**: 24 structured tasks with fixed resources -- **Open-play**: An unbounded task of building the largest possible factory on a procedurally generated map - -Each scenario can be configured with different parameters: - -- Map generation settings -- Resource availability -- Technology research requirements -- Time limits and objectives - -Troubleshooting --------------- - -**Docker Issues** - - Ensure your user has permission to run Docker without sudo - - Check that Docker is running: `docker ps` - - Verify available disk space and memory - -**Connection Issues** - - Make sure the Factorio server is running and ports are properly configured - - Check firewall settings for required ports - - Verify network connectivity between containers - -**Resource Issues** - - Monitor Docker resource usage: `docker stats` - - Adjust memory limits if needed - - Check available disk space for game saves - -Advanced Configuration ----------------------- - -For advanced users, you can customize: - -- Container resource limits -- Network configurations -- Volume mounts for persistent data -- Custom Factorio mods and scenarios - -See the :doc:`customization guide <../customization/tasks>` for more details. diff --git a/docs/sphinx/source/getting_started/installation.rst b/docs/sphinx/source/getting_started/installation.rst index c8a3484ad..01f78b09b 100644 --- a/docs/sphinx/source/getting_started/installation.rst +++ b/docs/sphinx/source/getting_started/installation.rst @@ -4,105 +4,136 @@ Installation Prerequisites ------------- -- Docker -- Python 3.10+ -- `Factorio `_ (version 1.1.110), only for optional rendering +Before installing FLE, ensure you have: -Installation ------------- +- **Docker**: Required for running Factorio server instances +- **Python 3.10+**: The minimum Python version supported +- **Factorio** (version 1.1.110): Only needed for optional rendering with graphics + +Installation Methods +-------------------- + +Core Installation +~~~~~~~~~~~~~~~~~ -Core FLE SDK package: +Install the core FLE SDK package: .. code-block:: bash + # Using pip pip install factorio-learning-environment + + # Using uv (recommended) uv add factorio-learning-environment -With optional features: +Installation with Optional Features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +FLE provides several optional feature sets: .. code-block:: bash # For running experiments pip install factorio-learning-environment[eval] - - # For MCP protocol support + + # For MCP protocol support pip install factorio-learning-environment[mcp] - + # For PostgreSQL support pip install factorio-learning-environment[psql] - - # All features - pip install factorio-learning-environment[eval,mcp,psql] - -Using uv (recommended): -.. code-block:: bash + # Install all features + pip install factorio-learning-environment[eval,mcp,psql] + # Using uv (recommended) uv add factorio-learning-environment[eval] Client-side Setup (Optional) ----------------------------- +----------------------------- + +For rendering Factorio with graphics, you need to set up a Factorio client: + +1. **Purchase and Install Factorio** + + - Purchase from the `official website `_ (recommended) or on Steam + - Download and install the game + +2. **Downgrade to Version 1.1.110** -For rendering graphics, set up the Factorio client: + - **Steam**: Right-click Factorio → Properties → Betas → Select ``1.1.110`` + - **Important**: Uncheck the Space Age DLC if you have it, as it forces the 2.x branch -1. **Set up Factorio client**: - - Purchase Factorio from the `official website `_ (recommended) or on Steam. - - Downgrade to version 1.1.110: - - Steam: Right-click Factorio → Properties → Betas → Select 1.1.110 - - **Important**: Make sure to uncheck the Space Age DLC if you have it, as it forces the 2.x branch +3. **Activate Server License** -2. **Activate server**: - - Open Factorio client - - Navigate to _Multiplayer_ - - Connect to `localhost:34197` (default) or your configured address in Docker. - - Once connected, you can safely disconnect. This step confirms your Factorio license with the server. + - Open the Factorio client + - Navigate to *Multiplayer* + - Connect to ``localhost:34197`` (default) or your configured address in Docker + - Once connected, you can safely disconnect. This step confirms your Factorio license with the server. API Key Configuration --------------------- -FLE supports multiple LLM providers for agent evaluation. To get started with API keys: +FLE supports multiple LLM providers for agent evaluation. -1. **Quick Setup** (Recommended): - .. code-block:: bash +Quick Setup (Recommended) +~~~~~~~~~~~~~~~~~~~~~~~~~~ - python fle/eval/infra/setup_api_keys.py +Use the interactive setup script: - This interactive script helps you: - - Configure API keys for OpenAI, Anthropic, and other providers - - Set up API key rotation for high-volume experiments - - Generate provider-specific configuration files - - Validate your API key setup +.. code-block:: bash + + python fle/eval/infra/setup_api_keys.py + +This script helps you: + +- Configure API keys for OpenAI, Anthropic, and other providers +- Set up API key rotation for high-volume experiments +- Generate provider-specific configuration files +- Validate your API key setup + +Manual Setup +~~~~~~~~~~~~ + +Add your API keys to the ``.env`` file: + +.. code-block:: bash -2. **Manual Setup**: - Add your API keys to the `.env` file: - .. code-block:: bash + # OpenAI + OPENAI_API_KEY=sk-... - # OpenAI - OPENAI_API_KEY=sk-... - - # Anthropic - ANTHROPIC_API_KEY=sk-ant-... - - # Additional providers as needed + # Anthropic + ANTHROPIC_API_KEY=sk-ant-... -3. **Advanced Configuration**: - For large-scale experiments, you can set up API key rotation and provider-specific settings using the configuration files generated by `setup_api_keys.py`. + # Additional providers as needed -Troubleshooting ---------------- +Advanced Configuration +~~~~~~~~~~~~~~~~~~~~~~ -- **"No valid programs found for version X"**: This is normal during initialization. The system will start generating programs shortly. -- **Database connection errors**: Verify your database configuration in the .env file and ensure the database exists. -- **API key errors**: Run `python fle/eval/infra/setup_api_keys.py` to verify your API key configuration. -- **Docker issues**: Ensure your user has permission to run Docker without sudo. -- **Connection issues**: Make sure the Factorio server is running and ports are properly configured. +For large-scale experiments, you can set up API key rotation and provider-specific settings using the configuration files generated by ``setup_api_keys.py``. -Building Documentation (Maintainers) ------------------------------------- +Initial Setup +------------- + +When you run ``fle init`` or ``fle eval`` for the first time: + +- An ``.env`` file is automatically created +- A ``configs/`` directory with example configurations is created + +Verification +------------ + +Verify your installation by starting the Factorio cluster: .. code-block:: bash - cd docs/sphinx - python3 -m sphinx -b html source build/html + # Start Factorio cluster + fle cluster start + + # Run evaluation trajectories (requires [eval] dependencies) + fle eval --config configs/gym_run_config.json + +Next Steps +---------- -The generated site will be in ``factorio-learning-environment/docs/sphinx/build/html``. +- Continue to :doc:`quickstart` to learn how to use FLE +- See :doc:`troubleshooting` if you encounter issues diff --git a/docs/sphinx/source/getting_started/quickstart.rst b/docs/sphinx/source/getting_started/quickstart.rst index 7d92a180a..657ad6c11 100644 --- a/docs/sphinx/source/getting_started/quickstart.rst +++ b/docs/sphinx/source/getting_started/quickstart.rst @@ -1,32 +1,72 @@ Quickstart ========== -Use the CLI: +This guide will get you up and running with FLE in minutes. + +CLI Commands +------------ + +Starting the Factorio Cluster +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash # Start Factorio cluster fle cluster start - + +Running Evaluations +~~~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + # Run evaluation trajectories (requires [eval] dependencies) fle eval --config configs/gym_run_config.json .. note:: - When you run `fle init` or `fle eval` for the first time, an `.env` file and a `configs/` directory with example configurations are created automatically + When you run ``fle init`` or ``fle eval`` for the first time, an ``.env`` file and a ``configs/`` directory with example configurations are created automatically. + +Basic Usage Example +------------------- + +Here's a complete example demonstrating how to use FLE with the Gym interface: + +.. code-block:: python + + import gym + from fle.env.gym_env.action import Action + + # Create an environment + env = gym.make("iron_ore_throughput") + + # Reset the environment + obs = env.reset(options={'game_state': None}) + + # Take an action + action = Action( + agent_idx=0, # Which agent takes the action + code='print("Hello Factorio!")', # Python code to execute + game_state=None # Optional: game state to reset to before running code + ) + + # Execute the action + obs, reward, terminated, truncated, info = env.step(action) + + # Clean up + env.close() -Environment Overview --------------------- +Understanding the REPL Pattern +------------------------------- -FLE is an agent evaluation environment built on the game of Factorio, a popular resource management simulation game. +Agents interact with FLE through a **REPL** (Read-Eval-Print-Loop) pattern: -Agents interact with **FLE** by code synthesis through a **REPL** (Read-Eval-Print-Loop) pattern: +1. **Observation**: The agent observes the world through the output streams (stderr/stdout) of their last program +2. **Action**: The agent generates a Python program to perform their desired action +3. **Feedback**: The environment executes the program and provides an output stream -1. **Observation**: The agent observes the world through the output streams (stderr/stdout) of their last program. -2. **Action**: The agent generates a Python program to perform their desired action. -3. **Feedback**: The environment executes the program, assigns variables, add classes/functions to the namespace, and provides an output stream. +Example Action-Feedback Cycle +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Example Interaction ------------------- +**Action:** .. code-block:: python @@ -51,52 +91,104 @@ Example Interaction .. code-block:: python - >>> [ BurnerMiningDrill(fuel=Inventory({'coal': 4}), - >>> name='burner-mining-drill', - >>> direction=Direction.DOWN, - >>> position=Position(x=-28.0, y=-61.0), - >>> energy=2666.6666666667, - >>> tile_dimensions=TileDimensions(tile_width=2.0, tile_height=2.0), - >>> status=EntityStatus.WORKING, - >>> neighbours=[Entity(name='iron-chest', direction=DOWN, position=Position(x=-27.5 y=-59.5)], - >>> drop_position=Position(x=-27.5, y=-59.5), + >>> [ BurnerMiningDrill(fuel=Inventory({'coal': 4}), + >>> name='burner-mining-drill', + >>> direction=Direction.DOWN, + >>> position=Position(x=-28.0, y=-61.0), + >>> energy=2666.6666666667, + >>> tile_dimensions=TileDimensions(tile_width=2.0, tile_height=2.0), + >>> status=EntityStatus.WORKING, + >>> neighbours=[Entity(name='iron-chest', direction=DOWN, position=Position(x=-27.5 y=-59.5)], + >>> drop_position=Position(x=-27.5, y=-59.5), >>> resources=[Ingredient(name='iron-ore', count=30000, type=None)]), - >>> Chest(name='iron-chest', - >>> direction=Direction.UP, - >>> position=Position(x=-27.5, y=-59.5), - >>> energy=0.0, - >>> tile_dimensions=TileDimensions(tile_width=1.0, tile_height=1.0), - >>> status=EntityStatus.NORMAL, + >>> Chest(name='iron-chest', + >>> direction=Direction.UP, + >>> position=Position(x=-27.5, y=-59.5), + >>> energy=0.0, + >>> tile_dimensions=TileDimensions(tile_width=1.0, tile_height=1.0), + >>> status=EntityStatus.NORMAL, >>> inventory=Inventory({'iron-ore': 75}))] -Key Concepts ------------- +Listing Available Environments +------------------------------- + +.. code-block:: python + + from fle.env.gym_env.registry import list_available_environments + + # Get all available environment IDs + env_ids = list_available_environments() + print(f"Available environments: {env_ids}") + +Or use the command-line tool: + +.. code-block:: bash + + python fle/env/gym_env/example_usage.py --list -**Tools and Namespace** - Agents are provided with the Python standard library, and an API comprising :doc:`tools <../api/tools>` that they can use. +Creating Different Environments +-------------------------------- + +.. code-block:: python + + import gym + + # Create throughput environments + env = gym.make("iron_plate_throughput") + env = gym.make("automation_science_pack_throughput") + env = gym.make("crude_oil_throughput") + + # Create open play environment + env = gym.make("open_play") + +Complete Workflow Example +-------------------------- + +Here's a complete example demonstrating the full workflow: + +.. code-block:: python - Tools are functions that perform a game action and return a typed object (e.g an Inventory), which can be stored as a named **variable** in the Python namespace for later use. + import gym + from fle.env.gym_env.registry import list_available_environments, get_environment_info + from fle.env.gym_env.action import Action - The namespace acts as an episodic symbolic memory system, and saved objects represent an observation of the environment at the moment of query. + # 1. List available environments + env_ids = list_available_environments() + print(f"Found {len(env_ids)} environments") - This enables agents to maintain complex state representations and build hierarchical abstractions as the factories scale. + # 2. Get information about a specific environment + info = get_environment_info("iron_ore_throughput") + print(f"Description: {info['description']}") -**Observation Streams** - Agents observe **stdout** and **stderr** - the output streams of their program. Agents may intentionally choose to print relevant objects and computations to the output stream to construct observations. + # 3. Create the environment + env = gym.make("iron_ore_throughput") - Mistakes in the code or invalid operations raise typed **exceptions** with detailed context that is written to stderr. + # 4. Use the environment + obs = env.reset(options={'game_state': None}) + print(f"Initial observation keys: {list(obs.keys())}") - This enables agents to reactively debug their programs after execution, and proactively use runtime assertions during execution to self-verify their actions. + # 5. Take actions + current_state = None + for step in range(5): + action = Action( + agent_idx=0, + game_state=current_state, + code=f'print("Step {step}: Hello Factorio!")' + ) + obs, reward, terminated, truncated, info = env.step(action) + done = terminated or truncated + current_state = info['output_game_state'] + print(f"Step {step}: Reward={reward}, Done={done}") -**Code Enhancement** - Agents are able to enhance their internal representation of the game state by defining: + if done: + break - 1. Utility functions for reuse throughout an episode, to encapsulate previously successful logic - 2. Classes in the namespace to better organize the data retrieved from the game. + # 6. Clean up + env.close() Next Steps ---------- -- Learn about the :doc:`environment API <../api/environment>` -- Explore available :doc:`tools <../api/tools>` -- See :doc:`examples <../examples/basic_agent>` of agent implementations +- Learn about the :doc:`../environment/overview` and how agents interact with it +- Explore the :doc:`../tools/overview` available to agents +- Check out the :doc:`../environment/gym_registry` for available tasks diff --git a/docs/sphinx/source/getting_started/troubleshooting.rst b/docs/sphinx/source/getting_started/troubleshooting.rst new file mode 100644 index 000000000..361ea19b4 --- /dev/null +++ b/docs/sphinx/source/getting_started/troubleshooting.rst @@ -0,0 +1,214 @@ +Troubleshooting +=============== + +This page addresses common issues you may encounter when using FLE. + +Common Issues +------------- + +"No valid programs found for version X" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Symptom**: You see this message during initialization. + +**Solution**: This is normal during initialization. The system will start generating programs shortly. No action needed. + +Database Connection Errors +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Symptom**: Errors connecting to the database when running evaluations. + +**Solution**: + +1. Verify your database configuration in the ``.env`` file +2. Ensure the database exists +3. For SQLite: Check that the directory for the database file exists +4. For PostgreSQL: Verify the database server is running + +API Key Errors +~~~~~~~~~~~~~~ + +**Symptom**: Authentication errors when running agent evaluations. + +**Solution**: + +1. Run the API key setup script: + + .. code-block:: bash + + python fle/eval/infra/setup_api_keys.py + +2. Verify your API keys are correctly set in the ``.env`` file +3. Check that you're using the correct provider (OpenAI, Anthropic, etc.) + +Docker Issues +~~~~~~~~~~~~~ + +**Symptom**: Permission denied or Docker connection errors. + +**Solution**: + +1. Ensure Docker is installed and running +2. Verify your user has permission to run Docker without sudo: + + .. code-block:: bash + + sudo usermod -aG docker $USER + +3. Log out and log back in for the group change to take effect +4. Test Docker access: + + .. code-block:: bash + + docker ps + +Connection Issues +~~~~~~~~~~~~~~~~~ + +**Symptom**: Cannot connect to Factorio server. + +**Solution**: + +1. Make sure the Factorio server is running: + + .. code-block:: bash + + fle cluster start + +2. Check that ports are properly configured +3. Verify Docker containers are running: + + .. code-block:: bash + + docker ps + +4. Check Docker logs for errors: + + .. code-block:: bash + + docker logs + +Environment Creation Fails +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Symptom**: ``gym.make()`` fails with connection errors. + +**Solution**: + +1. Ensure Factorio containers are running +2. Check that the cluster setup is working +3. Verify network connectivity + +No Environments Found +~~~~~~~~~~~~~~~~~~~~~ + +**Symptom**: ``list_available_environments()`` returns an empty list. + +**Solution**: + +1. Check that the task definitions directory exists +2. Verify JSON files in ``fle/eval/tasks/task_definitions/`` are valid +3. Check file permissions +4. Ensure you're running from the correct directory + +Import Errors +~~~~~~~~~~~~~ + +**Symptom**: ``ModuleNotFoundError`` or import errors. + +**Solution**: + +1. Ensure you're running from the correct directory +2. Check that all dependencies are installed: + + .. code-block:: bash + + pip install factorio-learning-environment[eval] + +3. Verify the Python path includes the project root +4. Try reinstalling the package: + + .. code-block:: bash + + pip install --force-reinstall factorio-learning-environment + +Space Age DLC Issues +~~~~~~~~~~~~~~~~~~~~ + +**Symptom**: Factorio client is on version 2.x instead of 1.1.110. + +**Solution**: + +1. Open Steam library +2. Right-click Factorio → Properties +3. Navigate to DLC section +4. **Uncheck Space Age DLC** (this forces the 2.x branch) +5. Go to Betas tab +6. Select version ``1.1.110`` + +Testing Your Installation +-------------------------- + +Run the test suite to verify everything is working: + +.. code-block:: bash + + # Test the gym registry + python fle/env/tests/gym_env/test_registry.py + + # List available environments + python fle/env/gym_env/example_usage.py --list + + # Run with detailed output + python fle/env/gym_env/example_usage.py --detail + +Getting Help +------------ + +If you continue to experience issues: + +1. Check the `GitHub Issues `_ +2. Join the `Discord (#factorio-learning-env) `_ +3. Review the :doc:`../project_structure` to understand the codebase layout + +Debugging Tips +-------------- + +Enable Verbose Logging +~~~~~~~~~~~~~~~~~~~~~~~ + +Set environment variables for more detailed output: + +.. code-block:: bash + + export FLE_LOG_LEVEL=DEBUG + +Check Docker Logs +~~~~~~~~~~~~~~~~~ + +View logs from Factorio containers: + +.. code-block:: bash + + # List running containers + docker ps + + # View logs for a specific container + docker logs + + # Follow logs in real-time + docker logs -f + +Verify Environment Variables +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Check that your ``.env`` file is properly loaded: + +.. code-block:: python + + import os + from dotenv import load_dotenv + + load_dotenv() + print(os.getenv('OPENAI_API_KEY')) # Should show your API key (masked) + print(os.getenv('FLE_DB_TYPE')) # Should show sqlite or postgres diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst index da4bfdd74..affbba0e0 100644 --- a/docs/sphinx/source/index.rst +++ b/docs/sphinx/source/index.rst @@ -1,7 +1,35 @@ -Welcome to Factorio Learning Environment's documentation! -================================================================ +Factorio Learning Environment +============================== -An open source framework for developing and evaluating LLM agents in the game of Factorio. +.. raw:: html + +

    + Leaderboard | + Paper | + Website | + Discord (#factorio-learning-env) +

    + +An open source framework for developing and evaluating LLM agents in the game of `Factorio `_. + +.. raw:: html + +

    + + +

    +

    Claude Opus 4.1 Plays Factorio

    + +Why FLE? +-------- + +We provide two settings: + +1. **Lab-play**: 24 structured tasks with fixed resources. +2. **Open-play**: An unbounded task of building the largest possible factory on a procedurally generated map. + +Our results demonstrate that models still lack strong spatial reasoning. In lab-play, we find that while LLMs +exhibit promising short-horizon skills, they are unable to operate effectively in constrained environments, reflecting limitations in error analysis. In open-play, while LLMs discover automation strategies that improve growth (e.g electric-powered drilling), they fail to achieve complex automation (e.g electronic-circuit manufacturing). .. toctree:: :maxdepth: 2 @@ -9,40 +37,36 @@ An open source framework for developing and evaluating LLM agents in the game of getting_started/installation getting_started/quickstart - getting_started/cluster + getting_started/troubleshooting .. toctree:: :maxdepth: 2 - :caption: API Reference + :caption: Environment - api/environment - api/observation - api/action - api/tools - api/modules + environment/overview + environment/gym_registry .. toctree:: :maxdepth: 2 - :caption: Customization + :caption: Tools - customization/tasks - customization/tools - customization/agents - customization/database + tools/overview + tools/core_tools + tools/custom_tools .. toctree:: :maxdepth: 2 - :caption: Examples + :caption: Advanced Topics - examples/basic_agent - examples/visual_agent - examples/multiagent + advanced/mcp + advanced/sprites + advanced/database .. toctree:: - :maxdepth: 2 - :caption: Tools + :maxdepth: 1 + :caption: Reference - tools/index + project_structure Indices and tables ================== diff --git a/docs/sphinx/source/project_structure.rst b/docs/sphinx/source/project_structure.rst new file mode 100644 index 000000000..d165cd55a --- /dev/null +++ b/docs/sphinx/source/project_structure.rst @@ -0,0 +1,317 @@ +Project Structure +================= + +This page provides an overview of the FLE codebase organization. + +Directory Layout +---------------- + +.. code-block:: text + + factorio-learning-environment/ + ├── .github/ # GitHub workflows and CI/CD + ├── .fle/ # Runtime data (saves, scenarios, trajectory logs) + ├── docs/ # Documentation and website + ├── examples/ # Example agent implementations + ├── fle/ # Main codebase + │ ├── agents/ # Agent implementations + │ ├── cluster/ # Docker orchestration and scenarios + │ ├── commons/ # Shared utilities and models + │ ├── configs/ # Configuration files + │ ├── data/ # Data files and replays + │ ├── env/ # Core environment + │ ├── eval/ # Evaluation framework + │ ├── run.py # CLI entry point + │ └── server.py # RCON server + ├── tests/ # Test suite + ├── .example.env # Environment variables template + ├── BUILD.md # Build instructions + ├── CONTRIBUTING.md # Contribution guidelines + ├── pyproject.toml # Python project config + └── uv.lock # Dependency lock file + +Core Directories +---------------- + +fle/agents/ +~~~~~~~~~~~ + +Agent implementations including: + +- ``BasicAgent``: Simple text-based agent +- ``VisualAgent``: Vision-enabled agent +- ``MultiAgent``: Multi-agent coordination +- Base classes and interfaces + +**Key Files:** + +- ``agent_abc.py``: Abstract base class for agents +- ``models.py``: Agent configuration models + +fle/cluster/ +~~~~~~~~~~~~ + +Docker orchestration and scenario management: + +- Factorio server containers +- Docker Compose configurations +- Scenario definitions +- Server management utilities + +**Key Files:** + +- ``docker-compose.yml``: Container orchestration +- ``scenarios/``: Pre-built game scenarios + +fle/commons/ +~~~~~~~~~~~~ + +Shared utilities and models used across the codebase: + +- Data models (Position, Entity, Inventory, etc.) +- Utility functions +- Constants and enumerations +- Database client interface + +**Key Files:** + +- ``models.py``: Core data models +- ``db_client.py``: Database abstraction layer +- ``utils.py``: Helper functions + +fle/env/ +~~~~~~~~ + +Core environment implementation: + +.. code-block:: text + + env/ + ├── gym_env/ # OpenAI Gym interface + │ ├── action.py # Action definitions + │ ├── observation.py # Observation space + │ ├── registry.py # Environment registry + │ └── gym_env.py # Main gym environment + ├── tools/ # Agent-accessible tools + │ ├── agent/ # Agent tools + │ └── admin/ # Admin tools + ├── protocols/ # Communication protocols + │ ├── _mcp/ # Model Context Protocol + │ └── a2a/ # Agent-to-Agent protocol + ├── exceptions/ # Custom exceptions + ├── entities.py # Entity definitions + ├── instance.py # Game instance management + └── namespace.py # Python namespace management + +**Key Components:** + +- **gym_env/**: Standard gym interface for RL frameworks +- **tools/**: All agent-callable functions +- **protocols/**: Communication layer implementations +- **exceptions/**: Typed exceptions for error handling + +fle/eval/ +~~~~~~~~~ + +Evaluation framework for running experiments: + +.. code-block:: text + + eval/ + ├── algorithms/ # Search algorithms + │ ├── beam_search.py # Beam search implementation + │ ├── mcts.py # Monte Carlo Tree Search + │ └── independent.py # Independent evaluation + ├── analysis/ # Analysis tools + ├── tasks/ # Task definitions + │ └── task_definitions/ # JSON task configs + │ ├── lab_play/ # Structured tasks + │ └── open_play/ # Open-ended tasks + ├── infra/ # Infrastructure + │ ├── setup_api_keys.py # API key configuration + │ └── cluster_manager.py # Cluster management + └── evaluator.py # Main evaluation logic + +**Key Files:** + +- ``evaluator.py``: Runs agent evaluations +- ``tasks/task_definitions/``: Task configurations +- ``algorithms/``: Search and optimization algorithms + +tests/ +~~~~~~ + +Comprehensive test suite: + +.. code-block:: text + + tests/ + ├── actions/ # Tool tests + ├── benchmarks/ # Performance benchmarks + ├── functional/ # End-to-end tests + ├── gym_env/ # Gym interface tests + └── integration/ # Integration tests + +Configuration Files +------------------- + +pyproject.toml +~~~~~~~~~~~~~~ + +Python project configuration: + +- Package metadata +- Dependencies +- Optional feature groups (``[eval]``, ``[mcp]``, ``[psql]``) +- Build system configuration + +.env +~~~~ + +Environment variables (created from ``.example.env``): + +- API keys (OpenAI, Anthropic, etc.) +- Database configuration +- Cluster settings +- Feature flags + +Key Modules +----------- + +fle/run.py +~~~~~~~~~~ + +CLI entry point providing commands: + +- ``fle cluster start``: Start Factorio cluster +- ``fle eval``: Run evaluations +- ``fle sprites``: Manage sprites +- ``fle init``: Initialize configuration + +fle/server.py +~~~~~~~~~~~~~ + +RCON server for communicating with Factorio instances: + +- Handles tool invocations +- Manages game state +- Executes Lua commands + +fle/env/instance.py +~~~~~~~~~~~~~~~~~~~ + +Manages individual Factorio game instances: + +- Instance lifecycle +- State management +- Connection handling +- Resource cleanup + +fle/env/namespace.py +~~~~~~~~~~~~~~~~~~~~ + +Python namespace management for agent code: + +- Variable storage +- Function definitions +- Class definitions +- Namespace isolation + +Data Flow +--------- + +.. code-block:: text + + Agent + │ + ├─> Synthesizes Python Code + │ + ▼ + Environment (gym_env) + │ + ├─> Interprets Code + │ + ├─> Executes Tools (client.py) + │ │ + │ ├─> Calls server.py (RCON) + │ │ │ + │ │ ├─> Executes server.lua + │ │ │ │ + │ │ │ └─> Factorio Engine + │ │ │ + │ │ └─> Returns Results + │ │ + │ └─> Returns Typed Objects + │ + ├─> Updates Namespace + │ + └─> Returns Observation + │ + └─> Agent + +Important Files +--------------- + +Core Environment +~~~~~~~~~~~~~~~~ + +- ``fle/env/gym_env/gym_env.py``: Main gym environment +- ``fle/env/instance.py``: Game instance management +- ``fle/env/namespace.py``: Python namespace handling + +Tools System +~~~~~~~~~~~~ + +- ``fle/env/tools/tool.py``: Base tool class +- ``fle/env/tools/agent/**/client.py``: Tool implementations +- ``fle/server.py``: Server-side execution + +Registry & Tasks +~~~~~~~~~~~~~~~~ + +- ``fle/env/gym_env/registry.py``: Environment registry +- ``fle/eval/tasks/task_definitions/``: Task JSON files +- ``fle/eval/evaluator.py``: Evaluation orchestration + +Development Workflow +-------------------- + +Adding a New Tool +~~~~~~~~~~~~~~~~~ + +1. Create directory: ``fle/env/tools/agent/my_tool/`` +2. Add ``client.py``, ``server.lua``, ``agent.md`` +3. Create test: ``tests/actions/test_my_tool.py`` +4. Tool is automatically discovered + +Adding a New Task +~~~~~~~~~~~~~~~~~ + +1. Create JSON file: ``fle/eval/tasks/task_definitions/my_task.json`` +2. Task is automatically registered +3. Access via: ``gym.make("my_task")`` + +Running Tests +~~~~~~~~~~~~~ + +.. code-block:: bash + + # Run all tests + pytest tests/ + + # Run specific test file + pytest tests/actions/test_place_entity.py + + # Run with coverage + pytest --cov=fle tests/ + +Building Documentation +~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: bash + + cd docs/sphinx + make html + + # View docs + open build/html/index.html \ No newline at end of file diff --git a/docs/sphinx/source/tools/core_tools.rst b/docs/sphinx/source/tools/core_tools.rst new file mode 100644 index 000000000..e17d58675 --- /dev/null +++ b/docs/sphinx/source/tools/core_tools.rst @@ -0,0 +1,563 @@ +Core Tools Reference +==================== + +This page provides a comprehensive reference for all core tools available to agents. + +Inventory Management +-------------------- + +inspect_inventory +~~~~~~~~~~~~~~~~~ + +Checks contents of player or entity inventories. + +**Features:** + +- Supports various inventory types (chests, furnaces, etc.) +- Returns ``Inventory`` object with count methods +- Can query specific items + +**Example:** + +.. code-block:: python + + # Check player inventory + inventory = inspect_inventory() + print(f"Iron plates: {inventory['iron-plate']}") + + # Check entity inventory + chest = get_entity(Prototype.IronChest, position) + inventory = inspect_inventory(chest) + +insert_item +~~~~~~~~~~~ + +Places items from player inventory into entities. + +**Features:** + +- Works with machines, chests, belts +- Validates item compatibility +- Returns updated entity + +**Example:** + +.. code-block:: python + + # Insert coal into a furnace + furnace = get_entity(Prototype.StoneFurnace, furnace_position) + insert_item(Prototype.Coal, furnace, quantity=10) + +extract_item +~~~~~~~~~~~~ + +Removes items from entity inventories. + +**Features:** + +- Supports all inventory types +- Auto-transfers to player inventory +- Returns quantity extracted + +**Example:** + +.. code-block:: python + + # Extract iron plates from a chest + chest = get_entity(Prototype.IronChest, chest_position) + extracted = extract_item(Prototype.IronPlate, chest, quantity=50) + print(f"Extracted {extracted} iron plates") + +Entity Manipulation +------------------- + +place_entity +~~~~~~~~~~~~ + +Places entities in the world. + +**Features:** + +- Handles direction and positioning +- Validates placement requirements +- Returns placed ``Entity`` object + +**Example:** + +.. code-block:: python + + # Place a mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=Position(x=10, y=20), + direction=Direction.NORTH + ) + +place_entity_next_to +~~~~~~~~~~~~~~~~~~~~ + +Places entities relative to others. + +**Features:** + +- Automatic spacing/alignment +- Handles entity dimensions +- Supports all entity types + +**Example:** + +.. code-block:: python + + # Place a chest next to a drill + chest = place_entity_next_to( + entity=Prototype.IronChest, + reference_position=drill.drop_position, + direction=Direction.SOUTH + ) + +pickup_entity +~~~~~~~~~~~~~ + +Removes entities from the world. + +**Features:** + +- Returns items to inventory +- Handles entity groups +- Supports all placeable items + +**Example:** + +.. code-block:: python + + # Pick up a mining drill + drill = get_entity(Prototype.BurnerMiningDrill, position) + pickup_entity(drill) + +rotate_entity +~~~~~~~~~~~~~ + +Changes entity orientation. + +**Features:** + +- Affects entity behavior (e.g., inserter direction) +- Validates rotation rules +- Returns updated entity + +**Example:** + +.. code-block:: python + + # Rotate an inserter to face a different direction + inserter = get_entity(Prototype.Inserter, position) + rotate_entity(inserter, Direction.EAST) + +get_entity +~~~~~~~~~~ + +Retrieves entity objects at positions. + +**Features:** + +- Updates stale references +- Returns typed ``Entity`` objects +- Handles all entity types + +**Example:** + +.. code-block:: python + + # Get a chest at a specific position + chest = get_entity(Prototype.IronChest, Position(x=10, y=20)) + +get_entities +~~~~~~~~~~~~ + +Finds multiple entities in an area. + +**Features:** + +- Supports filtering by type +- Returns ``List[Entity]`` +- Groups connected entities + +**Example:** + +.. code-block:: python + + # Get all entities + entities = get_entities() + + # Get entities by type + drills = get_entities(prototype=Prototype.BurnerMiningDrill) + +Resource Operations +------------------- + +nearest +~~~~~~~ + +Locates closest resources/entities. + +**Features:** + +- Finds ores, water, trees +- Returns ``Position`` object +- 500 tile search radius + +**Example:** + +.. code-block:: python + + # Find nearest iron ore + iron_position = nearest(Resource.IronOre) + + # Find nearest water + water_position = nearest(Resource.Water) + +get_resource_patch +~~~~~~~~~~~~~~~~~~ + +Analyzes resource deposits. + +**Features:** + +- Returns size and boundaries +- Supports all resource types +- Includes total resource amount + +**Example:** + +.. code-block:: python + + # Get information about an iron ore patch + patch = get_resource_patch(Resource.IronOre, position) + print(f"Patch size: {patch.size}") + print(f"Total iron: {patch.amount}") + +harvest_resource +~~~~~~~~~~~~~~~~ + +Gathers resources from the world. + +**Features:** + +- Supports ores, trees, rocks +- Auto-collects to inventory +- Returns amount harvested + +**Example:** + +.. code-block:: python + + # Harvest iron ore manually + iron_position = nearest(Resource.IronOre) + harvested = harvest_resource(iron_position, quantity=50) + +Connections +----------- + +connect_entities +~~~~~~~~~~~~~~~~ + +Creates connections between entities. + +**Features:** + +- Handles belts, pipes, power +- Automatic pathfinding +- Returns connection group + +**Example:** + +.. code-block:: python + + # Connect a drill to a chest with a transport belt + connection = connect_entities( + drill.drop_position, + chest.position, + connection_type=Prototype.TransportBelt + ) + +get_connection_amount +~~~~~~~~~~~~~~~~~~~~~ + +Calculates required connection items. + +**Features:** + +- Pre-planning tool +- Works with all connection types +- Returns item count needed + +**Example:** + +.. code-block:: python + + # Calculate how many belts are needed + amount = get_connection_amount( + start_position=drill.drop_position, + end_position=chest.position, + connection_type=Prototype.TransportBelt + ) + print(f"Need {amount} belts") + +Crafting & Research +------------------- + +craft_item +~~~~~~~~~~ + +Creates items from components. + +**Features:** + +- Handles recursive crafting +- Validates technology requirements +- Returns crafted amount + +**Example:** + +.. code-block:: python + + # Craft 10 iron gear wheels + crafted = craft_item(Prototype.IronGearWheel, quantity=10) + +get_prototype_recipe +~~~~~~~~~~~~~~~~~~~~ + +Retrieves crafting requirements. + +**Features:** + +- Shows ingredients/products +- Includes crafting time +- Returns ``Recipe`` object + +**Example:** + +.. code-block:: python + + # Get recipe for electronic circuits + recipe = get_prototype_recipe(Prototype.ElectronicCircuit) + print(f"Ingredients: {recipe.ingredients}") + print(f"Crafting time: {recipe.energy}") + +set_entity_recipe +~~~~~~~~~~~~~~~~~ + +Configures machine crafting recipes. + +**Features:** + +- Works with assemblers/chemical plants +- Validates recipe requirements +- Returns updated entity + +**Example:** + +.. code-block:: python + + # Set an assembling machine to craft iron gear wheels + assembler = get_entity(Prototype.AssemblingMachine1, position) + set_entity_recipe(assembler, Prototype.IronGearWheel) + +set_research +~~~~~~~~~~~~ + +Initiates technology research. + +**Features:** + +- Validates prerequisites +- Returns required ingredients +- Handles research queue + +**Example:** + +.. code-block:: python + + # Start researching automation + research = set_research(Technology.Automation) + +get_research_progress +~~~~~~~~~~~~~~~~~~~~~ + +Monitors research status. + +**Features:** + +- Shows remaining requirements +- Tracks progress percentage +- Returns ingredient list + +**Example:** + +.. code-block:: python + + # Check research progress + progress = get_research_progress() + print(f"Current research: {progress.name}") + print(f"Progress: {progress.level}%") + +Movement & Utility +------------------ + +move_to +~~~~~~~ + +Moves player to position. + +**Features:** + +- Pathfinds around obstacles +- Can place items while moving +- Returns final position + +**Example:** + +.. code-block:: python + + # Move to iron ore patch + iron_position = nearest(Resource.IronOre) + move_to(iron_position) + +nearest_buildable +~~~~~~~~~~~~~~~~~ + +Finds valid building locations. + +**Features:** + +- Respects entity dimensions +- Handles resource requirements +- Returns buildable position + +**Example:** + +.. code-block:: python + + # Find a buildable position near iron ore + buildable_pos = nearest_buildable( + resource=Resource.IronOre, + entity=Prototype.BurnerMiningDrill + ) + +sleep +~~~~~ + +Pauses execution. + +**Features:** + +- Waits for actions to complete +- Adapts to game speed +- Maximum 15 second duration + +**Example:** + +.. code-block:: python + + # Wait for 5 seconds for production to occur + sleep(5) + + # Check drill status after waiting + drill = get_entity(Prototype.BurnerMiningDrill, drill_position) + print(f"Drill status: {drill.status}") + +launch_rocket +~~~~~~~~~~~~~ + +Controls rocket silo launches. + +**Features:** + +- Validates launch requirements +- Handles launch sequence +- Returns updated silo state + +**Example:** + +.. code-block:: python + + # Launch a rocket + silo = get_entity(Prototype.RocketSilo, silo_position) + launch_rocket(silo) + +Output +------ + +print +~~~~~ + +Outputs debug information to stdout. + +**Features:** + +- Supports various object types +- Useful for monitoring state +- Returns formatted string + +**Example:** + +.. code-block:: python + + # Print entity information + drill = get_entity(Prototype.BurnerMiningDrill, position) + print(f"Drill: {drill}") + print(f"Status: {drill.status}") + print(f"Position: {drill.position}") + + # Print inventory + inventory = inspect_inventory() + print(f"Inventory: {inventory}") + +Best Practices +-------------- + +1. **Store Results**: Save tool results as variables for later reference + + .. code-block:: python + + my_drill = place_entity(...) + # Later... + print(my_drill.status) + +2. **Check Status**: Verify entity status after operations + + .. code-block:: python + + drill = place_entity(...) + sleep(5) + assert drill.status == EntityStatus.WORKING + +3. **Handle Errors**: Use try-except for error handling + + .. code-block:: python + + try: + drill = place_entity(...) + except InvalidEntityPlacementException as e: + print(f"Placement failed: {e}") + +4. **Print for Debugging**: Use ``print()`` to observe state + + .. code-block:: python + + print(f"Entities: {get_entities()}") + print(f"Inventory: {inspect_inventory()}") + +5. **Wait for Actions**: Use ``sleep()`` to allow time for completion + + .. code-block:: python + + place_entity(...) + sleep(10) # Wait for production + +Next Steps +---------- + +- Learn how to :doc:`custom_tools` for specialized functionality +- Review :doc:`overview` for architectural details +- See :doc:`../getting_started/quickstart` for usage examples diff --git a/docs/sphinx/source/tools/custom_tools.rst b/docs/sphinx/source/tools/custom_tools.rst new file mode 100644 index 000000000..865712cdc --- /dev/null +++ b/docs/sphinx/source/tools/custom_tools.rst @@ -0,0 +1,454 @@ +Creating Custom Tools +===================== + +This guide explains how to create custom tools for FLE to extend agent capabilities with specialized functionality. + +Overview +-------- + +A custom tool requires three components: + +1. **agent.md**: Documentation for the agent +2. **client.py**: Python interface +3. **server.lua**: Lua implementation + +Tool Structure +-------------- + +Tools live in ``fle/env/tools/``: + +.. code-block:: text + + fle/env/tools/ + ├── admin/ # Non-agent accessible tools + └── agent/ # Agent-accessible tools + └── my_tool/ # Your custom tool + ├── agent.md + ├── client.py + └── server.lua + +Step-by-Step Guide +------------------ + +Step 1: Create Tool Directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create a new directory in ``fle/env/tools/agent/``: + +.. code-block:: bash + + mkdir fle/env/tools/agent/my_tool + +Step 2: Create client.py +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create ``client.py`` with a class inheriting from ``Tool``: + +.. code-block:: python + + from typing import Optional + from fle.env.tools.tool import Tool + from fle.env.entities import Entity + from fle.env.models import Position + + class MyTool(Tool): + """ + Brief description of what your tool does. + """ + + def __call__(self, + entity: Entity, + target_position: Position, + quantity: Optional[int] = None) -> dict: + """ + Detailed description of the tool's functionality. + + Args: + entity: The entity to operate on + target_position: Where to perform the action + quantity: Optional quantity parameter + + Returns: + Dictionary containing result information + + Raises: + InvalidParameterException: If parameters are invalid + EntityNotFoundException: If entity doesn't exist + """ + # Call server-side implementation + result = self.execute( + entity=entity.name, + position=target_position.to_dict(), + quantity=quantity + ) + + return result + +**Key Requirements:** + +- Inherit from ``Tool`` +- Implement ``__call__`` method +- Use type annotations +- Call ``self.execute()`` to invoke server-side logic +- Document parameters, return values, and exceptions + +Step 3: Create server.lua +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create ``server.lua`` with the game logic: + +.. code-block:: lua + + -- Register the tool action + global.actions.my_tool = function(params) + -- Extract parameters + local entity_name = params.entity + local position = params.position + local quantity = params.quantity or 1 + + -- Validate parameters + if not entity_name or not position then + return { + success = false, + error = "Missing required parameters" + } + end + + -- Find the entity + local entity = game.surfaces[1].find_entity(entity_name, position) + if not entity then + return { + success = false, + error = "Entity not found at position" + } + end + + -- Perform the action using Factorio API + local result = entity.some_action(quantity) + + -- Return serialized result + return { + success = true, + entity = serialize_entity(entity), + result = result + } + end + +**Key Requirements:** + +- Register function in ``global.actions`` +- Validate all parameters +- Use `Factorio API `_ +- Return a serializable table +- Include error handling + +Step 4: Create agent.md +~~~~~~~~~~~~~~~~~~~~~~~~ + +Create ``agent.md`` with agent-facing documentation: + +.. code-block:: markdown + + # My Tool + + ## Description + + Brief description of what the tool does and when to use it. + + ## Usage + + ```python + result = my_tool( + entity=my_entity, + target_position=Position(x=10, y=20), + quantity=5 + ) + ``` + + ## Parameters + + - `entity` (Entity): The entity to operate on + - `target_position` (Position): Where to perform the action + - `quantity` (int, optional): How many items to process. Defaults to 1. + + ## Returns + + Dictionary containing: + - `success` (bool): Whether the operation succeeded + - `entity` (Entity): Updated entity object + - `result`: Operation-specific result data + + ## Best Practices + + 1. Always check entity status before calling + 2. Use reasonable quantity values + 3. Verify results with assertions + + ## Common Pitfalls + + - Entity must exist at the specified position + - Target position must be valid + - Quantity cannot exceed inventory limits + + ## Examples + + ### Basic Usage + + ```python + entity = get_entity(Prototype.Chest, Position(x=0, y=0)) + result = my_tool(entity, Position(x=5, y=5), quantity=10) + assert result['success'] + ``` + + ### Error Handling + + ```python + try: + result = my_tool(entity, position) + except InvalidParameterException as e: + print(f"Invalid parameters: {e}") + ``` + +Step 5: Test Your Tool +~~~~~~~~~~~~~~~~~~~~~~~ + +Create a test in ``fle/env/tests/actions/``: + +.. code-block:: python + + import pytest + from fle.env.gym_env import FactorioGymEnv + from fle.env.models import Position + + def test_my_tool(): + env = FactorioGymEnv() + obs = env.reset() + + # Setup test scenario + code = """ + entity = place_entity( + Prototype.Chest, + Position(x=0, y=0), + Direction.NORTH + ) + + # Test your tool + result = my_tool( + entity=entity, + target_position=Position(x=5, y=5), + quantity=10 + ) + + print(result) + assert result['success'] + """ + + action = Action(agent_idx=0, code=code) + obs, reward, done, truncated, info = env.step(action) + + # Verify results + assert "success" in obs['raw_text'] + env.close() + +Complete Example +---------------- + +Here's a complete example of a tool that transfers items between two chests: + +**client.py:** + +.. code-block:: python + + from typing import Optional + from fle.env.tools.tool import Tool + from fle.env.entities import Entity + + class TransferItems(Tool): + """Transfers items between two entities.""" + + def __call__(self, + source: Entity, + destination: Entity, + item: str, + quantity: int) -> dict: + """ + Transfer items from source to destination. + + Args: + source: Entity to take items from + destination: Entity to place items into + item: Item prototype name + quantity: Number of items to transfer + + Returns: + Dictionary with transfer results + + Raises: + InsufficientItemsException: Not enough items in source + InventoryFullException: Destination inventory is full + """ + result = self.execute( + source=source.name, + source_position=source.position.to_dict(), + destination=destination.name, + destination_position=destination.position.to_dict(), + item=item, + quantity=quantity + ) + + return result + +**server.lua:** + +.. code-block:: lua + + global.actions.transfer_items = function(params) + local source = game.surfaces[1].find_entity( + params.source, + params.source_position + ) + local destination = game.surfaces[1].find_entity( + params.destination, + params.destination_position + ) + + if not source or not destination then + return {success = false, error = "Entity not found"} + end + + -- Get source inventory + local source_inv = source.get_inventory(defines.inventory.chest) + if not source_inv then + return {success = false, error = "No source inventory"} + end + + -- Check if enough items + local available = source_inv.get_item_count(params.item) + if available < params.quantity then + return { + success = false, + error = "Insufficient items", + available = available + } + end + + -- Transfer items + local removed = source_inv.remove({ + name = params.item, + count = params.quantity + }) + + local dest_inv = destination.get_inventory(defines.inventory.chest) + local inserted = dest_inv.insert({ + name = params.item, + count = removed + }) + + -- Return any excess + if inserted < removed then + source_inv.insert({ + name = params.item, + count = removed - inserted + }) + end + + return { + success = true, + transferred = inserted, + source = serialize_entity(source), + destination = serialize_entity(destination) + } + end + +**agent.md:** + +.. code-block:: markdown + + # Transfer Items + + Transfer items between two entities' inventories. + + ## Usage + + ```python + source_chest = get_entity(Prototype.IronChest, Position(x=0, y=0)) + dest_chest = get_entity(Prototype.IronChest, Position(x=5, y=5)) + + result = transfer_items( + source=source_chest, + destination=dest_chest, + item='iron-plate', + quantity=50 + ) + ``` + + ## Best Practices + + 1. Check source has enough items before transferring + 2. Verify destination has space + 3. Handle partial transfers gracefully + +Automatic Registration +---------------------- + +Once your tool is created, it will be automatically: + +1. Discovered by the environment +2. Available to agents in the Python namespace +3. Documented in agent context with the ``agent.md`` content + +No additional registration steps are needed! + +Tips & Best Practices +---------------------- + +1. **Keep It Simple**: Tools should do one thing well +2. **Validate Early**: Check parameters in both client and server +3. **Document Thoroughly**: Agents rely on good documentation +4. **Handle Errors**: Provide clear error messages +5. **Test Extensively**: Create comprehensive test cases +6. **Use Type Hints**: Make the interface clear with Python type annotations +7. **Serialize Carefully**: Ensure all return values are JSON-serializable + +Common Patterns +--------------- + +Querying Entity State +~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: lua + + local entity = game.surfaces[1].find_entity(name, position) + return serialize_entity(entity) + +Modifying Inventory +~~~~~~~~~~~~~~~~~~~ + +.. code-block:: lua + + local inventory = entity.get_inventory(defines.inventory.chest) + inventory.insert({name = item, count = quantity}) + +Moving Entities +~~~~~~~~~~~~~~~ + +.. code-block:: lua + + local success = entity.teleport(new_position) + +Checking Validity +~~~~~~~~~~~~~~~~~ + +.. code-block:: lua + + if not entity.valid then + return {success = false, error = "Entity no longer exists"} + end + +Next Steps +---------- + +- Review :doc:`core_tools` for implementation patterns +- See :doc:`overview` for architecture details +- Check the `Factorio Lua API `_ +- Join the `Discord `_ for help diff --git a/docs/sphinx/source/tools/extract_item.rst b/docs/sphinx/source/tools/extract_item.rst deleted file mode 100644 index 9e5d0d21f..000000000 --- a/docs/sphinx/source/tools/extract_item.rst +++ /dev/null @@ -1,98 +0,0 @@ -extract_item -============ - -Removes items from entity inventories. - -Overview --------- - -The `extract_item` tool allows agents to remove items from entity inventories and transfer them to the player's inventory. - -Parameters ----------- - -**entity** (Entity) - The entity to extract items from. - -**item** (str) - The name of the item to extract. - -**count** (int, optional) - The number of items to extract. Defaults to 1. - -Returns -------- - -Dictionary containing: - -- **success** (bool): Whether the extraction succeeded -- **extracted_count** (int): Number of items actually extracted -- **entity** (Entity): The updated entity -- **error** (str): Error message (if failed) - -Examples --------- - -**Basic Usage** - .. code-block:: python - - # Extract iron ore from a chest - result = extract_item( - entity=chest, - item='iron-ore', - count=10 - ) - - if result.get('success'): - print(f"Extracted {result.get('extracted_count')} iron ore") - else: - print(f"Error: {result.get('error')}") - -**Extract All Items** - .. code-block:: python - - # Extract all items from an entity - inventory = inspect_inventory(entity=chest) - for item, count in inventory.items(): - if count > 0: - result = extract_item( - entity=chest, - item=item, - count=count - ) - - if result.get('success'): - print(f"Extracted {result.get('extracted_count')} {item}") - -Best Practices --------------- - -1. **Check Entity Contents**: Verify the entity has the items to extract -2. **Handle Partial Extractions**: Account for cases where not all items can be extracted -3. **Monitor Player Inventory**: Track player inventory changes -4. **Use Appropriate Counts**: Don't extract more items than available - -Failure Modes -------------- - -**Invalid Entity** - - **Error**: "Entity does not support item extraction" - - **Cause**: Entity type doesn't support inventory - - **Solution**: Check entity type before extraction - -**Item Not Available** - - **Error**: "Item not available in entity inventory" - - **Cause**: Entity doesn't have the required item - - **Solution**: Check entity inventory before extraction - -**Player Inventory Full** - - **Error**: "Player inventory is full" - - **Cause**: Player cannot accept more items - - **Solution**: Clear player inventory or use storage - -Related Tools -------------- - -- :doc:`inspect_inventory` - Check inventory contents -- :doc:`insert_item` - Add items to entities -- :doc:`get_entities` - Find entities with storage diff --git a/docs/sphinx/source/tools/index.rst b/docs/sphinx/source/tools/index.rst deleted file mode 100644 index 3d3e1edc0..000000000 --- a/docs/sphinx/source/tools/index.rst +++ /dev/null @@ -1,209 +0,0 @@ -Tools Documentation -=================== - -This section contains detailed documentation for all available tools in the Factorio Learning Environment. - -Tool Categories ---------------- - -**Inventory Management** - Tools for managing inventories and items - -**Entity Management** - Tools for placing, removing, and managing entities - -**Entity Queries** - Tools for finding and inspecting entities - -**Resource Management** - Tools for resource collection and management - -**Connection Management** - Tools for creating connections between entities - -**Crafting and Research** - Tools for crafting items and managing research - -**Movement and Control** - Tools for player movement and game control - -**Debugging and Output** - Tools for debugging and output - -Core Tools ----------- - -Inventory Management -~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/inspect_inventory - tools/insert_item - tools/extract_item - -Entity Management -~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/place_entity - tools/place_entity_next_to - tools/pickup_entity - tools/rotate_entity - -Entity Queries -~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/get_entity - tools/get_entities - tools/nearest - tools/nearest_buildable - -Resource Management -~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/get_resource_patch - tools/harvest_resource - -Connection Management -~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/connect_entities - tools/get_connection_amount - -Crafting and Research -~~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/set_entity_recipe - tools/get_prototype_recipe - tools/craft_item - tools/set_research - tools/get_research_progress - -Movement and Control -~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/move_to - tools/sleep - tools/launch_rocket - -Debugging and Output -~~~~~~~~~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - tools/print - -Tool Usage Patterns -------------------- - -**Basic Usage** - Most tools follow a simple pattern: - - .. code-block:: python - - # Get information - result = tool_name(parameters) - - # Check result - if result.get('success'): - # Use the result - data = result.get('data') - else: - # Handle error - error = result.get('error') - -**Error Handling** - All tools return structured results with error information: - - .. code-block:: python - - result = place_entity( - entity=Prototype.MiningDrill, - position=Position(10, 20), - direction=Direction.NORTH - ) - - if result.get('success'): - entity = result.get('entity') - print(f"Placed entity: {entity}") - else: - error = result.get('error') - print(f"Error: {error}") - -**Chaining Operations** - Tools can be chained together for complex operations: - - .. code-block:: python - - # Place a mining drill - drill = place_entity( - entity=Prototype.MiningDrill, - position=nearest(Resource.IronOre), - direction=Direction.NORTH - ) - - # Place a chest next to it - chest = place_entity_next_to( - entity=Prototype.IronChest, - reference_position=drill.drop_position, - direction=Direction.SOUTH - ) - - # Connect them - connect_entities(drill, chest) - -Best Practices --------------- - -1. **Check Results**: Always check tool return values -2. **Handle Errors**: Implement proper error handling -3. **Use Type Hints**: Leverage type information for better code -4. **Chain Operations**: Combine tools for complex tasks -5. **Monitor Performance**: Track tool usage and performance -6. **Document Usage**: Document tool usage patterns -7. **Test Thoroughly**: Test all tool combinations - -Tool Development ----------------- - -**Creating Custom Tools** - See the :doc:`customization guide <../customization/tools>` for information on creating custom tools. - -**Tool Testing** - Test tools thoroughly with various scenarios: - - - Valid inputs - - Invalid inputs - - Edge cases - - Error conditions - - Performance scenarios - -**Tool Documentation** - Document tools with: - - - Clear descriptions - - Parameter specifications - - Return value documentation - - Usage examples - - Best practices - - Failure modes diff --git a/docs/sphinx/source/tools/insert_item.rst b/docs/sphinx/source/tools/insert_item.rst deleted file mode 100644 index 324873580..000000000 --- a/docs/sphinx/source/tools/insert_item.rst +++ /dev/null @@ -1,101 +0,0 @@ -insert_item -=========== - -Places items from player inventory into entities. - -Overview --------- - -The `insert_item` tool allows agents to transfer items from their inventory into entity inventories such as chests, furnaces, and other storage containers. - -Parameters ----------- - -**entity** (Entity) - The entity to insert items into. - -**item** (str) - The name of the item to insert. - -**count** (int, optional) - The number of items to insert. Defaults to 1. - -Returns -------- - -Dictionary containing: - -- **success** (bool): Whether the insertion succeeded -- **inserted_count** (int): Number of items actually inserted -- **entity** (Entity): The updated entity -- **error** (str): Error message (if failed) - -Examples --------- - -**Basic Usage** - .. code-block:: python - - # Insert iron ore into a chest - result = insert_item( - entity=chest, - item='iron-ore', - count=10 - ) - - if result.get('success'): - print(f"Inserted {result.get('inserted_count')} iron ore") - else: - print(f"Error: {result.get('error')}") - -**Insert Multiple Items** - .. code-block:: python - - # Insert different items into a furnace - items_to_insert = [ - {'item': 'iron-ore', 'count': 50}, - {'item': 'coal', 'count': 10} - ] - - for item_data in items_to_insert: - result = insert_item( - entity=furnace, - item=item_data['item'], - count=item_data['count'] - ) - - if result.get('success'): - print(f"Inserted {result.get('inserted_count')} {item_data['item']}") - -Best Practices --------------- - -1. **Check Entity Type**: Ensure the entity supports item insertion -2. **Verify Item Compatibility**: Check that the item can be inserted into the entity -3. **Handle Partial Insertions**: Account for cases where not all items can be inserted -4. **Monitor Inventory**: Track inventory changes after insertion - -Failure Modes -------------- - -**Invalid Entity** - - **Error**: "Entity does not support item insertion" - - **Cause**: Entity type doesn't support inventory - - **Solution**: Check entity type before insertion - -**Item Not Available** - - **Error**: "Item not available in player inventory" - - **Cause**: Player doesn't have the required item - - **Solution**: Check player inventory before insertion - -**Entity Full** - - **Error**: "Entity inventory is full" - - **Cause**: Entity cannot accept more items - - **Solution**: Check entity capacity or use different entity - -Related Tools -------------- - -- :doc:`inspect_inventory` - Check inventory contents -- :doc:`extract_item` - Remove items from entities -- :doc:`get_entities` - Find entities with storage diff --git a/docs/sphinx/source/tools/inspect_inventory.rst b/docs/sphinx/source/tools/inspect_inventory.rst deleted file mode 100644 index 132a7cad0..000000000 --- a/docs/sphinx/source/tools/inspect_inventory.rst +++ /dev/null @@ -1,153 +0,0 @@ -inspect_inventory -================= - -Checks contents of player or entity inventories. - -Overview --------- - -The `inspect_inventory` tool allows agents to examine the contents of inventories. It supports various inventory types including player inventories, chests, furnaces, and other entities with storage capabilities. - -Parameters ----------- - -**entity** (Entity, optional) - The entity whose inventory to inspect. If not provided, inspects the player's inventory. - -**inventory_type** (str, optional) - The type of inventory to inspect. Options: 'player', 'entity', 'all'. - -Returns -------- - -Dictionary containing: - -- **success** (bool): Whether the inspection succeeded -- **inventory** (Inventory): The inventory contents -- **entity** (Entity): The entity whose inventory was inspected (if applicable) -- **error** (str): Error message (if failed) - -Examples --------- - -**Basic Usage** - .. code-block:: python - - # Inspect player inventory - result = inspect_inventory() - - if result.get('success'): - inventory = result.get('inventory') - print(f"Player inventory: {inventory}") - - # Check specific items - iron_ore = inventory.get('iron-ore', 0) - coal = inventory.get('coal', 0) - print(f"Iron ore: {iron_ore}, Coal: {coal}") - else: - print(f"Error: {result.get('error')}") - -**Entity Inventory** - .. code-block:: python - - # Inspect entity inventory - entities = get_entities() - for entity in entities: - if entity.name == 'iron-chest': - result = inspect_inventory(entity=entity) - - if result.get('success'): - inventory = result.get('inventory') - print(f"Chest inventory: {inventory}") - - # Check if chest is full - total_items = sum(inventory.values()) - if total_items > 0: - print(f"Chest contains {total_items} items") - break - -**Inventory Analysis** - .. code-block:: python - - # Analyze inventory contents - result = inspect_inventory() - - if result.get('success'): - inventory = result.get('inventory') - - # Count total items - total_items = sum(inventory.values()) - print(f"Total items: {total_items}") - - # List all items - for item, count in inventory.items(): - if count > 0: - print(f" {item}: {count}") - - # Check for specific resources - resources = ['iron-ore', 'copper-ore', 'coal', 'stone'] - for resource in resources: - count = inventory.get(resource, 0) - if count > 0: - print(f"Have {count} {resource}") - -**Inventory Filtering** - .. code-block:: python - - # Check for specific items - result = inspect_inventory() - - if result.get('success'): - inventory = result.get('inventory') - - # Check for mining equipment - mining_items = ['mining-drill', 'burner-mining-drill'] - for item in mining_items: - count = inventory.get(item, 0) - if count > 0: - print(f"Have {count} {item}") - - # Check for building materials - building_materials = ['iron-plate', 'copper-plate', 'stone'] - total_materials = sum(inventory.get(item, 0) for item in building_materials) - print(f"Total building materials: {total_materials}") - -Best Practices --------------- - -1. **Check Success**: Always verify the inspection succeeded -2. **Handle Empty Inventories**: Account for empty inventories -3. **Use Inventory Methods**: Leverage inventory utility methods -4. **Monitor Changes**: Track inventory changes over time -5. **Error Handling**: Implement proper error handling - -Failure Modes -------------- - -**Invalid Entity** - - **Error**: "Entity does not have an inventory" - - **Cause**: Entity type doesn't support inventory - - **Solution**: Check entity type before inspection - -**Entity Not Found** - - **Error**: "Entity not found or no longer exists" - - **Cause**: Entity was removed or doesn't exist - - **Solution**: Verify entity exists before inspection - -**Permission Denied** - - **Error**: "Permission denied to inspect inventory" - - **Cause**: Insufficient permissions - - **Solution**: Check agent permissions - -**Network Error** - - **Error**: "Network error during inventory inspection" - - **Cause**: Communication failure with game server - - **Solution**: Retry the operation - -Related Tools -------------- - -- :doc:`insert_item` - Place items into inventories -- :doc:`extract_item` - Remove items from inventories -- :doc:`get_entities` - Find entities with inventories -- :doc:`place_entity` - Place entities with storage diff --git a/docs/sphinx/source/tools/overview.rst b/docs/sphinx/source/tools/overview.rst new file mode 100644 index 000000000..235aa32db --- /dev/null +++ b/docs/sphinx/source/tools/overview.rst @@ -0,0 +1,189 @@ +Tools Overview +============== + +Agents interact with the game using *tools*, which represent a narrow API into the game. Tools are functions that agents can call to perform actions and retrieve information. + +What are Tools? +--------------- + +**Tools** are functions that: + +- Perform a game action (e.g., placing an entity, crafting an item) +- Return a typed object (e.g., ``Entity``, ``Inventory``, ``Recipe``) +- Can be stored as named variables in the Python namespace for later use + +Tools live in ``fle/env/tools/``, and are either: + +- **Admin tools**: Non-agent accessible, used for environment management +- **Agent tools**: Used by agents to interact with the game + +Tool Architecture +----------------- + +.. code-block:: text + + ┌─────────────────┐ + │ Agent │ + │ (Synthesizes │ + │ Python Code) │ + └────────┬────────┘ + │ + ┌────────▼────────────────────┐ + │ Learning Environment │ + │ ┌────────────────────┐ │ + │ │ Interpreter │ │ + │ └─────────┬──────────┘ │ + │ │ │ + │ ┌─────────▼──────────┐ │ + │ │ client.py │◄───┼─── Exceptions + │ │ (Python Interface)│ │ + │ └─────────┬──────────┘ │ + │ │ │ + │ │ Objects │ + └────────────┼─────────────────┘ + │ + │ Remote TCP Call + │ + ┌────────────▼─────────────────┐ + │ Factorio Server │ + │ ┌─────────────────────┐ │ + │ │ server.lua │ │ + │ │ (Game Logic) │ │ + │ └─────────┬───────────┘ │ + │ │ │ + │ ┌─────────▼───────────┐ │ + │ │ Factorio Engine │ │ + │ │ (Game Simulation) │ │ + │ └─────────────────────┘ │ + └──────────────────────────────┘ + +Anatomy of a Tool +----------------- + +A tool requires 3 files: + +1. **agent.md**: The agent documentation for the tool, including usage patterns, best practices, and failure modes +2. **client.py**: The client-side implementation - a Python class that can be invoked by the agent +3. **server.lua**: The server-side implementation - handles most of the logic and heavy lifting + +Tool Categories +--------------- + +Tools can be grouped into several categories: + +Inventory Management +~~~~~~~~~~~~~~~~~~~~ + +- ``inspect_inventory``: Check contents of player or entity inventories +- ``insert_item``: Place items from player inventory into entities +- ``extract_item``: Remove items from entity inventories + +Entity Manipulation +~~~~~~~~~~~~~~~~~~~ + +- ``place_entity``: Place entities in the world +- ``place_entity_next_to``: Place entities relative to others +- ``pickup_entity``: Remove entities from the world +- ``rotate_entity``: Change entity orientation +- ``get_entity``: Retrieve entity objects at positions +- ``get_entities``: Find multiple entities in an area + +Resource Operations +~~~~~~~~~~~~~~~~~~~ + +- ``nearest``: Locate closest resources/entities +- ``get_resource_patch``: Analyze resource deposits +- ``harvest_resource``: Gather resources from the world + +Connections +~~~~~~~~~~~ + +- ``connect_entities``: Create connections between entities +- ``get_connection_amount``: Calculate required connection items + +Crafting & Research +~~~~~~~~~~~~~~~~~~~ + +- ``craft_item``: Create items from components +- ``get_prototype_recipe``: Retrieve crafting requirements +- ``set_entity_recipe``: Configure machine crafting recipes +- ``set_research``: Initiate technology research +- ``get_research_progress``: Monitor research status + +Movement & Utility +~~~~~~~~~~~~~~~~~~ + +- ``move_to``: Move player to position +- ``nearest_buildable``: Find valid building locations +- ``sleep``: Pause execution +- ``launch_rocket``: Control rocket silo launches + +Output +~~~~~~ + +- ``print``: Output debug information to stdout + +Using Tools +----------- + +Tools are called like normal Python functions within agent code: + +.. code-block:: python + + # Find nearest iron ore + iron_position = nearest(Resource.IronOre) + + # Place a mining drill + drill = place_entity( + entity=Prototype.MiningDrill, + position=iron_position, + direction=Direction.NORTH + ) + + # Check the drill's status + print(f"Drill status: {drill.status}") + + # Store result for later use + my_first_drill = drill + +Return Values +------------- + +Tools return typed objects that can be: + +- **Inspected**: Access attributes like ``drill.status`` or ``inventory.items`` +- **Stored**: Save as variables for future reference +- **Printed**: Display information to stdout for observation + +Common Return Types +~~~~~~~~~~~~~~~~~~~ + +- ``Entity``: Represents a game entity (drill, chest, inserter, etc.) +- ``Inventory``: Contains items and quantities +- ``Recipe``: Describes crafting requirements +- ``Position``: X, Y coordinates +- ``ResourcePatch``: Information about resource deposits + +Error Handling +-------------- + +Tools raise typed exceptions with detailed context when: + +- Invalid parameters are provided +- Required resources are unavailable +- Game constraints are violated (e.g., invalid placement) +- Entities don't exist or have been destroyed + +Example error: + +.. code-block:: python + + InvalidEntityPlacementException: Cannot place burner-mining-drill at + Position(x=10, y=20) - location is occupied by iron-chest + +Next Steps +---------- + +- See :doc:`core_tools` for detailed documentation on each tool +- Learn how to :doc:`custom_tools` for specialized functionality +- Review the :doc:`../environment/overview` to understand the full context diff --git a/docs/sphinx/source/tools/place_entity.rst b/docs/sphinx/source/tools/place_entity.rst deleted file mode 100644 index 38162c9d1..000000000 --- a/docs/sphinx/source/tools/place_entity.rst +++ /dev/null @@ -1,134 +0,0 @@ -place_entity -============ - -Places entities in the world at specified positions. - -Overview --------- - -The `place_entity` tool allows agents to place various entities in the game world. It handles placement validation, direction setting, and returns information about the placed entity. - -Parameters ----------- - -**entity** (Prototype) - The type of entity to place. Must be a valid Prototype enum value. - -**position** (Position) - The position where to place the entity. Must be a valid Position object. - -**direction** (Direction, optional) - The direction to orient the entity. Defaults to Direction.NORTH. - -Returns -------- - -Dictionary containing: - -- **success** (bool): Whether the placement succeeded -- **entity** (Entity): The placed entity object (if successful) -- **error** (str): Error message (if failed) - -Examples --------- - -**Basic Usage** - .. code-block:: python - - # Place a mining drill - result = place_entity( - entity=Prototype.MiningDrill, - position=Position(10, 20), - direction=Direction.NORTH - ) - - if result.get('success'): - drill = result.get('entity') - print(f"Placed mining drill at {drill.position}") - else: - print(f"Error: {result.get('error')}") - -**With Resource Location** - .. code-block:: python - - # Find iron ore and place mining drill - iron_pos = nearest(Resource.IronOre) - if iron_pos: - result = place_entity( - entity=Prototype.MiningDrill, - position=iron_pos, - direction=Direction.NORTH - ) - - if result.get('success'): - drill = result.get('entity') - print(f"Placed mining drill on iron ore at {drill.position}") - -**Direction Examples** - .. code-block:: python - - # Place entities in different directions - drill_north = place_entity( - entity=Prototype.MiningDrill, - position=Position(0, 0), - direction=Direction.NORTH - ) - - drill_south = place_entity( - entity=Prototype.MiningDrill, - position=Position(10, 0), - direction=Direction.SOUTH - ) - - drill_east = place_entity( - entity=Prototype.MiningDrill, - position=Position(20, 0), - direction=Direction.EAST - ) - - drill_west = place_entity( - entity=Prototype.MiningDrill, - position=Position(30, 0), - direction=Direction.WEST - ) - -Best Practices --------------- - -1. **Check Position Validity**: Ensure the position is valid for the entity type -2. **Handle Errors**: Always check the success flag and handle errors -3. **Use Appropriate Directions**: Choose directions that make sense for the entity -4. **Validate Resources**: Ensure required resources are available -5. **Monitor Placement**: Check that entities are placed correctly - -Failure Modes -------------- - -**Invalid Entity Type** - - **Error**: "Invalid entity type 'invalid'. Expected Prototype enum value." - - **Cause**: Using an invalid entity type - - **Solution**: Use valid Prototype enum values - -**Invalid Position** - - **Error**: "Position (x, y) is not valid for entity type" - - **Cause**: Position conflicts with existing entities or terrain - - **Solution**: Choose a different position or clear the area - -**Insufficient Resources** - - **Error**: "Insufficient resources to place entity" - - **Cause**: Not enough items in inventory - - **Solution**: Ensure required items are available - -**Invalid Direction** - - **Error**: "Invalid direction for entity type" - - **Cause**: Direction not supported by entity type - - **Solution**: Use supported directions for the entity - -Related Tools -------------- - -- :doc:`place_entity_next_to` - Place entities relative to others -- :doc:`pickup_entity` - Remove entities from the world -- :doc:`rotate_entity` - Change entity orientation -- :doc:`nearest` - Find nearest resources or entities -- :doc:`nearest_buildable` - Find valid building locations diff --git a/pyproject.toml b/pyproject.toml index 1e2da2fb7..de73dd357 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,9 +44,6 @@ dependencies = [ "a2a-sdk", # send_message tool + multiagent, "huggingface-hub>=0.35.3", "memoization>=0.4.0", - "sphinx>=8.1.3", - "sphinx-rtd-theme>=3.0.2", - "sphinx-autodoc-typehints>=3.0.1", ] [project.optional-dependencies]