Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859// Model variant resolution and persistence.//// Variants are provider-specific reasoning effort levels (e.g., "high", "max").// Resolution priority: CLI --variant flag > valid session history > saved preference.//// The saved variant persists across sessions in ~/.local/state/opencode/model.json// so your last-used variant sticks. Cycling (ctrl+t) updates both the active// variant and the persisted file.import { createSession, sessionVariant, type RunSession, type SessionMessages } from "./session.shared"import type { RunInput, RunProvider } from "./types"import { cycleModelVariant, normalizeModelVariant } from "../model-preference"
export function modelInfo(providers: RunProvider[] | undefined, model: NonNullable<RunInput["model"]>) { const provider = providers?.find((item) => item.id === model.providerID) return { provider: provider?.name ?? model.providerID, model: provider?.models[model.modelID]?.name ?? model.modelID, }}
export function formatModelLabel( model: NonNullable<RunInput["model"]>, variant: string | undefined, providers?: RunProvider[],): string { const names = modelInfo(providers, model) const label = variant ? ` · ${variant}` : "" return `${names.model} · ${names.provider}${label}`}
export function cycleVariant(current: string | undefined, variants: string[]): string | undefined { return cycleModelVariant(current, variants)}
export function pickVariant(model: RunInput["model"], input: RunSession | SessionMessages): string | undefined { return sessionVariant(Array.isArray(input) ? createSession(input) : input, model)}
function fitVariant(value: string | undefined, variants: string[]): string | undefined { const normalized = normalizeModelVariant(value) return normalized && (variants.length === 0 || variants.includes(normalized)) ? normalized : undefined}
// Picks the active variant. CLI flag wins, then valid session history, then the// saved preference. Saved and session values are dropped when the provider no// longer offers them.export function resolveVariant( input: string | undefined, session: string | undefined, saved: string | undefined, variants: string[],): string | undefined { if (input !== undefined) { return normalizeModelVariant(input) }
return fitVariant(session, variants) ?? fitVariant(saved, variants)}