Skip to main content

E-Commerce Last Exam

PyPI Python License Dataset Leaderboard

A benchmark for evaluating LLM agents on real-world travel planning and e-commerce tasks. Each task runs in an isolated Docker container with domain-specific CLI tools and databases. Agents must call tools, analyze results, and produce structured answers. Scores range from 0.00 to 1.00.

Benchmark overview

Config Tasks Domains
travel 77 Hotel / Transport / Attraction trip planning
e_commerce 43 Travel gear / Food / Electronics / Lifestyle shopping

Total: 120 tasks — Dataset: FlyaiLab/ecommerce_last_exam

Prerequisites

  • Python >= 3.10
  • Docker (target platform linux/amd64)
  • An OpenAI-compatible LLM endpoint for the agent and the judge/verifier (they can be the same endpoint)

Installation

pip install flyai-bench

Or install from source:

git clone https://github.com/alibaba-flyai/ecommerce_last_exam
cd ecommerce_last_exam
pip install -e .

Quick start

# 1. Copy the default config and fill in your LLM endpoint / API key
cp eval_config.yaml eval_config.local.yaml
# edit eval_config.local.yaml

# 2. Run evaluation (dry-run first to verify setup)
flyai-bench run --dataset-config travel --limit 5 --dry-run
flyai-bench run --dataset-config travel --limit 5

# 3. Check progress and generate a report
flyai-bench status
flyai-bench report

Configuration

Copy eval_config.yaml to eval_config.local.yaml (already in .gitignore) and fill in your values:

Field Meaning
dataset.repo_id / dataset.config / dataset.split HuggingFace dataset, config (travel / e_commerce), and split
docker.registry Image registry prefix. Leave empty for DockerHub (default).
agent.llm_base_url / agent.llm_api_key / agent.llm_model OpenAI-compatible endpoint, API key, and model for the agent
verifier.judge_base_url / judge_api_key / judge_model Endpoint, key, and model for the judge/verifier
runner.concurrency / runner.limit / runner.skip_done Parallelism, instance cap (null = all), skip completed

API keys are read from your local config and injected into containers as environment variables. Never commit eval_config.local.yaml.

Evaluation flow

HuggingFace Dataset
    │
    ▼
┌─────────────────────────────────┐
│  For each instance:             │
│  1. docker pull <image>         │
│  2. docker run (start env)      │
│  3. agent calls tools → answer  │
│  4. verifier (test.sh) scores   │
│  5. emit reward.txt (0 – 1)    │
└─────────────────────────────────┘
    │
    ▼
scores.jsonl + summary.json

CLI commands

# Run evaluation
flyai-bench run [--dataset-config travel|e_commerce] [--limit N] [--dry-run]

# Multiple independent runs (pass@N)
flyai-bench run --dataset-config travel --runs 3

# Check progress
flyai-bench status

# Generate a report
flyai-bench report

# Package results for leaderboard submission
flyai-bench submit --model deepseek-v4-flash --provider deepseek

Output

File Contents
scores.jsonl One line per instance: {instance_id, domain, reward, duration_sec}
summary.json Aggregate statistics (avg_reward, breakdown by_domain)

reward is a float in 0.00 – 1.00 produced by the verifier for each instance.

Submitting results to the leaderboard

  1. Run the evaluation and package results:

    flyai-bench run --dataset-config travel
    flyai-bench submit \
      --dataset-config travel \
      --model deepseek-v4-flash \
      --provider deepseek \
      --agent-type mini-swe-agent
    
  2. Review experiments/evaluation/travel/<slug>/metadata.yaml and complete the model and agent details.

  3. Open a pull request to alibaba-flyai/ecommerce_last_exam.

  4. CI validates the format automatically; once merged, the leaderboard updates.

Submission package layout

experiments/evaluation/travel/20260830_deepseek-v4-flash_mini-swe-agent/
├── metadata.yaml      # model/agent info + evaluation statistics
├── scores.jsonl       # per instance: {instance_id, domain, reward, duration_sec}
└── summary.json       # aggregate statistics (avg_reward, by_domain)

Writing a custom agent

Implement a script that, inside the container:

  1. Reads /app/tool_defs.json for the tool definitions
  2. Reads /app/system.md + /app/instruction.md for the task
  3. Calls /app/tools/<name> --arg val to execute a tool
  4. Writes the result to /app/answer.json

Point the runner at your agent with --agent-cmd:

flyai-bench run --agent-cmd "python /app/my_agent.py"

agent.py (a minimal LLM agent) and mini_swe_agent.py (a terminal/bash agent) are provided as reference implementations.

Project structure

ecommerce_last_exam/
├── README.md
├── pyproject.toml            # packaging (installs the `flyai-bench` CLI)
├── eval_config.yaml          # default config (copy to eval_config.local.yaml)
├── benchmark.yaml            # benchmark metadata
├── run_eval.py               # standalone evaluation script
├── agent.py                  # reference LLM agent
├── mini_swe_agent.py         # reference terminal agent
├── tool_server.py            # in-sandbox tool proxy (permission isolation)
├── sandbox_setup.sh          # container permission setup
├── validate_submission.py    # submission validation + leaderboard rebuild
├── experiments/              # submitted results + leaderboard.json
├── leaderboard_space/        # HuggingFace Space (leaderboard UI)
└── src/flyai_bench/          # installable package

License

Released under the MIT license.

Download files

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

Source Distribution

flyai_bench-0.1.1.tar.gz (44.2 kB view details)

Uploaded Source

Built Distribution

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

flyai_bench-0.1.1-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

Details for the file flyai_bench-0.1.1.tar.gz.

File metadata

  • Download URL: flyai_bench-0.1.1.tar.gz
  • Upload date:
  • Size: 44.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for flyai_bench-0.1.1.tar.gz
Algorithm Hash digest
SHA256 db6d543260464a83f11f31cfe39e641ed2ffe977f1a6f7b0cd93613aa4c8e494
MD5 4fa45ed408c4043ec3ee5f5733410cd0
BLAKE2b-256 4f867fb4ecdf59b6a8071c78282d099fb51220b3d4cc1c0645cb3e18c08b67f8

See more details on using hashes here.

File details

Details for the file flyai_bench-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: flyai_bench-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for flyai_bench-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3377735a421b8bc491a9c5fe77ea784b0bcfd3c72b0a476356c31bf6854e5f4e
MD5 0b60c2dec404a9a7fb917617c219c082
BLAKE2b-256 c8981258cb7ca0af350ef0737df32833d120330a168dcefc61501af4a04b1558

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.3

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page