E-Commerce Last Exam
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
-
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
-
Review
experiments/evaluation/travel/<slug>/metadata.yamland complete the model and agent details. -
Open a pull request to
alibaba-flyai/ecommerce_last_exam. -
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:
- Reads
/app/tool_defs.jsonfor the tool definitions - Reads
/app/system.md+/app/instruction.mdfor the task - Calls
/app/tools/<name> --arg valto execute a tool - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db6d543260464a83f11f31cfe39e641ed2ffe977f1a6f7b0cd93613aa4c8e494
|
|
| MD5 |
4fa45ed408c4043ec3ee5f5733410cd0
|
|
| BLAKE2b-256 |
4f867fb4ecdf59b6a8071c78282d099fb51220b3d4cc1c0645cb3e18c08b67f8
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3377735a421b8bc491a9c5fe77ea784b0bcfd3c72b0a476356c31bf6854e5f4e
|
|
| MD5 |
0b60c2dec404a9a7fb917617c219c082
|
|
| BLAKE2b-256 |
c8981258cb7ca0af350ef0737df32833d120330a168dcefc61501af4a04b1558
|