源码快照 @ 2026-09-02 (source-only, 剔除非源码素材)
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user