From 89a85bb53bbf2132b082a9a9d14f67cb1978005a Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Wed, 29 Jul 2026 14:34:08 +0200 Subject: [PATCH] ref(core)!: Rename `gen_ai.tool.input` to `gen_ai.tool.call.arguments` Emit the `gen_ai.tool.call.arguments` attribute from `@sentry/conventions` instead of the deprecated `gen_ai.tool.input` alias across all AI integrations (LangChain, LangGraph, Vercel AI). Co-Authored-By: Claude Opus 4.8 (1M context) --- MIGRATION.md | 1 + .../suites/tracing/vercelai/span-streaming-v4/test.ts | 4 ++-- .../suites/tracing/vercelai/span-streaming-v6/test.ts | 4 ++-- .../node-integration-tests/suites/tracing/vercelai/test.ts | 4 ++-- .../node-integration-tests/suites/tracing/vercelai/v5/test.ts | 4 ++-- .../suites/tracing/vercelai/v6_v7/test.ts | 4 ++-- packages/core/src/tracing/langchain/index.ts | 4 ++-- packages/core/src/tracing/langgraph/utils.ts | 4 ++-- packages/core/src/tracing/vercel-ai/index.ts | 4 ++-- .../server-utils/src/vercel-ai/vercel-ai-dc-subscriber.ts | 4 ++-- 10 files changed, 19 insertions(+), 18 deletions(-) diff --git a/MIGRATION.md b/MIGRATION.md index 1cb76878c4ef..71d365cb2cf1 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -254,6 +254,7 @@ Affected SDKs: All SDKs. - The gen_ai cache token attributes `gen_ai.usage.cache_creation_input_tokens` and `gen_ai.usage.cache_read_input_tokens` were renamed to `gen_ai.usage.cache_creation.input_tokens` and `gen_ai.usage.cache_read.input_tokens`. - The `gen_ai.system` span attribute was renamed to `gen_ai.provider.name` across all AI integrations. - The `gen_ai.request.available_tools` span attribute was renamed to `gen_ai.tool.definitions` across all AI integrations. +- The `gen_ai.tool.input` span attribute was renamed to `gen_ai.tool.call.arguments` across all AI integrations. - Span attributes now use the shared `@sentry/conventions` package under the hood. If you reference these attributes in custom instrumentation, `beforeSendSpan`, dashboards, or alerts, update them to the new names. diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts index fa33b15b8487..feea3e3a72ee 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v4/test.ts @@ -6,9 +6,9 @@ import { GEN_AI_OUTPUT_MESSAGES, GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -233,7 +233,7 @@ describe('Vercel AI integration (streaming v4)', () => { attributes: expect.objectContaining({ [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_DESCRIPTION]: attr('Get the current weather for a location'), - [GEN_AI_TOOL_INPUT]: expect.objectContaining({ value: expect.any(String) }), + [GEN_AI_TOOL_CALL_ARGUMENTS]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_TOOL_OUTPUT]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_TOOL_TYPE]: attr('function'), diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts index fe67a880e7b2..314c2fc07c51 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/span-streaming-v6/test.ts @@ -6,9 +6,9 @@ import { GEN_AI_OUTPUT_MESSAGES, GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -227,7 +227,7 @@ describe('Vercel AI integration (streaming, v6)', () => { attributes: expect.objectContaining({ [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: attr('call-1'), [GEN_AI_TOOL_DESCRIPTION]: attr('Get the current weather for a location'), - [GEN_AI_TOOL_INPUT]: expect.objectContaining({ value: expect.any(String) }), + [GEN_AI_TOOL_CALL_ARGUMENTS]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_TOOL_NAME]: attr('getWeather'), [GEN_AI_TOOL_OUTPUT]: expect.objectContaining({ value: expect.any(String) }), [GEN_AI_TOOL_TYPE]: attr('function'), 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 ffe70e41f08e..017d1bf1101e 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/test.ts @@ -9,9 +9,9 @@ import { GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, GEN_AI_SYSTEM_INSTRUCTIONS, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -241,7 +241,7 @@ describe('Vercel AI integration (v4)', () => { expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_DESCRIPTION].value).toBe( 'Get the current weather for a location', ); - expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_INPUT]).toBeDefined(); + expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_CALL_ARGUMENTS]).toBeDefined(); expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_OUTPUT]).toBeDefined(); }, }) diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/v5/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/v5/test.ts index 114087f73b4a..2851a75c2f96 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/v5/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/v5/test.ts @@ -6,9 +6,9 @@ import { GEN_AI_PROVIDER_NAME, GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -247,7 +247,7 @@ describe('Vercel AI integration (v5)', () => { expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_DESCRIPTION].value).toBe( 'Get the current weather for a location', ); - expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_INPUT]).toBeDefined(); + expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_CALL_ARGUMENTS]).toBeDefined(); expect(toolExecutionSpan!.attributes[GEN_AI_TOOL_OUTPUT]).toBeDefined(); }, }) diff --git a/dev-packages/node-integration-tests/suites/tracing/vercelai/v6_v7/test.ts b/dev-packages/node-integration-tests/suites/tracing/vercelai/v6_v7/test.ts index 15d3d78aa4d5..9087f03eb802 100644 --- a/dev-packages/node-integration-tests/suites/tracing/vercelai/v6_v7/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/vercelai/v6_v7/test.ts @@ -10,9 +10,9 @@ import { GEN_AI_RESPONSE_FINISH_REASONS, GEN_AI_RESPONSE_MODEL, GEN_AI_SYSTEM_INSTRUCTIONS, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -150,7 +150,7 @@ describe.each(matrix)('Vercel AI integration (version %s)', (version, vercelAiVe expect(toolExecutionSpan.attributes[GEN_AI_TOOL_DESCRIPTION]?.value).toBe( 'Get the current weather for a location', ); - expect(toolExecutionSpan.attributes[GEN_AI_TOOL_INPUT]).toBeDefined(); + expect(toolExecutionSpan.attributes[GEN_AI_TOOL_CALL_ARGUMENTS]).toBeDefined(); expect(toolExecutionSpan.attributes[GEN_AI_TOOL_OUTPUT]).toBeDefined(); }, }) diff --git a/packages/core/src/tracing/langchain/index.ts b/packages/core/src/tracing/langchain/index.ts index 682f70d15055..cf40a4c7d395 100644 --- a/packages/core/src/tracing/langchain/index.ts +++ b/packages/core/src/tracing/langchain/index.ts @@ -8,8 +8,8 @@ import type { Span, SpanAttributeValue } from '../../types/span'; import { GEN_AI_OPERATION_NAME, GEN_AI_REQUEST_MODEL, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, } from '@sentry/conventions/attributes'; @@ -299,7 +299,7 @@ export function createLangChainCallbackHandler(options: LangChainOptions = {}): }; if (recordInputs) { - attributes[GEN_AI_TOOL_INPUT] = input; + attributes[GEN_AI_TOOL_CALL_ARGUMENTS] = input; } startSpanManual( diff --git a/packages/core/src/tracing/langgraph/utils.ts b/packages/core/src/tracing/langgraph/utils.ts index eb504e51bde7..e8d33cd77e0e 100644 --- a/packages/core/src/tracing/langgraph/utils.ts +++ b/packages/core/src/tracing/langgraph/utils.ts @@ -10,8 +10,8 @@ import { GEN_AI_RESPONSE_MODEL, GEN_AI_RESPONSE_TEXT, GEN_AI_RESPONSE_TOOL_CALLS, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -106,7 +106,7 @@ export function wrapToolsWithSpans(tools: unknown[], options: LangGraphOptions, if (options.recordInputs) { const toolArgs = 'args' in input && typeof input.args === 'object' ? input.args : input; try { - spanAttributes[GEN_AI_TOOL_INPUT] = JSON.stringify(toolArgs); + spanAttributes[GEN_AI_TOOL_CALL_ARGUMENTS] = JSON.stringify(toolArgs); } catch { // skip if not serializable } diff --git a/packages/core/src/tracing/vercel-ai/index.ts b/packages/core/src/tracing/vercel-ai/index.ts index 18173b644c20..7d95ad705bc6 100644 --- a/packages/core/src/tracing/vercel-ai/index.ts +++ b/packages/core/src/tracing/vercel-ai/index.ts @@ -18,9 +18,9 @@ import { GEN_AI_PROVIDER_NAME, GEN_AI_REQUEST_MODEL, GEN_AI_RESPONSE_MODEL, + GEN_AI_TOOL_CALL_ARGUMENTS, GEN_AI_TOOL_DEFINITIONS, GEN_AI_TOOL_DESCRIPTION, - GEN_AI_TOOL_INPUT, GEN_AI_TOOL_NAME, GEN_AI_TOOL_OUTPUT, GEN_AI_TOOL_TYPE, @@ -319,7 +319,7 @@ export function processVercelAiSpanAttributes(attributes: Record, recordInputs: boolean): S ...(toolName ? { [GEN_AI_TOOL_NAME]: toolName } : {}), ...(toolCallId ? { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: toolCallId } : {}), ...(description ? { [GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE]: description } : {}), - ...(recordInputs && toolInput !== undefined ? { [GEN_AI_TOOL_INPUT]: stringify(toolInput) } : {}), + ...(recordInputs && toolInput !== undefined ? { [GEN_AI_TOOL_CALL_ARGUMENTS]: stringify(toolInput) } : {}), }); }