Model settings
ProWhich model an agent uses and how hard it thinks. Models from every vendor are listed; one whose zero-retention terms haven't been attested is shown locked with that reason, never hidden. The fallback must be attested too, and can't be the primary. When the viewer can't change the settings at all, every control is locked and says why.
Preview
Install
With the Candor CLI
First time? Get started sets up the registry and theme. Or with shadcn directly: npx shadcn@latest add @candor/model-settings
Brings in: know, locale, locked, select, utils · npm: lucide-react@^1.67.0
Usage
"use client"
import * as React from "react"
import { ModelSettings } from "@/components/model-settings"
import type { ModelOption, ModelSettingsValue } from "@/lib/know"
const models: ModelOption[] = [
{ id: "opus", vendor: "Anthropic", name: "Claude Opus 5.5", note: "Design, review and hard builds", cost: 4, zdr: "attested" },
{ id: "sonnet", vendor: "Anthropic", name: "Claude Sonnet 5.5", note: "Most delivery work", cost: 2, zdr: "attested" },
{ id: "gemini", vendor: "Google", name: "Gemini 3.1 Pro", note: "Long documents", cost: 3, zdr: "attested" },
{ id: "gpt", vendor: "OpenAI", name: "GPT-5.5", cost: 3, zdr: "not-attested" },
]
export default function Example() {
const [value, setValue] = React.useState<ModelSettingsValue>({ model: "sonnet", reasoning: "medium", stepLimit: 30, fallback: "gemini" })
return <ModelSettings className="max-w-2xl" value={value} onChange={setValue} models={models} />
}<ModelSettings>
| Prop | Type | Default | Description |
|---|---|---|---|
| valuerequired | ModelSettingsValue | — | The settings as they are now. |
| onChangerequired | (value: ModelSettingsValue) => void | — | Called with the whole new value on every change. |
| modelsrequired | ModelOption[] | — | Every model the app offers, from any vendor. |
| locked | string | undefined | — | Why the viewer can't change these settings, e.g. "Only admins can change the model." Shown, and every control is locked. |
| className | string | undefined | — | Extra classes for the outer element. |
Strings
The fixed words, in English by default. Change any of them under modelSettings in <LocaleProvider strings={{ … }}>; the table is exported as modelSettingsStrings.
| Key | English |
|---|---|
| model | Model |
| notAvailable | Not available until {vendor}’s zero-retention terms are attested. |
| notAttested | Zero-retention terms not attested |
| reasoning | Reasoning |
| reasoningEffort | Reasoning effort |
| low | Low |
| lowDetail | Quick lookups |
| medium | Medium |
| mediumDetail | Most work |
| high | High |
| highDetail | Design and review |
| max | Max |
| maxDetail | Hard problems; slow |
| stepLimit | Step limit |
| steps | { one: "{count} step", other: "{count} steps" } |
| stepLimitHelp | After this many tool calls the agent stops and asks you before going on. |
| fallback | Fallback |
| fallbackModel | Fallback model |
| noFallback | No fallback: wait and retry |
| fallbackHelp | Used only while the primary is unavailable. Listed models all have attested zero-retention terms. |