@stackbilt/llm-providers 1.0.0 → 1.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 (87) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +112 -85
  3. package/dist/errors.d.ts +18 -1
  4. package/dist/errors.d.ts.map +1 -1
  5. package/dist/errors.js +12 -4
  6. package/dist/errors.js.map +1 -1
  7. package/dist/factory.d.ts +62 -4
  8. package/dist/factory.d.ts.map +1 -1
  9. package/dist/factory.js +630 -92
  10. package/dist/factory.js.map +1 -1
  11. package/dist/image/index.d.ts +5 -0
  12. package/dist/image/index.d.ts.map +1 -0
  13. package/dist/image/index.js +3 -0
  14. package/dist/image/index.js.map +1 -0
  15. package/dist/image/provider.d.ts +44 -0
  16. package/dist/image/provider.d.ts.map +1 -0
  17. package/dist/image/provider.js +182 -0
  18. package/dist/image/provider.js.map +1 -0
  19. package/dist/image/types.d.ts +45 -0
  20. package/dist/image/types.d.ts.map +1 -0
  21. package/dist/image/types.js +83 -0
  22. package/dist/image/types.js.map +1 -0
  23. package/dist/index.d.ts +46 -12
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +73 -14
  26. package/dist/index.js.map +1 -1
  27. package/dist/providers/anthropic.d.ts +5 -2
  28. package/dist/providers/anthropic.d.ts.map +1 -1
  29. package/dist/providers/anthropic.js +118 -43
  30. package/dist/providers/anthropic.js.map +1 -1
  31. package/dist/providers/base.d.ts +18 -2
  32. package/dist/providers/base.d.ts.map +1 -1
  33. package/dist/providers/base.js +107 -5
  34. package/dist/providers/base.js.map +1 -1
  35. package/dist/providers/cerebras.d.ts +0 -0
  36. package/dist/providers/cerebras.d.ts.map +1 -1
  37. package/dist/providers/cerebras.js +21 -13
  38. package/dist/providers/cerebras.js.map +1 -1
  39. package/dist/providers/cloudflare.d.ts +0 -0
  40. package/dist/providers/cloudflare.d.ts.map +1 -1
  41. package/dist/providers/cloudflare.js +12 -8
  42. package/dist/providers/cloudflare.js.map +1 -1
  43. package/dist/providers/groq.d.ts +2 -1
  44. package/dist/providers/groq.d.ts.map +1 -1
  45. package/dist/providers/groq.js +95 -15
  46. package/dist/providers/groq.js.map +1 -1
  47. package/dist/providers/openai.d.ts +2 -0
  48. package/dist/providers/openai.d.ts.map +1 -1
  49. package/dist/providers/openai.js +56 -24
  50. package/dist/providers/openai.js.map +1 -1
  51. package/dist/types.d.ts +114 -4
  52. package/dist/types.d.ts.map +1 -1
  53. package/dist/types.js +0 -0
  54. package/dist/types.js.map +0 -0
  55. package/dist/utils/circuit-breaker.d.ts +5 -2
  56. package/dist/utils/circuit-breaker.d.ts.map +1 -1
  57. package/dist/utils/circuit-breaker.js +18 -13
  58. package/dist/utils/circuit-breaker.js.map +1 -1
  59. package/dist/utils/cost-tracker.d.ts +9 -2
  60. package/dist/utils/cost-tracker.d.ts.map +1 -1
  61. package/dist/utils/cost-tracker.js +20 -9
  62. package/dist/utils/cost-tracker.js.map +1 -1
  63. package/dist/utils/credit-ledger.d.ts +3 -0
  64. package/dist/utils/credit-ledger.d.ts.map +1 -1
  65. package/dist/utils/credit-ledger.js +5 -2
  66. package/dist/utils/credit-ledger.js.map +1 -1
  67. package/dist/utils/exhaustion.d.ts +38 -0
  68. package/dist/utils/exhaustion.d.ts.map +1 -0
  69. package/dist/utils/exhaustion.js +74 -0
  70. package/dist/utils/exhaustion.js.map +1 -0
  71. package/dist/utils/hooks.d.ts +113 -0
  72. package/dist/utils/hooks.d.ts.map +1 -0
  73. package/dist/utils/hooks.js +44 -0
  74. package/dist/utils/hooks.js.map +1 -0
  75. package/dist/utils/latency-histogram.d.ts +38 -0
  76. package/dist/utils/latency-histogram.d.ts.map +1 -0
  77. package/dist/utils/latency-histogram.js +81 -0
  78. package/dist/utils/latency-histogram.js.map +1 -0
  79. package/dist/utils/logger.d.ts +18 -0
  80. package/dist/utils/logger.d.ts.map +1 -0
  81. package/dist/utils/logger.js +22 -0
  82. package/dist/utils/logger.js.map +1 -0
  83. package/dist/utils/retry.d.ts +4 -2
  84. package/dist/utils/retry.d.ts.map +1 -1
  85. package/dist/utils/retry.js +12 -8
  86. package/dist/utils/retry.js.map +1 -1
  87. package/package.json +2 -2
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -1,17 +1,20 @@
1
1
  # @stackbilt/llm-providers
