Skip to content

Commit 1bca387

Browse files
committed
fix(memory-core): resolve adapter default model for index identity state
When agents.<id>.memorySearch.model is left at the default empty string and the embedding adapter exposes a defaultModel (e.g. OpenAI text-embedding-3-small), `openclaw memory status` reported a mismatch against a blank expected model and paused vector search, even though `--deep` status and `memory index --force` succeeded. resolveCurrentIndexIdentityState built configuredProvider directly from this.settings.model, so the empty default survived as the expected model. The provider path that actually creates embeddings resolves the adapter's defaultModel, but the cheap status-only path never initialised the provider and never reached that branch. Resolve the adapter defaultModel up front via the existing resolveEmbeddingProviderFallbackModel helper (same module) so the status path computes the same expected model as the index/deep paths. Apply a symmetric fallback in refreshIndexIdentityDirty for the case where the provider is initialised but its model is still falsy. Closes #90413
1 parent 60cb5d6 commit 1bca387

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

extensions/memory-core/src/memory/manager-sync-ops.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coer
3939
import {
4040
createEmbeddingProvider,
4141
resolveEmbeddingProviderAdapterId,
42+
resolveEmbeddingProviderFallbackModel,
4243
type EmbeddingProvider,
4344
type EmbeddingProviderId,
4445
type EmbeddingProviderRuntime,
@@ -298,14 +299,22 @@ export abstract class MemoryManagerSyncOps {
298299
hasIndexedChunks?: boolean;
299300
}): MemoryIndexIdentityState {
300301
const hasProviderOverride = params && "provider" in params;
302+
const configuredProviderModel =
303+
this.settings.model && this.settings.model.trim()
304+
? this.settings.model.trim()
305+
: resolveEmbeddingProviderFallbackModel(
306+
this.settings.provider,
307+
this.settings.model,
308+
this.cfg,
309+
);
301310
const configuredProvider =
302311
this.settings.provider === "none"
303312
? null
304313
: {
305314
id:
306315
resolveEmbeddingProviderAdapterId(this.settings.provider, this.cfg) ??
307316
this.settings.provider,
308-
model: this.settings.model,
317+
model: configuredProviderModel,
309318
};
310319
const provider = hasProviderOverride
311320
? params.provider!

extensions/memory-core/src/memory/manager.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
import { uniqueValues } from "openclaw/plugin-sdk/string-coerce-runtime";
2424
import {
2525
createEmbeddingProvider,
26+
resolveEmbeddingProviderFallbackModel,
2627
type EmbeddingProvider,
2728
type EmbeddingProviderId,
2829
type EmbeddingProviderRequest,
@@ -427,7 +428,16 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
427428
? null
428429
: this.providerInitialized
429430
? this.provider
430-
? { id: this.provider.id, model: this.provider.model }
431+
? {
432+
id: this.provider.id,
433+
model:
434+
this.provider.model ||
435+
resolveEmbeddingProviderFallbackModel(
436+
this.settings.provider,
437+
this.settings.model,
438+
this.cfg,
439+
),
440+
}
431441
: null
432442
: undefined;
433443
const state = this.resolveCurrentIndexIdentityState({

0 commit comments

Comments
 (0)