Models & APIs — by function

The console's Models & APIs tab regrouped onto the ledger's eight groups — speech · fp · tool · kit · persona · photo · room · app — in the Usage & cost tab's order and colours, so a figure on Usage ▸ By function and the knob that moves it are one hop apart. Every leaf of the vocabulary gets a row, including the eleven that have no knob today.

Status: BUILT 2026-08-24 — live on main, not yet on the box. The console's Models & APIs tab is this page's §2, for real: lib/admin.html loadModels() renders the eight groups off U_GROUPS, the fixed seats come from GET /api/admin/modelsfixed, and Usage ▸ By function ⇄ Models hop both ways on a tab/group hash. §2 stays as the design specimen (its radios are paint); §3 is the leaf map; §5 is what shipped beyond the mock — the owner's build rules. v2 (owner's review of v1): one row format for everything — a radio row, the console's own — the stored kind as every card's key, no explanatory text, an explicit Inherit row where inherit is the default, and a single checked radio where there is no choice. v3: every row marks thinking on / off explicitly (a switch where it is a choice, a word where it is not); an Inherit row shows the model it resolves to; the kind key and the group name wear the group's colour; sans for all — no mono anywhere in the tab; room.title is Flash only.

1 · Two maps of one thing

A reader of the console holds two different groupings of the same money. Usage stacks spend by the ledger's call kind — the closed group.leaf vocabulary of usage-dashboard §3, eight coloured groups. Models lays the knobs out by which part of the product they sit in — six uncoloured surfaces. So「kit cost $3.10 this week」sends the reader to Models to find… no kit.

Usage ▸ By function — 8 groups, coloured
speech3 leaves
fp1
tool3
kit5
persona4
photo3
room3
app5
Models & APIs today — 6 surfaces, no colour
Chatspanel · curator · FP ×2 · dispatch
NotesSeen ×3
The toolboxact · prop master · auto-title
Vibesengine · news
Persona Studio7 build steps
API pricesLLM · image · search · STT
not on the page at all11 of 28 leaves

The eleven missing leaves — kit.* ×5, persona.* ×4, photo.* ×3 less the eyes' price row, room.translate, speech.interrogate, tool.promised — are not missing by accident: their model is a constant in code, so there was never a knob to draw. But the page is read as an inventory (「every model & search API, by role」 is its own subtitle), and an inventory that omits a third of the ledger is a page that cannot answer「what runs persona.dream?」.

The three rules of the regrouping

  1. Same eight, same order, same colours. The groups are U_GROUPS — the usage tab's own list, in the same file. A group rail under the tab title is the usage chart's legend made a navigation: one chip per group, the chart's colour, the leaf count; click to jump, and it follows the scroll.
  2. Every leaf has a card, and every card is the same card. The key is the stored kind (room.translate), then the name (Translate on divergence); the rows are the console's radio rows. Where a setting exists the rows are the choices you have today, untouched. Where the model is a constant in code the card has one row, one radio, checked — the fact, in the same format as a choice. Where inherit is the default, the Inherit row is written out, followed by the model it resolves to. Every row marks thinkingthinking off / thinking on as a word, with the switch beside it where it is a choice — so a call that cannot think says so instead of saying nothing. No descriptive text anywhere; the server reports the constants, the page never names a model itself.
  3. Prices stay one surface — a ninth, neutral stop at the end. It is not a group; it is what every group above is billed from.
Considered and dropped: a second left rail inside the tab (the console already has one; two nested rails on a 1100px content column squeeze the cards) and tabs-within-the-tab (hides seven groups to show one — the point is to see that the eight are the same eight). Chips keep the whole vocabulary in view at once, which is the cross-reference doing its job.

2 · The tab

Markup and classes lifted from lib/admin.html, set in sans; the rail, the group header, the kind-as-key card header and the thinking mark are the new pieces; every row is the console's .mrow.

Console ▸ Models & APIsMOCK-UP

Models & APIs

