@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,378 @@
1
+ /**
2
+ * Anthropic Provider
3
+ * Implementation for Claude models with streaming and tools support
4
+ */
5
+ import { BaseProvider } from './base';
6
+ import { LLMErrorFactory, AuthenticationError } from '../errors';
7
+ export class AnthropicProvider extends BaseProvider {
8
+ name = 'anthropic';
9
+ models = [
10
+ 'claude-sonnet-4-20250514',
11
+ 'claude-opus-4-20250514',
12
+ 'claude-sonnet-3.7-20241120',
13
+ 'claude-3-5-sonnet-20241022',
14
+ 'claude-3-5-haiku-20241022',
15
+ 'claude-3-opus-20240229',
16
+ 'claude-3-sonnet-20240229',
17
+ 'claude-3-haiku-20240307'
18
+ ];
19
+ supportsStreaming = true;
20
+ supportsTools = true;
21
+ supportsBatching = false;
22
+ apiKey;
23
+ baseUrl;
24
+ version;
25
+ constructor(config) {
26
+ super(config);
27
+ if (!config.apiKey) {
28
+ throw new AuthenticationError('anthropic', 'Anthropic API key is required');
29
+ }
30
+ this.apiKey = config.apiKey;
31
+ this.baseUrl = config.baseUrl || 'https://api.anthropic.com';
32
+ this.version = config.version || '2023-06-01';
33
+ }
34
+ async generateResponse(request) {
35
+ this.validateRequest(request);
36
+ const startTime = Date.now();
37
+ const jsonMode = request.response_format?.type === 'json_object';
38
+ try {
39
+ const response = await this.executeWithResiliency(async () => {
40
+ const anthropicRequest = this.formatRequest(request);
41
+ const httpResponse = await this.makeAnthropicRequest('/v1/messages', anthropicRequest);
42
+ if (!httpResponse.ok) {
43
+ throw await LLMErrorFactory.fromFetchResponse('anthropic', httpResponse);
44
+ }
45
+ const data = await httpResponse.json();
46
+ const formatted = this.formatResponse(data, Date.now() - startTime);
47
+ // Prepend the prefilled '{' that was consumed by the assistant turn
48
+ if (jsonMode) {
49
+ const restored = '{' + formatted.message;
50
+ formatted.message = restored;
51
+ formatted.content = restored;
52
+ }
53
+ return formatted;
54
+ });
55
+ this.updateMetrics(response.responseTime, true, response.usage.cost);
56
+ this.logRequest(request, response);
57
+ return response;
58
+ }
59
+ catch (error) {
60
+ const responseTime = Date.now() - startTime;
61
+ this.updateMetrics(responseTime, false);
62
+ this.logRequest(request, undefined, error);
63
+ throw error;
64
+ }
65
+ }
66
+ validateConfig() {
67
+ return !!(this.apiKey && this.baseUrl);
68
+ }
69
+ getModels() {
70
+ return [...this.models];
71
+ }
72
+ estimateCost(request) {
73
+ const model = request.model || 'claude-3-5-haiku-20241022';
74
+ const capabilities = this.getModelCapabilities()[model];
75
+ if (!capabilities)
76
+ return 0;
77
+ // Estimate input tokens (rough approximation)
78
+ const inputTokens = request.messages.reduce((sum, msg) => sum + Math.ceil(msg.content.length / 4), 0);
79
+ const outputTokens = request.maxTokens || 1000;
80
+ return this.calculateCost(inputTokens, outputTokens, model);
81
+ }
82
+ async healthCheck() {
83
+ try {
84
+ // Anthropic doesn't have a simple health check endpoint
85
+ // So we'll make a minimal request
86
+ const testRequest = {
87
+ model: 'claude-3-5-haiku-20241022',
88
+ messages: [{ role: 'user', content: 'Hi' }],
89
+ max_tokens: 1
90
+ };
91
+ const response = await this.makeAnthropicRequest('/v1/messages', testRequest);
92
+ return response.ok;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ getModelCapabilities() {
99
+ return {
100
+ 'claude-sonnet-4-20250514': {
101
+ maxContextLength: 200000,
102
+ supportsStreaming: true,
103
+ supportsTools: true,
104
+ supportsBatching: false,
105
+ inputTokenCost: 0.003, // Estimated - actual pricing TBD
106
+ outputTokenCost: 0.015, // Estimated - actual pricing TBD
107
+ description: 'Claude Sonnet 4 - High intelligence and balanced performance'
108
+ },
109
+ 'claude-opus-4-20250514': {
110
+ maxContextLength: 200000,
111
+ supportsStreaming: true,
112
+ supportsTools: true,
113
+ supportsBatching: false,
114
+ inputTokenCost: 0.015, // Estimated - actual pricing TBD
115
+ outputTokenCost: 0.075, // Estimated - actual pricing TBD
116
+ description: 'Claude Opus 4 - Highest level of intelligence and capability'
117
+ },
118
+ 'claude-sonnet-3.7-20241120': {
119
+ maxContextLength: 200000,
120
+ supportsStreaming: true,
121
+ supportsTools: true,
122
+ supportsBatching: false,
123
+ inputTokenCost: 0.003, // Estimated - actual pricing TBD
124
+ outputTokenCost: 0.015, // Estimated - actual pricing TBD
125
+ description: 'Claude Sonnet 3.7 - High intelligence with toggleable extended thinking'
126
+ },
127
+ 'claude-3-5-sonnet-20241022': {
128
+ maxContextLength: 200000,
129
+ supportsStreaming: true,
130
+ supportsTools: true,
131
+ supportsBatching: false,
132
+ inputTokenCost: 0.003, // $3 per 1M tokens
133
+ outputTokenCost: 0.015, // $15 per 1M tokens
134
+ description: 'Claude 3.5 Sonnet - Latest high-performance model'
135
+ },
136
+ 'claude-3-5-haiku-20241022': {
137
+ maxContextLength: 200000,
138
+ supportsStreaming: true,
139
+ supportsTools: true,
140
+ supportsBatching: false,
141
+ inputTokenCost: 0.00025, // $0.25 per 1M tokens
142
+ outputTokenCost: 0.00125, // $1.25 per 1M tokens
143
+ description: 'Claude 3.5 Haiku - Fast and cost-effective'
144
+ },
145
+ 'claude-3-opus-20240229': {
146
+ maxContextLength: 200000,
147
+ supportsStreaming: true,
148
+ supportsTools: true,
149
+ supportsBatching: false,
150
+ inputTokenCost: 0.015, // $15 per 1M tokens
151
+ outputTokenCost: 0.075, // $75 per 1M tokens
152
+ description: 'Claude 3 Opus - Most capable model'
153
+ },
154
+ 'claude-3-sonnet-20240229': {
155
+ maxContextLength: 200000,
156
+ supportsStreaming: true,
157
+ supportsTools: true,
158
+ supportsBatching: false,
159
+ inputTokenCost: 0.003, // $3 per 1M tokens
160
+ outputTokenCost: 0.015, // $15 per 1M tokens
161
+ description: 'Claude 3 Sonnet - Balanced performance'
162
+ },
163
+ 'claude-3-haiku-20240307': {
164
+ maxContextLength: 200000,
165
+ supportsStreaming: true,
166
+ supportsTools: true,
167
+ supportsBatching: false,
168
+ inputTokenCost: 0.00025, // $0.25 per 1M tokens
169
+ outputTokenCost: 0.00125, // $1.25 per 1M tokens
170
+ description: 'Claude 3 Haiku - Fast and economical'
171
+ }
172
+ };
173
+ }
174
+ async makeAnthropicRequest(endpoint, body, method = 'POST') {
175
+ const headers = {
176
+ 'x-api-key': this.apiKey,
177
+ 'anthropic-version': this.version,
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 jsonMode = request.response_format?.type === 'json_object';
192
+ // Convert messages (skip system messages as they go in separate field)
193
+ for (const message of request.messages) {
194
+ if (message.role === 'system')
195
+ continue;
196
+ const anthropicMessage = {
197
+ role: message.role,
198
+ content: message.content
199
+ };
200
+ // Handle tool calls and results
201
+ if (message.toolCalls && message.toolCalls.length > 0) {
202
+ anthropicMessage.content = message.toolCalls.map(tc => ({
203
+ type: 'tool_use',
204
+ id: tc.id,
205
+ name: tc.function.name,
206
+ input: JSON.parse(tc.function.arguments)
207
+ }));
208
+ }
209
+ if (message.toolResults && message.toolResults.length > 0) {
210
+ anthropicMessage.content = message.toolResults.map(tr => ({
211
+ type: 'tool_result',
212
+ id: tr.id,
213
+ content: tr.output,
214
+ is_error: !!tr.error
215
+ }));
216
+ }
217
+ messages.push(anthropicMessage);
218
+ }
219
+ // Add prefilled assistant message for JSON mode
220
+ if (jsonMode) {
221
+ messages.push({ role: 'assistant', content: '{' });
222
+ }
223
+ const anthropicRequest = {
224
+ model: request.model || 'claude-3-5-haiku-20241022',
225
+ messages,
226
+ max_tokens: request.maxTokens || 1000,
227
+ temperature: request.temperature,
228
+ stream: request.stream
229
+ };
230
+ // Add system prompt if provided
231
+ const systemMessage = request.messages.find(m => m.role === 'system');
232
+ const jsonInstruction = '\n\nYou must respond with valid JSON only. No markdown fences, no commentary, no text outside the JSON.';
233
+ if (request.systemPrompt) {
234
+ anthropicRequest.system = jsonMode
235
+ ? request.systemPrompt + jsonInstruction
236
+ : request.systemPrompt;
237
+ }
238
+ else if (systemMessage) {
239
+ anthropicRequest.system = jsonMode
240
+ ? systemMessage.content + jsonInstruction
241
+ : systemMessage.content;
242
+ }
243
+ else if (jsonMode) {
244
+ anthropicRequest.system = jsonInstruction.trimStart();
245
+ }
246
+ // Add tools if provided
247
+ if (request.tools && request.tools.length > 0) {
248
+ anthropicRequest.tools = request.tools.map(tool => ({
249
+ name: tool.function.name,
250
+ description: tool.function.description,
251
+ input_schema: tool.function.parameters
252
+ }));
253
+ if (request.toolChoice) {
254
+ anthropicRequest.tool_choice = request.toolChoice;
255
+ }
256
+ }
257
+ return anthropicRequest;
258
+ }
259
+ formatResponse(data, responseTime) {
260
+ // Extract text content from response
261
+ const textContent = data.content
262
+ .filter(block => block.type === 'text')
263
+ .map(block => block.text)
264
+ .join('');
265
+ const usage = {
266
+ inputTokens: data.usage.input_tokens,
267
+ outputTokens: data.usage.output_tokens,
268
+ totalTokens: data.usage.input_tokens + data.usage.output_tokens,
269
+ cost: this.calculateCost(data.usage.input_tokens, data.usage.output_tokens, data.model)
270
+ };
271
+ const response = {
272
+ id: data.id,
273
+ message: textContent,
274
+ content: textContent,
275
+ usage,
276
+ model: data.model,
277
+ provider: this.name,
278
+ responseTime,
279
+ finishReason: this.mapStopReason(data.stop_reason),
280
+ metadata: {
281
+ stopSequence: data.stop_sequence
282
+ }
283
+ };
284
+ // Extract tool calls if present
285
+ const toolUses = data.content.filter(block => block.type === 'tool_use');
286
+ if (toolUses.length > 0) {
287
+ response.toolCalls = toolUses.map(tool => ({
288
+ id: tool.id,
289
+ type: 'function',
290
+ function: {
291
+ name: tool.name,
292
+ arguments: JSON.stringify(tool.input)
293
+ }
294
+ }));
295
+ }
296
+ return response;
297
+ }
298
+ mapStopReason(stopReason) {
299
+ switch (stopReason) {
300
+ case 'end_turn':
301
+ return 'stop';
302
+ case 'max_tokens':
303
+ return 'length';
304
+ case 'tool_use':
305
+ return 'tool_calls';
306
+ default:
307
+ return 'stop';
308
+ }
309
+ }
310
+ /**
311
+ * Stream response support
312
+ */
313
+ async streamResponse(request) {
314
+ this.validateRequest(request);
315
+ const anthropicRequest = { ...this.formatRequest(request), stream: true };
316
+ return new ReadableStream({
317
+ start: async (controller) => {
318
+ try {
319
+ const response = await this.makeAnthropicRequest('/v1/messages', anthropicRequest);
320
+ if (!response.ok) {
321
+ throw await LLMErrorFactory.fromFetchResponse('anthropic', response);
322
+ }
323
+ const reader = response.body?.getReader();
324
+ if (!reader) {
325
+ throw new Error('No response body');
326
+ }
327
+ const decoder = new TextDecoder();
328
+ let buffer = '';
329
+ while (true) {
330
+ const { done, value } = await reader.read();
331
+ if (done)
332
+ break;
333
+ buffer += decoder.decode(value, { stream: true });
334
+ const lines = buffer.split('\n');
335
+ buffer = lines.pop() || '';
336
+ for (const line of lines) {
337
+ if (line.startsWith('data: ')) {
338
+ const data = line.slice(6);
339
+ if (data === '[DONE]') {
340
+ controller.close();
341
+ return;
342
+ }
343
+ try {
344
+ const parsed = JSON.parse(data);
345
+ if (parsed.type === 'content_block_delta' && parsed.delta?.text) {
346
+ controller.enqueue(parsed.delta.text);
347
+ }
348
+ }
349
+ catch (error) {
350
+ console.warn('Failed to parse SSE data:', error);
351
+ }
352
+ }
353
+ }
354
+ }
355
+ controller.close();
356
+ }
357
+ catch (error) {
358
+ controller.error(error);
359
+ }
360
+ }
361
+ });
362
+ }
363
+ /**
364
+ * Tool usage support
365
+ */
366
+ async generateWithTools(request) {
367
+ const response = await this.generateResponse(request);
368
+ // If the response contains tool calls, we need to execute them
369
+ // and potentially make another request with the results
370
+ if (response.toolCalls && response.toolCalls.length > 0) {
371
+ // This would typically involve executing the tools and making another request
372
+ // For now, we just return the response with tool calls
373
+ console.log('Tool calls detected in Anthropic response:', response.toolCalls);
374
+ }
375
+ return response;
376
+ }
377
+ }
378
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Base Provider
3
+ * Abstract base class for all LLM providers with common functionality
4
+ */
5
+ import type { LLMProvider, LLMRequest, LLMResponse, ProviderConfig, ModelCapabilities, ProviderMetrics } from '../types';
6
+ import { RetryManager } from '../utils/retry';
7
+ import { CircuitBreaker } from '../utils/circuit-breaker';
8
+ import { CostTracker } from '../utils/cost-tracker';
9
+ export declare abstract class BaseProvider implements LLMProvider {
10
+ abstract name: string;
11
+ abstract models: string[];
12
+ abstract supportsStreaming: boolean;
13
+ abstract supportsTools: boolean;
14
+ abstract supportsBatching: boolean;
15
+ protected config: ProviderConfig;
16
+ protected retryManager: RetryManager;
17
+ protected circuitBreaker: CircuitBreaker;
18
+ protected costTracker: CostTracker;
19
+ protected metrics: ProviderMetrics;
20
+ constructor(config?: ProviderConfig);
21
+ /**
22
+ * Abstract method that must be implemented by each provider
23
+ */
24
+ abstract generateResponse(request: LLMRequest): Promise<LLMResponse>;
25
+ /**
26
+ * Abstract method for configuration validation
27
+ */
28
+ abstract validateConfig(): boolean;
29
+ /**
30
+ * Abstract method to get available models
31
+ */
32
+ abstract getModels(): string[];
33
+ /**
34
+ * Abstract method to estimate cost
35
+ */
36
+ abstract estimateCost(request: LLMRequest): number;
37
+ /**
38
+ * Abstract method for health check
39
+ */
40
+ abstract healthCheck(): Promise<boolean>;
41
+ /**
42
+ * Common HTTP request method with timeout and error handling
43
+ */
44
+ protected makeRequest(url: string, options?: RequestInit, timeoutMs?: number): Promise<Response>;
45
+ /**
46
+ * Execute request with circuit breaker and retry logic
47
+ */
48
+ protected executeWithResiliency<T>(operation: () => Promise<T>): Promise<T>;
49
+ /**
50
+ * Update metrics after request
51
+ */
52
+ protected updateMetrics(responseTime: number, success: boolean, cost?: number): void;
53
+ /**
54
+ * Get provider metrics
55
+ */
56
+ getMetrics(): ProviderMetrics;
57
+ /**
58
+ * Reset metrics
59
+ */
60
+ resetMetrics(): void;
61
+ /**
62
+ * Get provider health status
63
+ */
64
+ getHealth(): {
65
+ healthy: boolean;
66
+ circuitBreakerState: string;
67
+ metrics: ProviderMetrics;
68
+ lastError?: number;
69
+ };
70
+ /**
71
+ * Update provider configuration
72
+ */
73
+ updateConfig(config: Partial<ProviderConfig>): void;
74
+ /**
75
+ * Get current configuration (without sensitive data)
76
+ */
77
+ getConfig(): Omit<ProviderConfig, 'apiKey'>;
78
+ /**
79
+ * Providers share the named singleton breaker so factory-level routing and
80
+ * per-provider execution observe the same failure history.
81
+ */
82
+ protected getCircuitBreaker(): CircuitBreaker;
83
+ /**
84
+ * Common model capability definitions
85
+ */
86
+ protected getModelCapabilities(): Record<string, ModelCapabilities>;
87
+ /**
88
+ * Validate request before processing
89
+ */
90
+ protected validateRequest(request: LLMRequest): void;
91
+ /**
92
+ * Calculate token usage cost
93
+ */
94
+ protected calculateCost(inputTokens: number, outputTokens: number, model: string): number;
95
+ /**
96
+ * Common response formatting
97
+ */
98
+ protected buildResponse(content: string, usage: {
99
+ inputTokens: number;
100
+ outputTokens: number;
101
+ }, model: string, responseTime: number, metadata?: Record<string, any>): LLMResponse;
102
+ /**
103
+ * Log request/response for debugging
104
+ */
105
+ protected logRequest(request: LLMRequest, response?: LLMResponse, error?: Error): void;
106
+ }
107
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"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"}