🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@sentry/core

Package Overview
Dependencies
Maintainers
1
Versions
714
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sentry/core - npm Package Compare versions

Comparing version
10.61.0
to
10.62.0
+8
-0
build/cjs/browser.js

@@ -88,2 +88,4 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const index$1 = require('./tracing/vercel-ai/index.js');
const utils$3 = require('./tracing/ai/utils.js');
const genAiAttributes = require('./tracing/ai/gen-ai-attributes.js');
const utils = require('./tracing/vercel-ai/utils.js');

@@ -335,2 +337,3 @@ const constants$6 = require('./tracing/vercel-ai/constants.js');

exports.SPAN_KIND = spanKind.SPAN_KIND;
exports.spanKindToName = spanKind.spanKindToName;
exports.addBreadcrumb = breadcrumbs.addBreadcrumb;

@@ -370,2 +373,7 @@ exports.functionToStringIntegration = functiontostring.functionToStringIntegration;

exports.addVercelAiProcessors = index$1.addVercelAiProcessors;
exports.getProviderMetadataAttributes = index$1.getProviderMetadataAttributes;
exports.getTruncatedJsonString = utils$3.getTruncatedJsonString;
exports.shouldEnableTruncation = utils$3.shouldEnableTruncation;
exports.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE = genAiAttributes.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE;
exports.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE = genAiAttributes.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE;
exports._INTERNAL_cleanupToolCallSpanContext = utils._INTERNAL_cleanupToolCallSpanContext;

@@ -372,0 +380,0 @@ exports._INTERNAL_getSpanContextForToolCallId = utils._INTERNAL_getSpanContextForToolCallId;

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -88,2 +88,4 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const index$1 = require('./tracing/vercel-ai/index.js');
const utils$3 = require('./tracing/ai/utils.js');
const genAiAttributes = require('./tracing/ai/gen-ai-attributes.js');
const utils = require('./tracing/vercel-ai/utils.js');

@@ -354,2 +356,3 @@ const constants$7 = require('./tracing/vercel-ai/constants.js');

exports.SPAN_KIND = spanKind.SPAN_KIND;
exports.spanKindToName = spanKind.spanKindToName;
exports.addBreadcrumb = breadcrumbs.addBreadcrumb;

@@ -389,2 +392,7 @@ exports.functionToStringIntegration = functiontostring.functionToStringIntegration;

exports.addVercelAiProcessors = index$1.addVercelAiProcessors;
exports.getProviderMetadataAttributes = index$1.getProviderMetadataAttributes;
exports.getTruncatedJsonString = utils$3.getTruncatedJsonString;
exports.shouldEnableTruncation = utils$3.shouldEnableTruncation;
exports.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE = genAiAttributes.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE;
exports.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE = genAiAttributes.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE;
exports._INTERNAL_cleanupToolCallSpanContext = utils._INTERNAL_cleanupToolCallSpanContext;

@@ -391,0 +399,0 @@ exports._INTERNAL_getSpanContextForToolCallId = utils._INTERNAL_getSpanContextForToolCallId;

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -88,2 +88,4 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

const index$1 = require('./tracing/vercel-ai/index.js');
const utils$3 = require('./tracing/ai/utils.js');
const genAiAttributes = require('./tracing/ai/gen-ai-attributes.js');
const utils = require('./tracing/vercel-ai/utils.js');

@@ -353,2 +355,3 @@ const constants$7 = require('./tracing/vercel-ai/constants.js');

exports.SPAN_KIND = spanKind.SPAN_KIND;
exports.spanKindToName = spanKind.spanKindToName;
exports.addBreadcrumb = breadcrumbs.addBreadcrumb;

@@ -388,2 +391,7 @@ exports.functionToStringIntegration = functiontostring.functionToStringIntegration;

exports.addVercelAiProcessors = index$1.addVercelAiProcessors;
exports.getProviderMetadataAttributes = index$1.getProviderMetadataAttributes;
exports.getTruncatedJsonString = utils$3.getTruncatedJsonString;
exports.shouldEnableTruncation = utils$3.shouldEnableTruncation;
exports.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE = genAiAttributes.GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE;
exports.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE = genAiAttributes.GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE;
exports._INTERNAL_cleanupToolCallSpanContext = utils._INTERNAL_cleanupToolCallSpanContext;

@@ -390,0 +398,0 @@ exports._INTERNAL_getSpanContextForToolCallId = utils._INTERNAL_getSpanContextForToolCallId;

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -10,4 +10,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

};
const SPAN_KIND_NAME = {
[SPAN_KIND.INTERNAL]: "INTERNAL",
[SPAN_KIND.SERVER]: "SERVER",
[SPAN_KIND.CLIENT]: "CLIENT",
[SPAN_KIND.PRODUCER]: "PRODUCER",
[SPAN_KIND.CONSUMER]: "CONSUMER"
};
function spanKindToName(kind) {
return SPAN_KIND_NAME[kind];
}
exports.SPAN_KIND = SPAN_KIND;
exports.spanKindToName = spanKindToName;
//# sourceMappingURL=spanKind.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"spanKind.js","sources":["../../src/spanKind.ts"],"sourcesContent":["/**\n * The kind of a span, mirroring OpenTelemetry's `SpanKind` enum values.\n *\n * Exported as a plain const object so SDK code can set a span's kind without\n * importing `@opentelemetry/api` just for the enum. The numeric values must\n * stay in sync with OpenTelemetry's `SpanKind` since they are passed through to\n * the underlying OTel span and sampler.\n */\nexport const SPAN_KIND = {\n INTERNAL: 0,\n SERVER: 1,\n CLIENT: 2,\n PRODUCER: 3,\n CONSUMER: 4,\n} as const;\n\nexport type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];\n"],"names":[],"mappings":";;AAQO,MAAM,SAAA,GAAY;AAAA,EACvB,QAAA,EAAU,CAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU;AACZ;;;;"}
{"version":3,"file":"spanKind.js","sources":["../../src/spanKind.ts"],"sourcesContent":["/**\n * The kind of a span, mirroring OpenTelemetry's `SpanKind` enum values.\n *\n * Exported as a plain const object so SDK code can set a span's kind without\n * importing `@opentelemetry/api` just for the enum. The numeric values must\n * stay in sync with OpenTelemetry's `SpanKind` since they are passed through to\n * the underlying OTel span and sampler.\n */\nexport const SPAN_KIND = {\n INTERNAL: 0,\n SERVER: 1,\n CLIENT: 2,\n PRODUCER: 3,\n CONSUMER: 4,\n} as const;\n\nexport type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];\n\n// Reverse of SPAN_KIND (value → name), for the `otel.kind` attribute. The numeric keys come from\n// SPAN_KIND so they stay in sync; `satisfies` ensures every kind has a name.\nconst SPAN_KIND_NAME = {\n [SPAN_KIND.INTERNAL]: 'INTERNAL',\n [SPAN_KIND.SERVER]: 'SERVER',\n [SPAN_KIND.CLIENT]: 'CLIENT',\n [SPAN_KIND.PRODUCER]: 'PRODUCER',\n [SPAN_KIND.CONSUMER]: 'CONSUMER',\n} as const satisfies Record<SpanKindValue, string>;\n\n/**\n * Resolve the string name of a span kind value (e.g. `1` → `'SERVER'`), mirroring the reverse\n * mapping of OpenTelemetry's `SpanKind` enum. Used for the `otel.kind` span attribute, so SDK\n * code doesn't need to import `@opentelemetry/api` just for that reverse lookup.\n */\nexport function spanKindToName(kind: number): (typeof SPAN_KIND_NAME)[SpanKindValue] | undefined {\n return SPAN_KIND_NAME[kind as SpanKindValue];\n}\n"],"names":[],"mappings":";;AAQO,MAAM,SAAA,GAAY;AAAA,EACvB,QAAA,EAAU,CAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU;AACZ;AAMA,MAAM,cAAA,GAAiB;AAAA,EACrB,CAAC,SAAA,CAAU,QAAQ,GAAG,UAAA;AAAA,EACtB,CAAC,SAAA,CAAU,MAAM,GAAG,QAAA;AAAA,EACpB,CAAC,SAAA,CAAU,MAAM,GAAG,QAAA;AAAA,EACpB,CAAC,SAAA,CAAU,QAAQ,GAAG,UAAA;AAAA,EACtB,CAAC,SAAA,CAAU,QAAQ,GAAG;AACxB,CAAA;AAOO,SAAS,eAAe,IAAA,EAAkE;AAC/F,EAAA,OAAO,eAAe,IAAqB,CAAA;AAC7C;;;;;"}

@@ -275,61 +275,66 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

}
function getProviderMetadataAttributes(providerMetadata) {
const attributes = {};
if (!providerMetadata || typeof providerMetadata !== "object") {
return attributes;
}
const metadata = providerMetadata;
const openaiMetadata = metadata.openai ?? metadata.azure;
if (openaiMetadata) {
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, openaiMetadata.cachedPromptTokens);
setAttributeIfDefined(attributes, "gen_ai.usage.output_tokens.reasoning", openaiMetadata.reasoningTokens);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_accepted",
openaiMetadata.acceptedPredictionTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_rejected",
openaiMetadata.rejectedPredictionTokens
);
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_CONVERSATION_ID_ATTRIBUTE, openaiMetadata.responseId);
}
if (metadata.anthropic) {
const cachedInputTokens = metadata.anthropic.usage?.cache_read_input_tokens ?? metadata.anthropic.cacheReadInputTokens;
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);
const cacheWriteInputTokens = metadata.anthropic.usage?.cache_creation_input_tokens ?? metadata.anthropic.cacheCreationInputTokens;
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);
}
if (metadata.bedrock?.usage) {
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
metadata.bedrock.usage.cacheReadInputTokens
);
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,
metadata.bedrock.usage.cacheWriteInputTokens
);
}
if (metadata.deepseek) {
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
metadata.deepseek.promptCacheHitTokens
);
setAttributeIfDefined(attributes, "gen_ai.usage.input_tokens.cache_miss", metadata.deepseek.promptCacheMissTokens);
}
return attributes;
}
function addProviderMetadataToAttributes(attributes) {
const providerMetadata = attributes[vercelAiAttributes.AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE];
if (providerMetadata) {
try {
const providerMetadataObject = JSON.parse(providerMetadata);
const openaiMetadata = providerMetadataObject.openai ?? providerMetadataObject.azure;
if (openaiMetadata) {
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
openaiMetadata.cachedPromptTokens
);
setAttributeIfDefined(attributes, "gen_ai.usage.output_tokens.reasoning", openaiMetadata.reasoningTokens);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_accepted",
openaiMetadata.acceptedPredictionTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_rejected",
openaiMetadata.rejectedPredictionTokens
);
if (!attributes["gen_ai.conversation.id"]) {
setAttributeIfDefined(attributes, "gen_ai.conversation.id", openaiMetadata.responseId);
}
if (!providerMetadata) {
return;
}
try {
const derived = getProviderMetadataAttributes(JSON.parse(providerMetadata));
for (const [key, value] of Object.entries(derived)) {
if (key === genAiAttributes.GEN_AI_CONVERSATION_ID_ATTRIBUTE && attributes[key]) {
continue;
}
if (providerMetadataObject.anthropic) {
const cachedInputTokens = providerMetadataObject.anthropic.usage?.cache_read_input_tokens ?? providerMetadataObject.anthropic.cacheReadInputTokens;
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);
const cacheWriteInputTokens = providerMetadataObject.anthropic.usage?.cache_creation_input_tokens ?? providerMetadataObject.anthropic.cacheCreationInputTokens;
setAttributeIfDefined(attributes, genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);
}
if (providerMetadataObject.bedrock?.usage) {
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
providerMetadataObject.bedrock.usage.cacheReadInputTokens
);
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,
providerMetadataObject.bedrock.usage.cacheWriteInputTokens
);
}
if (providerMetadataObject.deepseek) {
setAttributeIfDefined(
attributes,
genAiAttributes.GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
providerMetadataObject.deepseek.promptCacheHitTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.input_tokens.cache_miss",
providerMetadataObject.deepseek.promptCacheMissTokens
);
}
} catch {
attributes[key] = value;
}
} catch {
}

@@ -344,3 +349,4 @@ }

