diff --git a/dev-packages/bun-integration-tests/node-suites/excludes.ts b/dev-packages/bun-integration-tests/node-suites/excludes.ts index 20124be5a264..ba3fc6a6ef95 100644 --- a/dev-packages/bun-integration-tests/node-suites/excludes.ts +++ b/dev-packages/bun-integration-tests/node-suites/excludes.ts @@ -258,10 +258,8 @@ const BUN_BUILD_NOT_TRIAGED = [ 'suites/tracing/mongoose-v9/test.ts', 'suites/tracing/mongoose/test.ts', 'suites/tracing/mysql/test.ts', - 'suites/tracing/openai/test.ts', 'suites/tracing/prisma-orm-v8/test.ts', 'suites/tracing/together-ai/test.ts', - 'suites/tracing/vercelai/test.ts', 'suites/tracing/vercelai/v6_v7/test.ts', ]; diff --git a/packages/bun/src/sdk.ts b/packages/bun/src/sdk.ts index bd936eae1adb..d1aba1b7aebc 100644 --- a/packages/bun/src/sdk.ts +++ b/packages/bun/src/sdk.ts @@ -2,6 +2,7 @@ import * as os from 'node:os'; import type { Integration, Options } from '@sentry/core'; import { applySdkMetadata, + conversationIdIntegration, dedupeIntegration, eventFiltersIntegration, functionToStringIntegration, @@ -51,6 +52,7 @@ export function getDefaultIntegrationsWithoutPerformance(): Integration[] { linkedErrorsIntegration(), dedupeIntegration(), requestDataIntegration(), + conversationIdIntegration(), // Native Wrappers consoleIntegration(), httpIntegration(), diff --git a/packages/bun/test/init.test.ts b/packages/bun/test/init.test.ts index 2fced80fd67a..6f2cedadece6 100644 --- a/packages/bun/test/init.test.ts +++ b/packages/bun/test/init.test.ts @@ -1,3 +1,4 @@ +import { GEN_AI_CONVERSATION_ID } from '@sentry/conventions/attributes'; import { type Integration } from '@sentry/core'; import * as sentryServerUtils from '@sentry/server-utils'; import type { Mock } from 'bun:test'; @@ -8,6 +9,9 @@ import { getDefaultIntegrationsWithoutPerformance, init, initWithoutDefaultIntegrations, + spanToJSON, + startSpan, + withScope, } from '../src'; const PUBLIC_DSN = 'https://username@domain/123'; @@ -127,6 +131,19 @@ describe('init()', () => { expect(integrations?.map(({ name }) => name)).toContain('Some mock integration 4.1'); expect(integrations?.map(({ name }) => name)).toContain('Some mock integration 4.3'); }); + + it('adds the conversation id of the scope to gen_ai spans', () => { + // The default integrations alone must do it, without the tracing integrations. + mockGetTracingIntegrations.mockImplementation(() => []); + init({ dsn: PUBLIC_DSN, tracesSampleRate: 1 }); + + withScope(scope => { + scope.setConversationId('conversation-1'); + startSpan({ name: 'chat', op: 'gen_ai.chat' }, span => { + expect(spanToJSON(span).attributes[GEN_AI_CONVERSATION_ID]).toBe('conversation-1'); + }); + }); + }); }); describe('runtime', () => {