79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import { Agent, type ThinkingLevel } from "@jaeswift/jae-agent-core";
|
|
import { getModel } from "@jaeswift/jae-ai";
|
|
import { describe, expect, it } from "vitest";
|
|
import { AgentSession } from "../src/core/agent-session.js";
|
|
import { AuthStorage } from "../src/core/auth-storage.js";
|
|
import { ModelRegistry } from "../src/core/model-registry.js";
|
|
import { SessionManager } from "../src/core/session-manager.js";
|
|
import { SettingsManager } from "../src/core/settings-manager.js";
|
|
import { createTestResourceLoader } from "./utilities.js";
|
|
|
|
const reasoningModel = getModel("anthropic", "claude-sonnet-4-5")!;
|
|
const nonReasoningModel = getModel("anthropic", "claude-3-5-haiku-latest")!;
|
|
|
|
function createSession({
|
|
thinkingLevel = "high",
|
|
defaultThinkingLevel = thinkingLevel,
|
|
scopedModels,
|
|
}: {
|
|
thinkingLevel?: ThinkingLevel;
|
|
defaultThinkingLevel?: ThinkingLevel;
|
|
scopedModels?: Array<{ model: typeof reasoningModel; thinkingLevel?: ThinkingLevel }>;
|
|
} = {}) {
|
|
const settingsManager = SettingsManager.inMemory({ defaultThinkingLevel });
|
|
const sessionManager = SessionManager.inMemory();
|
|
const authStorage = AuthStorage.inMemory();
|
|
authStorage.setRuntimeApiKey("anthropic", "test-key");
|
|
const session = new AgentSession({
|
|
agent: new Agent({
|
|
getApiKey: () => "test-key",
|
|
initialState: {
|
|
model: reasoningModel,
|
|
systemPrompt: "You are a helpful assistant.",
|
|
tools: [],
|
|
thinkingLevel,
|
|
},
|
|
}),
|
|
sessionManager,
|
|
settingsManager,
|
|
cwd: process.cwd(),
|
|
modelRegistry: new ModelRegistry(authStorage, undefined),
|
|
resourceLoader: createTestResourceLoader(),
|
|
scopedModels,
|
|
});
|
|
|
|
return { session, sessionManager, settingsManager };
|
|
}
|
|
|
|
describe("AgentSession model switching", () => {
|
|
it("preserves the saved thinking preference through non-reasoning models", async () => {
|
|
const { session, sessionManager, settingsManager } = createSession({
|
|
scopedModels: [{ model: reasoningModel }, { model: nonReasoningModel }],
|
|
});
|
|
|
|
try {
|
|
await session.setModel(nonReasoningModel);
|
|
expect(session.thinkingLevel).toBe("off");
|
|
expect(settingsManager.getDefaultThinkingLevel()).toBe("high");
|
|
|
|
await session.setModel(reasoningModel);
|
|
expect(session.thinkingLevel).toBe("high");
|
|
|
|
await session.cycleModel();
|
|
expect(session.thinkingLevel).toBe("off");
|
|
expect(settingsManager.getDefaultThinkingLevel()).toBe("high");
|
|
|
|
await session.cycleModel();
|
|
expect(session.thinkingLevel).toBe("high");
|
|
expect(settingsManager.getDefaultThinkingLevel()).toBe("high");
|
|
expect(
|
|
sessionManager
|
|
.getEntries()
|
|
.filter((entry) => entry.type === "thinking_level_change")
|
|
.map((entry) => entry.thinkingLevel),
|
|
).toEqual(["off", "high", "off", "high"]);
|
|
} finally {
|
|
session.dispose();
|
|
}
|
|
});
|
|
});
|