diff --git a/apps/mobile/src/components/ComposerModelControl.tsx b/apps/mobile/src/components/ComposerModelControl.tsx index 431cf61b1ec62..7acb161e9fc8f 100644 --- a/apps/mobile/src/components/ComposerModelControl.tsx +++ b/apps/mobile/src/components/ComposerModelControl.tsx @@ -70,7 +70,7 @@ export function ComposerModelControl(props: { /> ) } - label={label} + label={props.modelOption?.shortLabel ?? label} iconOnly={props.iconOnly} suffix={ summary ? ( diff --git a/apps/mobile/src/features/threads/ThreadSettingsRows.shared.tsx b/apps/mobile/src/features/threads/ThreadSettingsRows.shared.tsx index 384195ec5fadb..d3a35fccdd354 100644 --- a/apps/mobile/src/features/threads/ThreadSettingsRows.shared.tsx +++ b/apps/mobile/src/features/threads/ThreadSettingsRows.shared.tsx @@ -67,7 +67,7 @@ export function ModelRowContent( className="min-w-0 shrink text-base font-t3-medium text-foreground" numberOfLines={props.labelNumberOfLines} > - {props.option.label} + {props.option.shortLabel} {props.option.isDefault ? ( diff --git a/apps/mobile/src/features/threads/thread-settings-sheet-state.test.ts b/apps/mobile/src/features/threads/thread-settings-sheet-state.test.ts index 53b5874c7e3a7..15518420e5520 100644 --- a/apps/mobile/src/features/threads/thread-settings-sheet-state.test.ts +++ b/apps/mobile/src/features/threads/thread-settings-sheet-state.test.ts @@ -20,6 +20,7 @@ function modelOption( return { key: `codex:${model}`, label: model, + shortLabel: model, subtitle: "", providerKey: "codex", providerLabel: "Codex", diff --git a/apps/mobile/src/lib/modelOptions.ts b/apps/mobile/src/lib/modelOptions.ts index c36c63a4f1457..acd8db954a2fd 100644 --- a/apps/mobile/src/lib/modelOptions.ts +++ b/apps/mobile/src/lib/modelOptions.ts @@ -20,6 +20,8 @@ import { export type ModelOption = { readonly key: string; readonly label: string; + /** Shown beside the provider's icon, where the provider's own brand would repeat it. */ + readonly shortLabel: string; readonly subtitle: string; readonly providerKey: string; readonly providerLabel: string; @@ -322,6 +324,7 @@ export function buildModelOptions( options.set(key, { key, label: model.name, + shortLabel: model.shortName ?? model.name, subtitle: model.subProvider ?? "", providerKey: provider.instanceId, providerLabel, @@ -387,6 +390,7 @@ export function buildModelOptions( options.set(key, { key, label: model?.name ?? fallbackModelSelection.model, + shortLabel: model?.shortName ?? model?.name ?? fallbackModelSelection.model, subtitle: model?.subProvider ?? "", providerKey: fallbackModelSelection.instanceId, providerLabel, diff --git a/apps/server/src/provider/model-manifest.json b/apps/server/src/provider/model-manifest.json index 9d2f5ae7256bc..c0a35166478e6 100644 --- a/apps/server/src/provider/model-manifest.json +++ b/apps/server/src/provider/model-manifest.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-26T20:00:36Z", + "updatedAt": "2026-10-27T12:00:00Z", "compatibility": [ { "driver": "codex", @@ -678,6 +678,7 @@ { "slug": "claude-opus-5-5", "name": "Claude Opus 5.5", + "shortName": "Opus 5.5", "aliases": ["opus", "opus-5.5", "claude-opus-5.5"], "status": "current", "profile": "opus-5-5", @@ -686,6 +687,7 @@ { "slug": "claude-sonnet-5-5", "name": "Claude Sonnet 5.5", + "shortName": "Sonnet 5.5", "aliases": ["sonnet", "sonnet-5.5", "claude-sonnet-5.5"], "status": "current", "profile": "sonnet-5", @@ -694,6 +696,7 @@ { "slug": "claude-fable-5-1", "name": "Claude Fable 5.1", + "shortName": "Fable 5.1", "aliases": ["fable", "fable-5.1", "claude-fable-5.1"], "status": "current", "profile": "fable-5", @@ -706,6 +709,7 @@ { "slug": "claude-fable-5", "name": "Claude Fable 5", + "shortName": "Fable 5", "status": "legacy", "profile": "fable-5", "adapter": { @@ -717,6 +721,7 @@ { "slug": "claude-opus-5", "name": "Claude Opus 5", + "shortName": "Opus 5", "aliases": ["opus-5", "claude-opus-5.0", "claude-opus-5-0"], "status": "legacy", "profile": "opus-5", @@ -729,6 +734,7 @@ { "slug": "claude-opus-4-8", "name": "Claude Opus 4.8", + "shortName": "Opus 4.8", "aliases": ["opus-4.8", "claude-opus-4.8"], "status": "legacy", "profile": "opus-4-8", @@ -741,6 +747,7 @@ { "slug": "claude-opus-4-7", "name": "Claude Opus 4.7", + "shortName": "Opus 4.7", "aliases": ["opus-4.7", "claude-opus-4.7"], "status": "legacy", "profile": "opus-4-7", @@ -753,6 +760,7 @@ { "slug": "claude-opus-4-6", "name": "Claude Opus 4.6", + "shortName": "Opus 4.6", "aliases": ["opus-4.6", "claude-opus-4.6", "claude-opus-4-6-20251117"], "status": "legacy", "profile": "opus-4-6" @@ -760,12 +768,14 @@ { "slug": "claude-opus-4-5", "name": "Claude Opus 4.5", + "shortName": "Opus 4.5", "status": "legacy", "profile": "opus-4-5" }, { "slug": "claude-sonnet-5", "name": "Claude Sonnet 5", + "shortName": "Sonnet 5", "aliases": ["sonnet-5", "claude-sonnet-5.0", "claude-sonnet-5-0"], "status": "legacy", "profile": "sonnet-5" @@ -773,6 +783,7 @@ { "slug": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6", + "shortName": "Sonnet 4.6", "aliases": ["sonnet-4.6", "claude-sonnet-4.6", "claude-sonnet-4-6-20251117"], "status": "legacy", "profile": "sonnet-4-6" @@ -780,6 +791,7 @@ { "slug": "claude-haiku-5-5", "name": "Claude Haiku 5.5", + "shortName": "Haiku 5.5", "aliases": ["haiku", "haiku-5.5", "claude-haiku-5.5"], "status": "current", "releasedAt": "2026-10-07", @@ -789,6 +801,7 @@ { "slug": "claude-haiku-4-5", "name": "Claude Haiku 4.5", + "shortName": "Haiku 4.5", "aliases": ["haiku-4.5", "claude-haiku-4.5", "claude-haiku-4-5-20251001"], "status": "legacy", "profile": "haiku-4-5" diff --git a/apps/web/src/components/chat/ModelListRow.tsx b/apps/web/src/components/chat/ModelListRow.tsx index ec72827c3ca90..7c9fa5c96be96 100644 --- a/apps/web/src/components/chat/ModelListRow.tsx +++ b/apps/web/src/components/chat/ModelListRow.tsx @@ -1,11 +1,7 @@ import { type ProviderDriverKind, type ProviderInstanceId } from "@t3tools/contracts"; import { memo } from "react"; import { CheckIcon, StarIcon } from "lucide-react"; -import { - getDisplayModelName, - getProviderRowLabel, - getTriggerDisplayModelLabel, -} from "./providerIconUtils"; +import { getProviderRowLabel, getTriggerDisplayModelName } from "./providerIconUtils"; import { ComboboxItem } from "../ui/combobox"; import { Button } from "../ui/button"; import { Badge } from "../ui/badge"; @@ -31,8 +27,6 @@ export const ModelListRow = memo(function ModelListRow(props: { isSelected: boolean; showSelection?: boolean; showProvider: boolean; - preferShortName?: boolean; - useTriggerLabel?: boolean; showNewBadge?: boolean; unavailable?: boolean; jumpLabel?: string | null; @@ -62,12 +56,7 @@ export const ModelListRow = memo(function ModelListRow(props: {
- {props.useTriggerLabel - ? getTriggerDisplayModelLabel(model) - : getDisplayModelName( - model, - props.preferShortName ? { preferShortName: true } : undefined, - )} + {getTriggerDisplayModelName(model)}
{props.showNewBadge ? (