test(subagents): dedupe sessions_spawn model expectation paths

This commit is contained in:
Peter Steinberger
2026-02-19 07:44:34 +00:00
parent d7b2efc2e7
commit ccd68d8166

View File

@@ -62,14 +62,18 @@ function mockPatchAndSingleAgentRun(params: { calls: GatewayCall[]; runId: strin
} }
async function expectSpawnUsesConfiguredModel(params: { async function expectSpawnUsesConfiguredModel(params: {
config: SessionsSpawnConfigOverride; config?: SessionsSpawnConfigOverride;
runId: string; runId: string;
callId: string; callId: string;
expectedModel: string; expectedModel: string;
}) { }) {
resetSubagentRegistryForTests(); resetSubagentRegistryForTests();
callGatewayMock.mockReset(); callGatewayMock.mockReset();
setSessionsSpawnConfigOverride(params.config); if (params.config) {
setSessionsSpawnConfigOverride(params.config);
} else {
resetSessionsSpawnConfigOverride();
}
const calls: GatewayCall[] = []; const calls: GatewayCall[] = [];
mockPatchAndSingleAgentRun({ calls, runId: params.runId }); mockPatchAndSingleAgentRun({ calls, runId: params.runId });
@@ -198,60 +202,22 @@ describe("openclaw-tools: subagents (sessions_spawn model + thinking)", () => {
}); });
it("sessions_spawn applies default subagent model from defaults config", async () => { it("sessions_spawn applies default subagent model from defaults config", async () => {
resetSubagentRegistryForTests(); await expectSpawnUsesConfiguredModel({
callGatewayMock.mockReset(); config: {
setSessionsSpawnConfigOverride({ session: { mainKey: "main", scope: "per-sender" },
session: { mainKey: "main", scope: "per-sender" }, agents: { defaults: { subagents: { model: "minimax/MiniMax-M2.1" } } },
agents: { defaults: { subagents: { model: "minimax/MiniMax-M2.1" } } }, },
}); runId: "run-default-model",
const calls: GatewayCall[] = []; callId: "call-default-model",
mockPatchAndSingleAgentRun({ calls, runId: "run-default-model" }); expectedModel: "minimax/MiniMax-M2.1",
const tool = await getSessionsSpawnTool({
agentSessionKey: "agent:main:main",
agentChannel: "discord",
});
const result = await tool.execute("call-default-model", {
task: "do thing",
});
expect(result.details).toMatchObject({
status: "accepted",
modelApplied: true,
});
const patchCall = calls.find(
(call) => call.method === "sessions.patch" && (call.params as { model?: string })?.model,
);
expect(patchCall?.params).toMatchObject({
model: "minimax/MiniMax-M2.1",
}); });
}); });
it("sessions_spawn falls back to runtime default model when no model config is set", async () => { it("sessions_spawn falls back to runtime default model when no model config is set", async () => {
resetSubagentRegistryForTests(); await expectSpawnUsesConfiguredModel({
callGatewayMock.mockReset(); runId: "run-runtime-default-model",
const calls: GatewayCall[] = []; callId: "call-runtime-default-model",
mockPatchAndSingleAgentRun({ calls, runId: "run-runtime-default-model" }); expectedModel: `${DEFAULT_PROVIDER}/${DEFAULT_MODEL}`,
const tool = await getSessionsSpawnTool({
agentSessionKey: "agent:main:main",
agentChannel: "discord",
});
const result = await tool.execute("call-runtime-default-model", {
task: "do thing",
});
expect(result.details).toMatchObject({
status: "accepted",
modelApplied: true,
});
const patchCall = calls.find(
(call) => call.method === "sessions.patch" && (call.params as { model?: string })?.model,
);
expect(patchCall?.params).toMatchObject({
model: `${DEFAULT_PROVIDER}/${DEFAULT_MODEL}`,
}); });
}); });