@traceloop/instrumentation-anthropic 0.22.2 → 0.22.5

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 CHANGED
@@ -4,8 +4,9 @@ var tslib = require('tslib');
4
4
  var api = require('@opentelemetry/api');
5
5
  var instrumentation = require('@opentelemetry/instrumentation');
6
6
  var aiSemanticConventions = require('@traceloop/ai-semantic-conventions');
7
+ var incubating = require('@opentelemetry/semantic-conventions/incubating');
7
8
 
8
- var version = "0.22.2";
9
+ var version = "0.22.5";
9
10
 
10
11
  class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
11
12
  constructor(config = {}) {
@@ -81,13 +82,13 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
81
82
  startSpan({ type, params, }) {
82
83
  var _a, _b;
83
84
  const attributes = {
84
- [aiSemanticConventions.SpanAttributes.LLM_SYSTEM]: "Anthropic",
85
+ [incubating.ATTR_GEN_AI_SYSTEM]: "Anthropic",
85
86
  [aiSemanticConventions.SpanAttributes.LLM_REQUEST_TYPE]: type,
86
87
  };
87
88
  try {
88
- attributes[aiSemanticConventions.SpanAttributes.LLM_REQUEST_MODEL] = params.model;
89
- attributes[aiSemanticConventions.SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature;
90
- attributes[aiSemanticConventions.SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p;
89
+ attributes[incubating.ATTR_GEN_AI_REQUEST_MODEL] = params.model;
90
+ attributes[incubating.ATTR_GEN_AI_REQUEST_TEMPERATURE] = params.temperature;
91
+ attributes[incubating.ATTR_GEN_AI_REQUEST_TOP_P] = params.top_p;
91
92
  attributes[aiSemanticConventions.SpanAttributes.LLM_TOP_K] = params.top_k;
92
93
  // Handle thinking parameters (for beta messages)
93
94
  const betaParams = params;
@@ -97,11 +98,11 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
97
98
  betaParams.thinking.budget_tokens;
98
99
  }
99
100
  if (type === "completion") {
100
- attributes[aiSemanticConventions.SpanAttributes.LLM_REQUEST_MAX_TOKENS] =
101
+ attributes[incubating.ATTR_GEN_AI_REQUEST_MAX_TOKENS] =
101
102
  params.max_tokens_to_sample;
102
103
  }
103
104
  else {
104
- attributes[aiSemanticConventions.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens;
105
+ attributes[incubating.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = params.max_tokens;
105
106
  }
106
107
  if (params.extraAttributes !== undefined &&
107
108
  typeof params.extraAttributes === "object") {
@@ -114,8 +115,8 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
114
115
  let promptIndex = 0;
115
116
  // If a system prompt is provided, it should always be first
116
117
  if ("system" in params && params.system !== undefined) {
117
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.0.role`] = "system";
118
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.0.content`] =
118
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.0.role`] = "system";
119
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.0.content`] =
119
120
  typeof params.system === "string"
120
121
  ? params.system
121
122
  : JSON.stringify(params.system);
@@ -123,19 +124,21 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
123
124
  }
124
125
  params.messages.forEach((message, index) => {
125
126
  const currentIndex = index + promptIndex;
126
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.${currentIndex}.role`] =
127
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.${currentIndex}.role`] =
127
128
  message.role;
128
129
  if (typeof message.content === "string") {
129
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = message.content || "";
130
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =
131
+ message.content || "";
130
132
  }
131
133
  else {
132
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = JSON.stringify(message.content);
134
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =
135
+ JSON.stringify(message.content);
133
136
  }
134
137
  });
135
138
  }
136
139
  else {
137
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.0.role`] = "user";
138
- attributes[`${aiSemanticConventions.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt;
140
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.0.role`] = "user";
141
+ attributes[`${incubating.ATTR_GEN_AI_PROMPT}.0.content`] = params.prompt;
139
142
  }
140
143
  }
141
144
  }
@@ -318,23 +321,23 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
318
321
  _endSpan({ span, type, result, }) {
319
322
  var _a, _b, _c, _d, _e, _f;
320
323
  try {
321
- span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_RESPONSE_MODEL, result.model);
324
+ span.setAttribute(incubating.ATTR_GEN_AI_RESPONSE_MODEL, result.model);
322
325
  if (type === "chat" && result.usage) {
323
326
  span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, ((_a = result.usage) === null || _a === void 0 ? void 0 : _a.input_tokens) + ((_b = result.usage) === null || _b === void 0 ? void 0 : _b.output_tokens));
324
- span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
325
- span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
327
+ span.setAttribute(incubating.ATTR_GEN_AI_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
328
+ span.setAttribute(incubating.ATTR_GEN_AI_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
326
329
  }
327
330
  if (result.stop_reason) {
328
- span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.stop_reason);
331
+ span.setAttribute(`${incubating.ATTR_GEN_AI_COMPLETION}.0.finish_reason`, result.stop_reason);
329
332
  }
330
333
  if (this._shouldSendPrompts()) {
331
334
  if (type === "chat") {
332
- span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
333
- span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.content`, JSON.stringify(result.content));
335
+ span.setAttribute(`${incubating.ATTR_GEN_AI_COMPLETION}.0.role`, "assistant");
336
+ span.setAttribute(`${incubating.ATTR_GEN_AI_COMPLETION}.0.content`, JSON.stringify(result.content));
334
337
  }
335
338
  else {
336
- span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
337
- span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.content`, result.completion);
339
+ span.setAttribute(`${incubating.ATTR_GEN_AI_COMPLETION}.0.role`, "assistant");
340
+ span.setAttribute(`${incubating.ATTR_GEN_AI_COMPLETION}.0.content`, result.completion);
338
341
  }
339
342
  }
340
343
  }
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 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: null,\n cache_creation_input_tokens: null,\n cache_read_input_tokens: null,\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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"}
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 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 {\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 { 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 [ATTR_GEN_AI_SYSTEM]: \"Anthropic\",\n [SpanAttributes.LLM_REQUEST_TYPE]: type,\n };\n\n try {\n attributes[ATTR_GEN_AI_REQUEST_MODEL] = params.model;\n attributes[ATTR_GEN_AI_REQUEST_TEMPERATURE] = params.temperature;\n attributes[ATTR_GEN_AI_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[ATTR_GEN_AI_REQUEST_MAX_TOKENS] =\n params.max_tokens_to_sample;\n } else {\n attributes[ATTR_GEN_AI_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[`${ATTR_GEN_AI_PROMPT}.0.role`] = \"system\";\n attributes[`${ATTR_GEN_AI_PROMPT}.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[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.role`] =\n message.role;\n if (typeof message.content === \"string\") {\n attributes[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =\n (message.content as string) || \"\";\n } else {\n attributes[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =\n JSON.stringify(message.content);\n }\n });\n } else {\n attributes[`${ATTR_GEN_AI_PROMPT}.0.role`] = \"user\";\n attributes[`${ATTR_GEN_AI_PROMPT}.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: null,\n cache_creation_input_tokens: null,\n cache_read_input_tokens: null,\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(ATTR_GEN_AI_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 ATTR_GEN_AI_USAGE_COMPLETION_TOKENS,\n result.usage?.output_tokens,\n );\n span.setAttribute(\n ATTR_GEN_AI_USAGE_PROMPT_TOKENS,\n result.usage?.input_tokens,\n );\n }\n\n if (result.stop_reason) {\n span.setAttribute(\n `${ATTR_GEN_AI_COMPLETION}.0.finish_reason`,\n result.stop_reason,\n );\n }\n\n if (this._shouldSendPrompts()) {\n if (type === \"chat\") {\n span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.role`, \"assistant\");\n span.setAttribute(\n `${ATTR_GEN_AI_COMPLETION}.0.content`,\n JSON.stringify(result.content),\n );\n } else {\n span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.role`, \"assistant\");\n span.setAttribute(\n `${ATTR_GEN_AI_COMPLETION}.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","ATTR_GEN_AI_SYSTEM","SpanAttributes","ATTR_GEN_AI_REQUEST_MODEL","ATTR_GEN_AI_REQUEST_TEMPERATURE","ATTR_GEN_AI_REQUEST_TOP_P","ATTR_GEN_AI_REQUEST_MAX_TOKENS","ATTR_GEN_AI_PROMPT","SpanKind","__asyncValues","__await","SpanStatusCode","__awaiter","ATTR_GEN_AI_RESPONSE_MODEL","ATTR_GEN_AI_USAGE_COMPLETION_TOKENS","ATTR_GEN_AI_USAGE_PROMPT_TOKENS","ATTR_GEN_AI_COMPLETION","CONTEXT_KEY_ALLOW_TRACE_CONTENT"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -2,8 +2,9 @@ import { __awaiter, __asyncGenerator, __asyncValues, __await } from 'tslib';
2
2
  import { trace, context, SpanKind, SpanStatusCode } from '@opentelemetry/api';
3
3
  import { InstrumentationBase, InstrumentationNodeModuleDefinition, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
4
4
  import { SpanAttributes, CONTEXT_KEY_ALLOW_TRACE_CONTENT } from '@traceloop/ai-semantic-conventions';
5
+ import { ATTR_GEN_AI_REQUEST_MODEL, ATTR_GEN_AI_REQUEST_TEMPERATURE, ATTR_GEN_AI_REQUEST_TOP_P, ATTR_GEN_AI_REQUEST_MAX_TOKENS, ATTR_GEN_AI_PROMPT, ATTR_GEN_AI_RESPONSE_MODEL, ATTR_GEN_AI_USAGE_COMPLETION_TOKENS, ATTR_GEN_AI_USAGE_PROMPT_TOKENS, ATTR_GEN_AI_COMPLETION, ATTR_GEN_AI_SYSTEM } from '@opentelemetry/semantic-conventions/incubating';
5
6
 
6
- var version = "0.22.2";
7
+ var version = "0.22.5";
7
8
 
8
9
  class AnthropicInstrumentation extends InstrumentationBase {
9
10
  constructor(config = {}) {
@@ -79,13 +80,13 @@ class AnthropicInstrumentation extends InstrumentationBase {
79
80
  startSpan({ type, params, }) {
80
81
  var _a, _b;
81
82
  const attributes = {
82
- [SpanAttributes.LLM_SYSTEM]: "Anthropic",
83
+ [ATTR_GEN_AI_SYSTEM]: "Anthropic",
83
84
  [SpanAttributes.LLM_REQUEST_TYPE]: type,
84
85
  };
85
86
  try {
86
- attributes[SpanAttributes.LLM_REQUEST_MODEL] = params.model;
87
- attributes[SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature;
88
- attributes[SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p;
87
+ attributes[ATTR_GEN_AI_REQUEST_MODEL] = params.model;
88
+ attributes[ATTR_GEN_AI_REQUEST_TEMPERATURE] = params.temperature;
89
+ attributes[ATTR_GEN_AI_REQUEST_TOP_P] = params.top_p;
89
90
  attributes[SpanAttributes.LLM_TOP_K] = params.top_k;
90
91
  // Handle thinking parameters (for beta messages)
91
92
  const betaParams = params;
@@ -95,11 +96,11 @@ class AnthropicInstrumentation extends InstrumentationBase {
95
96
  betaParams.thinking.budget_tokens;
96
97
  }
97
98
  if (type === "completion") {
98
- attributes[SpanAttributes.LLM_REQUEST_MAX_TOKENS] =
99
+ attributes[ATTR_GEN_AI_REQUEST_MAX_TOKENS] =
99
100
  params.max_tokens_to_sample;
100
101
  }
101
102
  else {
102
- attributes[SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens;
103
+ attributes[ATTR_GEN_AI_REQUEST_MAX_TOKENS] = params.max_tokens;
103
104
  }
104
105
  if (params.extraAttributes !== undefined &&
105
106
  typeof params.extraAttributes === "object") {
@@ -112,8 +113,8 @@ class AnthropicInstrumentation extends InstrumentationBase {
112
113
  let promptIndex = 0;
113
114
  // If a system prompt is provided, it should always be first
114
115
  if ("system" in params && params.system !== undefined) {
115
- attributes[`${SpanAttributes.LLM_PROMPTS}.0.role`] = "system";
116
- attributes[`${SpanAttributes.LLM_PROMPTS}.0.content`] =
116
+ attributes[`${ATTR_GEN_AI_PROMPT}.0.role`] = "system";
117
+ attributes[`${ATTR_GEN_AI_PROMPT}.0.content`] =
117
118
  typeof params.system === "string"
118
119
  ? params.system
119
120
  : JSON.stringify(params.system);
@@ -121,19 +122,21 @@ class AnthropicInstrumentation extends InstrumentationBase {
121
122
  }
122
123
  params.messages.forEach((message, index) => {
123
124
  const currentIndex = index + promptIndex;
124
- attributes[`${SpanAttributes.LLM_PROMPTS}.${currentIndex}.role`] =
125
+ attributes[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.role`] =
125
126
  message.role;
126
127
  if (typeof message.content === "string") {
127
- attributes[`${SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = message.content || "";
128
+ attributes[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =
129
+ message.content || "";
128
130
  }
129
131
  else {
130
- attributes[`${SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = JSON.stringify(message.content);
132
+ attributes[`${ATTR_GEN_AI_PROMPT}.${currentIndex}.content`] =
133
+ JSON.stringify(message.content);
131
134
  }
132
135
  });
133
136
  }
134
137
  else {
135
- attributes[`${SpanAttributes.LLM_PROMPTS}.0.role`] = "user";
136
- attributes[`${SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt;
138
+ attributes[`${ATTR_GEN_AI_PROMPT}.0.role`] = "user";
139
+ attributes[`${ATTR_GEN_AI_PROMPT}.0.content`] = params.prompt;
137
140
  }
138
141
  }
139
142
  }
@@ -316,23 +319,23 @@ class AnthropicInstrumentation extends InstrumentationBase {
316
319
  _endSpan({ span, type, result, }) {
317
320
  var _a, _b, _c, _d, _e, _f;
318
321
  try {
319
- span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, result.model);
322
+ span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, result.model);
320
323
  if (type === "chat" && result.usage) {
321
324
  span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, ((_a = result.usage) === null || _a === void 0 ? void 0 : _a.input_tokens) + ((_b = result.usage) === null || _b === void 0 ? void 0 : _b.output_tokens));
322
- span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
323
- span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
325
+ span.setAttribute(ATTR_GEN_AI_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
326
+ span.setAttribute(ATTR_GEN_AI_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
324
327
  }
325
328
  if (result.stop_reason) {
326
- span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.stop_reason);
329
+ span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.finish_reason`, result.stop_reason);
327
330
  }
328
331
  if (this._shouldSendPrompts()) {
329
332
  if (type === "chat") {
330
- span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
331
- span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.content`, JSON.stringify(result.content));
333
+ span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.role`, "assistant");
334
+ span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.content`, JSON.stringify(result.content));
332
335
  }
333
336
  else {
334
- span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
335
- span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.content`, result.completion);
337
+ span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.role`, "assistant");
338
+ span.setAttribute(`${ATTR_GEN_AI_COMPLETION}.0.content`, result.completion);
336
339
  }
337
340
  }
338
341
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traceloop/instrumentation-anthropic",
3
- "version": "0.22.2",
3
+ "version": "0.22.5",
4
4
  "description": "Anthropic Instrumentaion",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -10,7 +10,7 @@
10
10
  "build": "rollup -c",
11
11
  "lint": "eslint .",
12
12
  "lint:fix": "eslint . --fix",
13
- "test": "ts-mocha -p tsconfig.json 'test/**/*.test.ts'"
13
+ "test": "ts-mocha -p tsconfig.test.json 'test/**/*.test.ts'"
14
14
  },
15
15
  "keywords": [
16
16
  "opentelemetry",
@@ -41,8 +41,8 @@
41
41
  "@opentelemetry/api": "^1.9.0",
42
42
  "@opentelemetry/core": "^2.0.1",
43
43
  "@opentelemetry/instrumentation": "^0.203.0",
44
- "@opentelemetry/semantic-conventions": "^1.36.0",
45
- "@traceloop/ai-semantic-conventions": "0.22.2",
44
+ "@opentelemetry/semantic-conventions": "^1.38.0",
45
+ "@traceloop/ai-semantic-conventions": "0.22.5",
46
46
  "tslib": "^2.8.1"
47
47
  },
48
48
  "devDependencies": {
@@ -57,5 +57,5 @@
57
57
  "ts-mocha": "^11.1.0"
58
58
  },
59
59
  "homepage": "https://github.com/traceloop/openllmetry-js/tree/main/packages/instrumentation-anthropic",
60
- "gitHead": "389987af4053ef0ecc1842f97e52be9e7b466d09"
60
+ "gitHead": "f480743514f70ab20669987d040bfec8be33fcb4"
61
61
  }