From ebcdb637bb778074c8cdd094a9235d2770c4cdeb Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 1 Jun 2026 04:22:05 +0100 Subject: [PATCH] perf(memory-core): defer embedding engine startup imports --- docs/plugins/sdk-migration.md | 1 + docs/plugins/sdk-subpaths.md | 1 + .../src/memory/provider-adapters.ts | 25 +++---------------- package.json | 4 +++ scripts/lib/plugin-sdk-entrypoints.json | 1 + src/plugin-sdk/entrypoints.ts | 1 + .../memory-core-host-embedding-registry.ts | 10 ++++++++ 7 files changed, 21 insertions(+), 22 deletions(-) create mode 100644 src/plugin-sdk/memory-core-host-embedding-registry.ts diff --git a/docs/plugins/sdk-migration.md b/docs/plugins/sdk-migration.md index 00d447b7a68..718ea724fe0 100644 --- a/docs/plugins/sdk-migration.md +++ b/docs/plugins/sdk-migration.md @@ -652,6 +652,7 @@ releases. | `plugin-sdk/zod` | Deprecated Zod compatibility re-export | Import `zod` from `zod` directly | | `plugin-sdk/memory-core` | Bundled memory-core helpers | Memory manager/config/file/CLI helper surface | | `plugin-sdk/memory-core-engine-runtime` | Memory engine runtime facade | Memory index/search runtime facade | + | `plugin-sdk/memory-core-host-embedding-registry` | Memory embedding registry | Lightweight memory embedding provider registry helpers | | `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine | Memory host foundation engine exports | | `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding engine | Memory embedding contracts, registry access, local provider, and generic batch/remote helpers; concrete remote providers live in their owning plugins | | `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine | Memory host QMD engine exports | diff --git a/docs/plugins/sdk-subpaths.md b/docs/plugins/sdk-subpaths.md index cdeb5ce7383..7a4d250b9ef 100644 --- a/docs/plugins/sdk-subpaths.md +++ b/docs/plugins/sdk-subpaths.md @@ -355,6 +355,7 @@ usage endpoint failed or returned no usable usage data. | --- | --- | | `plugin-sdk/memory-core` | Bundled memory-core helper surface for manager/config/file/CLI helpers | | `plugin-sdk/memory-core-engine-runtime` | Memory index/search runtime facade | + | `plugin-sdk/memory-core-host-embedding-registry` | Lightweight memory embedding provider registry helpers | | `plugin-sdk/memory-core-host-engine-foundation` | Memory host foundation engine exports | | `plugin-sdk/memory-core-host-engine-embeddings` | Memory host embedding contracts, registry access, local provider, and generic batch/remote helpers. `registerMemoryEmbeddingProvider` on this surface is deprecated; use the generic embedding provider API for new providers. | | `plugin-sdk/memory-core-host-engine-qmd` | Memory host QMD engine exports | diff --git a/extensions/memory-core/src/memory/provider-adapters.ts b/extensions/memory-core/src/memory/provider-adapters.ts index 5f9d484e620..1f07e4c2341 100644 --- a/extensions/memory-core/src/memory/provider-adapters.ts +++ b/extensions/memory-core/src/memory/provider-adapters.ts @@ -1,12 +1,9 @@ -import fsSync from "node:fs"; import { - createLocalEmbeddingProvider, DEFAULT_LOCAL_MODEL, listMemoryEmbeddingProviders, listRegisteredMemoryEmbeddingProviderAdapters, type MemoryEmbeddingProviderAdapter, -} from "openclaw/plugin-sdk/memory-core-host-engine-embeddings"; -import { resolveUserPath } from "openclaw/plugin-sdk/memory-core-host-engine-foundation"; +} from "openclaw/plugin-sdk/memory-core-host-embedding-registry"; import { getProviderEnvVars } from "openclaw/plugin-sdk/provider-env-vars"; import { formatErrorMessage } from "../dreaming-shared.js"; import { filterUnregisteredMemoryEmbeddingProviderAdapters } from "./provider-adapter-registration.js"; @@ -66,22 +63,6 @@ function formatLocalSetupError(err: unknown): string { .join("\n"); } -function canAutoSelectLocal(modelPath?: string): boolean { - const trimmed = modelPath?.trim(); - if (!trimmed) { - return false; - } - if (/^(hf:|https?:)/i.test(trimmed)) { - return false; - } - const resolved = resolveUserPath(trimmed); - try { - return fsSync.statSync(resolved).isFile(); - } catch { - return false; - } -} - const localAdapter: MemoryEmbeddingProviderAdapter = { id: "local", defaultModel: DEFAULT_LOCAL_MODEL, @@ -90,6 +71,8 @@ const localAdapter: MemoryEmbeddingProviderAdapter = { formatSetupError: formatLocalSetupError, shouldContinueAutoSelection: () => true, create: async (options) => { + const { createLocalEmbeddingProvider } = + await import("openclaw/plugin-sdk/memory-core-host-engine-embeddings"); const provider = await createLocalEmbeddingProvider({ ...options, provider: "local", @@ -166,5 +149,3 @@ export function listBuiltinAutoSelectMemoryEmbeddingProviderDoctorMetadata(): Ar }; }); } - -export { canAutoSelectLocal }; diff --git a/package.json b/package.json index fb70792e62e..ecf275751f8 100644 --- a/package.json +++ b/package.json @@ -1085,6 +1085,10 @@ "types": "./dist/plugin-sdk/memory-core-engine-runtime.d.ts", "default": "./dist/plugin-sdk/memory-core-engine-runtime.js" }, + "./plugin-sdk/memory-core-host-embedding-registry": { + "types": "./dist/plugin-sdk/memory-core-host-embedding-registry.d.ts", + "default": "./dist/plugin-sdk/memory-core-host-embedding-registry.js" + }, "./plugin-sdk/memory-core-host-engine-embeddings": { "types": "./dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts", "default": "./dist/plugin-sdk/memory-core-host-engine-embeddings.js" diff --git a/scripts/lib/plugin-sdk-entrypoints.json b/scripts/lib/plugin-sdk-entrypoints.json index 4c99bc66a68..ae9949d6be1 100644 --- a/scripts/lib/plugin-sdk-entrypoints.json +++ b/scripts/lib/plugin-sdk-entrypoints.json @@ -250,6 +250,7 @@ "qa-live-transport-scenarios", "memory-core", "memory-core-engine-runtime", + "memory-core-host-embedding-registry", "memory-core-host-engine-embeddings", "memory-core-host-engine-foundation", "memory-core-host-engine-qmd", diff --git a/src/plugin-sdk/entrypoints.ts b/src/plugin-sdk/entrypoints.ts index 35098c303f1..b88566024fb 100644 --- a/src/plugin-sdk/entrypoints.ts +++ b/src/plugin-sdk/entrypoints.ts @@ -58,6 +58,7 @@ export const publicPluginOwnedSdkEntrypoints = [ "browser-config", "image-generation-core", "memory-core", + "memory-core-host-embedding-registry", "memory-core-host-engine-embeddings", "memory-core-host-engine-foundation", "memory-core-host-engine-qmd", diff --git a/src/plugin-sdk/memory-core-host-embedding-registry.ts b/src/plugin-sdk/memory-core-host-embedding-registry.ts new file mode 100644 index 00000000000..99993652d40 --- /dev/null +++ b/src/plugin-sdk/memory-core-host-embedding-registry.ts @@ -0,0 +1,10 @@ +export { DEFAULT_LOCAL_MODEL } from "../../packages/memory-host-sdk/src/host/embedding-defaults.js"; +export { + listMemoryEmbeddingProviders, + listRegisteredMemoryEmbeddingProviderAdapters, +} from "../plugins/memory-embedding-provider-runtime.js"; +export type { + MemoryEmbeddingProviderAdapter, + MemoryEmbeddingProviderCreateOptions, + MemoryEmbeddingProviderCreateResult, +} from "../plugins/memory-embedding-providers.js";