sora 13274243a0 Bump vendored EvalScope and add K3-ready DPV4 configs.
Keep K3 suite selection and report-schema scoring in bash, merge K3/vision dataset_args into dpv4 yamls, and pin EvalScope at 735d920ee911 with local patches.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 07:30:48 +00:00

104 lines
3.9 KiB
Markdown

# SkillsBench
SkillsBench evaluates whether agents can use task-bundled Agent Skills. Each task contains `task.md`, `environment/Dockerfile`, `environment/skills/`, `oracle/`, and `verifier/`. EvalScope builds a local Docker image from the task environment, runs the agent or oracle in a container, then executes the task's `verifier/test.sh` and reads `/logs/verifier/reward.txt` as the score.
## Prerequisites
- Docker is installed and running.
- The SkillsBench repository is cloned locally, and you pass the `tasks/` directory path.
- Real agent runs require `agent_config`, for example the Codex external runner.
- External runners execute inside the task container. Codex/OpenCode/Gemini CLI runners probe for the CLI first and can install it during runner setup when `auto_install=True`.
- Verifier scripts may install dependencies through apt/pip/uv, so network access is usually required.
## Skill Mode
The default `skill_mode` is `no-skill`.
- `no-skill`: EvalScope removes `environment/skills` from the temporary build context and strips skill copy/path residues from the Dockerfile.
- `with-skill`: EvalScope injects task-bundled skills into `/skills`; the runner installs them into its own skill discovery path before launch.
`self-gen` is not supported in this version. EvalScope does not automatically compute lift. Run `no-skill` and `with-skill` separately, then compare the two runs with EvalScope's run comparison tools.
## Oracle Smoke
Use oracle first to validate the image, paths, and verifier contract:
```python
from evalscope import TaskConfig, run_task
run_task(TaskConfig(
model='dummy',
datasets=['skillsbench'],
limit=1,
dataset_args={
'skillsbench': {
'extra_params': {
'tasks_dir': '/path/to/skillsbench/tasks',
'task_ids': ['offer-letter-generator'],
'runner': 'oracle',
'skill_mode': 'no-skill',
}
}
},
))
```
## Real Agent
`no-skill`:
```python
from evalscope import TaskConfig, run_task
run_task(TaskConfig(
model='your-model',
datasets=['skillsbench'],
limit=1,
agent_config={
'mode': 'external',
'framework': 'codex',
'environment': 'docker',
'timeout': 900,
'kwargs': {
'auto_install': True,
},
},
dataset_args={
'skillsbench': {
'extra_params': {
'tasks_dir': '/path/to/skillsbench/tasks',
'task_ids': ['offer-letter-generator'],
'skill_mode': 'no-skill',
}
}
},
))
```
For `with-skill`, only change `skill_mode`:
```python
dataset_args={
'skillsbench': {
'extra_params': {
'tasks_dir': '/path/to/skillsbench/tasks',
'task_ids': ['offer-letter-generator'],
'skill_mode': 'with-skill',
}
}
}
```
## Image Cache
EvalScope creates a temporary build context for each task and skill mode, then tags the local Docker image from the context hash. `no-skill` and `with-skill` use different cache keys. The first run builds the image; later runs with the same context reuse it. Set `force_rebuild=true` to rebuild.
The task image remains the source of truth for task dependencies and verifier inputs. If that image already contains the external CLI, set the runner's `auto_install` to `False`; otherwise leave `auto_install=True` so the runner installs the CLI inside the task container during setup.
## Current Limits
- The adapter targets the official SkillsBench `tasks/` set by default and does not include `tasks-extra/` automatically.
- The supported verifier contract is `verifier/test.sh` writing `/logs/verifier/reward.txt`.
- Full BenchFlow verifier features such as `reward-kit`, `llm-judge`, `agent-judge`, `ors-episode`, and multi-service verifiers are not supported.
- EvalScope saves key agent/verifier logs and metadata by default, not the full container filesystem.