{"version":3,"sources":["../../../src/adapters/bedrock/chat.ts"],"names":["ChatBedrockOutput","ChatLLMOutput","responses","constructor","response","register","messages","flatMap","delta","text","BaseMessage","of","role","Role","ASSISTANT","output","message","content","filter","choice","map","getTextContent","msg","join","merge","other","push","toString","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","BedrockChatLLM","ChatLLM","emitter","Emitter","root","child","namespace","creator","client","parameters","modelId","region","credentials","temperature","executionOptions","cache","Client","Serializer","toPlain","value","config","fromPlain","meta","includes","tokenLimit","Infinity","embed","input","options","command","InvokeModelCommand","contentType","accept","body","JSON","stringify","omitUndefined","inputText","flat","send","abortSignal","signal","jsonString","TextDecoder","decode","parse","tokenize","contentLength","reduce","acc","length","tokensCount","Math","ceil","_generate","_options","run","conversation","systemMessage","convertToConverseMessages","ConverseCommand","system","_stream","ConverseStreamCommand","chunk","stream","contentBlockDelta","SYSTEM","converseMessages","USER","messageList","currentMessage","lastMessage","concat"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AsyncStream,\n  BaseLLMTokenizeOutput,\n  EmbeddingOptions,\n  EmbeddingOutput,\n  ExecutionOptions,\n  GenerateOptions,\n  LLMCache,\n  LLMMeta,\n  StreamGenerateOptions,\n} from \"@/llms/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { ChatLLM, ChatLLMGenerateEvents, ChatLLMOutput } from \"@/llms/chat.js\";\nimport { BaseMessage, Role } from \"@/llms/primitives/message.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport type { AwsCredentialIdentity, Provider } from \"@aws-sdk/types\";\nimport {\n  BedrockRuntimeClient as Client,\n  InvokeModelCommand,\n  ConverseCommand,\n  ConverseCommandOutput,\n  ConverseStreamCommand,\n  ContentBlockDeltaEvent,\n  InferenceConfiguration,\n  Message as BedrockMessage,\n  SystemContentBlock as BedrockSystemContentBlock,\n} from \"@aws-sdk/client-bedrock-runtime\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { omitUndefined } from \"@/internals/helpers/object.js\";\n\ntype Response = ContentBlockDeltaEvent | ConverseCommandOutput;\n\nexport interface BedrockEmbeddingOptions extends EmbeddingOptions {\n  body?: Record<string, any>;\n}\n\nexport class ChatBedrockOutput extends ChatLLMOutput {\n  public readonly responses: Response[];\n\n  constructor(response: Response) {\n    super();\n    this.responses = [response];\n  }\n\n  static {\n    this.register();\n  }\n\n  get messages() {\n    return this.responses.flatMap((response) => {\n      if (\"delta\" in response && response.delta?.text) {\n        return [\n          BaseMessage.of({\n            role: Role.ASSISTANT,\n            text: response.delta.text,\n          }),\n        ];\n      } else if (\"output\" in response && response.output?.message?.content) {\n        return response.output.message.content\n          .filter((choice) => choice?.text)\n          .map((choice) =>\n            BaseMessage.of({\n              role: Role.ASSISTANT,\n              text: choice.text!,\n            }),\n          );\n      }\n      return [];\n    });\n  }\n\n  getTextContent() {\n    return this.messages.map((msg) => msg.text).join(\"\");\n  }\n\n  merge(other: ChatBedrockOutput) {\n    this.responses.push(...other.responses);\n  }\n\n  toString() {\n    return this.getTextContent();\n  }\n\n  createSnapshot() {\n    return {\n      responses: shallowCopy(this.responses),\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n}\n\ninterface Input {\n  modelId?: string;\n  region?: string;\n  client?: Client;\n  credentials?: AwsCredentialIdentity | Provider<AwsCredentialIdentity>;\n  parameters?: InferenceConfiguration;\n  executionOptions?: ExecutionOptions;\n  cache?: LLMCache<ChatBedrockOutput>;\n}\n\nexport type BedrockChatLLMEvents = ChatLLMGenerateEvents<ChatBedrockOutput>;\n\nexport class BedrockChatLLM extends ChatLLM<ChatBedrockOutput> {\n  public readonly emitter = Emitter.root.child<BedrockChatLLMEvents>({\n    namespace: [\"bedrock\", \"chat_llm\"],\n    creator: this,\n  });\n\n  public readonly client: Client;\n  public readonly parameters: Partial<InferenceConfiguration>;\n\n  constructor({\n    client,\n    modelId = \"amazon.titan-text-lite-v1\",\n    region = \"us-east-1\",\n    credentials,\n    parameters = {\n      temperature: 0,\n    },\n    executionOptions = {},\n    cache,\n  }: Input = {}) {\n    super(modelId, executionOptions, cache);\n    this.client = client ?? new Client({ region: region, credentials: credentials });\n    this.parameters = parameters ?? {};\n  }\n\n  static {\n    this.register();\n    Serializer.register(Client, {\n      toPlain: (value) => ({\n        config: {\n          region: value.config.region,\n          credentials: value.config.credentials,\n        },\n      }),\n      fromPlain: (value) =>\n        new Client({\n          region: value.config.region,\n          credentials: value.config.credentials,\n        }),\n    });\n  }\n\n  async meta(): Promise<LLMMeta> {\n    if (this.modelId.includes(\"titan-text-premier\")) {\n      return { tokenLimit: 3 * 1024 };\n    } else if (\n      this.modelId.includes(\"titan-text-express\") ||\n      this.modelId.includes(\"anthropic.claude-v2\") ||\n      this.modelId.includes(\"anthropic.claude-instant-v1\") ||\n      this.modelId.includes(\"anthropic.claude-3-sonnet\") ||\n      this.modelId.includes(\"anthropic.claude-3-haiku\") ||\n      this.modelId.includes(\"anthropic.claude-3-opus\") ||\n      this.modelId.includes(\"meta.llama2\") ||\n      this.modelId.includes(\"cohere.command-text\") ||\n      this.modelId.includes(\"cohere.command-light\")\n    ) {\n      return { tokenLimit: 4 * 1024 };\n    } else if (\n      this.modelId.includes(\"titan-text-lite\") ||\n      this.modelId.includes(\"anthropic.claude-3-5-sonnet\") ||\n      this.modelId.includes(\"anthropic.claude-3-5-haiku\") ||\n      this.modelId.includes(\"meta.llama3-8b\") ||\n      this.modelId.includes(\"meta.llama3-70b\") ||\n      this.modelId.includes(\"ai21.j2\")\n    ) {\n      return { tokenLimit: 8 * 1024 };\n    } else if (\n      this.modelId.includes(\"mistral.mistral-7b\") ||\n      this.modelId.includes(\"mistral.mixtral-8x7b\") ||\n      this.modelId.includes(\"mistral.mistral-small\")\n    ) {\n      return { tokenLimit: 32 * 1024 };\n    } else if (\n      this.modelId.includes(\"meta.llama3-1\") ||\n      this.modelId.includes(\"meta.llama3-2\") ||\n      this.modelId.includes(\"mistral.mistral-large\") ||\n      this.modelId.includes(\"cohere.command-r\")\n    ) {\n      return { tokenLimit: 128 * 1024 };\n    } else if (this.modelId.includes(\"ai21.jamba\")) {\n      return { tokenLimit: 256 * 1024 };\n    }\n\n    return {\n      tokenLimit: Infinity,\n    };\n  }\n\n  async embed(\n    input: BaseMessage[][],\n    options: BedrockEmbeddingOptions = {},\n  ): Promise<EmbeddingOutput> {\n    const command = new InvokeModelCommand({\n      modelId: this.modelId,\n      contentType: \"application/json\",\n      accept: \"application/json\",\n      body: JSON.stringify(\n        omitUndefined({\n          inputText: input.flat().map((msg) => msg.text),\n          ...options?.body,\n        }),\n      ),\n    });\n\n    const response = await this.client.send(command, { abortSignal: options?.signal });\n    const jsonString = new TextDecoder().decode(response.body);\n    return JSON.parse(jsonString);\n  }\n\n  async tokenize(input: BaseMessage[]): Promise<BaseLLMTokenizeOutput> {\n    const contentLength = input.reduce((acc, msg) => acc + msg.text.length, 0);\n    return { tokensCount: Math.ceil(contentLength / 4) };\n  }\n\n  protected async _generate(\n    input: BaseMessage[],\n    _options: Partial<GenerateOptions>,\n    run: GetRunContext<typeof this>,\n  ): Promise<ChatBedrockOutput> {\n    const { conversation, systemMessage } = this.convertToConverseMessages(input);\n    const command = new ConverseCommand({\n      modelId: this.modelId,\n      messages: conversation,\n      system: systemMessage,\n      ...this.parameters,\n    });\n    const response = await this.client.send(command, { abortSignal: run.signal });\n    return new ChatBedrockOutput(response);\n  }\n\n  protected async *_stream(\n    input: BaseMessage[],\n    _options: StreamGenerateOptions | undefined,\n    run: GetRunContext<typeof this>,\n  ): AsyncStream<ChatBedrockOutput> {\n    const { conversation, systemMessage } = this.convertToConverseMessages(input);\n    const command = new ConverseStreamCommand({\n      modelId: this.modelId,\n      messages: conversation,\n      system: systemMessage,\n      ...this.parameters,\n    });\n    const response = await this.client.send(command, { abortSignal: run.signal });\n    for await (const chunk of response?.stream || []) {\n      if (chunk.contentBlockDelta) {\n        yield new ChatBedrockOutput(chunk.contentBlockDelta);\n      }\n    }\n  }\n\n  createSnapshot() {\n    return {\n      ...super.createSnapshot(),\n      client: this.client,\n      modelId: this.modelId,\n      parameters: shallowCopy(this.parameters),\n    };\n  }\n\n  protected convertToConverseMessages(messages: BaseMessage[]): {\n    conversation: BedrockMessage[];\n    systemMessage: BedrockSystemContentBlock[];\n  } {\n    const systemMessage: BedrockSystemContentBlock[] = messages\n      .filter((msg) => msg.role === Role.SYSTEM)\n      .map((msg) => ({ text: msg.text }));\n\n    const converseMessages: BedrockMessage[] = messages\n      .filter((msg) => msg.role !== Role.SYSTEM)\n      .map((msg) => ({\n        role: msg.role === Role.USER ? Role.USER : Role.ASSISTANT,\n        content: [{ text: msg.text }],\n      }));\n\n    const conversation = converseMessages.reduce<BedrockMessage[]>(\n      (messageList, currentMessage) => {\n        const lastMessage = messageList[messageList.length - 1];\n        if (lastMessage && lastMessage !== currentMessage && lastMessage.role === Role.USER) {\n          lastMessage.content = lastMessage.content!.concat(currentMessage.content!);\n        } else {\n          messageList.push(currentMessage);\n        }\n\n        return messageList;\n      },\n      [],\n    );\n    return { conversation, systemMessage };\n  }\n}\n"]}