Skip to content

Commit e747767

Browse files
committed
one more tweak
1 parent 7d85dac commit e747767

1 file changed

Lines changed: 47 additions & 32 deletions

File tree

packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)