2
2
 
3
- A multi-provider LLM abstraction layer with automatic failover, circuit breakers, cost tracking, and intelligent retry. Built for Cloudflare Workers but runs anywhere with a standard `fetch` API. Extracted from a production orchestration platform handling 80K+ LOC across multiple services.
3
+ A multi-provider LLM abstraction layer with automatic failover, graduated circuit breakers, cost tracking, and intelligent retry. Built for Cloudflare Workers but runs anywhere with a standard `fetch` API. Extracted from a production orchestration platform handling 80K+ LOC across multiple services.
4
4
 
5
5
  ## Features
6
6
 
7
- - **Multi-provider failover** -- OpenAI, Anthropic, and Cloudflare Workers AI behind a single interface
8
- - **Circuit breaker** -- state machine (closed / open / half-open) prevents cascading failures
7
+ - **Multi-provider failover** -- OpenAI, Anthropic, Cloudflare Workers AI, Cerebras, and Groq behind a single interface
8
+ - **Graduated circuit breaker** -- 4-state machine (closed / degraded / recovering / open) with probabilistic traffic routing prevents cascading failures
9
9
  - **Exponential backoff retry** -- configurable delays, jitter, and per-error-class behavior
10
- - **Cost tracking and optimization** -- per-provider cost attribution, budget alerts, automatic routing to cheaper providers
11
- - **Streaming** -- SSE streaming support for all three providers
12
- - **Tool/function calling** -- OpenAI and Anthropic tool use with unified response format
13
- - **Batch processing** -- concurrent request batching with rate-limit awareness
10
+ - **Cost tracking and optimization** -- per-provider cost attribution, budget alerts with CreditLedger, automatic routing to cheaper providers
11
+ - **Rate limit enforcement** -- CreditLedger tracks RPM/RPD/TPM/TPD per provider; factory skips providers that exceed limits
12
+ - **Streaming** -- SSE streaming support for all providers
13
+ - **Tool/function calling** -- OpenAI, Anthropic, Cerebras, and Cloudflare tool use with unified response format
14
+ - **Image generation** -- Cloudflare Workers AI (SDXL, FLUX) and Google Gemini
14
15
  - **Health monitoring** -- per-provider health checks, metrics, and circuit breaker state
16
+ - **Structured logging** -- injectable `Logger` interface; silent by default, opt-in to console or custom loggers
17
+ - **Zero runtime dependencies** -- no transitive dependency tree to audit
15
18
 
16
19
  ## Installation
17
20
 
@@ -46,55 +49,75 @@ console.log(response.message);
46
49
  console.log(`Provider: ${response.provider}, Cost: $${response.usage.cost}`);
47
50
  ```
48
51
 
49
- ## Provider Configuration
50
-
51
- ### OpenAI
52
+ ### Auto-Discovery from Environment
52
53
 
53
54
  ```typescript
