@mappies/miniwat-provider-bedrock 0.5.0 → 0.7.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/dist/index.cjs +32 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -13
- package/dist/index.d.ts +5 -13
- package/dist/index.js +32 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -20,11 +20,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
-
|
|
23
|
+
BedrockModel: () => BedrockModel
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(index_exports);
|
|
26
26
|
|
|
27
|
-
// src/
|
|
27
|
+
// src/bedrockModel.ts
|
|
28
28
|
var import_stream = require("stream");
|
|
29
29
|
var import_miniwat_agent_core3 = require("@mappies/miniwat-agent-core");
|
|
30
30
|
var import_miniwat_mcp_core = require("@mappies/miniwat-mcp-core");
|
|
@@ -58,7 +58,7 @@ var BedrockMessage = class extends import_miniwat_agent_core.Message {
|
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
60
|
|
|
61
|
-
// src/
|
|
61
|
+
// src/bedrockModel.ts
|
|
62
62
|
var import_client_bedrock_runtime = require("@aws-sdk/client-bedrock-runtime");
|
|
63
63
|
|
|
64
64
|
// src/bedrockAdapter.ts
|
|
@@ -146,12 +146,11 @@ var BedrockAdapter = class {
|
|
|
146
146
|
}
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
-
// src/
|
|
150
|
-
var
|
|
149
|
+
// src/bedrockModel.ts
|
|
150
|
+
var BedrockModel = class {
|
|
151
151
|
constructor(options) {
|
|
152
152
|
this.toolDispatcher = new import_miniwat_mcp_core.ToolDispatcher(options?.mcpConfig);
|
|
153
153
|
this.modelId = options.modelId;
|
|
154
|
-
this.systemPrompt = options?.systemPrompt;
|
|
155
154
|
this.client = new import_client_bedrock_runtime.BedrockRuntimeClient({
|
|
156
155
|
region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,
|
|
157
156
|
...options?.clientConfig
|
|
@@ -196,16 +195,17 @@ var BedrockLlmProvider = class {
|
|
|
196
195
|
}
|
|
197
196
|
return results;
|
|
198
197
|
}
|
|
199
|
-
async runConversationLoop(messages, inference, options) {
|
|
198
|
+
async runConversationLoop(messages, inference, options, instruction) {
|
|
200
199
|
let currentMessages = [...messages];
|
|
201
200
|
let iterations = 0;
|
|
202
201
|
while (true) {
|
|
203
202
|
if (++iterations > 20) throw new Error("Too many tool iterations");
|
|
204
203
|
const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);
|
|
204
|
+
const systemPrompt = await (0, import_miniwat_agent_core3.resolveInstructionValue)(instruction?.system?.value, void 0);
|
|
205
205
|
const converseCommandInput = {
|
|
206
206
|
modelId: this.modelId,
|
|
207
207
|
messages: brMessages,
|
|
208
|
-
system:
|
|
208
|
+
system: systemPrompt ? [{ text: systemPrompt }] : void 0,
|
|
209
209
|
inferenceConfig: {
|
|
210
210
|
temperature: inference?.temperature ?? 0.2,
|
|
211
211
|
maxTokens: inference?.maxTokens,
|
|
@@ -328,12 +328,17 @@ var BedrockLlmProvider = class {
|
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
|
-
async invoke(messages,
|
|
332
|
-
const response = await this.runConversationLoop(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
331
|
+
async invoke(messages, option) {
|
|
332
|
+
const response = await this.runConversationLoop(
|
|
333
|
+
messages,
|
|
334
|
+
option?.inference,
|
|
335
|
+
{
|
|
336
|
+
streaming: false,
|
|
337
|
+
onThinking: option?.event?.onThinking,
|
|
338
|
+
onTooling: option?.event?.onTooling
|
|
339
|
+
},
|
|
340
|
+
option?.instruction
|
|
341
|
+
);
|
|
337
342
|
messages.push(response.message);
|
|
338
343
|
return new import_miniwat_agent_core3.ResponseMessage({
|
|
339
344
|
stopReason: response.stopReason,
|
|
@@ -341,16 +346,21 @@ var BedrockLlmProvider = class {
|
|
|
341
346
|
message: response.message
|
|
342
347
|
});
|
|
343
348
|
}
|
|
344
|
-
async stream(messages,
|
|
349
|
+
async stream(messages, option) {
|
|
345
350
|
const out = new import_stream.PassThrough({ encoding: "utf8" });
|
|
346
351
|
(async () => {
|
|
347
352
|
try {
|
|
348
|
-
await this.runConversationLoop(
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
353
|
+
await this.runConversationLoop(
|
|
354
|
+
messages,
|
|
355
|
+
option?.inference,
|
|
356
|
+
{
|
|
357
|
+
streaming: true,
|
|
358
|
+
onChunk: (c) => out.write(c),
|
|
359
|
+
onThinking: option?.event?.onThinking,
|
|
360
|
+
onTooling: option?.event?.onTooling
|
|
361
|
+
},
|
|
362
|
+
option?.instruction
|
|
363
|
+
);
|
|
354
364
|
out.write("");
|
|
355
365
|
out.end();
|
|
356
366
|
} catch (e) {
|
|
@@ -364,6 +374,6 @@ var BedrockLlmProvider = class {
|
|
|
364
374
|
};
|
|
365
375
|
// Annotate the CommonJS export names for ESM import in node:
|
|
366
376
|
0 && (module.exports = {
|
|
367
|
-
|
|
377
|
+
BedrockModel
|
|
368
378
|
});
|
|
369
379
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/bedrockLlmProvider.ts","../src/bedrockMessage.ts","../src/bedrockAdapter.ts"],"sourcesContent":["export { BedrockLlmProvider } from './bedrockLlmProvider';","import { PassThrough, Readable } from \"stream\";\nimport { ResponseMessage, Message, LlmProvider, InferenceOptions, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\nimport { McpConfig, ToolDispatcher } from '@mappies/miniwat-mcp-core'\nimport BedrockMessage from \"./bedrockMessage\";\nimport { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, Message as BrMessage, StopReason, BedrockRuntimeClientConfig, ConverseStreamCommandInput } from \"@aws-sdk/client-bedrock-runtime\";\nimport { BedrockAdapter } from \"./bedrockAdapter\";\n\nexport class BedrockLlmProvider implements LlmProvider\n{\n private modelId: string;\n private systemPrompt?: string;\n private toolDispatcher: ToolDispatcher;\n private client: BedrockRuntimeClient;\n\n constructor(options: { region?: string; modelId: string; systemPrompt?: string; mcpConfig?:McpConfig, clientConfig?: BedrockRuntimeClientConfig; })\n {\n this.toolDispatcher = new ToolDispatcher(options?.mcpConfig);\n this.modelId = options.modelId;\n this.systemPrompt = options?.systemPrompt;\n\n this.client = new BedrockRuntimeClient({\n region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,\n ...options?.clientConfig\n });\n }\n\n private async streamBufferedText(chunks: string[], write: (chunk: string) => void)\n {\n for(const chunk of chunks)\n {\n write(chunk);\n await new Promise(r => setTimeout(r, 8 + Math.random() * 12));\n }\n }\n\n private extractAssistantText(res: any, messages: BrMessage[]): string\n {\n const content = res?.output?.message?.content ?? [];\n let text = content.map((c: any) => c.text ?? \"\").join(\"\");\n\n if(!text)\n {\n text = BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(res.stopReason);\n }\n\n return text;\n }\n\n private async executeTools(toolUses: ToolUse[], opts?: any): Promise<ToolResult[]>\n {\n const results: ToolResult[] = [];\n\n for(const toolUse of toolUses)\n {\n try\n {\n const resultPromise = this.toolDispatcher.execute(toolUse.name, toolUse.input);\n\n // Show a thinking message for the tool\n if (opts?.onThinking && toolUse.name)\n {\n const inputText = await this.toolDispatcher.getInputText(toolUse.name, toolUse.input);\n if(inputText) opts.onThinking(inputText);\n }\n\n const result = await resultPromise;\n\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(result),\n status: true\n });\n }\n catch(err: any)\n {\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(err),\n status: false\n });\n }\n }\n\n return results;\n }\n\n private async runConversationLoop(messages: Message[], \n inference?: InferenceOptions, \n options?: { streaming?: boolean; \n onChunk?: (chunk: string) => void, \n onThinking?: (msg: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void>\n }): Promise<{ message: Message; stopReason?: StopReason; usage?: any }>\n {\n let currentMessages = [...messages];\n let iterations = 0;\n\n while(true)\n {\n if (++iterations > 20) throw new Error(\"Too many tool iterations\");\n\n const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);\n\n const converseCommandInput:ConverseStreamCommandInput = {\n modelId: this.modelId,\n messages: brMessages,\n system: this.systemPrompt ? [{ text: this.systemPrompt }] : undefined,\n inferenceConfig: {\n temperature: inference?.temperature ?? 0.2,\n maxTokens: inference?.maxTokens,\n topP: inference?.topP\n }\n }\n\n let tools = (await this.toolDispatcher.list()).map(BedrockAdapter.toBedrockTool);\n\n if(tools.length > 0)\n {\n converseCommandInput.toolConfig = { tools }\n }\n\n if (options?.streaming)\n {\n const res = await this.client.send(new ConverseStreamCommand(converseCommandInput));\n\n let chunks: string[] = [];\n let streamingStarted = false;\n let toolUses: ToolUse[] = [];\n let currentToolUse: ToolUse | undefined;\n let assistantText = '';\n\n for await (const event of res.stream ?? [])\n {\n\n if (event.modelStreamErrorException)\n {\n throw new Error(event.modelStreamErrorException?.message ?? \"Model stream error\");\n }\n\n if (event.contentBlockDelta?.delta?.text)\n {\n const chunk = event.contentBlockDelta.delta.text;\n assistantText += chunk;\n\n if (!streamingStarted)\n {\n chunks.push(chunk);\n\n if (chunks.length > 20)\n {\n streamingStarted = true;\n await this.streamBufferedText(chunks, options.onChunk!);\n chunks = [];\n }\n }\n else\n {\n options.onChunk?.(chunk);\n }\n }\n\n if (event.contentBlockStart?.start?.toolUse)\n {\n currentToolUse = {\n toolUseId: event.contentBlockStart.start.toolUse.toolUseId as string,\n name: event.contentBlockStart.start.toolUse.name as string,\n inputBuffer: \"\"\n };\n toolUses.push(currentToolUse);\n }\n\n if (currentToolUse && event.contentBlockDelta?.delta?.toolUse?.input)\n {\n currentToolUse.inputBuffer += event.contentBlockDelta.delta.toolUse.input;\n }\n\n if (event.contentBlockStop && currentToolUse?.inputBuffer)\n {\n currentToolUse.input = JSON.parse(currentToolUse.inputBuffer);\n delete currentToolUse.inputBuffer;\n currentToolUse = undefined;\n }\n\n if (event.messageStop)\n {\n const reason = event.messageStop.stopReason;\n\n if (reason === \"tool_use\")\n {\n\n if (!streamingStarted && chunks.length > 0)\n {\n await options.onThinking?.(chunks.join(\"\"));\n chunks = [];\n }\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n break;\n }\n\n if (typeof reason === \"string\")\n {\n if (/content|filter|guardrail/i.test(reason))\n {\n throw new Error(\"Output blocked by content filtering policy: \" + reason);\n }\n else if (reason === \"max_tokens\")\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n else if (!streamingStarted)\n {\n if (chunks.length > 0)\n {\n await this.streamBufferedText(chunks, options.onChunk!);\n } else\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n }\n }\n\n return {\n message: BedrockMessage.toAssistantMessage(assistantText),\n stopReason: reason\n };\n }\n }\n }\n else\n {\n const res = await this.client.send(new ConverseCommand(converseCommandInput));\n const text = this.extractAssistantText(res, brMessages);\n\n const content = res?.output?.message?.content ?? [];\n\n if (res.stopReason === \"tool_use\")\n {\n const toolUses = content.filter((c: any) => c.toolUse)\n .map((c: any) => ({\n toolUseId: c.toolUse.toolUseId,\n name: c.toolUse.name,\n input: c.toolUse.input\n }));\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n continue;\n }\n\n const msg = BedrockMessage.toAssistantMessage(text);\n\n return {\n message: msg,\n stopReason: res.stopReason,\n usage: res.usage\n };\n }\n }\n }\n\n async invoke(messages: Message[], inference?: InferenceOptions, callback?: { \n onThinking: (s: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void> \n }): Promise<ResponseMessage>\n {\n const response = await this.runConversationLoop(messages, inference, {\n streaming: false,\n onThinking: callback?.onThinking,\n onTooling: callback?.onTooling\n });\n\n messages.push(response.message);\n\n return new ResponseMessage({\n stopReason: response.stopReason as StopReason,\n tokenUsage: response.usage,\n message: response.message\n });\n }\n\n async stream(messages: Message[], inference?: InferenceOptions, callback?: { \n onThinking: (s: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void> \n }): Promise<Readable>\n {\n const out = new PassThrough({ encoding: \"utf8\" });\n\n (async () =>\n {\n try\n {\n await this.runConversationLoop(messages, inference, {\n streaming: true,\n onChunk: c => out.write(c),\n onThinking: callback?.onThinking,\n onTooling: callback?.onTooling\n });\n\n out.write('');\n out.end();\n }\n catch (e)\n {\n out.emit(\"throw\", e);\n out.write('');\n out.end();\n }\n })();\n\n return out;\n }\n}","import { MessageType, Message, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\n\nexport default class BedrockMessage extends Message\n{\n constructor(data:Partial<Message>)\n {\n super(data)\n }\n \n public static toAssistantMessage(text: string): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n });\n }\n \n public static toToolUseMessage(text:string, toolUses: ToolUse[]): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n toolUse: toolUses.map(({ toolUseId, name, input }) => (<ToolUse>{ toolUseId, name, input })),\n });\n }\n \n public static toToolResultMessage(toolResult: ToolResult[]): Message\n {\n return new Message({\n type: MessageType.ToolResult,\n toolResult\n });\n }\n}","import { MessageType, Message, Tool } from '@mappies/miniwat-agent-core'\nimport { Message as BrMessage, StopReason, Tool as BedrockTool } from \"@aws-sdk/client-bedrock-runtime\";\n\nexport class BedrockAdapter\n{\n static toBedrockTool(tool: Tool): BedrockTool\n {\n return {\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: tool.schema } as any\n }\n };\n }\n \n static toBedrockMessages(history: Message[]): BrMessage[]\n {\n return history\n .filter(m =>\n (m.content ?? \"\").trim().length > 0 ||\n (m.toolUse?.length ?? 0) > 0 ||\n (m.toolResult?.length ?? 0) > 0\n )\n .map(m =>\n {\n const role = m.type === MessageType.User || m.type === MessageType.ToolResult\n ? \"user\"\n : \"assistant\";\n\n const content: any[] = [];\n\n if (m.toolUse?.length)\n {\n content.push(...m.toolUse.map(t => ({ toolUse: t })));\n }\n else if ((m.content ?? \"\").trim().length > 0)\n {\n content.push({ text: m.content });\n }\n\n if (m.toolResult?.length)\n {\n content.push(...m.toolResult.map(r => ({\n toolResult: {\n ...r,\n status: r.status ? \"success\" : \"error\"\n }\n })));\n }\n\n if (content.length === 0)\n {\n content.push({ text: \"\" });\n }\n\n return { role, content };\n });\n }\n\n static toToolResultContent(result: unknown): { text?: string; json?: object }[] \n {\n try \n {\n if(result instanceof Error)\n {\n return [{ text: result.message }];\n }\n\n if(result === null || result === undefined || result === '')\n {\n return [{ text: '' }];\n }\n\n if(typeof result === \"object\") \n {\n let json = JSON.parse(JSON.stringify(result));\n\n if(Array.isArray(json))\n {\n json = { result: json };\n }\n\n return [{ json }];\n }\n\n return [{ text: String(result) }];\n }\n catch (e: unknown) \n {\n const message = e instanceof Error ? e.message : String(e);\n\n return [{\n json: {\n error: \"Failed to serialize tool result\",\n message\n }\n }];\n }\n }\n\n static getResponseFromStopReasonWhenResponseIsEmpty(stopReason: StopReason): string\n {\n switch (stopReason)\n {\n case \"max_tokens\":\n return \"My response was cut off due to length limits. Would you like me to continue or summarize the remaining information?\";\n case \"stop_sequence\":\n return \"I've reached a natural stopping point in my response. Please let me know if you need additional information.\";\n case \"guardrail_intervened\":\n return \"I'm unable to provide a response to this request as it doesn't align with my usage guidelines. Please rephrase your question or ask something else.\";\n case \"content_filtered\":\n return \"I cannot generate a response for this request due to content policy restrictions. Please try rephrasing your question.\";\n case \"model_context_window_exceeded\":\n return \"The conversation or request is too long for me to process. Please try with a shorter input or start a new conversation.\";\n case \"end_turn\":\n return \"What can I help with?\";\n case \"tool_use\":\n return \"\";\n default:\n return \"I couldn't complete the response. Please try again.\";\n }\n }\n}"],"mappings":"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","names":["import_miniwat_agent_core","import_miniwat_agent_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/bedrockModel.ts","../src/bedrockMessage.ts","../src/bedrockAdapter.ts"],"sourcesContent":["export { BedrockModel } from './bedrockModel';","import { PassThrough, Readable } from \"stream\";\nimport { ResponseMessage, Message, InferenceOptions, ToolUse, ToolResult, Model, ModelOption, resolveInstructionValue, Instruction } from '@mappies/miniwat-agent-core'\nimport { McpConfig, ToolDispatcher } from '@mappies/miniwat-mcp-core'\nimport BedrockMessage from \"./bedrockMessage\";\nimport { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, Message as BrMessage, StopReason, BedrockRuntimeClientConfig, ConverseStreamCommandInput } from \"@aws-sdk/client-bedrock-runtime\";\nimport { BedrockAdapter } from \"./bedrockAdapter\";\n\nexport class BedrockModel implements Model\n{\n private modelId: string;\n private toolDispatcher: ToolDispatcher;\n private client: BedrockRuntimeClient;\n\n constructor(options: { region?: string; modelId: string; mcpConfig?:McpConfig, clientConfig?: BedrockRuntimeClientConfig; })\n {\n this.toolDispatcher = new ToolDispatcher(options?.mcpConfig);\n this.modelId = options.modelId;\n\n this.client = new BedrockRuntimeClient({\n region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,\n ...options?.clientConfig\n });\n }\n\n private async streamBufferedText(chunks: string[], write: (chunk: string) => void)\n {\n for(const chunk of chunks)\n {\n write(chunk);\n await new Promise(r => setTimeout(r, 8 + Math.random() * 12));\n }\n }\n\n private extractAssistantText(res: any, messages: BrMessage[]): string\n {\n const content = res?.output?.message?.content ?? [];\n let text = content.map((c: any) => c.text ?? \"\").join(\"\");\n\n if(!text)\n {\n text = BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(res.stopReason);\n }\n\n return text;\n }\n\n private async executeTools(toolUses: ToolUse[], opts?: any): Promise<ToolResult[]>\n {\n const results: ToolResult[] = [];\n\n for(const toolUse of toolUses)\n {\n try\n {\n const resultPromise = this.toolDispatcher.execute(toolUse.name, toolUse.input);\n\n // Show a thinking message for the tool\n if (opts?.onThinking && toolUse.name)\n {\n const inputText = await this.toolDispatcher.getInputText(toolUse.name, toolUse.input);\n if(inputText) opts.onThinking(inputText);\n }\n\n const result = await resultPromise;\n\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(result),\n status: true\n });\n }\n catch(err: any)\n {\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(err),\n status: false\n });\n }\n }\n\n return results;\n }\n\n private async runConversationLoop(messages: Message[], \n inference?: InferenceOptions, \n options?: { streaming?: boolean; \n onChunk?: (chunk: string) => void, \n onThinking?: (msg: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void>\n },\n instruction?: Instruction): Promise<{ message: Message; stopReason?: StopReason; usage?: any }>\n {\n let currentMessages = [...messages];\n let iterations = 0;\n\n while(true)\n {\n if (++iterations > 20) throw new Error(\"Too many tool iterations\");\n\n const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);\n\n const systemPrompt = await resolveInstructionValue(instruction?.system?.value, undefined);\n\n const converseCommandInput:ConverseStreamCommandInput = {\n modelId: this.modelId,\n messages: brMessages,\n system: systemPrompt ? [{ text: systemPrompt }] : undefined,\n inferenceConfig: {\n temperature: inference?.temperature ?? 0.2,\n maxTokens: inference?.maxTokens,\n topP: inference?.topP\n }\n }\n\n let tools = (await this.toolDispatcher.list()).map(BedrockAdapter.toBedrockTool);\n\n if(tools.length > 0)\n {\n converseCommandInput.toolConfig = { tools }\n }\n\n if (options?.streaming)\n {\n const res = await this.client.send(new ConverseStreamCommand(converseCommandInput));\n\n let chunks: string[] = [];\n let streamingStarted = false;\n let toolUses: ToolUse[] = [];\n let currentToolUse: ToolUse | undefined;\n let assistantText = '';\n\n for await (const event of res.stream ?? [])\n {\n\n if (event.modelStreamErrorException)\n {\n throw new Error(event.modelStreamErrorException?.message ?? \"Model stream error\");\n }\n\n if (event.contentBlockDelta?.delta?.text)\n {\n const chunk = event.contentBlockDelta.delta.text;\n assistantText += chunk;\n\n if (!streamingStarted)\n {\n chunks.push(chunk);\n\n if (chunks.length > 20)\n {\n streamingStarted = true;\n await this.streamBufferedText(chunks, options.onChunk!);\n chunks = [];\n }\n }\n else\n {\n options.onChunk?.(chunk);\n }\n }\n\n if (event.contentBlockStart?.start?.toolUse)\n {\n currentToolUse = {\n toolUseId: event.contentBlockStart.start.toolUse.toolUseId as string,\n name: event.contentBlockStart.start.toolUse.name as string,\n inputBuffer: \"\"\n };\n toolUses.push(currentToolUse);\n }\n\n if (currentToolUse && event.contentBlockDelta?.delta?.toolUse?.input)\n {\n currentToolUse.inputBuffer += event.contentBlockDelta.delta.toolUse.input;\n }\n\n if (event.contentBlockStop && currentToolUse?.inputBuffer)\n {\n currentToolUse.input = JSON.parse(currentToolUse.inputBuffer);\n delete currentToolUse.inputBuffer;\n currentToolUse = undefined;\n }\n\n if (event.messageStop)\n {\n const reason = event.messageStop.stopReason;\n\n if (reason === \"tool_use\")\n {\n\n if (!streamingStarted && chunks.length > 0)\n {\n await options.onThinking?.(chunks.join(\"\"));\n chunks = [];\n }\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n break;\n }\n\n if (typeof reason === \"string\")\n {\n if (/content|filter|guardrail/i.test(reason))\n {\n throw new Error(\"Output blocked by content filtering policy: \" + reason);\n }\n else if (reason === \"max_tokens\")\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n else if (!streamingStarted)\n {\n if (chunks.length > 0)\n {\n await this.streamBufferedText(chunks, options.onChunk!);\n } else\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n }\n }\n\n return {\n message: BedrockMessage.toAssistantMessage(assistantText),\n stopReason: reason\n };\n }\n }\n }\n else\n {\n const res = await this.client.send(new ConverseCommand(converseCommandInput));\n const text = this.extractAssistantText(res, brMessages);\n\n const content = res?.output?.message?.content ?? [];\n\n if (res.stopReason === \"tool_use\")\n {\n const toolUses = content.filter((c: any) => c.toolUse)\n .map((c: any) => ({\n toolUseId: c.toolUse.toolUseId,\n name: c.toolUse.name,\n input: c.toolUse.input\n }));\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n continue;\n }\n\n const msg = BedrockMessage.toAssistantMessage(text);\n\n return {\n message: msg,\n stopReason: res.stopReason,\n usage: res.usage\n };\n }\n }\n }\n\n async invoke(messages: Message[], option?: ModelOption): Promise<ResponseMessage>\n {\n const response = await this.runConversationLoop(messages, option?.inference, {\n streaming: false,\n onThinking: option?.event?.onThinking,\n onTooling: option?.event?.onTooling\n },\n option?.instruction);\n\n messages.push(response.message);\n\n return new ResponseMessage({\n stopReason: response.stopReason as StopReason,\n tokenUsage: response.usage,\n message: response.message\n });\n }\n\n async stream(messages: Message[], option?: ModelOption): Promise<Readable>\n {\n const out = new PassThrough({ encoding: \"utf8\" });\n\n (async () =>\n {\n try\n {\n await this.runConversationLoop(messages, option?.inference, {\n streaming: true,\n onChunk: c => out.write(c),\n onThinking: option?.event?.onThinking,\n onTooling: option?.event?.onTooling\n },\n option?.instruction);\n\n out.write('');\n out.end();\n }\n catch (e)\n {\n out.emit(\"throw\", e);\n out.write('');\n out.end();\n }\n })();\n\n return out;\n }\n}","import { MessageType, Message, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\n\nexport default class BedrockMessage extends Message\n{\n constructor(data:Partial<Message>)\n {\n super(data)\n }\n \n public static toAssistantMessage(text: string): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n });\n }\n \n public static toToolUseMessage(text:string, toolUses: ToolUse[]): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n toolUse: toolUses.map(({ toolUseId, name, input }) => (<ToolUse>{ toolUseId, name, input })),\n });\n }\n \n public static toToolResultMessage(toolResult: ToolResult[]): Message\n {\n return new Message({\n type: MessageType.ToolResult,\n toolResult\n });\n }\n}","import { MessageType, Message, Tool } from '@mappies/miniwat-agent-core'\nimport { Message as BrMessage, StopReason, Tool as BedrockTool } from \"@aws-sdk/client-bedrock-runtime\";\n\nexport class BedrockAdapter\n{\n static toBedrockTool(tool: Tool): BedrockTool\n {\n return {\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: tool.schema } as any\n }\n };\n }\n \n static toBedrockMessages(history: Message[]): BrMessage[]\n {\n return history\n .filter(m =>\n (m.content ?? \"\").trim().length > 0 ||\n (m.toolUse?.length ?? 0) > 0 ||\n (m.toolResult?.length ?? 0) > 0\n )\n .map(m =>\n {\n const role = m.type === MessageType.User || m.type === MessageType.ToolResult\n ? \"user\"\n : \"assistant\";\n\n const content: any[] = [];\n\n if (m.toolUse?.length)\n {\n content.push(...m.toolUse.map(t => ({ toolUse: t })));\n }\n else if ((m.content ?? \"\").trim().length > 0)\n {\n content.push({ text: m.content });\n }\n\n if (m.toolResult?.length)\n {\n content.push(...m.toolResult.map(r => ({\n toolResult: {\n ...r,\n status: r.status ? \"success\" : \"error\"\n }\n })));\n }\n\n if (content.length === 0)\n {\n content.push({ text: \"\" });\n }\n\n return { role, content };\n });\n }\n\n static toToolResultContent(result: unknown): { text?: string; json?: object }[] \n {\n try \n {\n if(result instanceof Error)\n {\n return [{ text: result.message }];\n }\n\n if(result === null || result === undefined || result === '')\n {\n return [{ text: '' }];\n }\n\n if(typeof result === \"object\") \n {\n let json = JSON.parse(JSON.stringify(result));\n\n if(Array.isArray(json))\n {\n json = { result: json };\n }\n\n return [{ json }];\n }\n\n return [{ text: String(result) }];\n }\n catch (e: unknown) \n {\n const message = e instanceof Error ? e.message : String(e);\n\n return [{\n json: {\n error: \"Failed to serialize tool result\",\n message\n }\n }];\n }\n }\n\n static getResponseFromStopReasonWhenResponseIsEmpty(stopReason: StopReason): string\n {\n switch (stopReason)\n {\n case \"max_tokens\":\n return \"My response was cut off due to length limits. Would you like me to continue or summarize the remaining information?\";\n case \"stop_sequence\":\n return \"I've reached a natural stopping point in my response. Please let me know if you need additional information.\";\n case \"guardrail_intervened\":\n return \"I'm unable to provide a response to this request as it doesn't align with my usage guidelines. Please rephrase your question or ask something else.\";\n case \"content_filtered\":\n return \"I cannot generate a response for this request due to content policy restrictions. Please try rephrasing your question.\";\n case \"model_context_window_exceeded\":\n return \"The conversation or request is too long for me to process. Please try with a shorter input or start a new conversation.\";\n case \"end_turn\":\n return \"What can I help with?\";\n case \"tool_use\":\n return \"\";\n default:\n return \"I couldn't complete the response. Please try again.\";\n }\n }\n}"],"mappings":"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","names":["import_miniwat_agent_core","import_miniwat_agent_core"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
|
-
import {
|
|
2
|
+
import { Model, Message, ModelOption, ResponseMessage } from '@mappies/miniwat-agent-core';
|
|
3
3
|
import { McpConfig } from '@mappies/miniwat-mcp-core';
|
|
4
4
|
import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
|
|
5
5
|
|
|
6
|
-
declare class
|
|
6
|
+
declare class BedrockModel implements Model {
|
|
7
7
|
private modelId;
|
|
8
|
-
private systemPrompt?;
|
|
9
8
|
private toolDispatcher;
|
|
10
9
|
private client;
|
|
11
10
|
constructor(options: {
|
|
12
11
|
region?: string;
|
|
13
12
|
modelId: string;
|
|
14
|
-
systemPrompt?: string;
|
|
15
13
|
mcpConfig?: McpConfig;
|
|
16
14
|
clientConfig?: BedrockRuntimeClientConfig;
|
|
17
15
|
});
|
|
@@ -19,14 +17,8 @@ declare class BedrockLlmProvider implements LlmProvider {
|
|
|
19
17
|
private extractAssistantText;
|
|
20
18
|
private executeTools;
|
|
21
19
|
private runConversationLoop;
|
|
22
|
-
invoke(messages: Message[],
|
|
23
|
-
|
|
24
|
-
onTooling?: (msg: Message) => Promise<void>;
|
|
25
|
-
}): Promise<ResponseMessage>;
|
|
26
|
-
stream(messages: Message[], inference?: InferenceOptions, callback?: {
|
|
27
|
-
onThinking: (s: string) => Promise<void>;
|
|
28
|
-
onTooling?: (msg: Message) => Promise<void>;
|
|
29
|
-
}): Promise<Readable>;
|
|
20
|
+
invoke(messages: Message[], option?: ModelOption): Promise<ResponseMessage>;
|
|
21
|
+
stream(messages: Message[], option?: ModelOption): Promise<Readable>;
|
|
30
22
|
}
|
|
31
23
|
|
|
32
|
-
export {
|
|
24
|
+
export { BedrockModel };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
|
-
import {
|
|
2
|
+
import { Model, Message, ModelOption, ResponseMessage } from '@mappies/miniwat-agent-core';
|
|
3
3
|
import { McpConfig } from '@mappies/miniwat-mcp-core';
|
|
4
4
|
import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
|
|
5
5
|
|
|
6
|
-
declare class
|
|
6
|
+
declare class BedrockModel implements Model {
|
|
7
7
|
private modelId;
|
|
8
|
-
private systemPrompt?;
|
|
9
8
|
private toolDispatcher;
|
|
10
9
|
private client;
|
|
11
10
|
constructor(options: {
|
|
12
11
|
region?: string;
|
|
13
12
|
modelId: string;
|
|
14
|
-
systemPrompt?: string;
|
|
15
13
|
mcpConfig?: McpConfig;
|
|
16
14
|
clientConfig?: BedrockRuntimeClientConfig;
|
|
17
15
|
});
|
|
@@ -19,14 +17,8 @@ declare class BedrockLlmProvider implements LlmProvider {
|
|
|
19
17
|
private extractAssistantText;
|
|
20
18
|
private executeTools;
|
|
21
19
|
private runConversationLoop;
|
|
22
|
-
invoke(messages: Message[],
|
|
23
|
-
|
|
24
|
-
onTooling?: (msg: Message) => Promise<void>;
|
|
25
|
-
}): Promise<ResponseMessage>;
|
|
26
|
-
stream(messages: Message[], inference?: InferenceOptions, callback?: {
|
|
27
|
-
onThinking: (s: string) => Promise<void>;
|
|
28
|
-
onTooling?: (msg: Message) => Promise<void>;
|
|
29
|
-
}): Promise<Readable>;
|
|
20
|
+
invoke(messages: Message[], option?: ModelOption): Promise<ResponseMessage>;
|
|
21
|
+
stream(messages: Message[], option?: ModelOption): Promise<Readable>;
|
|
30
22
|
}
|
|
31
23
|
|
|
32
|
-
export {
|
|
24
|
+
export { BedrockModel };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/bedrockModel.ts
|
|
2
2
|
import { PassThrough } from "stream";
|
|
3
|
-
import { ResponseMessage } from "@mappies/miniwat-agent-core";
|
|
3
|
+
import { ResponseMessage, resolveInstructionValue } from "@mappies/miniwat-agent-core";
|
|
4
4
|
import { ToolDispatcher } from "@mappies/miniwat-mcp-core";
|
|
5
5
|
|
|
6
6
|
// src/bedrockMessage.ts
|
|
@@ -32,7 +32,7 @@ var BedrockMessage = class extends Message {
|
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
// src/
|
|
35
|
+
// src/bedrockModel.ts
|
|
36
36
|
import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand } from "@aws-sdk/client-bedrock-runtime";
|
|
37
37
|
|
|
38
38
|
// src/bedrockAdapter.ts
|
|
@@ -120,12 +120,11 @@ var BedrockAdapter = class {
|
|
|
120
120
|
}
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
-
// src/
|
|
124
|
-
var
|
|
123
|
+
// src/bedrockModel.ts
|
|
124
|
+
var BedrockModel = class {
|
|
125
125
|
constructor(options) {
|
|
126
126
|
this.toolDispatcher = new ToolDispatcher(options?.mcpConfig);
|
|
127
127
|
this.modelId = options.modelId;
|
|
128
|
-
this.systemPrompt = options?.systemPrompt;
|
|
129
128
|
this.client = new BedrockRuntimeClient({
|
|
130
129
|
region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,
|
|
131
130
|
...options?.clientConfig
|
|
@@ -170,16 +169,17 @@ var BedrockLlmProvider = class {
|
|
|
170
169
|
}
|
|
171
170
|
return results;
|
|
172
171
|
}
|
|
173
|
-
async runConversationLoop(messages, inference, options) {
|
|
172
|
+
async runConversationLoop(messages, inference, options, instruction) {
|
|
174
173
|
let currentMessages = [...messages];
|
|
175
174
|
let iterations = 0;
|
|
176
175
|
while (true) {
|
|
177
176
|
if (++iterations > 20) throw new Error("Too many tool iterations");
|
|
178
177
|
const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);
|
|
178
|
+
const systemPrompt = await resolveInstructionValue(instruction?.system?.value, void 0);
|
|
179
179
|
const converseCommandInput = {
|
|
180
180
|
modelId: this.modelId,
|
|
181
181
|
messages: brMessages,
|
|
182
|
-
system:
|
|
182
|
+
system: systemPrompt ? [{ text: systemPrompt }] : void 0,
|
|
183
183
|
inferenceConfig: {
|
|
184
184
|
temperature: inference?.temperature ?? 0.2,
|
|
185
185
|
maxTokens: inference?.maxTokens,
|
|
@@ -302,12 +302,17 @@ var BedrockLlmProvider = class {
|
|
|
302
302
|
}
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
|
-
async invoke(messages,
|
|
306
|
-
const response = await this.runConversationLoop(
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
305
|
+
async invoke(messages, option) {
|
|
306
|
+
const response = await this.runConversationLoop(
|
|
307
|
+
messages,
|
|
308
|
+
option?.inference,
|
|
309
|
+
{
|
|
310
|
+
streaming: false,
|
|
311
|
+
onThinking: option?.event?.onThinking,
|
|
312
|
+
onTooling: option?.event?.onTooling
|
|
313
|
+
},
|
|
314
|
+
option?.instruction
|
|
315
|
+
);
|
|
311
316
|
messages.push(response.message);
|
|
312
317
|
return new ResponseMessage({
|
|
313
318
|
stopReason: response.stopReason,
|
|
@@ -315,16 +320,21 @@ var BedrockLlmProvider = class {
|
|
|
315
320
|
message: response.message
|
|
316
321
|
});
|
|
317
322
|
}
|
|
318
|
-
async stream(messages,
|
|
323
|
+
async stream(messages, option) {
|
|
319
324
|
const out = new PassThrough({ encoding: "utf8" });
|
|
320
325
|
(async () => {
|
|
321
326
|
try {
|
|
322
|
-
await this.runConversationLoop(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
327
|
+
await this.runConversationLoop(
|
|
328
|
+
messages,
|
|
329
|
+
option?.inference,
|
|
330
|
+
{
|
|
331
|
+
streaming: true,
|
|
332
|
+
onChunk: (c) => out.write(c),
|
|
333
|
+
onThinking: option?.event?.onThinking,
|
|
334
|
+
onTooling: option?.event?.onTooling
|
|
335
|
+
},
|
|
336
|
+
option?.instruction
|
|
337
|
+
);
|
|
328
338
|
out.write("");
|
|
329
339
|
out.end();
|
|
330
340
|
} catch (e) {
|
|
@@ -337,6 +347,6 @@ var BedrockLlmProvider = class {
|
|
|
337
347
|
}
|
|
338
348
|
};
|
|
339
349
|
export {
|
|
340
|
-
|
|
350
|
+
BedrockModel
|
|
341
351
|
};
|
|
342
352
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bedrockLlmProvider.ts","../src/bedrockMessage.ts","../src/bedrockAdapter.ts"],"sourcesContent":["import { PassThrough, Readable } from \"stream\";\nimport { ResponseMessage, Message, LlmProvider, InferenceOptions, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\nimport { McpConfig, ToolDispatcher } from '@mappies/miniwat-mcp-core'\nimport BedrockMessage from \"./bedrockMessage\";\nimport { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, Message as BrMessage, StopReason, BedrockRuntimeClientConfig, ConverseStreamCommandInput } from \"@aws-sdk/client-bedrock-runtime\";\nimport { BedrockAdapter } from \"./bedrockAdapter\";\n\nexport class BedrockLlmProvider implements LlmProvider\n{\n private modelId: string;\n private systemPrompt?: string;\n private toolDispatcher: ToolDispatcher;\n private client: BedrockRuntimeClient;\n\n constructor(options: { region?: string; modelId: string; systemPrompt?: string; mcpConfig?:McpConfig, clientConfig?: BedrockRuntimeClientConfig; })\n {\n this.toolDispatcher = new ToolDispatcher(options?.mcpConfig);\n this.modelId = options.modelId;\n this.systemPrompt = options?.systemPrompt;\n\n this.client = new BedrockRuntimeClient({\n region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,\n ...options?.clientConfig\n });\n }\n\n private async streamBufferedText(chunks: string[], write: (chunk: string) => void)\n {\n for(const chunk of chunks)\n {\n write(chunk);\n await new Promise(r => setTimeout(r, 8 + Math.random() * 12));\n }\n }\n\n private extractAssistantText(res: any, messages: BrMessage[]): string\n {\n const content = res?.output?.message?.content ?? [];\n let text = content.map((c: any) => c.text ?? \"\").join(\"\");\n\n if(!text)\n {\n text = BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(res.stopReason);\n }\n\n return text;\n }\n\n private async executeTools(toolUses: ToolUse[], opts?: any): Promise<ToolResult[]>\n {\n const results: ToolResult[] = [];\n\n for(const toolUse of toolUses)\n {\n try\n {\n const resultPromise = this.toolDispatcher.execute(toolUse.name, toolUse.input);\n\n // Show a thinking message for the tool\n if (opts?.onThinking && toolUse.name)\n {\n const inputText = await this.toolDispatcher.getInputText(toolUse.name, toolUse.input);\n if(inputText) opts.onThinking(inputText);\n }\n\n const result = await resultPromise;\n\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(result),\n status: true\n });\n }\n catch(err: any)\n {\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(err),\n status: false\n });\n }\n }\n\n return results;\n }\n\n private async runConversationLoop(messages: Message[], \n inference?: InferenceOptions, \n options?: { streaming?: boolean; \n onChunk?: (chunk: string) => void, \n onThinking?: (msg: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void>\n }): Promise<{ message: Message; stopReason?: StopReason; usage?: any }>\n {\n let currentMessages = [...messages];\n let iterations = 0;\n\n while(true)\n {\n if (++iterations > 20) throw new Error(\"Too many tool iterations\");\n\n const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);\n\n const converseCommandInput:ConverseStreamCommandInput = {\n modelId: this.modelId,\n messages: brMessages,\n system: this.systemPrompt ? [{ text: this.systemPrompt }] : undefined,\n inferenceConfig: {\n temperature: inference?.temperature ?? 0.2,\n maxTokens: inference?.maxTokens,\n topP: inference?.topP\n }\n }\n\n let tools = (await this.toolDispatcher.list()).map(BedrockAdapter.toBedrockTool);\n\n if(tools.length > 0)\n {\n converseCommandInput.toolConfig = { tools }\n }\n\n if (options?.streaming)\n {\n const res = await this.client.send(new ConverseStreamCommand(converseCommandInput));\n\n let chunks: string[] = [];\n let streamingStarted = false;\n let toolUses: ToolUse[] = [];\n let currentToolUse: ToolUse | undefined;\n let assistantText = '';\n\n for await (const event of res.stream ?? [])\n {\n\n if (event.modelStreamErrorException)\n {\n throw new Error(event.modelStreamErrorException?.message ?? \"Model stream error\");\n }\n\n if (event.contentBlockDelta?.delta?.text)\n {\n const chunk = event.contentBlockDelta.delta.text;\n assistantText += chunk;\n\n if (!streamingStarted)\n {\n chunks.push(chunk);\n\n if (chunks.length > 20)\n {\n streamingStarted = true;\n await this.streamBufferedText(chunks, options.onChunk!);\n chunks = [];\n }\n }\n else\n {\n options.onChunk?.(chunk);\n }\n }\n\n if (event.contentBlockStart?.start?.toolUse)\n {\n currentToolUse = {\n toolUseId: event.contentBlockStart.start.toolUse.toolUseId as string,\n name: event.contentBlockStart.start.toolUse.name as string,\n inputBuffer: \"\"\n };\n toolUses.push(currentToolUse);\n }\n\n if (currentToolUse && event.contentBlockDelta?.delta?.toolUse?.input)\n {\n currentToolUse.inputBuffer += event.contentBlockDelta.delta.toolUse.input;\n }\n\n if (event.contentBlockStop && currentToolUse?.inputBuffer)\n {\n currentToolUse.input = JSON.parse(currentToolUse.inputBuffer);\n delete currentToolUse.inputBuffer;\n currentToolUse = undefined;\n }\n\n if (event.messageStop)\n {\n const reason = event.messageStop.stopReason;\n\n if (reason === \"tool_use\")\n {\n\n if (!streamingStarted && chunks.length > 0)\n {\n await options.onThinking?.(chunks.join(\"\"));\n chunks = [];\n }\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n break;\n }\n\n if (typeof reason === \"string\")\n {\n if (/content|filter|guardrail/i.test(reason))\n {\n throw new Error(\"Output blocked by content filtering policy: \" + reason);\n }\n else if (reason === \"max_tokens\")\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n else if (!streamingStarted)\n {\n if (chunks.length > 0)\n {\n await this.streamBufferedText(chunks, options.onChunk!);\n } else\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n }\n }\n\n return {\n message: BedrockMessage.toAssistantMessage(assistantText),\n stopReason: reason\n };\n }\n }\n }\n else\n {\n const res = await this.client.send(new ConverseCommand(converseCommandInput));\n const text = this.extractAssistantText(res, brMessages);\n\n const content = res?.output?.message?.content ?? [];\n\n if (res.stopReason === \"tool_use\")\n {\n const toolUses = content.filter((c: any) => c.toolUse)\n .map((c: any) => ({\n toolUseId: c.toolUse.toolUseId,\n name: c.toolUse.name,\n input: c.toolUse.input\n }));\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n continue;\n }\n\n const msg = BedrockMessage.toAssistantMessage(text);\n\n return {\n message: msg,\n stopReason: res.stopReason,\n usage: res.usage\n };\n }\n }\n }\n\n async invoke(messages: Message[], inference?: InferenceOptions, callback?: { \n onThinking: (s: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void> \n }): Promise<ResponseMessage>\n {\n const response = await this.runConversationLoop(messages, inference, {\n streaming: false,\n onThinking: callback?.onThinking,\n onTooling: callback?.onTooling\n });\n\n messages.push(response.message);\n\n return new ResponseMessage({\n stopReason: response.stopReason as StopReason,\n tokenUsage: response.usage,\n message: response.message\n });\n }\n\n async stream(messages: Message[], inference?: InferenceOptions, callback?: { \n onThinking: (s: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void> \n }): Promise<Readable>\n {\n const out = new PassThrough({ encoding: \"utf8\" });\n\n (async () =>\n {\n try\n {\n await this.runConversationLoop(messages, inference, {\n streaming: true,\n onChunk: c => out.write(c),\n onThinking: callback?.onThinking,\n onTooling: callback?.onTooling\n });\n\n out.write('');\n out.end();\n }\n catch (e)\n {\n out.emit(\"throw\", e);\n out.write('');\n out.end();\n }\n })();\n\n return out;\n }\n}","import { MessageType, Message, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\n\nexport default class BedrockMessage extends Message\n{\n constructor(data:Partial<Message>)\n {\n super(data)\n }\n \n public static toAssistantMessage(text: string): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n });\n }\n \n public static toToolUseMessage(text:string, toolUses: ToolUse[]): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n toolUse: toolUses.map(({ toolUseId, name, input }) => (<ToolUse>{ toolUseId, name, input })),\n });\n }\n \n public static toToolResultMessage(toolResult: ToolResult[]): Message\n {\n return new Message({\n type: MessageType.ToolResult,\n toolResult\n });\n }\n}","import { MessageType, Message, Tool } from '@mappies/miniwat-agent-core'\nimport { Message as BrMessage, StopReason, Tool as BedrockTool } from \"@aws-sdk/client-bedrock-runtime\";\n\nexport class BedrockAdapter\n{\n static toBedrockTool(tool: Tool): BedrockTool\n {\n return {\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: tool.schema } as any\n }\n };\n }\n \n static toBedrockMessages(history: Message[]): BrMessage[]\n {\n return history\n .filter(m =>\n (m.content ?? \"\").trim().length > 0 ||\n (m.toolUse?.length ?? 0) > 0 ||\n (m.toolResult?.length ?? 0) > 0\n )\n .map(m =>\n {\n const role = m.type === MessageType.User || m.type === MessageType.ToolResult\n ? \"user\"\n : \"assistant\";\n\n const content: any[] = [];\n\n if (m.toolUse?.length)\n {\n content.push(...m.toolUse.map(t => ({ toolUse: t })));\n }\n else if ((m.content ?? \"\").trim().length > 0)\n {\n content.push({ text: m.content });\n }\n\n if (m.toolResult?.length)\n {\n content.push(...m.toolResult.map(r => ({\n toolResult: {\n ...r,\n status: r.status ? \"success\" : \"error\"\n }\n })));\n }\n\n if (content.length === 0)\n {\n content.push({ text: \"\" });\n }\n\n return { role, content };\n });\n }\n\n static toToolResultContent(result: unknown): { text?: string; json?: object }[] \n {\n try \n {\n if(result instanceof Error)\n {\n return [{ text: result.message }];\n }\n\n if(result === null || result === undefined || result === '')\n {\n return [{ text: '' }];\n }\n\n if(typeof result === \"object\") \n {\n let json = JSON.parse(JSON.stringify(result));\n\n if(Array.isArray(json))\n {\n json = { result: json };\n }\n\n return [{ json }];\n }\n\n return [{ text: String(result) }];\n }\n catch (e: unknown) \n {\n const message = e instanceof Error ? e.message : String(e);\n\n return [{\n json: {\n error: \"Failed to serialize tool result\",\n message\n }\n }];\n }\n }\n\n static getResponseFromStopReasonWhenResponseIsEmpty(stopReason: StopReason): string\n {\n switch (stopReason)\n {\n case \"max_tokens\":\n return \"My response was cut off due to length limits. Would you like me to continue or summarize the remaining information?\";\n case \"stop_sequence\":\n return \"I've reached a natural stopping point in my response. Please let me know if you need additional information.\";\n case \"guardrail_intervened\":\n return \"I'm unable to provide a response to this request as it doesn't align with my usage guidelines. Please rephrase your question or ask something else.\";\n case \"content_filtered\":\n return \"I cannot generate a response for this request due to content policy restrictions. Please try rephrasing your question.\";\n case \"model_context_window_exceeded\":\n return \"The conversation or request is too long for me to process. Please try with a shorter input or start a new conversation.\";\n case \"end_turn\":\n return \"What can I help with?\";\n case \"tool_use\":\n return \"\";\n default:\n return \"I couldn't complete the response. Please try again.\";\n }\n }\n}"],"mappings":";AAAA,SAAS,mBAA6B;AACtC,SAAS,uBAAoF;AAC7F,SAAoB,sBAAsB;;;ACF1C,SAAS,aAAa,eAAoC;AAE1D,IAAqB,iBAArB,cAA4C,QAC5C;AAAA,EACI,YAAY,MACZ;AACI,UAAM,IAAI;AAAA,EACd;AAAA,EAEA,OAAc,mBAAmB,MACjC;AACI,WAAO,IAAI,QAAQ;AAAA,MACf,MAAM,YAAY;AAAA,MAClB,SAAS;AAAA,MACT,mBAAkB,oBAAI,KAAK,GAAE,YAAY;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EAEA,OAAc,iBAAiB,MAAa,UAC5C;AACI,WAAO,IAAI,QAAQ;AAAA,MACX,MAAM,YAAY;AAAA,MAClB,SAAS;AAAA,MACT,mBAAkB,oBAAI,KAAK,GAAE,YAAY;AAAA,MACzC,SAAS,SAAS,IAAI,CAAC,EAAE,WAAW,MAAM,MAAM,OAAgB,EAAE,WAAW,MAAM,MAAM,EAAE;AAAA,IACnG,CAAC;AAAA,EACL;AAAA,EAEA,OAAc,oBAAoB,YAClC;AACI,WAAO,IAAI,QAAQ;AAAA,MACf,MAAM,YAAY;AAAA,MAClB;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;;;AD/BA,SAAS,sBAAsB,iBAAiB,6BAAuH;;;AEJvK,SAAS,eAAAA,oBAAkC;AAGpC,IAAM,iBAAN,MACP;AAAA,EACI,OAAO,cAAc,MACrB;AACI,WAAO;AAAA,MACH,UAAU;AAAA,QACN,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,aAAa,EAAE,MAAM,KAAK,OAAO;AAAA,MACrC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,OAAO,kBAAkB,SACzB;AACI,WAAO,QACF;AAAA,MAAO,QACH,EAAE,WAAW,IAAI,KAAK,EAAE,SAAS,MACjC,EAAE,SAAS,UAAU,KAAK,MAC1B,EAAE,YAAY,UAAU,KAAK;AAAA,IAClC,EACC,IAAI,OACL;AACI,YAAM,OAAO,EAAE,SAASA,aAAY,QAAQ,EAAE,SAASA,aAAY,aACpD,SACA;AAEf,YAAM,UAAiB,CAAC;AAExB,UAAI,EAAE,SAAS,QACf;AACI,gBAAQ,KAAK,GAAG,EAAE,QAAQ,IAAI,QAAM,EAAE,SAAS,EAAE,EAAE,CAAC;AAAA,MACxD,YACU,EAAE,WAAW,IAAI,KAAK,EAAE,SAAS,GAC3C;AACI,gBAAQ,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAA,MACpC;AAEA,UAAI,EAAE,YAAY,QAClB;AACI,gBAAQ,KAAK,GAAG,EAAE,WAAW,IAAI,QAAM;AAAA,UACnC,YAAY;AAAA,YACR,GAAG;AAAA,YACH,QAAQ,EAAE,SAAS,YAAY;AAAA,UACnC;AAAA,QACJ,EAAE,CAAC;AAAA,MACP;AAEA,UAAI,QAAQ,WAAW,GACvB;AACI,gBAAQ,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,MAC7B;AAEA,aAAO,EAAE,MAAM,QAAQ;AAAA,IAC3B,CAAC;AAAA,EACT;AAAA,EAEA,OAAO,oBAAoB,QAC3B;AACI,QACA;AACI,UAAG,kBAAkB,OACrB;AACI,eAAO,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;AAAA,MACpC;AAEA,UAAG,WAAW,QAAQ,WAAW,UAAa,WAAW,IACzD;AACI,eAAO,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACxB;AAEA,UAAG,OAAO,WAAW,UACrB;AACI,YAAI,OAAO,KAAK,MAAM,KAAK,UAAU,MAAM,CAAC;AAE5C,YAAG,MAAM,QAAQ,IAAI,GACrB;AACI,iBAAO,EAAE,QAAQ,KAAK;AAAA,QAC1B;AAEA,eAAO,CAAC,EAAE,KAAK,CAAC;AAAA,MACpB;AAEA,aAAO,CAAC,EAAE,MAAM,OAAO,MAAM,EAAE,CAAC;AAAA,IACpC,SACO,GACP;AACI,YAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAEzD,aAAO,CAAC;AAAA,QACJ,MAAM;AAAA,UACF,OAAO;AAAA,UACP;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,OAAO,6CAA6C,YACpD;AACI,YAAQ,YACR;AAAA,MACI,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AACJ;;;AFpHO,IAAM,qBAAN,MACP;AAAA,EAMI,YAAY,SACZ;AACI,SAAK,iBAAiB,IAAI,eAAe,SAAS,SAAS;AAC3D,SAAK,UAAU,QAAQ;AACvB,SAAK,eAAe,SAAS;AAE7B,SAAK,SAAS,IAAI,qBAAqB;AAAA,MACnC,QAAQ,SAAS,UAAU,QAAQ,IAAI,sBAAsB,QAAQ,IAAI;AAAA,MACzE,GAAG,SAAS;AAAA,IAChB,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,mBAAmB,QAAkB,OACnD;AACI,eAAU,SAAS,QACnB;AACI,YAAM,KAAK;AACX,YAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC;AAAA,IAChE;AAAA,EACJ;AAAA,EAEQ,qBAAqB,KAAU,UACvC;AACI,UAAM,UAAU,KAAK,QAAQ,SAAS,WAAW,CAAC;AAClD,QAAI,OAAO,QAAQ,IAAI,CAAC,MAAW,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE;AAExD,QAAG,CAAC,MACJ;AACI,aAAO,eAAe,6CAA6C,IAAI,UAAU;AAAA,IACrF;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,aAAa,UAAqB,MAChD;AACI,UAAM,UAAwB,CAAC;AAE/B,eAAU,WAAW,UACrB;AACI,UACA;AACI,cAAM,gBAAgB,KAAK,eAAe,QAAQ,QAAQ,MAAM,QAAQ,KAAK;AAG7E,YAAI,MAAM,cAAc,QAAQ,MAChC;AACI,gBAAM,YAAY,MAAM,KAAK,eAAe,aAAa,QAAQ,MAAM,QAAQ,KAAK;AACpF,cAAG,UAAW,MAAK,WAAW,SAAS;AAAA,QAC3C;AAEA,cAAM,SAAS,MAAM;AAErB,gBAAQ,KAAK;AAAA,UACT,WAAW,QAAQ;AAAA,UACnB,SAAS,eAAe,oBAAoB,MAAM;AAAA,UAClD,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL,SACM,KACN;AACI,gBAAQ,KAAK;AAAA,UACT,WAAW,QAAQ;AAAA,UACnB,SAAS,eAAe,oBAAoB,GAAG;AAAA,UAC/C,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,oBAAoB,UACA,WACA,SAKlC;AACI,QAAI,kBAAkB,CAAC,GAAG,QAAQ;AAClC,QAAI,aAAa;AAEjB,WAAM,MACN;AACI,UAAI,EAAE,aAAa,GAAI,OAAM,IAAI,MAAM,0BAA0B;AAEjE,YAAM,aAAa,eAAe,kBAAkB,eAAe;AAEnE,YAAM,uBAAkD;AAAA,QACxB,SAAS,KAAK;AAAA,QACd,UAAU;AAAA,QACV,QAAQ,KAAK,eAAe,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,IAAI;AAAA,QAC5D,iBAAiB;AAAA,UACb,aAAa,WAAW,eAAe;AAAA,UACvC,WAAW,WAAW;AAAA,UACtB,MAAM,WAAW;AAAA,QACrB;AAAA,MACJ;AAE5B,UAAI,SAAS,MAAM,KAAK,eAAe,KAAK,GAAG,IAAI,eAAe,aAAa;AAE/E,UAAG,MAAM,SAAS,GAClB;AACI,6BAAqB,aAAa,EAAE,MAAM;AAAA,MAC9C;AAEA,UAAI,SAAS,WACb;AACI,cAAM,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI,sBAAsB,oBAAoB,CAAC;AAElF,YAAI,SAAmB,CAAC;AACxB,YAAI,mBAAmB;AACvB,YAAI,WAAsB,CAAC;AAC3B,YAAI;AACJ,YAAI,gBAAgB;AAEpB,yBAAiB,SAAS,IAAI,UAAU,CAAC,GACzC;AAEI,cAAI,MAAM,2BACV;AACI,kBAAM,IAAI,MAAM,MAAM,2BAA2B,WAAW,oBAAoB;AAAA,UACpF;AAEA,cAAI,MAAM,mBAAmB,OAAO,MACpC;AACI,kBAAM,QAAQ,MAAM,kBAAkB,MAAM;AAC5C,6BAAiB;AAEjB,gBAAI,CAAC,kBACL;AACI,qBAAO,KAAK,KAAK;AAEjB,kBAAI,OAAO,SAAS,IACpB;AACI,mCAAmB;AACnB,sBAAM,KAAK,mBAAmB,QAAQ,QAAQ,OAAQ;AACtD,yBAAS,CAAC;AAAA,cACd;AAAA,YACJ,OAEA;AACI,sBAAQ,UAAU,KAAK;AAAA,YAC3B;AAAA,UACJ;AAEA,cAAI,MAAM,mBAAmB,OAAO,SACpC;AACI,6BAAiB;AAAA,cACb,WAAW,MAAM,kBAAkB,MAAM,QAAQ;AAAA,cACjD,MAAM,MAAM,kBAAkB,MAAM,QAAQ;AAAA,cAC5C,aAAa;AAAA,YACjB;AACA,qBAAS,KAAK,cAAc;AAAA,UAChC;AAEA,cAAI,kBAAkB,MAAM,mBAAmB,OAAO,SAAS,OAC/D;AACI,2BAAe,eAAe,MAAM,kBAAkB,MAAM,QAAQ;AAAA,UACxE;AAEA,cAAI,MAAM,oBAAoB,gBAAgB,aAC9C;AACI,2BAAe,QAAQ,KAAK,MAAM,eAAe,WAAW;AAC5D,mBAAO,eAAe;AACtB,6BAAiB;AAAA,UACrB;AAEA,cAAI,MAAM,aACV;AACI,kBAAM,SAAS,MAAM,YAAY;AAEjC,gBAAI,WAAW,YACf;AAEI,kBAAI,CAAC,oBAAoB,OAAO,SAAS,GACzC;AACI,sBAAM,QAAQ,aAAa,OAAO,KAAK,EAAE,CAAC;AAC1C,yBAAS,CAAC;AAAA,cACd;AAEA,oBAAM,iBAAiB,eAAe,iBAAiB,IAAI,QAAQ;AACnE,8BAAgB,KAAK,cAAc;AACnC,kBAAG,SAAS,WAAW;AAAE,sBAAM,QAAQ,UAAU,cAAc;AAAA,cAAC;AAEhE,oBAAM,cAAc,MAAM,KAAK,aAAa,UAAU,OAAO;AAE7D,oBAAM,oBAAoB,eAAe,oBAAoB,WAAW;AACxE,8BAAgB,KAAK,iBAAiB;AACtC,kBAAG,SAAS,WAAW;AAAE,sBAAM,QAAQ,UAAU,iBAAiB;AAAA,cAAC;AAEnE;AAAA,YACJ;AAEA,gBAAI,OAAO,WAAW,UACtB;AACI,kBAAI,4BAA4B,KAAK,MAAM,GAC3C;AACI,sBAAM,IAAI,MAAM,iDAAiD,MAAM;AAAA,cAC3E,WACS,WAAW,cACpB;AACI,wBAAQ,UAAU,eAAe,6CAA6C,MAAM,CAAC;AAAA,cACzF,WACS,CAAC,kBACV;AACI,oBAAI,OAAO,SAAS,GACpB;AACI,wBAAM,KAAK,mBAAmB,QAAQ,QAAQ,OAAQ;AAAA,gBAC1D,OACA;AACI,0BAAQ,UAAU,eAAe,6CAA6C,MAAM,CAAC;AAAA,gBACzF;AAAA,cACJ;AAAA,YACJ;AAEA,mBAAO;AAAA,cACH,SAAS,eAAe,mBAAmB,aAAa;AAAA,cACxD,YAAY;AAAA,YAChB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,OAEA;AACI,cAAM,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI,gBAAgB,oBAAoB,CAAC;AAC5E,cAAM,OAAO,KAAK,qBAAqB,KAAK,UAAU;AAEtD,cAAM,UAAU,KAAK,QAAQ,SAAS,WAAW,CAAC;AAElD,YAAI,IAAI,eAAe,YACvB;AACI,gBAAM,WAAW,QAAQ,OAAO,CAAC,MAAW,EAAE,OAAO,EAC5B,IAAI,CAAC,OAAY;AAAA,YACd,WAAW,EAAE,QAAQ;AAAA,YACrB,MAAM,EAAE,QAAQ;AAAA,YAChB,OAAO,EAAE,QAAQ;AAAA,UACrB,EAAE;AAE1B,gBAAM,iBAAiB,eAAe,iBAAiB,IAAI,QAAQ;AACnE,0BAAgB,KAAK,cAAc;AACnC,cAAG,SAAS,WAAW;AAAE,kBAAM,QAAQ,UAAU,cAAc;AAAA,UAAC;AAEhE,gBAAM,cAAc,MAAM,KAAK,aAAa,UAAU,OAAO;AAE7D,gBAAM,oBAAoB,eAAe,oBAAoB,WAAW;AACxE,0BAAgB,KAAK,iBAAiB;AACtC,cAAG,SAAS,WAAW;AAAE,kBAAM,QAAQ,UAAU,iBAAiB;AAAA,UAAC;AAEnE;AAAA,QACJ;AAEA,cAAM,MAAM,eAAe,mBAAmB,IAAI;AAElD,eAAO;AAAA,UACH,SAAS;AAAA,UACT,YAAY,IAAI;AAAA,UAChB,OAAO,IAAI;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO,UAAqB,WAA8B,UAIhE;AACI,UAAM,WAAW,MAAM,KAAK,oBAAoB,UAAU,WAAW;AAAA,MACjE,WAAW;AAAA,MACX,YAAY,UAAU;AAAA,MACtB,WAAW,UAAU;AAAA,IACzB,CAAC;AAED,aAAS,KAAK,SAAS,OAAO;AAE9B,WAAO,IAAI,gBAAgB;AAAA,MACvB,YAAY,SAAS;AAAA,MACrB,YAAY,SAAS;AAAA,MACrB,SAAS,SAAS;AAAA,IACtB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,OAAO,UAAqB,WAA8B,UAIhE;AACI,UAAM,MAAM,IAAI,YAAY,EAAE,UAAU,OAAO,CAAC;AAEhD,KAAC,YACD;AACI,UACA;AACI,cAAM,KAAK,oBAAoB,UAAU,WAAW;AAAA,UAChD,WAAW;AAAA,UACX,SAAS,OAAK,IAAI,MAAM,CAAC;AAAA,UACzB,YAAY,UAAU;AAAA,UACtB,WAAW,UAAU;AAAA,QACzB,CAAC;AAED,YAAI,MAAM,EAAE;AACZ,YAAI,IAAI;AAAA,MACZ,SACO,GACP;AACI,YAAI,KAAK,SAAS,CAAC;AACnB,YAAI,MAAM,EAAE;AACZ,YAAI,IAAI;AAAA,MACZ;AAAA,IACJ,GAAG;AAEH,WAAO;AAAA,EACX;AACJ;","names":["MessageType"]}
|
|
1
|
+
{"version":3,"sources":["../src/bedrockModel.ts","../src/bedrockMessage.ts","../src/bedrockAdapter.ts"],"sourcesContent":["import { PassThrough, Readable } from \"stream\";\nimport { ResponseMessage, Message, InferenceOptions, ToolUse, ToolResult, Model, ModelOption, resolveInstructionValue, Instruction } from '@mappies/miniwat-agent-core'\nimport { McpConfig, ToolDispatcher } from '@mappies/miniwat-mcp-core'\nimport BedrockMessage from \"./bedrockMessage\";\nimport { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, Message as BrMessage, StopReason, BedrockRuntimeClientConfig, ConverseStreamCommandInput } from \"@aws-sdk/client-bedrock-runtime\";\nimport { BedrockAdapter } from \"./bedrockAdapter\";\n\nexport class BedrockModel implements Model\n{\n private modelId: string;\n private toolDispatcher: ToolDispatcher;\n private client: BedrockRuntimeClient;\n\n constructor(options: { region?: string; modelId: string; mcpConfig?:McpConfig, clientConfig?: BedrockRuntimeClientConfig; })\n {\n this.toolDispatcher = new ToolDispatcher(options?.mcpConfig);\n this.modelId = options.modelId;\n\n this.client = new BedrockRuntimeClient({\n region: options?.region ?? process.env.DEFAULT_AWS_REGION ?? process.env.AWS_REGION,\n ...options?.clientConfig\n });\n }\n\n private async streamBufferedText(chunks: string[], write: (chunk: string) => void)\n {\n for(const chunk of chunks)\n {\n write(chunk);\n await new Promise(r => setTimeout(r, 8 + Math.random() * 12));\n }\n }\n\n private extractAssistantText(res: any, messages: BrMessage[]): string\n {\n const content = res?.output?.message?.content ?? [];\n let text = content.map((c: any) => c.text ?? \"\").join(\"\");\n\n if(!text)\n {\n text = BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(res.stopReason);\n }\n\n return text;\n }\n\n private async executeTools(toolUses: ToolUse[], opts?: any): Promise<ToolResult[]>\n {\n const results: ToolResult[] = [];\n\n for(const toolUse of toolUses)\n {\n try\n {\n const resultPromise = this.toolDispatcher.execute(toolUse.name, toolUse.input);\n\n // Show a thinking message for the tool\n if (opts?.onThinking && toolUse.name)\n {\n const inputText = await this.toolDispatcher.getInputText(toolUse.name, toolUse.input);\n if(inputText) opts.onThinking(inputText);\n }\n\n const result = await resultPromise;\n\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(result),\n status: true\n });\n }\n catch(err: any)\n {\n results.push({\n toolUseId: toolUse.toolUseId,\n content: BedrockAdapter.toToolResultContent(err),\n status: false\n });\n }\n }\n\n return results;\n }\n\n private async runConversationLoop(messages: Message[], \n inference?: InferenceOptions, \n options?: { streaming?: boolean; \n onChunk?: (chunk: string) => void, \n onThinking?: (msg: string) => Promise<void>,\n onTooling?: (msg: Message) => Promise<void>\n },\n instruction?: Instruction): Promise<{ message: Message; stopReason?: StopReason; usage?: any }>\n {\n let currentMessages = [...messages];\n let iterations = 0;\n\n while(true)\n {\n if (++iterations > 20) throw new Error(\"Too many tool iterations\");\n\n const brMessages = BedrockAdapter.toBedrockMessages(currentMessages);\n\n const systemPrompt = await resolveInstructionValue(instruction?.system?.value, undefined);\n\n const converseCommandInput:ConverseStreamCommandInput = {\n modelId: this.modelId,\n messages: brMessages,\n system: systemPrompt ? [{ text: systemPrompt }] : undefined,\n inferenceConfig: {\n temperature: inference?.temperature ?? 0.2,\n maxTokens: inference?.maxTokens,\n topP: inference?.topP\n }\n }\n\n let tools = (await this.toolDispatcher.list()).map(BedrockAdapter.toBedrockTool);\n\n if(tools.length > 0)\n {\n converseCommandInput.toolConfig = { tools }\n }\n\n if (options?.streaming)\n {\n const res = await this.client.send(new ConverseStreamCommand(converseCommandInput));\n\n let chunks: string[] = [];\n let streamingStarted = false;\n let toolUses: ToolUse[] = [];\n let currentToolUse: ToolUse | undefined;\n let assistantText = '';\n\n for await (const event of res.stream ?? [])\n {\n\n if (event.modelStreamErrorException)\n {\n throw new Error(event.modelStreamErrorException?.message ?? \"Model stream error\");\n }\n\n if (event.contentBlockDelta?.delta?.text)\n {\n const chunk = event.contentBlockDelta.delta.text;\n assistantText += chunk;\n\n if (!streamingStarted)\n {\n chunks.push(chunk);\n\n if (chunks.length > 20)\n {\n streamingStarted = true;\n await this.streamBufferedText(chunks, options.onChunk!);\n chunks = [];\n }\n }\n else\n {\n options.onChunk?.(chunk);\n }\n }\n\n if (event.contentBlockStart?.start?.toolUse)\n {\n currentToolUse = {\n toolUseId: event.contentBlockStart.start.toolUse.toolUseId as string,\n name: event.contentBlockStart.start.toolUse.name as string,\n inputBuffer: \"\"\n };\n toolUses.push(currentToolUse);\n }\n\n if (currentToolUse && event.contentBlockDelta?.delta?.toolUse?.input)\n {\n currentToolUse.inputBuffer += event.contentBlockDelta.delta.toolUse.input;\n }\n\n if (event.contentBlockStop && currentToolUse?.inputBuffer)\n {\n currentToolUse.input = JSON.parse(currentToolUse.inputBuffer);\n delete currentToolUse.inputBuffer;\n currentToolUse = undefined;\n }\n\n if (event.messageStop)\n {\n const reason = event.messageStop.stopReason;\n\n if (reason === \"tool_use\")\n {\n\n if (!streamingStarted && chunks.length > 0)\n {\n await options.onThinking?.(chunks.join(\"\"));\n chunks = [];\n }\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n break;\n }\n\n if (typeof reason === \"string\")\n {\n if (/content|filter|guardrail/i.test(reason))\n {\n throw new Error(\"Output blocked by content filtering policy: \" + reason);\n }\n else if (reason === \"max_tokens\")\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n else if (!streamingStarted)\n {\n if (chunks.length > 0)\n {\n await this.streamBufferedText(chunks, options.onChunk!);\n } else\n {\n options.onChunk?.(BedrockAdapter.getResponseFromStopReasonWhenResponseIsEmpty(reason));\n }\n }\n }\n\n return {\n message: BedrockMessage.toAssistantMessage(assistantText),\n stopReason: reason\n };\n }\n }\n }\n else\n {\n const res = await this.client.send(new ConverseCommand(converseCommandInput));\n const text = this.extractAssistantText(res, brMessages);\n\n const content = res?.output?.message?.content ?? [];\n\n if (res.stopReason === \"tool_use\")\n {\n const toolUses = content.filter((c: any) => c.toolUse)\n .map((c: any) => ({\n toolUseId: c.toolUse.toolUseId,\n name: c.toolUse.name,\n input: c.toolUse.input\n }));\n\n const toolUseMessage = BedrockMessage.toToolUseMessage('', toolUses);\n currentMessages.push(toolUseMessage);\n if(options?.onTooling) { await options.onTooling(toolUseMessage)}\n\n const toolResults = await this.executeTools(toolUses, options);\n\n const toolResultMessage = BedrockMessage.toToolResultMessage(toolResults);\n currentMessages.push(toolResultMessage);\n if(options?.onTooling) { await options.onTooling(toolResultMessage)}\n\n continue;\n }\n\n const msg = BedrockMessage.toAssistantMessage(text);\n\n return {\n message: msg,\n stopReason: res.stopReason,\n usage: res.usage\n };\n }\n }\n }\n\n async invoke(messages: Message[], option?: ModelOption): Promise<ResponseMessage>\n {\n const response = await this.runConversationLoop(messages, option?.inference, {\n streaming: false,\n onThinking: option?.event?.onThinking,\n onTooling: option?.event?.onTooling\n },\n option?.instruction);\n\n messages.push(response.message);\n\n return new ResponseMessage({\n stopReason: response.stopReason as StopReason,\n tokenUsage: response.usage,\n message: response.message\n });\n }\n\n async stream(messages: Message[], option?: ModelOption): Promise<Readable>\n {\n const out = new PassThrough({ encoding: \"utf8\" });\n\n (async () =>\n {\n try\n {\n await this.runConversationLoop(messages, option?.inference, {\n streaming: true,\n onChunk: c => out.write(c),\n onThinking: option?.event?.onThinking,\n onTooling: option?.event?.onTooling\n },\n option?.instruction);\n\n out.write('');\n out.end();\n }\n catch (e)\n {\n out.emit(\"throw\", e);\n out.write('');\n out.end();\n }\n })();\n\n return out;\n }\n}","import { MessageType, Message, ToolUse, ToolResult } from '@mappies/miniwat-agent-core'\n\nexport default class BedrockMessage extends Message\n{\n constructor(data:Partial<Message>)\n {\n super(data)\n }\n \n public static toAssistantMessage(text: string): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n });\n }\n \n public static toToolUseMessage(text:string, toolUses: ToolUse[]): Message\n {\n return new Message({\n type: MessageType.Agent,\n content: text,\n createdTimestamp: new Date().toISOString(),\n toolUse: toolUses.map(({ toolUseId, name, input }) => (<ToolUse>{ toolUseId, name, input })),\n });\n }\n \n public static toToolResultMessage(toolResult: ToolResult[]): Message\n {\n return new Message({\n type: MessageType.ToolResult,\n toolResult\n });\n }\n}","import { MessageType, Message, Tool } from '@mappies/miniwat-agent-core'\nimport { Message as BrMessage, StopReason, Tool as BedrockTool } from \"@aws-sdk/client-bedrock-runtime\";\n\nexport class BedrockAdapter\n{\n static toBedrockTool(tool: Tool): BedrockTool\n {\n return {\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: tool.schema } as any\n }\n };\n }\n \n static toBedrockMessages(history: Message[]): BrMessage[]\n {\n return history\n .filter(m =>\n (m.content ?? \"\").trim().length > 0 ||\n (m.toolUse?.length ?? 0) > 0 ||\n (m.toolResult?.length ?? 0) > 0\n )\n .map(m =>\n {\n const role = m.type === MessageType.User || m.type === MessageType.ToolResult\n ? \"user\"\n : \"assistant\";\n\n const content: any[] = [];\n\n if (m.toolUse?.length)\n {\n content.push(...m.toolUse.map(t => ({ toolUse: t })));\n }\n else if ((m.content ?? \"\").trim().length > 0)\n {\n content.push({ text: m.content });\n }\n\n if (m.toolResult?.length)\n {\n content.push(...m.toolResult.map(r => ({\n toolResult: {\n ...r,\n status: r.status ? \"success\" : \"error\"\n }\n })));\n }\n\n if (content.length === 0)\n {\n content.push({ text: \"\" });\n }\n\n return { role, content };\n });\n }\n\n static toToolResultContent(result: unknown): { text?: string; json?: object }[] \n {\n try \n {\n if(result instanceof Error)\n {\n return [{ text: result.message }];\n }\n\n if(result === null || result === undefined || result === '')\n {\n return [{ text: '' }];\n }\n\n if(typeof result === \"object\") \n {\n let json = JSON.parse(JSON.stringify(result));\n\n if(Array.isArray(json))\n {\n json = { result: json };\n }\n\n return [{ json }];\n }\n\n return [{ text: String(result) }];\n }\n catch (e: unknown) \n {\n const message = e instanceof Error ? e.message : String(e);\n\n return [{\n json: {\n error: \"Failed to serialize tool result\",\n message\n }\n }];\n }\n }\n\n static getResponseFromStopReasonWhenResponseIsEmpty(stopReason: StopReason): string\n {\n switch (stopReason)\n {\n case \"max_tokens\":\n return \"My response was cut off due to length limits. Would you like me to continue or summarize the remaining information?\";\n case \"stop_sequence\":\n return \"I've reached a natural stopping point in my response. Please let me know if you need additional information.\";\n case \"guardrail_intervened\":\n return \"I'm unable to provide a response to this request as it doesn't align with my usage guidelines. Please rephrase your question or ask something else.\";\n case \"content_filtered\":\n return \"I cannot generate a response for this request due to content policy restrictions. Please try rephrasing your question.\";\n case \"model_context_window_exceeded\":\n return \"The conversation or request is too long for me to process. Please try with a shorter input or start a new conversation.\";\n case \"end_turn\":\n return \"What can I help with?\";\n case \"tool_use\":\n return \"\";\n default:\n return \"I couldn't complete the response. Please try again.\";\n }\n }\n}"],"mappings":"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","names":["MessageType"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mappies/miniwat-provider-bedrock",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Bedrock provider for Miniwat",
|
|
5
5
|
"homepage": "https://gitlab.com/mappies/miniwat-provider-bedrock#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@aws-sdk/client-bedrock-runtime": "^3.908.0",
|
|
47
|
-
"@mappies/miniwat-agent-core": "^0.
|
|
47
|
+
"@mappies/miniwat-agent-core": "^0.12.0",
|
|
48
48
|
"@mappies/miniwat-mcp-core": "^0.2.0"
|
|
49
49
|
}
|
|
50
50
|
}
|