@sentry/core
Advanced tools
@@ -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 +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"} |
+1
-1
| { | ||
| "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", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
6628907
0.17%67761
0.17%