Skip to content
Back to skills

Benchmark Evaluation

ASecurity

"Run a bounded ChestAgentBench or Eurorad multimodal evaluation

  • 247 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
businesspythonbashapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill benchmark-evaluation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Benchmark Evaluation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Benchmark Evaluation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-benchmark-evaluation-arex-skill/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-benchmark-evaluation-arex-skill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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)

Files in this skill

  • SKILL.md6.2 KB
  • references/cli-reference.md2.7 KB
  • references/data-formats.md3.5 KB
  • references/troubleshooting.md3.5 KB
  • references/workflows.md3.7 KB
  • scripts/validate_case_manifest.py6.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.