refactor: share embedding retry waits

This commit is contained in:
Peter Steinberger 2026-03-13 19:17:13 +00:00
parent da1ec45505
commit d904f37f1c
1 changed files with 11 additions and 12 deletions

View File

@ -548,12 +548,7 @@ export abstract class MemoryManagerEmbeddingOps extends MemoryManagerSyncOps {
if (!this.isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS) {
throw err;
}
const waitMs = Math.min(
EMBEDDING_RETRY_MAX_DELAY_MS,
Math.round(delayMs * (1 + Math.random() * 0.2)),
);
log.warn(`memory embeddings rate limited; retrying in ${waitMs}ms`);
await new Promise((resolve) => setTimeout(resolve, waitMs));
await this.waitForEmbeddingRetry(delayMs, "retrying");
delayMs *= 2;
attempt += 1;
}
@ -587,18 +582,22 @@ export abstract class MemoryManagerEmbeddingOps extends MemoryManagerSyncOps {
if (!this.isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS) {
throw err;
}
const waitMs = Math.min(
EMBEDDING_RETRY_MAX_DELAY_MS,
Math.round(delayMs * (1 + Math.random() * 0.2)),
);
log.warn(`memory embeddings rate limited; retrying structured batch in ${waitMs}ms`);
await new Promise((resolve) => setTimeout(resolve, waitMs));
await this.waitForEmbeddingRetry(delayMs, "retrying structured batch");
delayMs *= 2;
attempt += 1;
}
}
}
private async waitForEmbeddingRetry(delayMs: number, action: string): Promise<void> {
const waitMs = Math.min(
EMBEDDING_RETRY_MAX_DELAY_MS,
Math.round(delayMs * (1 + Math.random() * 0.2)),
);
log.warn(`memory embeddings rate limited; ${action} in ${waitMs}ms`);
await new Promise((resolve) => setTimeout(resolve, waitMs));
}
private isRetryableEmbeddingError(message: string): boolean {
return /(rate[_ ]limit|too many requests|429|resource has been exhausted|5\d\d|cloudflare|tokens per day)/i.test(
message,