@traceloop/instrumentation-anthropic 0.11.1 → 0.12.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 CHANGED
@@ -5,7 +5,7 @@ var api = require('@opentelemetry/api');
5
5
  var instrumentation = require('@opentelemetry/instrumentation');
6
6
  var aiSemanticConventions = require('@traceloop/ai-semantic-conventions');
7
7
 
8
- var version = "0.11.1";
8
+ var version = "0.12.0";
9
9
 
10
10
  class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
11
11
  constructor(config = {}) {
@@ -37,7 +37,7 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
37
37
  patchAnthropic(type) {
38
38
  // eslint-disable-next-line @typescript-eslint/no-this-alias
39
39
  const plugin = this;
40
- // eslint-disable-next-line @typescript-eslint/ban-types
40
+ // eslint-disable-next-line
41
41
  return (original) => {
42
42
  return function method(...args) {
43
43
  const span = type === "chat"
@@ -131,10 +131,10 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
131
131
  attributes,
132
132
  });
133
133
  }
134
- _streamingWrapPromise({ span, type, promise, }) {
135
- var _a, _b, _c, _d;
136
- return tslib.__asyncGenerator(this, arguments, function* _streamingWrapPromise_1() {
137
- var _e, e_1, _f, _g, _h, e_2, _j, _k;
134
+ _streamingWrapPromise(_a) {
135
+ return tslib.__asyncGenerator(this, arguments, function* _streamingWrapPromise_1({ span, type, promise, }) {
136
+ var _b, e_1, _c, _d, _e, e_2, _f, _g;
137
+ var _h, _j, _k, _l;
138
138
  if (type === "chat") {
139
139
  const result = {
140
140
  id: "0",
@@ -147,10 +147,10 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
147
147
  content: [],
148
148
  };
149
149
  try {
150
- for (var _l = true, _m = tslib.__asyncValues(yield tslib.__await(promise)), _o; _o = yield tslib.__await(_m.next()), _e = _o.done, !_e; _l = true) {
151
- _g = _o.value;
152
- _l = false;
153
- const chunk = _g;
150
+ for (var _m = true, _o = tslib.__asyncValues(yield tslib.__await(promise)), _p; _p = yield tslib.__await(_o.next()), _b = _p.done, !_b; _m = true) {
151
+ _d = _p.value;
152
+ _m = false;
153
+ const chunk = _d;
154
154
  yield yield tslib.__await(chunk);
155
155
  try {
156
156
  switch (chunk.type) {
@@ -174,14 +174,14 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
174
174
  }
175
175
  catch (e) {
176
176
  this._diag.debug(e);
177
- (_b = (_a = this._config).exceptionLogger) === null || _b === void 0 ? void 0 : _b.call(_a, e);
177
+ (_j = (_h = this._config).exceptionLogger) === null || _j === void 0 ? void 0 : _j.call(_h, e);
178
178
  }
179
179
  }
180
180
  }
181
181
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
182
182
  finally {
183
183
  try {
184
- if (!_l && !_e && (_f = _m.return)) yield tslib.__await(_f.call(_m));
184
+ if (!_m && !_b && (_c = _o.return)) yield tslib.__await(_c.call(_o));
185
185
  }
186
186
  finally { if (e_1) throw e_1.error; }
187
187
  }
@@ -196,10 +196,10 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
196
196
  stop_reason: null,
197
197
  };
198
198
  try {
199
- for (var _p = true, _q = tslib.__asyncValues(yield tslib.__await(promise)), _r; _r = yield tslib.__await(_q.next()), _h = _r.done, !_h; _p = true) {
200
- _k = _r.value;
201
- _p = false;
202
- const chunk = _k;
199
+ for (var _q = true, _r = tslib.__asyncValues(yield tslib.__await(promise)), _s; _s = yield tslib.__await(_r.next()), _e = _s.done, !_e; _q = true) {
200
+ _g = _s.value;
201
+ _q = false;
202
+ const chunk = _g;
203
203
  yield yield tslib.__await(chunk);
204
204
  try {
205
205
  result.id = chunk.id;
@@ -216,14 +216,14 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
216
216
  }
217
217
  catch (e) {
218
218
  this._diag.debug(e);
219
- (_d = (_c = this._config).exceptionLogger) === null || _d === void 0 ? void 0 : _d.call(_c, e);
219
+ (_l = (_k = this._config).exceptionLogger) === null || _l === void 0 ? void 0 : _l.call(_k, e);
220
220
  }
221
221
  }
222
222
  }
223
223
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
224
224
  finally {
225
225
  try {
226
- if (!_p && !_h && (_j = _q.return)) yield tslib.__await(_j.call(_q));
226
+ if (!_q && !_e && (_f = _r.return)) yield tslib.__await(_f.call(_r));
227
227
  }
228
228
  finally { if (e_2) throw e_2.error; }
229
229
  }
@@ -273,8 +273,9 @@ class AnthropicInstrumentation extends instrumentation.InstrumentationBase {
273
273
  span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
274
274
  span.setAttribute(aiSemanticConventions.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
275
275
  }
276
- result.stop_reason &&
276
+ if (result.stop_reason) {
277
277
  span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.stop_reason);
278
+ }
278
279
  if (this._shouldSendPrompts()) {
279
280
  if (type === "chat") {
280
281
  span.setAttribute(`${aiSemanticConventions.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
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 { Stream } from \"@anthropic-ai/sdk/streaming\";\n\nexport class AnthropicInstrumentation extends InstrumentationBase {\n protected declare _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\"),\n );\n this._wrap(\n module.Anthropic.Messages.prototype,\n \"create\",\n this.patchAnthropic(\"chat\"),\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\"),\n );\n this._wrap(\n moduleExports.Anthropic.Messages.prototype,\n \"create\",\n this.patchAnthropic(\"chat\"),\n );\n return moduleExports;\n }\n\n private unpatch(\n moduleExports: typeof anthropic,\n moduleVersion?: string,\n ): void {\n this._diag.debug(`Unpatching @azure/openai@${moduleVersion}`);\n\n this._unwrap(moduleExports.Anthropic.Completions.prototype, \"create\");\n this._unwrap(moduleExports.Anthropic.Messages.prototype, \"create\");\n }\n\n private patchAnthropic(type: \"chat\" | \"completion\") {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const plugin = this;\n // eslint-disable-next-line @typescript-eslint/ban-types\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 type === \"completion\" // For some reason, this causes an exception with chat, so disabled for now\n ) {\n return context.bind(\n execContext,\n plugin._streamingWrapPromise({\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 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 params.messages.forEach((message, index) => {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.role`] =\n message.role;\n if (typeof message.content === \"string\") {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.content`] =\n (message.content as string) || \"\";\n } else {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.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 async *_streamingWrapPromise({\n span,\n type,\n promise,\n }:\n | {\n span: Span;\n type: \"chat\";\n promise: Promise<Stream<MessageStreamEvent>>;\n }\n | {\n span: Span;\n type: \"completion\";\n promise: Promise<Stream<Completion>>;\n }) {\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: { input_tokens: 0, output_tokens: 0 },\n content: [],\n };\n for await (const chunk of await promise) {\n yield chunk;\n\n try {\n switch (chunk.type) {\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 };\n }\n }\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 await promise) {\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 }\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 return new Promise<T>((resolve) => {\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 resolve(result);\n });\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 _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 result.stop_reason &&\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`,\n result.stop_reason,\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","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 { 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 { Stream } from \"@anthropic-ai/sdk/streaming\";\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\"),\n );\n this._wrap(\n module.Anthropic.Messages.prototype,\n \"create\",\n this.patchAnthropic(\"chat\"),\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\"),\n );\n this._wrap(\n moduleExports.Anthropic.Messages.prototype,\n \"create\",\n this.patchAnthropic(\"chat\"),\n );\n return moduleExports;\n }\n\n private unpatch(\n moduleExports: typeof anthropic,\n moduleVersion?: string,\n ): void {\n this._diag.debug(`Unpatching @azure/openai@${moduleVersion}`);\n\n this._unwrap(moduleExports.Anthropic.Completions.prototype, \"create\");\n this._unwrap(moduleExports.Anthropic.Messages.prototype, \"create\");\n }\n\n private patchAnthropic(type: \"chat\" | \"completion\") {\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 type === \"completion\" // For some reason, this causes an exception with chat, so disabled for now\n ) {\n return context.bind(\n execContext,\n plugin._streamingWrapPromise({\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 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 params.messages.forEach((message, index) => {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.role`] =\n message.role;\n if (typeof message.content === \"string\") {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.content`] =\n (message.content as string) || \"\";\n } else {\n attributes[`${SpanAttributes.LLM_PROMPTS}.${index}.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 async *_streamingWrapPromise({\n span,\n type,\n promise,\n }:\n | {\n span: Span;\n type: \"chat\";\n promise: Promise<Stream<MessageStreamEvent>>;\n }\n | {\n span: Span;\n type: \"completion\";\n promise: Promise<Stream<Completion>>;\n }) {\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: { input_tokens: 0, output_tokens: 0 },\n content: [],\n };\n for await (const chunk of await promise) {\n yield chunk;\n\n try {\n switch (chunk.type) {\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 };\n }\n }\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 await promise) {\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 }\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 return new Promise<T>((resolve) => {\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 resolve(result);\n });\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 _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","__asyncGenerator","__asyncValues","__await","SpanStatusCode","CONTEXT_KEY_ALLOW_TRACE_CONTENT"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@ 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
5
 
6
- var version = "0.11.1";
6
+ var version = "0.12.0";
7
7
 
8
8
  class AnthropicInstrumentation extends InstrumentationBase {
9
9
  constructor(config = {}) {
@@ -35,7 +35,7 @@ class AnthropicInstrumentation extends InstrumentationBase {
35
35
  patchAnthropic(type) {
36
36
  // eslint-disable-next-line @typescript-eslint/no-this-alias
37
37
  const plugin = this;
38
- // eslint-disable-next-line @typescript-eslint/ban-types
38
+ // eslint-disable-next-line
39
39
  return (original) => {
40
40
  return function method(...args) {
41
41
  const span = type === "chat"
@@ -129,10 +129,10 @@ class AnthropicInstrumentation extends InstrumentationBase {
129
129
  attributes,
130
130
  });
131
131
  }
132
- _streamingWrapPromise({ span, type, promise, }) {
133
- var _a, _b, _c, _d;
134
- return __asyncGenerator(this, arguments, function* _streamingWrapPromise_1() {
135
- var _e, e_1, _f, _g, _h, e_2, _j, _k;
132
+ _streamingWrapPromise(_a) {
133
+ return __asyncGenerator(this, arguments, function* _streamingWrapPromise_1({ span, type, promise, }) {
134
+ var _b, e_1, _c, _d, _e, e_2, _f, _g;
135
+ var _h, _j, _k, _l;
136
136
  if (type === "chat") {
137
137
  const result = {
138
138
  id: "0",
@@ -145,10 +145,10 @@ class AnthropicInstrumentation extends InstrumentationBase {
145
145
  content: [],
146
146
  };
147
147
  try {
148
- for (var _l = true, _m = __asyncValues(yield __await(promise)), _o; _o = yield __await(_m.next()), _e = _o.done, !_e; _l = true) {
149
- _g = _o.value;
150
- _l = false;
151
- const chunk = _g;
148
+ for (var _m = true, _o = __asyncValues(yield __await(promise)), _p; _p = yield __await(_o.next()), _b = _p.done, !_b; _m = true) {
149
+ _d = _p.value;
150
+ _m = false;
151
+ const chunk = _d;
152
152
  yield yield __await(chunk);
153
153
  try {
154
154
  switch (chunk.type) {
@@ -172,14 +172,14 @@ class AnthropicInstrumentation extends InstrumentationBase {
172
172
  }
173
173
  catch (e) {
174
174
  this._diag.debug(e);
175
- (_b = (_a = this._config).exceptionLogger) === null || _b === void 0 ? void 0 : _b.call(_a, e);
175
+ (_j = (_h = this._config).exceptionLogger) === null || _j === void 0 ? void 0 : _j.call(_h, e);
176
176
  }
177
177
  }
178
178
  }
179
179
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
180
180
  finally {
181
181
  try {
182
- if (!_l && !_e && (_f = _m.return)) yield __await(_f.call(_m));
182
+ if (!_m && !_b && (_c = _o.return)) yield __await(_c.call(_o));
183
183
  }
184
184
  finally { if (e_1) throw e_1.error; }
185
185
  }
@@ -194,10 +194,10 @@ class AnthropicInstrumentation extends InstrumentationBase {
194
194
  stop_reason: null,
195
195
  };
196
196
  try {
197
- for (var _p = true, _q = __asyncValues(yield __await(promise)), _r; _r = yield __await(_q.next()), _h = _r.done, !_h; _p = true) {
198
- _k = _r.value;
199
- _p = false;
200
- const chunk = _k;
197
+ for (var _q = true, _r = __asyncValues(yield __await(promise)), _s; _s = yield __await(_r.next()), _e = _s.done, !_e; _q = true) {
198
+ _g = _s.value;
199
+ _q = false;
200
+ const chunk = _g;
201
201
  yield yield __await(chunk);
202
202
  try {
203
203
  result.id = chunk.id;
@@ -214,14 +214,14 @@ class AnthropicInstrumentation extends InstrumentationBase {
214
214
  }
215
215
  catch (e) {
216
216
  this._diag.debug(e);
217
- (_d = (_c = this._config).exceptionLogger) === null || _d === void 0 ? void 0 : _d.call(_c, e);
217
+ (_l = (_k = this._config).exceptionLogger) === null || _l === void 0 ? void 0 : _l.call(_k, e);
218
218
  }
219
219
  }
220
220
  }
221
221
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
222
222
  finally {
223
223
  try {
224
- if (!_p && !_h && (_j = _q.return)) yield __await(_j.call(_q));
224
+ if (!_q && !_e && (_f = _r.return)) yield __await(_f.call(_r));
225
225
  }
226
226
  finally { if (e_2) throw e_2.error; }
227
227
  }
@@ -271,8 +271,9 @@ class AnthropicInstrumentation extends InstrumentationBase {
271
271
  span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === void 0 ? void 0 : _c.output_tokens);
272
272
  span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === void 0 ? void 0 : _d.input_tokens);
273
273
  }
274
- result.stop_reason &&
274
+ if (result.stop_reason) {
275
275
  span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.stop_reason);
276
+ }
276
277
  if (this._shouldSendPrompts()) {
277
278
  if (type === "chat") {
278
279
  span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traceloop/instrumentation-anthropic",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "description": "Anthropic Instrumentaion",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -8,8 +8,8 @@
8
8
  "repository": "traceloop/openllmetry-js",
9
9
  "scripts": {
10
10
  "build": "rollup -c",
11
- "lint": "eslint . --ext .ts",
12
- "lint:fix": "eslint . --ext .ts --fix",
11
+ "lint": "eslint .",
12
+ "lint:fix": "eslint . --fix",
13
13
  "test": "ts-mocha -p tsconfig.json 'test/**/*.test.ts'"
14
14
  },
15
15
  "keywords": [
@@ -38,20 +38,20 @@
38
38
  "access": "public"
39
39
  },
40
40
  "dependencies": {
41
- "@opentelemetry/core": "^1.26.0",
42
- "@opentelemetry/instrumentation": "^0.53.0",
43
- "@opentelemetry/semantic-conventions": "^1.26.0",
44
- "@traceloop/ai-semantic-conventions": "^0.11.0",
45
- "tslib": "^2.3.0"
41
+ "@opentelemetry/core": "^1.29.0",
42
+ "@opentelemetry/instrumentation": "^0.56.0",
43
+ "@opentelemetry/semantic-conventions": "^1.28.0",
44
+ "@traceloop/ai-semantic-conventions": "^0.12.0",
45
+ "tslib": "^2.8.1"
46
46
  },
47
47
  "devDependencies": {
48
- "@anthropic-ai/sdk": "^0.27.1",
48
+ "@anthropic-ai/sdk": "^0.32.1",
49
49
  "@pollyjs/adapter-node-http": "^6.0.6",
50
50
  "@pollyjs/core": "^6.0.6",
51
51
  "@pollyjs/persister-fs": "^6.0.6",
52
- "@types/mocha": "^10.0.6",
52
+ "@types/mocha": "^10.0.10",
53
53
  "ts-mocha": "^10.0.0"
54
54
  },
55
55
  "homepage": "https://github.com/traceloop/openllmetry-js/tree/main/packages/instrumentation-anthropic",
56
- "gitHead": "f9ff60deceae7d798c54f9c62158c43201158db6"
56
+ "gitHead": "485ab84e0db44223854fa858d0439d6d2408c2e2"
57
57
  }