




















@@ -4,6 +4,7 @@ import {
44enforceEmbeddingMaxInputTokens,
55hasNonTextEmbeddingParts,
66type EmbeddingInput,
7+type MemoryEmbeddingProviderRuntime,
78} from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
89import { createSubsystemLogger } from "openclaw/plugin-sdk/memory-core-host-engine-foundation";
910import { type SessionFileEntry } from "openclaw/plugin-sdk/memory-core-host-engine-qmd";
@@ -54,6 +55,38 @@ const EMBEDDING_BATCH_TIMEOUT_LOCAL_MS = 10 * 60_000;
54555556const log = createSubsystemLogger("memory");
565758+export function resolveEmbeddingTimeoutMs(params: {
59+kind: "query" | "batch";
60+providerId?: string;
61+providerRuntime?: Pick<
62+MemoryEmbeddingProviderRuntime,
63+"inlineQueryTimeoutMs" | "inlineBatchTimeoutMs"
64+>;
65+configuredBatchTimeoutSeconds?: number;
66+}): number {
67+if (params.kind === "query") {
68+const runtimeTimeoutMs = params.providerRuntime?.inlineQueryTimeoutMs;
69+if (typeof runtimeTimeoutMs === "number" && runtimeTimeoutMs > 0) {
70+return runtimeTimeoutMs;
71+}
72+return params.providerId === "local"
73+ ? EMBEDDING_QUERY_TIMEOUT_LOCAL_MS
74+ : EMBEDDING_QUERY_TIMEOUT_REMOTE_MS;
75+}
76+77+const configuredTimeoutSeconds = params.configuredBatchTimeoutSeconds;
78+if (typeof configuredTimeoutSeconds === "number" && configuredTimeoutSeconds > 0) {
79+return configuredTimeoutSeconds * 1000;
80+}
81+const runtimeTimeoutMs = params.providerRuntime?.inlineBatchTimeoutMs;
82+if (typeof runtimeTimeoutMs === "number" && runtimeTimeoutMs > 0) {
83+return runtimeTimeoutMs;
84+}
85+return params.providerId === "local"
86+ ? EMBEDDING_BATCH_TIMEOUT_LOCAL_MS
87+ : EMBEDDING_BATCH_TIMEOUT_REMOTE_MS;
88+}
89+5790export abstract class MemoryManagerEmbeddingOps extends MemoryManagerSyncOps {
5891protected abstract batchFailureCount: number;
5992protected abstract batchFailureLastError?: string;
@@ -305,11 +338,12 @@ export abstract class MemoryManagerEmbeddingOps extends MemoryManagerSyncOps {
305338}
306339307340private resolveEmbeddingTimeout(kind: "query" | "batch"): number {
308-const isLocal = this.provider?.id === "local";
309-if (kind === "query") {
310-return isLocal ? EMBEDDING_QUERY_TIMEOUT_LOCAL_MS : EMBEDDING_QUERY_TIMEOUT_REMOTE_MS;
311-}
312-return isLocal ? EMBEDDING_BATCH_TIMEOUT_LOCAL_MS : EMBEDDING_BATCH_TIMEOUT_REMOTE_MS;
341+return resolveEmbeddingTimeoutMs({
342+ kind,
343+providerId: this.provider?.id,
344+providerRuntime: this.providerRuntime,
345+configuredBatchTimeoutSeconds: this.settings.sync.embeddingBatchTimeoutSeconds,
346+});
313347}
314348315349protected async embedQueryWithTimeout(text: string): Promise<number[]> {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。