Follow-up to #187/#188.
Problem
#188 fixed claude-auto-pilot-fable-v1-canary / claude-mythos-*-canary by adding two literal curated.fuzzy substring rules ("fable", "mythos"). This is a per-model-name patch, not a fix to the underlying gap: src/lib/pricing/matcher.js has no tier that recognizes the <vendor>-auto-pilot-<name>-v<N>-canary naming shape in general.
Any future renamed/canary model whose base name is not already a short LiteLLM substring (the reason gpt-5.6-auto-pilot-* survived — "gpt-5" / "gpt-5.6" happen to already be short LiteLLM keys) will reproduce the exact same silent-$0 bug, requiring another one-line curated patch and another release cycle.
Also a real risk introduced by the current fix: {"match": "fable", "ref": "claude-fable-5"} is a bare substring rule — any future model id containing the literal substring "fable" (e.g. a hypothetical distinct cheaper fable-mini) will silently inherit the Opus-tier ($10/$50) Fable 5 price via fuzzy match, not because it is actually that model, but because the substring matched.
Ask
Design a normalizer for source: "hermes" (or general) that strips known infix/suffix noise (-auto-pilot-, -v\d+-canary, -canary, -preview) before running the existing lookup ladder, so vendor-renamed ids resolve to their real base model without a hand-added fuzzy rule per name. This is matcher.js resolve-order work — evaluate as a proper design pass, not another one-line patch, given the risk noted above.
Evidence
Follow-up to #187/#188.
Problem
#188 fixed
claude-auto-pilot-fable-v1-canary/claude-mythos-*-canaryby adding two literalcurated.fuzzysubstring rules ("fable","mythos"). This is a per-model-name patch, not a fix to the underlying gap:src/lib/pricing/matcher.jshas no tier that recognizes the<vendor>-auto-pilot-<name>-v<N>-canarynaming shape in general.Any future renamed/canary model whose base name is not already a short LiteLLM substring (the reason
gpt-5.6-auto-pilot-*survived —"gpt-5"/"gpt-5.6"happen to already be short LiteLLM keys) will reproduce the exact same silent-$0 bug, requiring another one-line curated patch and another release cycle.Also a real risk introduced by the current fix:
{"match": "fable", "ref": "claude-fable-5"}is a bare substring rule — any future model id containing the literal substring"fable"(e.g. a hypothetical distinct cheaperfable-mini) will silently inherit the Opus-tier ($10/$50) Fable 5 price via fuzzy match, not because it is actually that model, but because the substring matched.Ask
Design a normalizer for
source: "hermes"(or general) that strips known infix/suffix noise (-auto-pilot-,-v\d+-canary,-canary,-preview) before running the existing lookup ladder, so vendor-renamed ids resolve to their real base model without a hand-added fuzzy rule per name. This ismatcher.jsresolve-order work — evaluate as a proper design pass, not another one-line patch, given the risk noted above.Evidence
src/lib/pricing/matcher.js:103-206(lookupPricingresolve order, all 7 tiers require contiguous substring or exact match)src/lib/pricing/curated-overrides.json(fable/mythos fuzzy rules added in fix(pricing): resolve fable/mythos canary variants via fuzzy match #188)claude-auto-pilot-fable-v1-canaryandclaude-mythos-v1-canaryboth hitmisspre-fix(pricing): resolve fable/mythos canary variants via fuzzy match #188;gpt-5.6-auto-pilot-*-canarysurvived only becauselitellm:fuzzyhappened to match the shortgpt-5/gpt-5.6LiteLLM keys as substrings.