mirror of https://github.com/openclaw/openclaw.git
fix: enable fast mode for isolated cron runs
This commit is contained in:
parent
42efd98ff8
commit
2201d533fd
|
|
@ -0,0 +1,182 @@
|
|||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
makeIsolatedAgentTurnJob,
|
||||
makeIsolatedAgentTurnParams,
|
||||
setupRunCronIsolatedAgentTurnSuite,
|
||||
} from "./run.suite-helpers.js";
|
||||
import {
|
||||
loadRunCronIsolatedAgentTurn,
|
||||
makeCronSession,
|
||||
resolveCronSessionMock,
|
||||
runEmbeddedPiAgentMock,
|
||||
runWithModelFallbackMock,
|
||||
} from "./run.test-harness.js";
|
||||
|
||||
const runCronIsolatedAgentTurn = await loadRunCronIsolatedAgentTurn();
|
||||
|
||||
describe("runCronIsolatedAgentTurn — fast mode", () => {
|
||||
setupRunCronIsolatedAgentTurnSuite();
|
||||
|
||||
it("passes config-driven fast mode into embedded cron runs", async () => {
|
||||
const cronSession = makeCronSession();
|
||||
resolveCronSessionMock.mockReturnValue(cronSession);
|
||||
|
||||
runWithModelFallbackMock.mockImplementation(async ({ provider, model, run }) => {
|
||||
await run(provider, model);
|
||||
return {
|
||||
result: {
|
||||
payloads: [{ text: "ok" }],
|
||||
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
|
||||
},
|
||||
provider,
|
||||
model,
|
||||
attempts: [],
|
||||
};
|
||||
});
|
||||
|
||||
const result = await runCronIsolatedAgentTurn(
|
||||
makeIsolatedAgentTurnParams({
|
||||
cfg: {
|
||||
agents: {
|
||||
defaults: {
|
||||
models: {
|
||||
"openai/gpt-4": {
|
||||
params: {
|
||||
fastMode: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
job: makeIsolatedAgentTurnJob({
|
||||
payload: {
|
||||
kind: "agentTurn",
|
||||
message: "test fast mode",
|
||||
model: "openai/gpt-4",
|
||||
},
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.status).toBe("ok");
|
||||
expect(runEmbeddedPiAgentMock).toHaveBeenCalledOnce();
|
||||
expect(runEmbeddedPiAgentMock.mock.calls[0][0]).toMatchObject({
|
||||
provider: "openai",
|
||||
model: "gpt-4",
|
||||
fastMode: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("honors session fastMode=false over config fastMode=true", async () => {
|
||||
const cronSession = makeCronSession({
|
||||
sessionEntry: {
|
||||
...makeCronSession().sessionEntry,
|
||||
fastMode: false,
|
||||
},
|
||||
});
|
||||
resolveCronSessionMock.mockReturnValue(cronSession);
|
||||
|
||||
runWithModelFallbackMock.mockImplementation(async ({ provider, model, run }) => {
|
||||
await run(provider, model);
|
||||
return {
|
||||
result: {
|
||||
payloads: [{ text: "ok" }],
|
||||
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
|
||||
},
|
||||
provider,
|
||||
model,
|
||||
attempts: [],
|
||||
};
|
||||
});
|
||||
|
||||
const result = await runCronIsolatedAgentTurn(
|
||||
makeIsolatedAgentTurnParams({
|
||||
cfg: {
|
||||
agents: {
|
||||
defaults: {
|
||||
models: {
|
||||
"openai/gpt-4": {
|
||||
params: {
|
||||
fastMode: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
job: makeIsolatedAgentTurnJob({
|
||||
payload: {
|
||||
kind: "agentTurn",
|
||||
message: "test fast mode override",
|
||||
model: "openai/gpt-4",
|
||||
},
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.status).toBe("ok");
|
||||
expect(runEmbeddedPiAgentMock).toHaveBeenCalledOnce();
|
||||
expect(runEmbeddedPiAgentMock.mock.calls[0][0]).toMatchObject({
|
||||
provider: "openai",
|
||||
model: "gpt-4",
|
||||
fastMode: false,
|
||||
});
|
||||
});
|
||||
|
||||
it("honors session fastMode=true over config fastMode=false", async () => {
|
||||
const cronSession = makeCronSession({
|
||||
sessionEntry: {
|
||||
...makeCronSession().sessionEntry,
|
||||
fastMode: true,
|
||||
},
|
||||
});
|
||||
resolveCronSessionMock.mockReturnValue(cronSession);
|
||||
|
||||
runWithModelFallbackMock.mockImplementation(async ({ provider, model, run }) => {
|
||||
await run(provider, model);
|
||||
return {
|
||||
result: {
|
||||
payloads: [{ text: "ok" }],
|
||||
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
|
||||
},
|
||||
provider,
|
||||
model,
|
||||
attempts: [],
|
||||
};
|
||||
});
|
||||
|
||||
const result = await runCronIsolatedAgentTurn(
|
||||
makeIsolatedAgentTurnParams({
|
||||
cfg: {
|
||||
agents: {
|
||||
defaults: {
|
||||
models: {
|
||||
"openai/gpt-4": {
|
||||
params: {
|
||||
fastMode: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
job: makeIsolatedAgentTurnJob({
|
||||
payload: {
|
||||
kind: "agentTurn",
|
||||
message: "test fast mode session override",
|
||||
model: "openai/gpt-4",
|
||||
},
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.status).toBe("ok");
|
||||
expect(runEmbeddedPiAgentMock).toHaveBeenCalledOnce();
|
||||
expect(runEmbeddedPiAgentMock.mock.calls[0][0]).toMatchObject({
|
||||
provider: "openai",
|
||||
model: "gpt-4",
|
||||
fastMode: true,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -12,6 +12,7 @@ import { getCliSessionId, setCliSessionId } from "../../agents/cli-session.js";
|
|||
import { lookupContextTokens } from "../../agents/context.js";
|
||||
import { resolveCronStyleNow } from "../../agents/current-time.js";
|
||||
import { DEFAULT_CONTEXT_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
||||
import { resolveFastModeState } from "../../agents/fast-mode.js";
|
||||
import { resolveNestedAgentLane } from "../../agents/lanes.js";
|
||||
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
||||
import { runWithModelFallback } from "../../agents/model-fallback.js";
|
||||
|
|
@ -617,6 +618,12 @@ export async function runCronIsolatedAgentTurn(params: {
|
|||
authProfileId,
|
||||
authProfileIdSource,
|
||||
thinkLevel,
|
||||
fastMode: resolveFastModeState({
|
||||
cfg: cfgWithAgentDefaults,
|
||||
provider: providerOverride,
|
||||
model: modelOverride,
|
||||
sessionEntry: cronSession.sessionEntry,
|
||||
}).enabled,
|
||||
verboseLevel: resolvedVerboseLevel,
|
||||
timeoutMs,
|
||||
bootstrapContextMode: agentPayload?.lightContext ? "lightweight" : undefined,
|
||||
|
|
|
|||
Loading…
Reference in New Issue