Offer the lighter model for a small change, right where you press send - #11
Open
debtn wants to merge 1 commit into
Open
Offer the lighter model for a small change, right where you press send#11debtn wants to merge 1 commit into
debtn wants to merge 1 commit into
Conversation
Nobody needs Opus to rename a title. Nobody remembers to switch the model before a two-word change either — the model menu is the last thing on a person's mind mid-thought, and it stays wherever the last big change left it. So the heavy model ran every tiny edit, quietly, for everyone who never thought to look at the picker. The composer now notices. When a draft on a heavy model reads like a small change — a rename, a color, a typo, the preview's own "Copy change" and photo-swap messages — a quiet line appears above the composer: "Small change? Sonnet 5 can do this for about two-fifths of the cost", with one tap to use it for this message and one to keep what they have. It shows at the moment people forget: right before send, reading the draft as they type. It never fires on a plan, a first build, the home composer, or a model that is already light. It is a nudge, not a switch. The heavy model stays the default unless they tap; the one-shot ride never pins or moves the picker, and the very next message runs on whatever it would have. "Keep Opus 5" hushes it for the rest of the sitting — in memory on purpose, so a preference can never quietly persist forever. Armed, the chip becomes a plain statement of what is about to happen, with an undo. The judgment is deliberately conservative: the preview's mechanical messages, or a short single ask that talks like a tweak and never names anything with shape (a page, a feature, a login, a calendar, "everything"). A miss in either direction is cheap — a false small is a chip you ignore, a false big is no chip — which is what lets it stay simple. The cost fraction comes from first-party output prices (the proxy the Steward view already prices with), rounded to a fraction a person can hold, never a percentage with false precision. Driven in Chromium against the dev server with model requests captured off the wire: fourteen drafts judged as intended; the chip appears on a small draft, disappears on a big one, and the armed send goes out as claude-sonnet-5 while the picker stays on Opus, unpinned; the next send goes back to claude-opus-5; undo returns to the offer and keep hushes the sitting; no chip in plan mode, on a first build, or already on Sonnet; on Fable the fraction reads "a fifth". Zero page errors. tsc -b and vite build clean; lint at the same three pre-existing MessageInput problems, none in the new code. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RFnFvBZPsVQjc5Xwj7H9nZ
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Self-contained: one commit, three files (one new). Independent of #8 and #10.
The problem is forgetting, not choosing
The model menu is the last thing on a person's mind mid-thought, and it stays wherever the last big change left it. So the heavy model ran every tiny edit, quietly, for everyone who never thought to look at the picker. Any fix has to arrive at the moment of forgetting — right before send — or it's just one more thing to remember.
Ways to nudge, considered
What shipped
When a draft on a heavy model reads like a small change, one quiet line appears above the composer:
The judgment is deliberately conservative
"Small" means the preview's own mechanical messages (Copy change…, Swap this photo…), or a short single ask that talks like a tweak (rename, color, typo, bigger, spacing…) and never names anything with shape (a page, a feature, login, calendar, search, "everything", "also"). A miss in either direction is cheap — a false small is a chip you ignore; a false big is no chip — which is what lets the heuristic stay simple instead of clever.
The cost fraction uses first-party output prices (Fable $50 · Opus $25 · Sonnet $10 · Haiku $5 per MTok) — the same proxy the Steward view prices with — rounded to a fraction a person can hold, never a percentage with false precision. Sonnet 5 is the one-tier step for everything heavier; Haiku's shorter output cap and the SEARCH/REPLACE edit format make it a worse bet for real edits.
Files
src/components/Chat/lighter-model.ts— new: the small-change judgment, the lighter-model choice, the cost fraction, the session hushsrc/components/Chat/MessageInput.tsx— the chip;onSendgains an optional per-send{ model }src/components/Chat/ChatPanel.tsx— honors the one-shot model on the send path (after the community default logic, never on fix sends); the build log'sgen_startrecords what actually ranVerification
Driven in Chromium against the dev server, with every model request captured off the wire — 21 checks, zero page errors:
claude-sonnet-5; picker stays Opus, unpinnedclaude-opus-5tsc -bandvite buildclean.eslintsits at the same three pre-existing MessageInput problems as an untouched tree — none in the new code.What I'd do next, if this lands well
src/lib/energy.ts, as the companion rear-view mirror.One thing noticed in passing, not touched: the community monitor's price table prices
/sonnet/at $3/$15, which is Sonnet 4.6's rate — Sonnet 5 is $2/$10. Since the regex also matches Sonnet 5, the Steward view overstates Sonnet spend by half. Separate fix, owner's call.🤖 Generated with Claude Code
https://claude.ai/code/session_01RFnFvBZPsVQjc5Xwj7H9nZ
Generated by Claude Code