Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 2.89 KB

MODELS.md

File metadata and controls

49 lines (39 loc) · 2.89 KB

Model independence — notes and history

The live scorecard is benchmarks/RESULTS.md, regenerated by vpcopilot bench <repo> --all-configs across every config/agents*.yaml. Numbers live there so there is one place to update; this file keeps the qualitative findings — what swapping a model actually surfaced — which no table captures.

See also the per-target comparisons in benchmarks/, e.g. compare-vampi-three-way.md.


The original proof (PLAN D3, 2026-07-02) — historical

Same code, same prompts, same answer key — only config/agents.yaml changed. Both providers ran the full pipeline (discover → verify → triage → generate → remediate) with valid structured output on every call, via LiteLLM + instructor. Target: the vendored Nimbus vuln-lab fixture bench/fixtures/nimbus-vuln-lab/app/src/app/api (9 labeled vulns; bench/answer_key.yaml). Recorded 2026-07-02.

Model (config) Discovery recall Triage accuracy Notes
anthropic/claude-opus-4-8 (default agents.yaml) 9/9 = 1.00 9/9 = 1.00 16 findings — most thorough
openai/gpt-4o (agents.openai.yaml) 6/9 matched (~8/9 real) 6/6 = 1.00 10 findings (~1/file); all verified, triage perfect

Run gpt-4o: vpcopilot bench <path> --config config/agents.openai.yaml --out out-openai

What it proved

  • The harness is model-independent. A config-only swap routed the entire pipeline to a different vendor; JSON-schema structured output (via instructor) worked on both, no code change.
  • Capability differs, and the design accounts for it. Claude was more thorough at discovery (16 vs 10 findings; 9/9 vs ~8/9 real). Triage was 100% correct on both. This is exactly why config/agents.yaml lets you assign a strong model to discover/verify/triage and a cheaper/local one to mechanical steps.

What it surfaced — a real hardening win (now applied to all models)

gpt-4o initially refuted every finding — including a live SQLi at confidence 1.0 — because the Nimbus code comments say the flaw is "intentional / demo / do not fix." It trusted the comments; Claude ignored them. Fix (in discover + verify): judge the code, ignore comments that claim a vuln is intentional/safe/demo — an exploitable flaw is real regardless of annotations. This also hardens the reviewer against insiders/attackers who label a backdoor "intentional" to evade AI review. Claude stayed 9/9 after the change.

Benchmark-matcher artifacts (tracked)

gpt-4o's matched recall (6/9) understates its true recall (~8/9): it reused one finding id across the two SQLis (collision) and labeled neg-pay's class differently than the key, so the matcher counted those as "extra" rather than matched. Follow-ups: PLAN D1 (bonus-vuln scoring) + matcher hardening (dedupe ids, lenient class match).