[BUG] modelPicker drops aws regional Fable rows as duplicates of the built-in Fable row

Status Open
Reported on v2.1.292
Maintainer reply None cached
Activity 0 comments · opened Oct 7, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When modelPicker.replaceBuiltInOptions is unset, a curated modelPicker.options row whose model is a regional Bedrock inference profile for a Fable model (us.anthropic.claude-fable-5-1[1m], eu.anthropic.claude-fable-5-1[1m]) does not appear in /model. The CLI treats it as a duplicate of the built-in Fable row (global.anthropic.claude-fable-5-1[1m]) and drops it without a warning. The same configuration works for Opus: us./eu. Opus rows appear next to the built-in global. Opus row.

Cause (from the 2.1.292 bundle, minified names)

The picker appends each curated row only when no existing row matches it:

if (s.replaceBuiltInOptions === !0) return [...e.filter((x) => x.value === null), ...S];
let w = [...e];
for (let x of S) if (!w.some((C) => ts(C, x))) w.push(x);

The matcher ts has a Fable-family special case. Before comparing full IDs, it reduces both values with vO:

function ts(e, n) {
  if (e.value === n.value) return !0;
  ...
  let r = vO(e.value), s = vO(n.value);
  if (r !== void 0 && s !== void 0 && (r === s || r === OS || s === OS)) return !0;
  ...
}

vO pulls the bare model ID out with a regex that accepts any prefix ending in . or /:

new RegExp(`(?:^|[./])(${fableIds.join("|")})(?:[-@]\\d{8})?(?:-v\\d+(?::\\d+)?)?(?:\\[[12]m\\])?$`, "i")

So us.anthropic.claude-fable-5-1[1m], eu.anthropic.claude-fable-5-1[1m] and global.anthropic.claude-fable-5-1[1m] all reduce to claude-fable-5-1 and are treated as the same model. The inference-profile prefix is thrown away, even though these are different routing targets that an admin may want to offer separately (data residency, regional capacity, failover). Non-Fable families don't go through this path, which is why Opus behaves differently.

Workaround (issues)

Setting "replaceBuiltInOptions": true skips the dedup. The admin then has to list every built-in model by hand. Per the setting's own description, this also hides gateway-discovered models and ANTHROPIC_CUSTOM_MODEL_OPTION.

What Should Happen?

Any one of these would solve it:

  • When deduping curated modelPicker rows against the built-in lineup, match only on exact value and skip family-level matching. An admin who lists a row explicitly almost certainly wants it shown.
  • Keep the inference-profile or provider prefix (us., eu., apac., global., ARNs) as part of the identity in vO, so that only alias-vs-full-ID cases (fable vs claude-fable-5-1) collapse.
  • At minimum, show a settings warning when a curated row is dropped as a duplicate, naming the row it matched.

Error Messages/Logs

Steps to Reproduce

Managed settings:

{
  "env": {
    "ANTHROPIC_DEFAULT_FABLE_MODEL": "global.anthropic.claude-fable-5-1[1m]",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "global.anthropic.claude-opus-5-5[1m]"
  },
  "modelPicker": {
    "options": [
      { "model": "us.anthropic.claude-fable-5-1[1m]", "label": "Fable 5.1 (US)" },
      { "model": "eu.anthropic.claude-fable-5-1[1m]", "label": "Fable 5.1 (EU)" },
      { "model": "us.anthropic.claude-opus-5-5[1m]",  "label": "Opus 5.5 (US)" },
      { "model": "eu.anthropic.claude-opus-5-5[1m]",  "label": "Opus 5.5 (EU)" }
    ]
  }
}
  1. Start Claude Code and open /model.
  2. Expected: the built-in rows, then all four curated rows.
  3. Actual: the built-in rows, then only "Opus 5.5 (US)" and "Opus 5.5 (EU)". Both Fable rows are missing. No settings warning is shown.

/model us.anthropic.claude-fable-5-1[1m] still works and shows the label "Fable 5.1 (US)". The rows are loaded, they just aren't listed.

Claude Model

Other

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.192

Platform

AWS Bedrock

Operating System

Ubuntu/Debian Linux

Terminal/Shell

VS Code integrated terminal

Additional Information

_No response_

View original on GitHub ↗