From e5ba2d8e49abb9327d48a37e3f2b165dc3ad0b82 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Fri, 2 Oct 2026 09:30:42 +0200 Subject: [PATCH] ref(core): Use conversation ID constant from conventions Co-Authored-By: GPT-6 --- .../core/src/integrations/conversationId.ts | 4 ++-- packages/core/src/semanticAttributes.ts | 1 + .../lib/integrations/conversationId.test.ts | 20 +++++++++---------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/core/src/integrations/conversationId.ts b/packages/core/src/integrations/conversationId.ts index 4cbcded45be5..31b4de5f092c 100644 --- a/packages/core/src/integrations/conversationId.ts +++ b/packages/core/src/integrations/conversationId.ts @@ -1,7 +1,7 @@ +import { GEN_AI_CONVERSATION_ID } from '@sentry/conventions/attributes'; import type { Client } from '../client'; import { getCurrentScope, getIsolationScope } from '../currentScopes'; import { defineIntegration } from '../integration'; -import { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../semanticAttributes'; import type { IntegrationFn } from '../types/integration'; import type { Span } from '../types/span'; import { spanToStaticSpanJSON } from '../utils/spanUtils'; @@ -29,7 +29,7 @@ const _conversationIdIntegration = (() => { return; } - span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, conversationId); + span.setAttribute(GEN_AI_CONVERSATION_ID, conversationId); } }); }, diff --git a/packages/core/src/semanticAttributes.ts b/packages/core/src/semanticAttributes.ts index 4c1ce43c42cd..59b90e9ad61a 100644 --- a/packages/core/src/semanticAttributes.ts +++ b/packages/core/src/semanticAttributes.ts @@ -133,5 +133,6 @@ export const SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = 'sentry.link.type'; * The conversation ID for linking messages across API calls. * For OpenAI Assistants API: thread_id * For LangGraph: configurable.thread_id + * @deprecated Use `GEN_AI_CONVERSATION_ID` from `@sentry/conventions/attributes` instead. */ export const GEN_AI_CONVERSATION_ID_ATTRIBUTE = 'gen_ai.conversation.id'; diff --git a/packages/core/test/lib/integrations/conversationId.test.ts b/packages/core/test/lib/integrations/conversationId.test.ts index 3cd97a2d4b42..fa3bc639be62 100644 --- a/packages/core/test/lib/integrations/conversationId.test.ts +++ b/packages/core/test/lib/integrations/conversationId.test.ts @@ -1,7 +1,7 @@ +import { GEN_AI_CONVERSATION_ID } from '@sentry/conventions/attributes'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { getCurrentScope, getIsolationScope, setCurrentClient, startSpan } from '../../../src'; import { conversationIdIntegration } from '../../../src/integrations/conversationId'; -import { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../../../src/semanticAttributes'; import { spanToStaticSpanJSON } from '../../../src/utils/spanUtils'; import { getDefaultTestClientOptions, TestClient } from '../../mocks/client'; @@ -28,7 +28,7 @@ describe('ConversationId', () => { startSpan({ name: 'test-span', op: 'gen_ai.chat' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBe('conv_test_123'); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBe('conv_test_123'); }); }); @@ -37,7 +37,7 @@ describe('ConversationId', () => { startSpan({ name: 'test-span', op: 'gen_ai.chat' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBe('conv_isolation_456'); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBe('conv_isolation_456'); }); }); @@ -47,14 +47,14 @@ describe('ConversationId', () => { startSpan({ name: 'test-span', op: 'gen_ai.chat' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBe('conv_current_789'); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBe('conv_current_789'); }); }); it('does not apply conversation ID when not set in scope', () => { startSpan({ name: 'test-span', op: 'gen_ai.chat' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBeUndefined(); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBeUndefined(); }); }); @@ -64,7 +64,7 @@ describe('ConversationId', () => { startSpan({ name: 'test-span', op: 'gen_ai.chat' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBeUndefined(); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBeUndefined(); }); }); @@ -74,7 +74,7 @@ describe('ConversationId', () => { startSpan({ name: 'parent-span', op: 'gen_ai.invoke_agent' }, () => { startSpan({ name: 'child-span', op: 'gen_ai.chat' }, childSpan => { const childJSON = spanToStaticSpanJSON(childSpan); - expect(childJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBe('conv_nested_abc'); + expect(childJSON.data[GEN_AI_CONVERSATION_ID]).toBe('conv_nested_abc'); }); }); }); @@ -87,12 +87,12 @@ describe('ConversationId', () => { name: 'test-span', op: 'gen_ai.chat', attributes: { - [GEN_AI_CONVERSATION_ID_ATTRIBUTE]: 'conv_explicit', + [GEN_AI_CONVERSATION_ID]: 'conv_explicit', }, }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBe('conv_from_scope'); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBe('conv_from_scope'); }, ); }); @@ -102,7 +102,7 @@ describe('ConversationId', () => { startSpan({ name: 'db-query', op: 'db.query' }, span => { const spanJSON = spanToStaticSpanJSON(span); - expect(spanJSON.data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]).toBeUndefined(); + expect(spanJSON.data[GEN_AI_CONVERSATION_ID]).toBeUndefined(); }); }); });