Skip to content

feat: show the spoken model name on the composer model button - #24237

Closed
flamboh wants to merge 9 commits into
pingdotgg:mainfrom
flamboh:t3/composer-core-model-label
Closed

flamboh wants to merge 9 commits into
pingdotgg:mainfrom
flamboh:t3/composer-core-model-label

Conversation

@flamboh

@flamboh flamboh commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Important

Stacked on #24205. Merge that first; this PR's own change is the top commit, e994e8b.

Problem

The composer's model button shows the full catalog name, so models from OpenCode, Pi and aggregators read like "Nemotron 3.5 Super VL Free", "LongCat 2.5 Preview Free" or "Gemini 3.1 Pro Preview Custom Tools". The extra words (free tier, preview, reasoning variant, sizes, hosts, dates) crowd out the part that says which model you're on.

Fix

The composer button now shows the name you'd say out loud. composerModelLabel (packages/client-runtime/src/modelLabel.ts, shared by web and mobile) takes the short name from #24205 and removes:

  • vendor prefixes ("NVIDIA: ") and anything in parentheses, including nested ones
  • trailing variant words: Free, Preview, Exp, Instruct, Chat, Turbo, Spot, Latest, New, Thinking, Reasoning, Non-Reasoning, Distilled, Custom Tools, VL, Vision, quantization (FP8, BF16, …) and date stamps (2507, 1017)
  • parameter sizes, unless the size is what tells the model apart
Catalog name Composer shows
Nemotron 3.5 Super VL Free Nemotron 3.5 Super
LongCat 2.5 Preview Free LongCat 2.5
DeepSeek V4 Pro (New) DeepSeek V4 Pro
Gemini 3.1 Pro Preview Custom Tools (on Antigravity) 3.1 Pro
Grok 4.20 (Non-Reasoning) Grok 4.20
Llama 4 Maverick 17B Instruct (US) Llama 4 Maverick
Qwen3 235B-A22B Thinking 2507 Qwen3 235B
3.1 Flash Image Preview (Nano Banana 2) 3.1 Flash Image
Opus 5.5, 6.1 Sol, GPT-5.5, Grok 4, 4 Argon unchanged

"Image" stays so an image-generation model, which can't run tools, is never mistaken for its text sibling.

Only the visible composer button changes: web's ProviderModelPicker trigger and mobile's ComposerModelControl. The hover tooltip, accessibility label, model picker rows and search keep the fuller names, so that's where a free model and its paid twin are told apart. Labels that are still long keep the existing end truncation.

Scope and approval

Same direction as #24205, which Oliver and Julius have been discussing on Discord: the composer shows a spoken model name and the detail lives in the tooltip and picker.

Evidence

Web composer button, with the full name in the tooltip and picker rows:

Web before/after: Nemotron 3.5 Super VL Free → Nemotron 3.5 Super, LongCat 2.5 Preview Free → LongCat 2.5, DeepSeek V4 Pro (New) → DeepSeek V4 Pro, Opus 5.5 unchanged

iOS, iPhone 18 Pro, focused wrapped draft so the label is visible:

iOS before/after on iPhone 18 Pro: same four models

On iOS, "Nemotron 3.5 Super" still truncates because the label and the "Low · Build" settings suffix shrink together on a 402pt row.

Validation

  • modelLabel.test.ts: one table covering the rows above plus nested parentheses, punctuation-only separators and the size rule.
  • Checked against the ~60 longest models.dev and OpenRouter names; slug-style names such as "Llama-3.2-11B-Vision-Instruct" are left to truncation.
  • vp run check:changed passes.

Made with Claude Opus 5.5 in Claude Code (via T3 Code); captures by GPT-6.1 Sol in Codex.

flamboh and others added 9 commits October 23, 2026 21:08
The provider registry now derives shortName for every reported model,
including custom ones: the family prefix (Claude, GPT-, Gemini, Muse,
Grok) is dropped on the family's own provider, and elsewhere only when
the rest still names a model. Names never shrink to a bare version.

Mobile's composer model control shows the short name; the web picker
trigger's tooltip now shows the full name.

