"Run a bounded ChestAgentBench or Eurorad multimodal evaluation
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill benchmark-evaluation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Benchmark Evaluation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-benchmark-evaluation-arex-skill)More formats (shields.io, HTML) on the badges page.
---
name: benchmark-evaluation
description: "Run a bounded ChestAgentBench or Eurorad multimodal evaluation
through an OpenAI-compatible chat client, with local or URL-backed images,
manifest checks, JSONL logging, interruption handling, and cautious result
interpretation."
disable-model-invocation: true
metadata:
disco-role: operating
license: Apache 2.0
---
# Benchmark evaluation
Use this skill to evaluate a vision-capable chat model on an already prepared,
local ChestAgentBench-style manifest or Eurorad-derived case set. This is an
**evaluation runner**, not a dataset builder and not a clinical decision tool.
Route dataset scraping, question generation, and exploratory experiments to
their sibling skills. Route MedRAX agent/tool initialization to the agent/tool
runtime skill.
## Safety and scope gate
- Start with a bounded plan: select the manifest, image mode, model, output
prefix, and a small `--max-cases` value. Treat one case as the smoke run and
expand only after its log and image resolution are sound.
- Network access, credentials, API spend, provider-side inference, and URL image
downloads are deferred until the user explicitly authorizes the run. A
manifest check never needs an API key or network access.
- ChestAgentBench/Eurorad accuracy is a benchmark observation, not clinical
validation, patient-specific advice, or evidence of deployment safety.
- Do not place API keys, bearer headers, inline base64 image payloads, or
unredacted prompts in a report or shared log. Preserve only the redacted
JSONL contract described in [data-formats.md](references/data-formats.md).
## Quickstart route
1. Confirm that the supplied benchmark runner exposes the flags documented in
[cli-reference.md](references/cli-reference.md). Do not silently substitute
a dataset-generation command.
2. Validate a local JSONL manifest and image root before any client creation:
```bash
python scripts/validate_case_manifest.py cases/metadata.jsonl --root cases
```
Nested image arrays are supported. Missing local images are errors; a case
with no image references is reported as a skip candidate. Use `--help` to
inspect all bounded-check options.
3. For a local-image smoke run, after authorization and local data readiness:
```bash
python quickstart.py --model "$MODEL" --temperature 0.2 \
--log-prefix smoke-local --max-cases 1
```
The runner loads a JSONL benchmark split, creates an OpenAI-compatible
client, embeds local images as data URLs, and logs one JSON object per case.
4. For URL-backed images, plan exactly one case first:
```bash
python quickstart.py --model "$MODEL" --temperature 0.2 \
--log-prefix smoke-url --max-cases 1 --use-urls
```
URL mode still fetches and base64-embeds the images before the API call; it
is therefore both network work and inference work. Stop if the URL fetch is
not explicitly authorized or cannot be bounded.
5. On success, inspect the redacted log for `question_id`, `status`, answer,
duration, usage, and image-source counts before increasing the case limit.
Never infer benchmark quality from a single case.
## Prompt and answer contract
The multimodal request contains a medical-case preamble, the case's multiple
choice `question`, and an instruction to answer only from the supplied images
and case information. The system role asks for only one choice letter among
`A/B/C/D/E/F`. The expected answer is the manifest's `answer` field. Preserve
the model's raw answer for audit, but normalize only a separate analysis field;
do not rewrite the source answer or silently score prose as a letter.
A valid case should have a stable `question_id`, non-empty `question`, an
expected `answer`, and `images` for local mode or `image_source_urls` for URL
mode. Image fields may be a string, a list, or nested lists. Flatten them in
order and preserve that order in the log. Empty or missing images do not call
the model: record `status: "skipped"` and `reason: "no_images"`.
## Configuration and bounded execution
- `--model` is the effective request model and takes precedence over the
runner's default. `OPENAI_MODEL` is a useful provider/configuration
convention, but do not assume the runner reads it automatically; pass its
value explicitly when needed.
- `OPENAI_API_KEY` is required by the reference quickstart. `OPENAI_BASE_URL`,
when set, is passed to the OpenAI-compatible client. Use a provider's exact
compatible endpoint and model name; a custom base URL does not make an
incompatible model multimodal.
- Keep temperature low and record it. `--max-cases` limits the selected prefix
of the dataset; it is not a random sample and is not a confidence interval.
- Use a writable, non-sensitive log prefix. The timestamped output filename is
derived from the prefix and current time; check that it exists and is
non-empty after the run.
- The reference request retries transient-looking failures up to three times
with exponential waits (approximately 4–10 seconds between attempts). A
final exception is logged and raised, so persistent provider errors can stop
the loop rather than being silently counted as wrong answers.
- SIGINT/SIGTERM sets a shutdown event checked between cases. Expect the
current request to finish or fail; interruption is not a promise to cancel a
provider request. Keep the log as a partial run and record processed/skipped
counts.
## Interpretation and handoff
Separate these quantities: attempted cases, successful model responses,
no-image skips, request errors, valid-choice answers, and exact answer matches.
Report the manifest version/source description, image mode, model/base-url
class (not secrets), temperature, case limit, interruption state, and log
completeness. Do not call skipped cases incorrect unless the evaluation plan
explicitly defines that policy. A benchmark score is sensitive to image
availability, prompt wording, model/version, provider behavior, and case
ordering; compare runs only when those controls are held constant.
For detailed schemas, workflows, flags, and predictable failures, read:
- [workflows.md](references/workflows.md)
- [data-formats.md](references/data-formats.md)
- [cli-reference.md](references/cli-reference.md)
- [troubleshooting.md](references/troubleshooting.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!