murashit_codex-panel/tests/app-server/runtime-overrides.test.ts

77 lines
2.8 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import type { ModelMetadataClient } from "../../src/app-server/services/catalog";
import { resolvedRuntimeOverrideForClient } from "../../src/app-server/services/runtime-overrides";
import type { ModelListResponse } from "../../src/generated/app-server/v2/ModelListResponse";
describe("resolvedRuntimeOverrideForClient", () => {
it("uses Codex defaults without loading model metadata", async () => {
const client = modelClient([]);
await expect(resolvedRuntimeOverrideForClient(client, { model: null, effort: null })).resolves.toEqual({});
expect(client.request).not.toHaveBeenCalled();
});
it("passes a model-only override without loading model metadata", async () => {
const client = modelClient([]);
await expect(resolvedRuntimeOverrideForClient(client, { model: "gpt-5.4-mini", effort: null })).resolves.toEqual({
model: "gpt-5.4-mini",
});
expect(client.request).not.toHaveBeenCalled();
});
it("keeps only efforts supported by the selected model", async () => {
const client = modelClient([appServerModel("gpt-5.4-mini", ["low", "medium", "high"])]);
await expect(resolvedRuntimeOverrideForClient(client, { model: "gpt-5.4-mini", effort: "minimal" })).resolves.toEqual({
model: "gpt-5.4-mini",
});
await expect(resolvedRuntimeOverrideForClient(client, { model: "gpt-5.4-mini", effort: "low" })).resolves.toEqual({
model: "gpt-5.4-mini",
effort: "low",
});
});
it("preserves explicit settings when model metadata cannot be loaded", async () => {
const request = vi.fn(async () => {
throw new Error("unavailable");
}) as unknown as ModelMetadataClient["request"];
await expect(resolvedRuntimeOverrideForClient({ request }, { model: "gpt-5.4-mini", effort: "minimal" })).resolves.toEqual({
model: "gpt-5.4-mini",
effort: "minimal",
});
});
});
function modelClient(models: ModelListResponse["data"]): ModelMetadataClient {
return {
request: vi.fn(async () => ({ data: models, nextCursor: null })) as unknown as ModelMetadataClient["request"],
};
}
function appServerModel(name: string, efforts: string[]): ModelListResponse["data"][number] {
return {
id: name,
model: name,
upgrade: null,
upgradeInfo: null,
availabilityNux: null,
displayName: name,
description: "",
hidden: false,
supportedReasoningEfforts: efforts.map((reasoningEffort) => ({
reasoningEffort: reasoningEffort as never,
label: reasoningEffort,
description: "",
})),
defaultReasoningEffort: (efforts[0] ?? "low") as never,
inputModalities: ["text"],
supportsPersonality: false,
additionalSpeedTiers: [],
serviceTiers: [],
defaultServiceTier: null,
isDefault: false,
};
}