diff options
| author | Aiden Cline <[email protected]> | 2025-12-29 19:43:50 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-29 21:43:50 -0600 |
| commit | ed0c0d90be8cc9185628ec05e20ef942b35a0be4 (patch) | |
| tree | 751d11dfbc91e631d2415b7a9d149419db4249fd /packages | |
| parent | e1dd9c4ccb7466dd1606dc65f8390bb4fd7ab413 (diff) | |
| download | opencode-ed0c0d90be8cc9185628ec05e20ef942b35a0be4.tar.gz opencode-ed0c0d90be8cc9185628ec05e20ef942b35a0be4.zip | |
feat: add variants toggle (#6325)
Co-authored-by: Github Action <[email protected]>
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/bunfig.toml | 1 | ||||
| -rw-r--r-- | packages/opencode/package.json | 7 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx | 49 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/context/local.tsx | 82 | ||||
| -rw-r--r-- | packages/opencode/src/config/config.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 19 | ||||
| -rw-r--r-- | packages/opencode/src/provider/transform.ts | 160 | ||||
| -rw-r--r-- | packages/opencode/src/session/llm.ts | 16 | ||||
| -rw-r--r-- | packages/opencode/src/session/message-v2.ts | 3 | ||||
| -rw-r--r-- | packages/opencode/src/session/prompt.ts | 4 | ||||
| -rw-r--r-- | packages/sdk/js/src/v2/gen/sdk.gen.ts | 6 | ||||
| -rw-r--r-- | packages/sdk/js/src/v2/gen/types.gen.ts | 16 |
12 files changed, 331 insertions, 33 deletions
diff --git a/packages/opencode/bunfig.toml b/packages/opencode/bunfig.toml index 9afe227b3..c227328d5 100644 --- a/packages/opencode/bunfig.toml +++ b/packages/opencode/bunfig.toml @@ -2,5 +2,6 @@ preload = ["@opentui/solid/preload"] [test] preload = ["./test/preload.ts"] +timeout = 10000 # 10 seconds (default is 5000ms) # Enable code coverage coverage = true diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e9650145a..952f0bce2 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -50,19 +50,18 @@ "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.5.1", "@ai-sdk/amazon-bedrock": "3.0.57", + "@ai-sdk/azure": "2.0.82", "@ai-sdk/anthropic": "2.0.56", - "@ai-sdk/azure": "2.0.73", "@ai-sdk/cerebras": "1.0.33", "@ai-sdk/cohere": "2.0.21", "@ai-sdk/deepinfra": "1.0.30", "@ai-sdk/gateway": "2.0.23", - "@ai-sdk/google": "2.0.44", + "@ai-sdk/google": "2.0.49", "@ai-sdk/google-vertex": "3.0.81", "@ai-sdk/groq": "2.0.33", - "@ai-sdk/mcp": "0.0.8", "@ai-sdk/mistral": "2.0.26", "@ai-sdk/openai": "2.0.71", - "@ai-sdk/openai-compatible": "1.0.27", + "@ai-sdk/openai-compatible": "1.0.29", "@ai-sdk/perplexity": "2.0.22", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.19", diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index f819746d5..6eec5d1d6 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -167,6 +167,13 @@ export function Prompt(props: PromptProps) { if (!props.disabled) input.cursorColor = theme.text }) + const lastUserMessage = createMemo(() => { + if (!props.sessionID) return undefined + const messages = sync.data.message[props.sessionID] + if (!messages) return undefined + return messages.findLast((m) => m.role === "user") + }) + const [store, setStore] = createStore<{ prompt: PromptInfo mode: "normal" | "shell" @@ -184,6 +191,26 @@ export function Prompt(props: PromptProps) { interrupt: 0, }) + createEffect(() => { + const msg = lastUserMessage() + if (!msg) return + + // Set agent from last message + if (msg.agent) { + local.agent.set(msg.agent) + } + + // Set model from last message + if (msg.model) { + local.model.set(msg.model) + } + + // Set variant from last message + if (msg.variant) { + local.model.variant.set(msg.variant) + } + }) + command.register(() => { return [ { @@ -562,6 +589,7 @@ export function Prompt(props: PromptProps) { // Capture mode before it gets reset const currentMode = store.mode + const variant = local.model.variant.current() if (store.mode === "shell") { sdk.client.session.shell({ @@ -590,6 +618,7 @@ export function Prompt(props: PromptProps) { agent: local.agent.current().name, model: `${selectedModel.providerID}/${selectedModel.modelID}`, messageID, + variant, }) } else { sdk.client.session.prompt({ @@ -598,6 +627,7 @@ export function Prompt(props: PromptProps) { messageID, agent: local.agent.current().name, model: selectedModel, + variant, parts: [ { id: Identifier.ascending("part"), @@ -718,6 +748,13 @@ export function Prompt(props: PromptProps) { return local.agent.color(local.agent.current().name) }) + const showVariant = createMemo(() => { + const variants = local.model.variant.list() + if (variants.length === 0) return false + const current = local.model.variant.current() + return !!current + }) + const spinnerDef = createMemo(() => { const color = local.agent.color(local.agent.current().name) return { @@ -843,6 +880,12 @@ export function Prompt(props: PromptProps) { return } } + if (keybind.match("variant_cycle", e)) { + e.preventDefault() + if (local.model.variant.list().length === 0) return + local.model.variant.cycle() + return + } if (store.mode === "normal") autocomplete.onKeyDown(e) if (!autocomplete.visible) { if ( @@ -958,6 +1001,12 @@ export function Prompt(props: PromptProps) { {local.model.parsed().model} </text> <text fg={theme.textMuted}>{local.model.parsed().provider}</text> + <Show when={showVariant()}> + <text fg={theme.textMuted}>ยท</text> + <text> + <span style={{ fg: theme.warning, bold: true }}>{local.model.variant.current()}</span> + </text> + </Show> </box> </Show> </box> diff --git a/packages/opencode/src/cli/cmd/tui/context/local.tsx b/packages/opencode/src/cli/cmd/tui/context/local.tsx index 55c04621e..cac542d54 100644 --- a/packages/opencode/src/cli/cmd/tui/context/local.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/local.tsx @@ -33,24 +33,6 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } } - // Automatically update model when agent changes - createEffect(() => { - const value = agent.current() - if (value.model) { - if (isModelValid(value.model)) - model.set({ - providerID: value.model.providerID, - modelID: value.model.modelID, - }) - else - toast.show({ - variant: "warning", - message: `Agent ${value.name}'s configured model ${value.model.providerID}/${value.model.modelID} is not valid`, - duration: 3000, - }) - } - }) - const agent = iife(() => { const agents = createMemo(() => sync.data.agent.filter((x) => x.mode !== "subagent" && !x.hidden)) const [agentStore, setAgentStore] = createStore<{ @@ -120,11 +102,13 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ providerID: string modelID: string }[] + variant: Record<string, string | undefined> }>({ ready: false, model: {}, recent: [], favorite: [], + variant: {}, }) const file = Bun.file(path.join(Global.Path.state, "model.json")) @@ -135,6 +119,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ JSON.stringify({ recent: modelStore.recent, favorite: modelStore.favorite, + variant: modelStore.variant, }), ) } @@ -144,6 +129,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ .then((x) => { if (Array.isArray(x.recent)) setModelStore("recent", x.recent) if (Array.isArray(x.favorite)) setModelStore("favorite", x.favorite) + if (typeof x.variant === "object" && x.variant !== null) setModelStore("variant", x.variant) }) .catch(() => {}) .finally(() => { @@ -218,6 +204,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ return { provider: "Connect a provider", model: "No provider selected", + reasoning: false, } } const provider = sync.data.provider.find((x) => x.id === value.providerID) @@ -225,6 +212,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ return { provider: provider?.name ?? value.providerID, model: info?.name ?? value.modelID, + reasoning: info?.capabilities?.reasoning ?? false, } }), cycle(direction: 1 | -1) { @@ -309,6 +297,46 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ save() }) }, + variant: { + current() { + const m = currentModel() + if (!m) return undefined + const key = `${m.providerID}/${m.modelID}` + return modelStore.variant[key] + }, + list() { + const m = currentModel() + if (!m) return [] + const provider = sync.data.provider.find((x) => x.id === m.providerID) + const info = provider?.models[m.modelID] + if (!info?.variants) return [] + return Object.entries(info.variants) + .filter(([_, v]) => !v.disabled) + .map(([name]) => name) + }, + set(value: string | undefined) { + const m = currentModel() + if (!m) return + const key = `${m.providerID}/${m.modelID}` + setModelStore("variant", key, value) + save() + }, + cycle() { + const variants = this.list() + if (variants.length === 0) return + const current = this.current() + if (!current) { + this.set(variants[0]) + return + } + const index = variants.indexOf(current) + if (index === -1 || index === variants.length - 1) { + this.set(undefined) + return + } + this.set(variants[index + 1]) + }, + }, } }) @@ -329,6 +357,24 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }, } + // Automatically update model when agent changes + createEffect(() => { + const value = agent.current() + if (value.model) { + if (isModelValid(value.model)) + model.set({ + providerID: value.model.providerID, + modelID: value.model.modelID, + }) + else + toast.show({ + variant: "warning", + message: `Agent ${value.name}'s configured model ${value.model.providerID}/${value.model.modelID} is not valid`, + duration: 3000, + }) + } + }) + const result = { model, agent, diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 0132bb91d..4f4ff1188 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -490,6 +490,7 @@ export namespace Config { agent_list: z.string().optional().default("<leader>a").describe("List agents"), agent_cycle: z.string().optional().default("tab").describe("Next agent"), agent_cycle_reverse: z.string().optional().default("shift+tab").describe("Previous agent"), + variant_cycle: z.string().optional().default("ctrl+t").describe("Cycle model variants"), input_clear: z.string().optional().default("ctrl+c").describe("Clear input field"), input_paste: z.string().optional().default("ctrl+v").describe("Paste from clipboard"), input_submit: z.string().optional().default("return").describe("Submit input"), diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 62bc5beaa..4150703d2 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -34,6 +34,7 @@ import { createCohere } from "@ai-sdk/cohere" import { createGateway } from "@ai-sdk/gateway" import { createTogetherAI } from "@ai-sdk/togetherai" import { createPerplexity } from "@ai-sdk/perplexity" +import { ProviderTransform } from "./transform" export namespace Provider { const log = Log.create({ service: "provider" }) @@ -404,6 +405,16 @@ export namespace Provider { }, } + export const Variant = z + .object({ + disabled: z.boolean(), + }) + .catchall(z.any()) + .meta({ + ref: "Variant", + }) + export type Variant = z.infer<typeof Variant> + export const Model = z .object({ id: z.string(), @@ -467,6 +478,7 @@ export namespace Provider { options: z.record(z.string(), z.any()), headers: z.record(z.string(), z.string()), release_date: z.string(), + variants: z.record(z.string(), Variant).optional(), }) .meta({ ref: "Model", @@ -489,7 +501,7 @@ export namespace Provider { export type Info = z.infer<typeof Info> function fromModelsDevModel(provider: ModelsDev.Provider, model: ModelsDev.Model): Model { - return { + const m: Model = { id: model.id, providerID: provider.id, name: model.name, @@ -546,7 +558,12 @@ export namespace Provider { interleaved: model.interleaved ?? false, }, release_date: model.release_date, + variants: {}, } + + m.variants = mapValues(ProviderTransform.variants(m), (v) => ({ disabled: false, ...v })) + + return m } export function fromModelsDevProvider(provider: ModelsDev.Provider): Info { diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 6feceb5e6..9de2ad52c 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -124,7 +124,7 @@ export namespace ProviderTransform { cacheControl: { type: "ephemeral" }, }, openrouter: { - cache_control: { type: "ephemeral" }, + cacheControl: { type: "ephemeral" }, }, bedrock: { cachePoint: { type: "ephemeral" }, @@ -243,6 +243,162 @@ export namespace ProviderTransform { return undefined } + const WIDELY_SUPPORTED_EFFORTS = ["low", "medium", "high"] + const OPENAI_EFFORTS = ["none", "minimal", ...WIDELY_SUPPORTED_EFFORTS, "xhigh"] + + export function variants(model: Provider.Model) { + if (!model.capabilities.reasoning) return {} + + const id = model.id.toLowerCase() + if (id.includes("deepseek") || id.includes("minimax") || id.includes("glm") || id.includes("mistral")) return {} + + switch (model.api.npm) { + case "@openrouter/ai-sdk-provider": + if (!model.id.includes("gpt") && !model.id.includes("gemini-3") && !model.id.includes("grok-4")) return {} + return Object.fromEntries(OPENAI_EFFORTS.map((effort) => [effort, { reasoning: { effort } }])) + + // TODO: YOU CANNOT SET max_tokens if this is set!!! + case "@ai-sdk/gateway": + return Object.fromEntries(OPENAI_EFFORTS.map((effort) => [effort, { reasoningEffort: effort }])) + + case "@ai-sdk/cerebras": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/cerebras + case "@ai-sdk/togetherai": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/togetherai + case "@ai-sdk/xai": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/xai + case "@ai-sdk/deepinfra": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/deepinfra + case "@ai-sdk/openai-compatible": + return Object.fromEntries(WIDELY_SUPPORTED_EFFORTS.map((effort) => [effort, { reasoningEffort: effort }])) + + case "@ai-sdk/azure": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/azure + if (id === "o1-mini") return {} + const azureEfforts = ["low", "medium", "high"] + if (id.includes("gpt-5")) { + azureEfforts.unshift("minimal") + } + return Object.fromEntries( + azureEfforts.map((effort) => [ + effort, + { + reasoningEffort: effort, + reasoningSummary: "auto", + include: ["reasoning.encrypted_content"], + }, + ]), + ) + case "@ai-sdk/openai": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/openai + if (id === "gpt-5-pro") return {} + const openaiEfforts = ["minimal", ...WIDELY_SUPPORTED_EFFORTS] + if (model.release_date >= "2025-11-13") { + openaiEfforts.unshift("none") + } + if (model.release_date >= "2025-12-04") { + openaiEfforts.push("xhigh") + } + return Object.fromEntries( + openaiEfforts.map((effort) => [ + effort, + { + reasoningEffort: effort, + reasoningSummary: "auto", + include: ["reasoning.encrypted_content"], + }, + ]), + ) + + case "@ai-sdk/anthropic": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/anthropic + return { + high: { + thinking: { + type: "enabled", + budgetTokens: 16000, + }, + }, + max: { + thinking: { + type: "enabled", + budgetTokens: 31999, + }, + }, + } + + case "@ai-sdk/amazon-bedrock": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock + return Object.fromEntries( + WIDELY_SUPPORTED_EFFORTS.map((effort) => [ + effort, + { + reasoningConfig: { + type: "enabled", + maxReasoningEffort: effort, + }, + }, + ]), + ) + + case "@ai-sdk/google-vertex": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/google-vertex + case "@ai-sdk/google": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai + if (id.includes("2.5")) { + return { + high: { + thinkingConfig: { + includeThoughts: true, + thinkingBudget: 16000, + }, + }, + max: { + thinkingConfig: { + includeThoughts: true, + thinkingBudget: 24576, + }, + }, + } + } + return Object.fromEntries( + ["low", "high"].map((effort) => [ + effort, + { + includeThoughts: true, + thinkingLevel: effort, + }, + ]), + ) + + case "@ai-sdk/mistral": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/mistral + return {} + + case "@ai-sdk/cohere": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/cohere + return {} + + case "@ai-sdk/groq": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/groq + const groqEffort = ["none", ...WIDELY_SUPPORTED_EFFORTS] + return Object.fromEntries( + groqEffort.map((effort) => [ + effort, + { + includeThoughts: true, + thinkingLevel: effort, + }, + ]), + ) + + case "@ai-sdk/perplexity": + // https://v5.ai-sdk.dev/providers/ai-sdk-providers/perplexity + return {} + } + return {} + } + export function options( model: Provider.Model, sessionID: string, @@ -322,6 +478,7 @@ export namespace ProviderTransform { export function providerOptions(model: Provider.Model, options: { [x: string]: any }) { switch (model.api.npm) { + case "@ai-sdk/github-copilot": case "@ai-sdk/openai": case "@ai-sdk/azure": return { @@ -335,6 +492,7 @@ export namespace ProviderTransform { return { ["anthropic" as string]: options, } + case "@ai-sdk/google-vertex": case "@ai-sdk/google": return { ["google" as string]: options, diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index a81aa7db2..a1461c315 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -74,6 +74,14 @@ export namespace LLM { } const provider = await Provider.getProvider(input.model.providerID) + const variant = input.model.variants && input.user.variant ? input.model.variants[input.user.variant] : undefined + const options = pipe( + ProviderTransform.options(input.model, input.sessionID, provider.options), + mergeDeep(input.small ? ProviderTransform.smallOptions(input.model) : {}), + mergeDeep(input.model.options), + mergeDeep(input.agent.options), + mergeDeep(variant && !variant.disabled ? variant : {}), + ) const params = await Plugin.trigger( "chat.params", @@ -90,13 +98,7 @@ export namespace LLM { : undefined, topP: input.agent.topP ?? ProviderTransform.topP(input.model), topK: ProviderTransform.topK(input.model), - options: pipe( - {}, - mergeDeep(ProviderTransform.options(input.model, input.sessionID, provider.options)), - input.small ? mergeDeep(ProviderTransform.smallOptions(input.model)) : mergeDeep({}), - mergeDeep(input.model.options), - mergeDeep(input.agent.options), - ), + options, }, ) diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index da89a1a0e..bb78ae64c 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -1,8 +1,6 @@ import { BusEvent } from "@/bus/bus-event" -import { Bus } from "@/bus" import z from "zod" import { NamedError } from "@opencode-ai/util/error" -import { Message } from "./message" import { APICallError, convertToModelMessages, LoadAPIKeyError, type ModelMessage, type UIMessage } from "ai" import { Identifier } from "../id/id" import { LSP } from "../lsp" @@ -308,6 +306,7 @@ export namespace MessageV2 { }), system: z.string().optional(), tools: z.record(z.string(), z.boolean()).optional(), + variant: z.string().optional(), }).meta({ ref: "UserMessage", }) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 19dc90b3b..595fc746e 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -90,6 +90,7 @@ export namespace SessionPrompt { noReply: z.boolean().optional(), tools: z.record(z.string(), z.boolean()).optional(), system: z.string().optional(), + variant: z.string().optional(), parts: z.array( z.discriminatedUnion("type", [ MessageV2.TextPart.omit({ @@ -727,6 +728,7 @@ export namespace SessionPrompt { agent: agent.name, model: input.model ?? agent.model ?? (await lastModel(input.sessionID)), system: input.system, + variant: input.variant, } const parts = await Promise.all( @@ -1267,6 +1269,7 @@ export namespace SessionPrompt { model: z.string().optional(), arguments: z.string(), command: z.string(), + variant: z.string().optional(), }) export type CommandInput = z.infer<typeof CommandInput> const bashRegex = /!`([^`]+)`/g @@ -1369,6 +1372,7 @@ export namespace SessionPrompt { model, agent: agentName, parts, + variant: input.variant, })) as MessageV2.WithParts Bus.publish(Command.Event.Executed, { diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 797896ace..c01d351ba 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -1228,6 +1228,7 @@ export class Session extends HeyApiClient { [key: string]: boolean } system?: string + variant?: string parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, @@ -1245,6 +1246,7 @@ export class Session extends HeyApiClient { { in: "body", key: "noReply" }, { in: "body", key: "tools" }, { in: "body", key: "system" }, + { in: "body", key: "variant" }, { in: "body", key: "parts" }, ], }, @@ -1314,6 +1316,7 @@ export class Session extends HeyApiClient { [key: string]: boolean } system?: string + variant?: string parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, @@ -1331,6 +1334,7 @@ export class Session extends HeyApiClient { { in: "body", key: "noReply" }, { in: "body", key: "tools" }, { in: "body", key: "system" }, + { in: "body", key: "variant" }, { in: "body", key: "parts" }, ], }, @@ -1362,6 +1366,7 @@ export class Session extends HeyApiClient { model?: string arguments?: string command?: string + variant?: string }, options?: Options<never, ThrowOnError>, ) { @@ -1377,6 +1382,7 @@ export class Session extends HeyApiClient { { in: "body", key: "model" }, { in: "body", key: "arguments" }, { in: "body", key: "command" }, + { in: "body", key: "variant" }, ], }, ], diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 5c4cc6942..8f4daa143 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -90,6 +90,7 @@ export type UserMessage = { tools?: { [key: string]: boolean } + variant?: string } export type ProviderAuthError = { @@ -970,6 +971,10 @@ export type KeybindsConfig = { */ agent_cycle_reverse?: string /** + * Cycle model variants + */ + variant_cycle?: string + /** * Clear input field */ input_clear?: string @@ -1712,6 +1717,11 @@ export type Command = { subtask?: boolean } +export type Variant = { + disabled: boolean + [key: string]: unknown | boolean +} + export type Model = { id: string providerID: string @@ -1775,6 +1785,9 @@ export type Model = { [key: string]: string } release_date: string + variants?: { + [key: string]: Variant + } } export type Provider = { @@ -2944,6 +2957,7 @@ export type SessionPromptData = { [key: string]: boolean } system?: string + variant?: string parts: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> } path: { @@ -3127,6 +3141,7 @@ export type SessionPromptAsyncData = { [key: string]: boolean } system?: string + variant?: string parts: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> } path: { @@ -3170,6 +3185,7 @@ export type SessionCommandData = { model?: string arguments: string command: string + variant?: string } path: { /** |
