




















@@ -3,14 +3,14 @@ import { createServer } from "node:net";
33import path from "node:path";
44import { afterAll, beforeAll, describe, expect, test } from "vitest";
55import { WebSocket } from "ws";
6-import { resetModelCatalogCacheForTest } from "../agents/model-catalog.js";
76import type { ChannelOutboundAdapter } from "../channels/plugins/types.js";
87import { clearConfigCache, clearRuntimeConfigSnapshot } from "../config/config.js";
98import { resolveCanvasHostUrl } from "../infra/canvas-host-url.js";
109import { createOutboundTestPlugin } from "../test-utils/channel-plugins.js";
1110import { withEnvAsync } from "../test-utils/env.js";
1211import { createTempHomeEnv } from "../test-utils/temp-home.js";
1312import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js";
13+import { __resetModelCatalogCacheForTest as resetGatewayModelCatalogCacheForTest } from "./server-model-catalog.js";
1414import { createRegistry } from "./server.e2e-registry-helpers.js";
1515import {
1616connectOk,
@@ -89,6 +89,8 @@ type ModelCatalogRpcEntry = {
8989provider: string;
9090alias?: string;
9191contextWindow?: number;
92+input?: string[];
93+reasoning?: boolean;
9294};
93959496type PiCatalogFixtureEntry = {
@@ -154,14 +156,14 @@ describe("gateway server models + voicewake", () => {
154156 : await rpcReq<{ models: ModelCatalogRpcEntry[] }>(ws, "models.list"),
155157);
156158157-const setPiCatalog = (entries: PiCatalogFixtureEntry[]) => {
159+const setPiCatalog = async (entries: PiCatalogFixtureEntry[]) => {
158160piSdkMock.enabled = true;
159161piSdkMock.models = entries;
160-resetModelCatalogCacheForTest();
162+await resetGatewayModelCatalogCacheForTest();
161163};
162164163-const seedPiCatalog = () => {
164-setPiCatalog(buildPiCatalogFixture());
165+const seedPiCatalog = async () => {
166+await setPiCatalog(buildPiCatalogFixture());
165167};
166168167169const withModelsConfig = async <T>(config: unknown, run: () => Promise<T>): Promise<T> => {
@@ -220,7 +222,7 @@ describe("gateway server models + voicewake", () => {
220222},
221223},
222224async () => {
223-seedPiCatalog();
225+await seedPiCatalog();
224226const res = await listModels();
225227expect(res.ok).toBe(true);
226228expect(res.payload?.models).toEqual(options.expected);
@@ -472,7 +474,7 @@ describe("gateway server models + voicewake", () => {
472474});
473475474476test("models.list all view returns model catalog", async () => {
475-seedPiCatalog();
477+await seedPiCatalog();
476478477479const res1 = await listModels({ view: "all" });
478480const res2 = await listModels({ view: "all" });
@@ -499,18 +501,18 @@ describe("gateway server models + voicewake", () => {
499501},
500502},
501503async () => {
502-setPiCatalog([
504+await setPiCatalog([
503505{ id: "remote-a", provider: "unauth-a", name: "Remote A" },
504506{ id: "remote-b", provider: "unauth-b", name: "Remote B" },
505507]);
506508const res = await listModels();
507509expect(res.ok).toBe(true);
508510expect(res.payload?.models).toEqual([
509-{
511+expect.objectContaining({
510512id: "MiniMax-M2.7-highspeed",
511513name: "MiniMax M2.7 Highspeed",
512514provider: "minimax",
513-},
515+}),
514516]);
515517},
516518);
@@ -525,7 +527,7 @@ describe("gateway server models + voicewake", () => {
525527},
526528async () => {
527529await withModelsConfig({}, async () => {
528-seedPiCatalog();
530+await seedPiCatalog();
529531const res = await listModels({ view: "configured" });
530532expect(res.ok).toBe(true);
531533expect(res.payload?.models).toEqual([
@@ -563,24 +565,24 @@ describe("gateway server models + voicewake", () => {
563565},
564566},
565567async () => {
566-setPiCatalog([
568+await setPiCatalog([
567569{ id: "remote-a", provider: "unauth-a", name: "Remote A" },
568570{ id: "remote-b", provider: "unauth-b", name: "Remote B" },
569571]);
570572const res = await listModels({ view: "configured" });
571573expect(res.ok).toBe(true);
572574expect(res.payload?.models).toEqual([
573-{
575+expect.objectContaining({
574576id: "MiniMax-M2.7-highspeed",
575577name: "MiniMax M2.7 Highspeed",
576578provider: "minimax",
577-},
578-{
579+}),
580+expect.objectContaining({
579581id: "glm-4.5-air",
580582name: "GLM 4.5 Air",
581583provider: "zhipu",
582584reasoning: true,
583-},
585+}),
584586]);
585587},
586588);
@@ -607,7 +609,7 @@ describe("gateway server models + voicewake", () => {
607609},
608610},
609611async () => {
610-seedPiCatalog();
612+await seedPiCatalog();
611613const res = await listModels({ view: "configured" });
612614expect(res.ok).toBe(true);
613615expect(res.payload?.models).toEqual([
@@ -634,7 +636,7 @@ describe("gateway server models + voicewake", () => {
634636},
635637},
636638async () => {
637-seedPiCatalog();
639+await seedPiCatalog();
638640const res = await listModels({ view: "all" });
639641expect(res.ok).toBe(true);
640642expect(res.payload?.models).toEqual(expectedSortedCatalog());
@@ -708,17 +710,17 @@ describe("gateway server models + voicewake", () => {
708710},
709711},
710712async () => {
711-seedPiCatalog();
713+await seedPiCatalog();
712714const res = await listModels();
713715expect(res.ok).toBe(true);
714716expect(res.payload?.models).toEqual([
715-{
717+expect.objectContaining({
716718id: "moonshotai/kimi-k2.5",
717719name: "Kimi K2.5 (Configured)",
718720alias: "Kimi K2.5 (NVIDIA)",
719721provider: "nvidia",
720722contextWindow: 32_000,
721-},
723+}),
722724]);
723725},
724726);
@@ -751,17 +753,17 @@ describe("gateway server models + voicewake", () => {
751753},
752754},
753755async () => {
754-seedPiCatalog();
756+await seedPiCatalog();
755757const res = await listModels();
756758expect(res.ok).toBe(true);
757759expect(res.payload?.models).toEqual([
758-{
760+expect.objectContaining({
759761id: "gpt-test-z",
760762name: "Configured GPT Test Z",
761763alias: "GPT Test Z Alias",
762764provider: "openai",
763765contextWindow: 64_000,
764-},
766+}),
765767]);
766768},
767769);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。