|
@@ -17,6 +17,7 @@ import { MenuV2 } from "@opencode-ai/ui/v2/menu-v2"
|
|
|
import { ModelTooltip } from "./model-tooltip"
|
|
import { ModelTooltip } from "./model-tooltip"
|
|
|
import { useLanguage } from "@/context/language"
|
|
import { useLanguage } from "@/context/language"
|
|
|
import { decode64 } from "@/utils/base64"
|
|
import { decode64 } from "@/utils/base64"
|
|
|
|
|
+import { matchesModelSearch } from "./dialog-select-model-search"
|
|
|
|
|
|
|
|
const isFree = (provider: string, cost: { input: number } | undefined) =>
|
|
const isFree = (provider: string, cost: { input: number } | undefined) =>
|
|
|
provider === "opencode" && (!cost || cost.input === 0)
|
|
provider === "opencode" && (!cost || cost.input === 0)
|
|
@@ -242,13 +243,10 @@ export function ModelSelectorPopoverV2(props: {
|
|
|
.filter((item) => (props.provider ? item.provider.id === props.provider : true)),
|
|
.filter((item) => (props.provider ? item.provider.id === props.provider : true)),
|
|
|
)
|
|
)
|
|
|
const models = createMemo(() => {
|
|
const models = createMemo(() => {
|
|
|
- const search = store.search.trim().toLowerCase()
|
|
|
|
|
|
|
+ const search = store.search.trim()
|
|
|
const filtered = search
|
|
const filtered = search
|
|
|
? allModels().filter(
|
|
? allModels().filter(
|
|
|
- (item) =>
|
|
|
|
|
- item.name.toLowerCase().includes(search) ||
|
|
|
|
|
- item.id.toLowerCase().includes(search) ||
|
|
|
|
|
- item.provider.name.toLowerCase().includes(search),
|
|
|
|
|
|
|
+ (item) => matchesModelSearch(search, [item.name, item.id, item.provider.name]),
|
|
|
)
|
|
)
|
|
|
: allModels()
|
|
: allModels()
|
|
|
|
|
|
|
@@ -333,16 +331,10 @@ export function ModelSelectorPopoverV2(props: {
|
|
|
queueMicrotask(() => activeItem()?.scrollIntoView({ block: "nearest" }))
|
|
queueMicrotask(() => activeItem()?.scrollIntoView({ block: "nearest" }))
|
|
|
}
|
|
}
|
|
|
const setSearch = (value: string) => {
|
|
const setSearch = (value: string) => {
|
|
|
- const search = value.trim().toLowerCase()
|
|
|
|
|
|
|
+ const search = value.trim()
|
|
|
const first = [...allModels()]
|
|
const first = [...allModels()]
|
|
|
.sort((a, b) => a.name.localeCompare(b.name))
|
|
.sort((a, b) => a.name.localeCompare(b.name))
|
|
|
- .find(
|
|
|
|
|
- (item) =>
|
|
|
|
|
- !search ||
|
|
|
|
|
- item.name.toLowerCase().includes(search) ||
|
|
|
|
|
- item.id.toLowerCase().includes(search) ||
|
|
|
|
|
- item.provider.name.toLowerCase().includes(search),
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ .find((item) => matchesModelSearch(search, [item.name, item.id, item.provider.name]))
|
|
|
setStore({ search: value, active: first ? modelKey(first) : manageKey })
|
|
setStore({ search: value, active: first ? modelKey(first) : manageKey })
|
|
|
}
|
|
}
|
|
|
|
|
|