Files
openwork/apps/app/tests/model-behavior.test.ts

108 lines
2.8 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import type { ProviderListItem } from "../src/app/types";
import {
getModelBehaviorOptions,
nextModelBehaviorValue,
previousModelBehaviorValue,
} from "../src/app/lib/model-behavior";
type ProviderModel = ProviderListItem["models"][string];
const model: ProviderModel = {
id: "test-model",
providerID: "openai",
api: {
id: "test-model",
url: "https://example.com",
npm: "@ai-sdk/openai-compatible",
},
name: "Test model",
capabilities: {
temperature: true,
reasoning: true,
attachment: false,
toolcall: true,
input: {
text: true,
audio: false,
image: false,
video: false,
pdf: false,
},
output: {
text: true,
audio: false,
image: false,
video: false,
pdf: false,
},
interleaved: false,
},
cost: {
input: 0,
output: 0,
cache: {
read: 0,
write: 0,
},
},
limit: {
context: 1,
output: 1,
},
status: "active",
options: {},
headers: {},
release_date: "2026-01-01",
variants: {
none: {},
low: {},
medium: {},
high: {},
xhigh: {},
max: {},
},
};
describe("model behavior options", () => {
test("uses only the raw effort values reported by the model", () => {
const options = getModelBehaviorOptions("openai", model);
expect(options.map(({ value, label }) => ({ value, label }))).toEqual([
{ value: "none", label: "None" },
{ value: "low", label: "Low" },
{ value: "medium", label: "Medium" },
{ value: "high", label: "High" },
{ value: "xhigh", label: "Xhigh" },
{ value: "max", label: "Max" },
]);
});
test("cycles explicit effort values and wraps", () => {
const options = getModelBehaviorOptions("openai", model);
expect(nextModelBehaviorValue(options, "low")).toBe("medium");
expect(nextModelBehaviorValue(options, "max")).toBe("none");
expect(nextModelBehaviorValue(options, null)).toBe("none");
});
test("does not cycle models with fewer than two effort values", () => {
expect(nextModelBehaviorValue([], null)).toBeNull();
expect(nextModelBehaviorValue([{ value: "high" }], "high")).toBeNull();
});
test("cycles explicit effort values backward and wraps", () => {
const options = getModelBehaviorOptions("openai", model);
expect(previousModelBehaviorValue(options, "medium")).toBe("low");
expect(previousModelBehaviorValue(options, "none")).toBe("max");
expect(previousModelBehaviorValue(options, null)).toBe("max");
});
test("does not cycle backward with fewer than two effort values", () => {
expect(previousModelBehaviorValue([], null)).toBeNull();
expect(previousModelBehaviorValue([{ value: "high" }], "high")).toBeNull();
});
});