@@ -21,21 +21,23 @@ import { FiAlertTriangle } from "react-icons/fi";
21
21
import { Slider } from "@/components/ui/slider" ;
22
22
import { useUser } from "@/components/user/UserProvider" ;
23
23
import { TruncatedText } from "@/components/ui/truncatedText" ;
24
- import { ChatInputOption } from "@/app/chat/components/input/ChatInputOption" ;
25
24
import { useAgentsContext } from "@/components-2/context/AgentsContext" ;
26
25
import { useChatContext } from "@/components-2/context/ChatContext" ;
26
+ import { SelectButton } from "@/components-2/buttons/SelectButton" ;
27
+ import SvgRefreshCw from "@/icons/refresh-cw" ;
28
+ import { IconButton } from "@/components-2/buttons/IconButton" ;
27
29
28
30
export interface LLMPopoverProps {
31
+ compact ?: boolean ;
29
32
requiresImageGeneration ?: boolean ;
30
- trigger ?: React . ReactElement ;
31
33
onSelect ?: ( value : string ) => void ;
32
34
currentModelName ?: string ;
33
35
align ?: "start" | "center" | "end" ;
34
36
}
35
37
36
38
export default function LLMPopover ( {
39
+ compact,
37
40
requiresImageGeneration,
38
- trigger,
39
41
onSelect,
40
42
currentModelName,
41
43
align,
@@ -48,7 +50,7 @@ export default function LLMPopover({
48
50
currentChat || undefined ,
49
51
currentAgent || undefined
50
52
) ;
51
- const [ isOpen , setIsOpen ] = useState ( false ) ;
53
+ const [ open , setOpen ] = useState ( false ) ;
52
54
53
55
const [ localTemperature , setLocalTemperature ] = useState (
54
56
llmManager . temperature ?? 0.5
@@ -78,24 +80,21 @@ export default function LLMPopover({
78
80
79
81
// Memoize trigger content to prevent rerendering
80
82
const triggerContent = useMemo (
81
- trigger
82
- ? ( ) => trigger
83
- : ( ) => (
84
- < button data-testid = "llm-popover-trigger" >
85
- < ChatInputOption
86
- minimize
87
- toggle
88
- flexPriority = "stiff"
89
- name = { getDisplayNameForModel ( llmManager . currentLlm . modelName ) }
90
- Icon = { getProviderIcon (
91
- llmManager . currentLlm . provider ,
92
- llmManager . currentLlm . modelName
93
- ) }
94
- tooltipContent = "Switch models"
95
- />
96
- </ button >
97
- ) ,
98
- [ llmManager . currentLlm ]
83
+ ( ) =>
84
+ compact ? (
85
+ < IconButton icon = { SvgRefreshCw } tertiary active = { open } />
86
+ ) : (
87
+ < SelectButton
88
+ icon = { getProviderIcon (
89
+ llmManager . currentLlm . provider ,
90
+ llmManager . currentLlm . modelName
91
+ ) }
92
+ active = { open }
93
+ >
94
+ { getDisplayNameForModel ( llmManager . currentLlm . modelName ) }
95
+ </ SelectButton >
96
+ ) ,
97
+ [ llmManager . currentLlm , open ]
99
98
) ;
100
99
101
100
const llmOptionsToChooseFrom = useMemo (
@@ -121,16 +120,13 @@ export default function LLMPopover({
121
120
) ;
122
121
123
122
return (
124
- < Popover open = { isOpen } onOpenChange = { setIsOpen } >
125
- < PopoverTrigger
126
- asChild
127
- className = "hover:bg-background-tint-03 rounded-08"
128
- >
129
- { triggerContent }
123
+ < Popover open = { open } onOpenChange = { setOpen } >
124
+ < PopoverTrigger asChild >
125
+ < div > { triggerContent } </ div >
130
126
</ PopoverTrigger >
131
127
< PopoverContent
132
128
side = "top"
133
- align = { align || "end" }
129
+ align = "center"
134
130
className = "w-64 p-1 bg-background-tint-01 border shadow-lg flex flex-col"
135
131
>
136
132
< div className = "flex-grow max-h-[300px] default-scrollbar overflow-y-auto" >
@@ -151,7 +147,7 @@ export default function LLMPopover({
151
147
name,
152
148
} as LlmDescriptor ) ;
153
149
onSelect ?.( structureValue ( name , provider , modelName ) ) ;
154
- setIsOpen ( false ) ;
150
+ setOpen ( false ) ;
155
151
} }
156
152
>
157
153
{ icon ( {
0 commit comments