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" import { popularProviders } from "@/hooks/use-providers" import { useLanguage } from "@/context/language" import { useDialog } from "@opencode-ai/ui/context/dialog" import { DialogSelectProvider } from "./dialog-select-provider" export const DialogManageModels: Component = () => { const local = useLocal() const language = useLanguage() const dialog = useDialog() const handleConnectProvider = () => { dialog.show(() => ) } 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 ( {language.t("command.provider.connect")} } > `${x?.provider?.id}:${x?.id}`} items={local.model.list()} filterKeys={["provider.name", "name", "id"]} sortBy={(a, b) => a.name.localeCompare(b.name)} groupBy={(x) => x.provider.id} groupHeader={(group) => { const provider = group.items[0].provider return ( <> {provider.name} setProviderVisibility(provider.id, checked)} hideLabel > {provider.name} ) }} sortGroupsBy={(a, b) => { const aRank = providerRank(a.items[0].provider.id) const bRank = providerRank(b.items[0].provider.id) const aPopular = aRank >= 0 const bPopular = bRank >= 0 if (aPopular && !bPopular) return -1 if (!aPopular && bPopular) return 1 return aRank - bRank }} onSelect={(x) => { if (!x) return const key = { modelID: x.id, providerID: x.provider.id } local.model.setVisibility(key, !local.model.visible(key)) }} > {(i) => (
{i.name}
e.stopPropagation()}> { local.model.setVisibility({ modelID: i.id, providerID: i.provider.id }, checked) }} />
)}
) }