summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/dialog-manage-models.tsx32
1 files changed, 31 insertions, 1 deletions
diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx
index d4d4af0f1..ace79e38a 100644
--- a/packages/app/src/components/dialog-manage-models.tsx
+++ b/packages/app/src/components/dialog-manage-models.tsx
@@ -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)