feat(FN-5204): add test mode activation across settings, engine, and dashboard
- Add core settings schema/types support for testMode with model-resolution override handling - Enforce engine session lane overrides in test mode with targeted helper coverage - Add dashboard settings toggle plus persistent test-mode banner and related component tests - Update settings documentation and parity/roundtrip tests for the new test mode behavior
This commit is contained in:
committed by
gsxdsm
parent
fbf7e2cb4d
commit
9c2b61eec6
@@ -0,0 +1,111 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
resolveExecutorSessionModel,
|
||||
resolveHeartbeatSessionModels,
|
||||
resolveMergerSessionModel,
|
||||
resolvePlanningSessionModel,
|
||||
} from "../agent-session-helpers.js";
|
||||
|
||||
const assignedAgentRuntimeConfig = {
|
||||
modelProvider: "anthropic",
|
||||
modelId: "claude-sonnet-4-5",
|
||||
};
|
||||
|
||||
describe("agent-session-helpers test mode overrides", () => {
|
||||
it("forces every resolver lane to mock when settings.testMode is true", () => {
|
||||
const settings = {
|
||||
testMode: true,
|
||||
defaultProvider: "openai",
|
||||
defaultModelId: "gpt-4.1",
|
||||
executionProvider: "openai",
|
||||
executionModelId: "gpt-4.1",
|
||||
planningProvider: "openai",
|
||||
planningModelId: "gpt-4.1",
|
||||
defaultProviderOverride: "openai",
|
||||
defaultModelIdOverride: "gpt-4.1",
|
||||
};
|
||||
|
||||
expect(resolveExecutorSessionModel("openai", "gpt-4.1", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolvePlanningSessionModel("openai", "gpt-4.1", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolveMergerSessionModel(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolveHeartbeatSessionModels(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
defaultProvider: "mock",
|
||||
defaultModelId: "scripted",
|
||||
fallbackProvider: undefined,
|
||||
fallbackModelId: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it("forces every resolver lane to mock when defaultProvider is mock", () => {
|
||||
const settings = {
|
||||
defaultProvider: "mock",
|
||||
defaultModelId: "custom",
|
||||
executionProvider: "openai",
|
||||
executionModelId: "gpt-4.1",
|
||||
planningProvider: "openai",
|
||||
planningModelId: "gpt-4.1",
|
||||
defaultProviderOverride: "openai",
|
||||
defaultModelIdOverride: "gpt-4.1",
|
||||
};
|
||||
|
||||
expect(resolveExecutorSessionModel("openai", "gpt-4.1", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolvePlanningSessionModel("openai", "gpt-4.1", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolveMergerSessionModel(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "mock",
|
||||
modelId: "scripted",
|
||||
});
|
||||
expect(resolveHeartbeatSessionModels(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
defaultProvider: "mock",
|
||||
defaultModelId: "scripted",
|
||||
fallbackProvider: undefined,
|
||||
fallbackModelId: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it("keeps existing behavior when test mode is inactive", () => {
|
||||
const settings = {
|
||||
executionProvider: "openai",
|
||||
executionModelId: "gpt-4.1",
|
||||
planningProvider: "openai",
|
||||
planningModelId: "gpt-4.1",
|
||||
defaultProviderOverride: "openai",
|
||||
defaultModelIdOverride: "gpt-4.1",
|
||||
defaultProvider: "openai",
|
||||
defaultModelId: "gpt-4.1",
|
||||
};
|
||||
|
||||
expect(resolveExecutorSessionModel("task-provider", "task-model", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "anthropic",
|
||||
modelId: "claude-sonnet-4-5",
|
||||
});
|
||||
expect(resolvePlanningSessionModel("task-provider", "task-model", settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "anthropic",
|
||||
modelId: "claude-sonnet-4-5",
|
||||
});
|
||||
expect(resolveMergerSessionModel(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
provider: "anthropic",
|
||||
modelId: "claude-sonnet-4-5",
|
||||
});
|
||||
expect(resolveHeartbeatSessionModels(settings, assignedAgentRuntimeConfig)).toEqual({
|
||||
defaultProvider: "anthropic",
|
||||
defaultModelId: "claude-sonnet-4-5",
|
||||
fallbackProvider: "openai",
|
||||
fallbackModelId: "gpt-4.1",
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user