{"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  context,\n  trace,\n  Span,\n  Attributes,\n  SpanKind,\n  SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport {\n  InstrumentationBase,\n  InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n  safeExecuteInTheMiddle,\n} from \"@opentelemetry/instrumentation\";\nimport {\n  CONTEXT_KEY_ALLOW_TRACE_CONTENT,\n  SpanAttributes,\n} from \"@traceloop/ai-semantic-conventions\";\nimport { AnthropicInstrumentationConfig } from \"./types\";\nimport { version } from \"../package.json\";\nimport type * as anthropic from \"@anthropic-ai/sdk\";\nimport type {\n  CompletionCreateParamsNonStreaming,\n  CompletionCreateParamsStreaming,\n  Completion,\n} from \"@anthropic-ai/sdk/resources/completions\";\nimport type {\n  MessageCreateParamsNonStreaming,\n  MessageCreateParamsStreaming,\n  Message,\n  MessageStreamEvent,\n} from \"@anthropic-ai/sdk/resources/messages\";\nimport type { MessageCreateParamsNonStreaming as BetaMessageCreateParamsNonStreaming } from \"@anthropic-ai/sdk/resources/beta/messages\";\nimport type { Stream } from \"@anthropic-ai/sdk/streaming\";\nimport type { APIPromise, BaseAnthropic } from \"@anthropic-ai/sdk\";\n\nexport class AnthropicInstrumentation extends InstrumentationBase {\n  declare protected _config: AnthropicInstrumentationConfig;\n\n  constructor(config: AnthropicInstrumentationConfig = {}) {\n    super(\"@traceloop/instrumentation-anthropic\", version, config);\n  }\n\n  public override setConfig(config: AnthropicInstrumentationConfig = {}) {\n    super.setConfig(config);\n  }\n\n  public manuallyInstrument(module: typeof anthropic) {\n    this._diag.debug(`Patching @anthropic-ai/sdk manually`);\n\n    this._wrap(\n      module.Anthropic.Completions.prototype,\n      \"create\",\n      this.patchAnthropic(\"completion\", module),\n    );\n    this._wrap(\n      module.Anthropic.Messages.prototype,\n      \"create\",\n      this.patchAnthropic(\"chat\", module),\n    );\n    this._wrap(\n      module.Anthropic.Beta.Messages.prototype,\n      \"create\",\n      this.patchAnthropic(\"chat\", module),\n    );\n  }\n\n  protected init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      \"@anthropic-ai/sdk\",\n      [\">=0.9.1\"],\n      this.patch.bind(this),\n      this.unpatch.bind(this),\n    );\n    return module;\n  }\n\n  private patch(moduleExports: typeof anthropic, moduleVersion?: string) {\n    this._diag.debug(`Patching @anthropic-ai/sdk@${moduleVersion}`);\n\n    this._wrap(\n      moduleExports.Anthropic.Completions.prototype,\n      \"create\",\n      this.patchAnthropic(\"completion\", moduleExports),\n    );\n    this._wrap(\n      moduleExports.Anthropic.Messages.prototype,\n      \"create\",\n      this.patchAnthropic(\"chat\", moduleExports),\n    );\n    this._wrap(\n      moduleExports.Anthropic.Beta.Messages.prototype,\n      \"create\",\n      this.patchAnthropic(\"chat\", moduleExports),\n    );\n    return moduleExports;\n  }\n\n  private unpatch(\n    moduleExports: typeof anthropic,\n    moduleVersion?: string,\n  ): void {\n    this._diag.debug(`Unpatching @anthropic-ai/sdk@${moduleVersion}`);\n\n    this._unwrap(moduleExports.Anthropic.Completions.prototype, \"create\");\n    this._unwrap(moduleExports.Anthropic.Messages.prototype, \"create\");\n    this._unwrap(moduleExports.Anthropic.Beta.Messages.prototype, \"create\");\n  }\n\n  private patchAnthropic(\n    type: \"chat\" | \"completion\",\n    moduleExports: typeof anthropic,\n  ) {\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: unknown[]) {\n        const span =\n          type === \"chat\"\n            ? plugin.startSpan({\n                type,\n                params: args[0] as MessageCreateParamsNonStreaming & {\n                  extraAttributes?: Record<string, any>;\n                },\n              })\n            : plugin.startSpan({\n                type,\n                params: args[0] as CompletionCreateParamsNonStreaming & {\n                  extraAttributes?: Record<string, any>;\n                },\n              });\n\n        const execContext = trace.setSpan(context.active(), span);\n        const execPromise = safeExecuteInTheMiddle(\n          () => {\n            return context.with(execContext, () => {\n              if ((args?.[0] as any)?.extraAttributes) {\n                delete (args[0] as any).extraAttributes;\n              }\n              return original.apply(this, args);\n            });\n          },\n          (e) => {\n            if (e) {\n              plugin._diag.error(\"Error in Anthropic instrumentation\", e);\n            }\n          },\n        );\n\n        if (\n          (\n            args[0] as\n              | MessageCreateParamsStreaming\n              | CompletionCreateParamsStreaming\n          ).stream\n        ) {\n          return context.bind(\n            execContext,\n            plugin._streamingWrapPromise(this._client, moduleExports, {\n              span,\n              type,\n              promise: execPromise,\n            }),\n          );\n        }\n\n        const wrappedPromise = plugin._wrapPromise(type, span, execPromise);\n\n        return context.bind(execContext, wrappedPromise as any);\n      };\n    };\n  }\n\n  private startSpan({\n    type,\n    params,\n  }:\n    | {\n        type: \"chat\";\n        params: MessageCreateParamsNonStreaming & {\n          extraAttributes?: Record<string, any>;\n        };\n      }\n    | {\n        type: \"completion\";\n        params: CompletionCreateParamsNonStreaming & {\n          extraAttributes?: Record<string, any>;\n        };\n      }): Span {\n    const attributes: Attributes = {\n      [SpanAttributes.LLM_SYSTEM]: \"Anthropic\",\n      [SpanAttributes.LLM_REQUEST_TYPE]: type,\n    };\n\n    try {\n      attributes[SpanAttributes.LLM_REQUEST_MODEL] = params.model;\n      attributes[SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature;\n      attributes[SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p;\n      attributes[SpanAttributes.LLM_TOP_K] = params.top_k;\n\n      // Handle thinking parameters (for beta messages)\n      const betaParams = params as BetaMessageCreateParamsNonStreaming;\n      if (betaParams.thinking && betaParams.thinking.type === \"enabled\") {\n        attributes[\"llm.request.thinking.type\"] = betaParams.thinking.type;\n        attributes[\"llm.request.thinking.budget_tokens\"] =\n          betaParams.thinking.budget_tokens;\n      }\n\n      if (type === \"completion\") {\n        attributes[SpanAttributes.LLM_REQUEST_MAX_TOKENS] =\n          params.max_tokens_to_sample;\n      } else {\n        attributes[SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens;\n      }\n\n      if (\n        params.extraAttributes !== undefined &&\n        typeof params.extraAttributes === \"object\"\n      ) {\n        Object.keys(params.extraAttributes).forEach((key: string) => {\n          attributes[key] = params.extraAttributes![key];\n        });\n      }\n\n      if (this._shouldSendPrompts()) {\n        if (type === \"chat\") {\n          let promptIndex = 0;\n\n          // If a system prompt is provided, it should always be first\n          if (\"system\" in params && params.system !== undefined) {\n            attributes[`${SpanAttributes.LLM_PROMPTS}.0.role`] = \"system\";\n            attributes[`${SpanAttributes.LLM_PROMPTS}.0.content`] =\n              typeof params.system === \"string\"\n                ? params.system\n                : JSON.stringify(params.system);\n            promptIndex += 1;\n          }\n\n          params.messages.forEach((message, index) => {\n            const currentIndex = index + promptIndex;\n            attributes[`${SpanAttributes.LLM_PROMPTS}.${currentIndex}.role`] =\n              message.role;\n            if (typeof message.content === \"string\") {\n              attributes[\n                `${SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`\n              ] = (message.content as string) || \"\";\n            } else {\n              attributes[\n                `${SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`\n              ] = JSON.stringify(message.content);\n            }\n          });\n        } else {\n          attributes[`${SpanAttributes.LLM_PROMPTS}.0.role`] = \"user\";\n          attributes[`${SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt;\n        }\n      }\n    } catch (e) {\n      this._diag.debug(e);\n      this._config.exceptionLogger?.(e);\n    }\n\n    return this.tracer.startSpan(`anthropic.${type}`, {\n      kind: SpanKind.CLIENT,\n      attributes,\n    });\n  }\n\n  private _streamingWrapPromise(\n    client: BaseAnthropic,\n    moduleExports: typeof anthropic,\n    {\n      span,\n      type,\n      promise,\n    }:\n      | {\n          span: Span;\n          type: \"chat\";\n          promise: APIPromise<Stream<MessageStreamEvent>>;\n        }\n      | {\n          span: Span;\n          type: \"completion\";\n          promise: APIPromise<Stream<Completion>>;\n        },\n  ) {\n    async function* iterateStream(\n      this: AnthropicInstrumentation,\n      stream: Stream<MessageStreamEvent> | Stream<Completion>,\n    ) {\n      try {\n        if (type === \"chat\") {\n          const result: Message = {\n            id: \"0\",\n            type: \"message\",\n            model: \"\",\n            role: \"assistant\",\n            stop_reason: null,\n            stop_sequence: null,\n            usage: {\n              input_tokens: 0,\n              output_tokens: 0,\n              cache_creation_input_tokens: 0,\n              cache_read_input_tokens: 0,\n              server_tool_use: null,\n              service_tier: null,\n            },\n            content: [],\n          };\n\n          for await (const chunk of stream) {\n            yield chunk;\n\n            try {\n              switch (chunk.type) {\n                case \"message_start\":\n                  result.id = chunk.message.id;\n                  result.model = chunk.message.model;\n                  Object.assign(result.usage, chunk.message.usage);\n                  break;\n                case \"message_delta\":\n                  if (chunk.usage) {\n                    Object.assign(result.usage, chunk.usage);\n                  }\n                  break;\n                case \"content_block_start\":\n                  if (result.content.length <= chunk.index) {\n                    result.content.push({ ...chunk.content_block });\n                  }\n                  break;\n\n                case \"content_block_delta\":\n                  if (chunk.index < result.content.length) {\n                    const current = result.content[chunk.index];\n                    if (\n                      current.type === \"text\" &&\n                      chunk.delta.type === \"text_delta\"\n                    ) {\n                      result.content[chunk.index] = {\n                        type: \"text\",\n                        text: current.text + chunk.delta.text,\n                        citations: current.citations,\n                      };\n                    }\n                  }\n                  break;\n              }\n            } catch (e) {\n              this._diag.debug(e);\n              this._config.exceptionLogger?.(e);\n            }\n          }\n\n          this._endSpan({ span, type, result });\n        } else {\n          const result: Completion = {\n            id: \"0\",\n            type: \"completion\",\n            model: \"\",\n            completion: \"\",\n            stop_reason: null,\n          };\n          for await (const chunk of stream as Stream<Completion>) {\n            yield chunk;\n\n            try {\n              result.id = chunk.id;\n              result.model = chunk.model;\n\n              if (chunk.stop_reason) {\n                result.stop_reason = chunk.stop_reason;\n              }\n              if (chunk.model) {\n                result.model = chunk.model;\n              }\n              if (chunk.completion) {\n                result.completion += chunk.completion;\n              }\n            } catch (e) {\n              this._diag.debug(e);\n              this._config.exceptionLogger?.(e);\n            }\n          }\n\n          this._endSpan({ span, type, result });\n        }\n      } catch (error) {\n        span.setStatus({\n          code: SpanStatusCode.ERROR,\n          message: error.message,\n        });\n        span.recordException(error);\n        span.end();\n        throw error;\n      }\n    }\n\n    return new moduleExports.APIPromise(\n      client,\n      (promise as any).responsePromise,\n      async (client, props) => {\n        const realStream = await (promise as any).parseResponse(client, props);\n\n        // take the incoming stream, iterate it using our instrumented function, and wrap it in a new stream to keep the rich object type the same\n        return new realStream.constructor(\n          () => iterateStream.call(this, realStream),\n          realStream.controller,\n        );\n      },\n    ) as\n      | APIPromise<Stream<MessageStreamEvent>>\n      | APIPromise<Stream<Completion>>;\n  }\n\n  private _wrapPromise<T>(\n    type: \"chat\" | \"completion\",\n    span: Span,\n    promise: Promise<T>,\n  ): Promise<T> {\n    return promise\n      .then((result) => {\n        if (type === \"chat\") {\n          this._endSpan({\n            type,\n            span,\n            result: result as Message,\n          });\n        } else {\n          this._endSpan({\n            type,\n            span,\n            result: result as Completion,\n          });\n        }\n\n        return result;\n      })\n      .catch((error: Error) => {\n        span.setStatus({\n          code: SpanStatusCode.ERROR,\n          message: error.message,\n        });\n        span.recordException(error);\n        span.end();\n\n        throw error;\n      });\n  }\n\n  private _endSpan({\n    span,\n    type,\n    result,\n  }:\n    | { span: Span; type: \"chat\"; result: Message }\n    | {\n        span: Span;\n        type: \"completion\";\n        result: Completion;\n      }) {\n    try {\n      span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, result.model);\n      if (type === \"chat\" && result.usage) {\n        span.setAttribute(\n          SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n          result.usage?.input_tokens + result.usage?.output_tokens,\n        );\n        span.setAttribute(\n          SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n          result.usage?.output_tokens,\n        );\n        span.setAttribute(\n          SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n          result.usage?.input_tokens,\n        );\n      }\n\n      if (result.stop_reason) {\n        span.setAttribute(\n          `${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`,\n          result.stop_reason,\n        );\n      }\n\n      if (this._shouldSendPrompts()) {\n        if (type === \"chat\") {\n          span.setAttribute(\n            `${SpanAttributes.LLM_COMPLETIONS}.0.role`,\n            \"assistant\",\n          );\n          span.setAttribute(\n            `${SpanAttributes.LLM_COMPLETIONS}.0.content`,\n            JSON.stringify(result.content),\n          );\n        } else {\n          span.setAttribute(\n            `${SpanAttributes.LLM_COMPLETIONS}.0.role`,\n            \"assistant\",\n          );\n          span.setAttribute(\n            `${SpanAttributes.LLM_COMPLETIONS}.0.content`,\n            result.completion,\n          );\n        }\n      }\n    } catch (e) {\n      this._diag.debug(e);\n      this._config.exceptionLogger?.(e);\n    }\n\n    span.end();\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"],"names":["InstrumentationBase","InstrumentationNodeModuleDefinition","trace","context","safeExecuteInTheMiddle","SpanAttributes","SpanKind","__asyncValues","__await","SpanStatusCode","__awaiter","CONTEXT_KEY_ALLOW_TRACE_CONTENT"],"mappings":"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"}