Metadata-Version: 2.4
Name: factorio-learning-environment
Version: 0.4.0
Summary: Factorio Learning Environment
Project-URL: homepage, https://jackhopkins.github.io/factorio-learning-environment/
Project-URL: leaderboard, https://jackhopkins.github.io/factorio-learning-environment/leaderboard/
Author-email: Jack Hopkins <noreply@github.com>, Mart Bakler <noreply@github.com>, Neel Kant <contact@neelkant.io>, Kian Kyars <kiankyars@gmail.com>
License: MIT
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Requires-Dist: a2a-sdk
Requires-Dist: aiohttp>=3.8.0
Requires-Dist: anthropic>=0.69.0
Requires-Dist: black>=25.1.0
Requires-Dist: construct>=2.10.70
Requires-Dist: docker>=7.1.0
Requires-Dist: factorio-rcon-py==1.2.1
Requires-Dist: gym
Requires-Dist: hf>=0.0.14
Requires-Dist: huggingface-hub>=0.35.3
Requires-Dist: inspect-ai>=0.3.139
Requires-Dist: jinja2>=3.1.6
Requires-Dist: lupa>=2.4
Requires-Dist: matplotlib>=3.10.7
Requires-Dist: mcp[cli]>=1.11.0
Requires-Dist: memoization>=0.4.0
Requires-Dist: numpy>=2.2.3
Requires-Dist: openai>=2.0.0
Requires-Dist: pillow>=11.1.0
Requires-Dist: psycopg2-binary>=2.9.10
Requires-Dist: pydantic>=2.10.6
Requires-Dist: pytest>=8.4.1
Requires-Dist: python-dotenv>=1.0.1
Requires-Dist: slpp>=1.2.3
Requires-Dist: tenacity>=9.0.0
Requires-Dist: tomli
Requires-Dist: uvicorn>=0.15.0
Provides-Extra: agents
Requires-Dist: anthropic>=0.49.0; extra == 'agents'
Requires-Dist: openai>=1.66.3; extra == 'agents'
Provides-Extra: all
Requires-Dist: boto3>=1.26.0; extra == 'all'
Requires-Dist: docker>=6.0.0; extra == 'all'
Requires-Dist: scikit-image>=0.25.2; extra == 'all'
Provides-Extra: cluster
Requires-Dist: boto3>=1.26.0; extra == 'cluster'
Requires-Dist: docker>=6.0.0; extra == 'cluster'
Requires-Dist: opencv-python; extra == 'cluster'
Requires-Dist: pillow>=10.0.0; extra == 'cluster'
Requires-Dist: psutil>=5.9.0; extra == 'cluster'
Requires-Dist: pyautogui>=0.9.54; extra == 'cluster'
Provides-Extra: dev
Requires-Dist: black>=23.0.0; extra == 'dev'
Requires-Dist: isort>=5.12.0; extra == 'dev'
Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: questionary>=2.1.0; extra == 'dev'
Requires-Dist: rich>=14.0.0; extra == 'dev'
Provides-Extra: env
Requires-Dist: anyio; extra == 'env'
Requires-Dist: fastapi>=0.68.0; extra == 'env'
Requires-Dist: neptune; extra == 'env'
Requires-Dist: openai; extra == 'env'
Requires-Dist: pyautogui; extra == 'env'
Requires-Dist: pygame; extra == 'env'
Requires-Dist: rich; extra == 'env'
Requires-Dist: scikit-image; extra == 'env'
Requires-Dist: scipy; extra == 'env'
Requires-Dist: tenacity; extra == 'env'
Provides-Extra: eval
Requires-Dist: psycopg2>=2.9.10; extra == 'eval'
Requires-Dist: scikit-image>=0.25.2; extra == 'eval'
Provides-Extra: mcp
Requires-Dist: dulwich; extra == 'mcp'
Requires-Dist: mcp[cli]; extra == 'mcp'
Description-Content-Type: text/markdown

<h1 align="center">Factorio Learning Environment</h1>
<p align="center">
  <a href="https://jackhopkins.github.io/factorio-learning-environment/leaderboard">Leaderboard</a> | <a href="https://arxiv.org/abs/2503.09617">Paper</a> | <a href="https://jackhopkins.github.io/factorio-learning-environment/versions/0.3.0.html">Website</a> | <a href="https://jackhopkins.github.io/factorio-learning-environment/sphinx/build/html/">Documentation</a> | <a href="https://discord.gg/zKaV2skewa">Discord (#factorio-learning-env)</a>
</p>

<p align="center">
An open source framework for developing and evaluating LLM agents in the game of <a href="https://factorio.com/">Factorio</a>.
</p>

<p align="center">
<img src="https://github.com/JackHopkins/factorio-learning-environment/raw/main/docs/assets/videos/compressed_sulfuric_acid.webp" width="485" height="364" controls/>
<img src="https://github.com/JackHopkins/factorio-learning-environment/raw/main/docs/assets/videos/compressed_red_science.webp" width="485" height="364" controls/>
</p>
<p align="center"><em>Claude Opus 4.1 Plays Factorio</em></p>

## Quick Links

- [Installation](#installation)
- [Environment](#environment)
- [Contributing](#contributing)

## Installation

### Prerequisites

- Docker
- Python 3.10+
- [Factorio](https://www.factorio.com/) (version 2.0.73 or later), only for optional rendering.

```bash
# Core FLE SDK package
pip install factorio-learning-environment

# With optional features
pip install factorio-learning-environment[eval]      # For running experiments
pip install factorio-learning-environment[mcp]       # For MCP protocol support  
pip install factorio-learning-environment[psql]      # For PostgreSQL support
pip install factorio-learning-environment[eval,mcp,psql]  # All features

# Using uv (recommended)
uv sync
```

### Quickstart

Use the CLI:

```bash
# Activate venv
source .venv/bin/activate

# Start Factorio cluster
fle cluster start

# Run evaluation trajectories (requires [eval] dependencies)
fle eval --config configs/gym_run_config.json
```

## Environment

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.

## 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)