ai.matey.backend 0.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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/index.js +60 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/providers/ai21.js +331 -0
  5. package/dist/cjs/providers/ai21.js.map +1 -0
  6. package/dist/cjs/providers/anthropic.js +664 -0
  7. package/dist/cjs/providers/anthropic.js.map +1 -0
  8. package/dist/cjs/providers/anyscale.js +338 -0
  9. package/dist/cjs/providers/anyscale.js.map +1 -0
  10. package/dist/cjs/providers/aws-bedrock.js +374 -0
  11. package/dist/cjs/providers/aws-bedrock.js.map +1 -0
  12. package/dist/cjs/providers/azure-openai.js +406 -0
  13. package/dist/cjs/providers/azure-openai.js.map +1 -0
  14. package/dist/cjs/providers/cerebras.js +356 -0
  15. package/dist/cjs/providers/cerebras.js.map +1 -0
  16. package/dist/cjs/providers/cloudflare.js +359 -0
  17. package/dist/cjs/providers/cloudflare.js.map +1 -0
  18. package/dist/cjs/providers/cohere.js +368 -0
  19. package/dist/cjs/providers/cohere.js.map +1 -0
  20. package/dist/cjs/providers/deepinfra.js +343 -0
  21. package/dist/cjs/providers/deepinfra.js.map +1 -0
  22. package/dist/cjs/providers/deepseek.js +104 -0
  23. package/dist/cjs/providers/deepseek.js.map +1 -0
  24. package/dist/cjs/providers/fireworks.js +363 -0
  25. package/dist/cjs/providers/fireworks.js.map +1 -0
  26. package/dist/cjs/providers/gemini.js +292 -0
  27. package/dist/cjs/providers/gemini.js.map +1 -0
  28. package/dist/cjs/providers/groq.js +143 -0
  29. package/dist/cjs/providers/groq.js.map +1 -0
  30. package/dist/cjs/providers/huggingface.js +392 -0
  31. package/dist/cjs/providers/huggingface.js.map +1 -0
  32. package/dist/cjs/providers/lmstudio.js +144 -0
  33. package/dist/cjs/providers/lmstudio.js.map +1 -0
  34. package/dist/cjs/providers/mistral.js +288 -0
  35. package/dist/cjs/providers/mistral.js.map +1 -0
  36. package/dist/cjs/providers/nvidia.js +167 -0
  37. package/dist/cjs/providers/nvidia.js.map +1 -0
  38. package/dist/cjs/providers/ollama.js +257 -0
  39. package/dist/cjs/providers/ollama.js.map +1 -0
  40. package/dist/cjs/providers/openai.js +640 -0
  41. package/dist/cjs/providers/openai.js.map +1 -0
  42. package/dist/cjs/providers/openrouter.js +379 -0
  43. package/dist/cjs/providers/openrouter.js.map +1 -0
  44. package/dist/cjs/providers/perplexity.js +372 -0
  45. package/dist/cjs/providers/perplexity.js.map +1 -0
  46. package/dist/cjs/providers/replicate.js +340 -0
  47. package/dist/cjs/providers/replicate.js.map +1 -0
  48. package/dist/cjs/providers/together-ai.js +341 -0
  49. package/dist/cjs/providers/together-ai.js.map +1 -0
  50. package/dist/cjs/providers/xai.js +339 -0
  51. package/dist/cjs/providers/xai.js.map +1 -0
  52. package/dist/cjs/shared.js +279 -0
  53. package/dist/cjs/shared.js.map +1 -0
  54. package/dist/esm/index.js +44 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/providers/ai21.js +327 -0
  57. package/dist/esm/providers/ai21.js.map +1 -0
  58. package/dist/esm/providers/anthropic.js +660 -0
  59. package/dist/esm/providers/anthropic.js.map +1 -0
  60. package/dist/esm/providers/anyscale.js +334 -0
  61. package/dist/esm/providers/anyscale.js.map +1 -0
  62. package/dist/esm/providers/aws-bedrock.js +370 -0
  63. package/dist/esm/providers/aws-bedrock.js.map +1 -0
  64. package/dist/esm/providers/azure-openai.js +402 -0
  65. package/dist/esm/providers/azure-openai.js.map +1 -0
  66. package/dist/esm/providers/cerebras.js +352 -0
  67. package/dist/esm/providers/cerebras.js.map +1 -0
  68. package/dist/esm/providers/cloudflare.js +355 -0
  69. package/dist/esm/providers/cloudflare.js.map +1 -0
  70. package/dist/esm/providers/cohere.js +364 -0
  71. package/dist/esm/providers/cohere.js.map +1 -0
  72. package/dist/esm/providers/deepinfra.js +339 -0
  73. package/dist/esm/providers/deepinfra.js.map +1 -0
  74. package/dist/esm/providers/deepseek.js +99 -0
  75. package/dist/esm/providers/deepseek.js.map +1 -0
  76. package/dist/esm/providers/fireworks.js +359 -0
  77. package/dist/esm/providers/fireworks.js.map +1 -0
  78. package/dist/esm/providers/gemini.js +288 -0
  79. package/dist/esm/providers/gemini.js.map +1 -0
  80. package/dist/esm/providers/groq.js +138 -0
  81. package/dist/esm/providers/groq.js.map +1 -0
  82. package/dist/esm/providers/huggingface.js +387 -0
  83. package/dist/esm/providers/huggingface.js.map +1 -0
  84. package/dist/esm/providers/lmstudio.js +139 -0
  85. package/dist/esm/providers/lmstudio.js.map +1 -0
  86. package/dist/esm/providers/mistral.js +284 -0
  87. package/dist/esm/providers/mistral.js.map +1 -0
  88. package/dist/esm/providers/nvidia.js +162 -0
  89. package/dist/esm/providers/nvidia.js.map +1 -0
  90. package/dist/esm/providers/ollama.js +253 -0
  91. package/dist/esm/providers/ollama.js.map +1 -0
  92. package/dist/esm/providers/openai.js +636 -0
  93. package/dist/esm/providers/openai.js.map +1 -0
  94. package/dist/esm/providers/openrouter.js +375 -0
  95. package/dist/esm/providers/openrouter.js.map +1 -0
  96. package/dist/esm/providers/perplexity.js +368 -0
  97. package/dist/esm/providers/perplexity.js.map +1 -0
  98. package/dist/esm/providers/replicate.js +336 -0
  99. package/dist/esm/providers/replicate.js.map +1 -0
  100. package/dist/esm/providers/together-ai.js +337 -0
  101. package/dist/esm/providers/together-ai.js.map +1 -0
  102. package/dist/esm/providers/xai.js +335 -0
  103. package/dist/esm/providers/xai.js.map +1 -0
  104. package/dist/esm/shared.js +272 -0
  105. package/dist/esm/shared.js.map +1 -0
  106. package/dist/types/index.d.ts +38 -0
  107. package/dist/types/index.d.ts.map +1 -0
  108. package/dist/types/providers/ai21.d.ts +106 -0
  109. package/dist/types/providers/ai21.d.ts.map +1 -0
  110. package/dist/types/providers/anthropic.d.ts +194 -0
  111. package/dist/types/providers/anthropic.d.ts.map +1 -0
  112. package/dist/types/providers/anyscale.d.ts +109 -0
  113. package/dist/types/providers/anyscale.d.ts.map +1 -0
  114. package/dist/types/providers/aws-bedrock.d.ts +152 -0
  115. package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
  116. package/dist/types/providers/azure-openai.d.ts +142 -0
  117. package/dist/types/providers/azure-openai.d.ts.map +1 -0
  118. package/dist/types/providers/cerebras.d.ts +130 -0
  119. package/dist/types/providers/cerebras.d.ts.map +1 -0
  120. package/dist/types/providers/cloudflare.d.ts +125 -0
  121. package/dist/types/providers/cloudflare.d.ts.map +1 -0
  122. package/dist/types/providers/cohere.d.ts +114 -0
  123. package/dist/types/providers/cohere.d.ts.map +1 -0
  124. package/dist/types/providers/deepinfra.d.ts +118 -0
  125. package/dist/types/providers/deepinfra.d.ts.map +1 -0
  126. package/dist/types/providers/deepseek.d.ts +68 -0
  127. package/dist/types/providers/deepseek.d.ts.map +1 -0
  128. package/dist/types/providers/fireworks.d.ts +127 -0
  129. package/dist/types/providers/fireworks.d.ts.map +1 -0
  130. package/dist/types/providers/gemini.d.ts +71 -0
  131. package/dist/types/providers/gemini.d.ts.map +1 -0
  132. package/dist/types/providers/groq.d.ts +83 -0
  133. package/dist/types/providers/groq.d.ts.map +1 -0
  134. package/dist/types/providers/huggingface.d.ts +154 -0
  135. package/dist/types/providers/huggingface.d.ts.map +1 -0
  136. package/dist/types/providers/lmstudio.d.ts +88 -0
  137. package/dist/types/providers/lmstudio.d.ts.map +1 -0
  138. package/dist/types/providers/mistral.d.ts +65 -0
  139. package/dist/types/providers/mistral.d.ts.map +1 -0
  140. package/dist/types/providers/nvidia.d.ts +100 -0
  141. package/dist/types/providers/nvidia.d.ts.map +1 -0
  142. package/dist/types/providers/ollama.d.ts +59 -0
  143. package/dist/types/providers/ollama.d.ts.map +1 -0
  144. package/dist/types/providers/openai.d.ts +205 -0
  145. package/dist/types/providers/openai.d.ts.map +1 -0
  146. package/dist/types/providers/openrouter.d.ts +135 -0
  147. package/dist/types/providers/openrouter.d.ts.map +1 -0
  148. package/dist/types/providers/perplexity.d.ts +116 -0
  149. package/dist/types/providers/perplexity.d.ts.map +1 -0
  150. package/dist/types/providers/replicate.d.ts +91 -0
  151. package/dist/types/providers/replicate.d.ts.map +1 -0
  152. package/dist/types/providers/together-ai.d.ts +118 -0
  153. package/dist/types/providers/together-ai.d.ts.map +1 -0
  154. package/dist/types/providers/xai.d.ts +119 -0
  155. package/dist/types/providers/xai.d.ts.map +1 -0
  156. package/dist/types/shared.d.ts +116 -0
  157. package/dist/types/shared.d.ts.map +1 -0
  158. package/package.json +327 -0
  159. package/readme.md +86 -0