Every model & search API, by function — the same eight as Usage ▸ By function.

Everything on this page saves on change — no Save button.

speechUsage ›
speechPanelthe personas' replies · users choose, default pre-selected
Sonnet 4.6Anthropic
thinking off
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
DeepSeek V4 Flash VisionDeepSeek
thinking off
speech.interrogateThe interrogation's mind
DeepSeek V4 ProDeepSeek
thinking on
speech.emptyEmpty reply, retried
Inherit the chat's panel model·DeepSeek V4 ProDeepSeek
thinking off
fpFloor producer · openingstages the kickoff · Off = fixed cue · admin
Off
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
fpFloor producer · mid chatthe per-turn director when FP is on · admin
Mechanical
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
tool.propThe prop masterruns in front of the act call
Off
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
tool.actThe act callsets the instruments while the panel speaks
Inherit the chat's panel model·DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
tool.promisedThe wake-door check
DeepSeek V4 FlashDeepSeek
thinking off
kit.interpreterThe interpreter
DeepSeek V4 FlashDeepSeek
thinking off
kit.rulingThe side ruling
DeepSeek V4 FlashDeepSeek
thinking off
kit.voiceThe host's voice
DeepSeek V4 FlashDeepSeek
thinking off
kit.routeThe thread router
DeepSeek V4 FlashDeepSeek
thinking off
kit.authoringKit authoring
Inherit the chat's panel model·DeepSeek V4 ProDeepSeek
thinking off
personaUsage ›
persona.memoryMemory writer
DeepSeek V4 FlashDeepSeek
thinking off
persona.dreamThe dream
DeepSeek V4 FlashDeepSeek
thinking off
persona.growthGrowth sweep
the sweep
DeepSeek V4 FlashDeepSeek
thinking off
the search
SerperSerper
persona.embedThe embedder
Gemini EmbeddingGoogle
photo.shadowphoto.lookThe eyes
every photo
DeepSeek V4 Flash VisionDeepSeek
thinking off · on for a study
dense pictures
Gemini 3.7 FlashGoogle
thinking off · on for a study
photo.gateThe look gate
DeepSeek V4 FlashDeepSeek
thinking off
room.translateTranslate on divergence
DeepSeek V4 FlashDeepSeek
thinking off
room.titleChat auto-title
DeepSeek V4 FlashDeepSeek
thinking off
room.dispatchDispatch@Web Search brief · admin
Claude web searchAnthropicalways Haiku 4.5
thinking off
Search API + DeepSeek V4 FlashDeepSeek
thinking off
Serper EN Brave EN backup Bocha 中文
EN: Serper→Brave · 中文: Bocha ∥ Serper merged → Brave
app.convenePanel curatornew-chat picker · admin
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
app.seenSeenthe insight piece · admin
writer rank
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
the writer
DeepSeek V4 ProDeepSeek
thinking on
DeepSeek V4 FlashDeepSeek
thinking off
hero image
Nano Banana 2 LiteGoogle
Nano Banana 2Google
Imagen 4 FastGoogle
app.vibesVibesthe daily brew · volume in the Vibes tab
the engine model
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
news source
Serper EN news + scrape Brave EN backup Bocha 中文
app.studioPersona Studiomodel + thinking per build stage · admin
identity
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
gather
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
curate
DeepSeek V4 ProDeepSeek
thinking on
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
author
DeepSeek V4 ProDeepSeek
thinking on
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
patch
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
audit A
DeepSeek V4 ProDeepSeek
thinking on
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking off
audit B
DeepSeek V4 ProDeepSeek
thinking off
DeepSeek V4 FlashDeepSeek
thinking off
Gemini 3.5 FlashGoogle
thinking high
app.sttDictation
iFlytek 中英识别大模型iFlytek
prices
LLM · $ per million tokens drives every bill · cache-aware · saves on changeDeepSeek off-peak now · 00:30–08:30 UTC
modelinputcache write 5mcache write 1hcache readoutput
Opus 4.8Anthropic
Sonnet 5Anthropic
Haiku 4.5Anthropic
DeepSeek V4 ProDeepSeekoff-peak
DeepSeek V4 FlashDeepSeekoff-peak
Gemini 3.7 FlashGoogle
Gemini 3.5 FlashGoogle
Gemini EmbeddingGoogle
Image · $ per image Seen hero · Google
Nano Banana 2 LiteGoogle$/image
Nano Banana 2Google$/image
Imagen 4 FastGoogle$/image
Search APIs · $ per 1k requests serper · brave · bocha
Serperserper$/1k
Bravebrave$/1k
Bochabocha$/1k
Speech-to-text · $ per call composer dictation · billed per signed session
iFlytek 中英识别大模型iFlytek$/call

