diff --git a/ui/src/pages/model-providers/route.ts b/ui/src/pages/model-providers/route.ts index 00e58ffdbb86..7d634342671b 100644 --- a/ui/src/pages/model-providers/route.ts +++ b/ui/src/pages/model-providers/route.ts @@ -6,8 +6,8 @@ import type { ModelProvidersRouteData } from "./model-providers-page.ts"; async function loadModelProvidersRouteData( context: ApplicationContext, ): Promise { - const { EMPTY_MODEL_PROVIDERS_DATA, loadModelProvidersData } = await import("./load.ts"); const gatewaySnapshot = context.gateway.snapshot; + const { EMPTY_MODEL_PROVIDERS_DATA, loadModelProvidersData } = await import("./load.ts"); const client = gatewaySnapshot.connected ? gatewaySnapshot.client : null; if (!client) { return { data: EMPTY_MODEL_PROVIDERS_DATA, client: null }; diff --git a/ui/src/pages/route-provenance.test.ts b/ui/src/pages/route-provenance.test.ts index ca15bc7b986e..975770d33342 100644 --- a/ui/src/pages/route-provenance.test.ts +++ b/ui/src/pages/route-provenance.test.ts @@ -4,6 +4,8 @@ import type { GatewayBrowserClient } from "../api/gateway.ts"; import type { ApplicationContext, ApplicationGatewaySnapshot } from "../app/context.ts"; import type { AgentsRouteData } from "./agents/agents-page.ts"; import { page as agentsPage } from "./agents/route.ts"; +import type { ModelProvidersRouteData } from "./model-providers/model-providers-page.ts"; +import { page as modelProvidersPage } from "./model-providers/route.ts"; import type { NodesRouteData } from "./nodes/nodes-page.ts"; import { page as nodesPage } from "./nodes/route.ts"; import type { PluginsRouteData } from "./plugins/plugins-page.ts"; @@ -135,6 +137,26 @@ describe("route preload gateway provenance", () => { expect(data.gatewaySnapshot).toBe(originalSnapshot); }); + it("keeps model providers provenance from before its lazy module load", async () => { + const originalRequest = vi.fn(async () => ({})); + const originalClient = { request: originalRequest } as unknown as GatewayBrowserClient; + const replacementRequest = vi.fn(async () => ({})); + const replacementClient = { + request: replacementRequest, + } as unknown as GatewayBrowserClient; + const mutable = mutableGateway(snapshot(originalClient, true)); + const request = loadRoute(modelProvidersPage, { + gateway: mutable.gateway, + } as unknown as ApplicationContext); + + mutable.replaceSnapshot(snapshot(replacementClient, true)); + const data = await request; + + expect(data.client).toBe(originalClient); + expect(originalRequest).toHaveBeenCalled(); + expect(replacementRequest).not.toHaveBeenCalled(); + }); + it("keeps skills provenance from before its async preload", async () => { const client = { request: vi.fn(async () => ({ skills: [] })),