From f4c60b0facd071ecb9280e7dbe49b6ed9957da16 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 20 Mar 2026 09:34:03 +0100 Subject: [PATCH 1/5] overwrite conversation id only if not previously sert --- packages/core/src/tracing/vercel-ai/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/tracing/vercel-ai/index.ts b/packages/core/src/tracing/vercel-ai/index.ts index 17e26b7b6bac..1d8a27e8e3aa 100644 --- a/packages/core/src/tracing/vercel-ai/index.ts +++ b/packages/core/src/tracing/vercel-ai/index.ts @@ -470,7 +470,9 @@ function addProviderMetadataToAttributes(attributes: SpanAttributes): void { 'gen_ai.usage.output_tokens.prediction_rejected', openaiMetadata.rejectedPredictionTokens, ); - setAttributeIfDefined(attributes, 'gen_ai.conversation.id', openaiMetadata.responseId); + if (!attributes['gen_ai.conversation.id']) { + setAttributeIfDefined(attributes, 'gen_ai.conversation.id', openaiMetadata.responseId); + } } if (providerMetadataObject.anthropic) { From b69d072b4d4e94aa9ef580b83e46c39f5a57848a Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 20 Mar 2026 10:06:54 +0100 Subject: [PATCH 2/5] add node integration tet --- .../vercelai/scenario-conversation-id.mjs | 27 +++++++++++++++++++ .../suites/tracing/vercelai/test.ts | 20 ++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 dev-packages/node-integration-tests/suites/tracing/vercelai/scenario-conversation-id.mjs diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/scenario-conversation-id.mjs b/dev-packages/node-integration-tests/suites/tracing/vercelai/scenario-conversation-id.mjs new file mode 100644 index 000000000000..4933d3bfb9c2 --- /dev/null +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/scenario-conversation-id.mjs @@ -0,0 +1,27 @@ +import * as Sentry from '@sentry/node'; +import { generateText } from 'ai'; +import { MockLanguageModelV1 } from 'ai/test'; + +Sentry.setConversationId('conv-a'); + +async function run() { + await Sentry.startSpan({ op: 'function', name: 'main' }, async () => { + await generateText({ + experimental_telemetry: { isEnabled: true }, + model: new MockLanguageModelV1({ + doGenerate: async () => ({ + rawCall: { rawPrompt: null, rawSettings: {} }, + finishReason: 'stop', + usage: { promptTokens: 10, completionTokens: 20 }, + text: 'Hello!', + providerMetadata: { + openai: { responseId: 'resp_should_not_overwrite' }, + }, + }), + }), + prompt: 'Say hello', + }); + }); +} + +run(); diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts index 7907544a6d11..9b198e1c3596 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts @@ -923,4 +923,24 @@ describe('Vercel AI integration', () => { await createRunner().expect({ transaction: expectedTransaction }).start().completed(); }); }); + + createEsmAndCjsTests(__dirname, 'scenario-conversation-id.mjs', 'instrument.mjs', (createRunner, test) => { + test('does not overwrite conversation id set via Sentry.setConversationId with responseId from provider metadata', async () => { + await createRunner() + .expect({ + transaction: { + transaction: 'main', + spans: expect.arrayContaining([ + expect.objectContaining({ + data: expect.objectContaining({ + 'gen_ai.conversation.id': 'conv-a', + }), + }), + ]), + }, + }) + .start() + .completed(); + }); + }); }); From 91cc5689c47e12b2ca101ebab8d15ec42ec8638c Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 20 Mar 2026 11:34:56 +0100 Subject: [PATCH 3/5] improve test --- .../suites/tracing/vercelai/test.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts index 9b198e1c3596..b39f671cf85c 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts @@ -928,15 +928,10 @@ describe('Vercel AI integration', () => { test('does not overwrite conversation id set via Sentry.setConversationId with responseId from provider metadata', async () => { await createRunner() .expect({ - transaction: { - transaction: 'main', - spans: expect.arrayContaining([ - expect.objectContaining({ - data: expect.objectContaining({ - 'gen_ai.conversation.id': 'conv-a', - }), - }), - ]), + transaction: transaction => { + for (const span of transaction.spans ?? []) { + expect(span.data?.['gen_ai.conversation.id']).toBe('conv-a'); + } }, }) .start() From 17094503ce8068a7adc2244e39fa63c8dbb1e798 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 20 Mar 2026 11:47:55 +0100 Subject: [PATCH 4/5] update tet --- .../suites/tracing/vercelai/test.ts | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts index b39f671cf85c..7a3da95d6295 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts @@ -928,10 +928,22 @@ describe('Vercel AI integration', () => { test('does not overwrite conversation id set via Sentry.setConversationId with responseId from provider metadata', async () => { await createRunner() .expect({ - transaction: transaction => { - for (const span of transaction.spans ?? []) { - expect(span.data?.['gen_ai.conversation.id']).toBe('conv-a'); - } + transaction: { + transaction: 'main', + spans: expect.arrayContaining([ + expect.objectContaining({ + op: 'gen_ai.invoke_agent', + data: expect.objectContaining({ + 'gen_ai.conversation.id': 'conv-a', + }), + }), + expect.objectContaining({ + op: 'gen_ai.generate_content', + data: expect.objectContaining({ + 'gen_ai.conversation.id': 'conv-a', + }), + }), + ]), }, }) .start() From 1fae5bd48d179bafbc23dd33e3f554f1a8500ff6 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 20 Mar 2026 12:12:52 +0100 Subject: [PATCH 5/5] . --- .../node-integration-tests/suites/tracing/vercelai/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts index 7a3da95d6295..6b0b0a45fcf8 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts @@ -938,7 +938,7 @@ describe('Vercel AI integration', () => { }), }), expect.objectContaining({ - op: 'gen_ai.generate_content', + op: 'gen_ai.generate_text', data: expect.objectContaining({ 'gen_ai.conversation.id': 'conv-a', }),