3 · The map — every leaf, its row

The build follows this table: 28 stored kinds, where each sits today, and what its card holds. choice = an existing setting, moved as-is · one radio = a constant in code, one checked row · inherit = an Inherit row, checked.

groupleaftodaycardthe model (today's constant)
speechspeechChats ▸ Panelchoicethe user's switcher · default pre-selected
speech.interrogateone radioPROBE_MIND_MODEL = deepseek-v4-pro · thinking ON (the one fixed call that thinks)
speech.emptyinheritthe panel's model, retried
fpfpChats ▸ Floor producer ×2choiceOff / Mechanical · V4 Pro · V4 Flash · ± reasoning
tooltool.propThe toolbox ▸ prop masterchoice — Off · Pro · Flash (the switch folds into Off)PROP_GATE_MODEL · env MAD_PROP_GATE_MODEL
tool.actThe toolbox ▸ act callchoice + inheritinherit · V4 Pro · V4 Flash
tool.promisedone radioACT_GATE_MODEL = deepseek-v4-flash · env MAD_ACT_GATE_MODEL
kitkit.interpreterone radiodeepseek-v4-flash (inline)
kit.rulingone radiodeepseek-v4-flash (inline)
kit.voiceone radiodeepseek-v4-flash (inline)
kit.routeone radioPROBE_ROUTE_MODEL = deepseek-v4-flash
kit.authoringchoice + inheritauthoring_model: "" (inherit) · deepseek-v4-pro
personapersona.memoryone radioMEMORY_MODEL = deepseek-v4-flash
persona.dreamone radioMEMORY_MODEL = deepseek-v4-flash
persona.growthone radio ×2RECENT_MODEL = deepseek-v4-flash · the sweep + Serper, the search
persona.embedone radiowordpick.EMBED_MODEL = gemini-embedding-001
photophoto.shadow— (price row only)one radio ×2 — every photo · dense picturesPHOTO_MODEL = deepseek-v4-flash-vision-exp · PHOTO_DENSE_EYES = gemini-3.7-flash
photo.gateone radioPHOTO_GATE_MODEL = deepseek-v4-flash
photo.lookshares the eyes cardthe same eyes as the shadow
roomroom.translateone radioTRANSLATE_MODEL = deepseek-v4-flash
room.titleThe toolbox ▸ auto-titleone radioV4 Flash only — the Pro row is dropped (v3)
room.dispatchChats ▸ DispatchchoiceClaude native (Haiku 4.5) · SERP + V4 Flash
appapp.conveneChats ▸ Panel curatorchoiceV4 Pro · V4 Flash · ± reasoning
app.seenNotes ▸ Seenchoice ×3rank · writer · hero image
app.vibesVibeschoiceengine model · news chain
app.studioPersona Studiochoice ×7the step matrix
app.sttAPI prices ▸ STTone radioiFlytek · the price stays under prices
pricesAPI pricesas todayLLM · image · search · STT — one surface

4 · What changes (the plan, as built)

5 · What shipped beyond the mock — the owner's build rules

-ish · Models & APIs — by function · mocked and built 2026-08-24 · lib/admin.html loadModels() · the vocabulary from docs/usage-dashboard.html §3