19cc03ad1c
500-item catalog was making 50 sequential API calls, causing progressive rate-limit throttling (explains "super slow towards the end") and ~$3 in credits. - BatchSize: 10 → 25 (word limits are in place; 25 items × ~80 tokens ≈ 2000 output tokens, well within MaxTokens=8192 — the original truncation cause) - Run up to 3 batches concurrently via SemaphoreSlim(3) — independent API calls with no shared state, so no growing context issue - For a 500-item catalog: 50 sequential calls → 20 calls in ~7 parallel waves, roughly 4× faster and 60% cheaper - Dropped unused `costs` param from AnalyzeBatchAsync (system prompt has all costs) - JS progress timing updated to reflect parallel waves Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>