Skip to main content

AERead

AERead — an agentic economic environment for LLM agents

CI License: Apache-2.0 Python 3.10+ Site

Start here: 5-minute quickstart · Concepts · Submit an agent · Integrations (rLLM, EverOS, yours) · Contribute

AERead (AgentEcon Readiness) is an open environment + benchmark for studying how LLM agents behave in multi-agent exchange economies: bilateral trade, multiparty clearing, hidden-counterparty discovery, consent under hidden information, procurement, and bundle-purchase worlds. It asks a deployment question — how much of the attainable welfare does an agent actually realize when it has to trade with others? — and measures it with a single auditable score.

Results and methodology: https://aeread.org · Capability coverage map: CAPABILITIES.md — what is covered, partial, and planned, toward a general evaluation of agent economic capabilities.

What makes it a benchmark, not just a sandbox

  • Deterministic seeded cases. A case is a JSON config (world + protocol + role table). Same config + seed ⇒ same world, byte-for-byte.
  • One seat under test, frozen everything else. The other seats are a frozen LLM panel (temperature 0, cached, model-pinned) or scripted policies, so the score isolates the candidate.
  • AER scoring. AER = W_real / denominator — realized welfare gain over the attainable welfare gain, pooled as ΣW/ΣD. Raw ratio: negatives are preserved, values can exceed 1, denominator tiers are never mixed, degenerate denominators are reported instead of imputed.
  • Byte-replayable runs. Every LLM call lands in an inference manifest with response snapshots; --mode replay re-executes a run with zero live calls and must reproduce the trace byte-identically. Submissions are verified this way.

Install

# without cloning (a PyPI release is pending):
pip install "aeread @ git+https://github.com/aeread-org/AERead"

# from a checkout, for development:
pip install -e '.[dev]'

aeread --help

60-second offline quickstart (no API keys)

# run a case fully offline (scripted policies, no LLM calls):
aeread run --config configs/exchange_economy/cases_v0/case01_visible_bilateral_ir.json \
    --mode offline --seed 7 --out runs/

# provider-free baselines + validity orderings for a case (~2 min/case, pure CPU):
aeread baselines --configs 'configs/exchange_economy/cases_v0/case01_visible_bilateral_ir.json' \
    --output-md /tmp/case01_baselines.md

Evaluate a model

Models route through any OpenAI-compatible endpoint (OPENAI_API_KEY + OPENAI_BASE_URL, defaults to OpenRouter slash-names) or natively to Gemini (GEMINI_API_KEY).

export OPENAI_API_KEY=...    # OpenRouter (or set OPENAI_BASE_URL for another provider)

aeread eval --cases 'configs/exchange_economy/cases_v0/case0*.json' \
    --agents noop random greedy your-provider/your-model \
    --seeds 5 --seed-base 1200 --workers 8 --out output/my_eval
# -> output/my_eval/summary.json: pooled AER + bootstrap CI per agent, vs the baselines

Note: for configs with a roles block, the under-test model comes from the role table (or the --agents spec in aeread eval), not aeread run --model.

Submit an agent

Your agent never sees the world object — it gets the exact rendered text observation an LLM seat would get, and returns text. One method:

class MyAgent:
    def act(self, observation: str, phase: str) -> str:
        # phase ∈ {communication, proposal, response, finalization, private_acceptance}
        ...
aeread submit --cases configs/exchange_economy/cases_v0/case0*.json \
    --agent mypkg.myagent:MyAgent --out submissions/
# -> submission_report.json: per-case scores, case-set content hash,
#    replay verification (the run is re-executed with your agent absent and
#    must reproduce byte-identically)

Two trust tiers. Anything you run locally on the public dev seeds is self-reported. A verified result is produced by the maintainers: we re-run your submission's replay audit and evaluate the agent on a private held-out seed set that never ships in this repo. Open a PR with your submission_report.json to start that process (see CONTRIBUTING).

Add a case

Cases are JSON: world spec (agents, resources, utility mode, world type), protocol knobs (visibility, atomic commit, IR enforcement, settlement limits, communication scope…), an institution_pressure block, and a strictly validated roles table. New cases must pass the provider-free admission gate (aeread validate-case), which enforces the non-triviality ordering no-op ≤ random < greedy < ceiling and rejects degenerate worlds. See CONTRIBUTING.md and configs/exchange_economy/cases_v0/README.md.

Integrations

