From 6a8b637669565dc476070b6692c059752d25b88f Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 18 Apr 2026 06:53:52 +0800 Subject: [PATCH] fix(benchmark): dedupe providers in --models `--models claude,claude,gpt` previously produced a list with a duplicate entry, meaning the benchmark would run claude twice and bill for two runs. Surfaced by /review on this branch. Use a Set internally; return Array.from(seen) to preserve type + order of first occurrence. Co-Authored-By: Claude Opus 4.7 (1M context) --- bin/gstack-model-benchmark | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/gstack-model-benchmark b/bin/gstack-model-benchmark index 8b29458b..301ddeea 100755 --- a/bin/gstack-model-benchmark +++ b/bin/gstack-model-benchmark @@ -54,14 +54,14 @@ function flag(name: string): boolean { function parseProviders(s: string | undefined): Array<'claude' | 'gpt' | 'gemini'> { if (!s) return ['claude']; - const out: Array<'claude' | 'gpt' | 'gemini'> = []; + const seen = new Set<'claude' | 'gpt' | 'gemini'>(); for (const p of s.split(',').map(x => x.trim()).filter(Boolean)) { - if (p === 'claude' || p === 'gpt' || p === 'gemini') out.push(p); + if (p === 'claude' || p === 'gpt' || p === 'gemini') seen.add(p); else { console.error(`WARN: unknown provider '${p}' — skipping. Valid: claude, gpt, gemini.`); } } - return out.length ? out : ['claude']; + return seen.size ? Array.from(seen) : ['claude']; } function resolvePrompt(positional: string | undefined): string {