54
- {
55
- apiKey: 'sk-...',
56
- organization: 'org-...', // optional
57
- project: 'proj-...', // optional
58
- baseUrl: 'https://api.openai.com/v1', // optional, for proxies
59
- timeout: 30000,
60
- maxRetries: 3,
61
- }
55
+ import { LLMProviders } from '@stackbilt/llm-providers';
56
+
57
+ // Scans env for ANTHROPIC_API_KEY, OPENAI_API_KEY, GROQ_API_KEY,
58
+ // CEREBRAS_API_KEY, and AI binding — configures only what's present
59
+ const llm = LLMProviders.fromEnv(env, {
60
+ costOptimization: true,
61
+ enableCircuitBreaker: true,
62
+ });
62
63
  ```
63
64
 
64
- ### Anthropic
65
+ ## Providers
66
+
67
+ | Provider | Models | Streaming | Tools | Notes |
68
+ |----------|--------|-----------|-------|-------|
69
+ | **OpenAI** | GPT-4o, GPT-4o Mini, GPT-4 Turbo, GPT-4 | Yes | Yes | Default: `gpt-4o-mini` |
70
+ | **Anthropic** | Claude Opus 4.6, Sonnet 4.6, Sonnet 4, Haiku 4.5, 3.7 Sonnet, 3.5 Sonnet/Haiku, 3 Opus/Sonnet/Haiku | Yes | Yes | Default: `claude-haiku-4-5` |
71
+ | **Cloudflare** | LLaMA 3.1 8B/70B, GPT-OSS 120B, Mistral 7B, Qwen 1.5, TinyLlama, and more | Yes | GPT-OSS only | Near-zero cost |
72
+ | **Cerebras** | LLaMA 3.1 8B, LLaMA 3.3 70B, ZAI-GLM 4.7, Qwen 3 235B | Yes | GLM/Qwen only | ~2,200 tok/s |
73
+ | **Groq** | LLaMA 3.3 70B Versatile, LLaMA 3.1 8B Instant | Yes | No | Ultra-fast inference |
74
+
75
+ ### Provider Configuration
65
76
 
66
77
  ```typescript
67
- {
68
- apiKey: 'sk-ant-...',
69
- version: '2023-06-01', // optional
70
- baseUrl: 'https://api.anthropic.com', // optional
71
- timeout: 30000,
72
- maxRetries: 3,
73
- }
78
+ // OpenAI
79
+ { apiKey: 'sk-...', organization: 'org-...', project: 'proj-...' }
80
+
81
+ // Anthropic
82
+ { apiKey: 'sk-ant-...', version: '2023-06-01' }
83
+
84
+ // Cloudflare Workers AI
85
+ { ai: env.AI, accountId: '...' }
86
+
87
+ // Cerebras
88
+ { apiKey: 'csk-...' }
89
+
90
+ // Groq
91
+ { apiKey: 'gsk_...' }
74
92
  ```
75
93
 
76
- ### Cloudflare Workers AI
94
+ ## Logging
95
+
96
+ The library is silent by default. Opt in to logging by passing a `Logger`:
77
97
 
78
98
  ```typescript
79
- {
80
- ai: env.AI, // Cloudflare AI binding (required)
81
- accountId: '...', // optional
82
- timeout: 30000,
83
- maxRetries: 3,
84
- }
99
+ import { LLMProviders, consoleLogger } from '@stackbilt/llm-providers';
100
+
101
+ const llm = new LLMProviders({
102
+ anthropic: { apiKey: '...', logger: consoleLogger },
103
+ logger: consoleLogger, // factory-level logging
104
+ });
85
105
  ```
86
106
 
107
+ Or implement your own `Logger` interface (`debug`, `info`, `warn`, `error`).
108
+
87
109
  ## Circuit Breaker
88
110
 
89
- Each provider gets its own circuit breaker that tracks consecutive failures.
111
+ Each provider gets a graduated circuit breaker that routes traffic away from failing providers with probabilistic degradation.
90
112
 
91
113
  | State | Behavior |
92
114
  |-------|----------|
93
- | **Closed** | Requests pass through normally. Failures increment a counter. |
94
- | **Open** | All requests are immediately rejected. After `resetTimeout` ms, transitions to half-open. |
95
- | **Half-open** | A single test request is allowed through. Success closes the circuit; failure re-opens it. |
115
+ | **Closed** | 100% traffic to primary. Failures increment counter. |
116
+ | **Degraded** | Traffic splits probabilistically (90% 70% 40% 10%) as failures accumulate. |
117
+ | **Recovering** | Success steps traffic back up one level at a time. |
118
+ | **Open** | 0% traffic. After `resetTimeout` ms, failures decay and traffic resumes. |
96
119
 
97
- Default thresholds: 5 failures to open, 60s reset timeout, 5-minute monitoring window.
120
+ Default: 5-step degradation curve `[1.0, 0.9, 0.7, 0.4, 0.1]`, 60s reset timeout, 5-minute monitoring window.
98
121
 
99
122
  ```typescript
