@introspection-sdk/introspection-node 0.19.1 → 0.21.0

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.
Files changed (211) hide show
  1. package/README.md +28 -8
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/client.d.ts +4 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +16 -7
  6. package/dist/client.js.map +1 -1
  7. package/dist/dev-target.js +1 -1
  8. package/dist/index.d.ts +4 -7
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -6
  11. package/dist/index.js.map +1 -1
  12. package/dist/otel/index.d.ts +1 -14
  13. package/dist/otel/index.d.ts.map +1 -1
  14. package/dist/otel/index.js +10 -18
  15. package/dist/otel/index.js.map +1 -1
  16. package/dist/otel/init.d.ts +19 -21
  17. package/dist/otel/init.d.ts.map +1 -1
  18. package/dist/otel/init.js +62 -48
  19. package/dist/otel/init.js.map +1 -1
  20. package/dist/otel/integrations/base.d.ts +17 -37
  21. package/dist/otel/integrations/base.d.ts.map +1 -1
  22. package/dist/otel/integrations/base.js +6 -13
  23. package/dist/otel/integrations/base.js.map +1 -1
  24. package/dist/otel/integrations/index.d.ts +3 -4
  25. package/dist/otel/integrations/index.d.ts.map +1 -1
  26. package/dist/otel/integrations/index.js +6 -25
  27. package/dist/otel/integrations/index.js.map +1 -1
  28. package/dist/otel/integrations/pi.d.ts.map +1 -1
  29. package/dist/otel/integrations/pi.js +9 -1
  30. package/dist/otel/integrations/pi.js.map +1 -1
  31. package/dist/otel/logs.d.ts +41 -8
  32. package/dist/otel/logs.d.ts.map +1 -1
  33. package/dist/otel/logs.js +95 -66
  34. package/dist/otel/logs.js.map +1 -1
  35. package/dist/otel/pi.d.ts +18 -5
  36. package/dist/otel/pi.d.ts.map +1 -1
  37. package/dist/otel/pi.js +38 -9
  38. package/dist/otel/pi.js.map +1 -1
  39. package/dist/otel/register.d.ts +2 -2
  40. package/dist/otel/register.d.ts.map +1 -1
  41. package/dist/otel/register.js +7 -9
  42. package/dist/otel/register.js.map +1 -1
  43. package/dist/otel/setup.d.ts +2 -2
  44. package/dist/otel/setup.d.ts.map +1 -1
  45. package/dist/otel/setup.js +16 -6
  46. package/dist/otel/setup.js.map +1 -1
  47. package/dist/otel/span-processor.d.ts +18 -5
  48. package/dist/otel/span-processor.d.ts.map +1 -1
  49. package/dist/otel/span-processor.js +50 -65
  50. package/dist/otel/span-processor.js.map +1 -1
  51. package/dist/resources/experiments.d.ts +10 -5
  52. package/dist/resources/experiments.d.ts.map +1 -1
  53. package/dist/resources/experiments.js +9 -25
  54. package/dist/resources/experiments.js.map +1 -1
  55. package/dist/resources/recipes.d.ts +6 -6
  56. package/dist/resources/recipes.d.ts.map +1 -1
  57. package/dist/resources/recipes.js +5 -23
  58. package/dist/resources/recipes.js.map +1 -1
  59. package/dist/resources/runtimes.d.ts +2 -2
  60. package/dist/resources/runtimes.d.ts.map +1 -1
  61. package/dist/resources/runtimes.js +2 -2
  62. package/dist/resources/runtimes.js.map +1 -1
  63. package/dist/runner.d.ts +8 -4
  64. package/dist/runner.d.ts.map +1 -1
  65. package/dist/runner.js +26 -18
  66. package/dist/runner.js.map +1 -1
  67. package/dist/types.d.ts +1 -1
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/utils.d.ts +45 -0
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +61 -2
  74. package/dist/utils.js.map +1 -1
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.d.ts.map +1 -1
  77. package/dist/version.js +1 -1
  78. package/dist/version.js.map +1 -1
  79. package/package.json +18 -60
  80. package/.turbo/turbo-build.log +0 -4
  81. package/dist/converters/claude.d.ts +0 -150
  82. package/dist/converters/claude.d.ts.map +0 -1
  83. package/dist/converters/claude.js +0 -211
  84. package/dist/converters/claude.js.map +0 -1
  85. package/dist/converters/gemini.d.ts +0 -90
  86. package/dist/converters/gemini.d.ts.map +0 -1
  87. package/dist/converters/gemini.js +0 -171
  88. package/dist/converters/gemini.js.map +0 -1
  89. package/dist/converters/index.d.ts +0 -9
  90. package/dist/converters/index.d.ts.map +0 -1
  91. package/dist/converters/index.js +0 -9
  92. package/dist/converters/index.js.map +0 -1
  93. package/dist/converters/openai.d.ts +0 -51
  94. package/dist/converters/openai.d.ts.map +0 -1
  95. package/dist/converters/openai.js +0 -269
  96. package/dist/converters/openai.js.map +0 -1
  97. package/dist/converters/openinference.d.ts +0 -107
  98. package/dist/converters/openinference.d.ts.map +0 -1
  99. package/dist/converters/openinference.js +0 -553
  100. package/dist/converters/openinference.js.map +0 -1
  101. package/dist/converters/vercel.d.ts +0 -21
  102. package/dist/converters/vercel.d.ts.map +0 -1
  103. package/dist/converters/vercel.js +0 -236
  104. package/dist/converters/vercel.js.map +0 -1
  105. package/dist/otel/anthropic.d.ts +0 -63
  106. package/dist/otel/anthropic.d.ts.map +0 -1
  107. package/dist/otel/anthropic.js +0 -475
  108. package/dist/otel/anthropic.js.map +0 -1
  109. package/dist/otel/claude-hooks.d.ts +0 -346
  110. package/dist/otel/claude-hooks.d.ts.map +0 -1
  111. package/dist/otel/claude-hooks.js +0 -647
  112. package/dist/otel/claude-hooks.js.map +0 -1
  113. package/dist/otel/claude-wrapper.d.ts +0 -93
  114. package/dist/otel/claude-wrapper.d.ts.map +0 -1
  115. package/dist/otel/claude-wrapper.js +0 -155
  116. package/dist/otel/claude-wrapper.js.map +0 -1
  117. package/dist/otel/gemini.d.ts +0 -56
  118. package/dist/otel/gemini.d.ts.map +0 -1
  119. package/dist/otel/gemini.js +0 -350
  120. package/dist/otel/gemini.js.map +0 -1
  121. package/dist/otel/integrations/anthropic.d.ts +0 -10
  122. package/dist/otel/integrations/anthropic.d.ts.map +0 -1
  123. package/dist/otel/integrations/anthropic.js +0 -26
  124. package/dist/otel/integrations/anthropic.js.map +0 -1
  125. package/dist/otel/integrations/claude-agent.d.ts +0 -12
  126. package/dist/otel/integrations/claude-agent.d.ts.map +0 -1
  127. package/dist/otel/integrations/claude-agent.js +0 -28
  128. package/dist/otel/integrations/claude-agent.js.map +0 -1
  129. package/dist/otel/integrations/gemini.d.ts +0 -11
  130. package/dist/otel/integrations/gemini.d.ts.map +0 -1
  131. package/dist/otel/integrations/gemini.js +0 -23
  132. package/dist/otel/integrations/gemini.js.map +0 -1
  133. package/dist/otel/integrations/langchain.d.ts +0 -15
  134. package/dist/otel/integrations/langchain.d.ts.map +0 -1
  135. package/dist/otel/integrations/langchain.js +0 -43
  136. package/dist/otel/integrations/langchain.js.map +0 -1
  137. package/dist/otel/integrations/mastra.d.ts +0 -14
  138. package/dist/otel/integrations/mastra.d.ts.map +0 -1
  139. package/dist/otel/integrations/mastra.js +0 -31
  140. package/dist/otel/integrations/mastra.js.map +0 -1
  141. package/dist/otel/integrations/openai-agents.d.ts +0 -11
  142. package/dist/otel/integrations/openai-agents.d.ts.map +0 -1
  143. package/dist/otel/integrations/openai-agents.js +0 -30
  144. package/dist/otel/integrations/openai-agents.js.map +0 -1
  145. package/dist/otel/integrations/vercel.d.ts +0 -14
  146. package/dist/otel/integrations/vercel.d.ts.map +0 -1
  147. package/dist/otel/integrations/vercel.js +0 -20
  148. package/dist/otel/integrations/vercel.js.map +0 -1
  149. package/dist/otel/langchain-handler.d.ts +0 -112
  150. package/dist/otel/langchain-handler.d.ts.map +0 -1
  151. package/dist/otel/langchain-handler.js +0 -561
  152. package/dist/otel/langchain-handler.js.map +0 -1
  153. package/dist/otel/mastra-exporter.d.ts +0 -87
  154. package/dist/otel/mastra-exporter.d.ts.map +0 -1
  155. package/dist/otel/mastra-exporter.js +0 -530
  156. package/dist/otel/mastra-exporter.js.map +0 -1
  157. package/dist/otel/openai.d.ts +0 -20
  158. package/dist/otel/openai.d.ts.map +0 -1
  159. package/dist/otel/openai.js +0 -55
  160. package/dist/otel/openai.js.map +0 -1
  161. package/dist/otel/tracing-processor.d.ts +0 -139
  162. package/dist/otel/tracing-processor.d.ts.map +0 -1
  163. package/dist/otel/tracing-processor.js +0 -434
  164. package/dist/otel/tracing-processor.js.map +0 -1
  165. package/eslint.config.mjs +0 -4
  166. package/src/auth.ts +0 -236
  167. package/src/client.ts +0 -163
  168. package/src/converters/claude.ts +0 -343
  169. package/src/converters/gemini.ts +0 -243
  170. package/src/converters/index.ts +0 -50
  171. package/src/converters/openai.ts +0 -300
  172. package/src/converters/openinference.ts +0 -665
  173. package/src/converters/vercel.ts +0 -302
  174. package/src/dev-target.ts +0 -79
  175. package/src/http.ts +0 -43
  176. package/src/index.ts +0 -266
  177. package/src/otel/anthropic.ts +0 -619
  178. package/src/otel/claude-hooks.ts +0 -1116
  179. package/src/otel/claude-wrapper.ts +0 -239
  180. package/src/otel/gemini.ts +0 -483
  181. package/src/otel/index.ts +0 -128
  182. package/src/otel/init.ts +0 -411
  183. package/src/otel/integrations/anthropic.ts +0 -36
  184. package/src/otel/integrations/base.ts +0 -158
  185. package/src/otel/integrations/claude-agent.ts +0 -36
  186. package/src/otel/integrations/gemini.ts +0 -30
  187. package/src/otel/integrations/index.ts +0 -152
  188. package/src/otel/integrations/langchain.ts +0 -60
  189. package/src/otel/integrations/mastra.ts +0 -48
  190. package/src/otel/integrations/openai-agents.ts +0 -47
  191. package/src/otel/integrations/pi.ts +0 -28
  192. package/src/otel/integrations/vercel.ts +0 -26
  193. package/src/otel/langchain-handler.ts +0 -804
  194. package/src/otel/logs.ts +0 -395
  195. package/src/otel/mastra-exporter.ts +0 -714
  196. package/src/otel/openai.ts +0 -93
  197. package/src/otel/pi.ts +0 -94
  198. package/src/otel/register.ts +0 -50
  199. package/src/otel/setup.ts +0 -215
  200. package/src/otel/span-processor.ts +0 -512
  201. package/src/otel/tracing-processor.ts +0 -637
  202. package/src/pagination.ts +0 -10
  203. package/src/proxy-from-env.d.ts +0 -7
  204. package/src/resources/experiments.ts +0 -176
  205. package/src/resources/recipes.ts +0 -74
  206. package/src/resources/runtimes.ts +0 -31
  207. package/src/runner.ts +0 -213
  208. package/src/types.ts +0 -13
  209. package/src/utils.ts +0 -95
  210. package/src/version.ts +0 -2
  211. package/tsconfig.json +0 -8