Co-Authored-By: Claude Opus 5.5 (Claude Code) <noreply@anthropic.com>
The registry now stores and persists snapshots without computed short
names and derives them at its public API, so cached and retained models
never carry a value from an older rule. Explicit manifest short names
still win.

The web multi-model tooltip and the context-window popover show full
model names.

Co-Authored-By: Claude Opus 5.5 (Claude Code) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 23, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — This PR changes the default composer presentation across web and mobile and adds shared/server-side model-name parsing that affects provider snapshots and live updates. Although the API addition is optional and model execution is unchanged, the cross-surface behavior change and non-trivial heuristics merit human review.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 9a391eb and e994e8b.

📒 Files selected for processing: 12
  • apps/mobile/src/components/ComposerModelControl.tsx
  • apps/mobile/src/lib/modelOptions.ts
  • apps/server/src/provider/ProviderRegistry.test.ts
  • apps/server/src/provider/ProviderRegistry.ts
  • apps/server/src/provider/modelShortName.test.ts
  • apps/server/src/provider/modelShortName.ts
  • apps/web/src/components/chat/ContextWindowMeter.logic.test.ts
  • apps/web/src/components/chat/ContextWindowMeter.logic.ts
  • apps/web/src/components/chat/ProviderModelPicker.tsx
  • packages/client-runtime/package.json
  • packages/client-runtime/src/modelLabel.test.ts
  • packages/client-runtime/src/modelLabel.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

📝 Walkthrough

The change adds derived model short names and shared composer label formatting. Mobile and web model controls use compact labels for display. The web picker retains full labels for tooltips, and the context window meter uses full model names.

Changes: Model Label Presentation

Layer / File(s) Summary
Derive and present provider short names
apps/server/src/provider/modelShortName.ts, apps/server/src/provider/modelShortName.test.ts, apps/server/src/provider/ProviderRegistry.ts, apps/server/src/provider/ProviderRegistry.test.ts
Provider models receive derived short names when they do not already have one. The registry adds these names to provider results and streamed changes. Tests cover name derivation and Pi inventory refresh behavior.
Add shared composer label formatting
packages/client-runtime/src/modelLabel.ts, packages/client-runtime/src/modelLabel.test.ts, packages/client-runtime/package.json
The client runtime adds and exports composerModelLabel. Tests cover model labels with vendor prefixes, variants, versions, and size tokens.
Use short labels in the mobile composer
apps/mobile/src/lib/modelOptions.ts, apps/mobile/src/components/ComposerModelControl.tsx
Mobile model options carry available short names. The composer control formats the short name when present, or its existing label otherwise.
Use compact and full labels in web chat
apps/web/src/components/chat/ProviderModelPicker.tsx, apps/web/src/components/chat/ContextWindowMeter.logic.ts, apps/web/src/components/chat/ContextWindowMeter.logic.test.ts
The model picker uses compact labels for display and full labels for tooltips. The context window meter uses the full display name for matched models.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature · Severity of issue fixed: Low

Possibly related issues

Possibly related PRs

  • pingdotgg/t3code#24205: This PR derives provider shortName values; this change consumes those values in the mobile control and adds shared label formatting.
  • pingdotgg/t3code#23986: Both changes update label formatting in the mobile composer model selector.

Suggested labels: size:L

Suggested reviewers: maria-rcks, yashranaway, macroscopeapp

Merge Risk: ⚪ Minimal · up to e994e

The composer continues to announce selected model names. No actionable issue remains after normal checks.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: showing a spoken model name on the composer model button.
Description check Passed The description clearly covers the problem, implementation, scope, screenshots, tests, and validation results. It does not provide a direct link to the approval discussion or an explicit maintainer ap…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description clearly covers the problem, implementation, scope, screenshots, tests, and validation results. It does not provide a direct link to the approval discussion or an explicit maintainer approval comment, but the overall description is complete and relevant.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@flamboh

flamboh commented Oct 24, 2026

Copy link
Copy Markdown
Contributor Author

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Folded into #24205: it is the same concern (how the model name reads in the composer), and this branch was already stacked on it. The commit, e994e8b, is now on #24205 unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant