@traceloop/instrumentation-bedrock 0.22.6 → 0.24.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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/instrumentation.ts"],"sourcesContent":["/*\n * Copyright Traceloop\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 * https://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 */\nimport {\n Span,\n Attributes,\n SpanKind,\n SpanStatusCode,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from \"@opentelemetry/instrumentation\";\nimport { BedrockInstrumentationConfig } from \"./types\";\nimport type * as bedrock from \"@aws-sdk/client-bedrock-runtime\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n LLMRequestTypeValues,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_COMPLETION,\n ATTR_GEN_AI_PROMPT,\n ATTR_GEN_AI_REQUEST_MAX_TOKENS,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_REQUEST_TEMPERATURE,\n ATTR_GEN_AI_REQUEST_TOP_P,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_SYSTEM,\n ATTR_GEN_AI_USAGE_COMPLETION_TOKENS,\n ATTR_GEN_AI_USAGE_PROMPT_TOKENS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport { version } from \"../package.json\";\n\nexport class BedrockInstrumentation extends InstrumentationBase {\n declare protected _config: BedrockInstrumentationConfig;\n\n constructor(config: BedrockInstrumentationConfig = {}) {\n super(\"@traceloop/instrumentation-bedrock\", version, config);\n }\n\n public override setConfig(config: BedrockInstrumentationConfig = {}) {\n super.setConfig(config);\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@aws-sdk/client-bedrock-runtime\",\n [\">=3.499.0\"],\n this.wrap.bind(this),\n this.unwrap.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(module: typeof bedrock) {\n this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime manually`);\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n }\n\n private wrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Patching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n\n return module;\n }\n\n private unwrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Unpatching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._unwrap(module.BedrockRuntimeClient.prototype, \"send\");\n }\n\n private wrapperMethod() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const plugin = this;\n // eslint-disable-next-line\n return (original: Function) => {\n return function method(this: any, ...args: any) {\n const span = plugin._startSpan({\n params: args[0],\n });\n const execContext = trace.setSpan(context.active(), span);\n const execPromise = safeExecuteInTheMiddle(\n () => {\n return context.with(execContext, () => {\n return original.apply(this, args);\n });\n },\n (e) => {\n if (e) {\n plugin._diag.error(`Error in bedrock instrumentation`, e);\n }\n },\n );\n const wrappedPromise = plugin._wrapPromise(span, execPromise);\n return context.bind(execContext, wrappedPromise);\n };\n };\n }\n private _wrapPromise<T>(span: Span, promise: Promise<T>): Promise<T> {\n return promise\n .then(async (result) => {\n await this._endSpan({\n span,\n result: result as\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput,\n });\n\n return new Promise<T>((resolve) => resolve(result));\n })\n .catch((error: Error) => {\n return new Promise<T>((_, reject) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.recordException(error);\n span.end();\n\n reject(error);\n });\n });\n }\n\n private _startSpan({\n params,\n }: {\n params: Parameters<bedrock.BedrockRuntimeClient[\"send\"]>[0];\n }): Span {\n let attributes: Attributes = {};\n\n try {\n const input = params.input as bedrock.InvokeModelCommandInput;\n const { modelVendor, model } = this._extractVendorAndModel(\n input.modelId || \"\",\n );\n\n attributes = {\n [ATTR_GEN_AI_SYSTEM]: \"AWS\",\n [ATTR_GEN_AI_REQUEST_MODEL]: model,\n [ATTR_GEN_AI_RESPONSE_MODEL]: input.modelId,\n [SpanAttributes.LLM_REQUEST_TYPE]: LLMRequestTypeValues.COMPLETION,\n };\n\n if (typeof input.body === \"string\") {\n const requestBody = JSON.parse(input.body);\n\n attributes = {\n ...attributes,\n ...this._setRequestAttributes(modelVendor, requestBody),\n };\n }\n } catch (e) {\n this._diag.debug(e);\n this._config.exceptionLogger?.(e);\n }\n\n return this.tracer.startSpan(`bedrock.completion`, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n private async _endSpan({\n span,\n result,\n }: {\n span: Span;\n result:\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput;\n }) {\n try {\n if (\"body\" in result) {\n const attributes =\n \"attributes\" in span\n ? (span[\"attributes\"] as Record<string, any>)\n : {};\n\n if (ATTR_GEN_AI_SYSTEM in attributes) {\n const modelId = attributes[ATTR_GEN_AI_RESPONSE_MODEL] as string;\n const { modelVendor, model } = this._extractVendorAndModel(modelId);\n\n span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, model);\n\n if (!(result.body instanceof Object.getPrototypeOf(Uint8Array))) {\n const rawRes = result.body as AsyncIterable<bedrock.ResponseStream>;\n\n let streamedContent = \"\";\n for await (const value of rawRes) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(value.chunk?.bytes);\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n if (\"amazon-bedrock-invocationMetrics\" in parsedResponse) {\n span.setAttribute(\n ATTR_GEN_AI_USAGE_PROMPT_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ],\n );\n span.setAttribute(\n ATTR_GEN_AI_USAGE_COMPLETION_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ] +\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n }\n\n let responseAttributes = this._setResponseAttributes(\n modelVendor,\n parsedResponse,\n true,\n );\n\n // ! NOTE: This make sure the content always have all streamed chunks\n if (this._shouldSendPrompts()) {\n // Update local value with attribute value that was set by _setResponseAttributes\n streamedContent +=\n responseAttributes[`${ATTR_GEN_AI_COMPLETION}.0.content`];\n // re-assign the new value to responseAttributes\n responseAttributes = {\n ...responseAttributes,\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]: streamedContent,\n };\n }\n\n span.setAttributes(responseAttributes);\n }\n } else if (result.body instanceof Object.getPrototypeOf(Uint8Array)) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(\n result.body as Uint8Array,\n );\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n const responseAttributes = this._setResponseAttributes(\n modelVendor,\n parsedResponse,\n );\n\n span.setAttributes(responseAttributes);\n }\n }\n }\n } catch (e) {\n this._diag.debug(e);\n this._config.exceptionLogger?.(e);\n }\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n }\n\n private _setRequestAttributes(\n vendor: string,\n requestBody: Record<string, any>,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"topP\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"maxTokens\"],\n [SpanAttributes.LLM_PRESENCE_PENALTY]:\n requestBody[\"presencePenalty\"][\"scale\"],\n [SpanAttributes.LLM_FREQUENCY_PENALTY]:\n requestBody[\"frequencyPenalty\"][\"scale\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_PROMPT}.0.role`]: \"user\",\n [`${ATTR_GEN_AI_PROMPT}.0.content`]: requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]:\n requestBody[\"textGenerationConfig\"][\"topP\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]:\n requestBody[\"textGenerationConfig\"][\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]:\n requestBody[\"textGenerationConfig\"][\"maxTokenCount\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_PROMPT}.0.role`]: \"user\",\n [`${ATTR_GEN_AI_PROMPT}.0.content`]: requestBody[\"inputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n const baseAttributes = {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"top_p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"top_k\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]:\n requestBody[\"max_tokens_to_sample\"] || requestBody[\"max_tokens\"],\n };\n\n if (!this._shouldSendPrompts()) {\n return baseAttributes;\n }\n\n // Handle new messages API format (used by langchain)\n if (requestBody[\"messages\"]) {\n const promptAttributes: Record<string, any> = {};\n requestBody[\"messages\"].forEach((message: any, index: number) => {\n promptAttributes[`${ATTR_GEN_AI_PROMPT}.${index}.role`] =\n message.role;\n promptAttributes[`${ATTR_GEN_AI_PROMPT}.${index}.content`] =\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content);\n });\n return { ...baseAttributes, ...promptAttributes };\n }\n\n // Handle legacy prompt format\n if (requestBody[\"prompt\"]) {\n return {\n ...baseAttributes,\n [`${ATTR_GEN_AI_PROMPT}.0.role`]: \"user\",\n [`${ATTR_GEN_AI_PROMPT}.0.content`]: requestBody[\"prompt\"]\n // The format is removing when we are setting span attribute\n .replace(\"\\n\\nHuman:\", \"\")\n .replace(\"\\n\\nAssistant:\", \"\"),\n };\n }\n\n return baseAttributes;\n }\n case \"cohere\": {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"p\"],\n [SpanAttributes.LLM_TOP_K]: requestBody[\"k\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"max_tokens\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_PROMPT}.0.role`]: \"user\",\n [`${ATTR_GEN_AI_PROMPT}.0.content`]:\n requestBody[\"message\"] || requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n case \"meta\": {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"top_p\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"max_gen_len\"],\n\n // Prompt & Role\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_PROMPT}.0.role`]: \"user\",\n [`${ATTR_GEN_AI_PROMPT}.0.content`]: requestBody[\"prompt\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _setResponseAttributes(\n vendor: string,\n response: Record<string, any>,\n isStream = false,\n ) {\n switch (vendor) {\n case \"ai21\": {\n return {\n [`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`]:\n response[\"completions\"][0][\"finishReason\"][\"reason\"],\n [`${ATTR_GEN_AI_COMPLETION}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]:\n response[\"completions\"][0][\"data\"][\"text\"],\n }\n : {}),\n };\n }\n case \"amazon\": {\n return {\n [`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`]: isStream\n ? response[\"completionReason\"]\n : response[\"results\"][0][\"completionReason\"],\n [`${ATTR_GEN_AI_COMPLETION}.0.role`]: \"assistant\",\n [ATTR_GEN_AI_USAGE_PROMPT_TOKENS]: response[\"inputTextTokenCount\"],\n [ATTR_GEN_AI_USAGE_COMPLETION_TOKENS]: isStream\n ? response[\"totalOutputTextTokenCount\"]\n : response[\"results\"][0][\"tokenCount\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: isStream\n ? response[\"inputTextTokenCount\"] +\n response[\"totalOutputTextTokenCount\"]\n : response[\"inputTextTokenCount\"] +\n response[\"results\"][0][\"tokenCount\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]: isStream\n ? response[\"outputText\"]\n : response[\"results\"][0][\"outputText\"],\n }\n : {}),\n };\n }\n case \"anthropic\": {\n const baseAttributes = {\n [`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${ATTR_GEN_AI_COMPLETION}.0.role`]: \"assistant\",\n };\n\n if (!this._shouldSendPrompts()) {\n return baseAttributes;\n }\n\n // Handle new messages API format response\n if (response[\"content\"]) {\n const content = Array.isArray(response[\"content\"])\n ? response[\"content\"].map((c: any) => c.text || c).join(\"\")\n : response[\"content\"];\n return {\n ...baseAttributes,\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]: content,\n };\n }\n\n // Handle legacy completion format\n if (response[\"completion\"]) {\n return {\n ...baseAttributes,\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]: response[\"completion\"],\n };\n }\n\n return baseAttributes;\n }\n case \"cohere\": {\n const baseAttributes = {\n [`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`]:\n response[\"generations\"]?.[0]?.[\"finish_reason\"],\n [`${ATTR_GEN_AI_COMPLETION}.0.role`]: \"assistant\",\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]:\n response[\"generations\"]?.[0]?.[\"text\"],\n }\n : {}),\n };\n\n // Add token usage if available\n if (response[\"meta\"] && response[\"meta\"][\"billed_units\"]) {\n const billedUnits = response[\"meta\"][\"billed_units\"];\n return {\n ...baseAttributes,\n [ATTR_GEN_AI_USAGE_PROMPT_TOKENS]: billedUnits[\"input_tokens\"],\n [ATTR_GEN_AI_USAGE_COMPLETION_TOKENS]: billedUnits[\"output_tokens\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]:\n (billedUnits[\"input_tokens\"] || 0) +\n (billedUnits[\"output_tokens\"] || 0),\n };\n }\n\n return baseAttributes;\n }\n case \"meta\": {\n return {\n [`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`]:\n response[\"stop_reason\"],\n [`${ATTR_GEN_AI_COMPLETION}.0.role`]: \"assistant\",\n [ATTR_GEN_AI_USAGE_PROMPT_TOKENS]: response[\"prompt_token_count\"],\n [ATTR_GEN_AI_USAGE_COMPLETION_TOKENS]:\n response[\"generation_token_count\"],\n [SpanAttributes.LLM_USAGE_TOTAL_TOKENS]:\n response[\"prompt_token_count\"] + response[\"generation_token_count\"],\n ...(this._shouldSendPrompts()\n ? {\n [`${ATTR_GEN_AI_COMPLETION}.0.content`]: response[\"generation\"],\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _shouldSendPrompts() {\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n return this._config.traceContent !== undefined\n ? this._config.traceContent\n : true;\n }\n\n private _extractVendorAndModel(modelId: string): {\n modelVendor: string;\n model: string;\n } {\n if (!modelId) {\n return { modelVendor: \"\", model: \"\" };\n }\n\n const parts = modelId.split(\".\");\n return {\n modelVendor: parts[0] || \"\",\n model: parts[1] || \"\",\n };\n }\n}\n"],"names":["InstrumentationBase","InstrumentationNodeModuleDefinition","trace","context","safeExecuteInTheMiddle","__awaiter","SpanStatusCode","ATTR_GEN_AI_SYSTEM","ATTR_GEN_AI_REQUEST_MODEL","ATTR_GEN_AI_RESPONSE_MODEL","SpanAttributes","LLMRequestTypeValues","SpanKind","__asyncValues","ATTR_GEN_AI_USAGE_PROMPT_TOKENS","ATTR_GEN_AI_USAGE_COMPLETION_TOKENS","ATTR_GEN_AI_COMPLETION","ATTR_GEN_AI_REQUEST_TOP_P","ATTR_GEN_AI_REQUEST_TEMPERATURE","ATTR_GEN_AI_REQUEST_MAX_TOKENS","ATTR_GEN_AI_PROMPT","CONTEXT_KEY_ALLOW_TRACE_CONTENT"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/types.ts","../../src/instrumentation.ts"],"sourcesContent":["import { InstrumentationConfig } from \"@opentelemetry/instrumentation\";\n\nexport enum BedrockVendor {\n AI21 = \"ai21\",\n AMAZON = \"amazon\",\n ANTHROPIC = \"anthropic\",\n COHERE = \"cohere\",\n META = \"meta\",\n}\n\nexport interface BedrockInstrumentationConfig extends InstrumentationConfig {\n /**\n * Whether to log prompts, completions and embeddings on traces.\n * @default true\n */\n traceContent?: boolean;\n\n /**\n * A custom logger to log any exceptions that happen during span creation.\n */\n exceptionLogger?: (e: Error) => void;\n}\n","/*\n * Copyright Traceloop\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 * https://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 */\nimport {\n Span,\n Attributes,\n SpanKind,\n SpanStatusCode,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from \"@opentelemetry/instrumentation\";\nimport { BedrockInstrumentationConfig, BedrockVendor } from \"./types\";\nimport type * as bedrock from \"@aws-sdk/client-bedrock-runtime\";\nimport {\n CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport {\n ATTR_GEN_AI_INPUT_MESSAGES,\n ATTR_GEN_AI_OPERATION_NAME,\n ATTR_GEN_AI_OUTPUT_MESSAGES,\n ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY,\n ATTR_GEN_AI_REQUEST_MAX_TOKENS,\n ATTR_GEN_AI_REQUEST_MODEL,\n ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY,\n ATTR_GEN_AI_REQUEST_TEMPERATURE,\n ATTR_GEN_AI_REQUEST_TOP_K,\n ATTR_GEN_AI_REQUEST_TOP_P,\n ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n ATTR_GEN_AI_RESPONSE_MODEL,\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n GEN_AI_OPERATION_NAME_VALUE_CHAT,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n ATTR_GEN_AI_PROVIDER_NAME,\n GEN_AI_PROVIDER_NAME_VALUE_AWS_BEDROCK,\n ATTR_GEN_AI_SYSTEM_INSTRUCTIONS,\n} from \"@opentelemetry/semantic-conventions/incubating\";\nimport {\n formatInputMessages,\n formatInputMessagesFromPrompt,\n formatOutputMessage,\n formatSystemInstructions,\n mapBedrockContentBlock,\n} from \"@traceloop/instrumentation-utils\";\nimport { version } from \"../package.json\";\nimport { FinishReasons } from \"@traceloop/ai-semantic-conventions\";\n\nexport const bedrockFinishReasonMap: Record<string, string> = {\n // AI21\n endoftext: FinishReasons.STOP,\n // Amazon Titan / Nova\n FINISH: FinishReasons.STOP,\n LENGTH: FinishReasons.LENGTH,\n CONTENT_FILTERED: FinishReasons.CONTENT_FILTER,\n // Anthropic\n end_turn: FinishReasons.STOP,\n max_tokens: FinishReasons.LENGTH,\n stop_sequence: FinishReasons.STOP,\n tool_use: FinishReasons.TOOL_CALL,\n // Cohere\n COMPLETE: FinishReasons.STOP,\n MAX_TOKENS: FinishReasons.LENGTH,\n ERROR: FinishReasons.ERROR,\n ERROR_TOXIC: FinishReasons.CONTENT_FILTER,\n // Meta\n stop: FinishReasons.STOP,\n length: FinishReasons.LENGTH,\n};\n\nexport class BedrockInstrumentation extends InstrumentationBase {\n declare protected _config: BedrockInstrumentationConfig;\n\n constructor(config: BedrockInstrumentationConfig = {}) {\n super(\"@traceloop/instrumentation-bedrock\", version, config);\n }\n\n public override setConfig(config: BedrockInstrumentationConfig = {}) {\n super.setConfig(config);\n }\n\n protected init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n \"@aws-sdk/client-bedrock-runtime\",\n [\">=3.499.0\"],\n this.wrap.bind(this),\n this.unwrap.bind(this),\n );\n\n return module;\n }\n\n public manuallyInstrument(module: typeof bedrock) {\n this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime manually`);\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n }\n\n private wrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Patching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._wrap(\n module.BedrockRuntimeClient.prototype,\n \"send\",\n this.wrapperMethod(),\n );\n\n return module;\n }\n\n private unwrap(module: typeof bedrock, moduleVersion?: string) {\n this._diag.debug(\n `Unpatching @aws-sdk/client-bedrock-runtime@${moduleVersion}`,\n );\n\n this._unwrap(module.BedrockRuntimeClient.prototype, \"send\");\n }\n\n private wrapperMethod() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const plugin = this;\n // eslint-disable-next-line\n return (original: Function) => {\n return function method(this: any, ...args: any) {\n const span = plugin._startSpan({\n params: args[0],\n });\n const modelId =\n (args[0]?.input as bedrock.InvokeModelCommandInput)?.modelId ?? \"\";\n const execContext = trace.setSpan(context.active(), span);\n const execPromise = safeExecuteInTheMiddle(\n () => {\n return context.with(execContext, () => {\n return original.apply(this, args);\n });\n },\n (e) => {\n if (e) {\n plugin._diag.error(`Error in bedrock instrumentation`, e);\n }\n },\n );\n const wrappedPromise = plugin._wrapPromise(span, execPromise, modelId);\n return context.bind(execContext, wrappedPromise);\n };\n };\n }\n private _wrapPromise<T>(\n span: Span,\n promise: Promise<T>,\n modelId: string,\n ): Promise<T> {\n return promise\n .then(async (result) => {\n await this._endSpan({\n span,\n result: result as\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput,\n modelId,\n });\n\n return new Promise<T>((resolve) => resolve(result));\n })\n .catch((error: Error) => {\n return new Promise<T>((_, reject) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n span.recordException(error);\n span.end();\n\n reject(error);\n });\n });\n }\n\n private _startSpan({\n params,\n }: {\n params: Parameters<bedrock.BedrockRuntimeClient[\"send\"]>[0];\n }): Span {\n let attributes: Attributes = {};\n let spanName = \"bedrock.completion\";\n\n try {\n const input = params.input as bedrock.InvokeModelCommandInput;\n const { modelVendor, model } = this._extractVendorAndModel(\n input.modelId || \"\",\n );\n\n attributes = {\n [ATTR_GEN_AI_PROVIDER_NAME]: GEN_AI_PROVIDER_NAME_VALUE_AWS_BEDROCK,\n [ATTR_GEN_AI_REQUEST_MODEL]: model,\n };\n\n if (typeof input.body === \"string\") {\n const requestBody = JSON.parse(input.body);\n const operationType = this._getOperationType(modelVendor, requestBody);\n spanName = `${operationType} ${model}`;\n // Set operation name before _setRequestAttributes so it is always\n // present even if _setRequestAttributes throws for an unexpected body.\n attributes = {\n ...attributes,\n [ATTR_GEN_AI_OPERATION_NAME]: operationType,\n };\n attributes = {\n ...attributes,\n ...this._setRequestAttributes(modelVendor, requestBody),\n };\n }\n } catch (e) {\n this._diag.debug(e);\n this._config.exceptionLogger?.(e);\n }\n\n return this.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n private async _endSpan({\n span,\n result,\n modelId,\n }: {\n span: Span;\n result:\n | bedrock.InvokeModelCommandOutput\n | bedrock.InvokeModelWithResponseStreamCommandOutput;\n modelId: string;\n }) {\n try {\n if (\"body\" in result) {\n const attributes =\n \"attributes\" in span\n ? (span[\"attributes\"] as Record<string, any>)\n : {};\n\n if (ATTR_GEN_AI_PROVIDER_NAME in attributes) {\n const { modelVendor, model } = this._extractVendorAndModel(modelId);\n\n span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, model);\n\n if (!(result.body instanceof Object.getPrototypeOf(Uint8Array))) {\n const rawRes = result.body as AsyncIterable<bedrock.ResponseStream>;\n\n let streamedContent = \"\";\n for await (const value of rawRes) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(value.chunk?.bytes);\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n if (\"amazon-bedrock-invocationMetrics\" in parsedResponse) {\n span.setAttribute(\n ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ],\n );\n span.setAttribute(\n ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ],\n );\n\n const totalTokens =\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"inputTokenCount\"\n ] +\n parsedResponse[\"amazon-bedrock-invocationMetrics\"][\n \"outputTokenCount\"\n ];\n span.setAttribute(\n SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS,\n totalTokens,\n );\n }\n\n this._handleNovaStreamingMetadata(span, parsedResponse);\n\n const responseAttributes = this._setResponseAttributes(\n modelVendor,\n parsedResponse,\n true,\n );\n\n // ! NOTE: This make sure the content always have all streamed chunks\n if (this._shouldSendPrompts()) {\n const chunkContent = this._getStreamChunkContent(\n modelVendor,\n parsedResponse,\n );\n if (chunkContent !== undefined) {\n streamedContent += chunkContent;\n }\n\n // When finish reason is available (final chunk), set OTel 1.40 output message\n if (responseAttributes[ATTR_GEN_AI_RESPONSE_FINISH_REASONS]) {\n const finishReasons = responseAttributes[\n ATTR_GEN_AI_RESPONSE_FINISH_REASONS\n ] as string[];\n responseAttributes[ATTR_GEN_AI_OUTPUT_MESSAGES] =\n formatOutputMessage(\n streamedContent,\n finishReasons[0] ?? null,\n {}, // already mapped by _setResponseAttributes\n attributes[ATTR_GEN_AI_OPERATION_NAME],\n mapBedrockContentBlock,\n );\n }\n }\n\n span.setAttributes(responseAttributes);\n }\n } else if (result.body instanceof Object.getPrototypeOf(Uint8Array)) {\n // Convert it to a JSON String\n const jsonString = new TextDecoder().decode(\n result.body as Uint8Array,\n );\n // Parse the JSON string\n const parsedResponse = JSON.parse(jsonString);\n\n const responseAttributes = this._setResponseAttributes(\n modelVendor,\n parsedResponse,\n );\n\n span.setAttributes(responseAttributes);\n }\n }\n }\n } catch (e) {\n this._diag.debug(e);\n this._config.exceptionLogger?.(e);\n }\n\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n }\n\n private _setRequestAttributes(\n vendor: string,\n requestBody: Record<string, any>,\n ) {\n switch (vendor) {\n case BedrockVendor.AI21: {\n // Jamba format: messages array + max_tokens + top_p\n if (requestBody[\"messages\"]) {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"top_p\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"max_tokens\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessages(\n requestBody[\"messages\"],\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n\n // Legacy Jurassic format: prompt + topP + maxTokens\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"topP\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"maxTokens\"],\n [ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY]:\n requestBody[\"presencePenalty\"]?.[\"scale\"],\n [ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY]:\n requestBody[\"frequencyPenalty\"]?.[\"scale\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessagesFromPrompt(\n requestBody[\"prompt\"],\n ),\n }\n : {}),\n };\n }\n case BedrockVendor.AMAZON: {\n // Amazon Nova format: messages array + inferenceConfig\n if (requestBody[\"messages\"]) {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]:\n requestBody[\"inferenceConfig\"]?.[\"topP\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]:\n requestBody[\"inferenceConfig\"]?.[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]:\n requestBody[\"inferenceConfig\"]?.[\"maxTokens\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessages(\n requestBody[\"messages\"],\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n\n // Amazon Titan format: inputText + textGenerationConfig\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]:\n requestBody[\"textGenerationConfig\"]?.[\"topP\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]:\n requestBody[\"textGenerationConfig\"]?.[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]:\n requestBody[\"textGenerationConfig\"]?.[\"maxTokenCount\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessagesFromPrompt(\n requestBody[\"inputText\"],\n ),\n }\n : {}),\n };\n }\n case BedrockVendor.ANTHROPIC: {\n const baseAttributes = {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"top_p\"],\n [ATTR_GEN_AI_REQUEST_TOP_K]: requestBody[\"top_k\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]:\n requestBody[\"max_tokens_to_sample\"] || requestBody[\"max_tokens\"],\n };\n\n if (!this._shouldSendPrompts()) {\n return baseAttributes;\n }\n\n // Handle new messages API format (used by langchain)\n if (requestBody[\"messages\"]) {\n const promptAttributes: Record<string, any> = {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessages(\n requestBody[\"messages\"],\n mapBedrockContentBlock,\n ),\n };\n if (requestBody[\"system\"] !== undefined) {\n promptAttributes[ATTR_GEN_AI_SYSTEM_INSTRUCTIONS] =\n formatSystemInstructions(requestBody[\"system\"]);\n }\n return { ...baseAttributes, ...promptAttributes };\n }\n\n // Handle legacy prompt format\n if (requestBody[\"prompt\"]) {\n return {\n ...baseAttributes,\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessagesFromPrompt(\n requestBody[\"prompt\"]\n .replace(\"\\n\\nHuman:\", \"\")\n .replace(\"\\n\\nAssistant:\", \"\"),\n ),\n };\n }\n\n return baseAttributes;\n }\n case BedrockVendor.COHERE: {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"p\"],\n [ATTR_GEN_AI_REQUEST_TOP_K]: requestBody[\"k\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"max_tokens\"],\n };\n }\n case BedrockVendor.META: {\n return {\n [ATTR_GEN_AI_REQUEST_TOP_P]: requestBody[\"top_p\"],\n [ATTR_GEN_AI_REQUEST_TEMPERATURE]: requestBody[\"temperature\"],\n [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: requestBody[\"max_gen_len\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_INPUT_MESSAGES]: formatInputMessagesFromPrompt(\n requestBody[\"prompt\"],\n ),\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _setResponseAttributes(\n vendor: string,\n response: Record<string, any>,\n isStream = false,\n ) {\n switch (vendor) {\n case BedrockVendor.AI21: {\n // Jamba format: choices[0].message + choices[0].finish_reason\n if (response[\"choices\"]) {\n const usage = response[\"usage\"];\n const finishReason = response[\"choices\"][0]?.[\"finish_reason\"];\n const content = isStream\n ? response[\"choices\"][0]?.[\"delta\"]?.[\"content\"]\n : response[\"choices\"][0]?.[\"message\"]?.[\"content\"];\n return {\n ...(finishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[finishReason] ?? finishReason,\n ],\n }\n : {}),\n ...(usage\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: usage[\"prompt_tokens\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: usage[\"completion_tokens\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n usage[\"total_tokens\"],\n }\n : {}),\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n content ?? \"\",\n finishReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n\n // Legacy Jurassic format: completions[0].data.text\n const jurassicFinishReason =\n response[\"completions\"][0][\"finishReason\"][\"reason\"];\n const jurassicContent = response[\"completions\"][0][\"data\"][\"text\"];\n return {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[jurassicFinishReason] ??\n jurassicFinishReason,\n ],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n jurassicContent,\n jurassicFinishReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n case BedrockVendor.AMAZON: {\n if (isStream) {\n // Amazon Nova format: contentBlockDelta has text, messageStop has stopReason\n const novaFinishReason = response[\"messageStop\"]?.[\"stopReason\"];\n // Amazon Titan format: outputText, completionReason\n const titanFinishReason = response[\"completionReason\"];\n const finishReason = novaFinishReason ?? titanFinishReason;\n\n return {\n ...(finishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[finishReason] ?? finishReason,\n ],\n }\n : {}),\n // Titan includes token counts on the final chunk\n ...(response[\"inputTextTokenCount\"] != null\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]:\n response[\"inputTextTokenCount\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]:\n response[\"totalOutputTextTokenCount\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n response[\"inputTextTokenCount\"] +\n response[\"totalOutputTextTokenCount\"],\n }\n : {}),\n };\n }\n\n // Amazon Titan token fields\n const titanInputTokens = response[\"inputTextTokenCount\"];\n const titanOutputTokens = response[\"results\"]?.[0]?.[\"tokenCount\"];\n // Amazon Nova token fields\n const novaUsage = response[\"usage\"];\n\n const amazonFinishReason =\n response[\"results\"]?.[0]?.[\"completionReason\"] ??\n response[\"stopReason\"];\n const novaRawContent = response[\"output\"]?.[\"message\"]?.[\"content\"];\n const titanContent = response[\"results\"]?.[0]?.[\"outputText\"];\n const outputContent = novaRawContent ?? titanContent ?? \"\";\n const operationType = novaRawContent\n ? GEN_AI_OPERATION_NAME_VALUE_CHAT\n : GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION;\n\n return {\n ...(amazonFinishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[amazonFinishReason] ??\n amazonFinishReason,\n ],\n }\n : {}),\n ...(titanInputTokens != null\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: titanInputTokens,\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: titanOutputTokens,\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n titanInputTokens + titanOutputTokens,\n }\n : novaUsage != null\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: novaUsage[\"inputTokens\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: novaUsage[\"outputTokens\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n novaUsage[\"totalTokens\"],\n }\n : {}),\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n outputContent,\n amazonFinishReason,\n bedrockFinishReasonMap,\n operationType,\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n case BedrockVendor.ANTHROPIC: {\n if (isStream) {\n // New messages API streaming: content_block_delta has delta.text,\n // message_delta has delta.stop_reason\n const stopReason =\n response[\"delta\"]?.[\"stop_reason\"] ?? response[\"stop_reason\"];\n const finishReason = stopReason ?? undefined;\n\n return {\n ...(finishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[finishReason] ?? finishReason,\n ],\n }\n : {}),\n };\n }\n\n const stopReason = response[\"stop_reason\"];\n const usage = response[\"usage\"];\n const baseAttributes: Record<string, any> = {\n ...(stopReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[stopReason] ?? stopReason,\n ],\n }\n : {}),\n // Anthropic new messages API returns usage on non-streaming response\n ...(usage\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: usage[\"input_tokens\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: usage[\"output_tokens\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n (usage[\"input_tokens\"] || 0) + (usage[\"output_tokens\"] || 0),\n }\n : {}),\n };\n\n if (!this._shouldSendPrompts()) {\n return baseAttributes;\n }\n\n // Handle new messages API format response\n if (response[\"content\"]) {\n const content = Array.isArray(response[\"content\"])\n ? response[\"content\"]\n : response[\"content\"];\n return {\n ...baseAttributes,\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n content,\n stopReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_CHAT,\n mapBedrockContentBlock,\n ),\n };\n }\n\n // Handle legacy completion format\n if (response[\"completion\"]) {\n return {\n ...baseAttributes,\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n response[\"completion\"],\n stopReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n mapBedrockContentBlock,\n ),\n };\n }\n\n return baseAttributes;\n }\n case BedrockVendor.COHERE: {\n const cohereFinishReason =\n response[\"generations\"]?.[0]?.[\"finish_reason\"] ??\n response[\"finish_reason\"];\n const cohereText =\n response[\"generations\"]?.[0]?.[\"text\"] ?? response[\"text\"];\n\n return {\n ...(cohereFinishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[cohereFinishReason] ??\n cohereFinishReason,\n ],\n }\n : {}),\n // Add token usage if available\n ...(response[\"meta\"]?.[\"billed_units\"]\n ? {\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]:\n response[\"meta\"][\"billed_units\"][\"input_tokens\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]:\n response[\"meta\"][\"billed_units\"][\"output_tokens\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n (response[\"meta\"][\"billed_units\"][\"input_tokens\"] || 0) +\n (response[\"meta\"][\"billed_units\"][\"output_tokens\"] || 0),\n }\n : {}),\n ...(this._shouldSendPrompts() && cohereText != null\n ? {\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n cohereText,\n cohereFinishReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n case BedrockVendor.META: {\n const metaFinishReason = response[\"stop_reason\"];\n const metaContent = response[\"generation\"];\n return {\n ...(metaFinishReason != null\n ? {\n [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: [\n bedrockFinishReasonMap[metaFinishReason] ?? metaFinishReason,\n ],\n }\n : {}),\n [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: response[\"prompt_token_count\"],\n [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: response[\"generation_token_count\"],\n [SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS]:\n response[\"prompt_token_count\"] + response[\"generation_token_count\"],\n ...(this._shouldSendPrompts()\n ? {\n [ATTR_GEN_AI_OUTPUT_MESSAGES]: formatOutputMessage(\n metaContent ?? \"\",\n metaFinishReason,\n bedrockFinishReasonMap,\n GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION,\n mapBedrockContentBlock,\n ),\n }\n : {}),\n };\n }\n default:\n return {};\n }\n }\n\n private _handleNovaStreamingMetadata(\n span: Span,\n parsedResponse: Record<string, any>,\n ): void {\n if (\"metadata\" in parsedResponse && parsedResponse[\"metadata\"]?.[\"usage\"]) {\n const usage = parsedResponse[\"metadata\"][\"usage\"];\n span.setAttribute(ATTR_GEN_AI_USAGE_INPUT_TOKENS, usage[\"inputTokens\"]);\n span.setAttribute(ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, usage[\"outputTokens\"]);\n span.setAttribute(\n SpanAttributes.GEN_AI_USAGE_TOTAL_TOKENS,\n usage[\"totalTokens\"],\n );\n }\n }\n\n private _shouldSendPrompts() {\n const contextShouldSendPrompts = context\n .active()\n .getValue(CONTEXT_KEY_ALLOW_TRACE_CONTENT);\n\n if (contextShouldSendPrompts !== undefined) {\n return contextShouldSendPrompts;\n }\n\n return this._config.traceContent !== undefined\n ? this._config.traceContent\n : true;\n }\n\n private _getOperationType(\n vendor: string,\n requestBody: Record<string, any>,\n ): string {\n switch (vendor) {\n case BedrockVendor.AI21:\n case BedrockVendor.AMAZON:\n case BedrockVendor.ANTHROPIC:\n return requestBody[\"messages\"]\n ? GEN_AI_OPERATION_NAME_VALUE_CHAT\n : GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION;\n case BedrockVendor.COHERE:\n case BedrockVendor.META:\n return GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION;\n default:\n return GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION;\n }\n }\n\n private _getStreamChunkContent(\n vendor: string,\n response: Record<string, any>,\n ): string | undefined {\n switch (vendor) {\n case BedrockVendor.AMAZON:\n return (\n response[\"contentBlockDelta\"]?.[\"delta\"]?.[\"text\"] ??\n response[\"outputText\"]\n );\n case BedrockVendor.ANTHROPIC:\n return response[\"delta\"]?.[\"text\"] ?? response[\"completion\"];\n case BedrockVendor.AI21:\n return response[\"choices\"]?.[0]?.[\"delta\"]?.[\"content\"];\n case BedrockVendor.META:\n return response[\"generation\"];\n default:\n return undefined;\n }\n }\n\n private _extractVendorAndModel(modelId: string): {\n modelVendor: string;\n model: string;\n } {\n if (!modelId) {\n return { modelVendor: \"\", model: \"\" };\n }\n\n // Handle cross-region inference profile IDs like \"us.anthropic.claude-3-5-sonnet-20241022-v2:0\"\n // Mirrors Python's _cross_region_check logic.\n const prefixes = [\"us\", \"us-gov\", \"eu\", \"apac\"];\n const hasCrossRegionPrefix = prefixes.some((prefix) =>\n modelId.startsWith(prefix + \".\"),\n );\n\n if (hasCrossRegionPrefix) {\n const parts = modelId.split(\".\");\n if (parts.length > 2) {\n parts.shift(); // remove region prefix (\"us\", \"eu\", etc.)\n }\n return { modelVendor: parts[0] || \"\", model: parts[1] || \"\" };\n }\n\n // Standard format: \"vendor.model-name\"\n const dotIndex = modelId.indexOf(\".\");\n if (dotIndex === -1) {\n return { modelVendor: modelId, model: \"\" };\n }\n return {\n modelVendor: modelId.slice(0, dotIndex),\n model: modelId.slice(dotIndex + 1),\n };\n }\n}\n"],"names":["BedrockVendor","FinishReasons","InstrumentationBase","InstrumentationNodeModuleDefinition","trace","context","safeExecuteInTheMiddle","__awaiter","SpanStatusCode","ATTR_GEN_AI_PROVIDER_NAME","GEN_AI_PROVIDER_NAME_VALUE_AWS_BEDROCK","ATTR_GEN_AI_REQUEST_MODEL","ATTR_GEN_AI_OPERATION_NAME","SpanKind","ATTR_GEN_AI_RESPONSE_MODEL","__asyncValues","ATTR_GEN_AI_USAGE_INPUT_TOKENS","ATTR_GEN_AI_USAGE_OUTPUT_TOKENS","SpanAttributes","ATTR_GEN_AI_RESPONSE_FINISH_REASONS","ATTR_GEN_AI_OUTPUT_MESSAGES","formatOutputMessage","mapBedrockContentBlock","ATTR_GEN_AI_REQUEST_TOP_P","ATTR_GEN_AI_REQUEST_TEMPERATURE","ATTR_GEN_AI_REQUEST_MAX_TOKENS","ATTR_GEN_AI_INPUT_MESSAGES","formatInputMessages","ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY","ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY","formatInputMessagesFromPrompt","ATTR_GEN_AI_REQUEST_TOP_K","ATTR_GEN_AI_SYSTEM_INSTRUCTIONS","formatSystemInstructions","GEN_AI_OPERATION_NAME_VALUE_TEXT_COMPLETION","GEN_AI_OPERATION_NAME_VALUE_CHAT","CONTEXT_KEY_ALLOW_TRACE_CONTENT"],"mappings":"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"}