@@ -1,553 +0,0 @@
1
- import { toAttributes } from "@introspection-sdk/types";
2
- const OI = {
3
- MODEL_NAME: "llm.model_name",
4
- SYSTEM: "llm.system",
5
- INVOCATION_PARAMETERS: "llm.invocation_parameters",
6
- TOKEN_COUNT_PROMPT: "llm.token_count.prompt",
7
- TOKEN_COUNT_COMPLETION: "llm.token_count.completion",
8
- TOKEN_COUNT_TOTAL: "llm.token_count.total",
9
- INPUT_MESSAGES: "llm.input_messages",
10
- OUTPUT_MESSAGES: "llm.output_messages",
11
- TOOLS: "llm.tools",
12
- TOOL_NAME: "tool.name",
13
- TOOL_DESCRIPTION: "tool.description",
14
- TOOL_PARAMETERS: "tool.parameters",
15
- TOOL_JSON_SCHEMA: "tool.json_schema",
16
- OUTPUT_VALUE: "output.value",
17
- OUTPUT_MIME_TYPE: "output.mime_type",
18
- };
19
- /**
20
- * Check whether an OTel scope name belongs to an OpenInference instrumentor.
21
- *
22
- * @param scopeName - The `instrumentationScope.name` from a {@link ReadableSpan}.
23
- * @returns `true` when the scope starts with `"openinference"` or `"@arizeai/openinference"`.
24
- *
25
- * @example
26
- * ```ts
27
- * if (isOpenInferenceSpan(span.instrumentationScope.name)) {
28
- * // convert attributes …
29
- * }
30
- * ```
31
- */
32
- export function isOpenInferenceSpan(scopeName) {
33
- if (!scopeName)
34
- return false;
35
- return (scopeName.startsWith("openinference") ||
36
- scopeName.startsWith("@arizeai/openinference"));
37
- }
38
- function extractModel(attrs) {
39
- return attrs[OI.MODEL_NAME];
40
- }
41
- function extractSystem(attrs) {
42
- return attrs[OI.SYSTEM];
43
- }
44
- function extractTokenCounts(attrs) {
45
- return {
46
- input: attrs[OI.TOKEN_COUNT_PROMPT],
47
- output: attrs[OI.TOKEN_COUNT_COMPLETION],
48
- cacheCreation: attrs["llm.token_count.prompt_details.cache_write"],
49
- cacheRead: attrs["llm.token_count.prompt_details.cache_read"],
50
- };
51
- }
52
- /** Safely traverse nested object path */
53
- function getPath(obj, ...keys) {
54
- let current = obj;
55
- for (const key of keys) {
56
- if (typeof current !== "object" || current === null)
57
- return undefined;
58
- current = current[key];
59
- }
60
- return current;
61
- }
62
- /**
63
- * Extract response ID from LangChain's nested output structure.
64
- * Path: generations[*][*].message.kwargs.id
65
- */
66
- function extractLangChainResponseId(payload) {
67
- const generations = getPath(payload, "generations");
68
- if (!Array.isArray(generations))
69
- return undefined;
70
- for (const outer of generations) {
71
- const items = Array.isArray(outer) ? outer : [outer];
72
- for (const item of items) {
73
- const id = getPath(item, "message", "kwargs", "id");
74
- if (typeof id === "string" && id)
75
- return id;
76
- }
77
- }
78
- return undefined;
79
- }
80
- function extractResponseId(attrs) {
81
- const existing = attrs["gen_ai.response.id"];
82
- if (typeof existing === "string" && existing)
83
- return existing;
84
- const outputValue = attrs[OI.OUTPUT_VALUE];
85
- if (typeof outputValue !== "string")
86
- return undefined;
87
- try {
88
- const parsed = JSON.parse(outputValue);
89
- return parsed?.id ?? extractLangChainResponseId(parsed);
90
- }
91
- catch {
92
- return undefined;
93
- }
94
- }
95
- function extractSystemInstructions(attrs) {
96
- const inputValue = attrs["input.value"];
97
- if (!inputValue)
98
- return undefined;
99
- try {
100
- const parsed = JSON.parse(inputValue);
101
- if (!parsed?.system)
102
- return undefined;
103
- // Plain string system prompt
104
- if (typeof parsed.system === "string") {
105
- return [{ type: "text", content: parsed.system }];
106
- }
107
- // Array of content blocks (e.g. Anthropic API with cache_control)
108
- if (Array.isArray(parsed.system)) {
109
- const instructions = [];
110
- for (const block of parsed.system) {
111
- if (block?.type === "text" && typeof block.text === "string") {
112
- instructions.push({ type: "text", content: block.text });
113
- }
114
- }
115
- return instructions.length > 0 ? instructions : undefined;
116
- }
117
- }
118
- catch {
119
- // ignore parse errors
120
- }
121
- return undefined;
122
- }
123
- function extractToolDefinitions(attrs) {
124
- const tools = [];
125
- for (const [key, value] of Object.entries(attrs)) {
126
- const match = key.match(/^llm\.tools\.(\d+)\.tool\.json_schema$/);
127
- if (!match || !value)
128
- continue;
129
- try {
130
- const raw = typeof value === "string" ? JSON.parse(value) : value;
131
- // LangChain format: {"type":"function","function":{name, description, parameters}}
132
- // Standard format: {title/name, description, parameters}
133
- const schema = raw?.type === "function" && raw?.function ? raw.function : raw;
134
- tools.push({
135
- type: "function",
136
- name: schema?.name ?? schema?.title ?? `tool_${match[1]}`,
137
- description: schema?.description,
138
- parameters: schema?.parameters ?? schema,
139
- });
140
- }
141
- catch {
142
- // Skip malformed JSON
143
- }
144
- }
145
- return tools.length > 0 ? tools : undefined;
146
- }
147
- function extractInputMessages(attrs) {
148
- const messages = [];
149
- const indices = new Set();
150
- for (const key of Object.keys(attrs)) {
151
- const match = key.match(/^llm\.input_messages\.(\d+)\./);
152
- if (match && match[1]) {
153
- indices.add(parseInt(match[1], 10));
154
- }
155
- }
156
- for (const idx of Array.from(indices).sort((a, b) => a - b)) {
157
- const role = attrs[`llm.input_messages.${idx}.message.role`];
158
- const content = attrs[`llm.input_messages.${idx}.message.content`];
159
- if (role) {
160
- const parts = [];
161
- if (content) {
162
- parts.push({ type: "text", content });
163
- }
164
- else {
165
- // Structured content (e.g. Vercel AI SDK): llm.input_messages.{i}.message.contents.{j}.message_content.text
166
- const contentIndices = new Set();
167
- for (const key of Object.keys(attrs)) {
168
- const m = key.match(new RegExp(`^llm\\.input_messages\\.${idx}\\.message\\.contents\\.(\\d+)\\.`));
169
- if (m && m[1])
170
- contentIndices.add(parseInt(m[1], 10));
171
- }
172
- for (const cIdx of Array.from(contentIndices).sort((a, b) => a - b)) {
173
- const prefix = `llm.input_messages.${idx}.message.contents.${cIdx}`;
174
- const type = attrs[`${prefix}.message_content.type`];
175
- const text = attrs[`${prefix}.message_content.text`];
176
- if (text) {
177
- parts.push({
178
- type: type === "text" ? "text" : "text",
179
- content: text,
180
- });
181
- }
182
- }
183
- }
184
- messages.push({ role: role, parts });
185
- }
186
- }
187
- // Drop trailing assistant messages — these are prefills (e.g. `{`) injected
188
- // by the app to coerce JSON output, not real conversation turns.
189
- while (messages.length > 0 &&
190
- messages[messages.length - 1].role === "assistant") {
191
- messages.pop();
192
- }
193
- return messages.length > 0 ? messages : undefined;
194
- }
195
- function extractOutputMessages(attrs) {
196
- const messages = [];
197
- const indices = new Set();
198
- for (const key of Object.keys(attrs)) {
199
- const match = key.match(/^llm\.output_messages\.(\d+)\./);
200
- if (match && match[1]) {
201
- indices.add(parseInt(match[1], 10));
202
- }
203
- }
204
- for (const idx of Array.from(indices).sort((a, b) => a - b)) {
205
- const role = attrs[`llm.output_messages.${idx}.message.role`];
206
- const content = attrs[`llm.output_messages.${idx}.message.content`];
207
- if (role) {
208
- const parts = [];
209
- if (content) {
210
- parts.push({ type: "text", content });
211
- }
212
- else {
213
- // Structured content (e.g. Anthropic OI instrumentor): llm.output_messages.{i}.message.contents.{j}.message_content.text
214
- const contentIndices = new Set();
215
- for (const key of Object.keys(attrs)) {
216
- const m = key.match(new RegExp(`^llm\\.output_messages\\.${idx}\\.message\\.contents\\.(\\d+)\\.`));
217
- if (m && m[1])
218
- contentIndices.add(parseInt(m[1], 10));
219
- }
220
- for (const cIdx of Array.from(contentIndices).sort((a, b) => a - b)) {
221
- const prefix = `llm.output_messages.${idx}.message.contents.${cIdx}`;
222
- const rawText = attrs[`${prefix}.message_content.text`] ??
223
- attrs[`${prefix}.message.content.text`];
224
- if (rawText) {
225
- parts.push({ type: "text", content: rawText });
226
- }
227
- }
228
- }
229
- const toolCallIndices = new Set();
230
- for (const key of Object.keys(attrs)) {
231
- const match = key.match(new RegExp(`^llm\\.output_messages\\.${idx}\\.message\\.tool_calls\\.(\\d+)\\.`));
232
- if (match && match[1]) {
233
- toolCallIndices.add(parseInt(match[1], 10));
234
- }
235
- }
236
- for (const tcIdx of Array.from(toolCallIndices).sort((a, b) => a - b)) {
237
- const prefix = `llm.output_messages.${idx}.message.tool_calls.${tcIdx}.tool_call`;
238
- const toolName = attrs[`${prefix}.function.name`];
239
- const toolArgs = attrs[`${prefix}.function.arguments`];
240
- const toolId = attrs[`${prefix}.id`];
241
- if (toolName === "submit_response" && toolArgs) {
242
- // Extract thinking and response from submit_response tool call
243
- try {
244
- const parsed = JSON.parse(toolArgs);
245
- if (typeof parsed.thinking === "string" && parsed.thinking) {
246
- const reasoningPart = {
247
- type: "reasoning",
248
- content: parsed.thinking,
249
- };
250
- parts.push(reasoningPart);
251
- }
252
- if (typeof parsed.response === "string" && parsed.response) {
253
- parts.push({ type: "text", content: parsed.response });
254
- }
255
- }
256
- catch {
257
- // Fall back to raw tool_call if JSON parse fails
258
- parts.push({
259
- type: "tool_call",
260
- name: toolName,
261
- arguments: toolArgs,
262
- id: toolId,
263
- });
264
- }
265
- }
266
- else if (toolName) {
267
- parts.push({
268
- type: "tool_call",
269
- name: toolName,
270
- arguments: toolArgs,
271
- id: toolId,
272
- });
273
- }
274
- }
275
- messages.push({ role: role, parts });
276
- }
277
- }
278
- // Fallback: if no llm.output_messages.* found, construct from output.value
279
- if (messages.length === 0) {
280
- const outputValue = attrs[OI.OUTPUT_VALUE];
281
- if (typeof outputValue === "string" && outputValue) {
282
- messages.push({
283
- role: "assistant",
284
- parts: [{ type: "text", content: outputValue }],
285
- });
286
- }
287
- }
288
- return messages.length > 0 ? messages : undefined;
289
- }
290
- /**
291
- * Convert OpenInference span attributes to camelCase {@link GenAiAttributes}.
292
- *
293
- * Extracts `llm.*`, `tool.*`, and `output.*` keys and maps them to the
294
- * corresponding Gen AI semantic convention fields.
295
- *
296
- * @param attrs - Raw OTel {@link Attributes} from an OpenInference span.
297
- * @returns A {@link GenAiAttributes} object with all recognised fields populated.
298
- *
299
- * @example
300
- * ```ts
301
- * const genAi = convertOpenInferenceToGenAI(span.attributes);
302
- * console.log(genAi.requestModel); // e.g. "gpt-4"
303
- * ```
304
- */
305
- export function convertOpenInferenceToGenAI(attrs) {
306
- if (!attrs)
307
- return {};
308
- const result = {};
309
- const model = extractModel(attrs);
310
- if (model)
311
- result.requestModel = model;
312
- const providerName = extractSystem(attrs);
313
- if (providerName)
314
- result.providerName = providerName;
315
- const responseId = extractResponseId(attrs);
316
- if (responseId)
317
- result.responseId = responseId;
318
- const tokens = extractTokenCounts(attrs);
319
- if (tokens.input !== undefined)
320
- result.inputTokens = tokens.input;
321
- if (tokens.output !== undefined)
322
- result.outputTokens = tokens.output;
323
- if (tokens.cacheCreation !== undefined)
324
- result.cacheCreationInputTokens = tokens.cacheCreation;
325
- if (tokens.cacheRead !== undefined)
326
- result.cacheReadInputTokens = tokens.cacheRead;
327
- const sysInstr = extractSystemInstructions(attrs);
328
- if (sysInstr)
329
- result.systemInstructions = sysInstr;
330
- const toolDefs = extractToolDefinitions(attrs);
331
- if (toolDefs)
332
- result.toolDefinitions = toolDefs;
333
- const inputMsgs = extractInputMessages(attrs);
334
- if (inputMsgs)
335
- result.inputMessages = inputMsgs;
336
- const outputMsgs = extractOutputMessages(attrs);
337
- if (outputMsgs)
338
- result.outputMessages = outputMsgs;
339
- // Default operation name to "chat" for LLM spans so the frontend can display them
340
- const spanKind = attrs["openinference.span.kind"];
341
- if (spanKind === "LLM" && !attrs["gen_ai.operation.name"]) {
342
- result.operationName = "chat";
343
- }
344
- return result;
345
- }
346
- /**
347
- * Replace all OpenInference `llm.*` / `tool.*` / `output.*` attributes with
348
- * their `gen_ai.*` equivalents, preserving every other attribute unchanged.
349
- *
350
- * @param attrs - Raw OTel {@link Attributes} that may contain OpenInference keys.
351
- * @returns A new {@link Attributes} dictionary with OpenInference keys replaced.
352
- *
353
- * @example
354
- * ```ts
355
- * const converted = replaceOpenInferenceWithGenAI(span.attributes);
356
- * // converted["gen_ai.request.model"] is set; "llm.model_name" is removed
357
- * ```
358
- */
359
- export function replaceOpenInferenceWithGenAI(attrs) {
360
- if (!attrs)
361
- return {};
362
- const genaiAttrs = convertOpenInferenceToGenAI(attrs);
363
- const result = {};
364
- for (const [key, value] of Object.entries(attrs)) {
365
- if (!key.startsWith("llm.") &&
366
- !key.startsWith("tool.") &&
367
- !key.startsWith("output.")) {
368
- result[key] = value;
369
- }
370
- }
371
- const genaiOtelAttrs = toAttributes(genaiAttrs);
372
- for (const [key, value] of Object.entries(genaiOtelAttrs)) {
373
- result[key] = value;
374
- }
375
- return result;
376
- }
377
- // ---------------------------------------------------------------------------
378
- // GenAI → OpenInference (reverse direction)
379
- // ---------------------------------------------------------------------------
380
- function flattenGenAIMessages(attrs, srcKey, prefix) {
381
- const raw = attrs[srcKey];
382
- if (!raw || typeof raw !== "string")
383
- return;
384
- try {
385
- const messages = JSON.parse(raw);
386
- if (!Array.isArray(messages))
387
- return;
388
- messages.forEach((msg, i) => {
389
- if (msg.role) {
390
- attrs[`${prefix}.${i}.message.role`] = msg.role;
391
- }
392
- if (Array.isArray(msg.parts)) {
393
- const textParts = msg.parts.filter((p) => p.type === "text");
394
- if (textParts.length > 0) {
395
- attrs[`${prefix}.${i}.message.content`] = textParts
396
- .map((p) => p.content)
397
- .join("\n");
398
- }
399
- const toolCalls = msg.parts.filter((p) => p.type === "tool_call");
400
- toolCalls.forEach((tc, j) => {
401
- attrs[`${prefix}.${i}.message.tool_calls.${j}.tool_call.function.name`] = tc.name;
402
- attrs[`${prefix}.${i}.message.tool_calls.${j}.tool_call.function.arguments`] =
403
- typeof tc.arguments === "string"
404
- ? tc.arguments
405
- : JSON.stringify(tc.arguments);
406
- if (tc.id) {
407
- attrs[`${prefix}.${i}.message.tool_calls.${j}.tool_call.id`] =
408
- tc.id;
409
- }
410
- });
411
- }
412
- if (typeof msg.content === "string") {
413
- attrs[`${prefix}.${i}.message.content`] = msg.content;
414
- }
415
- });
416
- }
417
- catch {
418
- // ignore parse errors
419
- }
420
- }
421
- /**
422
- * Enrich a {@link ReadableSpan} with OpenInference attributes derived from its
423
- * `gen_ai.*` attributes.
424
- *
425
- * Use this when exporting Mastra traces to Arize / Phoenix, which expects
426
- * OpenInference conventions (`openinference.span.kind`, `llm.model_name`,
427
- * flattened `llm.input_messages.N.message.role`, token counts, etc.).
428
- *
429
- * @param span - The OTel {@link ReadableSpan} to enrich.
430
- * @returns A shallow copy of the span with additional OpenInference attributes.
431
- *
432
- * @example
433
- * ```ts
434
- * const enriched = addOpenInferenceAttributes(span);
435
- * exporter.export([enriched], cb);
436
- * ```
437
- */
438
- export function addOpenInferenceAttributes(span) {
439
- const attrs = { ...span.attributes };
440
- const spanType = attrs["mastra.span.type"];
441
- switch (spanType) {
442
- case "MODEL_GENERATION":
443
- attrs["openinference.span.kind"] = "LLM";
444
- break;
445
- case "AGENT_RUN":
446
- attrs["openinference.span.kind"] = "CHAIN";
447
- break;
448
- case "TOOL_CALL":
449
- case "MCP_TOOL_CALL":
450
- attrs["openinference.span.kind"] = "TOOL";
451
- break;
452
- }
453
- if (attrs["gen_ai.request.model"]) {
454
- attrs[OI.MODEL_NAME] = attrs["gen_ai.request.model"];
455
- }
456
- if (attrs["gen_ai.provider.name"]) {
457
- attrs["llm.provider"] = attrs["gen_ai.provider.name"];
458
- }
459
- const inputTokens = attrs["gen_ai.usage.input_tokens"];
460
- const outputTokens = attrs["gen_ai.usage.output_tokens"];
461
- if (inputTokens !== undefined) {
462
- attrs[OI.TOKEN_COUNT_PROMPT] = inputTokens;
463
- }
464
- if (outputTokens !== undefined) {
465
- attrs[OI.TOKEN_COUNT_COMPLETION] = outputTokens;
466
- }
467
- if (inputTokens !== undefined && outputTokens !== undefined) {
468
- attrs[OI.TOKEN_COUNT_TOTAL] = inputTokens + outputTokens;
469
- }
470
- const params = {};
471
- if (attrs["gen_ai.request.temperature"] !== undefined)
472
- params.temperature = attrs["gen_ai.request.temperature"];
473
- if (attrs["gen_ai.request.max_tokens"] !== undefined)
474
- params.max_tokens = attrs["gen_ai.request.max_tokens"];
475
- if (attrs["gen_ai.request.top_p"] !== undefined)
476
- params.top_p = attrs["gen_ai.request.top_p"];
477
- if (Object.keys(params).length > 0) {
478
- attrs[OI.INVOCATION_PARAMETERS] = JSON.stringify(params);
479
- }
480
- flattenGenAIMessages(attrs, "gen_ai.input.messages", OI.INPUT_MESSAGES);
481
- flattenGenAIMessages(attrs, "gen_ai.output.messages", OI.OUTPUT_MESSAGES);
482
- if (attrs["mastra.agent_run.input"]) {
483
- attrs["input.value"] = attrs["mastra.agent_run.input"];
484
- }
485
- if (attrs["mastra.agent_run.output"]) {
486
- attrs[OI.OUTPUT_VALUE] = attrs["mastra.agent_run.output"];
487
- }
488
- if (attrs["gen_ai.tool.name"]) {
489
- attrs[OI.TOOL_NAME] = attrs["gen_ai.tool.name"];
490
- }
491
- if (attrs["gen_ai.tool.description"]) {
492
- attrs[OI.TOOL_DESCRIPTION] = attrs["gen_ai.tool.description"];
493
- }
494
- if (attrs["gen_ai.tool.call.arguments"]) {
495
- attrs["input.value"] = attrs["gen_ai.tool.call.arguments"];
496
- }
497
- if (attrs["gen_ai.tool.call.result"]) {
498
- attrs[OI.OUTPUT_VALUE] = attrs["gen_ai.tool.call.result"];
499
- }
500
- return {
501
- ...span,
502
- attributes: attrs,
503
- spanContext: span.spanContext,
504
- };
505
- }
506
- /**
507
- * {@link SpanExporter} wrapper that enriches every span with OpenInference
508
- * attributes before forwarding it to the inner exporter.
509
- *
510
- * Use this when exporting Mastra / `gen_ai` traces to Arize or Phoenix.
511
- *
512
- * @example
513
- * ```ts
514
- * const otlp = new OTLPTraceExporter({ url: "https://otlp.arize.com/v1/traces" });
515
- * const exporter = new OpenInferenceSpanExporter(otlp);
516
- * provider.addSpanProcessor(new BatchSpanProcessor(exporter));
517
- * ```
518
- */
519
- export class OpenInferenceSpanExporter {
520
- inner;
521
- /**
522
- * @param inner - The downstream {@link SpanExporter} to forward enriched spans to.
523
- */
524
- constructor(inner) {
525
- this.inner = inner;
526
- }
527
- /**
528
- * Enrich each span with OpenInference attributes, then forward the batch.
529
- *
530
- * @param spans - Completed spans to export.
531
- * @param resultCallback - Callback invoked with the export result code.
532
- */
533
- export(spans, resultCallback) {
534
- this.inner.export(spans.map(addOpenInferenceAttributes), resultCallback);
535
- }
536
- /**
537
- * Shut down the inner exporter.
538
- *
539
- * @returns A promise that resolves when the inner exporter has shut down.
540
- */
541
- async shutdown() {
542
- return this.inner.shutdown();
543
- }
544
- /**
545
- * Flush any buffered spans in the inner exporter.
546
- *
547
- * @returns A promise that resolves when the flush completes.
548
- */
549
- async forceFlush() {
550
- return this.inner.forceFlush?.();
551
- }
552
- }
553
- //# sourceMappingURL=openinference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openinference.js","sourceRoot":"","sources":["../../src/converters/openinference.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Converter for Vercel AI SDK telemetry spans → Gen AI semantic conventions.
3
- *
4
- * The Vercel AI SDK emits spans with `ai.*` attributes when
5
- * `experimental_telemetry: { isEnabled: true }` is set on streamText/generateText.
6
- * This converter translates those to `gen_ai.*` so the Introspection frontend
7
- * can render them in the conversation view.
8
- */
9
- import type { Attributes } from "@opentelemetry/api";
10
- /** Check if a span is a Vercel AI SDK span worth converting.
11
- * Only converts child "do*" spans (doStream, doGenerate) which have
12
- * the actual prompt/response data with proper message windows.
13
- * Parent wrapper spans (ai.streamText, ai.generateText) are skipped
14
- * to avoid duplicate conversation steps without user messages. */
15
- export declare function isVercelAISpan(attrs: Attributes): boolean;
16
- /**
17
- * Convert Vercel AI SDK `ai.*` attributes to `gen_ai.*` semconv attributes.
18
- * Returns only the gen_ai attributes to merge — does NOT remove originals.
19
- */
20
- export declare function convertVercelAIToGenAI(attrs: Attributes): Record<string, unknown>;
21
- //# sourceMappingURL=vercel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/converters/vercel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiDrD;;;;kEAIkE;AAClE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGzD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkJzB"}