Model settings

Pro

Which 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.

Markdown

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

TSX · The example above
"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>

PropTypeDefaultDescription
valuerequiredModelSettingsValue—The settings as they are now.
onChangerequired(value: ModelSettingsValue) => void—Called with the whole new value on every change.
modelsrequiredModelOption[]—Every model the app offers, from any vendor.
lockedstring | undefined—Why the viewer can't change these settings, e.g. "Only admins can change the model." Shown, and every control is locked.
classNamestring | 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.

KeyEnglish
modelModel
notAvailableNot available until {vendor}’s zero-retention terms are attested.
notAttestedZero-retention terms not attested
reasoningReasoning
reasoningEffortReasoning effort
lowLow
lowDetailQuick lookups
mediumMedium
mediumDetailMost work
highHigh
highDetailDesign and review
maxMax
maxDetailHard problems; slow
stepLimitStep limit
steps{ one: "{count} step", other: "{count} steps" }
stepLimitHelpAfter this many tool calls the agent stops and asks you before going on.
fallbackFallback
fallbackModelFallback model
noFallbackNo fallback: wait and retry
fallbackHelpUsed only while the primary is unavailable. Listed models all have attested zero-retention terms.