@@ -0,0 +1,370 @@
1
+ /**
2
+ * AWS Bedrock Backend Adapter
3
+ *
4
+ * Adapts Universal IR to AWS Bedrock Converse API.
5
+ * AWS Bedrock provides unified access to multiple foundation models with AWS SigV4 authentication.
6
+ *
7
+ * @module
8
+ */
9
+ import { NetworkError, ProviderError, StreamError, ErrorCode, createErrorFromHttpResponse, } from 'ai.matey.errors';
10
+ import { normalizeSystemMessages } from 'ai.matey.utils';
11
+ import { getEffectiveStreamMode, mergeStreamingConfig } from 'ai.matey.utils';
12
+ // ============================================================================
13
+ // AWS Bedrock Backend Adapter
14
+ // ============================================================================
15
+ /**
16
+ * Backend adapter for AWS Bedrock Converse API.
17
+ *
18
+ * Features:
19
+ * - Unified API for multiple foundation models
20
+ * - AWS SigV4 authentication
21
+ * - Vision support (select models)
22
+ * - No function calling in Converse API
23
+ * - Enterprise features (VPC, encryption, compliance)
24
+ * - Pay-per-use pricing
25
+ *
26
+ * Note: This adapter requires AWS credentials. Authentication can be provided via:
27
+ * 1. Config (awsAccessKeyId, awsSecretAccessKey, awsSessionToken)
28
+ * 2. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
29
+ * 3. IAM roles (when running on AWS infrastructure)
30
+ */
31
+ export class AWSBedrockBackendAdapter {
32
+ metadata;
33
+ config;
34
+ region;
35
+ baseURL;
36
+ constructor(config) {
37
+ this.config = config;
38
+ this.region = config.region || process.env.AWS_REGION || 'us-east-1';
39
+ // Construct base URL from region
40
+ this.baseURL = config.baseURL || `https://bedrock-runtime.${this.region}.amazonaws.com`;
41
+ this.metadata = {
42
+ name: 'aws-bedrock-backend',
43
+ version: '1.0.0',
44
+ provider: 'AWS Bedrock',
45
+ capabilities: {
46
+ streaming: true, // Note: Not supported in all regions/models
47
+ multiModal: true, // Vision supported in some models
48
+ tools: false, // Converse API doesn't support function calling
49
+ maxContextTokens: 200000, // Claude 3 models support 200K
50
+ systemMessageStrategy: 'separate-parameter', // Uses system field
51
+ supportsMultipleSystemMessages: true,
52
+ supportsTemperature: true,
53
+ supportsTopP: true,
54
+ supportsTopK: false,
55
+ supportsSeed: false,
56
+ supportsFrequencyPenalty: false,
57
+ supportsPresencePenalty: false,
58
+ maxStopSequences: 4,
59
+ },
60
+ config: {
61
+ baseURL: this.baseURL,
62
+ region: this.region,
63
+ },
64
+ };
65
+ }
66
+ /**
67
+ * Convert IR to Bedrock format.
68
+ */
69
+ fromIR(request) {
70
+ const { messages, systemParameter } = normalizeSystemMessages(request.messages, this.metadata.capabilities.systemMessageStrategy, this.metadata.capabilities.supportsMultipleSystemMessages);
71
+ const bedrockMessages = messages.map((msg) => {
72
+ const role = msg.role === 'assistant' ? 'assistant' : 'user';
73
+ const content = typeof msg.content === 'string'
74
+ ? [{ text: msg.content }]
75
+ : msg.content.map((block) => {
76
+ if (block.type === 'text') {
77
+ return { text: block.text };
78
+ }
79
+ else if (block.type === 'image') {
80
+ // Convert base64 data or URL to bytes
81
+ const bytes = block.source.type === 'base64' ? block.source.data : ''; // Simplified: should decode base64
82
+ return {
83
+ image: {
84
+ format: 'png', // Simplified: should detect format
85
+ source: { bytes },
86
+ },
87
+ };
88
+ }
89
+ return { text: JSON.stringify(block) };
90
+ });
91
+ return { role, content };
92
+ });
93
+ const bedrockRequest = {
94
+ modelId: request.parameters?.model ||
95
+ this.config.defaultModel ||
96
+ 'anthropic.claude-3-haiku-20240307-v1:0',
97
+ messages: bedrockMessages,
98
+ inferenceConfig: {
99
+ temperature: request.parameters?.temperature,
100
+ maxTokens: request.parameters?.maxTokens,
101
+ topP: request.parameters?.topP,
102
+ stopSequences: request.parameters?.stopSequences
103
+ ? [...request.parameters.stopSequences]
104
+ : undefined,
105
+ },
106
+ };
107
+ // Add system messages
108
+ if (systemParameter) {
109
+ if (typeof systemParameter === 'string') {
110
+ bedrockRequest.system = [{ text: systemParameter }];
111
+ }
112
+ else {
113
+ bedrockRequest.system = systemParameter.map((msg) => ({
114
+ text: typeof msg === 'string' ? msg : msg.text || JSON.stringify(msg),
115
+ }));
116
+ }
117
+ }
118
+ return bedrockRequest;
119
+ }
120
+ /**
121
+ * Convert Bedrock response to IR.
122
+ */
123
+ toIR(response, originalRequest, latencyMs) {
124
+ const message = {
125
+ role: 'assistant',
126
+ content: response.output.message.content.map((c) => c.text).join(''),
127
+ };
128
+ const finishReasonMap = {
129
+ end_turn: 'stop',
130
+ max_tokens: 'length',
131
+ stop_sequence: 'stop',
132
+ content_filtered: 'stop',
133
+ };
134
+ return {
135
+ message,
136
+ finishReason: finishReasonMap[response.stopReason] || 'stop',
137
+ usage: {
138
+ promptTokens: response.usage.inputTokens,
139
+ completionTokens: response.usage.outputTokens,
140
+ totalTokens: response.usage.totalTokens,
141
+ },
142
+ metadata: {
143
+ ...originalRequest.metadata,
144
+ providerResponseId: '', // Bedrock doesn't provide a unique ID in Converse API
145
+ provenance: {
146
+ ...originalRequest.metadata.provenance,
147
+ backend: this.metadata.name,
148
+ },
149
+ custom: {
150
+ ...originalRequest.metadata.custom,
151
+ latencyMs: response.metrics?.latencyMs || latencyMs,
152
+ },
153
+ },
154
+ raw: response,
155
+ };
156
+ }
157
+ /**
158
+ * Execute non-streaming request.
159
+ */
160
+ async execute(request, signal) {
161
+ try {
162
+ const bedrockRequest = this.fromIR(request);
163
+ const startTime = Date.now();
164
+ const response = await fetch(`${this.baseURL}/model/${bedrockRequest.modelId}/converse`, {
165
+ method: 'POST',
166
+ headers: await this.getHeaders('POST', `/model/${bedrockRequest.modelId}/converse`, JSON.stringify(bedrockRequest)),
167
+ body: JSON.stringify(bedrockRequest),
168
+ signal,
169
+ });
170
+ if (!response.ok) {
171
+ throw createErrorFromHttpResponse(response.status, response.statusText, await response.text(), { backend: this.metadata.name });
172
+ }
173
+ const data = (await response.json());
174
+ return this.toIR(data, request, Date.now() - startTime);
175
+ }
176
+ catch (error) {
177
+ if (error instanceof NetworkError || error instanceof ProviderError) {
178
+ throw error;
179
+ }
180
+ throw new ProviderError({
181
+ code: ErrorCode.PROVIDER_ERROR,
182
+ message: `AWS Bedrock request failed: ${error instanceof Error ? error.message : String(error)}`,
183
+ isRetryable: true,
184
+ provenance: { backend: this.metadata.name },
185
+ cause: error instanceof Error ? error : undefined,
186
+ });
187
+ }
188
+ }
189
+ /**
190
+ * Execute streaming request.
191
+ * Note: Streaming support varies by model and region.
192
+ */
193
+ async *executeStream(request, signal) {
194
+ try {
195
+ const bedrockRequest = this.fromIR(request);
196
+ const streamingConfig = mergeStreamingConfig(this.config.streaming);
197
+ const effectiveMode = getEffectiveStreamMode(request.streamMode, undefined, streamingConfig);
198
+ const includeBoth = streamingConfig.includeBoth || effectiveMode === 'accumulated';
199
+ const response = await fetch(`${this.baseURL}/model/${bedrockRequest.modelId}/converse-stream`, {
200
+ method: 'POST',
201
+ headers: await this.getHeaders('POST', `/model/${bedrockRequest.modelId}/converse-stream`, JSON.stringify(bedrockRequest)),
202
+ body: JSON.stringify(bedrockRequest),
203
+ signal,
204
+ });
205
+ if (!response.ok) {
206
+ throw createErrorFromHttpResponse(response.status, response.statusText, await response.text(), { backend: this.metadata.name });
207
+ }
208
+ if (!response.body) {
209
+ throw new StreamError({
210
+ code: ErrorCode.STREAM_ERROR,
211
+ message: 'No response body',
212
+ provenance: { backend: this.metadata.name },
213
+ });
214
+ }
215
+ let sequence = 0;
216
+ let contentBuffer = '';
217
+ yield {
218
+ type: 'start',
219
+ sequence: sequence++,
220
+ metadata: {
221
+ ...request.metadata,
222
+ provenance: {
223
+ ...request.metadata.provenance,
224
+ backend: this.metadata.name,
225
+ },
226
+ },
227
+ };
228
+ const reader = response.body.getReader();
229
+ const decoder = new TextDecoder();
230
+ let buffer = '';
231
+ try {
232
+ while (true) {
233
+ const { done, value } = await reader.read();
234
+ if (done) {
235
+ break;
236
+ }
237
+ buffer += decoder.decode(value, { stream: true });
238
+ // AWS event stream format is binary, but for simplicity we'll parse as JSON lines
239
+ const lines = buffer.split('\n');
240
+ buffer = lines.pop() || '';
241
+ for (const line of lines) {
242
+ if (!line.trim()) {
243
+ continue;
244
+ }
245
+ try {
246
+ const chunk = JSON.parse(line);
247
+ if (chunk.contentBlockDelta?.delta?.text) {
248
+ const delta = chunk.contentBlockDelta.delta.text;
249
+ contentBuffer += delta;
250
+ const contentChunk = {
251
+ type: 'content',
252
+ sequence: sequence++,
253
+ delta: delta,
254
+ role: 'assistant',
255
+ };
256
+ if (includeBoth) {
257
+ contentChunk.accumulated = contentBuffer;
258
+ }
259
+ yield contentChunk;
260
+ }
261
+ if (chunk.messageStop) {
262
+ const finishReasonMap = {
263
+ end_turn: 'stop',
264
+ max_tokens: 'length',
265
+ stop_sequence: 'stop',
266
+ content_filtered: 'stop',
267
+ };
268
+ const doneChunk = {
269
+ type: 'done',
270
+ sequence: sequence++,
271
+ finishReason: finishReasonMap[chunk.messageStop.stopReason] || 'stop',
272
+ message: { role: 'assistant', content: contentBuffer },
273
+ };
274
+ // Include usage if present
275
+ if (chunk.metadata?.usage) {
276
+ doneChunk.usage = {
277
+ promptTokens: chunk.metadata.usage.inputTokens,
278
+ completionTokens: chunk.metadata.usage.outputTokens,
279
+ totalTokens: chunk.metadata.usage.totalTokens,
280
+ };
281
+ }
282
+ yield doneChunk;
283
+ }
284
+ }
285
+ catch (parseError) {
286
+ console.warn('Failed to parse Bedrock stream chunk:', line, parseError);
287
+ }
288
+ }
289
+ }
290
+ }
291
+ finally {
292
+ reader.releaseLock();
293
+ }
294
+ }
295
+ catch (error) {
296
+ yield {
297
+ type: 'error',
298
+ sequence: 0,
299
+ error: {
300
+ code: error instanceof Error ? error.name : 'UNKNOWN_ERROR',
301
+ message: error instanceof Error ? error.message : String(error),
302
+ },
303
+ };
304
+ }
305
+ }
306
+ /**
307
+ * Get HTTP headers with AWS SigV4 signing.
308
+ *
309
+ * SIMPLIFIED VERSION: This implementation assumes AWS credentials are handled
310
+ * externally or uses basic headers. For production, use AWS SDK or aws4fetch
311
+ * for proper SigV4 signing.
312
+ */
313
+ getHeaders(_method, _path, _body) {
314
+ const headers = {
315
+ 'Content-Type': 'application/json',
316
+ Accept: 'application/json',
317
+ };
318
+ // If AWS credentials are provided in config, add Authorization header
319
+ // Note: In production, this should use proper AWS SigV4 signing
320
+ if (this.config.awsAccessKeyId && this.config.awsSecretAccessKey) {
321
+ // Simplified: In production, use AWS SDK or aws4fetch for proper SigV4 signing
322
+ headers['Authorization'] = `AWS4-HMAC-SHA256 Credential=${this.config.awsAccessKeyId}/...`;
323
+ headers['X-Amz-Date'] = new Date().toISOString().replace(/[:-]|\.\d{3}/g, '');
324
+ if (this.config.awsSessionToken) {
325
+ headers['X-Amz-Security-Token'] = this.config.awsSessionToken;
326
+ }
327
+ }
328
+ return Promise.resolve({ ...headers, ...this.config.headers });
329
+ }
330
+ /**
331
+ * Health check.
332
+ */
333
+ healthCheck() {
334
+ try {
335
+ // Bedrock doesn't have a dedicated health endpoint
336
+ // We'll attempt a minimal request
337
+ return Promise.resolve(true); // Simplified: should actually test connectivity
338
+ }
339
+ catch {
340
+ return Promise.resolve(false);
341
+ }
342
+ }
343
+ /**
344
+ * Estimate cost.
345
+ * AWS Bedrock pricing varies by model and region.
346
+ */
347
+ estimateCost(request) {
348
+ const pricing = {
349
+ 'anthropic.claude-3-haiku-20240307-v1:0': { input: 0.25, output: 1.25 },
350
+ 'anthropic.claude-3-sonnet-20240229-v1:0': { input: 3.0, output: 15.0 },
351
+ 'anthropic.claude-3-opus-20240229-v1:0': { input: 15.0, output: 75.0 },
352
+ 'meta.llama3-1-8b-instruct-v1:0': { input: 0.3, output: 0.6 },
353
+ 'meta.llama3-1-70b-instruct-v1:0': { input: 1.0, output: 2.0 },
354
+ };
355
+ const model = request.parameters?.model || this.config.defaultModel || '';
356
+ const modelPricing = pricing[model];
357
+ if (!modelPricing) {
358
+ return Promise.resolve(null);
359
+ }
360
+ const inputTokens = request.messages.reduce((sum, msg) => {
361
+ const content = typeof msg.content === 'string' ? msg.content : '';
362
+ return sum + Math.ceil(content.length / 4);
363
+ }, 0);
364
+ const outputTokens = request.parameters?.maxTokens || 1024;
365
+ const inputCost = (inputTokens / 1_000_000) * modelPricing.input;
366
+ const outputCost = (outputTokens / 1_000_000) * modelPricing.output;
367
+ return Promise.resolve(inputCost + outputCost);
368
+ }
369
+ }
370
+ //# sourceMappingURL=aws-bedrock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-bedrock.js","sourceRoot":"","sources":["../../../src/providers/aws-bedrock.ts"],"names":[],"mappings":"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"}