@stackbilt/llm-providers 1.0.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 +201 -0
- package/README.md +261 -0
- package/dist/errors.d.ts +79 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +183 -0
- package/dist/errors.js.map +1 -0
- package/dist/factory.d.ts +95 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +418 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +137 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +263 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +38 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +378 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +107 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +230 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/cerebras.d.ts +30 -0
- package/dist/providers/cerebras.d.ts.map +1 -0
- package/dist/providers/cerebras.js +292 -0
- package/dist/providers/cerebras.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +47 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +544 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/groq.d.ts +30 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +222 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/openai.d.ts +36 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +331 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/types.d.ts +238 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +111 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +365 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/cost-tracker.d.ts +130 -0
- package/dist/utils/cost-tracker.d.ts.map +1 -0
- package/dist/utils/cost-tracker.js +272 -0
- package/dist/utils/cost-tracker.js.map +1 -0
- package/dist/utils/credit-ledger.d.ts +161 -0
- package/dist/utils/credit-ledger.d.ts.map +1 -0
- package/dist/utils/credit-ledger.js +463 -0
- package/dist/utils/credit-ledger.js.map +1 -0
- package/dist/utils/retry.d.ts +46 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +125 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +57 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Types
|
|
3
|
+
* Unified types for all LLM providers with v2 architecture support
|
|
4
|
+
*/
|
|
5
|
+
export interface LLMMessage {
|
|
6
|
+
role: 'user' | 'assistant' | 'system';
|
|
7
|
+
content: string;
|
|
8
|
+
timestamp?: string;
|
|
9
|
+
toolCalls?: ToolCall[];
|
|
10
|
+
toolResults?: ToolResult[];
|
|
11
|
+
}
|
|
12
|
+
export interface ToolCall {
|
|
13
|
+
id: string;
|
|
14
|
+
type: 'function';
|
|
15
|
+
function: {
|
|
16
|
+
name: string;
|
|
17
|
+
arguments: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface ToolResult {
|
|
21
|
+
id: string;
|
|
22
|
+
output: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface LLMRequest {
|
|
26
|
+
messages: LLMMessage[];
|
|
27
|
+
model?: string;
|
|
28
|
+
temperature?: number;
|
|
29
|
+
maxTokens?: number;
|
|
30
|
+
stream?: boolean;
|
|
31
|
+
systemPrompt?: string;
|
|
32
|
+
tools?: Tool[];
|
|
33
|
+
toolChoice?: 'auto' | 'none' | {
|
|
34
|
+
type: 'function';
|
|
35
|
+
function: {
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
response_format?: {
|
|
40
|
+
type: 'json_object' | 'text';
|
|
41
|
+
};
|
|
42
|
+
tenantId?: string;
|
|
43
|
+
requestId?: string;
|
|
44
|
+
metadata?: Record<string, any>;
|
|
45
|
+
}
|
|
46
|
+
export interface Tool {
|
|
47
|
+
type: 'function';
|
|
48
|
+
function: {
|
|
49
|
+
name: string;
|
|
50
|
+
description: string;
|
|
51
|
+
parameters: {
|
|
52
|
+
type: 'object';
|
|
53
|
+
properties: Record<string, any>;
|
|
54
|
+
required?: string[];
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface LLMResponse {
|
|
59
|
+
id?: string;
|
|
60
|
+
message: string;
|
|
61
|
+
content?: string;
|
|
62
|
+
usage: TokenUsage;
|
|
63
|
+
model: string;
|
|
64
|
+
provider: string;
|
|
65
|
+
responseTime: number;
|
|
66
|
+
finishReason?: 'stop' | 'length' | 'tool_calls' | 'content_filter';
|
|
67
|
+
toolCalls?: ToolCall[];
|
|
68
|
+
metadata?: Record<string, any>;
|
|
69
|
+
}
|
|
70
|
+
export interface TokenUsage {
|
|
71
|
+
inputTokens: number;
|
|
72
|
+
outputTokens: number;
|
|
73
|
+
totalTokens: number;
|
|
74
|
+
cost?: number;
|
|
75
|
+
}
|
|
76
|
+
export interface LLMProvider {
|
|
77
|
+
name: string;
|
|
78
|
+
models: string[];
|
|
79
|
+
supportsStreaming: boolean;
|
|
80
|
+
supportsTools: boolean;
|
|
81
|
+
supportsBatching: boolean;
|
|
82
|
+
generateResponse(request: LLMRequest): Promise<LLMResponse>;
|
|
83
|
+
validateConfig(): boolean;
|
|
84
|
+
getModels(): string[];
|
|
85
|
+
estimateCost(request: LLMRequest): number;
|
|
86
|
+
healthCheck(): Promise<boolean>;
|
|
87
|
+
getMetrics(): ProviderMetrics;
|
|
88
|
+
resetMetrics(): void;
|
|
89
|
+
}
|
|
90
|
+
export interface LLMConfig {
|
|
91
|
+
provider: 'openai' | 'anthropic' | 'cloudflare' | 'cerebras' | 'groq' | 'auto';
|
|
92
|
+
model: string;
|
|
93
|
+
temperature: number;
|
|
94
|
+
maxTokens: number;
|
|
95
|
+
apiKey?: string;
|
|
96
|
+
baseUrl?: string;
|
|
97
|
+
fallbackProvider?: 'openai' | 'anthropic' | 'cloudflare' | 'cerebras' | 'groq';
|
|
98
|
+
fallbackModel?: string;
|
|
99
|
+
timeout?: number;
|
|
100
|
+
retries?: number;
|
|
101
|
+
retryDelay?: number;
|
|
102
|
+
}
|
|
103
|
+
export interface ProviderConfig {
|
|
104
|
+
apiKey?: string;
|
|
105
|
+
baseUrl?: string;
|
|
106
|
+
timeout?: number;
|
|
107
|
+
maxRetries?: number;
|
|
108
|
+
retryDelay?: number;
|
|
109
|
+
rateLimitRpm?: number;
|
|
110
|
+
rateLimitRpd?: number;
|
|
111
|
+
organization?: string;
|
|
112
|
+
project?: string;
|
|
113
|
+
}
|
|
114
|
+
export interface OpenAIConfig extends ProviderConfig {
|
|
115
|
+
organization?: string;
|
|
116
|
+
project?: string;
|
|
117
|
+
}
|
|
118
|
+
export interface AnthropicConfig extends ProviderConfig {
|
|
119
|
+
version?: string;
|
|
120
|
+
}
|
|
121
|
+
export interface CloudflareConfig extends ProviderConfig {
|
|
122
|
+
accountId?: string;
|
|
123
|
+
ai?: Ai;
|
|
124
|
+
}
|
|
125
|
+
export interface CerebrasConfig extends ProviderConfig {
|
|
126
|
+
}
|
|
127
|
+
export interface GroqConfig extends ProviderConfig {
|
|
128
|
+
}
|
|
129
|
+
export interface LLMError extends Error {
|
|
130
|
+
code: string;
|
|
131
|
+
provider: string;
|
|
132
|
+
retryable: boolean;
|
|
133
|
+
statusCode?: number;
|
|
134
|
+
rateLimited?: boolean;
|
|
135
|
+
quotaExceeded?: boolean;
|
|
136
|
+
}
|
|
137
|
+
export interface CircuitBreakerConfig {
|
|
138
|
+
failureThreshold: number;
|
|
139
|
+
resetTimeout: number;
|
|
140
|
+
monitoringPeriod: number;
|
|
141
|
+
minRequests?: number;
|
|
142
|
+
degradationCurve?: number[];
|
|
143
|
+
}
|
|
144
|
+
export interface CircuitBreakerState {
|
|
145
|
+
state: 'CLOSED' | 'DEGRADED' | 'RECOVERING' | 'OPEN';
|
|
146
|
+
failures: number;
|
|
147
|
+
consecutiveFailures: number;
|
|
148
|
+
primaryTrafficPct: number;
|
|
149
|
+
totalFailures: number;
|
|
150
|
+
totalSuccesses: number;
|
|
151
|
+
totalRequests: number;
|
|
152
|
+
lastFailure?: number;
|
|
153
|
+
lastSuccess?: number;
|
|
154
|
+
lastRequest?: number;
|
|
155
|
+
nextAttempt?: number;
|
|
156
|
+
}
|
|
157
|
+
export interface RetryConfig {
|
|
158
|
+
maxRetries: number;
|
|
159
|
+
initialDelay: number;
|
|
160
|
+
maxDelay: number;
|
|
161
|
+
backoffMultiplier: number;
|
|
162
|
+
retryableErrors: string[];
|
|
163
|
+
}
|
|
164
|
+
export interface CostConfig {
|
|
165
|
+
inputTokenCost: number;
|
|
166
|
+
outputTokenCost: number;
|
|
167
|
+
maxMonthlyCost?: number;
|
|
168
|
+
alertThreshold?: number;
|
|
169
|
+
}
|
|
170
|
+
export interface ProviderMetrics {
|
|
171
|
+
requestCount: number;
|
|
172
|
+
successCount: number;
|
|
173
|
+
errorCount: number;
|
|
174
|
+
averageLatency: number;
|
|
175
|
+
totalCost: number;
|
|
176
|
+
rateLimitHits: number;
|
|
177
|
+
lastUsed: number;
|
|
178
|
+
}
|
|
179
|
+
export interface FallbackRule {
|
|
180
|
+
condition: 'error' | 'rate_limit' | 'cost' | 'latency';
|
|
181
|
+
threshold?: number;
|
|
182
|
+
fallbackProvider: string;
|
|
183
|
+
fallbackModel?: string;
|
|
184
|
+
}
|
|
185
|
+
export interface ModelCapabilities {
|
|
186
|
+
maxContextLength: number;
|
|
187
|
+
supportsStreaming: boolean;
|
|
188
|
+
supportsTools: boolean;
|
|
189
|
+
toolCalling?: boolean;
|
|
190
|
+
supportsBatching: boolean;
|
|
191
|
+
inputTokenCost: number;
|
|
192
|
+
outputTokenCost: number;
|
|
193
|
+
description: string;
|
|
194
|
+
}
|
|
195
|
+
export interface ProviderCapabilities {
|
|
196
|
+
models: Record<string, ModelCapabilities>;
|
|
197
|
+
supportsStreaming: boolean;
|
|
198
|
+
supportsTools: boolean;
|
|
199
|
+
supportsBatching: boolean;
|
|
200
|
+
maxBatchSize?: number;
|
|
201
|
+
rateLimits: {
|
|
202
|
+
requestsPerMinute: number;
|
|
203
|
+
requestsPerDay: number;
|
|
204
|
+
tokensPerMinute: number;
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export interface StreamChunk {
|
|
208
|
+
id: string;
|
|
209
|
+
content: string;
|
|
210
|
+
delta: string;
|
|
211
|
+
finishReason?: 'stop' | 'length' | 'tool_calls' | 'content_filter';
|
|
212
|
+
usage?: Partial<TokenUsage>;
|
|
213
|
+
}
|
|
214
|
+
export interface StreamResponse {
|
|
215
|
+
stream: ReadableStream<StreamChunk>;
|
|
216
|
+
controller: ReadableStreamDefaultController<StreamChunk>;
|
|
217
|
+
}
|
|
218
|
+
export interface BatchRequest {
|
|
219
|
+
id: string;
|
|
220
|
+
request: LLMRequest;
|
|
221
|
+
priority?: 'low' | 'normal' | 'high';
|
|
222
|
+
}
|
|
223
|
+
export interface BatchResponse {
|
|
224
|
+
id: string;
|
|
225
|
+
response?: LLMResponse;
|
|
226
|
+
error?: LLMError;
|
|
227
|
+
processingTime: number;
|
|
228
|
+
}
|
|
229
|
+
export interface BatchJob {
|
|
230
|
+
id: string;
|
|
231
|
+
requests: BatchRequest[];
|
|
232
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
233
|
+
progress: number;
|
|
234
|
+
createdAt: number;
|
|
235
|
+
completedAt?: number;
|
|
236
|
+
results: BatchResponse[];
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graduated Circuit Breaker
|
|
3
|
+
* Routes traffic away from failing providers with confidence-weighted degradation.
|
|
4
|
+
*/
|
|
5
|
+
import type { CircuitBreakerConfig, CircuitBreakerState } from '../types';
|
|
6
|
+
export declare class CircuitBreaker {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
private readonly config;
|
|
9
|
+
private consecutiveFailures;
|
|
10
|
+
private totalFailures;
|
|
11
|
+
private totalSuccesses;
|
|
12
|
+
private totalRequests;
|
|
13
|
+
private lastFailureAt?;
|
|
14
|
+
private lastSuccessAt?;
|
|
15
|
+
private lastRequestAt?;
|
|
16
|
+
private lastDecayAt;
|
|
17
|
+
private windowStart;
|
|
18
|
+
constructor(name: string, config?: Partial<CircuitBreakerConfig>);
|
|
19
|
+
/**
|
|
20
|
+
* Backwards-compatible execute alias.
|
|
21
|
+
*/
|
|
22
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Execute the primary operation if the breaker allows traffic through.
|
|
25
|
+
* Rejected requests throw CircuitBreakerOpenError so callers can route elsewhere.
|
|
26
|
+
*/
|
|
27
|
+
exec<T>(fn: () => Promise<T>): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* Execute with graduated fallback. Degraded traffic is routed to the fallback
|
|
30
|
+
* probabilistically, and primary failures immediately fail over.
|
|
31
|
+
*/
|
|
32
|
+
execWithFallback<T>(primary: () => Promise<T>, fallback: () => Promise<T>): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Current percentage of traffic that should be routed to the primary provider.
|
|
35
|
+
*/
|
|
36
|
+
primaryTrafficPct(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Get current state and breaker statistics.
|
|
39
|
+
*/
|
|
40
|
+
getState(): CircuitBreakerState;
|
|
41
|
+
/**
|
|
42
|
+
* Alias for stats-oriented call sites.
|
|
43
|
+
*/
|
|
44
|
+
getStats(): CircuitBreakerState;
|
|
45
|
+
/**
|
|
46
|
+
* Get current configuration.
|
|
47
|
+
*/
|
|
48
|
+
getConfig(): CircuitBreakerConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Manual reset for testing and operator intervention.
|
|
51
|
+
*/
|
|
52
|
+
reset(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Force the breaker into the fully open state.
|
|
55
|
+
*/
|
|
56
|
+
forceOpen(): void;
|
|
57
|
+
isOpen(): boolean;
|
|
58
|
+
isClosed(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Deprecated alias retained for compatibility with the prior state machine.
|
|
61
|
+
*/
|
|
62
|
+
isHalfOpen(): boolean;
|
|
63
|
+
isDegraded(): boolean;
|
|
64
|
+
isRecovering(): boolean;
|
|
65
|
+
getHealth(): {
|
|
66
|
+
state: CircuitBreakerState['state'];
|
|
67
|
+
failures: number;
|
|
68
|
+
consecutiveFailures: number;
|
|
69
|
+
failureThreshold: number;
|
|
70
|
+
primaryTrafficPct: number;
|
|
71
|
+
healthy: boolean;
|
|
72
|
+
lastFailure?: number;
|
|
73
|
+
lastSuccess?: number;
|
|
74
|
+
nextAttempt?: number;
|
|
75
|
+
totalFailures: number;
|
|
76
|
+
totalSuccesses: number;
|
|
77
|
+
totalRequests: number;
|
|
78
|
+
};
|
|
79
|
+
private snapshot;
|
|
80
|
+
private currentState;
|
|
81
|
+
private currentPrimaryTrafficPct;
|
|
82
|
+
private buildOpenError;
|
|
83
|
+
private retryAfterSec;
|
|
84
|
+
private retryAt;
|
|
85
|
+
private syncState;
|
|
86
|
+
private markTraffic;
|
|
87
|
+
private onSuccess;
|
|
88
|
+
private onFailure;
|
|
89
|
+
private maybeDecayFailures;
|
|
90
|
+
private maybeRotateWindow;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Circuit breaker manager for multiple providers.
|
|
94
|
+
*/
|
|
95
|
+
export declare class CircuitBreakerManager {
|
|
96
|
+
private breakers;
|
|
97
|
+
private defaultConfig;
|
|
98
|
+
constructor(defaultConfig?: Partial<CircuitBreakerConfig>);
|
|
99
|
+
getBreaker(name: string, config?: Partial<CircuitBreakerConfig>): CircuitBreaker;
|
|
100
|
+
execute<T>(name: string, fn: () => Promise<T>, config?: Partial<CircuitBreakerConfig>): Promise<T>;
|
|
101
|
+
execWithFallback<T>(name: string, primary: () => Promise<T>, fallback: () => Promise<T>, config?: Partial<CircuitBreakerConfig>): Promise<T>;
|
|
102
|
+
getAllStates(): Record<string, CircuitBreakerState>;
|
|
103
|
+
getHealthStatus(): Record<string, ReturnType<CircuitBreaker['getHealth']>>;
|
|
104
|
+
resetAll(): void;
|
|
105
|
+
reset(name: string): void;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Default circuit breaker manager instance.
|
|
109
|
+
*/
|
|
110
|
+
export declare const defaultCircuitBreakerManager: CircuitBreakerManager;
|
|
111
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/utils/circuit-breaker.ts"],"names":[],"mappings":"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"}
|