@mappies/miniwat-provider-bedrock 0.6.0 → 0.8.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 +24 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +25 -16
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -151,7 +151,6 @@ 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 BedrockModel = 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,
|
|
@@ -329,12 +329,16 @@ var BedrockModel = class {
|
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
331
|
async invoke(messages, option) {
|
|
332
|
-
const response = await this.runConversationLoop(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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
|
+
);
|
|
338
342
|
return new import_miniwat_agent_core3.ResponseMessage({
|
|
339
343
|
stopReason: response.stopReason,
|
|
340
344
|
tokenUsage: response.usage,
|
|
@@ -345,12 +349,17 @@ var BedrockModel = class {
|
|
|
345
349
|
const out = new import_stream.PassThrough({ encoding: "utf8" });
|
|
346
350
|
(async () => {
|
|
347
351
|
try {
|
|
348
|
-
await this.runConversationLoop(
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
352
|
+
await this.runConversationLoop(
|
|
353
|
+
messages,
|
|
354
|
+
option?.inference,
|
|
355
|
+
{
|
|
356
|
+
streaming: true,
|
|
357
|
+
onChunk: (c) => out.write(c),
|
|
358
|
+
onThinking: option?.event?.onThinking,
|
|
359
|
+
onTooling: option?.event?.onTooling
|
|
360
|
+
},
|
|
361
|
+
option?.instruction
|
|
362
|
+
);
|
|
354
363
|
out.write("");
|
|
355
364
|
out.end();
|
|
356
365
|
} catch (e) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 } 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 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[], 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\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\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 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
|
@@ -5,13 +5,11 @@ import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
|
|
|
5
5
|
|
|
6
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
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -5,13 +5,11 @@ import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
|
|
|
5
5
|
|
|
6
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
|
});
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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
|
|
@@ -125,7 +125,6 @@ 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 BedrockModel = 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,
|
|
@@ -303,12 +303,16 @@ var BedrockModel = class {
|
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
async invoke(messages, option) {
|
|
306
|
-
const response = await this.runConversationLoop(
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
+
);
|
|
312
316
|
return new ResponseMessage({
|
|
313
317
|
stopReason: response.stopReason,
|
|
314
318
|
tokenUsage: response.usage,
|
|
@@ -319,12 +323,17 @@ var BedrockModel = class {
|
|
|
319
323
|
const out = new PassThrough({ encoding: "utf8" });
|
|
320
324
|
(async () => {
|
|
321
325
|
try {
|
|
322
|
-
await this.runConversationLoop(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
326
|
+
await this.runConversationLoop(
|
|
327
|
+
messages,
|
|
328
|
+
option?.inference,
|
|
329
|
+
{
|
|
330
|
+
streaming: true,
|
|
331
|
+
onChunk: (c) => out.write(c),
|
|
332
|
+
onThinking: option?.event?.onThinking,
|
|
333
|
+
onTooling: option?.event?.onTooling
|
|
334
|
+
},
|
|
335
|
+
option?.instruction
|
|
336
|
+
);
|
|
328
337
|
out.write("");
|
|
329
338
|
out.end();
|
|
330
339
|
} catch (e) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 } 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 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[], 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\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\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"]}
|
|
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 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.8.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
|
}
|