{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// avoids a dependency on @opentelemetry/core for hrTime utilities\nimport { performance } from 'perf_hooks';\n\nimport { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { Attributes, Context, Histogram, Span } from '@opentelemetry/api';\nimport {\n  InstrumentationBase,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport type {\n  ChatCompletion,\n  ChatCompletionMessageToolCall,\n  ChatCompletionContentPart,\n  ChatCompletionContentPartRefusal,\n  ChatCompletionContentPartText,\n  ChatCompletionCreateParams,\n  ChatCompletionMessageParam,\n  ChatCompletionChunk,\n  Completions as ChatCompletions,\n} from 'openai/resources/chat/completions';\nimport type {\n  CreateEmbeddingResponse,\n  Embeddings,\n  EmbeddingCreateParams,\n} from 'openai/resources/embeddings';\nimport type { Stream } from 'openai/streaming';\n\nimport {\n  ATTR_EVENT_NAME,\n  ATTR_GEN_AI_OPERATION_NAME,\n  ATTR_GEN_AI_REQUEST_ENCODING_FORMATS,\n  ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY,\n  ATTR_GEN_AI_REQUEST_MAX_TOKENS,\n  ATTR_GEN_AI_REQUEST_MODEL,\n  ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY,\n  ATTR_GEN_AI_REQUEST_STOP_SEQUENCES,\n  ATTR_GEN_AI_REQUEST_TEMPERATURE,\n  ATTR_GEN_AI_REQUEST_TOP_P,\n  ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n  ATTR_GEN_AI_RESPONSE_ID,\n  ATTR_GEN_AI_RESPONSE_MODEL,\n  ATTR_GEN_AI_SYSTEM,\n  ATTR_GEN_AI_TOKEN_TYPE,\n  ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n  ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n  METRIC_GEN_AI_CLIENT_OPERATION_DURATION,\n  METRIC_GEN_AI_CLIENT_TOKEN_USAGE,\n} from './semconv';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\nimport { getEnvBool, getAttrsFromBaseURL } from './utils';\nimport { OpenAIInstrumentationConfig } from './types';\nimport {\n  APIPromise,\n  GenAIMessage,\n  GenAIChoiceEventBody,\n  GenAISystemMessageEventBody,\n  GenAIUserMessageEventBody,\n  GenAIAssistantMessageEventBody,\n  GenAIToolMessageEventBody,\n  GenAIToolCall,\n} from './internal-types';\n\n// The JS semconv package doesn't yet emit constants for event names.\n// TODO: otel-js issue for semconv pkg not including event names\nconst EVENT_GEN_AI_SYSTEM_MESSAGE = 'gen_ai.system.message';\nconst EVENT_GEN_AI_USER_MESSAGE = 'gen_ai.user.message';\nconst EVENT_GEN_AI_ASSISTANT_MESSAGE = 'gen_ai.assistant.message';\nconst EVENT_GEN_AI_TOOL_MESSAGE = 'gen_ai.tool.message';\nconst EVENT_GEN_AI_CHOICE = 'gen_ai.choice';\n\nexport class OpenAIInstrumentation extends InstrumentationBase<OpenAIInstrumentationConfig> {\n  private _genaiClientOperationDuration!: Histogram;\n  private _genaiClientTokenUsage!: Histogram;\n\n  constructor(config: OpenAIInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, PACKAGE_VERSION, config);\n\n    // Possible environment variable overrides for config.\n    const cfg = this.getConfig();\n    const envCC = getEnvBool(\n      'OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT',\n      this._diag\n    );\n    if (envCC !== undefined) {\n      cfg.captureMessageContent = envCC;\n    }\n  }\n\n  // Override InstrumentationAbtract.setConfig so we can normalize config.\n  override setConfig(config: OpenAIInstrumentationConfig = {}) {\n    const { captureMessageContent, ...validConfig } = config;\n    (validConfig as OpenAIInstrumentationConfig).captureMessageContent =\n      !!captureMessageContent;\n    super.setConfig(validConfig);\n  }\n\n  protected init() {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'openai',\n        ['>=4.19.0 <7'],\n        modExports => {\n          this._wrap(\n            modExports.OpenAI.Chat.Completions.prototype,\n            'create',\n            this._getPatchedChatCompletionsCreate()\n          );\n          this._wrap(\n            modExports.OpenAI.Embeddings.prototype,\n            'create',\n            this._getPatchedEmbeddingsCreate()\n          );\n\n          return modExports;\n        },\n        modExports => {\n          this._unwrap(modExports.OpenAI.Chat.Completions.prototype, 'create');\n          this._unwrap(modExports.OpenAI.Embeddings.prototype, 'create');\n        }\n      ),\n    ];\n  }\n\n  // This is a 'protected' method on class `InstrumentationAbstract`.\n  override _updateMetricInstruments() {\n    this._genaiClientOperationDuration = this.meter.createHistogram(\n      METRIC_GEN_AI_CLIENT_OPERATION_DURATION,\n      {\n        description: 'GenAI operation duration',\n        unit: 's',\n        advice: {\n          explicitBucketBoundaries: [\n            0.01, 0.02, 0.04, 0.08, 0.16, 0.32, 0.64, 1.28, 2.56, 5.12, 10.24,\n            20.48, 40.96, 81.92,\n          ],\n        },\n      }\n    );\n    this._genaiClientTokenUsage = this.meter.createHistogram(\n      METRIC_GEN_AI_CLIENT_TOKEN_USAGE,\n      {\n        description: 'Measures number of input and output tokens used',\n        unit: '{token}',\n        advice: {\n          explicitBucketBoundaries: [\n            1, 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576,\n            4194304, 16777216, 67108864,\n          ],\n        },\n      }\n    );\n  }\n\n  private _getPatchedChatCompletionsCreate(): any {\n    const self = this;\n    return (original: ChatCompletions['create']) => {\n      // https://platform.openai.com/docs/api-reference/chat/create\n      return function patchedCreate(\n        this: ChatCompletions,\n        ...args: Parameters<ChatCompletions['create']>\n      ) {\n        if (!self.isEnabled) {\n          return original.apply(this, args);\n        }\n\n        self._diag.debug('OpenAI.Chat.Completions.create args: %O', args);\n        const params = args[0];\n        const config = self.getConfig();\n        const startNow = performance.now();\n\n        let startInfo;\n        try {\n          startInfo = self._startChatCompletionsSpan(\n            params,\n            config,\n            this?._client?.baseURL\n          );\n        } catch (err) {\n          self._diag.error('unexpected error starting span:', err);\n          return original.apply(this, args);\n        }\n        const { span, ctx, commonAttrs } = startInfo;\n\n        const apiPromise = context.with(ctx, () => original.apply(this, args));\n\n        // Streaming.\n        if (isStreamPromise(params, apiPromise)) {\n          // When streaming, `apiPromise` resolves to `Stream`,\n          // an async iterable (i.e. has a `Symbol.asyncIterator` method). We\n          // want to wrap that iteration to gather telemetry. Instead of wrapping\n          // `Symbol.asyncIterator`, which would be nice, we wrap the `iterator`\n          // method because it is used internally by `Stream#tee()`.\n          apiPromise\n            .then(stream => {\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              self._wrap(stream as any, 'iterator', origIterator => {\n                return () => {\n                  return self._onChatCompletionsStreamIterator(\n                    origIterator(),\n                    span,\n                    startNow,\n                    config,\n                    commonAttrs,\n                    ctx\n                  );\n                };\n              });\n              return stream;\n            })\n            .catch(\n              self._createAPIPromiseRejectionHandler(\n                startNow,\n                span,\n                commonAttrs\n              )\n            );\n          // We have to return the original `APIPromise` instance, because it is\n          // a customized subclass of `Promise`.\n          return apiPromise;\n        }\n\n        // Non-streaming.\n        apiPromise\n          .then(result => {\n            self._onChatCompletionsCreateResult(\n              span,\n              startNow,\n              commonAttrs,\n              result as ChatCompletion,\n              config,\n              ctx\n            );\n          })\n          .catch(\n            self._createAPIPromiseRejectionHandler(startNow, span, commonAttrs)\n          );\n\n        return apiPromise;\n      };\n    };\n  }\n\n  /**\n   * Start a span for this chat-completion API call. This also emits log events\n   * as appropriate for the request params.\n   */\n  private _startChatCompletionsSpan(\n    params: ChatCompletionCreateParams,\n    config: OpenAIInstrumentationConfig,\n    baseURL: string | undefined\n  ) {\n    // Attributes common to span, metrics, log events.\n    const commonAttrs: Attributes = {\n      [ATTR_GEN_AI_OPERATION_NAME]: 'chat',\n      [ATTR_GEN_AI_REQUEST_MODEL]: params.model,\n      [ATTR_GEN_AI_SYSTEM]: 'openai',\n    };\n    Object.assign(commonAttrs, getAttrsFromBaseURL(baseURL, this._diag));\n\n    // Span attributes.\n    const attrs: Attributes = {\n      ...commonAttrs,\n    };\n    if (params.frequency_penalty != null) {\n      attrs[ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY] = params.frequency_penalty;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if ((params as any).max_completion_tokens != null) {\n      attrs[ATTR_GEN_AI_REQUEST_MAX_TOKENS] =\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (params as any).max_completion_tokens;\n    } else if (params.max_tokens != null) {\n      // `max_tokens` is deprecated in favour of `max_completion_tokens`.\n      attrs[ATTR_GEN_AI_REQUEST_MAX_TOKENS] = params.max_tokens;\n    }\n    if (params.presence_penalty != null) {\n      attrs[ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY] = params.presence_penalty;\n    }\n    if (params.stop != null) {\n      if (Array.isArray(params.stop)) {\n        attrs[ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = params.stop;\n      } else {\n        attrs[ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = [params.stop];\n      }\n    }\n    if (params.temperature != null) {\n      attrs[ATTR_GEN_AI_REQUEST_TEMPERATURE] = params.temperature;\n    }\n    if (params.top_p != null) {\n      attrs[ATTR_GEN_AI_REQUEST_TOP_P] = params.top_p;\n    }\n\n    const span: Span = this.tracer.startSpan(\n      `${attrs[ATTR_GEN_AI_OPERATION_NAME]} ${attrs[ATTR_GEN_AI_REQUEST_MODEL]}`,\n      {\n        kind: SpanKind.CLIENT,\n        attributes: attrs,\n      }\n    );\n    const ctx: Context = trace.setSpan(context.active(), span);\n\n    // Capture prompts as log events.\n    const timestamp = Date.now();\n    params.messages.forEach((msg: ChatCompletionMessageParam) => {\n      switch (msg.role) {\n        case 'system': {\n          const body: GenAISystemMessageEventBody = {};\n          if (config.captureMessageContent) {\n            if (Array.isArray(msg.content)) {\n              body.content = msg.content.map(p => p.text).join('');\n            } else {\n              body.content = msg.content;\n            }\n          }\n          this.logger.emit({\n            timestamp,\n            context: ctx,\n            severityNumber: SeverityNumber.INFO,\n            attributes: {\n              [ATTR_EVENT_NAME]: EVENT_GEN_AI_SYSTEM_MESSAGE,\n              [ATTR_GEN_AI_SYSTEM]: 'openai',\n            },\n            body,\n          });\n          break;\n        }\n        case 'user': {\n          const body: GenAIUserMessageEventBody = {};\n          if (config.captureMessageContent) {\n            if (Array.isArray(msg.content)) {\n              body.content = msg.content\n                .filter(isTextContent)\n                .map(p => p.text)\n                .join('');\n            } else {\n              body.content = msg.content;\n            }\n          }\n          this.logger.emit({\n            timestamp,\n            context: ctx,\n            severityNumber: SeverityNumber.INFO,\n            attributes: {\n              [ATTR_EVENT_NAME]: EVENT_GEN_AI_USER_MESSAGE,\n              [ATTR_GEN_AI_SYSTEM]: 'openai',\n            },\n            body,\n          });\n          break;\n        }\n        case 'assistant': {\n          const body: GenAIAssistantMessageEventBody = {};\n          if (config.captureMessageContent) {\n            if (msg.content) {\n              if (Array.isArray(msg.content)) {\n                body.content = msg.content\n                  .filter(isTextContent)\n                  .map(p => p.text)\n                  .join('');\n              } else {\n                body.content = msg.content;\n              }\n            }\n            // As of openai@5.12.1, type ChatCompletionMessageToolCall can\n            // have type=\"custom\" which has no `function` property. As well,\n            // GenAI semconv has since changed how it captures tool calls.\n            // For now we just cope: we could capture\n            // `ChatCompletionMessageCustomToolCall.Custom` properties, but we\n            // don't for now.\n            body.tool_calls = msg.tool_calls?.map(tc => {\n              const repr: GenAIToolCall = {\n                id: tc.id,\n                type: tc.type,\n              };\n              if (tc.type === 'function') {\n                repr.function = {\n                  name: tc.function.name,\n                  arguments: tc.function.arguments,\n                };\n              }\n              return repr;\n            });\n          } else {\n            body.tool_calls = msg.tool_calls?.map(tc => {\n              const repr: GenAIToolCall = {\n                id: tc.id,\n                type: tc.type,\n              };\n              if (tc.type === 'function') {\n                repr.function = { name: tc.function.name };\n              }\n              return repr;\n            });\n          }\n          this.logger.emit({\n            timestamp,\n            context: ctx,\n            severityNumber: SeverityNumber.INFO,\n            attributes: {\n              [ATTR_EVENT_NAME]: EVENT_GEN_AI_ASSISTANT_MESSAGE,\n              [ATTR_GEN_AI_SYSTEM]: 'openai',\n            },\n            body,\n          });\n          break;\n        }\n        case 'tool': {\n          const body: GenAIToolMessageEventBody = {\n            id: msg.tool_call_id,\n          };\n          if (config.captureMessageContent) {\n            if (Array.isArray(msg.content)) {\n              body.content = msg.content.map(p => p.text).join('');\n            } else {\n              body.content = msg.content;\n            }\n          }\n          this.logger.emit({\n            timestamp,\n            context: ctx,\n            severityNumber: SeverityNumber.INFO,\n            attributes: {\n              [ATTR_EVENT_NAME]: EVENT_GEN_AI_TOOL_MESSAGE,\n              [ATTR_GEN_AI_SYSTEM]: 'openai',\n            },\n            body,\n          });\n          break;\n        }\n        default:\n          this._diag.debug(\n            `unknown message role in OpenAI.Chat.Completions.create: ${msg.role}`\n          );\n      }\n    });\n\n    return { span, ctx, commonAttrs };\n  }\n\n  /**\n   * This wraps an instance of a `openai/streaming.Stream.iterator()`, an\n   * async iterator. It should yield the chunks unchanged, and gather telemetry\n   * data from those chunks, then end the span.\n   */\n  private async *_onChatCompletionsStreamIterator(\n    streamIter: AsyncIterator<ChatCompletionChunk>,\n    span: Span,\n    startNow: number,\n    config: OpenAIInstrumentationConfig,\n    commonAttrs: Attributes,\n    ctx: Context\n  ) {\n    let id;\n    let model;\n    const finishReasons: string[] = [];\n    const choices = [];\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    for await (const chunk of streamIter as any) {\n      yield chunk;\n\n      // Gather telemetry from this chunk.\n      this._diag.debug(\n        'OpenAI.Chat.Completions.create stream chunk: %O',\n        chunk\n      );\n      const idx = chunk.choices[0]?.index ?? 0;\n      if (!choices[idx]) {\n        choices[idx] = {} as {\n          content: string;\n          toolCalls: ChatCompletionMessageToolCall[];\n        };\n      }\n      if (config.captureMessageContent) {\n        const contentPart = chunk.choices[0]?.delta?.content;\n        if (contentPart) {\n          if (!choices[idx].content) {\n            choices[idx].content = '';\n          }\n          choices[idx].content += contentPart;\n        }\n      }\n      // Assume delta.tool_calls, if exists, is an array of length 1.\n      const toolCallPart = chunk.choices[0]?.delta?.tool_calls?.[0];\n      if (toolCallPart) {\n        if (!choices[idx].toolCalls) {\n          choices[idx].toolCalls = [];\n        }\n        const toolCalls: GenAIToolCall[] = choices[idx].toolCalls;\n        if (toolCallPart.id) {\n          // First chunk in a tool call.\n          const repr: GenAIToolCall = {\n            id: toolCallPart.id,\n            type: toolCallPart.type,\n          };\n          if (toolCallPart.type === 'function') {\n            repr.function = {\n              name: toolCallPart.function?.name,\n              arguments: toolCallPart.function?.arguments ?? '',\n            };\n          }\n          toolCalls.push(repr);\n        } else if (toolCalls.length > 0) {\n          // A tool call chunk with more of the `function.arguments`.\n          const lastPart = toolCalls[toolCalls.length - 1];\n          if (lastPart.function !== undefined) {\n            lastPart.function.arguments +=\n              toolCallPart.function?.arguments ?? '';\n          }\n        }\n      }\n      if (!id && chunk.id) {\n        id = chunk.id;\n        span.setAttribute(ATTR_GEN_AI_RESPONSE_ID, id);\n      }\n      if (!model && chunk.model) {\n        model = chunk.model;\n        span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, model);\n      }\n      if (!finishReasons[idx]) {\n        const finishReason = chunk.choices[0]?.finish_reason;\n        if (finishReason) {\n          finishReasons[idx] = finishReason;\n        }\n      }\n      if (chunk.usage) {\n        // A final usage chunk if `stream_options.include_usage: true`.\n        span.setAttribute(\n          ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n          chunk.usage.prompt_tokens\n        );\n        span.setAttribute(\n          ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n          chunk.usage.completion_tokens\n        );\n        this._genaiClientTokenUsage.record(chunk.usage.prompt_tokens, {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: model,\n          [ATTR_GEN_AI_TOKEN_TYPE]: 'input',\n        });\n        this._genaiClientTokenUsage.record(chunk.usage.completion_tokens, {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: model,\n          [ATTR_GEN_AI_TOKEN_TYPE]: 'output',\n        });\n      }\n    }\n    span.setAttribute(\n      ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n      finishReasons.filter(f => f !== undefined)\n    );\n\n    // Capture choices as log events.\n    for (const [idx, choice] of choices.entries()) {\n      if (!choice) {\n        continue;\n      }\n      const message: Partial<GenAIMessage> = {};\n      if (\n        config.captureMessageContent &&\n        choice.content &&\n        choice.content.length > 0\n      ) {\n        message.content = choice.content;\n      }\n      if (choice.toolCalls && choice.toolCalls.length > 0) {\n        message.tool_calls = choice.toolCalls;\n        if (!config.captureMessageContent) {\n          message.tool_calls.forEach(tc => {\n            delete tc.function?.arguments;\n          });\n        }\n      }\n      this.logger.emit({\n        timestamp: Date.now(),\n        context: ctx,\n        severityNumber: SeverityNumber.INFO,\n        attributes: {\n          [ATTR_EVENT_NAME]: EVENT_GEN_AI_CHOICE,\n          [ATTR_GEN_AI_SYSTEM]: 'openai',\n        },\n        body: {\n          finish_reason: finishReasons[idx],\n          index: idx,\n          message,\n        } as GenAIChoiceEventBody,\n      });\n    }\n\n    this._genaiClientOperationDuration.record(\n      (performance.now() - startNow) / 1000,\n      {\n        ...commonAttrs,\n        [ATTR_GEN_AI_RESPONSE_MODEL]: model,\n      }\n    );\n\n    span.end();\n  }\n\n  private _onChatCompletionsCreateResult(\n    span: Span,\n    startNow: number,\n    commonAttrs: Attributes,\n    result: ChatCompletion,\n    config: OpenAIInstrumentationConfig,\n    ctx: Context\n  ) {\n    this._diag.debug('OpenAI.Chat.Completions.create result: %O', result);\n    try {\n      span.setAttribute(\n        ATTR_GEN_AI_RESPONSE_FINISH_REASONS,\n        result.choices.map(c => c.finish_reason)\n      );\n      span.setAttribute(ATTR_GEN_AI_RESPONSE_ID, result.id);\n      span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, result.model);\n      if (result.usage) {\n        span.setAttribute(\n          ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n          result.usage.prompt_tokens\n        );\n        span.setAttribute(\n          ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,\n          result.usage.completion_tokens\n        );\n      }\n\n      // Capture choices as log events.\n      result.choices.forEach(choice => {\n        const message: Partial<GenAIMessage> = {};\n        if (config.captureMessageContent) {\n          // TODO: telemetry diff with streaming case: content=null, no 'role: assistant', 'tool calls (enableCaptureContent=true)' test case\n          if (choice.message.content) {\n            message.content = choice.message.content;\n          }\n          if (choice.message.tool_calls) {\n            message.tool_calls = choice.message.tool_calls;\n          }\n        } else {\n          if (choice.message.tool_calls) {\n            message.tool_calls = choice.message.tool_calls.map(tc => {\n              const repr: GenAIToolCall = {\n                id: tc.id,\n                type: tc.type,\n              };\n              if (tc.type === 'function') {\n                repr.function = { name: tc.function.name };\n              }\n              return repr;\n            });\n          }\n        }\n        this.logger.emit({\n          timestamp: Date.now(),\n          context: ctx,\n          severityNumber: SeverityNumber.INFO,\n          attributes: {\n            [ATTR_EVENT_NAME]: EVENT_GEN_AI_CHOICE,\n            [ATTR_GEN_AI_SYSTEM]: 'openai',\n          },\n          body: {\n            finish_reason: choice.finish_reason,\n            index: choice.index,\n            message,\n          } as GenAIChoiceEventBody,\n        });\n      });\n\n      this._genaiClientOperationDuration.record(\n        (performance.now() - startNow) / 1000,\n        {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: result.model,\n        }\n      );\n\n      if (result.usage) {\n        this._genaiClientTokenUsage.record(result.usage.prompt_tokens, {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: result.model,\n          [ATTR_GEN_AI_TOKEN_TYPE]: 'input',\n        });\n\n        this._genaiClientTokenUsage.record(result.usage.completion_tokens, {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: result.model,\n          [ATTR_GEN_AI_TOKEN_TYPE]: 'output',\n        });\n      }\n    } catch (err) {\n      this._diag.error(\n        'unexpected error getting telemetry from chat result:',\n        err\n      );\n    }\n    span.end();\n  }\n\n  private _createAPIPromiseRejectionHandler(\n    startNow: number,\n    span: Span,\n    commonAttrs: Attributes\n  ) {\n    return (err: Error) => {\n      this._diag.debug('OpenAI APIPromise rejection: %O', err);\n\n      // https://github.com/openai/openai-node/blob/master/src/error.ts\n      // The most reliable low cardinality string for errors seems to be\n      // the class name. See also:\n      // https://platform.openai.com/docs/guides/error-codes\n      const errorType = err?.constructor?.name;\n\n      this._genaiClientOperationDuration.record(\n        (performance.now() - startNow) / 1000,\n        {\n          ...commonAttrs,\n          'error.type': errorType,\n        }\n      );\n\n      span.setStatus({\n        code: SpanStatusCode.ERROR,\n        message: err.message,\n      });\n\n      span.setAttribute('error.type', errorType);\n      span.end();\n    };\n  }\n\n  private _getPatchedEmbeddingsCreate(): any {\n    const self = this;\n    return (original: Embeddings['create']) => {\n      // https://platform.openai.com/docs/api-reference/embeddings/create\n      return function patchedCreate(\n        this: Embeddings,\n        ...args: Parameters<Embeddings['create']>\n      ) {\n        if (!self.isEnabled) {\n          return original.apply(this, args);\n        }\n\n        self._diag.debug('OpenAI.Chat.Embeddings.create args: %O', args);\n        const params = args[0];\n        const startNow = performance.now();\n\n        let startInfo;\n        try {\n          startInfo = self._startEmbeddingsSpan(params, this?._client?.baseURL);\n        } catch (err) {\n          self._diag.error('unexpected error starting span:', err);\n          return original.apply(this, args);\n        }\n        const { span, ctx, commonAttrs } = startInfo;\n\n        const apiPromise = context.with(ctx, () => original.apply(this, args));\n\n        apiPromise\n          .then(result => {\n            self._onEmbeddingsCreateResult(span, startNow, commonAttrs, result);\n          })\n          .catch(\n            self._createAPIPromiseRejectionHandler(startNow, span, commonAttrs)\n          );\n\n        return apiPromise;\n      };\n    };\n  }\n\n  /**\n   * Start a span for this chat-completion API call. This also emits log events\n   * as appropriate for the request params.\n   */\n  private _startEmbeddingsSpan(\n    params: EmbeddingCreateParams,\n    baseURL: string | undefined\n  ) {\n    // Attributes common to span, metrics, log events.\n    const commonAttrs: Attributes = {\n      [ATTR_GEN_AI_OPERATION_NAME]: 'embeddings',\n      [ATTR_GEN_AI_REQUEST_MODEL]: params.model,\n      [ATTR_GEN_AI_SYSTEM]: 'openai',\n    };\n    Object.assign(commonAttrs, getAttrsFromBaseURL(baseURL, this._diag));\n\n    // Span attributes.\n    const attrs: Attributes = {\n      ...commonAttrs,\n    };\n    if (params.encoding_format != null) {\n      attrs[ATTR_GEN_AI_REQUEST_ENCODING_FORMATS] = [params.encoding_format];\n    }\n\n    const span = this.tracer.startSpan(\n      `${attrs[ATTR_GEN_AI_OPERATION_NAME]} ${attrs[ATTR_GEN_AI_REQUEST_MODEL]}`,\n      {\n        kind: SpanKind.CLIENT,\n        attributes: attrs,\n      }\n    );\n    const ctx = trace.setSpan(context.active(), span);\n\n    return { span, ctx, commonAttrs };\n  }\n\n  private _onEmbeddingsCreateResult(\n    span: Span,\n    startNow: number,\n    commonAttrs: Attributes,\n    result: CreateEmbeddingResponse\n  ) {\n    this._diag.debug('OpenAI.Embeddings.create result: %O', result);\n    try {\n      span.setAttribute(ATTR_GEN_AI_RESPONSE_MODEL, result.model);\n\n      this._genaiClientOperationDuration.record(\n        (performance.now() - startNow) / 1000,\n        {\n          ...commonAttrs,\n          [ATTR_GEN_AI_RESPONSE_MODEL]: result.model,\n        }\n      );\n\n      span.setAttribute(\n        ATTR_GEN_AI_USAGE_INPUT_TOKENS,\n        result.usage.prompt_tokens\n      );\n      this._genaiClientTokenUsage.record(result.usage.prompt_tokens, {\n        ...commonAttrs,\n        [ATTR_GEN_AI_RESPONSE_MODEL]: result.model,\n        [ATTR_GEN_AI_TOKEN_TYPE]: 'input',\n      });\n    } catch (err) {\n      this._diag.error(\n        'unexpected error getting telemetry from embeddings result:',\n        err\n      );\n    }\n    span.end();\n  }\n}\n\nfunction isTextContent(\n  value: ChatCompletionContentPart | ChatCompletionContentPartRefusal\n): value is ChatCompletionContentPartText {\n  return value.type === 'text';\n}\n\nfunction isStreamPromise(\n  params: ChatCompletionCreateParams | undefined,\n  value: APIPromise<Stream<ChatCompletionChunk> | ChatCompletion>\n): value is APIPromise<Stream<ChatCompletionChunk>> {\n  if (params && params.stream) {\n    return true;\n  }\n  return false;\n}\n"]}