瀏覽代碼

fix(tui): sort model picker by release date (#33558)

Aiden Cline 1 月之前
父節點
當前提交
c416ede20d
共有 2 個文件被更改,包括 12 次插入6 次删除
  1. 5 1
      packages/tui/src/component/dialog-model.tsx
  2. 7 5
      packages/tui/test/cli/cmd/tui/model-options.test.ts

+ 5 - 1
packages/tui/src/component/dialog-model.tsx

@@ -118,7 +118,10 @@ export function DialogModel(props: { providerID?: string }) {
 
     if (needle) {
       return [
-        ...fuzzysort.go(needle, providerOptions, { keys: ["title", "category"] }).map((x) => x.obj),
+        ...sortModelOptions(
+          fuzzysort.go(needle, providerOptions, { keys: ["title", "category"] }).map((x) => x.obj),
+          false,
+        ),
         ...fuzzysort.go(needle, popularProviders, { keys: ["title"] }).map((x) => x.obj),
       ]
     }
@@ -188,6 +191,7 @@ export function sortModelOptions<T extends { footer?: string; releaseDate: strin
   return sortBy(
     options,
     (option) => option.footer !== "Free",
+    [(option) => option.releaseDate, "desc"],
     (option) => option.title,
   )
 }

+ 7 - 5
packages/tui/test/cli/cmd/tui/model-options.test.ts

@@ -15,16 +15,18 @@ describe("sortModelOptions", () => {
     expect(sorted.map((model) => model.title)).toEqual(["GPT 5.4", "GPT 5.2", "GPT 5.1"])
   })
 
-  test("preserves free-first alphabetical ordering for the regular picker", () => {
+  test("orders regular model choices free-first and then newest-first", () => {
     const sorted = sortModelOptions(
       [
-        { title: "Beta", releaseDate: "2026-01-01" },
-        { title: "Alpha", releaseDate: "2025-01-01", footer: "Free" },
-        { title: "Gamma", releaseDate: "2024-01-01", footer: "Free" },
+        { title: "GLM 5", releaseDate: "2025-07-28" },
+        { title: "GLM 5.1", releaseDate: "2025-12-09" },
+        { title: "GLM 5.2", releaseDate: "2026-02-16" },
+        { title: "Free old", releaseDate: "2024-01-01", footer: "Free" },
+        { title: "Free new", releaseDate: "2025-01-01", footer: "Free" },
       ],
       false,
     )
 
-    expect(sorted.map((model) => model.title)).toEqual(["Alpha", "Gamma", "Beta"])
+    expect(sorted.map((model) => model.title)).toEqual(["Free new", "Free old", "GLM 5.2", "GLM 5.1", "GLM 5"])
   })
 })