Merge remote-tracking branch 'origin/v2' into tui-inbox-tabs
This commit is contained in:
commit
4f936c2c95
2 changed files with 29 additions and 5 deletions
|
|
@ -63,15 +63,15 @@ export function DialogModel(props: { providerID?: string }) {
|
||||||
.filter((model) => (props.providerID ? model.providerID === props.providerID : true))
|
.filter((model) => (props.providerID ? model.providerID === props.providerID : true))
|
||||||
.map((model) => {
|
.map((model) => {
|
||||||
const provider = providers().get(model.providerID)
|
const provider = providers().get(model.providerID)
|
||||||
|
const favorite = favorites.some((item) => item.providerID === model.providerID && item.modelID === model.id)
|
||||||
return {
|
return {
|
||||||
value: { providerID: model.providerID, modelID: model.id },
|
value: { providerID: model.providerID, modelID: model.id },
|
||||||
providerID: model.providerID,
|
providerID: model.providerID,
|
||||||
providerName: provider?.name ?? model.providerID,
|
providerName: provider?.name ?? model.providerID,
|
||||||
title: model.name,
|
title: model.name,
|
||||||
releaseDate: model.time.released,
|
releaseDate: model.time.released,
|
||||||
description: favorites.some((item) => item.providerID === model.providerID && item.modelID === model.id)
|
favorite,
|
||||||
? "(Favorite)"
|
description: favorite ? "(Favorite)" : undefined,
|
||||||
: undefined,
|
|
||||||
category: connected() ? (provider?.name ?? model.providerID) : undefined,
|
category: connected() ? (provider?.name ?? model.providerID) : undefined,
|
||||||
footer: free(model) ? "Free" : undefined,
|
footer: free(model) ? "Free" : undefined,
|
||||||
onSelect() {
|
onSelect() {
|
||||||
|
|
@ -96,7 +96,9 @@ export function DialogModel(props: { providerID?: string }) {
|
||||||
)
|
)
|
||||||
|
|
||||||
if (needle) {
|
if (needle) {
|
||||||
return fuzzysort.go(needle, modelOptions, { keys: ["title", "category"] }).map((item) => item.obj)
|
return prioritizeFavorites(
|
||||||
|
fuzzysort.go(needle, modelOptions, { keys: ["title", "category"] }).map((item) => item.obj),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return [...favoriteOptions, ...recentOptions, ...modelOptions]
|
return [...favoriteOptions, ...recentOptions, ...modelOptions]
|
||||||
|
|
@ -160,6 +162,10 @@ export function DialogModel(props: { providerID?: string }) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function prioritizeFavorites<T extends { favorite: boolean }>(options: T[]) {
|
||||||
|
return options.toSorted((a, b) => Number(b.favorite) - Number(a.favorite))
|
||||||
|
}
|
||||||
|
|
||||||
export function sortModelOptions<
|
export function sortModelOptions<
|
||||||
T extends { providerID?: string; providerName?: string; releaseDate: string | number; title: string },
|
T extends { providerID?: string; providerName?: string; releaseDate: string | number; title: string },
|
||||||
>(options: T[]) {
|
>(options: T[]) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,23 @@
|
||||||
import { describe, expect, test } from "bun:test"
|
import { describe, expect, test } from "bun:test"
|
||||||
import { sortModelOptions } from "../../../../src/component/dialog-model"
|
import { prioritizeFavorites, sortModelOptions } from "../../../../src/component/dialog-model"
|
||||||
|
|
||||||
|
describe("prioritizeFavorites", () => {
|
||||||
|
test("moves favorites first while preserving fuzzy result order", () => {
|
||||||
|
const prioritized = prioritizeFavorites([
|
||||||
|
{ title: "Best match", favorite: false },
|
||||||
|
{ title: "Favorite match", favorite: true },
|
||||||
|
{ title: "Second best match", favorite: false },
|
||||||
|
{ title: "Second favorite match", favorite: true },
|
||||||
|
])
|
||||||
|
|
||||||
|
expect(prioritized.map((model) => model.title)).toEqual([
|
||||||
|
"Favorite match",
|
||||||
|
"Second favorite match",
|
||||||
|
"Best match",
|
||||||
|
"Second best match",
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("sortModelOptions", () => {
|
describe("sortModelOptions", () => {
|
||||||
test("orders opencode models before other providers", () => {
|
test("orders opencode models before other providers", () => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue