@providerkit/core 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +33 -157
  2. package/dist/context.d.ts.map +1 -1
  3. package/dist/context.js +8 -0
  4. package/dist/context.js.map +1 -1
  5. package/dist/errors.d.ts +36 -0
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +72 -1
  8. package/dist/errors.js.map +1 -1
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/key-pool.d.ts +60 -0
  14. package/dist/key-pool.d.ts.map +1 -0
  15. package/dist/key-pool.js +235 -0
  16. package/dist/key-pool.js.map +1 -0
  17. package/dist/providers/anthropic.d.ts +9 -0
  18. package/dist/providers/anthropic.d.ts.map +1 -1
  19. package/dist/providers/anthropic.js +12 -13
  20. package/dist/providers/anthropic.js.map +1 -1
  21. package/dist/providers/gemini.d.ts +40 -0
  22. package/dist/providers/gemini.d.ts.map +1 -0
  23. package/dist/providers/gemini.js +303 -0
  24. package/dist/providers/gemini.js.map +1 -0
  25. package/dist/providers/openai.d.ts.map +1 -1
  26. package/dist/providers/openai.js +9 -0
  27. package/dist/providers/openai.js.map +1 -1
  28. package/dist/providers/responses.d.ts +38 -0
  29. package/dist/providers/responses.d.ts.map +1 -0
  30. package/dist/providers/responses.js +341 -0
  31. package/dist/providers/responses.js.map +1 -0
  32. package/dist/rate-limit.d.ts +29 -0
  33. package/dist/rate-limit.d.ts.map +1 -0
  34. package/dist/rate-limit.js +194 -0
  35. package/dist/rate-limit.js.map +1 -0
  36. package/dist/transport.d.ts +18 -5
  37. package/dist/transport.d.ts.map +1 -1
  38. package/dist/transport.js +61 -35
  39. package/dist/transport.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/context.ts +7 -0
  42. package/src/errors.ts +79 -1
  43. package/src/index.ts +4 -0
  44. package/src/key-pool.ts +272 -0
  45. package/src/providers/anthropic.ts +21 -18
  46. package/src/providers/gemini.ts +386 -0
  47. package/src/providers/openai.ts +12 -0
  48. package/src/providers/responses.ts +455 -0
  49. package/src/rate-limit.ts +217 -0
  50. package/src/transport.ts +61 -35
package/README.md CHANGED
@@ -40,171 +40,43 @@ loop is where your product lives; it should stay yours. This is everything under
40
40
  ## Use
41
41
 
42
42
  ```ts
43
- import { createAnthropicProvider, drainStream } from "@providerkit/core";
43
+ import { createAnthropicProvider, ProviderError, isTransient } from "@providerkit/core";
44
44
 
45
45
  const provider = createAnthropicProvider({
46
46
  apiKey: process.env.ANTHROPIC_API_KEY!,
47
47
  model: "claude-sonnet-5",
48
48
  });
49
49
 
50
- for await (const chunk of provider.createStream(messages, tools, { effort: "medium" })) {
51
- if (chunk.content) process.stdout.write(chunk.content);
52
- if (chunk.usage) console.log(chunk.usage); // one meaning across every provider
53
- }
54
- ```
55
-
56
- `createOpenAIProvider` speaks the dialect most gateways do, so it serves OpenAI, OpenRouter,
57
- DeepSeek, GLM, Kimi, Groq, Together, vLLM, Ollama and LM Studio:
58
-
59
- ```ts
60
- const provider = createOpenAIProvider({
61
- apiKey: process.env.OPENROUTER_API_KEY!,
62
- baseUrl: "https://openrouter.ai/api",
63
- id: "openrouter",
64
- model: "deepseek/deepseek-v4-pro",
65
- // Keep the prompt cache warm: it lives on the upstream host's account, and
66
- // OpenRouter's default routing hops hosts between rounds — every hop is a
67
- // cold cache, in both latency and effective input cost.
68
- providerOrder: ["deepinfra", "fireworks"],
69
- });
70
- ```
71
-
72
- ### Failures, named by what fixes them
73
-
74
- ```ts
75
- import { ProviderError, isTransient, isBackupEligible } from "@providerkit/core";
76
-
77
50
  try {
78
- //
51
+ for await (const chunk of provider.createStream(messages, tools, { effort: "medium" })) {
52
+ if (chunk.content) write(chunk.content);
53
+ if (chunk.usage) record(chunk.usage); // one usage shape across every provider
54
+ }
79
55
  } catch (raw) {
80
56
  const err = ProviderError.from("anthropic", raw);
81
-
82
- err.kind; // "overload" | "rate" | "quota" | "entitlement" | "auth" | "context" | …
83
- err.retryAfterMs; // honoured from Retry-After, vendor reset headers, or Gemini's RetryInfo
84
- err.body; // the provider's actual words, never "400 status code (no body)"
85
-
86
- if (err.kind === "context") compactAndRetry();
87
- else if (isBackupEligible(err.kind)) tryAnotherModel();
88
- else if (isTransient(err.kind)) retry();
89
- else surface(err);
90
- }
91
- ```
92
-
93
- ### Retrying, safely
94
-
95
- ```ts
96
- import { withStreamRetry, streamWithBackupModels } from "@providerkit/core";
97
-
98
- // Retries only while NOTHING has been emitted. Past the first chunk the stream
99
- // is committed — a retry would replay tokens already on the reader's screen.
100
- const stream = withStreamRetry((signal) => provider.createStream(messages, tools, { signal }));
101
-
102
- // Walks [primary, ...backups] on overload and rate limits only; an auth failure
103
- // or an invalid request would land identically on every backup.
104
- const withFallback = streamWithBackupModels((model) => run(model), {
105
- models: ["claude-opus-5", "claude-sonnet-5"],
106
- });
107
- ```
108
-
109
- ### The watchdog
110
-
111
- ```ts
112
- import { streamWatch, watchChunks } from "@providerkit/core";
113
-
114
- const watch = streamWatch({ provider: "openai", signal: userSignal });
115
- for await (const chunk of watchChunks(
116
- watch,
117
- provider.createStream(messages, tools, {
118
- signal: watch.signal,
119
- }),
120
- )) {
121
- // any byte re-arms the deadline
122
- }
123
- watch.firstChunkMs(); // TTFT — the number a prompt-cache pin exists to shrink
124
- ```
125
-
126
- A stream that goes 60 seconds without a byte is aborted and surfaced as a transient
127
- `timeout`. The watchdog aborts its _own_ controller and only bridges the caller's, so your
128
- user's Stop stays distinguishable from our deadline: one is never retried, the other always
129
- is.
130
-
131
- ### Tools
132
-
133
- JSON Schema by default, so the core needs no zod:
134
-
135
- ```ts
136
- import { defineTool, ToolRegistry } from "@providerkit/core";
137
-
138
- const search = defineTool({
139
- name: "search",
140
- description: "Search the corpus",
141
- inputSchema: { type: "object", properties: { q: { type: "string" } }, required: ["q"] },
142
- run: async ({ q }, ctx) => findAll(q, { signal: ctx.signal }),
143
- });
144
-
145
- const outcome = await search.invoke(rawArgsFromModel);
146
- // { ok: false, kind: "invalid_input" | "timeout" | "aborted" | "failed", error }
147
- ```
148
-
149
- A failing tool is **data**, not an exception — the loop feeds `error` back so the model can
150
- correct itself. Only a caller's abort escapes.
151
-
152
- With zod, from the optional entry point:
153
-
154
- ```ts
155
- import { zodTool } from "@providerkit/core/zod";
156
-
157
- const submit = zodTool({
158
- name: "submit",
159
- description: "Submit the final answer",
160
- isTerminal: true,
161
- clampOverflow: true, // a terminal tool gets no second chance
162
- input: z.object({ summary: z.string().max(2000) }),
163
- run: async (input) => input,
164
- });
165
- ```
166
-
167
- ### Truncated tool calls
168
-
169
- ```ts
170
- import { parseToolArgs, isCompleteJson } from "@providerkit/core";
171
-
172
- // Never throws. A turn cut off mid-argument keeps every field that closed
173
- // before the cut, plus the half-written one the cut landed in.
174
- const args = parseToolArgs(rawArgumentString);
175
- ```
176
-
177
- ### Compaction
178
-
179
- The decisions, not the prompt — the summary is yours to write:
180
-
181
- ```ts
182
- import { needsCompaction, pickCut, applyCompaction, historyBudgetTokens } from "@providerkit/core";
183
-
184
- if (needsCompaction(lastInputTokens, contextWindow)) {
185
- const cut = pickCut(messages, historyBudgetTokens(contextWindow));
186
- messages = applyCompaction(messages, cut, await summarize(messages.slice(0, cut)));
57
+ if (err.kind === "context") return compactAndRetry();
58
+ if (isTransient(err.kind)) return retry(err.retryAfterMs);
59
+ surface(err); // .body has their actual words
187
60
  }
188
61
  ```
189
62
 
