feat(ui): add codex fast service-tier toggle

This commit is contained in:
milesnguyen2405 committed 2026-07-22 15:13:42 +07:00
1 parent 30b54a0966
commit 108ff843f1
4 files changed
+80 -1

No files matched your search

@@ -18,15 +18,22 @@ import {
SelectValue,
} from '@/components/ui/select';
import { Skeleton } from '@/components/ui/skeleton';
import { Switch } from '@/components/ui/switch';
import type { CliproxyProviderRoutingHints } from '@/lib/api-client';
import type { CodexEffort, CodexServiceTier } from '@/lib/codex-effort';
import {
applyCodexServiceTierSuffix,
getCodexEffortDisplay,
getCodexEffortVariants,
parseCodexEffort,
parseCodexServiceTier,
stripCodexEffortSuffix,
} from '@/lib/codex-effort';
import { getResolvedCatalogModels, getSupplementalCatalogModels } from '@/lib/model-catalogs';
import {
findCatalogModel,
getResolvedCatalogModels,
getSupplementalCatalogModels,
} from '@/lib/model-catalogs';
import { getReasoningAdapter } from '@/lib/reasoning-control';
import { cn } from '@/lib/utils';
@@ -586,6 +593,19 @@ export function FlexibleModelSelector({
!selectableReasoningLevels.includes(currentReasoningLevel)
? [...selectableReasoningLevels, currentReasoningLevel]
: selectableReasoningLevels;
const currentServiceTier = isCodexProvider ? parseCodexServiceTier(value) : undefined;
const selectedCodexBaseModel =
isCodexProvider && catalog && value
? findCatalogModel(
catalog.provider,
stripCodexEffortSuffix(normalizeModelValue(value, routing)),
catalog
)
: undefined;
const showFastToggle =
isCodexProvider &&
(selectedCodexBaseModel?.codexServiceTiers?.includes('fast') === true ||
currentServiceTier === 'fast');
return (
<div className="space-y-1.5">
@@ -702,6 +722,19 @@ export function FlexibleModelSelector({
</SelectContent>
</Select>
)}
{showFastToggle && (
<label className="flex h-9 shrink-0 items-center gap-1.5">
<Switch
checked={currentServiceTier === 'fast'}
onCheckedChange={(checked) => onChange(applyCodexServiceTierSuffix(value, checked))}
disabled={disabled || !value}
aria-label={t('providerModelSelector.fastTier')}
/>
<span className="text-xs text-muted-foreground">
{t('providerModelSelector.fastTier')}
</span>
</label>
)}
</div>
{selectedRoutingHint ? (
<div