@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.
Files changed (59) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +261 -0
  3. package/dist/errors.d.ts +79 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +183 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/factory.d.ts +95 -0
  8. package/dist/factory.d.ts.map +1 -0
  9. package/dist/factory.js +418 -0
  10. package/dist/factory.js.map +1 -0
  11. package/dist/index.d.ts +137 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +263 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/providers/anthropic.d.ts +38 -0
  16. package/dist/providers/anthropic.d.ts.map +1 -0
  17. package/dist/providers/anthropic.js +378 -0
  18. package/dist/providers/anthropic.js.map +1 -0
  19. package/dist/providers/base.d.ts +107 -0
  20. package/dist/providers/base.d.ts.map +1 -0
  21. package/dist/providers/base.js +230 -0
  22. package/dist/providers/base.js.map +1 -0
  23. package/dist/providers/cerebras.d.ts +30 -0
  24. package/dist/providers/cerebras.d.ts.map +1 -0
  25. package/dist/providers/cerebras.js +292 -0
  26. package/dist/providers/cerebras.js.map +1 -0
  27. package/dist/providers/cloudflare.d.ts +47 -0
  28. package/dist/providers/cloudflare.d.ts.map +1 -0
  29. package/dist/providers/cloudflare.js +544 -0
  30. package/dist/providers/cloudflare.js.map +1 -0
  31. package/dist/providers/groq.d.ts +30 -0
  32. package/dist/providers/groq.d.ts.map +1 -0
  33. package/dist/providers/groq.js +222 -0
  34. package/dist/providers/groq.js.map +1 -0
  35. package/dist/providers/openai.d.ts +36 -0
  36. package/dist/providers/openai.d.ts.map +1 -0
  37. package/dist/providers/openai.js +331 -0
  38. package/dist/providers/openai.js.map +1 -0
  39. package/dist/types.d.ts +238 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/utils/circuit-breaker.d.ts +111 -0
  44. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  45. package/dist/utils/circuit-breaker.js +365 -0
  46. package/dist/utils/circuit-breaker.js.map +1 -0
  47. package/dist/utils/cost-tracker.d.ts +130 -0
  48. package/dist/utils/cost-tracker.d.ts.map +1 -0
  49. package/dist/utils/cost-tracker.js +272 -0
  50. package/dist/utils/cost-tracker.js.map +1 -0
  51. package/dist/utils/credit-ledger.d.ts +161 -0
  52. package/dist/utils/credit-ledger.d.ts.map +1 -0
  53. package/dist/utils/credit-ledger.js +463 -0
  54. package/dist/utils/credit-ledger.js.map +1 -0
  55. package/dist/utils/retry.d.ts +46 -0
  56. package/dist/utils/retry.d.ts.map +1 -0
  57. package/dist/utils/retry.js +125 -0
  58. package/dist/utils/retry.js.map +1 -0
  59. package/package.json +57 -0
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Base Provider
3
+ * Abstract base class for all LLM providers with common functionality
4
+ */
5
+ import { RetryManager } from '../utils/retry';
6
+ import { CircuitBreaker, defaultCircuitBreakerManager } from '../utils/circuit-breaker';
7
+ import { CostTracker } from '../utils/cost-tracker';
8
+ import { ConfigurationError, TimeoutError } from '../errors';
9
+ export class BaseProvider {
10
+ config;
11
+ retryManager;
12
+ circuitBreaker;
13
+ costTracker;
14
+ metrics;
15
+ constructor(config = {}) {
16
+ this.config = {
17
+ timeout: config.timeout ?? 30000,
18
+ maxRetries: config.maxRetries ?? 3,
19
+ retryDelay: config.retryDelay ?? 1000,
20
+ ...config
21
+ };
22
+ this.retryManager = new RetryManager({
23
+ maxRetries: this.config.maxRetries,
24
+ initialDelay: this.config.retryDelay
25
+ });
26
+ // Note: this.name is set by the subclass after super() returns.
27
+ // The circuit breaker name is updated lazily on first use.
28
+ this.circuitBreaker = new CircuitBreaker('pending');
29
+ this.costTracker = new CostTracker();
30
+ this.metrics = {
31
+ requestCount: 0,
32
+ successCount: 0,
33
+ errorCount: 0,
34
+ averageLatency: 0,
35
+ totalCost: 0,
36
+ rateLimitHits: 0,
37
+ lastUsed: 0
38
+ };
39
+ }
40
+ /**
41
+ * Common HTTP request method with timeout and error handling
42
+ */
43
+ async makeRequest(url, options = {}, timeoutMs) {
44
+ const timeout = timeoutMs || this.config.timeout || 30000;
45
+ const controller = new AbortController();
46
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
47
+ try {
48
+ const response = await fetch(url, {
49
+ ...options,
50
+ signal: controller.signal,
51
+ headers: {
52
+ 'Content-Type': 'application/json',
53
+ 'User-Agent': 'ai-platform/llm-providers',
54
+ ...options.headers
55
+ }
56
+ });
57
+ clearTimeout(timeoutId);
58
+ return response;
59
+ }
60
+ catch (error) {
61
+ clearTimeout(timeoutId);
62
+ if (error instanceof Error && error.name === 'AbortError') {
63
+ throw new TimeoutError(this.name, `Request timeout after ${timeout}ms`);
64
+ }
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * Execute request with circuit breaker and retry logic
70
+ */
71
+ async executeWithResiliency(operation) {
72
+ return this.getCircuitBreaker().execute(() => this.retryManager.execute(operation));
73
+ }
74
+ /**
75
+ * Update metrics after request
76
+ */
77
+ updateMetrics(responseTime, success, cost = 0) {
78
+ const measuredLatency = Math.max(responseTime, 1);
79
+ this.metrics.requestCount++;
80
+ this.metrics.lastUsed = Date.now();
81
+ if (success) {
82
+ this.metrics.successCount++;
83
+ }
84
+ else {
85
+ this.metrics.errorCount++;
86
+ }
87
+ // Update average latency
88
+ const totalLatency = this.metrics.averageLatency * (this.metrics.requestCount - 1);
89
+ this.metrics.averageLatency = (totalLatency + measuredLatency) / this.metrics.requestCount;
90
+ this.metrics.totalCost += cost;
91
+ }
92
+ /**
93
+ * Get provider metrics
94
+ */
95
+ getMetrics() {
96
+ return { ...this.metrics };
97
+ }
98
+ /**
99
+ * Reset metrics
100
+ */
101
+ resetMetrics() {
102
+ this.metrics = {
103
+ requestCount: 0,
104
+ successCount: 0,
105
+ errorCount: 0,
106
+ averageLatency: 0,
107
+ totalCost: 0,
108
+ rateLimitHits: 0,
109
+ lastUsed: 0
110
+ };
111
+ }
112
+ /**
113
+ * Get provider health status
114
+ */
115
+ getHealth() {
116
+ const circuitState = this.getCircuitBreaker().getState();
117
+ const successRate = this.metrics.requestCount > 0
118
+ ? this.metrics.successCount / this.metrics.requestCount
119
+ : 1;
120
+ return {
121
+ healthy: circuitState.state === 'CLOSED' && successRate > 0.8,
122
+ circuitBreakerState: circuitState.state,
123
+ metrics: this.getMetrics(),
124
+ lastError: circuitState.lastFailure
125
+ };
126
+ }
127
+ /**
128
+ * Update provider configuration
129
+ */
130
+ updateConfig(config) {
131
+ this.config = { ...this.config, ...config };
132
+ }
133
+ /**
134
+ * Get current configuration (without sensitive data)
135
+ */
136
+ getConfig() {
137
+ const { apiKey, ...safeConfig } = this.config;
138
+ return safeConfig;
139
+ }
140
+ /**
141
+ * Providers share the named singleton breaker so factory-level routing and
142
+ * per-provider execution observe the same failure history.
143
+ */
144
+ getCircuitBreaker() {
145
+ if (this.circuitBreaker.name !== this.name) {
146
+ this.circuitBreaker = defaultCircuitBreakerManager.getBreaker(this.name);
147
+ }
148
+ return this.circuitBreaker;
149
+ }
150
+ /**
151
+ * Common model capability definitions
152
+ */
153
+ getModelCapabilities() {
154
+ // Override in subclasses to provide model-specific capabilities
155
+ return {};
156
+ }
157
+ /**
158
+ * Validate request before processing
159
+ */
160
+ validateRequest(request) {
161
+ if (!request.messages || request.messages.length === 0) {
162
+ throw new ConfigurationError(this.name, 'Request must contain at least one message');
163
+ }
164
+ if (request.maxTokens && request.maxTokens < 1) {
165
+ throw new ConfigurationError(this.name, 'maxTokens must be greater than 0');
166
+ }
167
+ if (request.temperature && (request.temperature < 0 || request.temperature > 2)) {
168
+ throw new ConfigurationError(this.name, 'temperature must be between 0 and 2');
169
+ }
170
+ // Validate model if specified
171
+ if (request.model && !this.models.includes(request.model)) {
172
+ throw new ConfigurationError(this.name, `Model '${request.model}' not supported. Available models: ${this.models.join(', ')}`);
173
+ }
174
+ }
175
+ /**
176
+ * Calculate token usage cost
177
+ */
178
+ calculateCost(inputTokens, outputTokens, model) {
179
+ const capabilities = this.getModelCapabilities()[model];
180
+ if (!capabilities)
181
+ return 0;
182
+ const inputCost = (inputTokens / 1000) * capabilities.inputTokenCost;
183
+ const outputCost = (outputTokens / 1000) * capabilities.outputTokenCost;
184
+ return inputCost + outputCost;
185
+ }
186
+ /**
187
+ * Common response formatting
188
+ */
189
+ buildResponse(content, usage, model, responseTime, metadata) {
190
+ const cost = this.calculateCost(usage.inputTokens, usage.outputTokens, model);
191
+ return {
192
+ message: content,
193
+ content,
194
+ usage: {
195
+ inputTokens: usage.inputTokens,
196
+ outputTokens: usage.outputTokens,
197
+ totalTokens: usage.inputTokens + usage.outputTokens,
198
+ cost
199
+ },
200
+ model,
201
+ provider: this.name,
202
+ responseTime,
203
+ finishReason: 'stop',
204
+ metadata
205
+ };
206
+ }
207
+ /**
208
+ * Log request/response for debugging
209
+ */
210
+ logRequest(request, response, error) {
211
+ const logData = {
212
+ provider: this.name,
213
+ model: request.model,
214
+ messageCount: request.messages.length,
215
+ requestId: request.requestId,
216
+ tenantId: request.tenantId,
217
+ success: !error,
218
+ responseTime: response?.responseTime,
219
+ usage: response?.usage,
220
+ error: error?.message
221
+ };
222
+ if (error) {
223
+ console.error(`[${this.name}] Request failed:`, logData);
224
+ }
225
+ else {
226
+ console.log(`[${this.name}] Request completed:`, logData);
227
+ }
228
+ }
229
+ }
230
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE7D,MAAM,OAAgB,YAAY;IAOtB,MAAM,CAAiB;IACvB,YAAY,CAAe;IAC3B,cAAc,CAAiB;IAC/B,WAAW,CAAc;IACzB,OAAO,CAAkB;IAEnC,YAAY,SAAyB,EAAE;QACrC,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;YACrC,GAAG,MAAM;SACV,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACnC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;SACrC,CAAC,CAAC;QAEH,gEAAgE;QAChE,2DAA2D;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,OAAO,GAAG;YACb,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IA2BD;;OAEG;IACO,KAAK,CAAC,WAAW,CACzB,GAAW,EACX,UAAuB,EAAE,EACzB,SAAkB;QAElB,MAAM,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAE1D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,GAAG,OAAO;gBACV,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,YAAY,EAAE,2BAA2B;oBACzC,GAAG,OAAO,CAAC,OAAO;iBACnB;aACF,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,OAAO,IAAI,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,qBAAqB,CACnC,SAA2B;QAE3B,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CACrC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,aAAa,CACrB,YAAoB,EACpB,OAAgB,EAChB,OAAe,CAAC;QAEhB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAE3F,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,GAAG;YACb,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QAMP,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;YACvD,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,GAAG,GAAG;YAC7D,mBAAmB,EAAE,YAAY,CAAC,KAAK;YACvC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,SAAS,EAAE,YAAY,CAAC,WAAW;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA+B;QAC1C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACO,iBAAiB;QACzB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,4BAA4B,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACO,oBAAoB;QAC5B,gEAAgE;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,OAAmB;QAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,2CAA2C,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,qCAAqC,CAAC,CAAC;QACjF,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,kBAAkB,CAC1B,IAAI,CAAC,IAAI,EACT,UAAU,OAAO,CAAC,KAAK,sCAAsC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACO,aAAa,CACrB,WAAmB,EACnB,YAAoB,EACpB,KAAa;QAEb,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,CAAC;QAE5B,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC;QACrE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,eAAe,CAAC;QAExE,OAAO,SAAS,GAAG,UAAU,CAAC;IAChC,CAAC;IAED;;OAEG;IACO,aAAa,CACrB,OAAe,EACf,KAAoD,EACpD,KAAa,EACb,YAAoB,EACpB,QAA8B;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAE9E,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,KAAK,EAAE;gBACL,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY;gBACnD,IAAI;aACL;YACD,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,YAAY;YACZ,YAAY,EAAE,MAAM;YACpB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,OAAmB,EAAE,QAAsB,EAAE,KAAa;QAC7E,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,CAAC,KAAK;YACf,YAAY,EAAE,QAAQ,EAAE,YAAY;YACpC,KAAK,EAAE,QAAQ,EAAE,KAAK;YACtB,KAAK,EAAE,KAAK,EAAE,OAAO;SACtB,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Cerebras Provider
3
+ * Implementation for Cerebras fast inference models (OpenAI-compatible API)
4
+ */
5
+ import type { LLMRequest, LLMResponse, CerebrasConfig, ModelCapabilities } from '../types';
6
+ import { BaseProvider } from './base';
7
+ export declare class CerebrasProvider extends BaseProvider {
8
+ name: string;
9
+ models: string[];
10
+ supportsStreaming: boolean;
11
+ supportsTools: boolean;
12
+ supportsBatching: boolean;
13
+ private apiKey;
14
+ private baseUrl;
15
+ constructor(config: CerebrasConfig);
16
+ generateResponse(request: LLMRequest): Promise<LLMResponse>;
17
+ validateConfig(): boolean;
18
+ getModels(): string[];
19
+ estimateCost(request: LLMRequest): number;
20
+ healthCheck(): Promise<boolean>;
21
+ protected getModelCapabilities(): Record<string, ModelCapabilities>;
22
+ /**
23
+ * Stream response support (OpenAI-compatible SSE format)
24
+ */
25
+ streamResponse(request: LLMRequest): Promise<ReadableStream<string>>;
26
+ private makeCerebrasRequest;
27
+ private formatRequest;
28
+ private formatResponse;
29
+ }
30
+ //# sourceMappingURL=cerebras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cerebras.d.ts","sourceRoot":"","sources":["../../src/providers/cerebras.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAY,MAAM,UAAU,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAgEtC,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,IAAI,SAAc;IAClB,MAAM,WAKJ;IACF,iBAAiB,UAAQ;IACzB,aAAa,UAAQ;IACrB,gBAAgB,UAAS;IAEzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAW5B,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA8BjE,cAAc,IAAI,OAAO;IAIzB,SAAS,IAAI,MAAM,EAAE;IAIrB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAcnC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,SAAS,CAAC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAyCnE;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YA8D5D,mBAAmB;IAsBjC,OAAO,CAAC,aAAa;IAyErB,OAAO,CAAC,cAAc;CA+CvB"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Cerebras Provider
3
+ * Implementation for Cerebras fast inference models (OpenAI-compatible API)
4
+ */
5
+ import { BaseProvider } from './base';
6
+ import { LLMErrorFactory, AuthenticationError } from '../errors';
7
+ // Models that support tool calling
8
+ const TOOL_CAPABLE_MODELS = new Set([
9
+ 'zai-glm-4.7',
10
+ 'qwen-3-235b-a22b-instruct-2507',
11
+ ]);
12
+ export class CerebrasProvider extends BaseProvider {
13
+ name = 'cerebras';
14
+ models = [
15
+ 'llama-3.1-8b',
16
+ 'llama-3.3-70b',
17
+ 'zai-glm-4.7',
18
+ 'qwen-3-235b-a22b-instruct-2507',
19
+ ];
20
+ supportsStreaming = true;
21
+ supportsTools = true;
22
+ supportsBatching = false;
23
+ apiKey;
24
+ baseUrl;
25
+ constructor(config) {
26
+ super(config);
27
+ if (!config.apiKey) {
28
+ throw new AuthenticationError('cerebras', 'Cerebras API key is required');
29
+ }
30
+ this.apiKey = config.apiKey;
31
+ this.baseUrl = config.baseUrl || 'https://api.cerebras.ai/v1';
32
+ }
33
+ async generateResponse(request) {
34
+ this.validateRequest(request);
35
+ const startTime = Date.now();
36
+ try {
37
+ const response = await this.executeWithResiliency(async () => {
38
+ const cerebrasRequest = this.formatRequest(request);
39
+ const httpResponse = await this.makeCerebrasRequest('/chat/completions', cerebrasRequest);
40
+ if (!httpResponse.ok) {
41
+ throw await LLMErrorFactory.fromFetchResponse('cerebras', httpResponse);
42
+ }
43
+ const data = await httpResponse.json();
44
+ return this.formatResponse(data, Date.now() - startTime);
45
+ });
46
+ this.updateMetrics(response.responseTime, true, response.usage.cost);
47
+ this.logRequest(request, response);
48
+ return response;
49
+ }
50
+ catch (error) {
51
+ const responseTime = Date.now() - startTime;
52
+ this.updateMetrics(responseTime, false);
53
+ this.logRequest(request, undefined, error);
54
+ throw error;
55
+ }
56
+ }
57
+ validateConfig() {
58
+ return !!(this.apiKey && this.baseUrl);
59
+ }
60
+ getModels() {
61
+ return [...this.models];
62
+ }
63
+ estimateCost(request) {
64
+ const model = request.model || 'llama-3.1-8b';
65
+ const capabilities = this.getModelCapabilities()[model];
66
+ if (!capabilities)
67
+ return 0;
68
+ const inputTokens = request.messages.reduce((sum, msg) => sum + Math.ceil(msg.content.length / 4), 0);
69
+ const outputTokens = request.maxTokens || 1000;
70
+ return this.calculateCost(inputTokens, outputTokens, model);
71
+ }
72
+ async healthCheck() {
73
+ try {
74
+ const response = await this.makeCerebrasRequest('/models', null, 'GET');
75
+ return response.ok;
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
81
+ getModelCapabilities() {
82
+ return {
83
+ 'llama-3.1-8b': {
84
+ maxContextLength: 128000,
85
+ supportsStreaming: true,
86
+ supportsTools: false,
87
+ supportsBatching: false,
88
+ inputTokenCost: 0.0001, // $0.10 per 1M tokens
89
+ outputTokenCost: 0.0001, // $0.10 per 1M tokens
90
+ description: 'Llama 3.1 8B - Fast inference on Cerebras'
91
+ },
92
+ 'llama-3.3-70b': {
93
+ maxContextLength: 128000,
94
+ supportsStreaming: true,
95
+ supportsTools: false,
96
+ supportsBatching: false,
97
+ inputTokenCost: 0.0006, // $0.60 per 1M tokens
98
+ outputTokenCost: 0.0006, // $0.60 per 1M tokens
99
+ description: 'Llama 3.3 70B - High-quality fast inference on Cerebras'
100
+ },
101
+ 'zai-glm-4.7': {
102
+ maxContextLength: 131000,
103
+ supportsStreaming: true,
104
+ supportsTools: true,
105
+ supportsBatching: false,
106
+ inputTokenCost: 0.00225, // $2.25 per 1M tokens
107
+ outputTokenCost: 0.00275, // $2.75 per 1M tokens
108
+ description: 'ZAI-GLM 4.7 355B - Reasoning mode, tool calling, structured outputs (Preview)'
109
+ },
110
+ 'qwen-3-235b-a22b-instruct-2507': {
111
+ maxContextLength: 131000,
112
+ supportsStreaming: true,
113
+ supportsTools: true,
114
+ supportsBatching: false,
115
+ inputTokenCost: 0.0006, // $0.60 per 1M tokens
116
+ outputTokenCost: 0.0012, // $1.20 per 1M tokens
117
+ description: 'Qwen 3 235B MoE (22B active) - Tool calling, structured outputs (Preview)'
118
+ }
119
+ };
120
+ }
121
+ /**
122
+ * Stream response support (OpenAI-compatible SSE format)
123
+ */
124
+ async streamResponse(request) {
125
+ this.validateRequest(request);
126
+ const cerebrasRequest = { ...this.formatRequest(request), stream: true };
127
+ return new ReadableStream({
128
+ start: async (controller) => {
129
+ try {
130
+ const response = await this.makeCerebrasRequest('/chat/completions', cerebrasRequest);
131
+ if (!response.ok) {
132
+ throw await LLMErrorFactory.fromFetchResponse('cerebras', response);
133
+ }
134
+ const reader = response.body?.getReader();
135
+ if (!reader) {
136
+ throw new Error('No response body');
137
+ }
138
+ const decoder = new TextDecoder();
139
+ let buffer = '';
140
+ while (true) {
141
+ const { done, value } = await reader.read();
142
+ if (done)
143
+ break;
144
+ buffer += decoder.decode(value, { stream: true });
145
+ const lines = buffer.split('\n');
146
+ buffer = lines.pop() || '';
147
+ for (const line of lines) {
148
+ if (line.startsWith('data: ')) {
149
+ const data = line.slice(6);
150
+ if (data === '[DONE]') {
151
+ controller.close();
152
+ return;
153
+ }
154
+ try {
155
+ const parsed = JSON.parse(data);
156
+ const content = parsed.choices?.[0]?.delta?.content;
157
+ if (content) {
158
+ controller.enqueue(content);
159
+ }
160
+ }
161
+ catch (error) {
162
+ console.warn('Failed to parse SSE data:', error);
163
+ }
164
+ }
165
+ }
166
+ }
167
+ controller.close();
168
+ }
169
+ catch (error) {
170
+ controller.error(error);
171
+ }
172
+ }
173
+ });
174
+ }
175
+ async makeCerebrasRequest(endpoint, body, method = 'POST') {
176
+ const headers = {
177
+ 'Authorization': `Bearer ${this.apiKey}`,
178
+ 'Content-Type': 'application/json'
179
+ };
180
+ const options = {
181
+ method,
182
+ headers
183
+ };
184
+ if (body && method !== 'GET') {
185
+ options.body = JSON.stringify(body);
186
+ }
187
+ return this.makeRequest(`${this.baseUrl}${endpoint}`, options);
188
+ }
189
+ formatRequest(request) {
190
+ const messages = [];
191
+ const model = request.model || 'llama-3.1-8b';
192
+ const jsonMode = request.response_format?.type === 'json_object';
193
+ const jsonInstruction = '\n\nYou must respond with valid JSON only. No markdown fences, no commentary, no text outside the JSON.';
194
+ if (request.systemPrompt) {
195
+ messages.push({
196
+ role: 'system',
197
+ content: jsonMode ? request.systemPrompt + jsonInstruction : request.systemPrompt
198
+ });
199
+ }
200
+ else if (jsonMode) {
201
+ messages.push({
202
+ role: 'system',
203
+ content: jsonInstruction.trimStart()
204
+ });
205
+ }
206
+ for (const message of request.messages) {
207
+ if (message.role === 'system' && request.systemPrompt) {
208
+ continue;
209
+ }
210
+ const msg = {
211
+ role: message.role,
212
+ content: message.content
213
+ };
214
+ // Carry tool calls/results for multi-turn tool conversations
215
+ if (message.toolCalls) {
216
+ msg.tool_calls = message.toolCalls.map(tc => ({
217
+ id: tc.id,
218
+ type: 'function',
219
+ function: { name: tc.function.name, arguments: tc.function.arguments }
220
+ }));
221
+ }
222
+ if (message.toolResults) {
223
+ // Tool results come as separate messages in OpenAI format
224
+ for (const tr of message.toolResults) {
225
+ messages.push({ role: 'tool', content: tr.output, tool_call_id: tr.id });
226
+ }
227
+ continue; // Don't push the original message — tool results replace it
228
+ }
229
+ messages.push(msg);
230
+ }
231
+ const result = {
232
+ model,
233
+ messages,
234
+ temperature: request.temperature,
235
+ max_tokens: request.maxTokens,
236
+ stream: request.stream
237
+ };
238
+ // Add tools if the model supports them and tools are provided
239
+ if (request.tools && request.tools.length > 0 && TOOL_CAPABLE_MODELS.has(model)) {
240
+ result.tools = request.tools.map(t => ({
241
+ type: 'function',
242
+ function: {
243
+ name: t.function.name,
244
+ description: t.function.description,
245
+ parameters: t.function.parameters,
246
+ }
247
+ }));
248
+ if (request.toolChoice) {
249
+ result.tool_choice = request.toolChoice;
250
+ }
251
+ }
252
+ return result;
253
+ }
254
+ formatResponse(data, responseTime) {
255
+ const choice = data.choices[0];
256
+ if (!choice) {
257
+ throw new Error('No choices returned from Cerebras');
258
+ }
259
+ const content = choice.message.content || '';
260
+ const usage = {
261
+ inputTokens: data.usage.prompt_tokens,
262
+ outputTokens: data.usage.completion_tokens,
263
+ totalTokens: data.usage.total_tokens,
264
+ cost: this.calculateCost(data.usage.prompt_tokens, data.usage.completion_tokens, data.model)
265
+ };
266
+ // Extract tool calls if present
267
+ let toolCalls;
268
+ if (choice.message.tool_calls && choice.message.tool_calls.length > 0) {
269
+ toolCalls = choice.message.tool_calls.map(tc => ({
270
+ id: tc.id,
271
+ type: 'function',
272
+ function: { name: tc.function.name, arguments: tc.function.arguments }
273
+ }));
274
+ }
275
+ return {
276
+ id: data.id,
277
+ message: content,
278
+ content,
279
+ usage,
280
+ model: data.model,
281
+ provider: this.name,
282
+ responseTime,
283
+ finishReason: choice.finish_reason === 'tool_calls' ? 'tool_calls' : choice.finish_reason,
284
+ toolCalls,
285
+ metadata: {
286
+ systemFingerprint: data.system_fingerprint,
287
+ created: data.created
288
+ }
289
+ };
290
+ }
291
+ }
292
+ //# sourceMappingURL=cerebras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cerebras.js","sourceRoot":"","sources":["../../src/providers/cerebras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Cloudflare AI Provider
3
+ * Implementation for Cloudflare Workers AI with cost optimization
4
+ */
5
+ import type { LLMRequest, LLMResponse, CloudflareConfig, ModelCapabilities } from '../types';
6
+ import { BaseProvider } from './base';
7
+ export declare class CloudflareProvider extends BaseProvider {
8
+ name: string;
9
+ models: string[];
10
+ supportsStreaming: boolean;
11
+ supportsTools: boolean;
12
+ supportsBatching: boolean;
13
+ private ai;
14
+ private accountId?;
15
+ constructor(config: CloudflareConfig);
16
+ generateResponse(request: LLMRequest): Promise<LLMResponse>;
17
+ validateConfig(): boolean;
18
+ getModels(): string[];
19
+ estimateCost(request: LLMRequest): number;
20
+ healthCheck(): Promise<boolean>;
21
+ protected getModelCapabilities(): Record<string, ModelCapabilities>;
22
+ private formatRequest;
23
+ private formatResponse;
24
+ private extractText;
25
+ private extractToolCalls;
26
+ private extractUsage;
27
+ private extractFinishReason;
28
+ private stringifyArguments;
29
+ private unwrapResult;
30
+ /**
31
+ * Stream response support
32
+ */
33
+ streamResponse(request: LLMRequest): Promise<ReadableStream<string>>;
34
+ /**
35
+ * Batch processing support
36
+ */
37
+ processBatch(requests: LLMRequest[]): Promise<LLMResponse[]>;
38
+ /**
39
+ * Get recommended model for cost optimization
40
+ */
41
+ getRecommendedModel(request: LLMRequest): string;
42
+ /**
43
+ * Cost optimization features
44
+ */
45
+ generateWithCostOptimization(request: LLMRequest): Promise<LLMResponse>;
46
+ }
47
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/providers/cloudflare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAsBtC,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,IAAI,SAAgB;IACpB,MAAM,WAcJ;IACF,iBAAiB,UAAQ;IACzB,aAAa,UAAQ;IACrB,gBAAgB,UAAQ;IAExB,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,MAAM,EAAE,gBAAgB;IAW9B,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCjE,cAAc,IAAI,OAAO;IAIzB,SAAS,IAAI,MAAM,EAAE;IAIrB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAiBnC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAcrC,SAAS,CAAC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IA2HnE,OAAO,CAAC,aAAa;IA2FrB,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,YAAY;IAmDpB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IA6C1E;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA+BlE;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAkBhD;;OAEG;IACG,4BAA4B,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAS9E"}