make variant modal less annoying (#19998)

pull/11377/merge
Luke Parker 2026-03-30 15:42:38 +10:00 committed by GitHub
parent 6926fe1c74
commit 186af2723d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 12 deletions

View File

@ -581,10 +581,22 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
}, },
}, },
{ {
title: "Switch model variant", title: "Variant cycle",
value: "variant.cycle", value: "variant.cycle",
keybind: "variant_cycle", keybind: "variant_cycle",
category: "Agent", category: "Agent",
onSelect: () => {
local.model.variant.cycle()
},
},
{
title: "Switch model variant",
value: "variant.list",
category: "Agent",
hidden: local.model.variant.list().length === 0,
slash: {
name: "variants",
},
onSelect: () => { onSelect: () => {
dialog.replace(() => <DialogVariant />) dialog.replace(() => <DialogVariant />)
}, },

View File

@ -136,7 +136,13 @@ export function DialogModel(props: { providerID?: string }) {
function onSelect(providerID: string, modelID: string) { function onSelect(providerID: string, modelID: string) {
local.model.set({ providerID, modelID }, { recent: true }) local.model.set({ providerID, modelID }, { recent: true })
if (local.model.variant.list().length > 0) { const list = local.model.variant.list()
const cur = local.model.variant.selected()
if (cur === "default" || (cur && list.includes(cur))) {
dialog.clear()
return
}
if (list.length > 0) {
dialog.replace(() => <DialogVariant />) dialog.replace(() => <DialogVariant />)
return return
} }

View File

@ -8,21 +8,31 @@ export function DialogVariant() {
const dialog = useDialog() const dialog = useDialog()
const options = createMemo(() => { const options = createMemo(() => {
return local.model.variant.list().map((variant) => ({ return [
value: variant, {
title: variant, value: "default",
onSelect: () => { title: "Default",
dialog.clear() onSelect: () => {
local.model.variant.set(variant) dialog.clear()
local.model.variant.set(undefined)
},
}, },
})) ...local.model.variant.list().map((variant) => ({
value: variant,
title: variant,
onSelect: () => {
dialog.clear()
local.model.variant.set(variant)
},
})),
]
}) })
return ( return (
<DialogSelect<string> <DialogSelect<string>
options={options()} options={options()}
title={"Select variant"} title={"Select variant"}
current={local.model.variant.current()} current={local.model.variant.selected()}
flat={true} flat={true}
/> />
) )

View File

@ -321,12 +321,18 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
}) })
}, },
variant: { variant: {
current() { selected() {
const m = currentModel() const m = currentModel()
if (!m) return undefined if (!m) return undefined
const key = `${m.providerID}/${m.modelID}` const key = `${m.providerID}/${m.modelID}`
return modelStore.variant[key] return modelStore.variant[key]
}, },
current() {
const v = this.selected()
if (!v) return undefined
if (!this.list().includes(v)) return undefined
return v
},
list() { list() {
const m = currentModel() const m = currentModel()
if (!m) return [] if (!m) return []
@ -339,7 +345,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
const m = currentModel() const m = currentModel()
if (!m) return if (!m) return
const key = `${m.providerID}/${m.modelID}` const key = `${m.providerID}/${m.modelID}`
setModelStore("variant", key, value) setModelStore("variant", key, value ?? "default")
save() save()
}, },
cycle() { cycle() {