Files
openclaw/extensions/openai/provider-policy-projection.test.ts
Vincent Koc 5ae401d908 fix(models): reduce default model-list memory use (#117323)
* fix(models): scope default catalog discovery

* fix(models): split scoped catalog preparation

* perf(models): narrow model-list imports

* perf(auth): narrow provider id imports

* perf(plugins): narrow provider discovery imports

* perf(models): bypass runtime catalog facade for scoped lists

* perf(models): avoid runtime imports in default list

* fix(models): preserve scoped catalog coverage

* chore(models): remove obsolete auth exports

* perf(models): skip redundant configured-provider discovery

* perf(models): skip canonical row runtime loading

* fix(models): normalize configured fallback rows

* test(models): update registry list fixtures

* fix(models): separate catalog and runtime discovery scopes

* fix(models): break row projection import cycle

* fix(models): satisfy type and export checks

* fix(models): keep row projection bundled-only

* fix(models): preserve partial catalog visibility

* fix(models): avoid live discovery in default lists

* test(models): isolate auth-backed catalog coverage

* fix(models): retain OpenAI runtime normalization

* fix(models): skip canonical OpenAI row runtime loading

* test(models): keep provider policy fixtures typed

* fix(models): preserve configured OpenAI routes
2026-08-02 00:01:37 +08:00

108 lines
3.5 KiB
TypeScript

import type { ProviderNormalizeResolvedModelContext } from "openclaw/plugin-sdk/plugin-entry";
import type { ModelApi } from "openclaw/plugin-sdk/provider-model-types";
import { describe, expect, it } from "vitest";
import { projectConfiguredModelRow } from "./provider-policy-api.js";
function createProjectionContext(params?: {
modelId?: string;
rowApi?: ModelApi;
rowBaseUrl?: string;
providerApi?: ModelApi;
configuredModelApi?: ModelApi;
}): ProviderNormalizeResolvedModelContext {
const modelId = params?.modelId ?? "gpt-5.5";
return {
provider: "openai",
modelId,
...(params?.providerApi
? {
config: {
models: {
providers: {
openai: {
api: params.providerApi,
baseUrl: "https://api.openai.com/v1",
models: [
{
id: modelId,
name: "Configured OpenAI model",
reasoning: true,
input: ["text" as const],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 96_000,
maxTokens: 128_000,
...(params.configuredModelApi ? { api: params.configuredModelApi } : {}),
},
],
},
},
},
},
}
: {}),
model: {
provider: "openai",
id: modelId,
api: params?.rowApi ?? ("openai-responses" as const),
baseUrl: params?.rowBaseUrl ?? "https://api.openai.com/v1",
input: ["text" as const],
name: "OpenAI model",
reasoning: true,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 96_000,
maxTokens: 128_000,
},
};
}
describe("OpenAI configured-row projection", () => {
it("skips runtime normalization for canonical Responses rows", () => {
expect(projectConfiguredModelRow(createProjectionContext())).toBeNull();
});
it.each([
{
source: "provider",
providerApi: "openai-completions" as const,
configuredModelApi: undefined,
rowApi: undefined,
},
{
source: "model",
providerApi: "openai-responses" as const,
configuredModelApi: "openai-completions" as const,
rowApi: "openai-completions" as const,
},
{
source: "provider ChatGPT",
providerApi: "openai-chatgpt-responses" as const,
configuredModelApi: undefined,
rowApi: undefined,
},
])(
"keeps runtime normalization for a $source configured route",
({ providerApi, configuredModelApi, rowApi }) => {
expect(
projectConfiguredModelRow(
createProjectionContext({ providerApi, configuredModelApi, rowApi }),
),
).toBeUndefined();
},
);
it.each([
["openai-completions", "https://api.openai.com/v1", "gpt-5.5"],
["openai-chatgpt-responses", "https://chatgpt.com/backend-api/codex", "gpt-5.5"],
["openai-responses", "https://chatgpt.com/backend-api/codex", "gpt-5.5"],
["anthropic-messages", "https://api.openai.com/v1", "gpt-5.5"],
["openai-responses", "https://api.openai.com/v1", "gpt-5.4-codex"],
] as const)(
"keeps runtime normalization for api=%s baseUrl=%s model=%s",
(rowApi, rowBaseUrl, modelId) => {
expect(
projectConfiguredModelRow(createProjectionContext({ modelId, rowApi, rowBaseUrl })),
).toBeUndefined();
},
);
});