From 29f62c1dce253e415e0288d8e1bfa23e7d499c82 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 10 Dec 2025 14:28:46 +0100 Subject: [PATCH 1/6] fix(docs): Add Next.js Node.js runtime instrumentation guidance --- .../configuration/integrations/openai.mdx | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index 64df7b541748b..0c8b351ab6d76 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -140,9 +140,37 @@ The integration will automatically detect streaming vs non-streaming requests an -## Edge runtime +## Node.js Runtime -This integration is automatically instrumented in the Node.js runtime. For Next.js applications using the Edge runtime, you need to manually instrument the OpenAI client: +Automatic instrumentation of the OpenAI SDK may not work as expected with certain Next.js configurations (especially with Turbopack and in Next.js 16). In these cases, manual instrumentation via `instrumentOpenAiClient` is recommended. + +For projects using Next.js 15 or earlier with Webpack, the following configuration can be applied in your `next.config.js` to ensure proper instrumentation: + +```javascript +module.exports = { + webpack(config, { isServer }) { + if (isServer) { + // Force 'openai' to be required dynamically (not bundled) + // This allows Sentry to instrument the OpenAI SDK at runtime + config.externals = config.externals || []; + config.externals.push("openai"); + } + return config; + }, +}; +``` + +This ensures the package is externalized at runtime. + + + +This cannot be achieved using `serverExternalPackages: ['openai']`. + + + +## Edge Runtime + +For Next.js applications using the Edge runtime, you need to manually instrument the OpenAI client: ```javascript import * as Sentry from "@sentry/nextjs"; From e5b43cf4aa67f77396e6309022506f7a21c4a872 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 10 Dec 2025 14:42:36 +0100 Subject: [PATCH 2/6] update copy --- .../javascript/common/configuration/integrations/openai.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index 0c8b351ab6d76..274e963ef432e 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -162,11 +162,11 @@ module.exports = { This ensures the package is externalized at runtime. - + -This cannot be achieved using `serverExternalPackages: ['openai']`. +Note that this cannot be achieved using `serverExternalPackages: ['openai']`. - + ## Edge Runtime From 18cb58d9f1d065adb083945dde04d0db8c7cf9c4 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Thu, 11 Dec 2025 17:10:27 +0100 Subject: [PATCH 3/6] update copy --- .../configuration/integrations/openai.mdx | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index 274e963ef432e..37e4ce9145654 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -140,37 +140,9 @@ The integration will automatically detect streaming vs non-streaming requests an -## Node.js Runtime +## Node.js and Edge Runtime -Automatic instrumentation of the OpenAI SDK may not work as expected with certain Next.js configurations (especially with Turbopack and in Next.js 16). In these cases, manual instrumentation via `instrumentOpenAiClient` is recommended. - -For projects using Next.js 15 or earlier with Webpack, the following configuration can be applied in your `next.config.js` to ensure proper instrumentation: - -```javascript -module.exports = { - webpack(config, { isServer }) { - if (isServer) { - // Force 'openai' to be required dynamically (not bundled) - // This allows Sentry to instrument the OpenAI SDK at runtime - config.externals = config.externals || []; - config.externals.push("openai"); - } - return config; - }, -}; -``` - -This ensures the package is externalized at runtime. - - - -Note that this cannot be achieved using `serverExternalPackages: ['openai']`. - - - -## Edge Runtime - -For Next.js applications using the Edge runtime, you need to manually instrument the OpenAI client: +For Next.js applications, you need to manually instrument the OpenAI client: ```javascript import * as Sentry from "@sentry/nextjs"; From d18e15a05a411a0ff963906a117bd18720fbb3a7 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Thu, 11 Dec 2025 17:13:53 +0100 Subject: [PATCH 4/6] update copy --- .../javascript/common/configuration/integrations/openai.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index 37e4ce9145654..a57223ee0e6cd 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -35,7 +35,7 @@ This integration works in the Node.js, Cloudflare Workers, Vercel Edge Functions _Import name: `Sentry.openAIIntegration`_ -The `openAIIntegration` adds instrumentation for the `openai` API to capture spans by automatically wrapping OpenAI client calls and recording LLM interactions with configurable input/output recording. +The `openAIIntegration` adds instrumentation for the `openai` API to capture spans by wrapping OpenAI client calls and recording LLM interactions with configurable input/output recording. It is enabled by default and will automatically capture spans for OpenAI API method calls. You can opt-in to capture inputs and outputs by setting `recordInputs` and `recordOutputs` in the integration config: From b066d35261db1dddf6bd80e1699f7519a42b97f3 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Thu, 11 Dec 2025 17:34:59 +0100 Subject: [PATCH 5/6] resolve conflicts --- .../configuration/integrations/openai.mdx | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index a57223ee0e6cd..d84802a58fb11 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -77,6 +77,28 @@ const response = await client.chat.completions.create({ + +For Next.js applications, you need to manually instrument the OpenAI client using the `instrumentOpenAiClient` helper: + +```javascript +import * as Sentry from "@sentry/nextjs"; +import OpenAI from "openai"; + +const openai = new OpenAI(); +const client = Sentry.instrumentOpenAiClient(openai, { + recordInputs: true, + recordOutputs: true, +}); + +// Use the wrapped client instead of the original openai instance +const response = await client.chat.completions.create({ + model: "gpt-4o", + messages: [{ role: "user", content: "Hello!" }], +}); +``` + + + For browser applications, you need to manually instrument the OpenAI client using the `instrumentOpenAiClient` helper: @@ -138,31 +160,6 @@ By default this integration adds tracing support to OpenAI API method calls incl The integration will automatically detect streaming vs non-streaming requests and handle them appropriately. - - -## Node.js and Edge Runtime - -For Next.js applications, you need to manually instrument the OpenAI client: - -```javascript -import * as Sentry from "@sentry/nextjs"; -import OpenAI from "openai"; - -const openai = new OpenAI(); -const client = Sentry.instrumentOpenAiClient(openai, { - recordInputs: true, - recordOutputs: true, -}); - -// Use the wrapped client instead of the original openai instance -const response = await client.chat.completions.create({ - model: "gpt-4o", - messages: [{ role: "user", content: "Hello!" }], -}); -``` - - - ## Supported Versions - `openai`: `>=4.0.0 <6` From a080731f2a797cfcc8e1c71096ddeef21806aae7 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Thu, 11 Dec 2025 17:35:14 +0100 Subject: [PATCH 6/6] resolve conflicts --- .../javascript/common/configuration/integrations/openai.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platforms/javascript/common/configuration/integrations/openai.mdx b/docs/platforms/javascript/common/configuration/integrations/openai.mdx index d84802a58fb11..082871cee80f4 100644 --- a/docs/platforms/javascript/common/configuration/integrations/openai.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/openai.mdx @@ -162,4 +162,4 @@ The integration will automatically detect streaming vs non-streaming requests an ## Supported Versions -- `openai`: `>=4.0.0 <6` +- `openai`: `>=4.0.0 <7`