agent page: show resolved model as the model badge's tooltip
mara: 'i cannot see if sonnet became claude-sonnet-5 or something else.' /api/state now carries resolved_model (bus.last_resolved_model(), already used by serve_common.rs's turn-stats rollup for the same alias-vs-actual reason) and the model badge shows it as a title tooltip, same pattern as the ctx/cost badges.
This commit is contained in:
parent
a5ea1e523d
commit
c73ce03244
4 changed files with 26 additions and 1 deletions
|
|
@ -192,6 +192,7 @@ export function Root() {
|
|||
stateTone={turnDef.tone}
|
||||
stateTooltip={STATE_TOOLTIPS[effectiveTurnState]}
|
||||
model={state.model}
|
||||
resolvedModel={state.resolved_model ?? undefined}
|
||||
availableModels={state.available_models}
|
||||
onSelectModel={(name) => {
|
||||
postModel(name).then(() => refresh());
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ export interface StatusChipsProps {
|
|||
stateTone: BadgeTone;
|
||||
stateTooltip?: string;
|
||||
model: string;
|
||||
/** Concrete model id the last completed turn actually ran on, e.g.
|
||||
* "claude-sonnet-4-5-20260805" — shown as the badge's tooltip so the
|
||||
* operator can tell what an alias resolved to. `undefined` before any
|
||||
* turn has completed. */
|
||||
resolvedModel?: string;
|
||||
availableModels: string[];
|
||||
onSelectModel: (name: string) => void;
|
||||
effort: string;
|
||||
|
|
@ -54,12 +59,14 @@ function Picker({
|
|||
options,
|
||||
descriptions,
|
||||
onSelect,
|
||||
title,
|
||||
}: {
|
||||
label: string;
|
||||
value: string;
|
||||
options: string[];
|
||||
descriptions: Record<string, string>;
|
||||
onSelect: (v: string) => void;
|
||||
title?: string;
|
||||
}) {
|
||||
const [open, setOpen] = useState(false);
|
||||
const dropdownOptions: DropdownOption[] = options.map((name) => ({
|
||||
|
|
@ -69,7 +76,7 @@ function Picker({
|
|||
}));
|
||||
return (
|
||||
<div class="status-chip-anchor">
|
||||
<Badge label={label} value={value} onClick={() => setOpen((o) => !o)} expanded={open} />
|
||||
<Badge label={label} value={value} onClick={() => setOpen((o) => !o)} expanded={open} title={title} />
|
||||
<Dropdown
|
||||
open={open}
|
||||
options={dropdownOptions}
|
||||
|
|
@ -92,6 +99,7 @@ export function StatusChips({
|
|||
stateTone,
|
||||
stateTooltip,
|
||||
model,
|
||||
resolvedModel,
|
||||
availableModels,
|
||||
onSelectModel,
|
||||
effort,
|
||||
|
|
@ -123,6 +131,7 @@ export function StatusChips({
|
|||
options={availableModels}
|
||||
descriptions={MODEL_DESCRIPTIONS}
|
||||
onSelect={onSelectModel}
|
||||
title={resolvedModel ? `resolved to ${resolvedModel}` : undefined}
|
||||
/>
|
||||
{availableEfforts.length ? (
|
||||
<Picker
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ export interface AgentState {
|
|||
turn_state: string;
|
||||
turn_state_since: number;
|
||||
model: string;
|
||||
resolved_model: string | null;
|
||||
context_window_tokens: number;
|
||||
ctx_usage: TokenUsage | null;
|
||||
cost_usage: TokenUsage | null;
|
||||
|
|
|
|||
Loading…
Reference in a new issue