mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 12:10:42 +00:00
perf(cron): lazy-load context and catalog lookups
This commit is contained in:
1
src/cron/isolated-agent/run-context.runtime.ts
Normal file
1
src/cron/isolated-agent/run-context.runtime.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { lookupContextTokens } from "../../agents/context.js";
|
||||
1
src/cron/isolated-agent/run-model-catalog.runtime.ts
Normal file
1
src/cron/isolated-agent/run-model-catalog.runtime.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { loadModelCatalog } from "../../agents/model-catalog.js";
|
||||
@@ -5,10 +5,8 @@ export {
|
||||
resolveDefaultAgentId,
|
||||
resolveAgentSkillsFilter,
|
||||
} from "../../agents/agent-scope.js";
|
||||
export { lookupContextTokens } from "../../agents/context.js";
|
||||
export { resolveCronStyleNow } from "../../agents/current-time.js";
|
||||
export { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js";
|
||||
export { loadModelCatalog } from "../../agents/model-catalog.js";
|
||||
export { isCliProvider, resolveThinkingDefault } from "../../agents/model-selection.js";
|
||||
export { buildWorkspaceSkillSnapshot } from "../../agents/skills.js";
|
||||
export { getSkillsSnapshotVersion } from "../../agents/skills/refresh.js";
|
||||
|
||||
@@ -98,10 +98,8 @@ vi.mock("./run.runtime.js", () => ({
|
||||
resolveAgentWorkspaceDir: vi.fn().mockReturnValue("/tmp/workspace"),
|
||||
resolveDefaultAgentId: vi.fn().mockReturnValue("default"),
|
||||
resolveAgentSkillsFilter: resolveAgentSkillsFilterMock,
|
||||
lookupContextTokens: lookupContextTokensMock,
|
||||
resolveCronStyleNow: resolveCronStyleNowMock,
|
||||
DEFAULT_CONTEXT_TOKENS: 128000,
|
||||
loadModelCatalog: loadModelCatalogMock,
|
||||
isCliProvider: isCliProviderMock,
|
||||
resolveThinkingDefault: resolveThinkingDefaultMock,
|
||||
buildWorkspaceSkillSnapshot: buildWorkspaceSkillSnapshotMock,
|
||||
@@ -126,6 +124,14 @@ vi.mock("./run.runtime.js", () => ({
|
||||
getRemoteSkillEligibility: getRemoteSkillEligibilityMock,
|
||||
}));
|
||||
|
||||
vi.mock("./run-context.runtime.js", () => ({
|
||||
lookupContextTokens: lookupContextTokensMock,
|
||||
}));
|
||||
|
||||
vi.mock("./run-model-catalog.runtime.js", () => ({
|
||||
loadModelCatalog: loadModelCatalogMock,
|
||||
}));
|
||||
|
||||
vi.mock("./run-model-selection.runtime.js", () => ({
|
||||
DEFAULT_MODEL: "gpt-4",
|
||||
DEFAULT_PROVIDER: "openai",
|
||||
|
||||
@@ -37,9 +37,7 @@ import {
|
||||
hasNonzeroUsage,
|
||||
isCliProvider,
|
||||
isExternalHookSession,
|
||||
loadModelCatalog,
|
||||
logWarn,
|
||||
lookupContextTokens,
|
||||
mapHookExternalContentSource,
|
||||
normalizeAgentId,
|
||||
normalizeThinkLevel,
|
||||
@@ -66,6 +64,10 @@ let sessionStoreRuntimePromise:
|
||||
let cronAuthProfileRuntimePromise:
|
||||
| Promise<typeof import("./run-auth-profile.runtime.js")>
|
||||
| undefined;
|
||||
let cronContextRuntimePromise: Promise<typeof import("./run-context.runtime.js")> | undefined;
|
||||
let cronModelCatalogRuntimePromise:
|
||||
| Promise<typeof import("./run-model-catalog.runtime.js")>
|
||||
| undefined;
|
||||
|
||||
async function loadSessionStoreRuntime() {
|
||||
sessionStoreRuntimePromise ??= import("../../config/sessions/store.runtime.js");
|
||||
@@ -77,6 +79,16 @@ async function loadCronAuthProfileRuntime() {
|
||||
return await cronAuthProfileRuntimePromise;
|
||||
}
|
||||
|
||||
async function loadCronContextRuntime() {
|
||||
cronContextRuntimePromise ??= import("./run-context.runtime.js");
|
||||
return await cronContextRuntimePromise;
|
||||
}
|
||||
|
||||
async function loadCronModelCatalogRuntime() {
|
||||
cronModelCatalogRuntimePromise ??= import("./run-model-catalog.runtime.js");
|
||||
return await cronModelCatalogRuntimePromise;
|
||||
}
|
||||
|
||||
function hasConfiguredAuthProfiles(cfg: OpenClawConfig): boolean {
|
||||
return (
|
||||
Boolean(cfg.auth?.profiles && Object.keys(cfg.auth.profiles).length > 0) ||
|
||||
@@ -91,6 +103,7 @@ function resolveNonNegativeNumber(value: number | undefined): number | undefined
|
||||
export type { RunCronAgentTurnResult } from "./run.types.js";
|
||||
|
||||
type ResolvedCronDeliveryTarget = Awaited<ReturnType<typeof resolveDeliveryTarget>>;
|
||||
type CronModelCatalogRuntime = typeof import("./run-model-catalog.runtime.js");
|
||||
|
||||
type IsolatedDeliveryContract = "cron-owned" | "shared";
|
||||
|
||||
@@ -250,10 +263,14 @@ async function prepareCronRunContext(params: {
|
||||
...input.cfg,
|
||||
agents: Object.assign({}, input.cfg.agents, { defaults: agentCfg }),
|
||||
};
|
||||
let catalog: Awaited<ReturnType<typeof loadModelCatalog>> | undefined;
|
||||
let catalog: Awaited<ReturnType<CronModelCatalogRuntime["loadModelCatalog"]>> | undefined;
|
||||
const loadCatalog = async () => {
|
||||
if (!catalog) {
|
||||
catalog = await loadModelCatalog({ config: cfgWithAgentDefaults });
|
||||
catalog = await (
|
||||
await loadCronModelCatalogRuntime()
|
||||
).loadModelCatalog({
|
||||
config: cfgWithAgentDefaults,
|
||||
});
|
||||
}
|
||||
return catalog;
|
||||
};
|
||||
@@ -511,7 +528,9 @@ async function finalizeCronRun(params: {
|
||||
execution.liveSelection.provider;
|
||||
const contextTokens =
|
||||
resolvePositiveContextTokens(prepared.agentCfg?.contextTokens) ??
|
||||
lookupContextTokens(modelUsed, { allowAsyncLoad: false }) ??
|
||||
(await loadCronContextRuntime()).lookupContextTokens(modelUsed, {
|
||||
allowAsyncLoad: false,
|
||||
}) ??
|
||||
resolvePositiveContextTokens(prepared.cronSession.sessionEntry.contextTokens) ??
|
||||
DEFAULT_CONTEXT_TOKENS;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user