From 3fe8599a22897b51fda3b049bd28589ba2896e4d Mon Sep 17 00:00:00 2001 From: ciregenz Date: Fri, 3 Jul 2026 03:12:26 -0700 Subject: [PATCH] [eric] chat: restore the model-picker trigger (was inside the removed mode pill) --- .../ChatInput/toolbar/ChatInputToolbar.tsx | 8 ++++ .../ChatInput/toolbar/ModelControl.tsx | 44 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 frontend/src/app/pages/AgentChat/ChatInput/toolbar/ModelControl.tsx diff --git a/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar.tsx b/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar.tsx index bbc491e5..045e199f 100644 --- a/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar.tsx +++ b/frontend/src/app/pages/AgentChat/ChatInput/toolbar/ChatInputToolbar.tsx @@ -3,6 +3,7 @@ import Box from '@mui/material/Box'; import { useElementSelection } from '@/app/components/editor/ElementSelectionContext'; import { ClaudeTokens } from '@/shared/styles/claudeTokens'; import { ContextRing } from './ContextRing'; +import { ModelControl } from './ModelControl'; import { ModelPickerMenu } from '../model-picker/ModelPickerMenu'; import { ThinkingLevelControl } from './ThinkingLevelControl'; import { ToolbarActions } from './ToolbarActions'; @@ -93,6 +94,13 @@ export const ChatInputToolbar: React.FC = (p) => { pt: 0, }} > + + void; + allModelFlat: Array; + model: string; +} + +// The model-name trigger that opens ModelPickerMenu. Lived inside ModeControl until modes were hidden from the UI; the picker needs its button regardless of modes. +export const ModelControl: React.FC = ({ c, setModelAnchor, allModelFlat, model }) => { + // On the free trial the model is fixed server-side, so there's nothing to pick: hide the control. The moment a real model is connected we show it again, even if trial state lingers (gate on !hasModelConnected, not just the trial flag). + const hideModelPicker = useAppSelector((s) => hasFreeTrialActive(s) && !hasModelConnected(s)); + if (hideModelPicker) return null; + return ( + setModelAnchor(e.currentTarget)} + sx={{ + display: 'inline-flex', + alignItems: 'center', + gap: 0.25, + px: 0.75, + py: 0.25, + borderRadius: '6px', + cursor: 'pointer', + userSelect: 'none', + color: c.text.muted, + '&:hover': { bgcolor: 'rgba(0,0,0,0.04)' }, + transition: 'background 0.15s', + }} + > + + {(() => { const m = allModelFlat.find((m) => m.value === model); return m ? m.label : model; })()} + + + + ); +};