100
123
  import { CircuitBreakerManager } from '@stackbilt/llm-providers';
@@ -103,47 +126,37 @@ const manager = new CircuitBreakerManager({
103
126
  failureThreshold: 5,
104
127
  resetTimeout: 60000,
105
128
  monitoringPeriod: 300000,
129
+ degradationCurve: [1.0, 0.9, 0.7, 0.4, 0.1],
106
130
  });
107
131
 
108
132
  const breaker = manager.getBreaker('openai');
109
133
  console.log(breaker.getHealth());
110
134
  ```
111
135
 
112
- ## Cost Optimization
113
-
114
- When `costOptimization: true`, the factory routes requests to the cheapest available provider. Cloudflare Workers AI is essentially free and gets top priority.
136
+ ## Cost Tracking & Budget Management
115
137
 
116
138
  ```typescript
117
- import { createCostOptimizedLLMProviders } from '@stackbilt/llm-providers';
139
+ import { CreditLedger, LLMProviders } from '@stackbilt/llm-providers';
118
140
 
119
- const llm = createCostOptimizedLLMProviders({
120
- openai: { apiKey: process.env.OPENAI_API_KEY },
121
- cloudflare: { ai: env.AI },
141
+ const ledger = new CreditLedger({
142
+ budgets: [
143
+ { provider: 'openai', monthlyBudget: 50, rateLimits: { rpm: 60, rpd: 10000 } },
144
+ { provider: 'anthropic', monthlyBudget: 100 },
145
+ ],
122
146
  });
123
147
 
124
- const analytics = llm.getCostAnalytics();
125
- // { breakdown: { openai: { cost, requests, tokens }, ... }, total: 0.042, recommendations: [...] }
126
- ```
127
-
128
- ## Retry with Backoff
129
-
130
- Transient errors (rate limits, network errors, server errors) are retried automatically with exponential backoff and jitter.
148
+ // Threshold alerts fire at 80%, 90%, 95% utilization
149
+ ledger.on((event) => {
150
+ if (event.type === 'threshold_crossed') {
151
+ console.warn(`${event.provider}: ${event.tier} — ${event.utilizationPct.toFixed(0)}% of budget`);
152
+ }
153
+ });
131
154
 
132
- ```typescript
133
- import { RetryManager, retry } from '@stackbilt/llm-providers';
134
-
135
- // Standalone retry for any async operation
136
- const result = await retry(
137
- () => fetch('https://api.example.com/data'),
138
- { maxRetries: 3, initialDelay: 1000, backoffMultiplier: 2 }
139
- );
140
-
141
- // Or configure per-provider via RetryManager
142
- const retryManager = new RetryManager({
143
- maxRetries: 5,
144
- initialDelay: 500,
145
- maxDelay: 30000,
146
- backoffMultiplier: 2,
155
+ const llm = new LLMProviders({
156
+ openai: { apiKey: '...' },
157
+ anthropic: { apiKey: '...' },
158
+ costOptimization: true,
159
+ ledger, // Factory enforces rate limits and tracks spend
147
160
  });
148
161
  ```
149
162
 
@@ -156,6 +169,7 @@ const llm = new LLMProviders({
156
169
  openai: { apiKey: '...' },
157
170
  anthropic: { apiKey: '...' },
158
171
  cloudflare: { ai: env.AI },
172
+ cerebras: { apiKey: '...' },
159
173
  fallbackRules: [
160
174
  { condition: 'rate_limit', fallbackProvider: 'cloudflare' },
161
175
  { condition: 'cost', threshold: 10, fallbackProvider: 'cloudflare' },
@@ -164,6 +178,8 @@ const llm = new LLMProviders({
164
178
  });
165
179
  ```
166
180
 
181
+ Default fallback priority includes all configured providers: Cloudflare → Cerebras → Groq → Anthropic → OpenAI.
182
+
167
183
  ## Error Handling
168
184
 
169
185
  Structured error classes for each failure mode:
@@ -175,7 +191,6 @@ import {
175
191
  AuthenticationError,
176
192
  CircuitBreakerOpenError,
177
193
  TimeoutError,
178
- LLMErrorFactory,
179
194
  } from '@stackbilt/llm-providers';
180
195
 
181
196
  try {
@@ -193,14 +208,16 @@ try {
193
208
 
194
209
  ## Model Constants
195
210
 
196
- Predefined model identifiers for convenience:
197
-
198
211
  ```typescript
199
212
  import { MODELS, getRecommendedModel } from '@stackbilt/llm-providers';
200
213
 
201
- MODELS.GPT_4O; // 'gpt-4o'
202
- MODELS.CLAUDE_3_5_SONNET; // 'claude-3-5-sonnet-20241022'
203
- MODELS.LLAMA_3_1_8B; // '@cf/meta/llama-3.1-8b-instruct'
214
+ // Current-gen models
215
+ MODELS.CLAUDE_OPUS_4_6; // 'claude-opus-4-6-20250618'
216
+ MODELS.CLAUDE_SONNET_4_6; // 'claude-sonnet-4-6-20250618'
217
+ MODELS.CLAUDE_HAIKU_4_5; // 'claude-haiku-4-5-20251001'
218
+ MODELS.GPT_4O; // 'gpt-4o'
219
+ MODELS.GPT_4O_MINI; // 'gpt-4o-mini'
220
+ MODELS.CEREBRAS_ZAI_GLM_4_7; // 'zai-glm-4.7'
204
221
 
205
222
  // Get best model for a use case given available providers
206
223
  const model = getRecommendedModel('COST_EFFECTIVE', ['openai', 'cloudflare']);
@@ -214,32 +231,43 @@ const model = getRecommendedModel('COST_EFFECTIVE', ['openai', 'cloudflare']);
214
231
  |-------|-------------|
215
232
  | `LLMProviders` | High-level facade -- initialize providers, generate responses, check health |
216
233
  | `LLMProviderFactory` | Lower-level factory with provider chain building and fallback logic |
217
- | `OpenAIProvider` | OpenAI GPT models (streaming, tools, batch) |
234
+ | `OpenAIProvider` | OpenAI GPT models (streaming, tools) |
218
235
  | `AnthropicProvider` | Anthropic Claude models (streaming, tools) |
219
- | `CloudflareProvider` | Cloudflare Workers AI (streaming, batch, cost optimization) |
236
+ | `CloudflareProvider` | Cloudflare Workers AI (streaming, tools on GPT-OSS, batch) |
237
+ | `CerebrasProvider` | Cerebras fast inference (streaming, tools on GLM/Qwen) |
238
+ | `GroqProvider` | Groq fast inference (streaming) |
220
239
  | `BaseProvider` | Abstract base with shared resiliency, metrics, and cost calculation |
221
240
 
222
241
  ### Utilities
223
242
 
224
243
  | Class | Description |
225
244
  |-------|-------------|
226
- | `CircuitBreaker` | Per-provider circuit breaker state machine |
245
+ | `CircuitBreaker` | Graduated 4-state circuit breaker with probabilistic degradation |
227
246
  | `CircuitBreakerManager` | Manages circuit breakers across multiple providers |
228
247
  | `RetryManager` | Exponential backoff retry with jitter |
229
248
  | `CostTracker` | Per-provider cost accumulation and budget alerts |
249
+ | `CreditLedger` | Monthly budgets, rate limits, burn rate projection, threshold events |
230
250
  | `CostOptimizer` | Static methods for optimal provider selection |
251
+ | `ImageProvider` | Multi-provider image generation (Cloudflare SDXL/FLUX, Google Gemini) |
252
+
253
+ ### Logger
254
+
255
+ | Export | Description |
256
+ |--------|-------------|
257
+ | `Logger` | Interface: `debug`, `info`, `warn`, `error` methods |
258
+ | `noopLogger` | Silent logger (default) |
259
+ | `consoleLogger` | Forwards to `console.*` (opt-in) |
231
260
 
232
261
  ### Key Types
233
262
 
234
263
  | Type | Description |
235
264
  |------|-------------|
236
- | `LLMRequest` | Unified request: messages, model, temperature, tools, metadata |
237
- | `LLMResponse` | Unified response: message, usage, provider, cost, tool calls |
238
- | `LLMProvider` | Provider interface: generateResponse, healthCheck, estimateCost |
239
- | `ProviderFactoryConfig` | Factory configuration: provider configs, fallback rules, flags |
240
- | `CircuitBreakerConfig` | Failure threshold, reset timeout, monitoring period |
241
- | `RetryConfig` | Max retries, delays, backoff multiplier, retryable error codes |
242
- | `CostConfig` | Token costs, monthly budget, alert threshold |
265
+ | `LLMRequest` | Unified request: messages, model, temperature, tools, response_format |
266
+ | `LLMResponse` | Unified response: message, usage (with cost), provider, tool calls |
267
+ | `TokenUsage` | Token counts and cost (inputTokens, outputTokens, totalTokens, cost) |
268
+ | `ProviderFactoryConfig` | Factory config: provider configs, fallback rules, ledger, logger |
269
+ | `CostAnalytics` | Cost breakdown, total, and recommendations |
270
+ | `ProviderHealthEntry` | Health status, metrics, circuit breaker state, capabilities |
243
271
 
244
272
  ### Factory Functions
245
273
 
@@ -247,8 +275,7 @@ const model = getRecommendedModel('COST_EFFECTIVE', ['openai', 'cloudflare']);
247
275
  |----------|-------------|
248
276
  | `createLLMProviders(config)` | Create an `LLMProviders` instance |
249
277
  | `createCostOptimizedLLMProviders(config)` | Create with cost optimization, circuit breakers, and retries enabled |
250
- | `createLLMProviderFactory(config)` | Create a bare `LLMProviderFactory` |
251
- | `createCostOptimizedFactory(config)` | Create a cost-optimized factory |
278
+ | `LLMProviders.fromEnv(env)` | Auto-discover providers from environment variables |
252
279
  | `getRecommendedModel(useCase, providers)` | Pick the best model for a use case |
253
280
  | `retry(fn, config)` | One-shot retry wrapper for any async function |
254
281
 
package/dist/errors.d.ts CHANGED
@@ -50,11 +50,27 @@ export declare class CircuitBreakerOpenError extends LLMProviderError {
50
50
  consecutiveFailures: number;
51
51
  constructor(provider: string, retryAfterSec?: number, consecutiveFailures?: number);
52
52
  }
53
+ export declare class ToolLoopLimitError extends LLMProviderError {
54
+ constructor(provider: string, message?: string);
55
+ }
56
+ export declare class ToolLoopAbortedError extends LLMProviderError {
57
+ constructor(provider: string, message?: string);
58
+ }
53
59
  /**
54
60
  * Error factory for creating provider-specific errors from HTTP responses
55
61
  */
62
+ /** Shape of error response bodies across all LLM providers. */
63
+ interface ErrorResponseBody {
64
+ message?: string;
65
+ error?: {
66
+ message?: string;
67
+ code?: string;
68
+ type?: string;
69
+ param?: string;
70
+ };
71
+ }
56
72
  export declare class LLMErrorFactory {
57
- static fromHttpResponse(provider: string, statusCode: number, responseBody?: any, message?: string): LLMProviderError;
73
+ static fromHttpResponse(provider: string, statusCode: number, responseBody?: ErrorResponseBody, message?: string): LLMProviderError;
58
74
  /**
59
75
  * Create error from fetch response
60
76
  */
@@ -76,4 +92,5 @@ export declare class LLMErrorFactory {
76
92
  */
77
93
  static getRetryDelay(error: Error): number;
78
94
  }
95
+ export {};
79
96
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,QAAQ;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;gBAGtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAe,EAC1B,UAAU,CAAC,EAAE,MAAM;CAStB;AAED,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAA8B;CAItE;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAyB;CAIjE;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC;CAGxE;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAA0B;CAGlE;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAG5C;AAED,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAA0B;CAGlE;AAED,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB;CAGhE;AAED,qBAAa,WAAY,SAAQ,gBAAgB;gBACnC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAgC,EAAE,UAAU,GAAE,MAAY;CAGlG;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2B;CAGnE;AAED,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAA+B;CAGvE;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAG9C;AAED,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;gBAEhB,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAE,MAAU,EAAE,mBAAmB,GAAE,MAAU;CAWzF;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,GAAG,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB;IA8CnB;;OAEG;WACU,iBAAiB,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,gBAAgB,CAAC;IAiB5B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAazC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI3C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI7C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;CAW3C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -85,9 +85,16 @@ export class CircuitBreakerOpenError extends LLMProviderError {
85
85
  this.consecutiveFailures = consecutiveFailures;
86
86
  }
87
87
  }
88
- /**
89
- * Error factory for creating provider-specific errors from HTTP responses
90
- */
88
+ export class ToolLoopLimitError extends LLMProviderError {
89
+ constructor(provider, message = 'Tool loop limit exceeded') {
90
+ super(message, 'TOOL_LOOP_LIMIT', provider, false, 400);
91
+ }
92
+ }
93
+ export class ToolLoopAbortedError extends LLMProviderError {
94
+ constructor(provider, message = 'Tool loop aborted') {
95
+ super(message, 'TOOL_LOOP_ABORTED', provider, false, 400);
96
+ }
97
+ }
91
98
  export class LLMErrorFactory {
92
99
  static fromHttpResponse(provider, statusCode, responseBody, message) {
93
100
  const defaultMessage = message || responseBody?.message || responseBody?.error?.message || 'Unknown error';
@@ -102,9 +109,10 @@ export class LLMErrorFactory {
102
109
  return new InvalidRequestError(provider, defaultMessage);
103
110
  case 401:
104
111
  return new AuthenticationError(provider, defaultMessage);
105
- case 404:
112
+ case 404: {
106
113
  const model = responseBody?.error?.param || 'unknown';
107
114
  return new ModelNotFoundError(provider, model);
115
+ }
108
116
  case 408:
109
117
  return new TimeoutError(provider, defaultMessage);
110
118
  case 429:
@@ -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":"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"}
package/dist/factory.d.ts CHANGED
@@ -2,7 +2,10 @@
2
2
  * LLM Provider Factory
3
3
  * Creates and manages LLM provider instances with intelligent fallback logic
4
4
  */
5
- import type { LLMProvider, LLMRequest, LLMResponse, OpenAIConfig, AnthropicConfig, CloudflareConfig, CerebrasConfig, GroqConfig, FallbackRule } from './types';
5
+ import type { LLMProvider, LLMRequest, LLMResponse, AnalyzeImageInput, ClassifyOptions, ClassifyResult, OpenAIConfig, AnthropicConfig, CloudflareConfig, CerebrasConfig, GroqConfig, FallbackRule, ProviderMetrics, CircuitBreakerState, ProviderBalance, QuotaHook, ToolExecutor, ToolLoopOptions } from './types';
6
+ import type { Logger } from './utils/logger';
7
+ import type { ObservabilityHooks } from './utils/hooks';
8
+ import type { ProviderCostBreakdownEntry } from './utils/cost-tracker';
6
9
  import type { CreditLedger } from './utils/credit-ledger';
7
10
  export interface ProviderFactoryConfig {
8
11
  openai?: OpenAIConfig;
@@ -16,12 +19,37 @@ export interface ProviderFactoryConfig {
16
19
  enableCircuitBreaker?: boolean;
17
20
  enableRetries?: boolean;
18
21
  ledger?: CreditLedger;
22
+ quotaHook?: QuotaHook;
23
+ quotaFailPolicy?: 'closed' | 'open';
24
+ defaultVisionModel?: string;
25
+ logger?: Logger;
26
+ hooks?: ObservabilityHooks;
27
+ }
28
+ export interface CostAnalytics {
29
+ breakdown?: Record<string, ProviderCostBreakdownEntry>;
30
+ total?: number;
31
+ recommendations?: string[];
32
+ message?: string;
33
+ }
34
+ export interface ProviderHealthEntry {
35
+ healthy: boolean;
36
+ metrics?: ProviderMetrics;
37
+ circuitBreaker?: CircuitBreakerState | null;
38
+ models?: string[];
39
+ capabilities?: {
40
+ streaming: boolean;
41
+ tools: boolean;
42
+ batching: boolean;
43
+ };
44
+ error?: string;
19
45
  }
20
46
  export declare class LLMProviderFactory {
21
47
  private providers;
22
48
  private config;
23
49
  private costTracker;
24
50
  private fallbackRules;
51
+ private logger;
52
+ private hooks;
25
53
  constructor(config: ProviderFactoryConfig);
26
54
  /**
27
55
  * Initialize all configured providers
@@ -31,6 +59,11 @@ export declare class LLMProviderFactory {
31
59
  * Generate response with intelligent provider selection and fallback
32
60
  */
33
61
  generateResponse(request: LLMRequest): Promise<LLMResponse>;
62
+ generateResponseStream(request: LLMRequest): Promise<ReadableStream<string>>;
63
+ generateResponseWithTools(request: LLMRequest, toolExecutor: ToolExecutor, opts?: ToolLoopOptions): Promise<LLMResponse>;
64
+ classify<T = unknown>(input: string | LLMRequest, options?: ClassifyOptions<T>): Promise<ClassifyResult<T>>;
65
+ analyzeImage(input: AnalyzeImageInput): Promise<LLMResponse>;
66
+ getProviderBalance(provider?: string): Promise<ProviderBalance | Record<string, ProviderBalance>>;
34
67
  /**
35
68
  * Build provider chain based on request and configuration
36
69
  */
@@ -47,6 +80,10 @@ export declare class LLMProviderFactory {
47
80
  * Check if we should fallback to another provider
48
81
  */
49
82
  private shouldFallback;
83
+ /**
84
+ * Get fallback routing decision for an error.
85
+ */
86
+ private getFallbackDecision;
50
87
  /**
51
88
  * Evaluate a fallback rule against an error
52
89
  */
@@ -66,23 +103,44 @@ export declare class LLMProviderFactory {
66
103
  /**
67
104
  * Get provider health status
68
105
  */
69
- getProviderHealth(): Promise<Record<string, any>>;
106
+ getProviderHealth(): Promise<Record<string, ProviderHealthEntry>>;
70
107
  /**
71
108
  * Get cost analytics
72
109
  */
73
- getCostAnalytics(): any;
110
+ getCostAnalytics(): CostAnalytics;
74
111
  /**
75
112
  * Get cost optimization recommendations
76
113
  */
77
114
  private getCostRecommendations;
78
115
  /**
79
- * Reset all provider metrics and circuit breakers
116
+ * Get latency histogram data for all providers
117
+ */
118
+ getLatencyHistogram(): Record<string, import('./utils/latency-histogram').LatencySummary>;
119
+ /**
120
+ * Get currently exhausted providers
121
+ */
122
+ getExhaustedProviders(): string[];
123
+ /**
124
+ * Reset all provider metrics, circuit breakers, exhaustion, and histograms
80
125
  */
81
126
  reset(): void;
82
127
  /**
83
128
  * Update factory configuration
84
129
  */
85
130
  updateConfig(config: Partial<ProviderFactoryConfig>): void;
131
+ private openStreamWithFirstChunk;
132
+ private buildFactoryStream;
133
+ private checkQuota;
134
+ private recordQuota;
135
+ private recordQuotaInput;
136
+ private parseJsonResponse;
137
+ private getDefaultVisionModel;
138
+ private providerSupportsVision;
139
+ private getSingleProviderBalance;
140
+ private getLedgerBalance;
141
+ private isLedgerLimited;
142
+ private requestForProvider;
143
+ private applyFallbackDecision;
86
144
  }
87
145
  /**
88
146
  * Create a provider factory with common configurations
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EAEX,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,YAAY,EAEb,MAAM,SAAS,CAAC;AAQjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAU1D,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACvF,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAiB;gBAE1B,MAAM,EAAE,qBAAqB;IAQzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuE3B;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAkDjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIlD;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAiCvD;;OAEG;IACH,gBAAgB,IAAI,GAAG;IAYvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI;CAa3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CAE1F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CAa5F"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}