Files
homarr/apps/nextjs/src/components/assistant/assistant-preferences.spec.ts
T

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");
});
});