@plumbus/ai-bedrock 0.1.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/CHANGELOG.md +30 -0
- package/README.md +161 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/bedrock-adapter.d.ts +11 -0
- package/dist/bedrock-adapter.d.ts.map +1 -0
- package/dist/bedrock-adapter.js +582 -0
- package/dist/bedrock-adapter.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pricing.d.ts +103 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +501 -0
- package/dist/pricing.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/instructions/README.md +37 -0
- package/instructions/framework.md +293 -0
- package/instructions/pricing.md +341 -0
- package/package.json +61 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AIProviderAdapter } from '@plumbus/core';
|
|
2
|
+
import { type BedrockAdapterConfig } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create an Amazon Bedrock {@link AIProviderAdapter}.
|
|
5
|
+
*
|
|
6
|
+
* Sync factory: pricing warms on first request (or immediately if you call
|
|
7
|
+
* the returned adapter after awaiting a manual warm — see package docs).
|
|
8
|
+
* When `pricingFilePath` is set, auto-download is skipped.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createBedrockAdapter(config: BedrockAdapterConfig): AIProviderAdapter;
|
|
11
|
+
//# sourceMappingURL=bedrock-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock-adapter.d.ts","sourceRoot":"","sources":["../src/bedrock-adapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,iBAAiB,EAalB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAmC,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA0UxF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CAuUpF"}
|
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, InvokeModelCommand, } from '@aws-sdk/client-bedrock-runtime';
|
|
2
|
+
import { BEDROCK_DEFAULT_EMBEDDING_MODEL } from './types.js';
|
|
3
|
+
import { createPricingStore, normalizeBedrockModelId, } from './pricing.js';
|
|
4
|
+
function combineAbort(userSignal, timeoutSignal) {
|
|
5
|
+
if (!userSignal)
|
|
6
|
+
return timeoutSignal;
|
|
7
|
+
return AbortSignal.any([userSignal, timeoutSignal]);
|
|
8
|
+
}
|
|
9
|
+
function emptyUsage() {
|
|
10
|
+
return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
11
|
+
}
|
|
12
|
+
function mapUsage(raw) {
|
|
13
|
+
if (!raw)
|
|
14
|
+
return emptyUsage();
|
|
15
|
+
const inputTokens = raw.inputTokens ?? 0;
|
|
16
|
+
const outputTokens = raw.outputTokens ?? 0;
|
|
17
|
+
const cacheRead = raw.cacheReadInputTokens ?? 0;
|
|
18
|
+
const cacheWrite = raw.cacheWriteInputTokens ?? 0;
|
|
19
|
+
const usage = {
|
|
20
|
+
inputTokens,
|
|
21
|
+
outputTokens,
|
|
22
|
+
// Bedrock reports cache tokens OUTSIDE `inputTokens`, so the fallback total
|
|
23
|
+
// has to add them back in (AWS: total input = input + cacheRead + cacheWrite).
|
|
24
|
+
totalTokens: raw.totalTokens ?? inputTokens + outputTokens + cacheRead + cacheWrite,
|
|
25
|
+
};
|
|
26
|
+
if (raw.cacheReadInputTokens != null && raw.cacheReadInputTokens > 0) {
|
|
27
|
+
usage.cachedInputTokens = raw.cacheReadInputTokens;
|
|
28
|
+
}
|
|
29
|
+
if (raw.cacheWriteInputTokens != null && raw.cacheWriteInputTokens > 0) {
|
|
30
|
+
usage.cacheWriteTokens = raw.cacheWriteInputTokens;
|
|
31
|
+
}
|
|
32
|
+
return usage;
|
|
33
|
+
}
|
|
34
|
+
function mapBedrockError(err) {
|
|
35
|
+
if (err instanceof Error) {
|
|
36
|
+
const name = err.name;
|
|
37
|
+
if (name === 'ValidationException' || name === 'AccessDeniedException') {
|
|
38
|
+
return new Error(`Bedrock request failed (${name}): ${err.message}`);
|
|
39
|
+
}
|
|
40
|
+
return err;
|
|
41
|
+
}
|
|
42
|
+
return new Error(String(err));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Map a Plumbus tool choice onto Converse. Returns `undefined` for `auto` /
|
|
46
|
+
* unset so the field is omitted: `toolChoice` support is model-dependent on
|
|
47
|
+
* Bedrock and sending an explicit `{ auto: {} }` makes models that only accept
|
|
48
|
+
* `tools` reject the request, while omitting it is the same semantics.
|
|
49
|
+
* `'none'` never reaches here — the caller omits `toolConfig` entirely.
|
|
50
|
+
*/
|
|
51
|
+
function toToolChoice(choice) {
|
|
52
|
+
if (typeof choice === 'object' && choice?.type === 'function') {
|
|
53
|
+
return { tool: { name: choice.function.name } };
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
function toBedrockTools(tools) {
|
|
58
|
+
return tools.map((t) => ({
|
|
59
|
+
toolSpec: {
|
|
60
|
+
name: t.name,
|
|
61
|
+
description: t.description,
|
|
62
|
+
inputSchema: { json: t.parameters },
|
|
63
|
+
},
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
/** Shared Converse / ConverseStream toolConfig. `toolChoice: 'none'` omits tools. */
|
|
67
|
+
function buildToolConfig(request) {
|
|
68
|
+
if (!request.tools || request.tools.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
if (request.toolChoice === 'none')
|
|
71
|
+
return undefined;
|
|
72
|
+
const config = { tools: toBedrockTools(request.tools) };
|
|
73
|
+
const toolChoice = toToolChoice(request.toolChoice);
|
|
74
|
+
if (toolChoice)
|
|
75
|
+
config.toolChoice = toolChoice;
|
|
76
|
+
return config;
|
|
77
|
+
}
|
|
78
|
+
function parseToolUse(block) {
|
|
79
|
+
const id = block.toolUseId ?? `tool_${block.name ?? 'unknown'}`;
|
|
80
|
+
const name = block.name ?? '';
|
|
81
|
+
try {
|
|
82
|
+
return {
|
|
83
|
+
id,
|
|
84
|
+
name,
|
|
85
|
+
argumentsStatus: 'parsed',
|
|
86
|
+
arguments: block.input ?? {},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return {
|
|
91
|
+
id,
|
|
92
|
+
name,
|
|
93
|
+
argumentsStatus: 'invalid',
|
|
94
|
+
rawArguments: JSON.stringify(block.input ?? {}),
|
|
95
|
+
parseError: err instanceof Error ? err.message : String(err),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function assistantContentFromToolCalls(toolCalls) {
|
|
100
|
+
return toolCalls.map((tc) => ({
|
|
101
|
+
toolUse: {
|
|
102
|
+
toolUseId: tc.id,
|
|
103
|
+
name: tc.name,
|
|
104
|
+
input: tc.argumentsStatus === 'parsed' ? tc.arguments : {},
|
|
105
|
+
},
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
/** Converse rejects empty text blocks; a turn must carry something. */
|
|
109
|
+
const EMPTY_TEXT_PLACEHOLDER = '(no content)';
|
|
110
|
+
function toolResultBlock(msg) {
|
|
111
|
+
const toolResult = { text: msg.content || EMPTY_TEXT_PLACEHOLDER };
|
|
112
|
+
return {
|
|
113
|
+
toolResult: {
|
|
114
|
+
toolUseId: msg.toolCallId,
|
|
115
|
+
content: [toolResult],
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function toBedrockMessages(request) {
|
|
120
|
+
if (!request.messages || request.messages.length === 0) {
|
|
121
|
+
return [{ role: 'user', content: [{ text: request.prompt || EMPTY_TEXT_PLACEHOLDER }] }];
|
|
122
|
+
}
|
|
123
|
+
const messages = [];
|
|
124
|
+
for (let i = 0; i < request.messages.length; i++) {
|
|
125
|
+
const msg = request.messages[i];
|
|
126
|
+
if (!msg)
|
|
127
|
+
continue;
|
|
128
|
+
if (msg.role === 'tool') {
|
|
129
|
+
// Converse requires every toolResult for one assistant turn to arrive in a
|
|
130
|
+
// SINGLE following user message (and roles to alternate), while the core
|
|
131
|
+
// tool loop emits one `tool` message per call. Coalesce the whole run —
|
|
132
|
+
// otherwise parallel tool calls produce consecutive user turns with
|
|
133
|
+
// partial result sets, which Bedrock rejects.
|
|
134
|
+
const content = [];
|
|
135
|
+
while (i < request.messages.length) {
|
|
136
|
+
const next = request.messages[i];
|
|
137
|
+
if (next?.role !== 'tool')
|
|
138
|
+
break;
|
|
139
|
+
content.push(toolResultBlock(next));
|
|
140
|
+
i++;
|
|
141
|
+
}
|
|
142
|
+
i--; // step back onto the last consumed entry for the outer loop
|
|
143
|
+
messages.push({ role: 'user', content });
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (msg.role === 'user') {
|
|
147
|
+
messages.push({ role: 'user', content: [{ text: msg.content || EMPTY_TEXT_PLACEHOLDER }] });
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const content = [];
|
|
151
|
+
if (msg.content)
|
|
152
|
+
content.push({ text: msg.content });
|
|
153
|
+
if (msg.toolCalls && msg.toolCalls.length > 0) {
|
|
154
|
+
content.push(...assistantContentFromToolCalls(msg.toolCalls));
|
|
155
|
+
}
|
|
156
|
+
messages.push({
|
|
157
|
+
role: 'assistant',
|
|
158
|
+
content: content.length > 0 ? content : [{ text: EMPTY_TEXT_PLACEHOLDER }],
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return messages;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Modeled ConverseStream failures. They arrive as union members on the event
|
|
165
|
+
* stream (never thrown), so they must be inspected explicitly.
|
|
166
|
+
*/
|
|
167
|
+
function streamEventError(event) {
|
|
168
|
+
const modeled = [
|
|
169
|
+
['InternalServerException', event.internalServerException],
|
|
170
|
+
['ModelStreamErrorException', event.modelStreamErrorException],
|
|
171
|
+
['ValidationException', event.validationException],
|
|
172
|
+
['ThrottlingException', event.throttlingException],
|
|
173
|
+
['ServiceUnavailableException', event.serviceUnavailableException],
|
|
174
|
+
];
|
|
175
|
+
for (const [name, ex] of modeled) {
|
|
176
|
+
if (ex) {
|
|
177
|
+
return `Bedrock request failed (${name}): ${ex.message ?? 'stream terminated by service'}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Converse `outputConfig.textFormat` for provider-side structured outputs.
|
|
184
|
+
*
|
|
185
|
+
* Opt-in (`structuredOutputs: 'native'`): support is model-dependent, and a
|
|
186
|
+
* model that does not accept `outputConfig` fails the whole request, so the
|
|
187
|
+
* default stays on core's validate-and-repair path. Returns undefined when the
|
|
188
|
+
* caller did not ask for a schema.
|
|
189
|
+
*/
|
|
190
|
+
function buildOutputConfig(request, mode) {
|
|
191
|
+
if (mode !== 'native')
|
|
192
|
+
return undefined;
|
|
193
|
+
if (!request.responseSchema)
|
|
194
|
+
return undefined;
|
|
195
|
+
// The tool transport routes the schema through toolConfig instead; forwarding
|
|
196
|
+
// both would double-constrain the response.
|
|
197
|
+
if (request.structuredOutputTransport === 'tool')
|
|
198
|
+
return undefined;
|
|
199
|
+
return {
|
|
200
|
+
textFormat: {
|
|
201
|
+
type: 'json_schema',
|
|
202
|
+
structure: {
|
|
203
|
+
// Converse takes the schema as a JSON *string*, not an object.
|
|
204
|
+
jsonSchema: { name: 'response', schema: JSON.stringify(request.responseSchema) },
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* InvokeModel embedding request body. Titan takes one text per call
|
|
211
|
+
* (`inputText`); Cohere takes a batch plus an `input_type` discriminator.
|
|
212
|
+
*/
|
|
213
|
+
function embeddingBody(modelId, text, inputType) {
|
|
214
|
+
// Matches `cohere.…` and geo-prefixed `us.cohere.…`.
|
|
215
|
+
if (/(^|\.)cohere\./i.test(modelId)) {
|
|
216
|
+
return { texts: [text], input_type: inputType };
|
|
217
|
+
}
|
|
218
|
+
return { inputText: text };
|
|
219
|
+
}
|
|
220
|
+
/** Titan returns `embedding`; Cohere returns `embeddings` (one per input text). */
|
|
221
|
+
function parseEmbeddingResponse(body) {
|
|
222
|
+
const parsed = JSON.parse(new TextDecoder().decode(body));
|
|
223
|
+
if (parsed.embedding) {
|
|
224
|
+
return { embedding: parsed.embedding, tokens: parsed.inputTextTokenCount ?? 0 };
|
|
225
|
+
}
|
|
226
|
+
const cohere = Array.isArray(parsed.embeddings) ? parsed.embeddings : parsed.embeddings?.float;
|
|
227
|
+
const first = cohere?.[0];
|
|
228
|
+
if (first) {
|
|
229
|
+
return { embedding: first, tokens: parsed.inputTextTokenCount ?? 0 };
|
|
230
|
+
}
|
|
231
|
+
throw new Error('Bedrock embedding response missing embedding vector');
|
|
232
|
+
}
|
|
233
|
+
function extractTextAndTools(content) {
|
|
234
|
+
let text = '';
|
|
235
|
+
const toolCalls = [];
|
|
236
|
+
for (const block of content ?? []) {
|
|
237
|
+
if (block.text)
|
|
238
|
+
text += block.text;
|
|
239
|
+
if (block.toolUse)
|
|
240
|
+
toolCalls.push(parseToolUse(block.toolUse));
|
|
241
|
+
}
|
|
242
|
+
return { text, toolCalls };
|
|
243
|
+
}
|
|
244
|
+
function mapStopReason(reason) {
|
|
245
|
+
switch (reason) {
|
|
246
|
+
case 'tool_use':
|
|
247
|
+
return 'tool_calls';
|
|
248
|
+
case 'max_tokens':
|
|
249
|
+
// Ran out of room, same class as max_tokens for callers.
|
|
250
|
+
case 'model_context_window_exceeded':
|
|
251
|
+
return 'length';
|
|
252
|
+
// Core normalizes 'content_filter'/'refusal' to 'refusal'; the Converse
|
|
253
|
+
// spellings would otherwise fall through to 'other' and look like an
|
|
254
|
+
// unknown state rather than a blocked response.
|
|
255
|
+
case 'content_filtered':
|
|
256
|
+
case 'guardrail_intervened':
|
|
257
|
+
return 'refusal';
|
|
258
|
+
case 'end_turn':
|
|
259
|
+
case 'stop_sequence':
|
|
260
|
+
return 'stop';
|
|
261
|
+
default:
|
|
262
|
+
return reason ?? 'stop';
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function filterModels(entries, filter) {
|
|
266
|
+
const joined = entries.map((e) => ({
|
|
267
|
+
id: e.id,
|
|
268
|
+
provider: 'bedrock',
|
|
269
|
+
kind: e.rate.kind ?? 'unknown',
|
|
270
|
+
inputPerMTok: e.rate.inputPerMTok,
|
|
271
|
+
outputPerMTok: e.rate.outputPerMTok,
|
|
272
|
+
}));
|
|
273
|
+
if (!filter?.kind)
|
|
274
|
+
return joined;
|
|
275
|
+
const allowed = new Set(Array.isArray(filter.kind) ? filter.kind : [filter.kind]);
|
|
276
|
+
return joined.filter((m) => m.kind !== 'unknown' && allowed.has(m.kind));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create an Amazon Bedrock {@link AIProviderAdapter}.
|
|
280
|
+
*
|
|
281
|
+
* Sync factory: pricing warms on first request (or immediately if you call
|
|
282
|
+
* the returned adapter after awaiting a manual warm — see package docs).
|
|
283
|
+
* When `pricingFilePath` is set, auto-download is skipped.
|
|
284
|
+
*/
|
|
285
|
+
export function createBedrockAdapter(config) {
|
|
286
|
+
const defaultModel = config.defaultModel ?? 'anthropic.claude-sonnet-4-5-20250929-v1:0';
|
|
287
|
+
const defaultEmbeddingModel = config.defaultEmbeddingModel ?? BEDROCK_DEFAULT_EMBEDDING_MODEL;
|
|
288
|
+
const defaultTimeout = config.requestTimeout ?? 120_000;
|
|
289
|
+
const embedConcurrency = Math.max(1, config.embedConcurrency ?? 4);
|
|
290
|
+
const inputType = config.embeddingInputType ?? 'search_document';
|
|
291
|
+
const structuredOutputs = config.structuredOutputs ?? 'off';
|
|
292
|
+
const client = config.runtimeClient ??
|
|
293
|
+
new BedrockRuntimeClient({
|
|
294
|
+
region: config.region,
|
|
295
|
+
credentials: config.credentials,
|
|
296
|
+
endpoint: config.endpoint,
|
|
297
|
+
});
|
|
298
|
+
const pricing = config.pricingStore ??
|
|
299
|
+
createPricingStore({
|
|
300
|
+
region: config.region,
|
|
301
|
+
pricingFilePath: config.pricingFilePath,
|
|
302
|
+
pricingCacheTtlMs: config.pricingCacheTtlMs,
|
|
303
|
+
pricingRefreshTimeoutMs: config.pricingRefreshTimeoutMs,
|
|
304
|
+
});
|
|
305
|
+
const shouldWarmOnCreate = config.warmPricingOnCreate !== false && config.pricingStore == null;
|
|
306
|
+
if (shouldWarmOnCreate) {
|
|
307
|
+
// Kick off warm without blocking factory; methods await the same promise.
|
|
308
|
+
void pricing.warm().catch((err) => {
|
|
309
|
+
console.warn(`[plumbus/ai-bedrock] pricing warm failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
async function ensurePricing() {
|
|
313
|
+
// Always warm before inference / listModels so file mode and auto-download
|
|
314
|
+
// work even when warmPricingOnCreate is false (tests / smokes).
|
|
315
|
+
try {
|
|
316
|
+
await pricing.warm();
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
if (config.pricingFilePath) {
|
|
320
|
+
throw err instanceof Error
|
|
321
|
+
? err
|
|
322
|
+
: new Error(`Failed to load Bedrock pricing file: ${String(err)}`);
|
|
323
|
+
}
|
|
324
|
+
// Auto-download failures already warn inside the store.
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
name: 'bedrock',
|
|
329
|
+
capabilities: {
|
|
330
|
+
tools: true,
|
|
331
|
+
streamingTools: true,
|
|
332
|
+
parallelToolCalls: true,
|
|
333
|
+
parallelToolCallControl: false,
|
|
334
|
+
namedToolChoice: true,
|
|
335
|
+
},
|
|
336
|
+
async complete(request) {
|
|
337
|
+
await ensurePricing();
|
|
338
|
+
const modelId = request.model ?? defaultModel;
|
|
339
|
+
const messages = toBedrockMessages(request);
|
|
340
|
+
const system = request.system
|
|
341
|
+
? [{ text: request.system }]
|
|
342
|
+
: undefined;
|
|
343
|
+
const toolConfig = buildToolConfig(request);
|
|
344
|
+
const inferenceConfig = {};
|
|
345
|
+
if (request.maxTokens != null)
|
|
346
|
+
inferenceConfig.maxTokens = request.maxTokens;
|
|
347
|
+
if (request.temperature != null)
|
|
348
|
+
inferenceConfig.temperature = request.temperature;
|
|
349
|
+
try {
|
|
350
|
+
const out = await client.send(new ConverseCommand({
|
|
351
|
+
modelId,
|
|
352
|
+
messages,
|
|
353
|
+
system,
|
|
354
|
+
inferenceConfig: Object.keys(inferenceConfig).length > 0 ? inferenceConfig : undefined,
|
|
355
|
+
toolConfig,
|
|
356
|
+
outputConfig: buildOutputConfig(request, structuredOutputs),
|
|
357
|
+
}), {
|
|
358
|
+
abortSignal: combineAbort(request.signal, AbortSignal.timeout(request.timeout ?? defaultTimeout)),
|
|
359
|
+
});
|
|
360
|
+
const { text, toolCalls } = extractTextAndTools(out.output?.message?.content);
|
|
361
|
+
const usage = mapUsage(out.usage);
|
|
362
|
+
const finishReason = mapStopReason(out.stopReason);
|
|
363
|
+
const cost = pricing.calculateCost(modelId, usage);
|
|
364
|
+
const response = {
|
|
365
|
+
content: text,
|
|
366
|
+
model: modelId,
|
|
367
|
+
usage,
|
|
368
|
+
finishReason,
|
|
369
|
+
};
|
|
370
|
+
// Left unset when no rate is known so core falls back instead of
|
|
371
|
+
// recording unpriced spend as $0.
|
|
372
|
+
if (cost != null)
|
|
373
|
+
response.cost = cost;
|
|
374
|
+
if (toolCalls.length > 0) {
|
|
375
|
+
response.toolCalls = toolCalls;
|
|
376
|
+
}
|
|
377
|
+
return response;
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
throw mapBedrockError(err);
|
|
381
|
+
}
|
|
382
|
+
},
|
|
383
|
+
async *stream(request) {
|
|
384
|
+
await ensurePricing();
|
|
385
|
+
const modelId = request.model ?? defaultModel;
|
|
386
|
+
const messages = toBedrockMessages(request);
|
|
387
|
+
const system = request.system
|
|
388
|
+
? [{ text: request.system }]
|
|
389
|
+
: undefined;
|
|
390
|
+
const inferenceConfig = {};
|
|
391
|
+
if (request.maxTokens != null)
|
|
392
|
+
inferenceConfig.maxTokens = request.maxTokens;
|
|
393
|
+
if (request.temperature != null)
|
|
394
|
+
inferenceConfig.temperature = request.temperature;
|
|
395
|
+
const toolConfig = buildToolConfig(request);
|
|
396
|
+
let usage = emptyUsage();
|
|
397
|
+
let finishReason = 'stop';
|
|
398
|
+
const toolCalls = [];
|
|
399
|
+
/** Accumulate streamed tool-use input JSON by content-block index. */
|
|
400
|
+
const toolInputByIndex = new Map();
|
|
401
|
+
try {
|
|
402
|
+
const out = await client.send(new ConverseStreamCommand({
|
|
403
|
+
modelId,
|
|
404
|
+
messages,
|
|
405
|
+
system,
|
|
406
|
+
inferenceConfig: Object.keys(inferenceConfig).length > 0 ? inferenceConfig : undefined,
|
|
407
|
+
toolConfig,
|
|
408
|
+
outputConfig: buildOutputConfig(request, structuredOutputs),
|
|
409
|
+
}), {
|
|
410
|
+
abortSignal: combineAbort(request.signal, AbortSignal.timeout(request.timeout ?? defaultTimeout)),
|
|
411
|
+
});
|
|
412
|
+
if (!out.stream) {
|
|
413
|
+
yield { type: 'error', error: 'Bedrock ConverseStream returned no stream' };
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
for await (const event of out.stream) {
|
|
417
|
+
// ConverseStream models its failures as members of the event union
|
|
418
|
+
// rather than throwing, so an unhandled one would end the loop and be
|
|
419
|
+
// reported as a clean `done` with truncated content.
|
|
420
|
+
const streamError = streamEventError(event);
|
|
421
|
+
if (streamError) {
|
|
422
|
+
yield { type: 'error', error: streamError };
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if (event.contentBlockDelta?.delta?.text) {
|
|
426
|
+
yield { type: 'content_delta', delta: event.contentBlockDelta.delta.text };
|
|
427
|
+
}
|
|
428
|
+
const blockIndex = event.contentBlockStart?.contentBlockIndex;
|
|
429
|
+
if (event.contentBlockStart?.start?.toolUse) {
|
|
430
|
+
const tu = event.contentBlockStart.start.toolUse;
|
|
431
|
+
const id = tu.toolUseId ?? `tool_${tu.name ?? 'unknown'}`;
|
|
432
|
+
const name = tu.name ?? '';
|
|
433
|
+
const idx = blockIndex ?? toolInputByIndex.size;
|
|
434
|
+
toolInputByIndex.set(idx, { id, name, raw: '' });
|
|
435
|
+
}
|
|
436
|
+
if (event.contentBlockDelta?.delta?.toolUse?.input != null) {
|
|
437
|
+
const idx = event.contentBlockDelta.contentBlockIndex ?? -1;
|
|
438
|
+
const entry = toolInputByIndex.get(idx);
|
|
439
|
+
if (entry) {
|
|
440
|
+
entry.raw += String(event.contentBlockDelta.delta.toolUse.input);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
if (event.contentBlockStop && event.contentBlockStop.contentBlockIndex != null) {
|
|
444
|
+
const entry = toolInputByIndex.get(event.contentBlockStop.contentBlockIndex);
|
|
445
|
+
if (entry) {
|
|
446
|
+
try {
|
|
447
|
+
toolCalls.push({
|
|
448
|
+
id: entry.id,
|
|
449
|
+
name: entry.name,
|
|
450
|
+
argumentsStatus: 'parsed',
|
|
451
|
+
arguments: entry.raw ? JSON.parse(entry.raw) : {},
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
catch (err) {
|
|
455
|
+
toolCalls.push({
|
|
456
|
+
id: entry.id,
|
|
457
|
+
name: entry.name,
|
|
458
|
+
argumentsStatus: 'invalid',
|
|
459
|
+
rawArguments: entry.raw,
|
|
460
|
+
parseError: err instanceof Error ? err.message : String(err),
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
toolInputByIndex.delete(event.contentBlockStop.contentBlockIndex);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
if (event.metadata?.usage) {
|
|
467
|
+
usage = mapUsage(event.metadata.usage);
|
|
468
|
+
yield { type: 'usage', usage };
|
|
469
|
+
}
|
|
470
|
+
if (event.messageStop?.stopReason) {
|
|
471
|
+
finishReason = mapStopReason(event.messageStop.stopReason);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// Flush any tool starts that never got a contentBlockStop (name-only stubs).
|
|
475
|
+
for (const entry of toolInputByIndex.values()) {
|
|
476
|
+
if (!toolCalls.some((t) => t.id === entry.id)) {
|
|
477
|
+
toolCalls.push({
|
|
478
|
+
id: entry.id,
|
|
479
|
+
name: entry.name,
|
|
480
|
+
argumentsStatus: 'parsed',
|
|
481
|
+
arguments: {},
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
const cost = pricing.calculateCost(modelId, usage);
|
|
486
|
+
const done = {
|
|
487
|
+
type: 'done',
|
|
488
|
+
usage,
|
|
489
|
+
finishReason,
|
|
490
|
+
};
|
|
491
|
+
if (cost != null)
|
|
492
|
+
done.cost = cost;
|
|
493
|
+
if (toolCalls.length > 0)
|
|
494
|
+
done.toolCalls = toolCalls;
|
|
495
|
+
yield done;
|
|
496
|
+
}
|
|
497
|
+
catch (err) {
|
|
498
|
+
yield {
|
|
499
|
+
type: 'error',
|
|
500
|
+
error: mapBedrockError(err).message,
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
async embed(request) {
|
|
505
|
+
await ensurePricing();
|
|
506
|
+
const modelId = request.model ?? defaultEmbeddingModel;
|
|
507
|
+
const embeddings = new Array(request.texts.length);
|
|
508
|
+
let totalTokens = 0;
|
|
509
|
+
async function embedOne(text, index) {
|
|
510
|
+
const out = await client.send(new InvokeModelCommand({
|
|
511
|
+
modelId,
|
|
512
|
+
contentType: 'application/json',
|
|
513
|
+
accept: 'application/json',
|
|
514
|
+
body: new TextEncoder().encode(JSON.stringify(embeddingBody(modelId, text, inputType))),
|
|
515
|
+
}), { abortSignal: AbortSignal.timeout(defaultTimeout) });
|
|
516
|
+
const parsed = parseEmbeddingResponse(out.body);
|
|
517
|
+
embeddings[index] = parsed.embedding;
|
|
518
|
+
totalTokens += parsed.tokens;
|
|
519
|
+
}
|
|
520
|
+
try {
|
|
521
|
+
// Titan accepts one text per InvokeModel call, so a corpus ingest is N
|
|
522
|
+
// round trips — run a bounded number concurrently while keeping output
|
|
523
|
+
// order aligned with `request.texts`.
|
|
524
|
+
const queue = request.texts.map((text, index) => ({ text, index }));
|
|
525
|
+
let cursor = 0;
|
|
526
|
+
const workers = Math.min(embedConcurrency, queue.length);
|
|
527
|
+
await Promise.all(Array.from({ length: workers }, async () => {
|
|
528
|
+
while (cursor < queue.length) {
|
|
529
|
+
const item = queue[cursor++];
|
|
530
|
+
if (!item)
|
|
531
|
+
break;
|
|
532
|
+
await embedOne(item.text, item.index);
|
|
533
|
+
}
|
|
534
|
+
}));
|
|
535
|
+
}
|
|
536
|
+
catch (err) {
|
|
537
|
+
throw mapBedrockError(err);
|
|
538
|
+
}
|
|
539
|
+
const cost = pricing.calculateCost(modelId, {
|
|
540
|
+
inputTokens: totalTokens,
|
|
541
|
+
outputTokens: 0,
|
|
542
|
+
});
|
|
543
|
+
const response = {
|
|
544
|
+
embeddings,
|
|
545
|
+
model: modelId,
|
|
546
|
+
usage: { totalTokens },
|
|
547
|
+
};
|
|
548
|
+
if (cost != null)
|
|
549
|
+
response.cost = cost;
|
|
550
|
+
return response;
|
|
551
|
+
},
|
|
552
|
+
async listModels(filter) {
|
|
553
|
+
// Contract (AIProviderAdapter): never throw — warn once and return [].
|
|
554
|
+
// Inference still fails loudly on a bad pricing file; only discovery is
|
|
555
|
+
// degraded, since a missing rate is not a reason to break model listing.
|
|
556
|
+
try {
|
|
557
|
+
await ensurePricing();
|
|
558
|
+
}
|
|
559
|
+
catch (err) {
|
|
560
|
+
console.warn(`[plumbus/ai-bedrock] listModels could not load pricing: ${err instanceof Error ? err.message : String(err)}`);
|
|
561
|
+
return [];
|
|
562
|
+
}
|
|
563
|
+
const entries = pricing.listRates().map(({ id, rate }) => ({
|
|
564
|
+
id,
|
|
565
|
+
rate: {
|
|
566
|
+
inputPerMTok: rate.inputPerMTok,
|
|
567
|
+
outputPerMTok: rate.outputPerMTok,
|
|
568
|
+
kind: rate.kind,
|
|
569
|
+
},
|
|
570
|
+
}));
|
|
571
|
+
// Prefer family keys (dedupe versioned duplicates from file).
|
|
572
|
+
const byFamily = new Map();
|
|
573
|
+
for (const e of entries) {
|
|
574
|
+
const family = normalizeBedrockModelId(e.id);
|
|
575
|
+
if (!byFamily.has(family))
|
|
576
|
+
byFamily.set(family, { ...e, id: family });
|
|
577
|
+
}
|
|
578
|
+
return filterModels([...byFamily.values()], filter);
|
|
579
|
+
},
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
//# sourceMappingURL=bedrock-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock-adapter.js","sourceRoot":"","sources":["../src/bedrock-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @plumbus/ai-bedrock — Amazon Bedrock adapter for Plumbus AI (`AIProviderAdapter`).
|
|
3
|
+
*
|
|
4
|
+
* Use Converse for chat and InvokeModel for Titan embeddings. Pricing is
|
|
5
|
+
* package-owned (auto-download by region or `pricingFilePath`).
|
|
6
|
+
*/
|
|
7
|
+
export { createBedrockAdapter } from './bedrock-adapter.js';
|
|
8
|
+
export { BEDROCK_DEFAULT_EMBEDDING_MODEL, type BedrockAdapterConfig, type BedrockModelRate, type BedrockPricingFileV1, } from './types.js';
|
|
9
|
+
export { createPricingStore, extractModelIdFromOfferAttrs, inferFamilyFromDisplayName, normalizeBedrockModelId, parseAwsOfferRates, parsePricingFile, type BedrockPricingStore, } from './pricing.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,+BAA+B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @plumbus/ai-bedrock — Amazon Bedrock adapter for Plumbus AI (`AIProviderAdapter`).
|
|
3
|
+
*
|
|
4
|
+
* Use Converse for chat and InvokeModel for Titan embeddings. Pricing is
|
|
5
|
+
* package-owned (auto-download by region or `pricingFilePath`).
|
|
6
|
+
*/
|
|
7
|
+
export { createBedrockAdapter } from './bedrock-adapter.js';
|
|
8
|
+
export { BEDROCK_DEFAULT_EMBEDDING_MODEL, } from './types.js';
|
|
9
|
+
export { createPricingStore, extractModelIdFromOfferAttrs, inferFamilyFromDisplayName, normalizeBedrockModelId, parseAwsOfferRates, parsePricingFile, } from './pricing.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,+BAA+B,GAIhC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,cAAc,CAAC"}
|