

























@@ -126,6 +126,35 @@ describe("memory embedding policy", () => {
126126expect(isRetryableMemoryEmbeddingTransportError("embedding validation failed")).toBe(false);
127127});
128128129+it("splits OpenAI 431 oversized embedding batches without retrying the same request", async () => {
130+const run = vi.fn(async (items: string[]) => {
131+if (items.length > 1) {
132+throw new Error(
133+"openai embeddings failed: 431 request_headers_too_large: Request Header Fields Too Large",
134+);
135+}
136+return items.map((item) => [item.charCodeAt(0)]);
137+});
138+139+const result = await runMemoryEmbeddingBatchRetryWithSplit({
140+items: ["a", "b", "c", "d"],
141+ run,
142+isRetryable: isRetryableMemoryEmbeddingError,
143+isSplittable: isSplittableMemoryEmbeddingTransportError,
144+waitForRetry: async () => {},
145+maxAttempts: 3,
146+baseDelayMs: 500,
147+});
148+149+expect(result).toEqual([[97], [98], [99], [100]]);
150+expect(run.mock.calls.map(([items]) => items.length)).toEqual([4, 2, 1, 1, 2, 1, 1]);
151+expect(isRetryableMemoryEmbeddingError("431 request_headers_too_large")).toBe(false);
152+expect(isSplittableMemoryEmbeddingTransportError("431 request_headers_too_large")).toBe(true);
153+expect(
154+isSplittableMemoryEmbeddingTransportError("embedding validation failed at item 4312"),
155+).toBe(false);
156+});
157+129158it("retries too-many-tokens-per-day errors", async () => {
130159let calls = 0;
131160const waits: number[] = [];
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。