@stackbilt/llm-providers 1.1.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.
- package/LICENSE +0 -0
- package/README.md +112 -85
- package/dist/errors.d.ts +18 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +12 -4
- package/dist/errors.js.map +1 -1
- package/dist/factory.d.ts +62 -4
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +630 -92
- package/dist/factory.js.map +1 -1
- package/dist/image/index.d.ts +0 -0
- package/dist/image/index.d.ts.map +0 -0
- package/dist/image/index.js +0 -0
- package/dist/image/index.js.map +0 -0
- package/dist/image/provider.d.ts +0 -0
- package/dist/image/provider.d.ts.map +0 -0
- package/dist/image/provider.js +0 -0
- package/dist/image/provider.js.map +0 -0
- package/dist/image/types.d.ts +0 -0
- package/dist/image/types.d.ts.map +0 -0
- package/dist/image/types.js +0 -0
- package/dist/image/types.js.map +0 -0
- package/dist/index.d.ts +43 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -14
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +5 -2
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +118 -43
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/base.d.ts +18 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +107 -5
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/cerebras.d.ts +0 -0
- package/dist/providers/cerebras.d.ts.map +1 -1
- package/dist/providers/cerebras.js +21 -13
- package/dist/providers/cerebras.js.map +1 -1
- package/dist/providers/cloudflare.d.ts +0 -0
- package/dist/providers/cloudflare.d.ts.map +1 -1
- package/dist/providers/cloudflare.js +12 -8
- package/dist/providers/cloudflare.js.map +1 -1
- package/dist/providers/groq.d.ts +2 -1
- package/dist/providers/groq.d.ts.map +1 -1
- package/dist/providers/groq.js +95 -15
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +56 -24
- package/dist/providers/openai.js.map +1 -1
- package/dist/types.d.ts +114 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/dist/utils/circuit-breaker.d.ts +5 -2
- package/dist/utils/circuit-breaker.d.ts.map +1 -1
- package/dist/utils/circuit-breaker.js +18 -13
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/cost-tracker.d.ts +9 -2
- package/dist/utils/cost-tracker.d.ts.map +1 -1
- package/dist/utils/cost-tracker.js +20 -9
- package/dist/utils/cost-tracker.js.map +1 -1
- package/dist/utils/credit-ledger.d.ts +3 -0
- package/dist/utils/credit-ledger.d.ts.map +1 -1
- package/dist/utils/credit-ledger.js +5 -2
- package/dist/utils/credit-ledger.js.map +1 -1
- package/dist/utils/exhaustion.d.ts +38 -0
- package/dist/utils/exhaustion.d.ts.map +1 -0
- package/dist/utils/exhaustion.js +74 -0
- package/dist/utils/exhaustion.js.map +1 -0
- package/dist/utils/hooks.d.ts +113 -0
- package/dist/utils/hooks.d.ts.map +1 -0
- package/dist/utils/hooks.js +44 -0
- package/dist/utils/hooks.js.map +1 -0
- package/dist/utils/latency-histogram.d.ts +38 -0
- package/dist/utils/latency-histogram.d.ts.map +1 -0
- package/dist/utils/latency-histogram.js +81 -0
- package/dist/utils/latency-histogram.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +4 -2
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +12 -8
- package/dist/utils/retry.js.map +1 -1
- package/package.json +1 -1
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,
|
|
8
|
-
- **
|
|
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
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
### OpenAI
|
|
52
|
+
### Auto-Discovery from Environment
|
|
52
53
|
|
|
53
54
|
```typescript
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
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** |
|
|
94
|
-
| **
|
|
95
|
-
| **
|
|
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
|
|
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
|
|
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 {
|
|
139
|
+
import { CreditLedger, LLMProviders } from '@stackbilt/llm-providers';
|
|
118
140
|
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
202
|
-
MODELS.
|
|
203
|
-
MODELS.
|
|
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
|
|
234
|
+
| `OpenAIProvider` | OpenAI GPT models (streaming, tools) |
|
|
218
235
|
| `AnthropicProvider` | Anthropic Claude models (streaming, tools) |
|
|
219
|
-
| `CloudflareProvider` | Cloudflare Workers AI (streaming,
|
|
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` |
|
|
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,
|
|
237
|
-
| `LLMResponse` | Unified response: message, usage, provider,
|
|
238
|
-
| `
|
|
239
|
-
| `ProviderFactoryConfig` | Factory
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
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
|
-
| `
|
|
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?:
|
|
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
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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:
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,IAAI,CAAS;IACb,QAAQ,CAAS;IACjB,SAAS,CAAU;IACnB,UAAU,CAAU;IACpB,WAAW,CAAW;IACtB,aAAa,CAAW;IAExB,YACE,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,YAAqB,KAAK,EAC1B,UAAmB;QAEnB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,QAAgB,EAAE,UAAkB,qBAAqB;QACnE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,YAAY,QAAgB,EAAE,UAAkB,gBAAgB;QAC9D,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IACvD,YAAY,QAAgB,EAAE,UAAkB,uBAAuB;QACrE,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IACvD,YAAY,QAAgB,EAAE,UAAkB,iBAAiB;QAC/D,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,YAAY,QAAgB,EAAE,KAAa;QACzC,KAAK,CAAC,UAAU,KAAK,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/E,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAChD,YAAY,QAAgB,EAAE,UAAkB,iBAAiB;QAC/D,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAChD,YAAY,QAAgB,EAAE,UAAkB,eAAe;QAC7D,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAC/C,YAAY,QAAgB,EAAE,UAAkB,uBAAuB,EAAE,aAAqB,GAAG;QAC/F,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,YAAY,QAAgB,EAAE,UAAkB,kBAAkB;QAChE,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IACnD,YAAY,QAAgB,EAAE,UAAkB,sBAAsB;QACpE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAC3D,aAAa,CAAS;IACtB,mBAAmB,CAAS;IAE5B,YAAY,QAAgB,EAAE,gBAAwB,CAAC,EAAE,sBAA8B,CAAC;QACtF,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,KAAK,CACH,kDAAkD,QAAQ,IAAI,SAAS,EAAE,EACzE,sBAAsB,EACtB,QAAQ,EACR,IAAI,CACL,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;CACF;AAED
|
|
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,
|
|
106
|
+
getProviderHealth(): Promise<Record<string, ProviderHealthEntry>>;
|
|
70
107
|
/**
|
|
71
108
|
* Get cost analytics
|
|
72
109
|
*/
|
|
73
|
-
getCostAnalytics():
|
|
110
|
+
getCostAnalytics(): CostAnalytics;
|
|
74
111
|
/**
|
|
75
112
|
* Get cost optimization recommendations
|
|
76
113
|
*/
|
|
77
114
|
private getCostRecommendations;
|
|
78
115
|
/**
|
|
79
|
-
*
|
|
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
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|