

























@@ -9,13 +9,8 @@
99import { Buffer } from "node:buffer";
1010import { randomUUID } from "node:crypto";
1111import type * as LanceDB from "@lancedb/lancedb";
12-import OpenAI from "openai";
1312import type { OpenClawConfig } from "openclaw/plugin-sdk/config-types";
14-import {
15-getMemoryEmbeddingProvider,
16-type MemoryEmbeddingProvider,
17-} from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
18-import { resolveDefaultAgentId } from "openclaw/plugin-sdk/memory-host-core";
13+import type { MemoryEmbeddingProvider } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
1914import { resolveLivePluginConfigObject } from "openclaw/plugin-sdk/plugin-config-runtime";
2015import { ensureGlobalUndiciEnvProxyDispatcher } from "openclaw/plugin-sdk/runtime-env";
2116import {
@@ -64,6 +59,40 @@ type AutoCaptureCursor = {
6459lastMessageFingerprint?: string;
6560};
666162+type OpenAiEmbeddingClient = {
63+post<T>(
64+path: string,
65+options: { body: unknown; timeout?: number; maxRetries?: number },
66+): Promise<T>;
67+};
68+69+let openAiModulePromise: Promise<typeof import("openai")> | undefined;
70+function loadOpenAiModule(): Promise<typeof import("openai")> {
71+openAiModulePromise ??= import("openai");
72+return openAiModulePromise;
73+}
74+75+let memoryEmbeddingProviderModulePromise:
76+| Promise<typeof import("openclaw/plugin-sdk/memory-core-host-engine-embeddings")>
77+| undefined;
78+function loadMemoryEmbeddingProviderModule(): Promise<
79+typeof import("openclaw/plugin-sdk/memory-core-host-engine-embeddings")
80+> {
81+memoryEmbeddingProviderModulePromise ??=
82+import("openclaw/plugin-sdk/memory-core-host-engine-embeddings");
83+return memoryEmbeddingProviderModulePromise;
84+}
85+86+let memoryHostCoreModulePromise:
87+| Promise<typeof import("openclaw/plugin-sdk/memory-host-core")>
88+| undefined;
89+function loadMemoryHostCoreModule(): Promise<
90+typeof import("openclaw/plugin-sdk/memory-host-core")
91+> {
92+memoryHostCoreModulePromise ??= import("openclaw/plugin-sdk/memory-host-core");
93+return memoryHostCoreModulePromise;
94+}
95+6796function asRecord(value: unknown): Record<string, unknown> | undefined {
6897return value && typeof value === "object" && !Array.isArray(value)
6998 ? (value as Record<string, unknown>)
@@ -314,19 +343,21 @@ type Embeddings = {
314343};
315344316345class OpenAiCompatibleEmbeddings implements Embeddings {
317-private client: OpenAI;
346+private clientPromise: Promise<OpenAiEmbeddingClient>;
318347319348constructor(
320349apiKey: string,
321350private model: string,
322351baseUrl?: string,
323352private dimensions?: number,
324353) {
325-this.client = new OpenAI({ apiKey, baseURL: baseUrl });
354+this.clientPromise = loadOpenAiModule().then(
355+({ default: OpenAI }) => new OpenAI({ apiKey, baseURL: baseUrl }) as OpenAiEmbeddingClient,
356+);
326357}
327358328359async embed(text: string, options?: { timeoutMs?: number }): Promise<number[]> {
329-const params: OpenAI.EmbeddingCreateParams = {
360+const params: Record<string, unknown> = {
330361model: this.model,
331362input: text,
332363};
@@ -338,7 +369,9 @@ class OpenAiCompatibleEmbeddings implements Embeddings {
338369// omitted, then decodes the response. Several compatible providers either
339370// reject encoding_format or always return float arrays, so use the generic
340371// transport and normalize the response ourselves.
341-const response = await this.client.post<EmbeddingCreateResponse>("/embeddings", {
372+const response = await (
373+await this.clientPromise
374+).post<EmbeddingCreateResponse>("/embeddings", {
342375body: params,
343376 ...(options?.timeoutMs ? { timeout: options.timeoutMs, maxRetries: 0 } : {}),
344377});
@@ -367,10 +400,12 @@ class ProviderAdapterEmbeddings implements Embeddings {
367400private async createProvider(): Promise<MemoryEmbeddingProvider> {
368401const cfg = (this.api.runtime.config?.current?.() ?? this.api.config) as OpenClawConfig;
369402const providerId = this.embedding.provider;
403+const { getMemoryEmbeddingProvider } = await loadMemoryEmbeddingProviderModule();
370404const adapter = getMemoryEmbeddingProvider(providerId, cfg);
371405if (!adapter) {
372406throw new Error(`Unknown memory embedding provider: ${providerId}`);
373407}
408+const { resolveDefaultAgentId } = await loadMemoryHostCoreModule();
374409const defaultAgentId = resolveDefaultAgentId(cfg);
375410const agentDir = this.api.runtime.agent.resolveAgentDir(cfg, defaultAgentId);
376411const remote =
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。