@@ -34,45 +34,60 @@ export function DialogModel() {
3434 ]
3535 : recents
3636
37+ const isCurrent = ( item : { providerID : string ; modelID : string } ) =>
38+ currentModel && item . providerID === currentModel . providerID && item . modelID === currentModel . modelID
39+
40+ const currentIsFavorite = currentModel && favorites . some ( ( fav ) => isCurrent ( fav ) )
41+
3742 const recentList = orderedRecents . filter (
3843 ( item ) => ! favorites . some ( ( fav ) => fav . providerID === item . providerID && fav . modelID === item . modelID ) ,
3944 )
4045
41- const favoriteOptions = ! query
42- ? favorites . flatMap ( ( item ) => {
43- const provider = sync . data . provider . find ( ( x ) => x . id === item . providerID )
44- if ( ! provider ) return [ ]
45- const model = provider . models [ item . modelID ]
46- if ( ! model ) return [ ]
47- return [
48- {
49- key : item ,
50- value : {
51- providerID : provider . id ,
52- modelID : model . id ,
53- } ,
54- title : model . name ?? item . modelID ,
55- description : `${ provider . name } ★` ,
56- category : "Favorites" ,
57- disabled : provider . id === "opencode" && model . id . includes ( "-nano" ) ,
58- footer : model . cost ?. input === 0 && provider . id === "opencode" ? "Free" : undefined ,
59- onSelect : ( ) => {
60- dialog . clear ( )
61- local . model . set (
62- {
63- providerID : provider . id ,
64- modelID : model . id ,
65- } ,
66- { recent : true } ,
67- )
46+ const orderedFavorites = currentModel
47+ ? [ ...favorites . filter ( ( item ) => isCurrent ( item ) ) , ...favorites . filter ( ( item ) => ! isCurrent ( item ) ) ]
48+ : favorites
49+
50+ const orderedRecentList =
51+ currentModel && ! currentIsFavorite
52+ ? [ ...recentList . filter ( ( item ) => isCurrent ( item ) ) , ...recentList . filter ( ( item ) => ! isCurrent ( item ) ) ]
53+ : recentList
54+
55+ const favoriteOptions =
56+ ! query && favorites . length > 0
57+ ? orderedFavorites . flatMap ( ( item ) => {
58+ const provider = sync . data . provider . find ( ( x ) => x . id === item . providerID )
59+ if ( ! provider ) return [ ]
60+ const model = provider . models [ item . modelID ]
61+ if ( ! model ) return [ ]
62+ return [
63+ {
64+ key : item ,
65+ value : {
66+ providerID : provider . id ,
67+ modelID : model . id ,
68+ } ,
69+ title : model . name ?? item . modelID ,
70+ description : `${ provider . name } ★` ,
71+ category : "Favorites" ,
72+ disabled : provider . id === "opencode" && model . id . includes ( "-nano" ) ,
73+ footer : model . cost ?. input === 0 && provider . id === "opencode" ? "Free" : undefined ,
74+ onSelect : ( ) => {
75+ dialog . clear ( )
76+ local . model . set (
77+ {
78+ providerID : provider . id ,
79+ modelID : model . id ,
80+ } ,
81+ { recent : true } ,
82+ )
83+ } ,
6884 } ,
69- } ,
70- ]
71- } )
72- : [ ]
85+ ]
86+ } )
87+ : [ ]
7388
7489 const recentOptions = ! query
75- ? recentList . flatMap ( ( item ) => {
90+ ? orderedRecentList . flatMap ( ( item ) => {
7691 const provider = sync . data . provider . find ( ( x ) => x . id === item . providerID )
7792 if ( ! provider ) return [ ]
7893 const model = provider . models [ item . modelID ]
0 commit comments