|
|
@@ -1,6 +1,7 @@
|
|
|
import { Dialog } from "@opencode-ai/ui/dialog"
|
|
|
import { List } from "@opencode-ai/ui/list"
|
|
|
import { Switch } from "@opencode-ai/ui/switch"
|
|
|
+import { Tooltip } from "@opencode-ai/ui/tooltip"
|
|
|
import { Button } from "@opencode-ai/ui/button"
|
|
|
import type { Component } from "solid-js"
|
|
|
import { useLocal } from "@/context/local"
|
|
|
@@ -18,6 +19,14 @@ export const DialogManageModels: Component = () => {
|
|
|
dialog.show(() => <DialogSelectProvider />)
|
|
|
}
|
|
|
const providerRank = (id: string) => popularProviders.indexOf(id)
|
|
|
+ const providerList = (providerID: string) => local.model.list().filter((x) => x.provider.id === providerID)
|
|
|
+ const providerVisible = (providerID: string) =>
|
|
|
+ providerList(providerID).every((x) => local.model.visible({ modelID: x.id, providerID: x.provider.id }))
|
|
|
+ const setProviderVisibility = (providerID: string, checked: boolean) => {
|
|
|
+ providerList(providerID).forEach((x) => {
|
|
|
+ local.model.setVisibility({ modelID: x.id, providerID: x.provider.id }, checked)
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
return (
|
|
|
<Dialog
|
|
|
@@ -36,7 +45,28 @@ export const DialogManageModels: Component = () => {
|
|
|
items={local.model.list()}
|
|
|
filterKeys={["provider.name", "name", "id"]}
|
|
|
sortBy={(a, b) => a.name.localeCompare(b.name)}
|
|
|
- groupBy={(x) => x.provider.name}
|
|
|
+ groupBy={(x) => x.provider.id}
|
|
|
+ groupHeader={(group) => {
|
|
|
+ const provider = group.items[0].provider
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ <span>{provider.name}</span>
|
|
|
+ <Tooltip
|
|
|
+ placement="top"
|
|
|
+ value={language.t("dialog.model.manage.provider.toggle", { provider: provider.name })}
|
|
|
+ >
|
|
|
+ <Switch
|
|
|
+ class="-mr-1"
|
|
|
+ checked={providerVisible(provider.id)}
|
|
|
+ onChange={(checked) => setProviderVisibility(provider.id, checked)}
|
|
|
+ hideLabel
|
|
|
+ >
|
|
|
+ {provider.name}
|
|
|
+ </Switch>
|
|
|
+ </Tooltip>
|
|
|
+ </>
|
|
|
+ )
|
|
|
+ }}
|
|
|
sortGroupsBy={(a, b) => {
|
|
|
const aRank = providerRank(a.items[0].provider.id)
|
|
|
const bRank = providerRank(b.items[0].provider.id)
|