Toolathlon Official Service Wrapper#
Overview#
Toolathlon is an agent benchmark for realistic, long-horizon tool use across many MCP-backed software environments. This EvalScope benchmark is a wrapper around the official Toolathlon remote evaluation service, not a local reimplementation of the MCP environments or official evaluator.
Evaluation Mode#
Benchmark id:
toolathlonSupported mode: official service private mode
EvalScope controls model endpoint, task selection, job parameters, polling, result download, and reporting
The official Toolathlon service controls MCP environments, task containers, agent loop execution, and scoring
No Toolathlon, MCP application accounts, or Toolathlon Python package installation are required when using the official public evaluation service
A local or intranet OpenAI-compatible endpoint is required for private mode
EvalScope represents one remote Toolathlon job as one local sample; the generated data statistics count wrapper jobs, while
task_listandlimitcontrol the Toolathlon tasks submitted inside that jobThe bundled Toolathlon-Verified task list was inspected from official repository commit
b7bbac3f9a1f381b095c878debe1a47dd164ad85
Usage Guide#
See the Toolathlon usage guide for public-service limits, private-mode data flow, self-hosted service setup, and EvalScope configuration examples:
https://evalscope.readthedocs.io/en/latest/third_party/toolathlon.html
Official sources:
https://github.com/hkust-nlp/Toolathlon
https://github.com/hkust-nlp/Toolathlon/blob/main/EVAL_SERVICE_README.md
Properties#
Property |
Value |
|---|---|
Benchmark Name |
|
Dataset ID |
|
Paper |
N/A |
Tags |
|
Metrics |
|
Default Shots |
0-shot |
Evaluation Split |
|
Data Statistics#
Metric |
Value |
|---|---|
Total Samples |
1 |
Prompt Length (Mean) |
50 chars |
Prompt Length (Min/Max) |
50 / 50 chars |
Sample Example#
Subset: default
{
"input": [
{
"id": "22a512d8",
"content": "Run Toolathlon official remote evaluation service."
}
],
"target": "",
"id": 0,
"metadata": {
"task_list": [
"ab-testing",
"academic-pdf-report",
"academic-warning",
"add-bibtex",
"apply-phd-email",
"arrange-workspace",
"canvas-arrange-exam",
"canvas-art-manager",
"canvas-art-quiz",
"canvas-do-quiz",
"... [TRUNCATED 98 more items] ..."
],
"mode": "private"
}
}
Prompt Template#
Prompt Template:
{question}
Extra Parameters#
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
|
Toolathlon service mode. EvalScope supports private mode for this wrapper. Choices: [‘private’] |
|
|
|
Official Toolathlon evaluation service host. |
|
|
|
Official Toolathlon HTTP service port. |
|
|
|
Official Toolathlon WebSocket proxy port for private mode. |
|
|
|
Number of parallel Toolathlon workers requested from the official service. |
|
|
|
Toolathlon model provider type. Choices: [‘unified’, ‘openai_stateful_responses’] |
|
|
|
Optional Toolathlon task names to evaluate. Empty uses the bundled Toolathlon-Verified list. |
|
|
`` |
Optional file containing one Toolathlon task name per line. |
|
|
|
Extra model parameters forwarded to Toolathlon, merged after TaskConfig.generation_config. |
|
|
`` |
Optional Toolathlon job id. Reuse to resume an incomplete official-service job. |
|
|
|
Force redownload of Toolathlon result archives. |
|
|
|
Clear the Toolathlon output directory when it already contains files. |
|
|
|
Skip Toolathlon container restart. Use only for small debug task subsets. |
|
|
|
Allow httpx to use proxy environment variables. |
|
|
|
Maximum time to wait for a Toolathlon official-service job. |
|
|
|
Polling interval in seconds for Toolathlon job status. |
Usage#
Using CLI#
evalscope eval \
--model YOUR_MODEL \
--api-url OPENAI_API_COMPAT_URL \
--api-key EMPTY_TOKEN \
--datasets toolathlon \
--limit 10 # Remove this line for formal evaluation
Using Python#
from evalscope import run_task
from evalscope.config import TaskConfig
task_cfg = TaskConfig(
model='YOUR_MODEL',
api_url='OPENAI_API_COMPAT_URL',
api_key='EMPTY_TOKEN',
datasets=['toolathlon'],
dataset_args={
'toolathlon': {
# extra_params: {} # uses default extra parameters
}
},
limit=10, # Remove this line for formal evaluation
)
run_task(task_cfg=task_cfg)