109 lines
3.0 KiB
TypeScript
109 lines
3.0 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
|
|
import { resolveAssistantPreferenceModelId, resolveAssistantThreadPreferenceModelId } from "./assistant-preferences";
|
|
|
|
const models = [
|
|
{
|
|
id: "provider/default",
|
|
name: "Default",
|
|
description: null,
|
|
contextLength: null,
|
|
promptPrice: null,
|
|
completionPrice: null,
|
|
inputModalities: ["text"],
|
|
},
|
|
{
|
|
id: "provider/alternate",
|
|
name: "Alternate",
|
|
description: null,
|
|
contextLength: null,
|
|
promptPrice: null,
|
|
completionPrice: null,
|
|
inputModalities: ["text"],
|
|
},
|
|
];
|
|
|
|
describe("resolveAssistantPreferenceModelId", () => {
|
|
test("uses the server default when preferences first load", () => {
|
|
expect(
|
|
resolveAssistantPreferenceModelId({
|
|
currentModelId: null,
|
|
previousDefaultModelId: undefined,
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBe("provider/default");
|
|
});
|
|
|
|
test("adopts a changed server default even when the old model remains available", () => {
|
|
expect(
|
|
resolveAssistantPreferenceModelId({
|
|
currentModelId: "provider/default",
|
|
previousDefaultModelId: "provider/default",
|
|
defaultModelId: "provider/alternate",
|
|
models,
|
|
}),
|
|
).toBe("provider/alternate");
|
|
});
|
|
|
|
test("preserves an available conversation selection while the default is unchanged", () => {
|
|
expect(
|
|
resolveAssistantPreferenceModelId({
|
|
currentModelId: "provider/alternate",
|
|
previousDefaultModelId: "provider/default",
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBe("provider/alternate");
|
|
});
|
|
|
|
test("falls back to the default when the selected model is no longer available", () => {
|
|
expect(
|
|
resolveAssistantPreferenceModelId({
|
|
currentModelId: "provider/removed",
|
|
previousDefaultModelId: "provider/default",
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBe("provider/default");
|
|
});
|
|
});
|
|
|
|
describe("resolveAssistantThreadPreferenceModelId", () => {
|
|
test("waits for an existing remote conversation's metadata", () => {
|
|
expect(
|
|
resolveAssistantThreadPreferenceModelId({
|
|
isRemote: true,
|
|
metadataLoaded: false,
|
|
threadModelId: undefined,
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBeUndefined();
|
|
});
|
|
|
|
test("uses the default immediately for a new local conversation", () => {
|
|
expect(
|
|
resolveAssistantThreadPreferenceModelId({
|
|
isRemote: false,
|
|
metadataLoaded: false,
|
|
threadModelId: undefined,
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBe("provider/default");
|
|
});
|
|
|
|
test("restores a valid persisted conversation model", () => {
|
|
expect(
|
|
resolveAssistantThreadPreferenceModelId({
|
|
isRemote: true,
|
|
metadataLoaded: true,
|
|
threadModelId: "provider/alternate",
|
|
defaultModelId: "provider/default",
|
|
models,
|
|
}),
|
|
).toBe("provider/alternate");
|
|
});
|
|
});
|