newrelic
Version:
New Relic agent
40 lines (34 loc) • 1.16 kB
JavaScript
/*
* Copyright 2025 New Relic Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
const Subscriber = require('../base')
class OpenAIClientSubscriber extends Subscriber {
constructor({ agent, logger }) {
super({ agent, logger, packageName: 'openai', channelName: 'nr_makeRequest' })
this.events = ['asyncEnd']
}
handler(data, ctx) {
const { self } = data
ctx.extras = { apiKey: self.apiKey }
return ctx
}
asyncEnd(data) {
const { result, error } = data
const ctx = this.agent.tracer.getContext()
if (ctx?.segment) {
const responseHeaders = result?.response?.headers
let headers = {}
if (responseHeaders) {
headers = Object.fromEntries(responseHeaders)
} else if (error?.headers) {
// In openai v5 they made error headers consistent with response headers
// they are now some custom class that can retrieve headers via `Object.fromEntries`
headers = error?.headers?.values ? Object.fromEntries(error.headers) : { ...error.headers }
}
ctx.extras = { headers }
}
}
}
module.exports = OpenAIClientSubscriber