Files
openclaw/src/auto-reply/reply/session-reset-model.test.ts
2026-03-24 21:00:36 +00:00

89 lines
2.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { ModelCatalogEntry } from "../../agents/model-catalog.js";
import { buildModelAliasIndex } from "../../agents/model-selection.js";
import type { OpenClawConfig } from "../../config/config.js";
import type { SessionEntry } from "../../config/sessions.js";
import { applyResetModelOverride } from "./session-reset-model.js";
const modelCatalog: ModelCatalogEntry[] = [
{ provider: "minimax", id: "m2.7", name: "M2.7" },
{ provider: "openai", id: "gpt-4o-mini", name: "GPT-4o mini" },
];
function createResetFixture(entry: Partial<SessionEntry> = {}) {
const cfg = {} as OpenClawConfig;
const aliasIndex = buildModelAliasIndex({ cfg, defaultProvider: "openai" });
const sessionEntry: SessionEntry = {
sessionId: "s1",
updatedAt: Date.now(),
...entry,
};
return {
cfg,
aliasIndex,
sessionEntry,
sessionStore: { "agent:main:dm:1": sessionEntry } as Record<string, SessionEntry>,
sessionCtx: { BodyStripped: "minimax summarize" },
ctx: { ChatType: "direct" },
};
}
async function applyResetFixture(params: {
resetTriggered: boolean;
sessionEntry?: Partial<SessionEntry>;
}) {
const fixture = createResetFixture(params.sessionEntry);
await applyResetModelOverride({
cfg: fixture.cfg,
resetTriggered: params.resetTriggered,
bodyStripped: "minimax summarize",
sessionCtx: fixture.sessionCtx,
ctx: fixture.ctx,
sessionEntry: fixture.sessionEntry,
sessionStore: fixture.sessionStore,
sessionKey: "agent:main:dm:1",
defaultProvider: "openai",
defaultModel: "gpt-4o-mini",
aliasIndex: fixture.aliasIndex,
modelCatalog,
});
return fixture;
}
describe("applyResetModelOverride", () => {
it("selects a model hint and strips it from the body", async () => {
const { sessionEntry, sessionCtx } = await applyResetFixture({
resetTriggered: true,
});
expect(sessionEntry.providerOverride).toBe("minimax");
expect(sessionEntry.modelOverride).toBe("m2.7");
expect(sessionCtx.BodyStripped).toBe("summarize");
});
it("clears auth profile overrides when reset applies a model", async () => {
const { sessionEntry } = await applyResetFixture({
resetTriggered: true,
sessionEntry: {
authProfileOverride: "anthropic:default",
authProfileOverrideSource: "user",
authProfileOverrideCompactionCount: 2,
},
});
expect(sessionEntry.authProfileOverride).toBeUndefined();
expect(sessionEntry.authProfileOverrideSource).toBeUndefined();
expect(sessionEntry.authProfileOverrideCompactionCount).toBeUndefined();
});
it("skips when resetTriggered is false", async () => {
const { sessionEntry, sessionCtx } = await applyResetFixture({
resetTriggered: false,
});
expect(sessionEntry.providerOverride).toBeUndefined();
expect(sessionEntry.modelOverride).toBeUndefined();
expect(sessionCtx.BodyStripped).toBe("minimax summarize");
});
});