fix: restore memory search output dimensionality
This commit is contained in:
parent
9fe29139a0
commit
893cbe0cf2
@ -42,22 +42,6 @@ const log = createSubsystemLogger("memory");
|
||||
const INDEX_CACHE = new Map<string, MemoryIndexManager>();
|
||||
const INDEX_CACHE_PENDING = new Map<string, Promise<MemoryIndexManager>>();
|
||||
|
||||
export async function closeAllMemoryIndexManagers(): Promise<void> {
|
||||
const pending = Array.from(INDEX_CACHE_PENDING.values());
|
||||
if (pending.length > 0) {
|
||||
await Promise.allSettled(pending);
|
||||
}
|
||||
const managers = Array.from(INDEX_CACHE.values());
|
||||
INDEX_CACHE.clear();
|
||||
for (const manager of managers) {
|
||||
try {
|
||||
await manager.close();
|
||||
} catch (err) {
|
||||
log.warn(`failed to close memory index manager: ${String(err)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements MemorySearchManager {
|
||||
private readonly cacheKey: string;
|
||||
protected readonly cfg: OpenClawConfig;
|
||||
@ -125,8 +109,6 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
|
||||
>();
|
||||
private sessionWarm = new Set<string>();
|
||||
private syncing: Promise<void> | null = null;
|
||||
private queuedSessionFiles = new Set<string>();
|
||||
private queuedSessionSync: Promise<void> | null = null;
|
||||
private readonlyRecoveryAttempts = 0;
|
||||
private readonlyRecoverySuccesses = 0;
|
||||
private readonlyRecoveryFailures = 0;
|
||||
@ -157,9 +139,9 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
|
||||
config: cfg,
|
||||
agentDir: resolveAgentDir(cfg, agentId),
|
||||
provider: settings.provider,
|
||||
outputDimensionality: settings.outputDimensionality,
|
||||
remote: settings.remote,
|
||||
model: settings.model,
|
||||
outputDimensionality: settings.outputDimensionality,
|
||||
fallback: settings.fallback,
|
||||
local: settings.local,
|
||||
});
|
||||
@ -454,16 +436,12 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
|
||||
async sync(params?: {
|
||||
reason?: string;
|
||||
force?: boolean;
|
||||
sessionFiles?: string[];
|
||||
progress?: (update: MemorySyncProgressUpdate) => void;
|
||||
}): Promise<void> {
|
||||
if (this.closed) {
|
||||
return;
|
||||
}
|
||||
if (this.syncing) {
|
||||
if (params?.sessionFiles?.some((sessionFile) => sessionFile.trim().length > 0)) {
|
||||
return this.enqueueTargetedSessionSync(params.sessionFiles);
|
||||
}
|
||||
return this.syncing;
|
||||
}
|
||||
this.syncing = this.runSyncWithReadonlyRecovery(params).finally(() => {
|
||||
@ -472,36 +450,6 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
|
||||
return this.syncing ?? Promise.resolve();
|
||||
}
|
||||
|
||||
private enqueueTargetedSessionSync(sessionFiles?: string[]): Promise<void> {
|
||||
for (const sessionFile of sessionFiles ?? []) {
|
||||
const trimmed = sessionFile.trim();
|
||||
if (trimmed) {
|
||||
this.queuedSessionFiles.add(trimmed);
|
||||
}
|
||||
}
|
||||
if (this.queuedSessionFiles.size === 0) {
|
||||
return this.syncing ?? Promise.resolve();
|
||||
}
|
||||
if (!this.queuedSessionSync) {
|
||||
this.queuedSessionSync = (async () => {
|
||||
try {
|
||||
await this.syncing?.catch(() => undefined);
|
||||
while (!this.closed && this.queuedSessionFiles.size > 0) {
|
||||
const queuedSessionFiles = Array.from(this.queuedSessionFiles);
|
||||
this.queuedSessionFiles.clear();
|
||||
await this.sync({
|
||||
reason: "queued-session-files",
|
||||
sessionFiles: queuedSessionFiles,
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
this.queuedSessionSync = null;
|
||||
}
|
||||
})();
|
||||
}
|
||||
return this.queuedSessionSync;
|
||||
}
|
||||
|
||||
private isReadonlyDbError(err: unknown): boolean {
|
||||
const readonlyPattern =
|
||||
/attempt to write a readonly database|database is read-only|SQLITE_READONLY/i;
|
||||
@ -554,7 +502,6 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
|
||||
private async runSyncWithReadonlyRecovery(params?: {
|
||||
reason?: string;
|
||||
force?: boolean;
|
||||
sessionFiles?: string[];
|
||||
progress?: (update: MemorySyncProgressUpdate) => void;
|
||||
}): Promise<void> {
|
||||
try {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user