PlanBench-XL

July 15, 2026 ยท View on GitHub

arXiv Hugging Face Data Project Page Cite

This is the official repository for PlanBench-XL, a benchmark for evaluating LLM agents' long-horizon planning with massive tool ecosystems under retrieval noise and path-preserving blocker events.

๐ŸŽฏ Project Overview

PlanBench-XL tests whether tool-use agents can solve retail planning tasks when they cannot see the whole tool universe at once. At each turn, the agent may retrieve relevant tools, call an available tool, or submit a final answer. The runtime tracks discovered tools, trusted and untrusted intermediate values, executable traces, and final-answer correctness.

The current release contains a retail-domain benchmark with 327 queries, 56 datatypes, and 1,665 tools.

โœจ Core Features

  • Massive Tool Retrieval: Agents retrieve tools from a large tool ecosystem instead of receiving a complete tool list up front.
  • Long-Horizon Planning: Ground-truth solution paths span at least 5 tool steps, requiring multi-step composition across intermediate values.
  • Noisy Tool Ecosystem: Retrieved executable tools can be augmented with noisy sibling tools.
  • Path-Preserving Blockers: Blocker configurations simulate corrupted tool access by injecting explicit, implicit, and semantic-misleading failures, while preserving at least one valid solution path for each query.
  • Detailed Evaluation: The evaluator reports answer accuracy, turn counts, search/call balance, invalid tool-call rates, noisy-tool usage, and executed ground-truth datatype coverage.

๐Ÿ“Š Main Results

๐Ÿš€ Quick Start

Installation

# Clone the repository
git clone <repo-url>
cd PlanBench-XL

# Install dependencies
pip install openai pyyaml requests httpx tqdm

Python 3.10 or newer is recommended. Run commands from the repository root.

Environment Configuration

  1. API Models

    Configure your API key and OpenAI-compatible base URL:

    cp src/env/config/.env.example src/env/config/.env
    source src/env/config/.env
    

    Then edit src/env/config/.env:

    export OPENAI_API_KEY="your-api-key"
    export OPENAI_BASE_URL="your-base-url"
    

    Model YAMLs are stored in src/env/config/models/openai/ and registered in src/env/config/model_registry.yaml.

  2. Local Models

    Local model configs use OpenAI-compatible endpoints, for example:

    base_url: http://127.0.0.1:8001/v1
    api_key: EMPTY
    

    Edit the corresponding *-local.yaml file if your local server uses a different port.

Running the Benchmark

Run one YAML configuration:

python src/env/run.py \
  --run_config src/env/config/runs/retail/gpt-5.4/retail_gpt5.4_default.yaml

Run a blocker configuration:

python src/env/run.py \
  --run_config src/env/config/runs/retail/gpt-5.4/retail_gpt5.4_blocker.yaml

Override config fields from the command line:

python src/env/run.py \
  --run_config src/env/config/runs/retail/gpt-5.4/retail_gpt5.4_default.yaml \
  --set query_sample.size=20 \
  --set output.output_dir=retail/debug/gpt-5.4

Runtime outputs are written under outputs/ by default. Each run directory contains:

