11import { Dialog } from "@opencode-ai/ui/dialog"
22import { List } from "@opencode-ai/ui/list"
33import { Switch } from "@opencode-ai/ui/switch"
4+ import { Tooltip } from "@opencode-ai/ui/tooltip"
45import { Button } from "@opencode-ai/ui/button"
56import type { Component } from "solid-js"
67import { useLocal } from "@/context/local"
@@ -18,6 +19,14 @@ export const DialogManageModels: Component = () => {
1819 dialog . show ( ( ) => < DialogSelectProvider /> )
1920 }
2021 const providerRank = ( id : string ) => popularProviders . indexOf ( id )
22+ const providerList = ( providerID : string ) => local . model . list ( ) . filter ( ( x ) => x . provider . id === providerID )
23+ const providerVisible = ( providerID : string ) =>
24+ providerList ( providerID ) . every ( ( x ) => local . model . visible ( { modelID : x . id , providerID : x . provider . id } ) )
25+ const setProviderVisibility = ( providerID : string , checked : boolean ) => {
26+ providerList ( providerID ) . forEach ( ( x ) => {
27+ local . model . setVisibility ( { modelID : x . id , providerID : x . provider . id } , checked )
28+ } )
29+ }
2130
2231 return (
2332 < Dialog
@@ -36,7 +45,28 @@ export const DialogManageModels: Component = () => {
3645 items = { local . model . list ( ) }
3746 filterKeys = { [ "provider.name" , "name" , "id" ] }
3847 sortBy = { ( a , b ) => a . name . localeCompare ( b . name ) }
39- groupBy = { ( x ) => x . provider . name }
48+ groupBy = { ( x ) => x . provider . id }
49+ groupHeader = { ( group ) => {
50+ const provider = group . items [ 0 ] . provider
51+ return (
52+ < >
53+ < span > { provider . name } </ span >
54+ < Tooltip
55+ placement = "top"
56+ value = { language . t ( "dialog.model.manage.provider.toggle" , { provider : provider . name } ) }
57+ >
58+ < Switch
59+ class = "-mr-1"
60+ checked = { providerVisible ( provider . id ) }
61+ onChange = { ( checked ) => setProviderVisibility ( provider . id , checked ) }
62+ hideLabel
63+ >
64+ { provider . name }
65+ </ Switch >
66+ </ Tooltip >
67+ </ >
68+ )
69+ } }
4070 sortGroupsBy = { ( a , b ) => {
4171 const aRank = providerRank ( a . items [ 0 ] . provider . id )
4272 const bRank = providerRank ( b . items [ 0 ] . provider . id )
0 commit comments