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) { if (!this.isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS) {
throw err; throw err;
} }
const waitMs = Math.min( await this.waitForEmbeddingRetry(delayMs, "retrying");
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));
delayMs *= 2; delayMs *= 2;
attempt += 1; attempt += 1;
} }
@ -587,18 +582,22 @@ export abstract class MemoryManagerEmbeddingOps extends MemoryManagerSyncOps {
if (!this.isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS) { if (!this.isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS) {
throw err; throw err;
} }
const waitMs = Math.min( await this.waitForEmbeddingRetry(delayMs, "retrying structured batch");
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));
delayMs *= 2; delayMs *= 2;
attempt += 1; 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 { 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( return /(rate[_ ]limit|too many requests|429|resource has been exhausted|5\d\d|cloudflare|tokens per day)/i.test(
message, message,