metadata.json               # merged configuration snapshot
result.jsonl                # completed per-query results
progress/index.json         # per-query progress index
progress/queries/*.json     # resumable per-query traces and checkpoints

Batch Runs

List available retail run YAMLs:

python scripts/run_retail_batch.py --list

Run all non-local configs for one model:

python scripts/run_retail_batch.py --model gpt-5.4

Run selected configs only:

python scripts/run_retail_batch.py \
  --model gpt-5.4 \
  --config default,blocker

The batch helper skips *-local model directories by default. Include them only when the corresponding local OpenAI-compatible servers are running:

python scripts/run_retail_batch.py --include-local-models --model llama3.3-70b-local

To inspect local ports parsed from model YAMLs:

python scripts/run_retail_batch.py --list-local-model-ports

๐Ÿ“– Advanced Usage

Run Configs

Retail run configs are located under:

src/env/config/runs/retail/<model-name>/*.yaml

Common settings include:

  • model_ref: Model registry key defined in src/env/config/model_registry.yaml.
  • data.*_file: Retail dataset files used by the run.
  • output.output_dir: Run-specific directory under output.root_dir.
  • runtime.max_steps: Maximum action steps per query.
  • runtime.max_concurrency: Number of concurrent query workers.
  • query_sample.size: Optional number of queries to sample.
  • query_sample.seed: Seed for deterministic query sampling.

Noise Parameters

  • noise.mode: append_noisy_siblings appends noisy sibling tools for retrieved primary tools.
  • noise.max_total_tools: Maximum number of tools returned to the agent after augmentation.
  • noise.ratio: Reserved in config; current retail run YAMLs use ratio: 0.0 with append_noisy_siblings.

Blocker Parameters

  • blocker.enable_block: Enables runtime replacement of selected baseline tools.
  • blocker.selection_mode: Supports path-targeted selection such as target_remaining_paths and target_remaining_ratio.
  • blocker.target_remaining_paths: Target number of surviving ground-truth paths.
  • blocker.target_remaining_ratio: Target ratio of surviving ground-truth paths.
  • blocker.fixed_noise_type: Uses one blocker type, such as explicit failures, implicit failures, or semantic misleading.
  • blocker.fixed_noise_types: Uses multiple blocker types for each selected baseline tool.
  • blocker.seed: Seed used for blocker planning and reproducible final tool-order shuffling.
  • blocker.max_combo_candidates / blocker.max_cover_size: Search limits for blocker selection.

Model Parameters

Model YAMLs expose OpenAI-compatible request parameters:

  • model: Provider model name sent to the API.
  • api_key_env / base_url_env: Environment-variable based API credentials.
  • base_url / api_key: Direct endpoint settings for local models.
  • request.temperature: Sampling temperature.
  • request.max_tokens: Maximum response tokens.
  • request.timeout_seconds: Request timeout.

๐Ÿ“ฆ Dataset

The retail benchmark data is stored in src/data/retail/:

FileDescription
datatypes.jsonTyped value schema used by tools and queries
database.jsonRetail backend records used by executable tools
baseline_tools.jsonGround-truth executable tools
noisy_tools.jsonDistractor tools associated with baseline tools
blocker_tools.jsonRuntime replacement tools for blocker settings
tasks.jsonTyped planning task definitions
queries.jsonNatural-language benchmark queries and answers
paths_set_catalog.jsonGround-truth path sets for blocker planning and evaluation

๐Ÿ“ˆ Evaluating Results

Evaluate a completed or partially resumed run directory:

python src/env/evaluate.py \
  --output_dir outputs/retail/gpt-5.4/default

By default, this writes:

outputs/retail/gpt-5.4/default/evaluation.json

The evaluation report includes:

  • accuracy and correct_count
  • mean and total turn counts
  • explored datatype counts
  • search-to-call ratio
  • invalid tool-call and untrusted-input rejection rates
  • noisy-tool usage rates
  • executed ground-truth datatype precision and recall
  • per-query traces and failure details

๐Ÿ”ง Extending

To add a new model:

  1. Add a model YAML under src/env/config/models/openai/.
  2. Register it in src/env/config/model_registry.yaml.
  3. Add one or more run YAMLs under src/env/config/runs/retail/<model-name>/.
  4. Run with python src/env/run.py --run_config <your-run-yaml>.

The current code release targets the retail domain.

๐Ÿค Contributing

Contributions are welcome. Please open an issue or pull request for bug fixes, new model configs, or benchmark extensions.

๐Ÿ“š Citing this work

@article{liu2026planbench,
  title={PlanBench-XL: Evaluating Long-Horizon Planning of LLM Tool-Use Agents in Large-Scale Tool Ecosystems},
  author={Liu, Jiayu and Lin, Qihan and Qian, Cheng and Wang, Rui and Acikgoz, Emre Can and Yang, Xiaocheng and Liu, Jiateng and Wang, Zhenhailong and Chen, Xiusi and Ji, Heng and others},
  journal={arXiv preprint arXiv:2606.22388},
  year={2026}
}