mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 11:30:21 +00:00
perf: avoid full config resolution in qmd sync
This commit is contained in:
@@ -4,7 +4,7 @@ import {
|
||||
clearMemoryEmbeddingProviders,
|
||||
registerMemoryEmbeddingProvider,
|
||||
} from "../plugins/memory-embedding-providers.js";
|
||||
import { resolveMemorySearchConfig } from "./memory-search.js";
|
||||
import { resolveMemorySearchConfig, resolveMemorySearchSyncConfig } from "./memory-search.js";
|
||||
|
||||
const asConfig = (cfg: OpenClawConfig): OpenClawConfig => cfg;
|
||||
|
||||
@@ -155,6 +155,25 @@ describe("memory search config", () => {
|
||||
expect(resolved).toBeNull();
|
||||
});
|
||||
|
||||
it("returns null sync config when disabled", () => {
|
||||
const cfg = asConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
memorySearch: { enabled: true },
|
||||
},
|
||||
list: [
|
||||
{
|
||||
id: "main",
|
||||
default: true,
|
||||
memorySearch: { enabled: false },
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
const resolved = resolveMemorySearchSyncConfig(cfg, "main");
|
||||
expect(resolved).toBeNull();
|
||||
});
|
||||
|
||||
it("defaults provider to auto when unspecified", () => {
|
||||
const cfg = asConfig({
|
||||
agents: {
|
||||
@@ -170,6 +189,44 @@ describe("memory search config", () => {
|
||||
expect(resolved?.fallback).toBe("none");
|
||||
});
|
||||
|
||||
it("resolves sync config without consulting embedding providers", () => {
|
||||
clearMemoryEmbeddingProviders();
|
||||
const cfg = asConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
memorySearch: {
|
||||
provider: "openai",
|
||||
sync: {
|
||||
onSessionStart: false,
|
||||
onSearch: true,
|
||||
watch: false,
|
||||
watchDebounceMs: 25,
|
||||
intervalMinutes: 3,
|
||||
sessions: {
|
||||
deltaBytes: 321,
|
||||
deltaMessages: 7,
|
||||
postCompactionForce: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(resolveMemorySearchSyncConfig(cfg, "main")).toEqual({
|
||||
onSessionStart: false,
|
||||
onSearch: true,
|
||||
watch: false,
|
||||
watchDebounceMs: 25,
|
||||
intervalMinutes: 3,
|
||||
sessions: {
|
||||
deltaBytes: 321,
|
||||
deltaMessages: 7,
|
||||
postCompactionForce: false,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("merges defaults and overrides", () => {
|
||||
const cfg = asConfig({
|
||||
agents: {
|
||||
|
||||
@@ -92,6 +92,8 @@ export type ResolvedMemorySearchConfig = {
|
||||
};
|
||||
};
|
||||
|
||||
export type ResolvedMemorySearchSyncConfig = ResolvedMemorySearchConfig["sync"];
|
||||
|
||||
const DEFAULT_CHUNK_TOKENS = 400;
|
||||
const DEFAULT_CHUNK_OVERLAP = 80;
|
||||
const DEFAULT_WATCH_DEBOUNCE_MS = 1500;
|
||||
@@ -367,6 +369,36 @@ function mergeConfig(
|
||||
};
|
||||
}
|
||||
|
||||
function resolveSyncConfig(
|
||||
defaults: MemorySearchConfig | undefined,
|
||||
overrides: MemorySearchConfig | undefined,
|
||||
): ResolvedMemorySearchSyncConfig {
|
||||
return {
|
||||
onSessionStart: overrides?.sync?.onSessionStart ?? defaults?.sync?.onSessionStart ?? true,
|
||||
onSearch: overrides?.sync?.onSearch ?? defaults?.sync?.onSearch ?? true,
|
||||
watch: overrides?.sync?.watch ?? defaults?.sync?.watch ?? true,
|
||||
watchDebounceMs:
|
||||
overrides?.sync?.watchDebounceMs ??
|
||||
defaults?.sync?.watchDebounceMs ??
|
||||
DEFAULT_WATCH_DEBOUNCE_MS,
|
||||
intervalMinutes: overrides?.sync?.intervalMinutes ?? defaults?.sync?.intervalMinutes ?? 0,
|
||||
sessions: {
|
||||
deltaBytes:
|
||||
overrides?.sync?.sessions?.deltaBytes ??
|
||||
defaults?.sync?.sessions?.deltaBytes ??
|
||||
DEFAULT_SESSION_DELTA_BYTES,
|
||||
deltaMessages:
|
||||
overrides?.sync?.sessions?.deltaMessages ??
|
||||
defaults?.sync?.sessions?.deltaMessages ??
|
||||
DEFAULT_SESSION_DELTA_MESSAGES,
|
||||
postCompactionForce:
|
||||
overrides?.sync?.sessions?.postCompactionForce ??
|
||||
defaults?.sync?.sessions?.postCompactionForce ??
|
||||
true,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function resolveMemorySearchConfig(
|
||||
cfg: OpenClawConfig,
|
||||
agentId: string,
|
||||
@@ -410,3 +442,16 @@ export function resolveMemorySearchConfig(
|
||||
}
|
||||
return resolved;
|
||||
}
|
||||
|
||||
export function resolveMemorySearchSyncConfig(
|
||||
cfg: OpenClawConfig,
|
||||
agentId: string,
|
||||
): ResolvedMemorySearchSyncConfig | null {
|
||||
const defaults = cfg.agents?.defaults?.memorySearch;
|
||||
const overrides = resolveAgentConfig(cfg, agentId)?.memorySearch;
|
||||
const enabled = overrides?.enabled ?? defaults?.enabled ?? true;
|
||||
if (!enabled) {
|
||||
return null;
|
||||
}
|
||||
return resolveSyncConfig(defaults, overrides);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,9 @@ export {
|
||||
} from "../agents/agent-scope.js";
|
||||
export {
|
||||
resolveMemorySearchConfig,
|
||||
resolveMemorySearchSyncConfig,
|
||||
type ResolvedMemorySearchConfig,
|
||||
type ResolvedMemorySearchSyncConfig,
|
||||
} from "../agents/memory-search.js";
|
||||
export { parseDurationMs } from "../cli/parse-duration.js";
|
||||
export { loadConfig } from "../config/config.js";
|
||||
|
||||
Reference in New Issue
Block a user