exports.addVercelAiProcessors = addVercelAiProcessors;
exports.getProviderMetadataAttributes = getProviderMetadataAttributes;
exports.processVercelAiSpanAttributes = processVercelAiSpanAttributes;
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../../../../src/tracing/vercel-ai/index.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { shouldEnableTruncation } from '../ai/utils';\nimport type { Event } from '../../types/event';\nimport type { Span, SpanAttributes, SpanAttributeValue, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { spanToJSON } from '../../utils/spanUtils';\nimport {\n GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_OPERATION_NAME_ATTRIBUTE,\n GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n GEN_AI_TOOL_INPUT_ATTRIBUTE,\n GEN_AI_TOOL_NAME_ATTRIBUTE,\n GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n GEN_AI_TOOL_TYPE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { SPAN_TO_OPERATION_NAME, toolCallSpanContextMap, toolDescriptionMap } from './constants';\nimport type { TokenSummary } from './types';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport {\n accumulateTokensForParent,\n applyAccumulatedTokens,\n applyToolDescriptionsAndTokens,\n convertAvailableToolsToJsonString,\n requestMessagesFromPrompt,\n} from './utils';\nimport type { OpenAiProviderMetadata, ProviderMetadata } from './vercel-ai-attributes';\nimport {\n AI_MODEL_ID_ATTRIBUTE,\n AI_OPERATION_ID_ATTRIBUTE,\n AI_PROMPT_MESSAGES_ATTRIBUTE,\n AI_PROMPT_TOOLS_ATTRIBUTE,\n AI_RESPONSE_FINISH_REASON_ATTRIBUTE,\n AI_RESPONSE_OBJECT_ATTRIBUTE,\n AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE,\n AI_RESPONSE_TEXT_ATTRIBUTE,\n AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n AI_SCHEMA_ATTRIBUTE,\n AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE,\n AI_TOOL_CALL_ARGS_ATTRIBUTE,\n AI_TOOL_CALL_ID_ATTRIBUTE,\n AI_TOOL_CALL_NAME_ATTRIBUTE,\n AI_TOOL_CALL_RESULT_ATTRIBUTE,\n AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE,\n AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX,\n AI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n AI_USAGE_TOKENS_ATTRIBUTE,\n AI_VALUES_ATTRIBUTE,\n OPERATION_NAME_ATTRIBUTE,\n} from './vercel-ai-attributes';\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span: Span): void {\n const { data: attributes, description: name } = spanToJSON(span);\n\n if (!name) {\n return;\n }\n\n // Tool call spans\n // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n if (attributes[AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n processToolCallSpan(span, attributes);\n return;\n }\n\n // V6+ Check if this is a Vercel AI span by checking if the operation ID attribute is present.\n // V5+ Check if this is a Vercel AI span by name pattern.\n if (!attributes[AI_OPERATION_ID_ATTRIBUTE] && !name.startsWith('ai.')) {\n return;\n }\n\n const client = getClient();\n const integration = client?.getIntegrationByName('VercelAI') as\n | { options?: { enableTruncation?: boolean } }\n | undefined;\n const enableTruncation = shouldEnableTruncation(integration?.options?.enableTruncation);\n\n processGenerateSpan(span, name, attributes, enableTruncation);\n}\n\nfunction vercelAiEventProcessor(event: Event): Event {\n if (event.type === 'transaction' && event.spans) {\n // Map to accumulate token data by parent span ID\n const tokenAccumulator: Map<string, TokenSummary> = new Map();\n\n // First pass: process all spans and accumulate token data\n for (const span of event.spans) {\n processEndedVercelAiSpan(span);\n\n // Accumulate token data for parent spans\n accumulateTokensForParent(span, tokenAccumulator);\n }\n\n // Second pass: apply tool descriptions and accumulated tokens\n applyToolDescriptionsAndTokens(event.spans, tokenAccumulator);\n\n // Also apply to root when it is the invoke_agent pipeline\n const trace = event.contexts?.trace;\n if (trace?.op === 'gen_ai.invoke_agent') {\n applyAccumulatedTokens(trace, tokenAccumulator);\n }\n }\n\n return event;\n}\n\n/**\n * Tool call structure from Vercel AI SDK\n * Note: V5/V6 use 'input' for arguments, V4 and earlier use 'args'\n */\ninterface VercelToolCall {\n toolCallId: string;\n toolName: string;\n input?: Record<string, unknown> | string; // V5/V6\n args?: string; // V4 and earlier\n}\n\n/**\n * Normalize finish reason to match OpenTelemetry semantic conventions.\n * Valid values: \"stop\", \"length\", \"content_filter\", \"tool_call\", \"error\"\n *\n * Vercel AI SDK uses \"tool-calls\" (plural, with hyphen) which we map to \"tool_call\".\n */\nfunction normalizeFinishReason(finishReason: unknown): string {\n if (typeof finishReason !== 'string') {\n return 'stop';\n }\n\n // Map Vercel AI SDK finish reasons to OpenTelemetry semantic convention values\n switch (finishReason) {\n case 'tool-calls':\n return 'tool_call';\n case 'stop':\n case 'length':\n case 'content_filter':\n case 'error':\n return finishReason;\n default:\n // For unknown values, return as-is (schema allows arbitrary strings)\n return finishReason;\n }\n}\n\n/**\n * Build gen_ai.output.messages from ai.response.text and/or ai.response.toolCalls\n *\n * Format follows OpenTelemetry semantic conventions:\n * [{\"role\": \"assistant\", \"parts\": [...], \"finish_reason\": \"stop\"}]\n *\n * Parts can be:\n * - {\"type\": \"text\", \"content\": \"...\"}\n * - {\"type\": \"tool_call\", \"id\": \"...\", \"name\": \"...\", \"arguments\": \"...\"}\n */\nfunction buildOutputMessages(attributes: Record<string, unknown>): void {\n const responseText = attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n const responseToolCalls = attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON_ATTRIBUTE];\n\n // Skip if neither text nor tool calls are present\n if (responseText == null && responseToolCalls == null) {\n return;\n }\n\n const parts: Array<Record<string, unknown>> = [];\n\n // Add text part if present\n if (typeof responseText === 'string' && responseText.length > 0) {\n parts.push({\n type: 'text',\n content: responseText,\n });\n }\n\n // Add tool call parts if present\n if (responseToolCalls != null) {\n try {\n // Tool calls can be a string (JSON) or already parsed array\n const toolCalls: VercelToolCall[] =\n typeof responseToolCalls === 'string' ? JSON.parse(responseToolCalls) : responseToolCalls;\n\n if (Array.isArray(toolCalls)) {\n for (const toolCall of toolCalls) {\n // V5/V6 use 'input', V4 and earlier use 'args'\n const args = toolCall.input ?? toolCall.args;\n parts.push({\n type: 'tool_call',\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n // Handle undefined args: JSON.stringify(undefined) returns undefined, not a string,\n // which would cause the property to be omitted from the final JSON output\n arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),\n });\n }\n // Only delete tool calls attribute if we successfully processed them\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n }\n } catch {\n // Ignore parsing errors - tool calls attribute is preserved\n }\n }\n\n // Only set output messages and delete text attribute if we have parts\n if (parts.length > 0) {\n const outputMessage = {\n role: 'assistant',\n parts,\n finish_reason: normalizeFinishReason(finishReason),\n };\n\n attributes[GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE] = JSON.stringify([outputMessage]);\n\n // Remove the text attribute since it's now captured in gen_ai.output.messages\n // Note: tool calls attribute is deleted above only if successfully parsed\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n }\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\n/**\n * Rename and normalize Vercel AI SDK attributes to OpenTelemetry semantic conventions.\n * This is the shared attribute processing logic used by both the legacy event processor\n * path (SpanJSON) and the streamed span path (StreamedSpanJSON).\n */\nexport function processVercelAiSpanAttributes(attributes: Record<string, unknown>): void {\n renameAttributeKey(attributes, AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE);\n\n // Parent spans (ai.streamText, ai.streamObject, etc.) use inputTokens/outputTokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, 'ai.usage.inputTokens', GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, 'ai.usage.outputTokens', GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n\n // Embedding spans use ai.usage.tokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, AI_USAGE_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n // AI SDK uses avgOutputTokensPerSecond, map to our expected attribute name\n renameAttributeKey(attributes, 'ai.response.avgOutputTokensPerSecond', 'ai.response.avgCompletionTokensPerSecond');\n\n // v6 input tokens are cache-inclusive (marked by the presence of `inputTokenDetails.*`); only\n // older SDKs need the cached tokens added back.\n const inputTokensAreCacheInclusive = Object.keys(attributes).some(key =>\n key.startsWith(AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX),\n );\n if (\n !inputTokensAreCacheInclusive &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number' &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE] === 'number'\n ) {\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] =\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] + attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE];\n }\n\n // Compute total tokens from input + output (embeddings may only have input tokens)\n if (typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number') {\n const outputTokens =\n typeof attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number'\n ? attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]\n : 0;\n attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = outputTokens + attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n }\n\n // Convert the available tools array to a JSON string\n if (attributes[AI_PROMPT_TOOLS_ATTRIBUTE] && Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])) {\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] = convertAvailableToolsToJsonString(\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[],\n );\n }\n\n // Rename AI SDK attributes to standardized gen_ai attributes\n // Map operation.name to OpenTelemetry semantic convention values\n if (attributes[OPERATION_NAME_ATTRIBUTE]) {\n // V6+ sets ai.operationId to the bare operation (e.g. \"ai.streamText\") while\n // operation.name appends functionId (e.g. \"ai.streamText myAgent\").\n // When ai.operationId is present, use it for correct mapping.\n const rawOperationName = attributes[AI_OPERATION_ID_ATTRIBUTE]\n ? (attributes[AI_OPERATION_ID_ATTRIBUTE] as string)\n : (attributes[OPERATION_NAME_ATTRIBUTE] as string);\n const operationName = SPAN_TO_OPERATION_NAME.get(rawOperationName) ?? rawOperationName;\n attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] = operationName;\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[OPERATION_NAME_ATTRIBUTE];\n }\n renameAttributeKey(attributes, AI_PROMPT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE);\n\n // Build gen_ai.output.messages from response text and/or tool calls\n // Note: buildOutputMessages also removes the source attributes when output is successfully generated\n buildOutputMessages(attributes);\n\n renameAttributeKey(attributes, AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n renameAttributeKey(attributes, AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n renameAttributeKey(attributes, AI_TOOL_CALL_ARGS_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_RESULT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE);\n\n renameAttributeKey(attributes, AI_SCHEMA_ATTRIBUTE, 'gen_ai.request.schema');\n renameAttributeKey(attributes, AI_MODEL_ID_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE);\n\n // Map embedding input: ai.values → gen_ai.embeddings.input\n // Vercel AI SDK JSON-stringifies each value individually, so we parse each element back.\n // Single embed gets unwrapped to a plain value; batch embedMany stays as a JSON array.\n if (Array.isArray(attributes[AI_VALUES_ATTRIBUTE])) {\n const parsed = (attributes[AI_VALUES_ATTRIBUTE] as string[]).map(v => {\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n });\n attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = parsed.length === 1 ? parsed[0] : JSON.stringify(parsed);\n }\n\n addProviderMetadataToAttributes(attributes);\n\n for (const key of Object.keys(attributes)) {\n // JSON-stringify any array-valued attributes so they survive v2 span serialization.\n // Can be removed once span streaming supports arrays natively.\n if (Array.isArray(attributes[key])) {\n attributes[key] = JSON.stringify(attributes[key]);\n }\n // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n if (key.startsWith('ai.')) {\n renameAttributeKey(attributes, key, `vercel.${key}`);\n }\n }\n}\n\nfunction processEndedVercelAiSpan(span: SpanJSON): void {\n const { data: attributes, origin } = span;\n\n if (origin !== 'auto.vercelai.otel') {\n return;\n }\n\n // The Vercel AI SDK sets span status to raw error message strings.\n // Any such value should be normalized to a SpanStatusType value. We pick internal_error as it is the most generic.\n if (span.status && span.status !== 'ok') {\n span.status = 'internal_error';\n }\n\n processVercelAiSpanAttributes(attributes);\n}\n\nfunction processVercelAiStreamedSpan(span: StreamedSpanJSON): void {\n const attributes = span.attributes;\n if (attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] !== 'auto.vercelai.otel') {\n return;\n }\n\n processVercelAiSpanAttributes(attributes);\n\n // Look up tool description from the toolDescriptionMap for execute_tool spans\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'gen_ai.execute_tool' && span.parent_span_id) {\n const descriptions = toolDescriptionMap.get(span.parent_span_id);\n\n if (descriptions) {\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (typeof toolName === 'string') {\n const desc = descriptions.get(toolName);\n if (desc) {\n attributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = desc;\n }\n }\n }\n }\n\n // Clean up tool descriptions when the parent span ends\n toolDescriptionMap.delete(span.span_id);\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes: Record<string, unknown>, oldKey: string, newKey: string): void {\n if (attributes[oldKey] != null) {\n attributes[newKey] = attributes[oldKey];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[oldKey];\n }\n}\n\nfunction processToolCallSpan(span: Span, attributes: SpanAttributes): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n span.setAttribute(GEN_AI_OPERATION_NAME_ATTRIBUTE, 'execute_tool');\n renameAttributeKey(attributes, AI_TOOL_CALL_NAME_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE);\n\n // Store the span context in our global map using the tool call ID.\n // This allows us to capture tool errors and link them to the correct span\n // without retaining the full Span object in memory.\n const toolCallId = attributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE];\n\n if (typeof toolCallId === 'string') {\n toolCallSpanContextMap.set(toolCallId, span.spanContext());\n }\n\n // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n if (!attributes[GEN_AI_TOOL_TYPE_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_TOOL_TYPE_ATTRIBUTE, 'function');\n }\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (toolName) {\n span.updateName(`execute_tool ${toolName}`);\n }\n}\n\nfunction processGenerateSpan(span: Span, name: string, attributes: SpanAttributes, enableTruncation: boolean): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n\n const nameWthoutAi = name.replace('ai.', '');\n span.setAttribute('ai.pipeline.name', nameWthoutAi);\n span.updateName(nameWthoutAi);\n\n const functionId = attributes[AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n if (functionId && typeof functionId === 'string') {\n span.setAttribute('gen_ai.function_id', functionId);\n }\n\n requestMessagesFromPrompt(span, attributes, enableTruncation);\n\n if (attributes[AI_MODEL_ID_ATTRIBUTE] && !attributes[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[AI_MODEL_ID_ATTRIBUTE]);\n }\n span.setAttribute('ai.streaming', name.includes('stream'));\n\n // Set the op based on the operation name registry\n const operationName = SPAN_TO_OPERATION_NAME.get(name);\n if (operationName) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, `gen_ai.${operationName}`);\n } else if (name.startsWith('ai.stream')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n }\n\n // For invoke_agent pipeline spans, use 'invoke_agent' as the description\n // to be consistent with other AI integrations (e.g. LangGraph)\n if (operationName === 'invoke_agent') {\n if (functionId && typeof functionId === 'string') {\n span.updateName(`invoke_agent ${functionId}`);\n } else {\n span.updateName('invoke_agent');\n }\n return;\n }\n\n const modelId = attributes[AI_MODEL_ID_ATTRIBUTE];\n if (modelId && operationName) {\n span.updateName(`${operationName} ${modelId}`);\n }\n\n // Store tool descriptions in the toolDescriptionMap so processSpan can apply them to execute_tool spans.\n // This is only needed for span streaming (transaction path handles this separately)\n const client = getClient();\n if (\n client &&\n hasSpanStreamingEnabled(client) &&\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] &&\n Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])\n ) {\n const descriptions = new Map<string, string>();\n\n // parse tool names and descriptions from tool string array\n for (const toolStr of attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[]) {\n try {\n const parsed = (typeof toolStr === 'string' ? JSON.parse(toolStr) : toolStr) as {\n name?: string;\n description?: string;\n };\n if (parsed?.name && parsed?.description) {\n descriptions.set(parsed.name, parsed.description);\n }\n } catch {\n // ignore parse errors\n }\n }\n if (descriptions.size > 0) {\n // Tool call spans are siblings of doGenerate (both children of invoke_agent),\n // so we key by the parent span ID (the invoke_agent span).\n const parentSpanId = spanToJSON(span).parent_span_id;\n if (parentSpanId) {\n toolDescriptionMap.set(parentSpanId, descriptions);\n }\n }\n }\n}\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n */\nexport function addVercelAiProcessors(client: Client): void {\n client.on('spanStart', onVercelAiSpanStart);\n // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n client.on('processSpan', span => {\n processVercelAiStreamedSpan(span);\n });\n}\n\nfunction addProviderMetadataToAttributes(attributes: Record<string, unknown>): void {\n const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] as string | undefined;\n if (providerMetadata) {\n try {\n const providerMetadataObject = JSON.parse(providerMetadata) as ProviderMetadata;\n\n // Handle OpenAI metadata (v5 uses 'openai', v6 Azure Responses API uses 'azure')\n const openaiMetadata: OpenAiProviderMetadata | undefined =\n providerMetadataObject.openai ?? providerMetadataObject.azure;\n if (openaiMetadata) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n openaiMetadata.cachedPromptTokens,\n );\n setAttributeIfDefined(attributes, 'gen_ai.usage.output_tokens.reasoning', openaiMetadata.reasoningTokens);\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_accepted',\n openaiMetadata.acceptedPredictionTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_rejected',\n openaiMetadata.rejectedPredictionTokens,\n );\n if (!attributes['gen_ai.conversation.id']) {\n setAttributeIfDefined(attributes, 'gen_ai.conversation.id', openaiMetadata.responseId);\n }\n }\n\n if (providerMetadataObject.anthropic) {\n const cachedInputTokens =\n providerMetadataObject.anthropic.usage?.cache_read_input_tokens ??\n providerMetadataObject.anthropic.cacheReadInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);\n\n const cacheWriteInputTokens =\n providerMetadataObject.anthropic.usage?.cache_creation_input_tokens ??\n providerMetadataObject.anthropic.cacheCreationInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);\n }\n\n if (providerMetadataObject.bedrock?.usage) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n providerMetadataObject.bedrock.usage.cacheReadInputTokens,\n );\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n providerMetadataObject.bedrock.usage.cacheWriteInputTokens,\n );\n }\n\n if (providerMetadataObject.deepseek) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n providerMetadataObject.deepseek.promptCacheHitTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.input_tokens.cache_miss',\n providerMetadataObject.deepseek.promptCacheMissTokens,\n );\n }\n } catch {\n // Ignore\n }\n }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(\n attributes: Record<string, unknown>,\n key: string,\n value: SpanAttributeValue | undefined,\n): void {\n if (value != null) {\n attributes[key] = value;\n }\n}\n"],"names":["spanToJSON","AI_TOOL_CALL_NAME_ATTRIBUTE","AI_TOOL_CALL_ID_ATTRIBUTE","AI_OPERATION_ID_ATTRIBUTE","getClient","shouldEnableTruncation","accumulateTokensForParent","applyToolDescriptionsAndTokens","applyAccumulatedTokens","AI_RESPONSE_TEXT_ATTRIBUTE","AI_RESPONSE_TOOL_CALLS_ATTRIBUTE","AI_RESPONSE_FINISH_REASON_ATTRIBUTE","GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE","AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE","GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE","AI_USAGE_PROMPT_TOKENS_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE","AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE","AI_USAGE_TOKENS_ATTRIBUTE","AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX","GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE","AI_PROMPT_TOOLS_ATTRIBUTE","convertAvailableToolsToJsonString","OPERATION_NAME_ATTRIBUTE","SPAN_TO_OPERATION_NAME","GEN_AI_OPERATION_NAME_ATTRIBUTE","AI_PROMPT_MESSAGES_ATTRIBUTE","GEN_AI_INPUT_MESSAGES_ATTRIBUTE","AI_RESPONSE_OBJECT_ATTRIBUTE","AI_TOOL_CALL_ARGS_ATTRIBUTE","GEN_AI_TOOL_INPUT_ATTRIBUTE","AI_TOOL_CALL_RESULT_ATTRIBUTE","GEN_AI_TOOL_OUTPUT_ATTRIBUTE","AI_SCHEMA_ATTRIBUTE","AI_MODEL_ID_ATTRIBUTE","GEN_AI_REQUEST_MODEL_ATTRIBUTE","AI_VALUES_ATTRIBUTE","GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","toolDescriptionMap","GEN_AI_TOOL_NAME_ATTRIBUTE","GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE","GEN_AI_TOOL_CALL_ID_ATTRIBUTE","toolCallSpanContextMap","GEN_AI_TOOL_TYPE_ATTRIBUTE","AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE","requestMessagesFromPrompt","GEN_AI_RESPONSE_MODEL_ATTRIBUTE","hasSpanStreamingEnabled","AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE"],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../../../../src/tracing/vercel-ai/index.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { shouldEnableTruncation } from '../ai/utils';\nimport type { Event } from '../../types/event';\nimport type { Span, SpanAttributes, SpanAttributeValue, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { spanToJSON } from '../../utils/spanUtils';\nimport {\n GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_OPERATION_NAME_ATTRIBUTE,\n GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n GEN_AI_TOOL_INPUT_ATTRIBUTE,\n GEN_AI_TOOL_NAME_ATTRIBUTE,\n GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n GEN_AI_TOOL_TYPE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { SPAN_TO_OPERATION_NAME, toolCallSpanContextMap, toolDescriptionMap } from './constants';\nimport type { TokenSummary } from './types';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport {\n accumulateTokensForParent,\n applyAccumulatedTokens,\n applyToolDescriptionsAndTokens,\n convertAvailableToolsToJsonString,\n requestMessagesFromPrompt,\n} from './utils';\nimport type { OpenAiProviderMetadata, ProviderMetadata } from './vercel-ai-attributes';\nimport {\n AI_MODEL_ID_ATTRIBUTE,\n AI_OPERATION_ID_ATTRIBUTE,\n AI_PROMPT_MESSAGES_ATTRIBUTE,\n AI_PROMPT_TOOLS_ATTRIBUTE,\n AI_RESPONSE_FINISH_REASON_ATTRIBUTE,\n AI_RESPONSE_OBJECT_ATTRIBUTE,\n AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE,\n AI_RESPONSE_TEXT_ATTRIBUTE,\n AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n AI_SCHEMA_ATTRIBUTE,\n AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE,\n AI_TOOL_CALL_ARGS_ATTRIBUTE,\n AI_TOOL_CALL_ID_ATTRIBUTE,\n AI_TOOL_CALL_NAME_ATTRIBUTE,\n AI_TOOL_CALL_RESULT_ATTRIBUTE,\n AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE,\n AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX,\n AI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n AI_USAGE_TOKENS_ATTRIBUTE,\n AI_VALUES_ATTRIBUTE,\n OPERATION_NAME_ATTRIBUTE,\n} from './vercel-ai-attributes';\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span: Span): void {\n const { data: attributes, description: name } = spanToJSON(span);\n\n if (!name) {\n return;\n }\n\n // Tool call spans\n // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n if (attributes[AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n processToolCallSpan(span, attributes);\n return;\n }\n\n // V6+ Check if this is a Vercel AI span by checking if the operation ID attribute is present.\n // V5+ Check if this is a Vercel AI span by name pattern.\n if (!attributes[AI_OPERATION_ID_ATTRIBUTE] && !name.startsWith('ai.')) {\n return;\n }\n\n const client = getClient();\n const integration = client?.getIntegrationByName('VercelAI') as\n | { options?: { enableTruncation?: boolean } }\n | undefined;\n const enableTruncation = shouldEnableTruncation(integration?.options?.enableTruncation);\n\n processGenerateSpan(span, name, attributes, enableTruncation);\n}\n\nfunction vercelAiEventProcessor(event: Event): Event {\n if (event.type === 'transaction' && event.spans) {\n // Map to accumulate token data by parent span ID\n const tokenAccumulator: Map<string, TokenSummary> = new Map();\n\n // First pass: process all spans and accumulate token data\n for (const span of event.spans) {\n processEndedVercelAiSpan(span);\n\n // Accumulate token data for parent spans\n accumulateTokensForParent(span, tokenAccumulator);\n }\n\n // Second pass: apply tool descriptions and accumulated tokens\n applyToolDescriptionsAndTokens(event.spans, tokenAccumulator);\n\n // Also apply to root when it is the invoke_agent pipeline\n const trace = event.contexts?.trace;\n if (trace?.op === 'gen_ai.invoke_agent') {\n applyAccumulatedTokens(trace, tokenAccumulator);\n }\n }\n\n return event;\n}\n\n/**\n * Tool call structure from Vercel AI SDK\n * Note: V5/V6 use 'input' for arguments, V4 and earlier use 'args'\n */\ninterface VercelToolCall {\n toolCallId: string;\n toolName: string;\n input?: Record<string, unknown> | string; // V5/V6\n args?: string; // V4 and earlier\n}\n\n/**\n * Normalize finish reason to match OpenTelemetry semantic conventions.\n * Valid values: \"stop\", \"length\", \"content_filter\", \"tool_call\", \"error\"\n *\n * Vercel AI SDK uses \"tool-calls\" (plural, with hyphen) which we map to \"tool_call\".\n */\nfunction normalizeFinishReason(finishReason: unknown): string {\n if (typeof finishReason !== 'string') {\n return 'stop';\n }\n\n // Map Vercel AI SDK finish reasons to OpenTelemetry semantic convention values\n switch (finishReason) {\n case 'tool-calls':\n return 'tool_call';\n case 'stop':\n case 'length':\n case 'content_filter':\n case 'error':\n return finishReason;\n default:\n // For unknown values, return as-is (schema allows arbitrary strings)\n return finishReason;\n }\n}\n\n/**\n * Build gen_ai.output.messages from ai.response.text and/or ai.response.toolCalls\n *\n * Format follows OpenTelemetry semantic conventions:\n * [{\"role\": \"assistant\", \"parts\": [...], \"finish_reason\": \"stop\"}]\n *\n * Parts can be:\n * - {\"type\": \"text\", \"content\": \"...\"}\n * - {\"type\": \"tool_call\", \"id\": \"...\", \"name\": \"...\", \"arguments\": \"...\"}\n */\nfunction buildOutputMessages(attributes: Record<string, unknown>): void {\n const responseText = attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n const responseToolCalls = attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON_ATTRIBUTE];\n\n // Skip if neither text nor tool calls are present\n if (responseText == null && responseToolCalls == null) {\n return;\n }\n\n const parts: Array<Record<string, unknown>> = [];\n\n // Add text part if present\n if (typeof responseText === 'string' && responseText.length > 0) {\n parts.push({\n type: 'text',\n content: responseText,\n });\n }\n\n // Add tool call parts if present\n if (responseToolCalls != null) {\n try {\n // Tool calls can be a string (JSON) or already parsed array\n const toolCalls: VercelToolCall[] =\n typeof responseToolCalls === 'string' ? JSON.parse(responseToolCalls) : responseToolCalls;\n\n if (Array.isArray(toolCalls)) {\n for (const toolCall of toolCalls) {\n // V5/V6 use 'input', V4 and earlier use 'args'\n const args = toolCall.input ?? toolCall.args;\n parts.push({\n type: 'tool_call',\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n // Handle undefined args: JSON.stringify(undefined) returns undefined, not a string,\n // which would cause the property to be omitted from the final JSON output\n arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),\n });\n }\n // Only delete tool calls attribute if we successfully processed them\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n }\n } catch {\n // Ignore parsing errors - tool calls attribute is preserved\n }\n }\n\n // Only set output messages and delete text attribute if we have parts\n if (parts.length > 0) {\n const outputMessage = {\n role: 'assistant',\n parts,\n finish_reason: normalizeFinishReason(finishReason),\n };\n\n attributes[GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE] = JSON.stringify([outputMessage]);\n\n // Remove the text attribute since it's now captured in gen_ai.output.messages\n // Note: tool calls attribute is deleted above only if successfully parsed\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n }\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\n/**\n * Rename and normalize Vercel AI SDK attributes to OpenTelemetry semantic conventions.\n * This is the shared attribute processing logic used by both the legacy event processor\n * path (SpanJSON) and the streamed span path (StreamedSpanJSON).\n */\nexport function processVercelAiSpanAttributes(attributes: Record<string, unknown>): void {\n renameAttributeKey(attributes, AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE);\n\n // Parent spans (ai.streamText, ai.streamObject, etc.) use inputTokens/outputTokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, 'ai.usage.inputTokens', GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, 'ai.usage.outputTokens', GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n\n // Embedding spans use ai.usage.tokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, AI_USAGE_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n // AI SDK uses avgOutputTokensPerSecond, map to our expected attribute name\n renameAttributeKey(attributes, 'ai.response.avgOutputTokensPerSecond', 'ai.response.avgCompletionTokensPerSecond');\n\n // v6 input tokens are cache-inclusive (marked by the presence of `inputTokenDetails.*`); only\n // older SDKs need the cached tokens added back.\n const inputTokensAreCacheInclusive = Object.keys(attributes).some(key =>\n key.startsWith(AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX),\n );\n if (\n !inputTokensAreCacheInclusive &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number' &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE] === 'number'\n ) {\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] =\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] + attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE];\n }\n\n // Compute total tokens from input + output (embeddings may only have input tokens)\n if (typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number') {\n const outputTokens =\n typeof attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number'\n ? attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]\n : 0;\n attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = outputTokens + attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n }\n\n // Convert the available tools array to a JSON string\n if (attributes[AI_PROMPT_TOOLS_ATTRIBUTE] && Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])) {\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] = convertAvailableToolsToJsonString(\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[],\n );\n }\n\n // Rename AI SDK attributes to standardized gen_ai attributes\n // Map operation.name to OpenTelemetry semantic convention values\n if (attributes[OPERATION_NAME_ATTRIBUTE]) {\n // V6+ sets ai.operationId to the bare operation (e.g. \"ai.streamText\") while\n // operation.name appends functionId (e.g. \"ai.streamText myAgent\").\n // When ai.operationId is present, use it for correct mapping.\n const rawOperationName = attributes[AI_OPERATION_ID_ATTRIBUTE]\n ? (attributes[AI_OPERATION_ID_ATTRIBUTE] as string)\n : (attributes[OPERATION_NAME_ATTRIBUTE] as string);\n const operationName = SPAN_TO_OPERATION_NAME.get(rawOperationName) ?? rawOperationName;\n attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] = operationName;\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[OPERATION_NAME_ATTRIBUTE];\n }\n renameAttributeKey(attributes, AI_PROMPT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE);\n\n // Build gen_ai.output.messages from response text and/or tool calls\n // Note: buildOutputMessages also removes the source attributes when output is successfully generated\n buildOutputMessages(attributes);\n\n renameAttributeKey(attributes, AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n renameAttributeKey(attributes, AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n renameAttributeKey(attributes, AI_TOOL_CALL_ARGS_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_RESULT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE);\n\n renameAttributeKey(attributes, AI_SCHEMA_ATTRIBUTE, 'gen_ai.request.schema');\n renameAttributeKey(attributes, AI_MODEL_ID_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE);\n\n // Map embedding input: ai.values → gen_ai.embeddings.input\n // Vercel AI SDK JSON-stringifies each value individually, so we parse each element back.\n // Single embed gets unwrapped to a plain value; batch embedMany stays as a JSON array.\n if (Array.isArray(attributes[AI_VALUES_ATTRIBUTE])) {\n const parsed = (attributes[AI_VALUES_ATTRIBUTE] as string[]).map(v => {\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n });\n attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = parsed.length === 1 ? parsed[0] : JSON.stringify(parsed);\n }\n\n addProviderMetadataToAttributes(attributes);\n\n for (const key of Object.keys(attributes)) {\n // JSON-stringify any array-valued attributes so they survive v2 span serialization.\n // Can be removed once span streaming supports arrays natively.\n if (Array.isArray(attributes[key])) {\n attributes[key] = JSON.stringify(attributes[key]);\n }\n // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n if (key.startsWith('ai.')) {\n renameAttributeKey(attributes, key, `vercel.${key}`);\n }\n }\n}\n\nfunction processEndedVercelAiSpan(span: SpanJSON): void {\n const { data: attributes, origin } = span;\n\n if (origin !== 'auto.vercelai.otel') {\n return;\n }\n\n // The Vercel AI SDK sets span status to raw error message strings.\n // Any such value should be normalized to a SpanStatusType value. We pick internal_error as it is the most generic.\n if (span.status && span.status !== 'ok') {\n span.status = 'internal_error';\n }\n\n processVercelAiSpanAttributes(attributes);\n}\n\nfunction processVercelAiStreamedSpan(span: StreamedSpanJSON): void {\n const attributes = span.attributes;\n if (attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] !== 'auto.vercelai.otel') {\n return;\n }\n\n processVercelAiSpanAttributes(attributes);\n\n // Look up tool description from the toolDescriptionMap for execute_tool spans\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'gen_ai.execute_tool' && span.parent_span_id) {\n const descriptions = toolDescriptionMap.get(span.parent_span_id);\n\n if (descriptions) {\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (typeof toolName === 'string') {\n const desc = descriptions.get(toolName);\n if (desc) {\n attributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = desc;\n }\n }\n }\n }\n\n // Clean up tool descriptions when the parent span ends\n toolDescriptionMap.delete(span.span_id);\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes: Record<string, unknown>, oldKey: string, newKey: string): void {\n if (attributes[oldKey] != null) {\n attributes[newKey] = attributes[oldKey];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[oldKey];\n }\n}\n\nfunction processToolCallSpan(span: Span, attributes: SpanAttributes): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n span.setAttribute(GEN_AI_OPERATION_NAME_ATTRIBUTE, 'execute_tool');\n renameAttributeKey(attributes, AI_TOOL_CALL_NAME_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE);\n\n // Store the span context in our global map using the tool call ID.\n // This allows us to capture tool errors and link them to the correct span\n // without retaining the full Span object in memory.\n const toolCallId = attributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE];\n\n if (typeof toolCallId === 'string') {\n toolCallSpanContextMap.set(toolCallId, span.spanContext());\n }\n\n // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n if (!attributes[GEN_AI_TOOL_TYPE_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_TOOL_TYPE_ATTRIBUTE, 'function');\n }\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (toolName) {\n span.updateName(`execute_tool ${toolName}`);\n }\n}\n\nfunction processGenerateSpan(span: Span, name: string, attributes: SpanAttributes, enableTruncation: boolean): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n\n const nameWthoutAi = name.replace('ai.', '');\n span.setAttribute('ai.pipeline.name', nameWthoutAi);\n span.updateName(nameWthoutAi);\n\n const functionId = attributes[AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n if (functionId && typeof functionId === 'string') {\n span.setAttribute('gen_ai.function_id', functionId);\n }\n\n requestMessagesFromPrompt(span, attributes, enableTruncation);\n\n if (attributes[AI_MODEL_ID_ATTRIBUTE] && !attributes[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[AI_MODEL_ID_ATTRIBUTE]);\n }\n span.setAttribute('ai.streaming', name.includes('stream'));\n\n // Set the op based on the operation name registry\n const operationName = SPAN_TO_OPERATION_NAME.get(name);\n if (operationName) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, `gen_ai.${operationName}`);\n } else if (name.startsWith('ai.stream')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n }\n\n // For invoke_agent pipeline spans, use 'invoke_agent' as the description\n // to be consistent with other AI integrations (e.g. LangGraph)\n if (operationName === 'invoke_agent') {\n if (functionId && typeof functionId === 'string') {\n span.updateName(`invoke_agent ${functionId}`);\n } else {\n span.updateName('invoke_agent');\n }\n return;\n }\n\n const modelId = attributes[AI_MODEL_ID_ATTRIBUTE];\n if (modelId && operationName) {\n span.updateName(`${operationName} ${modelId}`);\n }\n\n // Store tool descriptions in the toolDescriptionMap so processSpan can apply them to execute_tool spans.\n // This is only needed for span streaming (transaction path handles this separately)\n const client = getClient();\n if (\n client &&\n hasSpanStreamingEnabled(client) &&\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] &&\n Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])\n ) {\n const descriptions = new Map<string, string>();\n\n // parse tool names and descriptions from tool string array\n for (const toolStr of attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[]) {\n try {\n const parsed = (typeof toolStr === 'string' ? JSON.parse(toolStr) : toolStr) as {\n name?: string;\n description?: string;\n };\n if (parsed?.name && parsed?.description) {\n descriptions.set(parsed.name, parsed.description);\n }\n } catch {\n // ignore parse errors\n }\n }\n if (descriptions.size > 0) {\n // Tool call spans are siblings of doGenerate (both children of invoke_agent),\n // so we key by the parent span ID (the invoke_agent span).\n const parentSpanId = spanToJSON(span).parent_span_id;\n if (parentSpanId) {\n toolDescriptionMap.set(parentSpanId, descriptions);\n }\n }\n }\n}\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n */\nexport function addVercelAiProcessors(client: Client): void {\n client.on('spanStart', onVercelAiSpanStart);\n // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n client.on('processSpan', span => {\n processVercelAiStreamedSpan(span);\n });\n}\n\n/**\n * Derive the `gen_ai.usage.*` cache/reasoning/prediction token attributes and `gen_ai.conversation.id`\n * from an AI SDK `providerMetadata` object.\n *\n * Shared between the OTel processor (which parses `providerMetadata` from a serialized span attribute)\n * and the `ai` >= 7 tracing-channel subscriber (which receives it as an object on the channel result),\n * so both paths emit an identical shape. Pass the already-parsed object; unknown/empty input yields `{}`.\n */\nexport function getProviderMetadataAttributes(providerMetadata: unknown): Record<string, number | string> {\n const attributes: Record<string, number | string> = {};\n\n if (!providerMetadata || typeof providerMetadata !== 'object') {\n return attributes;\n }\n const metadata = providerMetadata as ProviderMetadata;\n\n // OpenAI (v5 uses 'openai', v6 Azure Responses API uses 'azure')\n const openaiMetadata: OpenAiProviderMetadata | undefined = metadata.openai ?? metadata.azure;\n if (openaiMetadata) {\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, openaiMetadata.cachedPromptTokens);\n setAttributeIfDefined(attributes, 'gen_ai.usage.output_tokens.reasoning', openaiMetadata.reasoningTokens);\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_accepted',\n openaiMetadata.acceptedPredictionTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_rejected',\n openaiMetadata.rejectedPredictionTokens,\n );\n setAttributeIfDefined(attributes, GEN_AI_CONVERSATION_ID_ATTRIBUTE, openaiMetadata.responseId);\n }\n\n if (metadata.anthropic) {\n const cachedInputTokens =\n metadata.anthropic.usage?.cache_read_input_tokens ?? metadata.anthropic.cacheReadInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);\n\n const cacheWriteInputTokens =\n metadata.anthropic.usage?.cache_creation_input_tokens ?? metadata.anthropic.cacheCreationInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);\n }\n\n if (metadata.bedrock?.usage) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n metadata.bedrock.usage.cacheReadInputTokens,\n );\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n metadata.bedrock.usage.cacheWriteInputTokens,\n );\n }\n\n if (metadata.deepseek) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n metadata.deepseek.promptCacheHitTokens,\n );\n setAttributeIfDefined(attributes, 'gen_ai.usage.input_tokens.cache_miss', metadata.deepseek.promptCacheMissTokens);\n }\n\n return attributes;\n}\n\nfunction addProviderMetadataToAttributes(attributes: Record<string, unknown>): void {\n const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] as string | undefined;\n if (!providerMetadata) {\n return;\n }\n try {\n const derived = getProviderMetadataAttributes(JSON.parse(providerMetadata) as ProviderMetadata);\n for (const [key, value] of Object.entries(derived)) {\n // Preserve the original behaviour of not overwriting an already-set conversation id.\n if (key === GEN_AI_CONVERSATION_ID_ATTRIBUTE && attributes[key]) {\n continue;\n }\n attributes[key] = value;\n }\n } catch {\n // Ignore\n }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(\n attributes: Record<string, unknown>,\n key: string,\n value: SpanAttributeValue | undefined,\n): void {\n if (value != null) {\n attributes[key] = value;\n }\n}\n"],"names":["spanToJSON","AI_TOOL_CALL_NAME_ATTRIBUTE","AI_TOOL_CALL_ID_ATTRIBUTE","AI_OPERATION_ID_ATTRIBUTE","getClient","shouldEnableTruncation","accumulateTokensForParent","applyToolDescriptionsAndTokens","applyAccumulatedTokens","AI_RESPONSE_TEXT_ATTRIBUTE","AI_RESPONSE_TOOL_CALLS_ATTRIBUTE","AI_RESPONSE_FINISH_REASON_ATTRIBUTE","GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE","AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE","GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE","AI_USAGE_PROMPT_TOKENS_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE","AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE","AI_USAGE_TOKENS_ATTRIBUTE","AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX","GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE","AI_PROMPT_TOOLS_ATTRIBUTE","convertAvailableToolsToJsonString","OPERATION_NAME_ATTRIBUTE","SPAN_TO_OPERATION_NAME","GEN_AI_OPERATION_NAME_ATTRIBUTE","AI_PROMPT_MESSAGES_ATTRIBUTE","GEN_AI_INPUT_MESSAGES_ATTRIBUTE","AI_RESPONSE_OBJECT_ATTRIBUTE","AI_TOOL_CALL_ARGS_ATTRIBUTE","GEN_AI_TOOL_INPUT_ATTRIBUTE","AI_TOOL_CALL_RESULT_ATTRIBUTE","GEN_AI_TOOL_OUTPUT_ATTRIBUTE","AI_SCHEMA_ATTRIBUTE","AI_MODEL_ID_ATTRIBUTE","GEN_AI_REQUEST_MODEL_ATTRIBUTE","AI_VALUES_ATTRIBUTE","GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","toolDescriptionMap","GEN_AI_TOOL_NAME_ATTRIBUTE","GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE","GEN_AI_TOOL_CALL_ID_ATTRIBUTE","toolCallSpanContextMap","GEN_AI_TOOL_TYPE_ATTRIBUTE","AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE","requestMessagesFromPrompt","GEN_AI_RESPONSE_MODEL_ATTRIBUTE","hasSpanStreamingEnabled","GEN_AI_CONVERSATION_ID_ATTRIBUTE","GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE","AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE"],"mappings":"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"}
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const SDK_VERSION = "10.61.0" ;
const SDK_VERSION = "10.62.0" ;
exports.SDK_VERSION = SDK_VERSION;
//# sourceMappingURL=version.js.map

@@ -58,3 +58,3 @@ export { registerSpanErrorInstrumentation } from './tracing/errors.js';

export { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants.js';
export { SPAN_KIND } from './spanKind.js';
export { SPAN_KIND, spanKindToName } from './spanKind.js';
export { addBreadcrumb } from './breadcrumbs.js';

@@ -88,3 +88,5 @@ export { functionToStringIntegration } from './integrations/functiontostring.js';

export { createConsolaReporter } from './integrations/consola.js';
export { addVercelAiProcessors } from './tracing/vercel-ai/index.js';
export { addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai/index.js';
export { getTruncatedJsonString, shouldEnableTruncation } from './tracing/ai/utils.js';
export { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE } from './tracing/ai/gen-ai-attributes.js';
export { _INTERNAL_cleanupToolCallSpanContext, _INTERNAL_getSpanContextForToolCallId } from './tracing/vercel-ai/utils.js';

@@ -91,0 +93,0 @@ export { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -58,3 +58,3 @@ export { registerSpanErrorInstrumentation } from './tracing/errors.js';

export { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants.js';
export { SPAN_KIND } from './spanKind.js';
export { SPAN_KIND, spanKindToName } from './spanKind.js';
export { addBreadcrumb } from './breadcrumbs.js';

@@ -88,3 +88,5 @@ export { functionToStringIntegration } from './integrations/functiontostring.js';

export { createConsolaReporter } from './integrations/consola.js';
export { addVercelAiProcessors } from './tracing/vercel-ai/index.js';
export { addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai/index.js';
export { getTruncatedJsonString, shouldEnableTruncation } from './tracing/ai/utils.js';
export { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE } from './tracing/ai/gen-ai-attributes.js';
export { _INTERNAL_cleanupToolCallSpanContext, _INTERNAL_getSpanContextForToolCallId } from './tracing/vercel-ai/utils.js';

@@ -91,0 +93,0 @@ export { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -1,1 +0,1 @@

{"type":"module","version":"10.61.0","sideEffects":false}
{"type":"module","version":"10.62.0","sideEffects":false}

@@ -58,3 +58,3 @@ export { registerSpanErrorInstrumentation } from './tracing/errors.js';

export { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants.js';
export { SPAN_KIND } from './spanKind.js';
export { SPAN_KIND, spanKindToName } from './spanKind.js';
export { addBreadcrumb } from './breadcrumbs.js';

@@ -88,3 +88,5 @@ export { functionToStringIntegration } from './integrations/functiontostring.js';

export { createConsolaReporter } from './integrations/consola.js';
export { addVercelAiProcessors } from './tracing/vercel-ai/index.js';
export { addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai/index.js';
export { getTruncatedJsonString, shouldEnableTruncation } from './tracing/ai/utils.js';
export { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE } from './tracing/ai/gen-ai-attributes.js';
export { _INTERNAL_cleanupToolCallSpanContext, _INTERNAL_getSpanContextForToolCallId } from './tracing/vercel-ai/utils.js';

@@ -91,0 +93,0 @@ export { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

@@ -8,4 +8,14 @@ const SPAN_KIND = {

};
const SPAN_KIND_NAME = {
[SPAN_KIND.INTERNAL]: "INTERNAL",
[SPAN_KIND.SERVER]: "SERVER",
[SPAN_KIND.CLIENT]: "CLIENT",
[SPAN_KIND.PRODUCER]: "PRODUCER",
[SPAN_KIND.CONSUMER]: "CONSUMER"
};
function spanKindToName(kind) {
return SPAN_KIND_NAME[kind];
}
export { SPAN_KIND };
export { SPAN_KIND, spanKindToName };
//# sourceMappingURL=spanKind.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"spanKind.js","sources":["../../src/spanKind.ts"],"sourcesContent":["/**\n * The kind of a span, mirroring OpenTelemetry's `SpanKind` enum values.\n *\n * Exported as a plain const object so SDK code can set a span's kind without\n * importing `@opentelemetry/api` just for the enum. The numeric values must\n * stay in sync with OpenTelemetry's `SpanKind` since they are passed through to\n * the underlying OTel span and sampler.\n */\nexport const SPAN_KIND = {\n INTERNAL: 0,\n SERVER: 1,\n CLIENT: 2,\n PRODUCER: 3,\n CONSUMER: 4,\n} as const;\n\nexport type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];\n"],"names":[],"mappings":"AAQO,MAAM,SAAA,GAAY;AAAA,EACvB,QAAA,EAAU,CAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU;AACZ;;;;"}
{"version":3,"file":"spanKind.js","sources":["../../src/spanKind.ts"],"sourcesContent":["/**\n * The kind of a span, mirroring OpenTelemetry's `SpanKind` enum values.\n *\n * Exported as a plain const object so SDK code can set a span's kind without\n * importing `@opentelemetry/api` just for the enum. The numeric values must\n * stay in sync with OpenTelemetry's `SpanKind` since they are passed through to\n * the underlying OTel span and sampler.\n */\nexport const SPAN_KIND = {\n INTERNAL: 0,\n SERVER: 1,\n CLIENT: 2,\n PRODUCER: 3,\n CONSUMER: 4,\n} as const;\n\nexport type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];\n\n// Reverse of SPAN_KIND (value → name), for the `otel.kind` attribute. The numeric keys come from\n// SPAN_KIND so they stay in sync; `satisfies` ensures every kind has a name.\nconst SPAN_KIND_NAME = {\n [SPAN_KIND.INTERNAL]: 'INTERNAL',\n [SPAN_KIND.SERVER]: 'SERVER',\n [SPAN_KIND.CLIENT]: 'CLIENT',\n [SPAN_KIND.PRODUCER]: 'PRODUCER',\n [SPAN_KIND.CONSUMER]: 'CONSUMER',\n} as const satisfies Record<SpanKindValue, string>;\n\n/**\n * Resolve the string name of a span kind value (e.g. `1` → `'SERVER'`), mirroring the reverse\n * mapping of OpenTelemetry's `SpanKind` enum. Used for the `otel.kind` span attribute, so SDK\n * code doesn't need to import `@opentelemetry/api` just for that reverse lookup.\n */\nexport function spanKindToName(kind: number): (typeof SPAN_KIND_NAME)[SpanKindValue] | undefined {\n return SPAN_KIND_NAME[kind as SpanKindValue];\n}\n"],"names":[],"mappings":"AAQO,MAAM,SAAA,GAAY;AAAA,EACvB,QAAA,EAAU,CAAA;AAAA,EACV,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU;AACZ;AAMA,MAAM,cAAA,GAAiB;AAAA,EACrB,CAAC,SAAA,CAAU,QAAQ,GAAG,UAAA;AAAA,EACtB,CAAC,SAAA,CAAU,MAAM,GAAG,QAAA;AAAA,EACpB,CAAC,SAAA,CAAU,MAAM,GAAG,QAAA;AAAA,EACpB,CAAC,SAAA,CAAU,QAAQ,GAAG,UAAA;AAAA,EACtB,CAAC,SAAA,CAAU,QAAQ,GAAG;AACxB,CAAA;AAOO,SAAS,eAAe,IAAA,EAAkE;AAC/F,EAAA,OAAO,eAAe,IAAqB,CAAA;AAC7C;;;;"}

@@ -5,3 +5,3 @@ import { getClient } from '../../currentScopes.js';

import { spanToJSON } from '../../utils/spanUtils.js';
import { GEN_AI_TOOL_NAME_ATTRIBUTE, GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE, GEN_AI_OPERATION_NAME_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_TYPE_ATTRIBUTE, GEN_AI_RESPONSE_MODEL_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE, GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE, GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE } from '../ai/gen-ai-attributes.js';
import { GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, GEN_AI_CONVERSATION_ID_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE, GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE, GEN_AI_OPERATION_NAME_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_TYPE_ATTRIBUTE, GEN_AI_RESPONSE_MODEL_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE, GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE, GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE } from '../ai/gen-ai-attributes.js';
import { toolDescriptionMap, toolCallSpanContextMap, SPAN_TO_OPERATION_NAME } from './constants.js';

@@ -274,61 +274,66 @@ import { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled.js';

}
function getProviderMetadataAttributes(providerMetadata) {
const attributes = {};
if (!providerMetadata || typeof providerMetadata !== "object") {
return attributes;
}
const metadata = providerMetadata;
const openaiMetadata = metadata.openai ?? metadata.azure;
if (openaiMetadata) {
setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, openaiMetadata.cachedPromptTokens);
setAttributeIfDefined(attributes, "gen_ai.usage.output_tokens.reasoning", openaiMetadata.reasoningTokens);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_accepted",
openaiMetadata.acceptedPredictionTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_rejected",
openaiMetadata.rejectedPredictionTokens
);
setAttributeIfDefined(attributes, GEN_AI_CONVERSATION_ID_ATTRIBUTE, openaiMetadata.responseId);
}
if (metadata.anthropic) {
const cachedInputTokens = metadata.anthropic.usage?.cache_read_input_tokens ?? metadata.anthropic.cacheReadInputTokens;
setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);
const cacheWriteInputTokens = metadata.anthropic.usage?.cache_creation_input_tokens ?? metadata.anthropic.cacheCreationInputTokens;
setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);
}
if (metadata.bedrock?.usage) {
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
metadata.bedrock.usage.cacheReadInputTokens
);
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,
metadata.bedrock.usage.cacheWriteInputTokens
);
}
if (metadata.deepseek) {
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
metadata.deepseek.promptCacheHitTokens
);
setAttributeIfDefined(attributes, "gen_ai.usage.input_tokens.cache_miss", metadata.deepseek.promptCacheMissTokens);
}
return attributes;
}
function addProviderMetadataToAttributes(attributes) {
const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE];
if (providerMetadata) {
try {
const providerMetadataObject = JSON.parse(providerMetadata);
const openaiMetadata = providerMetadataObject.openai ?? providerMetadataObject.azure;
if (openaiMetadata) {
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
openaiMetadata.cachedPromptTokens
);
setAttributeIfDefined(attributes, "gen_ai.usage.output_tokens.reasoning", openaiMetadata.reasoningTokens);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_accepted",
openaiMetadata.acceptedPredictionTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.output_tokens.prediction_rejected",
openaiMetadata.rejectedPredictionTokens
);
if (!attributes["gen_ai.conversation.id"]) {
setAttributeIfDefined(attributes, "gen_ai.conversation.id", openaiMetadata.responseId);
}
if (!providerMetadata) {
return;
}
try {
const derived = getProviderMetadataAttributes(JSON.parse(providerMetadata));
for (const [key, value] of Object.entries(derived)) {
if (key === GEN_AI_CONVERSATION_ID_ATTRIBUTE && attributes[key]) {
continue;
}
if (providerMetadataObject.anthropic) {
const cachedInputTokens = providerMetadataObject.anthropic.usage?.cache_read_input_tokens ?? providerMetadataObject.anthropic.cacheReadInputTokens;
setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);
const cacheWriteInputTokens = providerMetadataObject.anthropic.usage?.cache_creation_input_tokens ?? providerMetadataObject.anthropic.cacheCreationInputTokens;
setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);
}
if (providerMetadataObject.bedrock?.usage) {
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
providerMetadataObject.bedrock.usage.cacheReadInputTokens
);
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,
providerMetadataObject.bedrock.usage.cacheWriteInputTokens
);
}
if (providerMetadataObject.deepseek) {
setAttributeIfDefined(
attributes,
GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,
providerMetadataObject.deepseek.promptCacheHitTokens
);
setAttributeIfDefined(
attributes,
"gen_ai.usage.input_tokens.cache_miss",
providerMetadataObject.deepseek.promptCacheMissTokens
);
}
} catch {
attributes[key] = value;
}
} catch {
}

@@ -342,3 +347,3 @@ }

