mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 20:03:05 +00:00
Improve Gemini CLI provider retries and headers - Add Antigravity endpoint fallback (tries daily sandbox then prod when baseUrl is unset) - Parse retry delays from headers (Retry-After, x-ratelimit-reset, x-ratelimit-reset-after) before body parsing - Derive stable sessionId from first user message for cache affinity - Retry empty SSE streams with backoff without duplicate start/done events - Add anthropic-beta header for Claude thinking models only
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { extractRetryDelay } from "../src/providers/google-gemini-cli.js";
|
|
|
|
describe("extractRetryDelay header parsing", () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
it("prefers Retry-After seconds header", () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date("2025-01-01T00:00:00Z"));
|
|
|
|
const response = new Response("", { headers: { "Retry-After": "5" } });
|
|
const delay = extractRetryDelay("Please retry in 1s", response);
|
|
|
|
expect(delay).toBe(6000);
|
|
});
|
|
|
|
it("parses Retry-After HTTP date header", () => {
|
|
vi.useFakeTimers();
|
|
const now = new Date("2025-01-01T00:00:00Z");
|
|
vi.setSystemTime(now);
|
|
|
|
const retryAt = new Date(now.getTime() + 12000).toUTCString();
|
|
const response = new Response("", { headers: { "Retry-After": retryAt } });
|
|
const delay = extractRetryDelay("", response);
|
|
|
|
expect(delay).toBe(13000);
|
|
});
|
|
|
|
it("parses x-ratelimit-reset header", () => {
|
|
vi.useFakeTimers();
|
|
const now = new Date("2025-01-01T00:00:00Z");
|
|
vi.setSystemTime(now);
|
|
|
|
const resetAtMs = now.getTime() + 20000;
|
|
const resetSeconds = Math.floor(resetAtMs / 1000).toString();
|
|
const response = new Response("", { headers: { "x-ratelimit-reset": resetSeconds } });
|
|
const delay = extractRetryDelay("", response);
|
|
|
|
expect(delay).toBe(21000);
|
|
});
|
|
|
|
it("parses x-ratelimit-reset-after header", () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date("2025-01-01T00:00:00Z"));
|
|
|
|
const response = new Response("", { headers: { "x-ratelimit-reset-after": "30" } });
|
|
const delay = extractRetryDelay("", response);
|
|
|
|
expect(delay).toBe(31000);
|
|
});
|
|
});
|