AERead plugs into other agent stacks through two small seams — the text-boundary submitted-agent contract (act(observation, phase) -> str) and the framework-neutral episode core (run_episode(...) -> score row). See integrations/ for the contract and the add-your-own guide.

  • rLLM (upstream: rllm-org/rllm) — train on AER as reward, smoke-tested against 0.3.0rc0: the seat under test samples through rLLM's model gateway; the frozen panel stays cached and untraced; GRPO groups rollouts per case so denominator scale cancels in the advantage.
  • EverOS (upstream: EverMind-AI/EverOS) — persistent memory as a treatment arm: a submitted agent that searches an EverOS server before every action and writes each finished episode + outcome back; a memory-on vs memory-off A/B measures what cross-episode memory is worth in realized welfare. Measured on the fixed client with three independent sequences per condition: control +0.114, memory +0.082, paired delta −0.032 [−0.066, +0.002]. An earlier +0.059 lift reported from this integration was a measurement artifact and is retracted (see the guide for the full notice).
  • aeread.exchange_rl_env: a structured (LLM-free) bilateral negotiation env with reset() / step(agent_id, StructuredAction) for classical RL and unit-testable reward shaping — no external framework needed.

Scoring semantics, in one paragraph

Per episode the scorer records w_real (realized welfare gain of the world, from the trace) and a denominator (attainable welfare gain under the case's oracle tier — exact Bayes, Monte-Carlo Bayes, or W* fallback). The headline is the pooled raw aggregate ΣW_real/ΣD per tier with a bootstrap CI; a clipped companion (aer_clip) is presentation-only. Failed feasibility/authorization gates zero the episode's W_real but keep its denominator. Tiers are never pooled together, and degenerate denominators are surfaced with a reason, never silently scored.

Provenance

This repository is a curated export of a private development repo: export_manifest.json records the source commit and per-file SHA-256 for every exported module, test, and config. Response caches, run archives, and the private held-out seed set are excluded by design.

Environment variables

Variable Purpose
OPENAI_API_KEY, OPENAI_BASE_URL OpenAI-compatible provider (default OpenRouter)
GEMINI_API_KEY native Gemini path for google/gemini-* models
AEREAD_CACHE_DIR, AEREAD_GEMINI_CACHE_DIR response-cache locations
POC_MODEL, POC_MT, POC_TEMPERATURE runner defaults (model, max tokens, temperature)

Repository map

src/aeread/            the installable package: arena engine, runner, scorer,
                       submission harness, baselines, oracles, CLI
src/aeread/integrations/   rLLM flow/eval/dataset, EverOS memory (importable code)
integrations/          per-integration guides + examples (human side)
configs/exchange_economy/  versioned case sets (cases_v0/, …) + variants
docs/                  quickstart, concepts, submission contract
examples/              minimal runnable entry points
tests/                 offline, deterministic; no API keys needed
CAPABILITIES.md        coverage map: covered / partial / planned capabilities
export_manifest.json   provenance of every exported module (see Provenance)

Ecosystem & partnerships

  • rLLM — Berkeley Sky Lab's agent post-training framework. AERead ships rLLM entry points; the seat under test trains through rLLM's gateway with per-episode AER as reward. (guide)
  • EverOS — EverMind's open-source, markdown-first memory service. The persistent-memory treatment arm is developed in design partnership with the EverOS team. (guide)

Building on AERead, or want your framework listed? Open a new-integration issue.

Community & contributing

  • CONTRIBUTING.md — four channels: cases, agents & results, integrations, core code. Cases must pass the admission gate (no-op ≤ random < greedy < ceiling); code lands with offline tests.
  • Issues — templates for bugs, new cases, and new integrations. Replay mismatches are P0.
  • Code of Conduct — Contributor Covenant; benchmark disputes are settled with reproducible runs.

License & citation

Apache-2.0. A methodology preprint is in preparation; until then, cite this repository and https://aeread.org.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aeread-0.1.0.tar.gz (350.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aeread-0.1.0-py3-none-any.whl (231.4 kB view details)

Uploaded Python 3

File details

Details for the file aeread-0.1.0.tar.gz.

File metadata

  • Download URL: aeread-0.1.0.tar.gz
  • Upload date:
  • Size: 350.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for aeread-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cc158f2cfffc66344d74dd77167fd42a7c27de8d701dd37044d0551b4f1dfdd0
MD5 77d9238483e95778f049fbba744c4240
BLAKE2b-256 16f149356d55d6cab9b8f39fcbeeacd143d26c99d1d2aa7fc966b3e4d102b218

See more details on using hashes here.

File details

Details for the file aeread-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aeread-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 231.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for aeread-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc657ba2bfaf787e2578de0e4d447d4fd07c7368f04977dcad6c8b1b2c2f4e79
MD5 8d971d6373d09636dee8bf4ff91143d9
BLAKE2b-256 6adb09ae15510acacb759a092a6de2ff01d8287781e4d37254599396305c63b9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page