@respan/instrumentation-vercel 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_translator/messages.d.ts +7 -0
- package/dist/_translator/messages.js +439 -0
- package/dist/_translator/messages.js.map +1 -0
- package/dist/_translator/shared.d.ts +63 -0
- package/dist/_translator/shared.js +162 -0
- package/dist/_translator/shared.js.map +1 -0
- package/dist/_translator/span-enrichment.d.ts +5 -0
- package/dist/_translator/span-enrichment.js +188 -0
- package/dist/_translator/span-enrichment.js.map +1 -0
- package/dist/_translator.d.ts +2 -15
- package/dist/_translator.js +62 -651
- package/dist/_translator.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { RespanLogType, RespanSpanAttributes } from "@respan/respan-sdk";
|
|
2
|
+
import { VERCEL_PARENT_SPANS, VERCEL_SPAN_CONFIG } from "../constants/index.js";
|
|
3
|
+
export const RESPAN_LOG_TYPE = RespanSpanAttributes.RESPAN_LOG_TYPE;
|
|
4
|
+
export const GEN_AI_REQUEST_MODEL = RespanSpanAttributes.GEN_AI_REQUEST_MODEL;
|
|
5
|
+
export const GEN_AI_USAGE_PROMPT_TOKENS = RespanSpanAttributes.GEN_AI_USAGE_PROMPT_TOKENS;
|
|
6
|
+
export const GEN_AI_USAGE_COMPLETION_TOKENS = RespanSpanAttributes.GEN_AI_USAGE_COMPLETION_TOKENS;
|
|
7
|
+
export const LLM_REQUEST_TYPE = RespanSpanAttributes.LLM_REQUEST_TYPE;
|
|
8
|
+
export const CUSTOMER_ID = RespanSpanAttributes.RESPAN_CUSTOMER_PARAMS_ID;
|
|
9
|
+
export const CUSTOMER_EMAIL = RespanSpanAttributes.RESPAN_CUSTOMER_PARAMS_EMAIL;
|
|
10
|
+
export const CUSTOMER_NAME = RespanSpanAttributes.RESPAN_CUSTOMER_PARAMS_NAME;
|
|
11
|
+
export const THREAD_ID = RespanSpanAttributes.RESPAN_THREADS_ID;
|
|
12
|
+
export const SESSION_ID = "respan.sessions.session_identifier";
|
|
13
|
+
export const TRACE_GROUP_ID = RespanSpanAttributes.RESPAN_TRACE_GROUP_ID;
|
|
14
|
+
export const RESPAN_SPAN_TOOLS = RespanSpanAttributes.RESPAN_SPAN_TOOLS;
|
|
15
|
+
export const RESPAN_SPAN_TOOL_CALLS = RespanSpanAttributes.RESPAN_SPAN_TOOL_CALLS;
|
|
16
|
+
export const RESPAN_METADATA_AGENT_NAME = RespanSpanAttributes.RESPAN_METADATA_AGENT_NAME;
|
|
17
|
+
export const RESPAN_METADATA_PREFIX = RespanSpanAttributes.RESPAN_METADATA;
|
|
18
|
+
export const TL_SPAN_KIND = "traceloop.span.kind";
|
|
19
|
+
export const TL_ENTITY_INPUT = "traceloop.entity.input";
|
|
20
|
+
export const TL_ENTITY_OUTPUT = "traceloop.entity.output";
|
|
21
|
+
export const TL_REQUEST_FUNCTIONS = "llm.request.functions";
|
|
22
|
+
export const AI_PREFIX = "ai.";
|
|
23
|
+
export const AI_SDK = "ai.sdk";
|
|
24
|
+
export const AI_OPERATION_ID = "ai.operationId";
|
|
25
|
+
export const AI_MODEL_ID = "ai.model.id";
|
|
26
|
+
export const AI_EMBEDDING = "ai.embedding";
|
|
27
|
+
export const AI_EMBEDDINGS = "ai.embeddings";
|
|
28
|
+
export const AI_AGENT_ID = "ai.agent.id";
|
|
29
|
+
export const AI_WORKFLOW_ID = "ai.workflow.id";
|
|
30
|
+
export const AI_TRANSCRIPT = "ai.transcript";
|
|
31
|
+
export const AI_SPEECH = "ai.speech";
|
|
32
|
+
export const AI_TELEMETRY_METADATA_PREFIX = "ai.telemetry.metadata.";
|
|
33
|
+
export const AI_PROMPT = "ai.prompt";
|
|
34
|
+
export const AI_PROMPT_MESSAGES = "ai.prompt.messages";
|
|
35
|
+
export const AI_PROMPT_TOOLS = "ai.prompt.tools";
|
|
36
|
+
export const AI_PROMPT_TOOL_CHOICE = "ai.prompt.toolChoice";
|
|
37
|
+
export const AI_RESPONSE_OBJECT = "ai.response.object";
|
|
38
|
+
export const AI_RESPONSE_TEXT = "ai.response.text";
|
|
39
|
+
export const AI_RESPONSE_TOOL_CALLS = "ai.response.toolCalls";
|
|
40
|
+
export const AI_RESPONSE_MS_TO_FINISH = "ai.response.msToFinish";
|
|
41
|
+
export const AI_TOOL_CALL = "ai.toolCall";
|
|
42
|
+
export const AI_TOOL_CALLS = "ai.toolCalls";
|
|
43
|
+
export const AI_TOOL_CALL_PREFIX = "ai.toolCall.";
|
|
44
|
+
export const AI_TOOL_CALL_ID = "ai.toolCall.id";
|
|
45
|
+
export const AI_TOOL_CALL_NAME = "ai.toolCall.name";
|
|
46
|
+
export const AI_TOOL_CALL_ARGS = "ai.toolCall.args";
|
|
47
|
+
export const AI_TOOL_CALL_RESULT = "ai.toolCall.result";
|
|
48
|
+
export const GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens";
|
|
49
|
+
export const GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens";
|
|
50
|
+
export const GEN_AI_USAGE_COST = "gen_ai.usage.cost";
|
|
51
|
+
export const GEN_AI_USAGE_TTFT = "gen_ai.usage.ttft";
|
|
52
|
+
export const GEN_AI_USAGE_GENERATION_TIME = "gen_ai.usage.generation_time";
|
|
53
|
+
export const GEN_AI_USAGE_WARNINGS = "gen_ai.usage.warnings";
|
|
54
|
+
export const GEN_AI_USAGE_TYPE = "gen_ai.usage.type";
|
|
55
|
+
export function metadataKey(key) {
|
|
56
|
+
return `${RESPAN_METADATA_PREFIX}.${key}`;
|
|
57
|
+
}
|
|
58
|
+
export function setDefault(attrs, key, value) {
|
|
59
|
+
if (attrs[key] === undefined && value !== undefined && value !== null) {
|
|
60
|
+
attrs[key] = value;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function safeJsonStr(value) {
|
|
64
|
+
if (value === undefined || value === null)
|
|
65
|
+
return "";
|
|
66
|
+
if (typeof value === "string")
|
|
67
|
+
return value;
|
|
68
|
+
try {
|
|
69
|
+
return JSON.stringify(value);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return String(value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function safeJsonParse(value) {
|
|
76
|
+
if (typeof value !== "string")
|
|
77
|
+
return value;
|
|
78
|
+
try {
|
|
79
|
+
return JSON.parse(value);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function isRecord(value) {
|
|
86
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
87
|
+
}
|
|
88
|
+
export function isVercelAISpan(span) {
|
|
89
|
+
if (span.instrumentationLibrary?.name === "ai") {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
if (span.attributes[AI_SDK] !== undefined) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return span.name.startsWith(AI_PREFIX);
|
|
96
|
+
}
|
|
97
|
+
export function resolveLogType(name, attrs) {
|
|
98
|
+
const config = VERCEL_SPAN_CONFIG[name];
|
|
99
|
+
if (config) {
|
|
100
|
+
return config.logType;
|
|
101
|
+
}
|
|
102
|
+
const parentType = VERCEL_PARENT_SPANS[name];
|
|
103
|
+
if (parentType) {
|
|
104
|
+
return parentType;
|
|
105
|
+
}
|
|
106
|
+
const operationId = attrs[AI_OPERATION_ID]?.toString();
|
|
107
|
+
if (operationId) {
|
|
108
|
+
const operationConfig = VERCEL_SPAN_CONFIG[operationId];
|
|
109
|
+
if (operationConfig) {
|
|
110
|
+
return operationConfig.logType;
|
|
111
|
+
}
|
|
112
|
+
const operationParentType = VERCEL_PARENT_SPANS[operationId];
|
|
113
|
+
if (operationParentType) {
|
|
114
|
+
return operationParentType;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (attrs[AI_EMBEDDING] || attrs[AI_EMBEDDINGS] ||
|
|
118
|
+
name.includes("embed") || operationId?.includes("embed")) {
|
|
119
|
+
return RespanLogType.EMBEDDING;
|
|
120
|
+
}
|
|
121
|
+
if (attrs[AI_TOOL_CALL_ID] || attrs[AI_TOOL_CALL_NAME] ||
|
|
122
|
+
attrs[AI_TOOL_CALL_ARGS] || attrs[AI_TOOL_CALL_RESULT] ||
|
|
123
|
+
attrs[AI_RESPONSE_TOOL_CALLS] ||
|
|
124
|
+
name.includes("tool") || operationId?.includes("tool")) {
|
|
125
|
+
return RespanLogType.TOOL;
|
|
126
|
+
}
|
|
127
|
+
if (attrs[AI_AGENT_ID] ||
|
|
128
|
+
name.includes("agent") || operationId?.includes("agent")) {
|
|
129
|
+
return RespanLogType.AGENT;
|
|
130
|
+
}
|
|
131
|
+
if (attrs[AI_WORKFLOW_ID] ||
|
|
132
|
+
name.includes("workflow") || operationId?.includes("workflow")) {
|
|
133
|
+
return RespanLogType.WORKFLOW;
|
|
134
|
+
}
|
|
135
|
+
if (attrs[AI_TRANSCRIPT] ||
|
|
136
|
+
name.includes("transcript") || operationId?.includes("transcript")) {
|
|
137
|
+
return RespanLogType.TRANSCRIPTION;
|
|
138
|
+
}
|
|
139
|
+
if (attrs[AI_SPEECH] ||
|
|
140
|
+
name.includes("speech") || operationId?.includes("speech")) {
|
|
141
|
+
return RespanLogType.SPEECH;
|
|
142
|
+
}
|
|
143
|
+
if (name.includes("doGenerate") || name.includes("doStream")) {
|
|
144
|
+
return RespanLogType.TEXT;
|
|
145
|
+
}
|
|
146
|
+
return RespanLogType.UNKNOWN;
|
|
147
|
+
}
|
|
148
|
+
export function normalizeModel(modelId) {
|
|
149
|
+
const model = modelId.toLowerCase();
|
|
150
|
+
if (model.includes("gemini-2.0-flash-001"))
|
|
151
|
+
return "gemini/gemini-2.0-flash";
|
|
152
|
+
if (model.includes("gemini-2.0-pro"))
|
|
153
|
+
return "gemini/gemini-2.0-pro-exp-02-05";
|
|
154
|
+
if (model.includes("claude-3-5-sonnet"))
|
|
155
|
+
return "claude-3-5-sonnet-20241022";
|
|
156
|
+
if (model.includes("deepseek"))
|
|
157
|
+
return `deepseek/${model}`;
|
|
158
|
+
if (model.includes("o3-mini"))
|
|
159
|
+
return "o3-mini";
|
|
160
|
+
return model;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/_translator/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhF,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC,eAAe,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,oBAAoB,CAAC;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,0BAA0B,CAAC;AAC1F,MAAM,CAAC,MAAM,8BAA8B,GAAG,oBAAoB,CAAC,8BAA8B,CAAC;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC,yBAAyB,CAAC;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,4BAA4B,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC,2BAA2B,CAAC;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,oCAAoC,CAAC;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC;AAClF,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,0BAA0B,CAAC;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,eAAe,CAAC;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AACjE,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,sBAAsB,IAAI,GAAG,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAqB,EAAE,GAAW,EAAE,KAAU;IACvE,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACtE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAqB;IAChE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IACE,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxD,CAAC;QACD,OAAO,aAAa,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,IACE,KAAK,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC;QAClD,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC;QACtD,KAAK,CAAC,sBAAsB,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtD,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,IACE,KAAK,CAAC,WAAW,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxD,CAAC;QACD,OAAO,aAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,IACE,KAAK,CAAC,cAAc,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9D,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,IACE,KAAK,CAAC,aAAa,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,EAClE,CAAC;QACD,OAAO,aAAa,CAAC,aAAa,CAAC;IACrC,CAAC;IAED,IACE,KAAK,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1D,CAAC;QACD,OAAO,aAAa,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAC7E,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,iCAAiC,CAAC;IAC/E,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,4BAA4B,CAAC;IAC7E,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,YAAY,KAAK,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAEhD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SpanAttributes } from "./shared.js";
|
|
2
|
+
export declare function enrichMetadata(attrs: SpanAttributes): void;
|
|
3
|
+
export declare function enrichTokens(attrs: SpanAttributes): void;
|
|
4
|
+
export declare function enrichPerformanceMetrics(attrs: SpanAttributes, spanName: string): void;
|
|
5
|
+
export declare function stripRedundantAttrs(attrs: SpanAttributes): void;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { AI_MODEL_ID, AI_OPERATION_ID, AI_PROMPT, AI_PROMPT_MESSAGES, AI_PROMPT_TOOL_CHOICE, AI_PROMPT_TOOLS, AI_RESPONSE_OBJECT, AI_RESPONSE_MS_TO_FINISH, AI_RESPONSE_TEXT, AI_RESPONSE_TOOL_CALLS, AI_SDK, AI_TELEMETRY_METADATA_PREFIX, AI_TOOL_CALL_ARGS, AI_TOOL_CALL_ID, AI_TOOL_CALL_NAME, AI_TOOL_CALL_RESULT, CUSTOMER_EMAIL, CUSTOMER_ID, CUSTOMER_NAME, GEN_AI_USAGE_COST, GEN_AI_USAGE_GENERATION_TIME, GEN_AI_USAGE_INPUT_TOKENS, GEN_AI_USAGE_OUTPUT_TOKENS, GEN_AI_USAGE_TTFT, GEN_AI_USAGE_TYPE, GEN_AI_USAGE_WARNINGS, GEN_AI_USAGE_COMPLETION_TOKENS, GEN_AI_USAGE_PROMPT_TOKENS, SESSION_ID, THREAD_ID, TRACE_GROUP_ID, metadataKey, setDefault, } from "./shared.js";
|
|
2
|
+
export function enrichMetadata(attrs) {
|
|
3
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
4
|
+
if (!key.startsWith(AI_TELEMETRY_METADATA_PREFIX)) {
|
|
5
|
+
continue;
|
|
6
|
+
}
|
|
7
|
+
const cleanKey = key.slice(AI_TELEMETRY_METADATA_PREFIX.length);
|
|
8
|
+
switch (cleanKey) {
|
|
9
|
+
case "customer_identifier":
|
|
10
|
+
setDefault(attrs, CUSTOMER_ID, String(value));
|
|
11
|
+
break;
|
|
12
|
+
case "customer_email":
|
|
13
|
+
setDefault(attrs, CUSTOMER_EMAIL, String(value));
|
|
14
|
+
break;
|
|
15
|
+
case "customer_name":
|
|
16
|
+
setDefault(attrs, CUSTOMER_NAME, String(value));
|
|
17
|
+
break;
|
|
18
|
+
case "session_identifier":
|
|
19
|
+
setDefault(attrs, SESSION_ID, String(value));
|
|
20
|
+
break;
|
|
21
|
+
case "thread_identifier":
|
|
22
|
+
setDefault(attrs, THREAD_ID, String(value));
|
|
23
|
+
break;
|
|
24
|
+
case "trace_group_identifier":
|
|
25
|
+
setDefault(attrs, TRACE_GROUP_ID, String(value));
|
|
26
|
+
break;
|
|
27
|
+
case "customer_params": {
|
|
28
|
+
// customer_params is a JSON-stringified object (Vercel telemetry
|
|
29
|
+
// metadata values must be flat scalars, so users serialize the object).
|
|
30
|
+
// Documented shape uses `email` / `name` (matching the Customer columns
|
|
31
|
+
// in the UI); accept the legacy `customer_email` / `customer_name`
|
|
32
|
+
// aliases too so older integrations keep working.
|
|
33
|
+
try {
|
|
34
|
+
const parsed = typeof value === "string" ? JSON.parse(value) : value;
|
|
35
|
+
if (parsed?.customer_identifier)
|
|
36
|
+
setDefault(attrs, CUSTOMER_ID, parsed.customer_identifier);
|
|
37
|
+
const email = parsed?.email ?? parsed?.customer_email;
|
|
38
|
+
if (email)
|
|
39
|
+
setDefault(attrs, CUSTOMER_EMAIL, email);
|
|
40
|
+
const name = parsed?.name ?? parsed?.customer_name;
|
|
41
|
+
if (name)
|
|
42
|
+
setDefault(attrs, CUSTOMER_NAME, name);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Ignore malformed customer_params metadata.
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case "prompt_unit_price":
|
|
50
|
+
setDefault(attrs, metadataKey("prompt_unit_price"), String(value));
|
|
51
|
+
break;
|
|
52
|
+
case "completion_unit_price":
|
|
53
|
+
setDefault(attrs, metadataKey("completion_unit_price"), String(value));
|
|
54
|
+
break;
|
|
55
|
+
case "userId":
|
|
56
|
+
setDefault(attrs, CUSTOMER_ID, String(value));
|
|
57
|
+
setDefault(attrs, metadataKey(cleanKey), String(value ?? ""));
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
setDefault(attrs, metadataKey(cleanKey), String(value ?? ""));
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function enrichTokens(attrs) {
|
|
66
|
+
const inputTokens = attrs[GEN_AI_USAGE_INPUT_TOKENS] ??
|
|
67
|
+
attrs["gen_ai.usage.prompt_tokens"];
|
|
68
|
+
const outputTokens = attrs[GEN_AI_USAGE_OUTPUT_TOKENS] ??
|
|
69
|
+
attrs["gen_ai.usage.completion_tokens"];
|
|
70
|
+
if (inputTokens !== undefined) {
|
|
71
|
+
setDefault(attrs, GEN_AI_USAGE_PROMPT_TOKENS, Number(inputTokens));
|
|
72
|
+
}
|
|
73
|
+
if (outputTokens !== undefined) {
|
|
74
|
+
setDefault(attrs, GEN_AI_USAGE_COMPLETION_TOKENS, Number(outputTokens));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function enrichPerformanceMetrics(attrs, spanName) {
|
|
78
|
+
setDefault(attrs, metadataKey("stream"), String(spanName.includes("doStream")));
|
|
79
|
+
const msToFinish = attrs[AI_RESPONSE_MS_TO_FINISH];
|
|
80
|
+
if (msToFinish !== undefined) {
|
|
81
|
+
setDefault(attrs, metadataKey("time_to_first_token"), String(Number(msToFinish) / 1000));
|
|
82
|
+
}
|
|
83
|
+
const cost = attrs[GEN_AI_USAGE_COST];
|
|
84
|
+
if (cost !== undefined) {
|
|
85
|
+
setDefault(attrs, metadataKey("cost"), String(cost));
|
|
86
|
+
}
|
|
87
|
+
const ttft = attrs[GEN_AI_USAGE_TTFT];
|
|
88
|
+
if (ttft !== undefined) {
|
|
89
|
+
setDefault(attrs, metadataKey("ttft"), String(ttft));
|
|
90
|
+
}
|
|
91
|
+
const generationTime = attrs[GEN_AI_USAGE_GENERATION_TIME];
|
|
92
|
+
if (generationTime !== undefined) {
|
|
93
|
+
setDefault(attrs, metadataKey("generation_time"), String(generationTime));
|
|
94
|
+
}
|
|
95
|
+
const warnings = attrs[GEN_AI_USAGE_WARNINGS];
|
|
96
|
+
if (warnings !== undefined) {
|
|
97
|
+
setDefault(attrs, metadataKey("warnings"), String(warnings));
|
|
98
|
+
}
|
|
99
|
+
const responseType = attrs[GEN_AI_USAGE_TYPE];
|
|
100
|
+
if (responseType !== undefined) {
|
|
101
|
+
setDefault(attrs, metadataKey("type"), String(responseType));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const VERCEL_ATTRS_TO_STRIP = [
|
|
105
|
+
AI_MODEL_ID,
|
|
106
|
+
"ai.model.provider",
|
|
107
|
+
"ai.response.model",
|
|
108
|
+
AI_PROMPT,
|
|
109
|
+
AI_PROMPT_MESSAGES,
|
|
110
|
+
"ai.prompt.format",
|
|
111
|
+
AI_RESPONSE_TEXT,
|
|
112
|
+
AI_RESPONSE_OBJECT,
|
|
113
|
+
"ai.usage.promptTokens",
|
|
114
|
+
"ai.usage.completionTokens",
|
|
115
|
+
"ai.usage.inputTokens",
|
|
116
|
+
"ai.usage.outputTokens",
|
|
117
|
+
"ai.usage.totalTokens",
|
|
118
|
+
"ai.usage.reasoningTokens",
|
|
119
|
+
"ai.usage.cachedInputTokens",
|
|
120
|
+
"ai.response.finishReason",
|
|
121
|
+
"ai.response.id",
|
|
122
|
+
"ai.response.timestamp",
|
|
123
|
+
"ai.response.providerMetadata",
|
|
124
|
+
AI_RESPONSE_MS_TO_FINISH,
|
|
125
|
+
"ai.response.msToFirstChunk",
|
|
126
|
+
"ai.response.avgOutputTokensPerSecond",
|
|
127
|
+
"ai.response.avgCompletionTokensPerSecond",
|
|
128
|
+
"ai.request.headers.user-agent",
|
|
129
|
+
AI_PROMPT_TOOL_CHOICE,
|
|
130
|
+
AI_OPERATION_ID,
|
|
131
|
+
"ai.settings.maxRetries",
|
|
132
|
+
"ai.settings.maxSteps",
|
|
133
|
+
AI_SDK,
|
|
134
|
+
"operation.name",
|
|
135
|
+
AI_TOOL_CALL_ID,
|
|
136
|
+
AI_TOOL_CALL_NAME,
|
|
137
|
+
AI_TOOL_CALL_ARGS,
|
|
138
|
+
AI_TOOL_CALL_RESULT,
|
|
139
|
+
AI_RESPONSE_TOOL_CALLS,
|
|
140
|
+
"gen_ai.response.finish_reasons",
|
|
141
|
+
"gen_ai.response.id",
|
|
142
|
+
"gen_ai.usage.input_tokens",
|
|
143
|
+
"gen_ai.usage.output_tokens",
|
|
144
|
+
"gen_ai.system",
|
|
145
|
+
"traceloop.entity.name",
|
|
146
|
+
"traceloop.entity.path",
|
|
147
|
+
"service.name",
|
|
148
|
+
"telemetry.sdk.language",
|
|
149
|
+
"telemetry.sdk.name",
|
|
150
|
+
"telemetry.sdk.version",
|
|
151
|
+
"process.pid",
|
|
152
|
+
"process.executable.name",
|
|
153
|
+
"process.executable.path",
|
|
154
|
+
"process.command_args",
|
|
155
|
+
"process.runtime.version",
|
|
156
|
+
"process.runtime.name",
|
|
157
|
+
"process.runtime.description",
|
|
158
|
+
"process.command",
|
|
159
|
+
"process.owner",
|
|
160
|
+
"host.name",
|
|
161
|
+
"host.arch",
|
|
162
|
+
"host.id",
|
|
163
|
+
"otel.scope.name",
|
|
164
|
+
"otel.scope.version",
|
|
165
|
+
"next.span_name",
|
|
166
|
+
"next.span_type",
|
|
167
|
+
"http.url",
|
|
168
|
+
"http.method",
|
|
169
|
+
"net.peer.name",
|
|
170
|
+
];
|
|
171
|
+
export function stripRedundantAttrs(attrs) {
|
|
172
|
+
for (const key of VERCEL_ATTRS_TO_STRIP) {
|
|
173
|
+
delete attrs[key];
|
|
174
|
+
}
|
|
175
|
+
for (const key of Object.keys(attrs)) {
|
|
176
|
+
if (key.startsWith(AI_TELEMETRY_METADATA_PREFIX)) {
|
|
177
|
+
delete attrs[key];
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (key.startsWith("ai.usage.") && key.includes("Details.")) {
|
|
181
|
+
delete attrs[key];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (attrs[AI_PROMPT_TOOLS] !== undefined) {
|
|
185
|
+
delete attrs[AI_PROMPT_TOOLS];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=span-enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-enrichment.js","sourceRoot":"","sources":["../../src/_translator/span-enrichment.ts"],"names":[],"mappings":"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"}
|
package/dist/_translator.d.ts
CHANGED
|
@@ -8,22 +8,9 @@
|
|
|
8
8
|
* Two-phase enrichment:
|
|
9
9
|
* - onStart(): Sets RESPAN_LOG_TYPE so the span passes CompositeProcessor filtering
|
|
10
10
|
* - onEnd(): Full attribute translation (model, messages, tokens, metadata, etc.)
|
|
11
|
-
*
|
|
12
|
-
* Vercel attrs are preserved (additive enrichment via setDefault, not destructive).
|
|
13
|
-
*
|
|
14
|
-
* Ported from @respan/exporter-vercel — all exporter features are replicated:
|
|
15
|
-
* - Model normalization (Gemini, Claude, DeepSeek, O3-mini)
|
|
16
|
-
* - Prompt message parsing (ai.prompt.messages + ai.prompt fallback)
|
|
17
|
-
* - Completion message building (ai.response.text, ai.response.object, tool calls)
|
|
18
|
-
* - Token count normalization (input/output → prompt/completion)
|
|
19
|
-
* - Tool definitions (ai.prompt.tools) and tool choice (ai.prompt.toolChoice)
|
|
20
|
-
* - Customer params (ai.telemetry.metadata.customer_* + customer_params JSON)
|
|
21
|
-
* - General metadata (ai.telemetry.metadata.* → respan.metadata.*)
|
|
22
|
-
* - Stream detection, environment, cost, TTFT, generation time, unit prices
|
|
23
|
-
* - Log type detection with operationId + attribute-based fallbacks
|
|
24
11
|
*/
|
|
25
12
|
import type { Context } from "@opentelemetry/api";
|
|
26
|
-
import type {
|
|
13
|
+
import type { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
27
14
|
/**
|
|
28
15
|
* SpanProcessor that translates Vercel AI SDK attributes to Traceloop/OpenLLMetry.
|
|
29
16
|
*
|
|
@@ -34,6 +21,6 @@ import type { SpanProcessor, ReadableSpan, Span } from "@opentelemetry/sdk-trace
|
|
|
34
21
|
export declare class VercelAITranslator implements SpanProcessor {
|
|
35
22
|
onStart(span: Span, _parentContext: Context): void;
|
|
36
23
|
onEnd(span: ReadableSpan): void;
|
|
37
|
-
shutdown(): Promise<void>;
|
|
38
24
|
forceFlush(): Promise<void>;
|
|
25
|
+
shutdown(): Promise<void>;
|
|
39
26
|
}
|