diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 84fe7495f874..1271907e17d8 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1426,6 +1426,18 @@ export const PromptInput: Component = (props) => { restoreFocus() }, })) + const variantControlState = createMemo(() => ({ + title: language.t("command.model.variant.cycle"), + keybind: command.keybind("model.variant.cycle"), + options: variants(), + current: local.model.variant.current() ?? "default", + style: control(), + label: (value) => (value === "default" ? language.t("common.default") : value), + onSelect: (value) => { + local.model.variant.set(value === "default" ? undefined : value) + restoreFocus() + }, + })) const newProjectTriggerState = createMemo(() => ({ action: "prompt-project", icon: "folder-add-left", @@ -1569,6 +1581,9 @@ export const PromptInput: Component = (props) => { + 2}> + + void } +type ComposerVariantControlState = { + title: string + keybind: string + options: string[] + current: string + style: JSX.CSSProperties | undefined + label: (value: string) => string + onSelect: (value: string | undefined) => void +} + function ComposerPickerTrigger(props: ComponentProps<"button"> & { state: ComposerPickerTriggerState }) { const [local, rest] = splitProps(props, ["state", "class", "style", "onClick"]) return ( @@ -2152,3 +2177,22 @@ function ComposerModelControl(props: { state: ComposerModelControlState }) { ) } + +function ComposerVariantControl(props: { state: ComposerVariantControlState }) { + return ( + +