mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 01:41:40 +00:00
89 lines
2.9 KiB
TypeScript
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");
|
|
});
|
|
});
|