From cf04fa24d8fb1c3cfdb1ea569a23f38fb9209b65 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 27 Apr 2026 07:22:19 +0100 Subject: [PATCH] test(openai): prefer exact live registry models --- .../openai/openai-provider.live.test.ts | 24 ++++++++++++----- extensions/openai/openai.live.test.ts | 26 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/extensions/openai/openai-provider.live.test.ts b/extensions/openai/openai-provider.live.test.ts index c2c7d6cf8d2..a3f5ae47171 100644 --- a/extensions/openai/openai-provider.live.test.ts +++ b/extensions/openai/openai-provider.live.test.ts @@ -1,4 +1,6 @@ +import { getModel, type Api, type Model } from "@mariozechner/pi-ai"; import OpenAI from "openai"; +import type { ProviderRuntimeModel } from "openclaw/plugin-sdk/plugin-entry"; import { describe, expect, it } from "vitest"; import { buildOpenAIProvider } from "./openai-provider.js"; @@ -16,6 +18,10 @@ type LiveModelCase = { maxTokens: number; }; +function findOpenAIModel(modelId: string): Model | null { + return (getModel("openai", modelId as never) as Model | undefined) ?? null; +} + function resolveLiveModelCase(modelId: string): LiveModelCase { switch (modelId) { case "gpt-5.5": @@ -96,6 +102,10 @@ describeLive("buildOpenAIProvider live", () => { if (providerId !== "openai") { return null; } + const exactModel = findOpenAIModel(id); + if (exactModel) { + return exactModel; + } if (id === liveCase.templateId) { return { id: liveCase.templateId, @@ -108,17 +118,19 @@ describeLive("buildOpenAIProvider live", () => { cost: liveCase.cost, contextWindow: liveCase.contextWindow, maxTokens: liveCase.maxTokens, - }; + } satisfies ProviderRuntimeModel; } return null; }, }; - const resolved = provider.resolveDynamicModel?.({ - provider: "openai", - modelId: liveCase.modelId, - modelRegistry: registry as never, - }); + const resolved = + registry.find("openai", liveCase.modelId) ?? + provider.resolveDynamicModel?.({ + provider: "openai", + modelId: liveCase.modelId, + modelRegistry: registry as never, + }); if (!resolved) { throw new Error(`openai provider did not resolve ${liveCase.modelId}`); } diff --git a/extensions/openai/openai.live.test.ts b/extensions/openai/openai.live.test.ts index 8345c4409b1..b0bae60517c 100644 --- a/extensions/openai/openai.live.test.ts +++ b/extensions/openai/openai.live.test.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import { getModel } from "@mariozechner/pi-ai"; +import { getModel, type Api, type Model } from "@mariozechner/pi-ai"; import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent"; import OpenAI from "openai"; import type { ResolvedTtsConfig } from "openclaw/plugin-sdk/agent-runtime"; @@ -27,6 +27,10 @@ const ModelRegistryCtor = ModelRegistry as unknown as { new (authStorage: AuthStorage, modelsJsonPath?: string): ModelRegistry; }; +function findOpenAIModel(modelId: string): Model | null { + return (getModel("openai", modelId as never) as Model | undefined) ?? null; +} + function resolveTemplateModelId(modelId: string) { switch (modelId) { case "gpt-5.5": @@ -42,9 +46,12 @@ function resolveTemplateModelId(modelId: string) { } } -function createTemplateModelRegistry(modelId: string): ModelRegistry { +function createLiveModelRegistry(modelId: string): ModelRegistry { const registry = new ModelRegistryCtor(AuthStorage.inMemory()); - const template = getModel("openai", resolveTemplateModelId(modelId)); + const template = findOpenAIModel(modelId) ?? findOpenAIModel(resolveTemplateModelId(modelId)); + if (!template) { + throw new Error(`Unsupported live OpenAI plugin model: ${modelId}`); + } registry.registerProvider("openai", { apiKey: "test", baseUrl: template.baseUrl, @@ -183,12 +190,15 @@ describeLive("openai plugin live", () => { it("registers an OpenAI provider that can complete a live request", async () => { const { providers } = await registerOpenAIPlugin(); const provider = requireRegisteredProvider(providers, "openai"); + const modelRegistry = createLiveModelRegistry(LIVE_MODEL_ID); - const resolved = provider.resolveDynamicModel?.({ - provider: "openai", - modelId: LIVE_MODEL_ID, - modelRegistry: createTemplateModelRegistry(LIVE_MODEL_ID), - }); + const resolved = + modelRegistry.find("openai", LIVE_MODEL_ID) ?? + provider.resolveDynamicModel?.({ + provider: "openai", + modelId: LIVE_MODEL_ID, + modelRegistry, + }); if (!resolved) { throw new Error("openai provider did not resolve the live model");