88 PopoverPanel ,
99 Transition ,
1010} from '@headlessui/react' ;
11- import { Fragment , useEffect , useState } from 'react' ;
11+ import { Fragment , useEffect , useMemo , useState } from 'react' ;
1212import { MinimalProvider } from '@/lib/models/types' ;
1313import { useChat } from '@/lib/hooks/useChat' ;
1414
@@ -30,24 +30,7 @@ const ModelSelector = () => {
3030 }
3131
3232 const data : { providers : MinimalProvider [ ] } = await res . json ( ) ;
33-
34- const currentProviderIndex = data . providers . findIndex (
35- ( p : MinimalProvider ) => {
36- return p . id === chatModelProvider ?. providerId ;
37- } ,
38- ) ;
39-
40- if ( currentProviderIndex === - 1 ) {
41- setProviders ( data . providers ) ;
42- return ;
43- }
44-
45- const selectedProvider = data . providers [ currentProviderIndex ] ;
46- const remainingProviders = data . providers . filter (
47- ( _ , index ) => index !== currentProviderIndex ,
48- ) ;
49-
50- setProviders ( [ selectedProvider , ...remainingProviders ] ) ;
33+ setProviders ( data . providers ) ;
5134 } catch ( error ) {
5235 console . error ( 'Error loading providers:' , error ) ;
5336 } finally {
@@ -56,15 +39,34 @@ const ModelSelector = () => {
5639 } ;
5740
5841 loadProviders ( ) ;
59- } , [ chatModelProvider ] ) ;
42+ } , [ ] ) ;
43+
44+ const orderedProviders = useMemo ( ( ) => {
45+ if ( ! chatModelProvider ?. providerId ) return providers ;
46+
47+ const currentProviderIndex = providers . findIndex (
48+ ( p ) => p . id === chatModelProvider . providerId ,
49+ ) ;
50+
51+ if ( currentProviderIndex === - 1 ) {
52+ return providers ;
53+ }
54+
55+ const selectedProvider = providers [ currentProviderIndex ] ;
56+ const remainingProviders = providers . filter (
57+ ( _ , index ) => index !== currentProviderIndex ,
58+ ) ;
59+
60+ return [ selectedProvider , ...remainingProviders ] ;
61+ } , [ providers , chatModelProvider ] ) ;
6062
6163 const handleModelSelect = ( providerId : string , modelKey : string ) => {
6264 setChatModelProvider ( { providerId, key : modelKey } ) ;
6365 localStorage . setItem ( 'chatModelProviderId' , providerId ) ;
6466 localStorage . setItem ( 'chatModelKey' , modelKey ) ;
6567 } ;
6668
67- const filteredProviders = providers
69+ const filteredProviders = orderedProviders
6870 . map ( ( provider ) => ( {
6971 ...provider ,
7072 chatModels : provider . chatModels . filter (
@@ -141,6 +143,7 @@ const ModelSelector = () => {
141143 onClick = { ( ) =>
142144 handleModelSelect ( provider . id , model . key )
143145 }
146+ type = "button"
144147 className = { cn (
145148 'px-3 py-2 flex items-center justify-between text-start duration-200 cursor-pointer transition rounded-lg group' ,
146149 chatModelProvider ?. providerId === provider . id &&
0 commit comments