export { addVercelAiProcessors, processVercelAiSpanAttributes };
export { addVercelAiProcessors, getProviderMetadataAttributes, processVercelAiSpanAttributes };
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../../../../src/tracing/vercel-ai/index.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { shouldEnableTruncation } from '../ai/utils';\nimport type { Event } from '../../types/event';\nimport type { Span, SpanAttributes, SpanAttributeValue, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { spanToJSON } from '../../utils/spanUtils';\nimport {\n GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_OPERATION_NAME_ATTRIBUTE,\n GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n GEN_AI_TOOL_INPUT_ATTRIBUTE,\n GEN_AI_TOOL_NAME_ATTRIBUTE,\n GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n GEN_AI_TOOL_TYPE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { SPAN_TO_OPERATION_NAME, toolCallSpanContextMap, toolDescriptionMap } from './constants';\nimport type { TokenSummary } from './types';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport {\n accumulateTokensForParent,\n applyAccumulatedTokens,\n applyToolDescriptionsAndTokens,\n convertAvailableToolsToJsonString,\n requestMessagesFromPrompt,\n} from './utils';\nimport type { OpenAiProviderMetadata, ProviderMetadata } from './vercel-ai-attributes';\nimport {\n AI_MODEL_ID_ATTRIBUTE,\n AI_OPERATION_ID_ATTRIBUTE,\n AI_PROMPT_MESSAGES_ATTRIBUTE,\n AI_PROMPT_TOOLS_ATTRIBUTE,\n AI_RESPONSE_FINISH_REASON_ATTRIBUTE,\n AI_RESPONSE_OBJECT_ATTRIBUTE,\n AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE,\n AI_RESPONSE_TEXT_ATTRIBUTE,\n AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n AI_SCHEMA_ATTRIBUTE,\n AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE,\n AI_TOOL_CALL_ARGS_ATTRIBUTE,\n AI_TOOL_CALL_ID_ATTRIBUTE,\n AI_TOOL_CALL_NAME_ATTRIBUTE,\n AI_TOOL_CALL_RESULT_ATTRIBUTE,\n AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE,\n AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX,\n AI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n AI_USAGE_TOKENS_ATTRIBUTE,\n AI_VALUES_ATTRIBUTE,\n OPERATION_NAME_ATTRIBUTE,\n} from './vercel-ai-attributes';\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span: Span): void {\n const { data: attributes, description: name } = spanToJSON(span);\n\n if (!name) {\n return;\n }\n\n // Tool call spans\n // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n if (attributes[AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n processToolCallSpan(span, attributes);\n return;\n }\n\n // V6+ Check if this is a Vercel AI span by checking if the operation ID attribute is present.\n // V5+ Check if this is a Vercel AI span by name pattern.\n if (!attributes[AI_OPERATION_ID_ATTRIBUTE] && !name.startsWith('ai.')) {\n return;\n }\n\n const client = getClient();\n const integration = client?.getIntegrationByName('VercelAI') as\n | { options?: { enableTruncation?: boolean } }\n | undefined;\n const enableTruncation = shouldEnableTruncation(integration?.options?.enableTruncation);\n\n processGenerateSpan(span, name, attributes, enableTruncation);\n}\n\nfunction vercelAiEventProcessor(event: Event): Event {\n if (event.type === 'transaction' && event.spans) {\n // Map to accumulate token data by parent span ID\n const tokenAccumulator: Map<string, TokenSummary> = new Map();\n\n // First pass: process all spans and accumulate token data\n for (const span of event.spans) {\n processEndedVercelAiSpan(span);\n\n // Accumulate token data for parent spans\n accumulateTokensForParent(span, tokenAccumulator);\n }\n\n // Second pass: apply tool descriptions and accumulated tokens\n applyToolDescriptionsAndTokens(event.spans, tokenAccumulator);\n\n // Also apply to root when it is the invoke_agent pipeline\n const trace = event.contexts?.trace;\n if (trace?.op === 'gen_ai.invoke_agent') {\n applyAccumulatedTokens(trace, tokenAccumulator);\n }\n }\n\n return event;\n}\n\n/**\n * Tool call structure from Vercel AI SDK\n * Note: V5/V6 use 'input' for arguments, V4 and earlier use 'args'\n */\ninterface VercelToolCall {\n toolCallId: string;\n toolName: string;\n input?: Record<string, unknown> | string; // V5/V6\n args?: string; // V4 and earlier\n}\n\n/**\n * Normalize finish reason to match OpenTelemetry semantic conventions.\n * Valid values: \"stop\", \"length\", \"content_filter\", \"tool_call\", \"error\"\n *\n * Vercel AI SDK uses \"tool-calls\" (plural, with hyphen) which we map to \"tool_call\".\n */\nfunction normalizeFinishReason(finishReason: unknown): string {\n if (typeof finishReason !== 'string') {\n return 'stop';\n }\n\n // Map Vercel AI SDK finish reasons to OpenTelemetry semantic convention values\n switch (finishReason) {\n case 'tool-calls':\n return 'tool_call';\n case 'stop':\n case 'length':\n case 'content_filter':\n case 'error':\n return finishReason;\n default:\n // For unknown values, return as-is (schema allows arbitrary strings)\n return finishReason;\n }\n}\n\n/**\n * Build gen_ai.output.messages from ai.response.text and/or ai.response.toolCalls\n *\n * Format follows OpenTelemetry semantic conventions:\n * [{\"role\": \"assistant\", \"parts\": [...], \"finish_reason\": \"stop\"}]\n *\n * Parts can be:\n * - {\"type\": \"text\", \"content\": \"...\"}\n * - {\"type\": \"tool_call\", \"id\": \"...\", \"name\": \"...\", \"arguments\": \"...\"}\n */\nfunction buildOutputMessages(attributes: Record<string, unknown>): void {\n const responseText = attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n const responseToolCalls = attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON_ATTRIBUTE];\n\n // Skip if neither text nor tool calls are present\n if (responseText == null && responseToolCalls == null) {\n return;\n }\n\n const parts: Array<Record<string, unknown>> = [];\n\n // Add text part if present\n if (typeof responseText === 'string' && responseText.length > 0) {\n parts.push({\n type: 'text',\n content: responseText,\n });\n }\n\n // Add tool call parts if present\n if (responseToolCalls != null) {\n try {\n // Tool calls can be a string (JSON) or already parsed array\n const toolCalls: VercelToolCall[] =\n typeof responseToolCalls === 'string' ? JSON.parse(responseToolCalls) : responseToolCalls;\n\n if (Array.isArray(toolCalls)) {\n for (const toolCall of toolCalls) {\n // V5/V6 use 'input', V4 and earlier use 'args'\n const args = toolCall.input ?? toolCall.args;\n parts.push({\n type: 'tool_call',\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n // Handle undefined args: JSON.stringify(undefined) returns undefined, not a string,\n // which would cause the property to be omitted from the final JSON output\n arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),\n });\n }\n // Only delete tool calls attribute if we successfully processed them\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n }\n } catch {\n // Ignore parsing errors - tool calls attribute is preserved\n }\n }\n\n // Only set output messages and delete text attribute if we have parts\n if (parts.length > 0) {\n const outputMessage = {\n role: 'assistant',\n parts,\n finish_reason: normalizeFinishReason(finishReason),\n };\n\n attributes[GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE] = JSON.stringify([outputMessage]);\n\n // Remove the text attribute since it's now captured in gen_ai.output.messages\n // Note: tool calls attribute is deleted above only if successfully parsed\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n }\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\n/**\n * Rename and normalize Vercel AI SDK attributes to OpenTelemetry semantic conventions.\n * This is the shared attribute processing logic used by both the legacy event processor\n * path (SpanJSON) and the streamed span path (StreamedSpanJSON).\n */\nexport function processVercelAiSpanAttributes(attributes: Record<string, unknown>): void {\n renameAttributeKey(attributes, AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE);\n\n // Parent spans (ai.streamText, ai.streamObject, etc.) use inputTokens/outputTokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, 'ai.usage.inputTokens', GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, 'ai.usage.outputTokens', GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n\n // Embedding spans use ai.usage.tokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, AI_USAGE_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n // AI SDK uses avgOutputTokensPerSecond, map to our expected attribute name\n renameAttributeKey(attributes, 'ai.response.avgOutputTokensPerSecond', 'ai.response.avgCompletionTokensPerSecond');\n\n // v6 input tokens are cache-inclusive (marked by the presence of `inputTokenDetails.*`); only\n // older SDKs need the cached tokens added back.\n const inputTokensAreCacheInclusive = Object.keys(attributes).some(key =>\n key.startsWith(AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX),\n );\n if (\n !inputTokensAreCacheInclusive &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number' &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE] === 'number'\n ) {\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] =\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] + attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE];\n }\n\n // Compute total tokens from input + output (embeddings may only have input tokens)\n if (typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number') {\n const outputTokens =\n typeof attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number'\n ? attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]\n : 0;\n attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = outputTokens + attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n }\n\n // Convert the available tools array to a JSON string\n if (attributes[AI_PROMPT_TOOLS_ATTRIBUTE] && Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])) {\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] = convertAvailableToolsToJsonString(\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[],\n );\n }\n\n // Rename AI SDK attributes to standardized gen_ai attributes\n // Map operation.name to OpenTelemetry semantic convention values\n if (attributes[OPERATION_NAME_ATTRIBUTE]) {\n // V6+ sets ai.operationId to the bare operation (e.g. \"ai.streamText\") while\n // operation.name appends functionId (e.g. \"ai.streamText myAgent\").\n // When ai.operationId is present, use it for correct mapping.\n const rawOperationName = attributes[AI_OPERATION_ID_ATTRIBUTE]\n ? (attributes[AI_OPERATION_ID_ATTRIBUTE] as string)\n : (attributes[OPERATION_NAME_ATTRIBUTE] as string);\n const operationName = SPAN_TO_OPERATION_NAME.get(rawOperationName) ?? rawOperationName;\n attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] = operationName;\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[OPERATION_NAME_ATTRIBUTE];\n }\n renameAttributeKey(attributes, AI_PROMPT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE);\n\n // Build gen_ai.output.messages from response text and/or tool calls\n // Note: buildOutputMessages also removes the source attributes when output is successfully generated\n buildOutputMessages(attributes);\n\n renameAttributeKey(attributes, AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n renameAttributeKey(attributes, AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n renameAttributeKey(attributes, AI_TOOL_CALL_ARGS_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_RESULT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE);\n\n renameAttributeKey(attributes, AI_SCHEMA_ATTRIBUTE, 'gen_ai.request.schema');\n renameAttributeKey(attributes, AI_MODEL_ID_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE);\n\n // Map embedding input: ai.values → gen_ai.embeddings.input\n // Vercel AI SDK JSON-stringifies each value individually, so we parse each element back.\n // Single embed gets unwrapped to a plain value; batch embedMany stays as a JSON array.\n if (Array.isArray(attributes[AI_VALUES_ATTRIBUTE])) {\n const parsed = (attributes[AI_VALUES_ATTRIBUTE] as string[]).map(v => {\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n });\n attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = parsed.length === 1 ? parsed[0] : JSON.stringify(parsed);\n }\n\n addProviderMetadataToAttributes(attributes);\n\n for (const key of Object.keys(attributes)) {\n // JSON-stringify any array-valued attributes so they survive v2 span serialization.\n // Can be removed once span streaming supports arrays natively.\n if (Array.isArray(attributes[key])) {\n attributes[key] = JSON.stringify(attributes[key]);\n }\n // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n if (key.startsWith('ai.')) {\n renameAttributeKey(attributes, key, `vercel.${key}`);\n }\n }\n}\n\nfunction processEndedVercelAiSpan(span: SpanJSON): void {\n const { data: attributes, origin } = span;\n\n if (origin !== 'auto.vercelai.otel') {\n return;\n }\n\n // The Vercel AI SDK sets span status to raw error message strings.\n // Any such value should be normalized to a SpanStatusType value. We pick internal_error as it is the most generic.\n if (span.status && span.status !== 'ok') {\n span.status = 'internal_error';\n }\n\n processVercelAiSpanAttributes(attributes);\n}\n\nfunction processVercelAiStreamedSpan(span: StreamedSpanJSON): void {\n const attributes = span.attributes;\n if (attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] !== 'auto.vercelai.otel') {\n return;\n }\n\n processVercelAiSpanAttributes(attributes);\n\n // Look up tool description from the toolDescriptionMap for execute_tool spans\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'gen_ai.execute_tool' && span.parent_span_id) {\n const descriptions = toolDescriptionMap.get(span.parent_span_id);\n\n if (descriptions) {\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (typeof toolName === 'string') {\n const desc = descriptions.get(toolName);\n if (desc) {\n attributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = desc;\n }\n }\n }\n }\n\n // Clean up tool descriptions when the parent span ends\n toolDescriptionMap.delete(span.span_id);\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes: Record<string, unknown>, oldKey: string, newKey: string): void {\n if (attributes[oldKey] != null) {\n attributes[newKey] = attributes[oldKey];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[oldKey];\n }\n}\n\nfunction processToolCallSpan(span: Span, attributes: SpanAttributes): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n span.setAttribute(GEN_AI_OPERATION_NAME_ATTRIBUTE, 'execute_tool');\n renameAttributeKey(attributes, AI_TOOL_CALL_NAME_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE);\n\n // Store the span context in our global map using the tool call ID.\n // This allows us to capture tool errors and link them to the correct span\n // without retaining the full Span object in memory.\n const toolCallId = attributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE];\n\n if (typeof toolCallId === 'string') {\n toolCallSpanContextMap.set(toolCallId, span.spanContext());\n }\n\n // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n if (!attributes[GEN_AI_TOOL_TYPE_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_TOOL_TYPE_ATTRIBUTE, 'function');\n }\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (toolName) {\n span.updateName(`execute_tool ${toolName}`);\n }\n}\n\nfunction processGenerateSpan(span: Span, name: string, attributes: SpanAttributes, enableTruncation: boolean): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n\n const nameWthoutAi = name.replace('ai.', '');\n span.setAttribute('ai.pipeline.name', nameWthoutAi);\n span.updateName(nameWthoutAi);\n\n const functionId = attributes[AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n if (functionId && typeof functionId === 'string') {\n span.setAttribute('gen_ai.function_id', functionId);\n }\n\n requestMessagesFromPrompt(span, attributes, enableTruncation);\n\n if (attributes[AI_MODEL_ID_ATTRIBUTE] && !attributes[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[AI_MODEL_ID_ATTRIBUTE]);\n }\n span.setAttribute('ai.streaming', name.includes('stream'));\n\n // Set the op based on the operation name registry\n const operationName = SPAN_TO_OPERATION_NAME.get(name);\n if (operationName) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, `gen_ai.${operationName}`);\n } else if (name.startsWith('ai.stream')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n }\n\n // For invoke_agent pipeline spans, use 'invoke_agent' as the description\n // to be consistent with other AI integrations (e.g. LangGraph)\n if (operationName === 'invoke_agent') {\n if (functionId && typeof functionId === 'string') {\n span.updateName(`invoke_agent ${functionId}`);\n } else {\n span.updateName('invoke_agent');\n }\n return;\n }\n\n const modelId = attributes[AI_MODEL_ID_ATTRIBUTE];\n if (modelId && operationName) {\n span.updateName(`${operationName} ${modelId}`);\n }\n\n // Store tool descriptions in the toolDescriptionMap so processSpan can apply them to execute_tool spans.\n // This is only needed for span streaming (transaction path handles this separately)\n const client = getClient();\n if (\n client &&\n hasSpanStreamingEnabled(client) &&\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] &&\n Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])\n ) {\n const descriptions = new Map<string, string>();\n\n // parse tool names and descriptions from tool string array\n for (const toolStr of attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[]) {\n try {\n const parsed = (typeof toolStr === 'string' ? JSON.parse(toolStr) : toolStr) as {\n name?: string;\n description?: string;\n };\n if (parsed?.name && parsed?.description) {\n descriptions.set(parsed.name, parsed.description);\n }\n } catch {\n // ignore parse errors\n }\n }\n if (descriptions.size > 0) {\n // Tool call spans are siblings of doGenerate (both children of invoke_agent),\n // so we key by the parent span ID (the invoke_agent span).\n const parentSpanId = spanToJSON(span).parent_span_id;\n if (parentSpanId) {\n toolDescriptionMap.set(parentSpanId, descriptions);\n }\n }\n }\n}\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n */\nexport function addVercelAiProcessors(client: Client): void {\n client.on('spanStart', onVercelAiSpanStart);\n // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n client.on('processSpan', span => {\n processVercelAiStreamedSpan(span);\n });\n}\n\nfunction addProviderMetadataToAttributes(attributes: Record<string, unknown>): void {\n const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] as string | undefined;\n if (providerMetadata) {\n try {\n const providerMetadataObject = JSON.parse(providerMetadata) as ProviderMetadata;\n\n // Handle OpenAI metadata (v5 uses 'openai', v6 Azure Responses API uses 'azure')\n const openaiMetadata: OpenAiProviderMetadata | undefined =\n providerMetadataObject.openai ?? providerMetadataObject.azure;\n if (openaiMetadata) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n openaiMetadata.cachedPromptTokens,\n );\n setAttributeIfDefined(attributes, 'gen_ai.usage.output_tokens.reasoning', openaiMetadata.reasoningTokens);\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_accepted',\n openaiMetadata.acceptedPredictionTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_rejected',\n openaiMetadata.rejectedPredictionTokens,\n );\n if (!attributes['gen_ai.conversation.id']) {\n setAttributeIfDefined(attributes, 'gen_ai.conversation.id', openaiMetadata.responseId);\n }\n }\n\n if (providerMetadataObject.anthropic) {\n const cachedInputTokens =\n providerMetadataObject.anthropic.usage?.cache_read_input_tokens ??\n providerMetadataObject.anthropic.cacheReadInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);\n\n const cacheWriteInputTokens =\n providerMetadataObject.anthropic.usage?.cache_creation_input_tokens ??\n providerMetadataObject.anthropic.cacheCreationInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);\n }\n\n if (providerMetadataObject.bedrock?.usage) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n providerMetadataObject.bedrock.usage.cacheReadInputTokens,\n );\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n providerMetadataObject.bedrock.usage.cacheWriteInputTokens,\n );\n }\n\n if (providerMetadataObject.deepseek) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n providerMetadataObject.deepseek.promptCacheHitTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.input_tokens.cache_miss',\n providerMetadataObject.deepseek.promptCacheMissTokens,\n );\n }\n } catch {\n // Ignore\n }\n }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(\n attributes: Record<string, unknown>,\n key: string,\n value: SpanAttributeValue | undefined,\n): void {\n if (value != null) {\n attributes[key] = value;\n }\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../../../../src/tracing/vercel-ai/index.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { shouldEnableTruncation } from '../ai/utils';\nimport type { Event } from '../../types/event';\nimport type { Span, SpanAttributes, SpanAttributeValue, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { spanToJSON } from '../../utils/spanUtils';\nimport {\n GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_OPERATION_NAME_ATTRIBUTE,\n GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE,\n GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n GEN_AI_TOOL_INPUT_ATTRIBUTE,\n GEN_AI_TOOL_NAME_ATTRIBUTE,\n GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n GEN_AI_TOOL_TYPE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { SPAN_TO_OPERATION_NAME, toolCallSpanContextMap, toolDescriptionMap } from './constants';\nimport type { TokenSummary } from './types';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport {\n accumulateTokensForParent,\n applyAccumulatedTokens,\n applyToolDescriptionsAndTokens,\n convertAvailableToolsToJsonString,\n requestMessagesFromPrompt,\n} from './utils';\nimport type { OpenAiProviderMetadata, ProviderMetadata } from './vercel-ai-attributes';\nimport {\n AI_MODEL_ID_ATTRIBUTE,\n AI_OPERATION_ID_ATTRIBUTE,\n AI_PROMPT_MESSAGES_ATTRIBUTE,\n AI_PROMPT_TOOLS_ATTRIBUTE,\n AI_RESPONSE_FINISH_REASON_ATTRIBUTE,\n AI_RESPONSE_OBJECT_ATTRIBUTE,\n AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE,\n AI_RESPONSE_TEXT_ATTRIBUTE,\n AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n AI_SCHEMA_ATTRIBUTE,\n AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE,\n AI_TOOL_CALL_ARGS_ATTRIBUTE,\n AI_TOOL_CALL_ID_ATTRIBUTE,\n AI_TOOL_CALL_NAME_ATTRIBUTE,\n AI_TOOL_CALL_RESULT_ATTRIBUTE,\n AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE,\n AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX,\n AI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n AI_USAGE_TOKENS_ATTRIBUTE,\n AI_VALUES_ATTRIBUTE,\n OPERATION_NAME_ATTRIBUTE,\n} from './vercel-ai-attributes';\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span: Span): void {\n const { data: attributes, description: name } = spanToJSON(span);\n\n if (!name) {\n return;\n }\n\n // Tool call spans\n // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n if (attributes[AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n processToolCallSpan(span, attributes);\n return;\n }\n\n // V6+ Check if this is a Vercel AI span by checking if the operation ID attribute is present.\n // V5+ Check if this is a Vercel AI span by name pattern.\n if (!attributes[AI_OPERATION_ID_ATTRIBUTE] && !name.startsWith('ai.')) {\n return;\n }\n\n const client = getClient();\n const integration = client?.getIntegrationByName('VercelAI') as\n | { options?: { enableTruncation?: boolean } }\n | undefined;\n const enableTruncation = shouldEnableTruncation(integration?.options?.enableTruncation);\n\n processGenerateSpan(span, name, attributes, enableTruncation);\n}\n\nfunction vercelAiEventProcessor(event: Event): Event {\n if (event.type === 'transaction' && event.spans) {\n // Map to accumulate token data by parent span ID\n const tokenAccumulator: Map<string, TokenSummary> = new Map();\n\n // First pass: process all spans and accumulate token data\n for (const span of event.spans) {\n processEndedVercelAiSpan(span);\n\n // Accumulate token data for parent spans\n accumulateTokensForParent(span, tokenAccumulator);\n }\n\n // Second pass: apply tool descriptions and accumulated tokens\n applyToolDescriptionsAndTokens(event.spans, tokenAccumulator);\n\n // Also apply to root when it is the invoke_agent pipeline\n const trace = event.contexts?.trace;\n if (trace?.op === 'gen_ai.invoke_agent') {\n applyAccumulatedTokens(trace, tokenAccumulator);\n }\n }\n\n return event;\n}\n\n/**\n * Tool call structure from Vercel AI SDK\n * Note: V5/V6 use 'input' for arguments, V4 and earlier use 'args'\n */\ninterface VercelToolCall {\n toolCallId: string;\n toolName: string;\n input?: Record<string, unknown> | string; // V5/V6\n args?: string; // V4 and earlier\n}\n\n/**\n * Normalize finish reason to match OpenTelemetry semantic conventions.\n * Valid values: \"stop\", \"length\", \"content_filter\", \"tool_call\", \"error\"\n *\n * Vercel AI SDK uses \"tool-calls\" (plural, with hyphen) which we map to \"tool_call\".\n */\nfunction normalizeFinishReason(finishReason: unknown): string {\n if (typeof finishReason !== 'string') {\n return 'stop';\n }\n\n // Map Vercel AI SDK finish reasons to OpenTelemetry semantic convention values\n switch (finishReason) {\n case 'tool-calls':\n return 'tool_call';\n case 'stop':\n case 'length':\n case 'content_filter':\n case 'error':\n return finishReason;\n default:\n // For unknown values, return as-is (schema allows arbitrary strings)\n return finishReason;\n }\n}\n\n/**\n * Build gen_ai.output.messages from ai.response.text and/or ai.response.toolCalls\n *\n * Format follows OpenTelemetry semantic conventions:\n * [{\"role\": \"assistant\", \"parts\": [...], \"finish_reason\": \"stop\"}]\n *\n * Parts can be:\n * - {\"type\": \"text\", \"content\": \"...\"}\n * - {\"type\": \"tool_call\", \"id\": \"...\", \"name\": \"...\", \"arguments\": \"...\"}\n */\nfunction buildOutputMessages(attributes: Record<string, unknown>): void {\n const responseText = attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n const responseToolCalls = attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n const finishReason = attributes[AI_RESPONSE_FINISH_REASON_ATTRIBUTE];\n\n // Skip if neither text nor tool calls are present\n if (responseText == null && responseToolCalls == null) {\n return;\n }\n\n const parts: Array<Record<string, unknown>> = [];\n\n // Add text part if present\n if (typeof responseText === 'string' && responseText.length > 0) {\n parts.push({\n type: 'text',\n content: responseText,\n });\n }\n\n // Add tool call parts if present\n if (responseToolCalls != null) {\n try {\n // Tool calls can be a string (JSON) or already parsed array\n const toolCalls: VercelToolCall[] =\n typeof responseToolCalls === 'string' ? JSON.parse(responseToolCalls) : responseToolCalls;\n\n if (Array.isArray(toolCalls)) {\n for (const toolCall of toolCalls) {\n // V5/V6 use 'input', V4 and earlier use 'args'\n const args = toolCall.input ?? toolCall.args;\n parts.push({\n type: 'tool_call',\n id: toolCall.toolCallId,\n name: toolCall.toolName,\n // Handle undefined args: JSON.stringify(undefined) returns undefined, not a string,\n // which would cause the property to be omitted from the final JSON output\n arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),\n });\n }\n // Only delete tool calls attribute if we successfully processed them\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n }\n } catch {\n // Ignore parsing errors - tool calls attribute is preserved\n }\n }\n\n // Only set output messages and delete text attribute if we have parts\n if (parts.length > 0) {\n const outputMessage = {\n role: 'assistant',\n parts,\n finish_reason: normalizeFinishReason(finishReason),\n };\n\n attributes[GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE] = JSON.stringify([outputMessage]);\n\n // Remove the text attribute since it's now captured in gen_ai.output.messages\n // Note: tool calls attribute is deleted above only if successfully parsed\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n }\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\n/**\n * Rename and normalize Vercel AI SDK attributes to OpenTelemetry semantic conventions.\n * This is the shared attribute processing logic used by both the legacy event processor\n * path (SpanJSON) and the streamed span path (StreamedSpanJSON).\n */\nexport function processVercelAiSpanAttributes(attributes: Record<string, unknown>): void {\n renameAttributeKey(attributes, AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE);\n\n // Parent spans (ai.streamText, ai.streamObject, etc.) use inputTokens/outputTokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, 'ai.usage.inputTokens', GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n renameAttributeKey(attributes, 'ai.usage.outputTokens', GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n\n // Embedding spans use ai.usage.tokens instead of promptTokens/completionTokens\n renameAttributeKey(attributes, AI_USAGE_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n // AI SDK uses avgOutputTokensPerSecond, map to our expected attribute name\n renameAttributeKey(attributes, 'ai.response.avgOutputTokensPerSecond', 'ai.response.avgCompletionTokensPerSecond');\n\n // v6 input tokens are cache-inclusive (marked by the presence of `inputTokenDetails.*`); only\n // older SDKs need the cached tokens added back.\n const inputTokensAreCacheInclusive = Object.keys(attributes).some(key =>\n key.startsWith(AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX),\n );\n if (\n !inputTokensAreCacheInclusive &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number' &&\n typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE] === 'number'\n ) {\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] =\n attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] + attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE];\n }\n\n // Compute total tokens from input + output (embeddings may only have input tokens)\n if (typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number') {\n const outputTokens =\n typeof attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number'\n ? attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]\n : 0;\n attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = outputTokens + attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n }\n\n // Convert the available tools array to a JSON string\n if (attributes[AI_PROMPT_TOOLS_ATTRIBUTE] && Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])) {\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] = convertAvailableToolsToJsonString(\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[],\n );\n }\n\n // Rename AI SDK attributes to standardized gen_ai attributes\n // Map operation.name to OpenTelemetry semantic convention values\n if (attributes[OPERATION_NAME_ATTRIBUTE]) {\n // V6+ sets ai.operationId to the bare operation (e.g. \"ai.streamText\") while\n // operation.name appends functionId (e.g. \"ai.streamText myAgent\").\n // When ai.operationId is present, use it for correct mapping.\n const rawOperationName = attributes[AI_OPERATION_ID_ATTRIBUTE]\n ? (attributes[AI_OPERATION_ID_ATTRIBUTE] as string)\n : (attributes[OPERATION_NAME_ATTRIBUTE] as string);\n const operationName = SPAN_TO_OPERATION_NAME.get(rawOperationName) ?? rawOperationName;\n attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] = operationName;\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[OPERATION_NAME_ATTRIBUTE];\n }\n renameAttributeKey(attributes, AI_PROMPT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE);\n\n // Build gen_ai.output.messages from response text and/or tool calls\n // Note: buildOutputMessages also removes the source attributes when output is successfully generated\n buildOutputMessages(attributes);\n\n renameAttributeKey(attributes, AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n renameAttributeKey(attributes, AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n renameAttributeKey(attributes, AI_TOOL_CALL_ARGS_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_RESULT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE);\n\n renameAttributeKey(attributes, AI_SCHEMA_ATTRIBUTE, 'gen_ai.request.schema');\n renameAttributeKey(attributes, AI_MODEL_ID_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE);\n\n // Map embedding input: ai.values → gen_ai.embeddings.input\n // Vercel AI SDK JSON-stringifies each value individually, so we parse each element back.\n // Single embed gets unwrapped to a plain value; batch embedMany stays as a JSON array.\n if (Array.isArray(attributes[AI_VALUES_ATTRIBUTE])) {\n const parsed = (attributes[AI_VALUES_ATTRIBUTE] as string[]).map(v => {\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n });\n attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = parsed.length === 1 ? parsed[0] : JSON.stringify(parsed);\n }\n\n addProviderMetadataToAttributes(attributes);\n\n for (const key of Object.keys(attributes)) {\n // JSON-stringify any array-valued attributes so they survive v2 span serialization.\n // Can be removed once span streaming supports arrays natively.\n if (Array.isArray(attributes[key])) {\n attributes[key] = JSON.stringify(attributes[key]);\n }\n // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n if (key.startsWith('ai.')) {\n renameAttributeKey(attributes, key, `vercel.${key}`);\n }\n }\n}\n\nfunction processEndedVercelAiSpan(span: SpanJSON): void {\n const { data: attributes, origin } = span;\n\n if (origin !== 'auto.vercelai.otel') {\n return;\n }\n\n // The Vercel AI SDK sets span status to raw error message strings.\n // Any such value should be normalized to a SpanStatusType value. We pick internal_error as it is the most generic.\n if (span.status && span.status !== 'ok') {\n span.status = 'internal_error';\n }\n\n processVercelAiSpanAttributes(attributes);\n}\n\nfunction processVercelAiStreamedSpan(span: StreamedSpanJSON): void {\n const attributes = span.attributes;\n if (attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] !== 'auto.vercelai.otel') {\n return;\n }\n\n processVercelAiSpanAttributes(attributes);\n\n // Look up tool description from the toolDescriptionMap for execute_tool spans\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'gen_ai.execute_tool' && span.parent_span_id) {\n const descriptions = toolDescriptionMap.get(span.parent_span_id);\n\n if (descriptions) {\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (typeof toolName === 'string') {\n const desc = descriptions.get(toolName);\n if (desc) {\n attributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = desc;\n }\n }\n }\n }\n\n // Clean up tool descriptions when the parent span ends\n toolDescriptionMap.delete(span.span_id);\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes: Record<string, unknown>, oldKey: string, newKey: string): void {\n if (attributes[oldKey] != null) {\n attributes[newKey] = attributes[oldKey];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete attributes[oldKey];\n }\n}\n\nfunction processToolCallSpan(span: Span, attributes: SpanAttributes): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n span.setAttribute(GEN_AI_OPERATION_NAME_ATTRIBUTE, 'execute_tool');\n renameAttributeKey(attributes, AI_TOOL_CALL_NAME_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE);\n renameAttributeKey(attributes, AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE);\n\n // Store the span context in our global map using the tool call ID.\n // This allows us to capture tool errors and link them to the correct span\n // without retaining the full Span object in memory.\n const toolCallId = attributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE];\n\n if (typeof toolCallId === 'string') {\n toolCallSpanContextMap.set(toolCallId, span.spanContext());\n }\n\n // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n if (!attributes[GEN_AI_TOOL_TYPE_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_TOOL_TYPE_ATTRIBUTE, 'function');\n }\n const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n if (toolName) {\n span.updateName(`execute_tool ${toolName}`);\n }\n}\n\nfunction processGenerateSpan(span: Span, name: string, attributes: SpanAttributes, enableTruncation: boolean): void {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n\n const nameWthoutAi = name.replace('ai.', '');\n span.setAttribute('ai.pipeline.name', nameWthoutAi);\n span.updateName(nameWthoutAi);\n\n const functionId = attributes[AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n if (functionId && typeof functionId === 'string') {\n span.setAttribute('gen_ai.function_id', functionId);\n }\n\n requestMessagesFromPrompt(span, attributes, enableTruncation);\n\n if (attributes[AI_MODEL_ID_ATTRIBUTE] && !attributes[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[AI_MODEL_ID_ATTRIBUTE]);\n }\n span.setAttribute('ai.streaming', name.includes('stream'));\n\n // Set the op based on the operation name registry\n const operationName = SPAN_TO_OPERATION_NAME.get(name);\n if (operationName) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, `gen_ai.${operationName}`);\n } else if (name.startsWith('ai.stream')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n }\n\n // For invoke_agent pipeline spans, use 'invoke_agent' as the description\n // to be consistent with other AI integrations (e.g. LangGraph)\n if (operationName === 'invoke_agent') {\n if (functionId && typeof functionId === 'string') {\n span.updateName(`invoke_agent ${functionId}`);\n } else {\n span.updateName('invoke_agent');\n }\n return;\n }\n\n const modelId = attributes[AI_MODEL_ID_ATTRIBUTE];\n if (modelId && operationName) {\n span.updateName(`${operationName} ${modelId}`);\n }\n\n // Store tool descriptions in the toolDescriptionMap so processSpan can apply them to execute_tool spans.\n // This is only needed for span streaming (transaction path handles this separately)\n const client = getClient();\n if (\n client &&\n hasSpanStreamingEnabled(client) &&\n attributes[AI_PROMPT_TOOLS_ATTRIBUTE] &&\n Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])\n ) {\n const descriptions = new Map<string, string>();\n\n // parse tool names and descriptions from tool string array\n for (const toolStr of attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[]) {\n try {\n const parsed = (typeof toolStr === 'string' ? JSON.parse(toolStr) : toolStr) as {\n name?: string;\n description?: string;\n };\n if (parsed?.name && parsed?.description) {\n descriptions.set(parsed.name, parsed.description);\n }\n } catch {\n // ignore parse errors\n }\n }\n if (descriptions.size > 0) {\n // Tool call spans are siblings of doGenerate (both children of invoke_agent),\n // so we key by the parent span ID (the invoke_agent span).\n const parentSpanId = spanToJSON(span).parent_span_id;\n if (parentSpanId) {\n toolDescriptionMap.set(parentSpanId, descriptions);\n }\n }\n }\n}\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n */\nexport function addVercelAiProcessors(client: Client): void {\n client.on('spanStart', onVercelAiSpanStart);\n // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n client.on('processSpan', span => {\n processVercelAiStreamedSpan(span);\n });\n}\n\n/**\n * Derive the `gen_ai.usage.*` cache/reasoning/prediction token attributes and `gen_ai.conversation.id`\n * from an AI SDK `providerMetadata` object.\n *\n * Shared between the OTel processor (which parses `providerMetadata` from a serialized span attribute)\n * and the `ai` >= 7 tracing-channel subscriber (which receives it as an object on the channel result),\n * so both paths emit an identical shape. Pass the already-parsed object; unknown/empty input yields `{}`.\n */\nexport function getProviderMetadataAttributes(providerMetadata: unknown): Record<string, number | string> {\n const attributes: Record<string, number | string> = {};\n\n if (!providerMetadata || typeof providerMetadata !== 'object') {\n return attributes;\n }\n const metadata = providerMetadata as ProviderMetadata;\n\n // OpenAI (v5 uses 'openai', v6 Azure Responses API uses 'azure')\n const openaiMetadata: OpenAiProviderMetadata | undefined = metadata.openai ?? metadata.azure;\n if (openaiMetadata) {\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, openaiMetadata.cachedPromptTokens);\n setAttributeIfDefined(attributes, 'gen_ai.usage.output_tokens.reasoning', openaiMetadata.reasoningTokens);\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_accepted',\n openaiMetadata.acceptedPredictionTokens,\n );\n setAttributeIfDefined(\n attributes,\n 'gen_ai.usage.output_tokens.prediction_rejected',\n openaiMetadata.rejectedPredictionTokens,\n );\n setAttributeIfDefined(attributes, GEN_AI_CONVERSATION_ID_ATTRIBUTE, openaiMetadata.responseId);\n }\n\n if (metadata.anthropic) {\n const cachedInputTokens =\n metadata.anthropic.usage?.cache_read_input_tokens ?? metadata.anthropic.cacheReadInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);\n\n const cacheWriteInputTokens =\n metadata.anthropic.usage?.cache_creation_input_tokens ?? metadata.anthropic.cacheCreationInputTokens;\n setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);\n }\n\n if (metadata.bedrock?.usage) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n metadata.bedrock.usage.cacheReadInputTokens,\n );\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n metadata.bedrock.usage.cacheWriteInputTokens,\n );\n }\n\n if (metadata.deepseek) {\n setAttributeIfDefined(\n attributes,\n GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n metadata.deepseek.promptCacheHitTokens,\n );\n setAttributeIfDefined(attributes, 'gen_ai.usage.input_tokens.cache_miss', metadata.deepseek.promptCacheMissTokens);\n }\n\n return attributes;\n}\n\nfunction addProviderMetadataToAttributes(attributes: Record<string, unknown>): void {\n const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] as string | undefined;\n if (!providerMetadata) {\n return;\n }\n try {\n const derived = getProviderMetadataAttributes(JSON.parse(providerMetadata) as ProviderMetadata);\n for (const [key, value] of Object.entries(derived)) {\n // Preserve the original behaviour of not overwriting an already-set conversation id.\n if (key === GEN_AI_CONVERSATION_ID_ATTRIBUTE && attributes[key]) {\n continue;\n }\n attributes[key] = value;\n }\n } catch {\n // Ignore\n }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(\n attributes: Record<string, unknown>,\n key: string,\n value: SpanAttributeValue | undefined,\n): void {\n if (value != null) {\n attributes[key] = value;\n }\n}\n"],"names":[],"mappings":"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"}

@@ -1,4 +0,4 @@

const SDK_VERSION = "10.61.0" ;
const SDK_VERSION = "10.62.0" ;
export { SDK_VERSION };
//# sourceMappingURL=version.js.map

@@ -59,3 +59,3 @@ export { ClientClass as SentryCoreCurrentScopes } from './sdk';

export { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants';
export { SPAN_KIND } from './spanKind';
export { SPAN_KIND, spanKindToName } from './spanKind';
export { SpanKindValue } from './spanKind';

@@ -94,3 +94,5 @@ export { addBreadcrumb } from './breadcrumbs';

export { createConsolaReporter } from './integrations/consola';
export { addVercelAiProcessors } from './tracing/vercel-ai';
export { addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai';
export { getTruncatedJsonString, shouldEnableTruncation } from './tracing/ai/utils';
export { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, } from './tracing/ai/gen-ai-attributes';
export { _INTERNAL_getSpanContextForToolCallId, _INTERNAL_cleanupToolCallSpanContext } from './tracing/vercel-ai/utils';

@@ -97,0 +99,0 @@ export { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants';

@@ -17,2 +17,16 @@ /**

export type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];
declare const SPAN_KIND_NAME: {
readonly 0: "INTERNAL";
readonly 1: "SERVER";
readonly 2: "CLIENT";
readonly 3: "PRODUCER";
readonly 4: "CONSUMER";
};
/**
* Resolve the string name of a span kind value (e.g. `1` → `'SERVER'`), mirroring the reverse
* mapping of OpenTelemetry's `SpanKind` enum. Used for the `otel.kind` span attribute, so SDK
* code doesn't need to import `@opentelemetry/api` just for that reverse lookup.
*/
export declare function spanKindToName(kind: number): (typeof SPAN_KIND_NAME)[SpanKindValue] | undefined;
export {};
//# sourceMappingURL=spanKind.d.ts.map

@@ -15,2 +15,11 @@ import { Client } from '../../client';

export declare function addVercelAiProcessors(client: Client): void;
/**
* Derive the `gen_ai.usage.*` cache/reasoning/prediction token attributes and `gen_ai.conversation.id`
* from an AI SDK `providerMetadata` object.
*
* Shared between the OTel processor (which parses `providerMetadata` from a serialized span attribute)
* and the `ai` >= 7 tracing-channel subscriber (which receives it as an object on the channel result),
* so both paths emit an identical shape. Pass the already-parsed object; unknown/empty input yields `{}`.
*/
export declare function getProviderMetadataAttributes(providerMetadata: unknown): Record<string, number | string>;
//# sourceMappingURL=index.d.ts.map

@@ -62,3 +62,3 @@ /**

export { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants';
export { SPAN_KIND } from './spanKind';
export { SPAN_KIND, spanKindToName } from './spanKind';
export type { SpanKindValue } from './spanKind';

@@ -95,3 +95,5 @@ export { addBreadcrumb } from './breadcrumbs';

export { createConsolaReporter } from './integrations/consola';
export { addVercelAiProcessors } from './tracing/vercel-ai';
export { addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai';
export { getTruncatedJsonString, shouldEnableTruncation } from './tracing/ai/utils';
export { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, } from './tracing/ai/gen-ai-attributes';
export { _INTERNAL_getSpanContextForToolCallId, _INTERNAL_cleanupToolCallSpanContext } from './tracing/vercel-ai/utils';

@@ -98,0 +100,0 @@ export { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants';

@@ -1,1 +0,1 @@

{"version":3,"file":"shared-exports.d.ts","sourceRoot":"","sources":["../../src/shared-exports.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"shared-exports.d.ts","sourceRoot":"","sources":["../../src/shared-exports.ts"],"names":[],"mappings":"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"}

@@ -17,2 +17,16 @@ /**

export type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];
declare const SPAN_KIND_NAME: {
readonly 0: "INTERNAL";
readonly 1: "SERVER";
readonly 2: "CLIENT";
readonly 3: "PRODUCER";
readonly 4: "CONSUMER";
};
/**
* Resolve the string name of a span kind value (e.g. `1` → `'SERVER'`), mirroring the reverse
* mapping of OpenTelemetry's `SpanKind` enum. Used for the `otel.kind` span attribute, so SDK
* code doesn't need to import `@opentelemetry/api` just for that reverse lookup.
*/
export declare function spanKindToName(kind: number): (typeof SPAN_KIND_NAME)[SpanKindValue] | undefined;
export {};
//# sourceMappingURL=spanKind.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"spanKind.d.ts","sourceRoot":"","sources":["../../src/spanKind.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
{"version":3,"file":"spanKind.d.ts","sourceRoot":"","sources":["../../src/spanKind.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAIvE,QAAA,MAAM,cAAc;;;;;;CAM8B,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,CAE/F"}

@@ -15,2 +15,11 @@ import type { Client } from '../../client';

export declare function addVercelAiProcessors(client: Client): void;
/**
* Derive the `gen_ai.usage.*` cache/reasoning/prediction token attributes and `gen_ai.conversation.id`
* from an AI SDK `providerMetadata` object.
*
* Shared between the OTel processor (which parses `providerMetadata` from a serialized span attribute)
* and the `ai` >= 7 tracing-channel subscriber (which receives it as an object on the channel result),
* so both paths emit an identical shape. Pass the already-parsed object; unknown/empty input yields `{}`.
*/
export declare function getProviderMetadataAttributes(providerMetadata: unknown): Record<string, number | string>;
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tracing/vercel-ai/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA0O3C;;GAEG;AACH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAqGvF;AAkKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO1D"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tracing/vercel-ai/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA2O3C;;GAEG;AACH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAqGvF;AAkKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO1D;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CA2DxG"}
{
"name": "@sentry/core",
"version": "10.61.0",
"version": "10.62.0",
"description": "Base implementation for all Sentry JavaScript SDKs",

@@ -5,0 +5,0 @@ "repository": "git://github.com/getsentry/sentry-javascript.git",