190
- `pickCut` never splits a tool call from its result (every provider rejects the orphan with a
191
- 400 the failure compaction was called to avoid), never cuts into the system prompt, and
192
- always keeps the newest message.
193
-
194
- ### Cost
63
+ **Full documentation lives at [providerkit.dev](https://providerkit.dev)** it is the single
64
+ source of truth for usage, and this README deliberately stays a front door so the two cannot
65
+ drift.
195
66
 
196
- The arithmetic, not the rates. A price table is volatile data about a catalogue that differs
197
- per application, and a wrong number shipped in a library is a wrong number in everyone's
198
- ledger so you keep the numbers, verifiable line by line against a vendor's price sheet:
67
+ | Guide | What it covers |
68
+ | ----------------------------------------------------------------------- | ------------------------------------------------ |
69
+ | [Getting started](https://providerkit.dev/guides/getting-started/) | Install, first stream, swapping vendors |
70
+ | [The provider seam](https://providerkit.dev/guides/providers/) | Message, chunk and tool shapes |
71
+ | [Errors](https://providerkit.dev/guides/errors/) | The thirteen kinds, and why status is not enough |
72
+ | [Retries and fallback](https://providerkit.dev/guides/retries/) | Backoff, the commitment rule, backup models |
73
+ | [Streaming and the watchdog](https://providerkit.dev/guides/streaming/) | The stream that stops sending; TTFT |
74
+ | [Tools](https://providerkit.dev/guides/tools/) | Tool kernel, truncated-argument salvage, zod |
75
+ | [Context and compaction](https://providerkit.dev/guides/context/) | When to compact, and where to cut |
76
+ | [Usage and cost](https://providerkit.dev/guides/usage/) | Reconciling cache tokens, cost, savings |
199
77
 
200
- ```ts
201
- import { UsageTracker } from "@providerkit/core";
202
-
203
- const tracker = new UsageTracker();
204
- tracker.add(usage, { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }); // USD per Mtok
205
- tracker.costUsd;
206
- tracker.cacheSavingsUsd; // what the cache saved, for the "is caching even working" question
207
- ```
78
+ The [API reference](https://providerkit.dev/reference/) is generated from the source, so it
79
+ cannot drift either.
208
80
 
209
81
  ## Origin
210
82
 
@@ -224,8 +96,9 @@ ever saw. That is the part worth having.
224
96
  ## Repo
225
97
 
226
98
  ```
227
- core/ the npm package `providerkit`
228
- site/ providerkit.dev — also open source
99
+ core/ the npm package `@providerkit/core`
100
+ site/ providerkit.dev — Astro + Starlight, also open source
101
+ brand/ the mark, the OG card, and the generator for both
229
102
  ```
230
103
 
231
104
  `bun install`, then `cd core && bun run test`. See [AGENTS.md](./AGENTS.md) for the layout,
@@ -233,12 +106,15 @@ the invariants worth not regressing, and what is left to build.
233
106
 
234
107
  ## Status
235
108
 
236
- Working and tested (218 tests): the seam, the error classifier, retry and backup-model
109
+ Working and tested (380 tests): the seam, the error classifier, retry and backup-model
237
110
  fallback, the idle watchdog, cost math, the fetch/SSE transport, tool-argument salvage, the
238
- Anthropic and OpenAI-shape adapters, the tool kernel, schema clamping, and the compaction
239
- decisions.
111
+ Anthropic, OpenAI-shape, Responses and Gemini adapters, the multi-key rotation pool,
112
+ rate-limit reset windows, the tool kernel, schema clamping, and the compaction decisions.
240
113
 
241
- Not yet: the Gemini and Responses adapters, and the multi-key rotation pool.
114
+ That is the whole extraction. What is not yet proven is adoption: **nothing consumes this
115
+ package yet, including the five codebases it came from.** The claim it is built on is that
116
+ every adopting codebase gets smaller, and until one migrates that claim is untested — so
117
+ the version stays where it is until one does.
242
118
 
243
119
  ## License
244
120
 
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAWD;sCACsC;AACtC,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAO1D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0BhF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAQf;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAWD;sCACsC;AACtC,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAO1D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASnF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0BhF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAQf;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD"}
package/dist/context.js CHANGED
@@ -43,6 +43,14 @@ export function conversationTokens(messages) {
43
43
  * that is not a guess. Estimate only when there is no reported count yet.
44
44
  */
45
45
  export function needsCompaction(inputTokens, contextWindow) {
46
+ // A window at or below the reserve puts the threshold at zero or less, and
47
+ // every turn — including one that has not reported usage yet — then reads as
48
+ // already full. That loops: folding a history this side of its first answer
49
+ // changes nothing, so the next check says the same thing. Small windows are
50
+ // not hypothetical; a caller that learns a real ceiling from a rejection
51
+ // (rather than guessing one) can legitimately arrive here with 8k.
52
+ if (inputTokens <= 0)
53
+ return false;
46
54
  return inputTokens >= contextWindow - CONTEXT_RESERVE_TOKENS;
47
55
  }
48
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -72,6 +72,18 @@ export declare function isTransportFailure(err: unknown): boolean;
72
72
  * entitlement beats quota beats auth — each earlier category's fix is useless
73
73
  * for the later ones.
74
74
  */
75
+ /**
76
+ * The kind of a failure that arrived as an HTTP response — a status and a body,
77
+ * with nothing thrown.
78
+ *
79
+ * `classify` below is for a caught error, and it reads `status` and the body
80
+ * text off that error when they are not passed separately. A response has no
81
+ * error object, so callers were inventing one to fill the slot: a bare body
82
+ * string, the same text twice, a `{ status, error }` literal. All three are
83
+ * inert — nothing on them can satisfy `isAbort` or `isTransportFailure` — so
84
+ * they were three spellings of `undefined`.
85
+ */
86
+ export declare function classifyHttp(status: number | undefined, body: string): ErrorKind;
75
87
  export declare function classify(err: unknown, status?: number, body?: string): ErrorKind;
76
88
  /**
77
89
  * How long the provider asked us to wait, in ms. Two dialects: Gemini's
@@ -80,6 +92,30 @@ export declare function classify(err: unknown, status?: number, body?: string):
80
92
  * backoff shorter than the window just burns an attempt.
81
93
  */
82
94
  export declare function parseRetryAfterMs(err: unknown, body?: string): number | undefined;
95
+ /**
96
+ * A failure the backend reports INSIDE an already-200 stream.
97
+ *
98
+ * The transport classified everything that failed before the body opened; this
99
+ * is the rest, and every streaming shape has the same hole. An SSE response
100
+ * commits to 200 the moment its headers go out, so a throttle, an overload, or
101
+ * a prompt found too long after the fact arrives as a payload in the body
102
+ * rather than as a status line. Left unread it matches no branch an adapter
103
+ * models, the loop skips it, and the turn ends as a successful zero-token
104
+ * completion: retry sees nothing to retry, and a key pool never rotates off an
105
+ * exhausted key.
106
+ *
107
+ * `error` is the vendor's own payload, whatever shape it came in — the numeric
108
+ * HTTP `code` Gemini and OpenRouter use, the slug OpenAI and Anthropic put in
109
+ * `code`/`type`, the canonical `status` name. The whole thing serializes into
110
+ * the searchable body, so RetryInfo's `retryDelay` is honoured wherever it sits.
111
+ *
112
+ * `unknown` is floored to "overload" rather than kept: a stream that dies after
113
+ * its headers is by construction a transient upstream fault, and "unknown" is
114
+ * never retried. Everything the body DOES name keeps its own kind — which is
115
+ * what tells the caller to wait, rotate a key, or compact instead of retrying
116
+ * a failure that will repeat.
117
+ */
118
+ export declare function streamError(provider: string, error: unknown): ProviderError;
83
119
  /** The loggable surface of a failure — so a dead run never reads
84
120
  * "400 status code (no body)". */
85
121
  export declare function describeProviderError(err: unknown): Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAYA,qEAAqE;AACrE,MAAM,MAAM,SAAS;AACnB,+DAA+D;AAC7D,SAAS;AACX,sDAAsD;GACpD,SAAS;AACX,8EAA8E;GAC5E,SAAS;AACX;sCACsC;GACpC,UAAU;AACZ,yEAAyE;GACvE,MAAM;AACR,0EAA0E;GACxE,OAAO;AACT,iFAAiF;GAC/E,aAAa;AACf,mDAAmD;GACjD,MAAM;AACR,yDAAyD;GACvD,OAAO;AACT,sEAAsE;GACpE,SAAS;AACX,gCAAgC;GAC9B,SAAS;AACX,6CAA6C;GAC3C,SAAS,GACT,SAAS,CAAC;AAcd,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEzD;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;0CACsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;6DACyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;KACZ;IAYR,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;iFAC6E;IAC7E,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,aAAa;CAc3D;AAgBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU9C;AAwDD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAiBxD;AAqFD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAgChF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBjF;AAED;mCACmC;AACnC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa3E"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAYA,qEAAqE;AACrE,MAAM,MAAM,SAAS;AACnB,+DAA+D;AAC7D,SAAS;AACX,sDAAsD;GACpD,SAAS;AACX,8EAA8E;GAC5E,SAAS;AACX;sCACsC;GACpC,UAAU;AACZ,yEAAyE;GACvE,MAAM;AACR,0EAA0E;GACxE,OAAO;AACT,iFAAiF;GAC/E,aAAa;AACf,mDAAmD;GACjD,MAAM;AACR,yDAAyD;GACvD,OAAO;AACT,sEAAsE;GACpE,SAAS;AACX,gCAAgC;GAC9B,SAAS;AACX,6CAA6C;GAC3C,SAAS,GACT,SAAS,CAAC;AAcd,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEzD;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;0CACsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;6DACyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;KACZ;IAYR,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;iFAC6E;IAC7E,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,aAAa;CAc3D;AAgBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU9C;AAwDD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAuBxD;AAmGD;;;;;;GAMG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAEhF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAiChF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBjF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa,CAiB3E;AAED;mCACmC;AACnC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa3E"}
package/dist/errors.js CHANGED
@@ -174,6 +174,13 @@ export function isTransportFailure(err) {
174
174
  return true;
175
175
  if (code !== undefined && TRANSPORT_CODES.has(code))
176
176
  return true;
177
+ // undici — Node's fetch, and Bun's — parks the real reason in `code` while
178
+ // the thrown error says only "terminated", which is the most common way a
179
+ // stream dies mid-body. Its whole family shares one prefix; enumerating
180
+ // them ages badly, the prefix does not. UND_ERR_ABORTED is the caller's
181
+ // Stop wearing the same prefix, and is never ours to retry.
182
+ if (code?.startsWith("UND_ERR_") && code !== "UND_ERR_ABORTED")
183
+ return true;
177
184
  // A bare TypeError is also what a real bug throws ("x is not a function"),
178
185
  // so the MESSAGE is checked, not just the type — misfiling one of those
179
186
  // would retry a genuine bug three times and hide it.
@@ -224,7 +231,6 @@ const QUOTA_PATTERNS = [
224
231
  /upgrade your plan/i,
225
232
  /quota\b[^.]{0,40}\b(?:exhausted|exceeded|will be refreshed)/i,
226
233
  /balance (?:is )?(?:too low|not enough|insufficient)/i,
227
- /per\s*day|PerDay|insufficient_quota|billing/i,
228
234
  /余额不足/,
229
235
  /欠费/,
230
236
  /额度(?:不足|已用完)/,
@@ -246,6 +252,20 @@ const CONTENT_PATTERNS = [
246
252
  /content policy/i,
247
253
  /safety|PROHIBITED_CONTENT|blocked|refusal/i,
248
254
  ];
255
+ /**
256
+ * A throttle said in words rather than in a 429.
257
+ *
258
+ * Every other kind has body evidence; rate had only the status, which is
259
+ * exactly the evidence an in-band failure lacks — an SSE response is already
260
+ * 200 when the throttle lands, so the reason arrives as a payload with no
261
+ * status line at all. Checked below the status branches, so it only ever
262
+ * catches what would otherwise fall through to "unknown".
263
+ */
264
+ const RATE_PATTERNS = [
265
+ /rate[_\s-]?limit/i,
266
+ /too many requests/i,
267
+ /RESOURCE_EXHAUSTED/,
268
+ ];
249
269
  /** Theirs and temporary, said in words rather than a status. Gemini reports
250
270
  * UNAVAILABLE/INTERNAL in the body; gateways say "capacity". */
251
271
  const OVERLOAD_PATTERNS = [
@@ -263,6 +283,20 @@ const matches = (patterns, text) => patterns.some((pattern) => pattern.test(text
263
283
  * entitlement beats quota beats auth — each earlier category's fix is useless
264
284
  * for the later ones.
265
285
  */
286
+ /**
287
+ * The kind of a failure that arrived as an HTTP response — a status and a body,
288
+ * with nothing thrown.
289
+ *
290
+ * `classify` below is for a caught error, and it reads `status` and the body
291
+ * text off that error when they are not passed separately. A response has no
292
+ * error object, so callers were inventing one to fill the slot: a bare body
293
+ * string, the same text twice, a `{ status, error }` literal. All three are
294
+ * inert — nothing on them can satisfy `isAbort` or `isTransportFailure` — so
295
+ * they were three spellings of `undefined`.
296
+ */
297
+ export function classifyHttp(status, body) {
298
+ return classify(undefined, status, body);
299
+ }
266
300
  export function classify(err, status, body) {
267
301
  if (isAbort(err))
268
302
  return "aborted";
@@ -302,6 +336,8 @@ export function classify(err, status, body) {
302
336
  return "overload";
303
337
  if (code !== undefined && code >= 500)
304
338
  return "overload";
339
+ if (matches(RATE_PATTERNS, text))
340
+ return "rate";
305
341
  if (matches(OVERLOAD_PATTERNS, text))
306
342
  return "overload";
307
343
  if (/timed out|timeout/i.test(text))
@@ -337,6 +373,41 @@ export function parseRetryAfterMs(err, body) {
337
373
  const date = Date.parse(value);
338
374
  return Number.isNaN(date) ? undefined : Math.max(0, date - Date.now());
339
375
  }
376
+ /**
377
+ * A failure the backend reports INSIDE an already-200 stream.
378
+ *
379
+ * The transport classified everything that failed before the body opened; this
380
+ * is the rest, and every streaming shape has the same hole. An SSE response
381
+ * commits to 200 the moment its headers go out, so a throttle, an overload, or
382
+ * a prompt found too long after the fact arrives as a payload in the body
383
+ * rather than as a status line. Left unread it matches no branch an adapter
384
+ * models, the loop skips it, and the turn ends as a successful zero-token
385
+ * completion: retry sees nothing to retry, and a key pool never rotates off an
386
+ * exhausted key.
387
+ *
388
+ * `error` is the vendor's own payload, whatever shape it came in — the numeric
389
+ * HTTP `code` Gemini and OpenRouter use, the slug OpenAI and Anthropic put in
390
+ * `code`/`type`, the canonical `status` name. The whole thing serializes into
391
+ * the searchable body, so RetryInfo's `retryDelay` is honoured wherever it sits.
392
+ *
393
+ * `unknown` is floored to "overload" rather than kept: a stream that dies after
394
+ * its headers is by construction a transient upstream fault, and "unknown" is
395
+ * never retried. Everything the body DOES name keeps its own kind — which is
396
+ * what tells the caller to wait, rotate a key, or compact instead of retrying
397
+ * a failure that will repeat.
398
+ */
399
+ export function streamError(provider, error) {
400
+ const body = JSON.stringify(error ?? {}) ?? "";
401
+ const status = readNumber(error, "code") ?? readNumber(error, "status");
402
+ const code = readString(error, "code") ?? readString(error, "status") ?? readString(error, "type");
403
+ const kind = classifyHttp(status, body);
404
+ return new ProviderError(provider, kind === "unknown" ? "overload" : kind, `${provider} stream error: ${readString(error, "message") ?? code ?? "no reason given"}`, {
405
+ ...(status !== undefined ? { status } : {}),
406
+ ...(code ? { code } : {}),
407
+ retryAfterMs: parseRetryAfterMs(error, body),
408
+ body: body.slice(0, 2_000),
409
+ });
410
+ }
340
411
  /** The loggable surface of a failure — so a dead run never reads
341
412
  * "400 status code (no body)". */
342
413
  export function describeProviderError(err) {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AA+B3E,qDAAqD;AACrD,MAAM,SAAS,GAA2B,IAAI,GAAG,CAAY;IAC3D,SAAS;IACT,SAAS;IACT,UAAU;IACV,MAAM;CACP,CAAC,CAAC;AAEH;qEACqE;AACrE,MAAM,eAAe,GAA2B,IAAI,GAAG,CAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzF,MAAM,UAAU,WAAW,CAAC,IAAe;IACzC,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAe;IAC9C,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,QAAQ,CAAS;IACjB,IAAI,CAAY;IAChB,MAAM,CAAU;IAChB,IAAI,CAAU;IACvB;0CACsC;IAC7B,YAAY,CAAU;IAC/B;6DACyD;IAChD,IAAI,CAAU;IAEvB,YACE,QAAgB,EAChB,IAAe,EACf,OAAe,EACf,OAMI,EAAE;QAEN,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;iFAC6E;IAC7E,MAAM,CAAC,IAAI,CAAC,QAAgB,EAAE,GAAY;QACxC,IAAI,GAAG,YAAY,aAAa;YAAE,OAAO,GAAG,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;YACvE,MAAM;YACN,IAAI;YACJ,YAAY,EAAE,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS;YACvC,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;IACL,CAAC;CACF;AAED,6EAA6E;AAE7E,SAAS,UAAU,CAAC,GAAY,EAAE,GAAW;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,GAAY,EAAE,GAAW;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,GAAY;IAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAC5D,MAAM,IAAI,GAAI,GAA+B,CAAC,KAAK,CAAC;IACpD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,6EAA6E;AAE7E;mEACmE;AACnE,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,YAAY;IACZ,cAAc;IACd,cAAc;IACd,WAAW;IACX,OAAO;IACP,aAAa;IACb,UAAU;IACV,WAAW;IACX,cAAc;IACd,WAAW;IACX,4BAA4B;CAC7B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,kBAAkB,GACtB,0OAA0O,CAAC;AAE7O,6DAA6D;AAC7D,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,OAAO,CAAC,GAAY;IAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,WAAW,CAAC;AACvF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;QACpE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,2BAA2B;YAAE,OAAO,IAAI,CAAC;QACvF,IAAI,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,2EAA2E;QAC3E,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,4DAA4D;QAC5D,IAAI,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAC5E,2EAA2E;QAC3E,wEAAwE;QACxE,qDAAqD;QACrD,IAAI,OAAO,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3E,OAAO,GAAI,OAA+B,CAAC,KAAK,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAE7E,6EAA6E;AAC7E,+EAA+E;AAC/E,0DAA0D;AAC1D,MAAM,gBAAgB,GAAsB;IAC1C,kCAAkC;IAClC,yBAAyB;IACzB,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,6BAA6B;IAC7B,qDAAqD;IACrD,yEAAyE;IACzE,8EAA8E;IAC9E,6FAA6F;CAC9F,CAAC;AAEF,6EAA6E;AAC7E,4EAA4E;AAC5E,kCAAkC;AAClC,MAAM,oBAAoB,GAAsB;IAC9C,4CAA4C;IAC5C,4CAA4C;IAC5C,2CAA2C;IAC3C,gBAAgB;CACjB,CAAC;AAEF,yEAAyE;AACzE,yEAAyE;AACzE,MAAM,cAAc,GAAsB;IACxC,yBAAyB;IACzB,8BAA8B;IAC9B,oCAAoC;IACpC,4BAA4B;IAC5B,wBAAwB;IACxB,sCAAsC;IACtC,yCAAyC;IACzC,oDAAoD;IACpD,4CAA4C;IAC5C,uBAAuB;IACvB,oBAAoB;IACpB,8DAA8D;IAC9D,sDAAsD;IACtD,MAAM;IACN,IAAI;IACJ,cAAc;CACf,CAAC;AAEF,MAAM,cAAc,GAAsB;IACxC,sEAAsE;IACtE,iBAAiB;IACjB,oBAAoB;CACrB,CAAC;AAEF,MAAM,aAAa,GAAsB;IACvC,wDAAwD;IACxD,uDAAuD;IACvD,iDAAiD;IACjD,8CAA8C;IAC9C,oDAAoD;CACrD,CAAC;AAEF,MAAM,gBAAgB,GAAsB;IAC1C,qBAAqB;IACrB,iBAAiB;IACjB,4CAA4C;CAC7C,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAsB;IACvC,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;CACrB,CAAC;AAEF;iEACiE;AACjE,MAAM,iBAAiB,GAAsB;IAC3C,8BAA8B;IAC9B,6BAA6B;IAC7B,yBAAyB;IACzB,eAAe;IACf,oBAAoB;CACrB,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,QAA2B,EAAE,IAAY,EAAW,EAAE,CACrE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B,EAAE,IAAY;IACnE,OAAO,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,MAAe,EAAE,IAAa;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,IAAI,GAAG,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IAE9D,qEAAqE;IACrE,6EAA6E;IAC7E,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC;IACrD,IAAI,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,IAAI,WAAW,IAAI,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IAC7E,IAAI,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACjE,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChF,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,uEAAuE;IACvE,iEAAiE;IACjE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC;IACpD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,UAAU,CAAC;IACzD,IAAI,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IACxD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,IAAa;IAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC1E,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE/D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,OAAO,GAAI,GAA6B,CAAC,OAAO,CAAC;IACvD,MAAM,KAAK,GACT,OAAO,YAAY,OAAO;QACxB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC5B,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;YAC/C,CAAC,CAAE,OAAmC,CAAC,aAAa,CAAC;YACrD,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,0DAA0D;IAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAc;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,IAAI,GACR,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,aAAa,CACtB,QAAQ,EACR,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EACtC,GAAG,QAAQ,kBAAkB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,IAAI,iBAAiB,EAAE,EACxF;QACE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,YAAY,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;KAC3B,CACF,CAAC;AACJ,CAAC;AAED;mCACmC;AACnC,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,KAAK,EAAE,GAAG,CAAC,OAAO;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACxD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,17 @@
1
1
  export * from "./types.ts";
2
2
  export * from "./errors.ts";
3
3
  export * from "./retry.ts";
4
+ export * from "./key-pool.ts";
4
5
  export * from "./watchdog.ts";
5
6
  export * from "./usage.ts";
6
7
  export * from "./transport.ts";
8
+ export * from "./rate-limit.ts";
7
9
  export * from "./tool-args.ts";
8
10
  export * from "./tools.ts";
9
11
  export * from "./schema.ts";
10
12
  export * from "./context.ts";
11
13
  export * from "./providers/anthropic.ts";
12
14
  export * from "./providers/openai.ts";
15
+ export * from "./providers/responses.ts";
16
+ export * from "./providers/gemini.ts";
13
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,13 +1,17 @@
1
1
  export * from "./types.js";
2
2
  export * from "./errors.js";
3
3
  export * from "./retry.js";
4
+ export * from "./key-pool.js";
4
5
  export * from "./watchdog.js";
5
6
  export * from "./usage.js";
6
7
  export * from "./transport.js";
8
+ export * from "./rate-limit.js";
7
9
  export * from "./tool-args.js";
8
10
  export * from "./tools.js";
9
11
  export * from "./schema.js";
10
12
  export * from "./context.js";
11
13
  export * from "./providers/anthropic.js";
12
14
  export * from "./providers/openai.js";
15
+ export * from "./providers/responses.js";
16
+ export * from "./providers/gemini.js";
13
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { ErrorKind } from "./errors.ts";
2
+ import type { Provider } from "./types.ts";
3
+ export type KeyTier = "free" | "paid";
4
+ export interface KeyPoolOptions {
5
+ /** Free-tier keys, walked round-robin before the paid one. */
6
+ keys: readonly string[];
7
+ paidKey?: string | null;
8
+ /** Fires whenever a key is benched — the pool's only report, in place of a
9
+ * logger a zero-dependency package has no business owning. */
10
+ onEvict?: (info: {
11
+ tier: KeyTier;
12
+ kind: ErrorKind;
13
+ forMs: number;
14
+ }) => void;
15
+ /** Injected in tests, so an expiry can be exercised without waiting out a
16
+ * 12-hour cooldown. */
17
+ now?: () => number;
18
+ }
19
+ /** No key can serve right now. `retryAtMs` = when the soonest one is back. */
20
+ export declare class NoAvailableKeyError extends Error {
21
+ readonly retryAtMs: number;
22
+ constructor(label: string, retryAtMs: number);
23
+ }
24
+ export declare class KeyPool {
25
+ private readonly label;
26
+ private readonly free;
27
+ private readonly paid;
28
+ private readonly onEvict;
29
+ private readonly now;
30
+ private cursor;
31
+ constructor(label: string, opts: KeyPoolOptions);
32
+ get size(): number;
33
+ /**
34
+ * Run `fn` with the next available key, rotating on key-specific and
35
+ * transient failures. Everything else (a bad request, a content block) throws
36
+ * straight through — it would fail identically on every key, and spending the
37
+ * pool on it only turns one bad request into an outage.
38
+ */
39
+ with<T>(fn: (apiKey: string, tier: KeyTier) => Promise<T>): Promise<T>;
40
+ /** Free keys round-robin from a moving cursor, then the paid key. */
41
+ private candidates;
42
+ private nextAvailableAt;
43
+ }
44
+ /**
45
+ * Give any provider a rotating pool of keys.
46
+ *
47
+ * The subtlety is the seam's shape. `createStream` is an async generator, so
48
+ * CALLING it performs no I/O: the POST — and the 429 that should rotate the key
49
+ * — happens on the first `next()`, long after a `pool.with` wrapped around the
50
+ * call itself would have returned, with nothing left to rotate. So the first
51
+ * chunk is pulled INSIDE the pool and only the rest of the stream is consumed
52
+ * outside it.
53
+ *
54
+ * That line is also the honest one. Past the first chunk the answer is
55
+ * committed to one key, exactly as a retry is committed past its first chunk
56
+ * (retry.ts, rule 2): a mid-stream 429 evicts nothing and rotates nothing,
57
+ * because there is no way to resume a half-rendered answer on another key.
58
+ */
59
+ export declare function withKeyPool(pool: KeyPool, factory: (apiKey: string) => Provider): Provider;
60
+ //# sourceMappingURL=key-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-pool.d.ts","sourceRoot":"","sources":["../src/key-pool.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAEV,QAAQ,EAIT,MAAM,YAAY,CAAC;AAapB,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAStC,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;mEAC+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E;4BACwB;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAK7C;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,MAAM,CAAK;gBAEP,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAe/C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACG,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0B5E,qEAAqE;IACrE,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,eAAe;CAIxB;AAiCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,GAAG,QAAQ,CAqE1F"}