@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/errors.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Error Classes
|
|
3
|
+
* Structured error handling for all LLM providers
|
|
4
|
+
*/
|
|
5
|
+
export class LLMProviderError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
provider;
|
|
8
|
+
retryable;
|
|
9
|
+
statusCode;
|
|
10
|
+
rateLimited;
|
|
11
|
+
quotaExceeded;
|
|
12
|
+
constructor(message, code, provider, retryable = false, statusCode) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'LLMProviderError';
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.provider = provider;
|
|
17
|
+
this.retryable = retryable;
|
|
18
|
+
this.statusCode = statusCode;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class RateLimitError extends LLMProviderError {
|
|
22
|
+
constructor(provider, message = 'Rate limit exceeded') {
|
|
23
|
+
super(message, 'RATE_LIMIT', provider, true, 429);
|
|
24
|
+
this.rateLimited = true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class QuotaExceededError extends LLMProviderError {
|
|
28
|
+
constructor(provider, message = 'Quota exceeded') {
|
|
29
|
+
super(message, 'QUOTA_EXCEEDED', provider, false, 429);
|
|
30
|
+
this.quotaExceeded = true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class AuthenticationError extends LLMProviderError {
|
|
34
|
+
constructor(provider, message = 'Authentication failed') {
|
|
35
|
+
super(message, 'AUTHENTICATION_ERROR', provider, false, 401);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class InvalidRequestError extends LLMProviderError {
|
|
39
|
+
constructor(provider, message = 'Invalid request') {
|
|
40
|
+
super(message, 'INVALID_REQUEST', provider, false, 400);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class ModelNotFoundError extends LLMProviderError {
|
|
44
|
+
constructor(provider, model) {
|
|
45
|
+
super(`Model '${model}' not found`, 'MODEL_NOT_FOUND', provider, false, 404);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class TimeoutError extends LLMProviderError {
|
|
49
|
+
constructor(provider, message = 'Request timeout') {
|
|
50
|
+
super(message, 'TIMEOUT', provider, true, 408);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export class NetworkError extends LLMProviderError {
|
|
54
|
+
constructor(provider, message = 'Network error') {
|
|
55
|
+
super(message, 'NETWORK_ERROR', provider, true, 503);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class ServerError extends LLMProviderError {
|
|
59
|
+
constructor(provider, message = 'Internal server error', statusCode = 500) {
|
|
60
|
+
super(message, 'SERVER_ERROR', provider, true, statusCode);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export class ContentFilterError extends LLMProviderError {
|
|
64
|
+
constructor(provider, message = 'Content filtered') {
|
|
65
|
+
super(message, 'CONTENT_FILTER', provider, false, 400);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class TokenLimitError extends LLMProviderError {
|
|
69
|
+
constructor(provider, message = 'Token limit exceeded') {
|
|
70
|
+
super(message, 'TOKEN_LIMIT', provider, false, 400);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class ConfigurationError extends LLMProviderError {
|
|
74
|
+
constructor(provider, message) {
|
|
75
|
+
super(message, 'CONFIGURATION_ERROR', provider, false);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class CircuitBreakerOpenError extends LLMProviderError {
|
|
79
|
+
retryAfterSec;
|
|
80
|
+
consecutiveFailures;
|
|
81
|
+
constructor(provider, retryAfterSec = 0, consecutiveFailures = 0) {
|
|
82
|
+
const retryHint = retryAfterSec > 0 ? ` Retry after ${retryAfterSec}s.` : '';
|
|
83
|
+
super(`Circuit breaker rejected request for provider: ${provider}.${retryHint}`, 'CIRCUIT_BREAKER_OPEN', provider, true);
|
|
84
|
+
this.retryAfterSec = retryAfterSec;
|
|
85
|
+
this.consecutiveFailures = consecutiveFailures;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Error factory for creating provider-specific errors from HTTP responses
|
|
90
|
+
*/
|
|
91
|
+
export class LLMErrorFactory {
|
|
92
|
+
static fromHttpResponse(provider, statusCode, responseBody, message) {
|
|
93
|
+
const defaultMessage = message || responseBody?.message || responseBody?.error?.message || 'Unknown error';
|
|
94
|
+
switch (statusCode) {
|
|
95
|
+
case 400:
|
|
96
|
+
if (responseBody?.error?.code === 'content_filter') {
|
|
97
|
+
return new ContentFilterError(provider, defaultMessage);
|
|
98
|
+
}
|
|
99
|
+
if (responseBody?.error?.code === 'token_limit_exceeded') {
|
|
100
|
+
return new TokenLimitError(provider, defaultMessage);
|
|
101
|
+
}
|
|
102
|
+
return new InvalidRequestError(provider, defaultMessage);
|
|
103
|
+
case 401:
|
|
104
|
+
return new AuthenticationError(provider, defaultMessage);
|
|
105
|
+
case 404:
|
|
106
|
+
const model = responseBody?.error?.param || 'unknown';
|
|
107
|
+
return new ModelNotFoundError(provider, model);
|
|
108
|
+
case 408:
|
|
109
|
+
return new TimeoutError(provider, defaultMessage);
|
|
110
|
+
case 429:
|
|
111
|
+
if (responseBody?.error?.type === 'quota_exceeded') {
|
|
112
|
+
return new QuotaExceededError(provider, defaultMessage);
|
|
113
|
+
}
|
|
114
|
+
return new RateLimitError(provider, defaultMessage);
|
|
115
|
+
case 500:
|
|
116
|
+
case 502:
|
|
117
|
+
case 503:
|
|
118
|
+
case 504:
|
|
119
|
+
return new ServerError(provider, defaultMessage, statusCode);
|
|
120
|
+
default:
|
|
121
|
+
return new LLMProviderError(defaultMessage, 'UNKNOWN_ERROR', provider, statusCode >= 500, statusCode);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create error from fetch response
|
|
126
|
+
*/
|
|
127
|
+
static async fromFetchResponse(provider, response) {
|
|
128
|
+
let responseBody;
|
|
129
|
+
try {
|
|
130
|
+
const contentType = response.headers.get('content-type');
|
|
131
|
+
if (contentType?.includes('application/json')) {
|
|
132
|
+
responseBody = await response.json();
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
responseBody = { message: await response.text() };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
responseBody = { message: 'Failed to parse error response' };
|
|
140
|
+
}
|
|
141
|
+
return this.fromHttpResponse(provider, response.status, responseBody);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if error is retryable
|
|
145
|
+
*/
|
|
146
|
+
static isRetryable(error) {
|
|
147
|
+
if (error instanceof LLMProviderError) {
|
|
148
|
+
return error.retryable;
|
|
149
|
+
}
|
|
150
|
+
// Network errors are generally retryable
|
|
151
|
+
if (error.message.includes('fetch')) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if error indicates rate limiting
|
|
158
|
+
*/
|
|
159
|
+
static isRateLimited(error) {
|
|
160
|
+
return error instanceof RateLimitError;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check if error indicates quota exceeded
|
|
164
|
+
*/
|
|
165
|
+
static isQuotaExceeded(error) {
|
|
166
|
+
return error instanceof QuotaExceededError;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get retry delay from rate limit error
|
|
170
|
+
*/
|
|
171
|
+
static getRetryDelay(error) {
|
|
172
|
+
if (error instanceof RateLimitError) {
|
|
173
|
+
// Default exponential backoff starting at 1 second
|
|
174
|
+
return 1000;
|
|
175
|
+
}
|
|
176
|
+
if (error instanceof ServerError) {
|
|
177
|
+
// Server errors get shorter delays
|
|
178
|
+
return 500;
|
|
179
|
+
}
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Factory
|
|
3
|
+
* Creates and manages LLM provider instances with intelligent fallback logic
|
|
4
|
+
*/
|
|
5
|
+
import type { LLMProvider, LLMRequest, LLMResponse, OpenAIConfig, AnthropicConfig, CloudflareConfig, CerebrasConfig, GroqConfig, FallbackRule } from './types';
|
|
6
|
+
import type { CreditLedger } from './utils/credit-ledger';
|
|
7
|
+
export interface ProviderFactoryConfig {
|
|
8
|
+
openai?: OpenAIConfig;
|
|
9
|
+
anthropic?: AnthropicConfig;
|
|
10
|
+
cloudflare?: CloudflareConfig;
|
|
11
|
+
cerebras?: CerebrasConfig;
|
|
12
|
+
groq?: GroqConfig;
|
|
13
|
+
defaultProvider?: 'openai' | 'anthropic' | 'cloudflare' | 'cerebras' | 'groq' | 'auto';
|
|
14
|
+
fallbackRules?: FallbackRule[];
|
|
15
|
+
costOptimization?: boolean;
|
|
16
|
+
enableCircuitBreaker?: boolean;
|
|
17
|
+
enableRetries?: boolean;
|
|
18
|
+
ledger?: CreditLedger;
|
|
19
|
+
}
|
|
20
|
+
export declare class LLMProviderFactory {
|
|
21
|
+
private providers;
|
|
22
|
+
private config;
|
|
23
|
+
private costTracker;
|
|
24
|
+
private fallbackRules;
|
|
25
|
+
constructor(config: ProviderFactoryConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Initialize all configured providers
|
|
28
|
+
*/
|
|
29
|
+
private initializeProviders;
|
|
30
|
+
/**
|
|
31
|
+
* Generate response with intelligent provider selection and fallback
|
|
32
|
+
*/
|
|
33
|
+
generateResponse(request: LLMRequest): Promise<LLMResponse>;
|
|
34
|
+
/**
|
|
35
|
+
* Build provider chain based on request and configuration
|
|
36
|
+
*/
|
|
37
|
+
private buildProviderChain;
|
|
38
|
+
/**
|
|
39
|
+
* Get prioritized list of providers based on cost optimization and capabilities
|
|
40
|
+
*/
|
|
41
|
+
private getPrioritizedProviders;
|
|
42
|
+
/**
|
|
43
|
+
* Get appropriate provider for a specific model
|
|
44
|
+
*/
|
|
45
|
+
private getProviderForModel;
|
|
46
|
+
/**
|
|
47
|
+
* Check if we should fallback to another provider
|
|
48
|
+
*/
|
|
49
|
+
private shouldFallback;
|
|
50
|
+
/**
|
|
51
|
+
* Evaluate a fallback rule against an error
|
|
52
|
+
*/
|
|
53
|
+
private evaluateFallbackRule;
|
|
54
|
+
/**
|
|
55
|
+
* Get default fallback rules
|
|
56
|
+
*/
|
|
57
|
+
private getDefaultFallbackRules;
|
|
58
|
+
/**
|
|
59
|
+
* Get provider instance by name
|
|
60
|
+
*/
|
|
61
|
+
getProvider(name: string): LLMProvider | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Get all available providers
|
|
64
|
+
*/
|
|
65
|
+
getAvailableProviders(): string[];
|
|
66
|
+
/**
|
|
67
|
+
* Get provider health status
|
|
68
|
+
*/
|
|
69
|
+
getProviderHealth(): Promise<Record<string, any>>;
|
|
70
|
+
/**
|
|
71
|
+
* Get cost analytics
|
|
72
|
+
*/
|
|
73
|
+
getCostAnalytics(): any;
|
|
74
|
+
/**
|
|
75
|
+
* Get cost optimization recommendations
|
|
76
|
+
*/
|
|
77
|
+
private getCostRecommendations;
|
|
78
|
+
/**
|
|
79
|
+
* Reset all provider metrics and circuit breakers
|
|
80
|
+
*/
|
|
81
|
+
reset(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Update factory configuration
|
|
84
|
+
*/
|
|
85
|
+
updateConfig(config: Partial<ProviderFactoryConfig>): void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a provider factory with common configurations
|
|
89
|
+
*/
|
|
90
|
+
export declare function createLLMProviderFactory(config: ProviderFactoryConfig): LLMProviderFactory;
|
|
91
|
+
/**
|
|
92
|
+
* Create a cost-optimized provider factory
|
|
93
|
+
*/
|
|
94
|
+
export declare function createCostOptimizedFactory(config: ProviderFactoryConfig): LLMProviderFactory;
|
|
95
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +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"}
|