@@ -13,14 +13,14 @@ describe('Vercel AI integration', () => {
13
13
// First span - no telemetry config, should enable telemetry but not record inputs/outputs when sendDefaultPii: false
14
14
expect . objectContaining ( {
15
15
data : {
16
- 'ai.model.id' : 'mock-model-id' ,
17
- 'ai.model.provider' : 'mock-provider' ,
18
- 'ai.operationId' : 'ai.generateText' ,
19
- 'ai.pipeline.name' : 'generateText' ,
20
- 'ai.response.finishReason' : 'stop' ,
21
- 'ai.settings.maxRetries' : 2 ,
22
- 'ai.settings.maxSteps' : 1 ,
23
- 'ai.streaming' : false ,
16
+ 'vercel. ai.model.id' : 'mock-model-id' ,
17
+ 'vercel. ai.model.provider' : 'mock-provider' ,
18
+ 'vercel. ai.operationId' : 'ai.generateText' ,
19
+ 'vercel. ai.pipeline.name' : 'generateText' ,
20
+ 'vercel. ai.response.finishReason' : 'stop' ,
21
+ 'vercel. ai.settings.maxRetries' : 2 ,
22
+ 'vercel. ai.settings.maxSteps' : 1 ,
23
+ 'vercel. ai.streaming' : false ,
24
24
'gen_ai.response.model' : 'mock-model-id' ,
25
25
'gen_ai.usage.input_tokens' : 10 ,
26
26
'gen_ai.usage.output_tokens' : 20 ,
@@ -40,18 +40,18 @@ describe('Vercel AI integration', () => {
40
40
'sentry.origin' : 'auto.vercelai.otel' ,
41
41
'sentry.op' : 'gen_ai.generate_text' ,
42
42
'operation.name' : 'ai.generateText.doGenerate' ,
43
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
44
- 'ai.model.provider' : 'mock-provider' ,
45
- 'ai.model.id' : 'mock-model-id' ,
46
- 'ai.settings.maxRetries' : 2 ,
43
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
44
+ 'vercel. ai.model.provider' : 'mock-provider' ,
45
+ 'vercel. ai.model.id' : 'mock-model-id' ,
46
+ 'vercel. ai.settings.maxRetries' : 2 ,
47
47
'gen_ai.system' : 'mock-provider' ,
48
48
'gen_ai.request.model' : 'mock-model-id' ,
49
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
50
- 'ai.streaming' : false ,
51
- 'ai.response.finishReason' : 'stop' ,
52
- 'ai.response.model' : 'mock-model-id' ,
53
- 'ai.response.id' : expect . any ( String ) ,
54
- 'ai.response.timestamp' : expect . any ( String ) ,
49
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
50
+ 'vercel. ai.streaming' : false ,
51
+ 'vercel. ai.response.finishReason' : 'stop' ,
52
+ 'vercel. ai.response.model' : 'mock-model-id' ,
53
+ 'vercel. ai.response.id' : expect . any ( String ) ,
54
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
55
55
'gen_ai.response.finish_reasons' : [ 'stop' ] ,
56
56
'gen_ai.usage.input_tokens' : 10 ,
57
57
'gen_ai.usage.output_tokens' : 20 ,
@@ -67,16 +67,16 @@ describe('Vercel AI integration', () => {
67
67
// Third span - explicit telemetry enabled, should record inputs/outputs regardless of sendDefaultPii
68
68
expect . objectContaining ( {
69
69
data : {
70
- 'ai.model.id' : 'mock-model-id' ,
71
- 'ai.model.provider' : 'mock-provider' ,
72
- 'ai.operationId' : 'ai.generateText' ,
73
- 'ai.pipeline.name' : 'generateText' ,
74
- 'ai.prompt' : '{"prompt":"Where is the second span?"}' ,
75
- 'ai.response.finishReason' : 'stop' ,
70
+ 'vercel. ai.model.id' : 'mock-model-id' ,
71
+ 'vercel. ai.model.provider' : 'mock-provider' ,
72
+ 'vercel. ai.operationId' : 'ai.generateText' ,
73
+ 'vercel. ai.pipeline.name' : 'generateText' ,
74
+ 'vercel. ai.prompt' : '{"prompt":"Where is the second span?"}' ,
75
+ 'vercel. ai.response.finishReason' : 'stop' ,
76
76
'gen_ai.response.text' : expect . any ( String ) ,
77
- 'ai.settings.maxRetries' : 2 ,
78
- 'ai.settings.maxSteps' : 1 ,
79
- 'ai.streaming' : false ,
77
+ 'vercel. ai.settings.maxRetries' : 2 ,
78
+ 'vercel. ai.settings.maxSteps' : 1 ,
79
+ 'vercel. ai.streaming' : false ,
80
80
'gen_ai.prompt' : '{"prompt":"Where is the second span?"}' ,
81
81
'gen_ai.response.model' : 'mock-model-id' ,
82
82
'gen_ai.usage.input_tokens' : 10 ,
@@ -97,20 +97,20 @@ describe('Vercel AI integration', () => {
97
97
'sentry.origin' : 'auto.vercelai.otel' ,
98
98
'sentry.op' : 'gen_ai.generate_text' ,
99
99
'operation.name' : 'ai.generateText.doGenerate' ,
100
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
101
- 'ai.model.provider' : 'mock-provider' ,
102
- 'ai.model.id' : 'mock-model-id' ,
103
- 'ai.settings.maxRetries' : 2 ,
100
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
101
+ 'vercel. ai.model.provider' : 'mock-provider' ,
102
+ 'vercel. ai.model.id' : 'mock-model-id' ,
103
+ 'vercel. ai.settings.maxRetries' : 2 ,
104
104
'gen_ai.system' : 'mock-provider' ,
105
105
'gen_ai.request.model' : 'mock-model-id' ,
106
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
107
- 'ai.streaming' : false ,
108
- 'ai.response.finishReason' : 'stop' ,
109
- 'ai.response.model' : 'mock-model-id' ,
110
- 'ai.response.id' : expect . any ( String ) ,
106
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
107
+ 'vercel. ai.streaming' : false ,
108
+ 'vercel. ai.response.finishReason' : 'stop' ,
109
+ 'vercel. ai.response.model' : 'mock-model-id' ,
110
+ 'vercel. ai.response.id' : expect . any ( String ) ,
111
111
'gen_ai.response.text' : expect . any ( String ) ,
112
- 'ai.response.timestamp' : expect . any ( String ) ,
113
- 'ai.prompt.format' : expect . any ( String ) ,
112
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
113
+ 'vercel. ai.prompt.format' : expect . any ( String ) ,
114
114
'gen_ai.request.messages' : expect . any ( String ) ,
115
115
'gen_ai.response.finish_reasons' : [ 'stop' ] ,
116
116
'gen_ai.usage.input_tokens' : 10 ,
@@ -127,14 +127,14 @@ describe('Vercel AI integration', () => {
127
127
// Fifth span - tool call generateText span
128
128
expect . objectContaining ( {
129
129
data : {
130
- 'ai.model.id' : 'mock-model-id' ,
131
- 'ai.model.provider' : 'mock-provider' ,
132
- 'ai.operationId' : 'ai.generateText' ,
133
- 'ai.pipeline.name' : 'generateText' ,
134
- 'ai.response.finishReason' : 'tool-calls' ,
135
- 'ai.settings.maxRetries' : 2 ,
136
- 'ai.settings.maxSteps' : 1 ,
137
- 'ai.streaming' : false ,
130
+ 'vercel. ai.model.id' : 'mock-model-id' ,
131
+ 'vercel. ai.model.provider' : 'mock-provider' ,
132
+ 'vercel. ai.operationId' : 'ai.generateText' ,
133
+ 'vercel. ai.pipeline.name' : 'generateText' ,
134
+ 'vercel. ai.response.finishReason' : 'tool-calls' ,
135
+ 'vercel. ai.settings.maxRetries' : 2 ,
136
+ 'vercel. ai.settings.maxSteps' : 1 ,
137
+ 'vercel. ai.streaming' : false ,
138
138
'gen_ai.response.model' : 'mock-model-id' ,
139
139
'gen_ai.usage.input_tokens' : 15 ,
140
140
'gen_ai.usage.output_tokens' : 25 ,
@@ -151,16 +151,16 @@ describe('Vercel AI integration', () => {
151
151
// Sixth span - tool call doGenerate span
152
152
expect . objectContaining ( {
153
153
data : {
154
- 'ai.model.id' : 'mock-model-id' ,
155
- 'ai.model.provider' : 'mock-provider' ,
156
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
157
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
158
- 'ai.response.finishReason' : 'tool-calls' ,
159
- 'ai.response.id' : expect . any ( String ) ,
160
- 'ai.response.model' : 'mock-model-id' ,
161
- 'ai.response.timestamp' : expect . any ( String ) ,
162
- 'ai.settings.maxRetries' : 2 ,
163
- 'ai.streaming' : false ,
154
+ 'vercel. ai.model.id' : 'mock-model-id' ,
155
+ 'vercel. ai.model.provider' : 'mock-provider' ,
156
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
157
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
158
+ 'vercel. ai.response.finishReason' : 'tool-calls' ,
159
+ 'vercel. ai.response.id' : expect . any ( String ) ,
160
+ 'vercel. ai.response.model' : 'mock-model-id' ,
161
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
162
+ 'vercel. ai.settings.maxRetries' : 2 ,
163
+ 'vercel. ai.streaming' : false ,
164
164
'gen_ai.request.model' : 'mock-model-id' ,
165
165
'gen_ai.response.finish_reasons' : [ 'tool-calls' ] ,
166
166
'gen_ai.response.id' : expect . any ( String ) ,
@@ -181,7 +181,7 @@ describe('Vercel AI integration', () => {
181
181
// Seventh span - tool call execution span
182
182
expect . objectContaining ( {
183
183
data : {
184
- 'ai.operationId' : 'ai.toolCall' ,
184
+ 'vercel. ai.operationId' : 'ai.toolCall' ,
185
185
'gen_ai.tool.call.id' : 'call-1' ,
186
186
'gen_ai.tool.name' : 'getWeather' ,
187
187
'gen_ai.tool.type' : 'function' ,
@@ -203,16 +203,16 @@ describe('Vercel AI integration', () => {
203
203
// First span - no telemetry config, should enable telemetry AND record inputs/outputs when sendDefaultPii: true
204
204
expect . objectContaining ( {
205
205
data : {
206
- 'ai.model.id' : 'mock-model-id' ,
207
- 'ai.model.provider' : 'mock-provider' ,
208
- 'ai.operationId' : 'ai.generateText' ,
209
- 'ai.pipeline.name' : 'generateText' ,
210
- 'ai.prompt' : '{"prompt":"Where is the first span?"}' ,
211
- 'ai.response.finishReason' : 'stop' ,
206
+ 'vercel. ai.model.id' : 'mock-model-id' ,
207
+ 'vercel. ai.model.provider' : 'mock-provider' ,
208
+ 'vercel. ai.operationId' : 'ai.generateText' ,
209
+ 'vercel. ai.pipeline.name' : 'generateText' ,
210
+ 'vercel. ai.prompt' : '{"prompt":"Where is the first span?"}' ,
211
+ 'vercel. ai.response.finishReason' : 'stop' ,
212
212
'gen_ai.response.text' : 'First span here!' ,
213
- 'ai.settings.maxRetries' : 2 ,
214
- 'ai.settings.maxSteps' : 1 ,
215
- 'ai.streaming' : false ,
213
+ 'vercel. ai.settings.maxRetries' : 2 ,
214
+ 'vercel. ai.settings.maxSteps' : 1 ,
215
+ 'vercel. ai.streaming' : false ,
216
216
'gen_ai.prompt' : '{"prompt":"Where is the first span?"}' ,
217
217
'gen_ai.response.model' : 'mock-model-id' ,
218
218
'gen_ai.usage.input_tokens' : 10 ,
@@ -230,19 +230,19 @@ describe('Vercel AI integration', () => {
230
230
// Second span - doGenerate for first call, should also include input/output fields when sendDefaultPii: true
231
231
expect . objectContaining ( {
232
232
data : {
233
- 'ai.model.id' : 'mock-model-id' ,
234
- 'ai.model.provider' : 'mock-provider' ,
235
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
236
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
237
- 'ai.prompt.format' : 'prompt' ,
233
+ 'vercel. ai.model.id' : 'mock-model-id' ,
234
+ 'vercel. ai.model.provider' : 'mock-provider' ,
235
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
236
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
237
+ 'vercel. ai.prompt.format' : 'prompt' ,
238
238
'gen_ai.request.messages' : '[{"role":"user","content":[{"type":"text","text":"Where is the first span?"}]}]' ,
239
- 'ai.response.finishReason' : 'stop' ,
240
- 'ai.response.id' : expect . any ( String ) ,
241
- 'ai.response.model' : 'mock-model-id' ,
239
+ 'vercel. ai.response.finishReason' : 'stop' ,
240
+ 'vercel. ai.response.id' : expect . any ( String ) ,
241
+ 'vercel. ai.response.model' : 'mock-model-id' ,
242
242
'gen_ai.response.text' : 'First span here!' ,
243
- 'ai.response.timestamp' : expect . any ( String ) ,
244
- 'ai.settings.maxRetries' : 2 ,
245
- 'ai.streaming' : false ,
243
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
244
+ 'vercel. ai.settings.maxRetries' : 2 ,
245
+ 'vercel. ai.streaming' : false ,
246
246
'gen_ai.request.model' : 'mock-model-id' ,
247
247
'gen_ai.response.finish_reasons' : [ 'stop' ] ,
248
248
'gen_ai.response.id' : expect . any ( String ) ,
@@ -263,16 +263,16 @@ describe('Vercel AI integration', () => {
263
263
// Third span - explicitly enabled telemetry, should record inputs/outputs regardless of sendDefaultPii
264
264
expect . objectContaining ( {
265
265
data : {
266
- 'ai.model.id' : 'mock-model-id' ,
267
- 'ai.model.provider' : 'mock-provider' ,
268
- 'ai.operationId' : 'ai.generateText' ,
269
- 'ai.pipeline.name' : 'generateText' ,
270
- 'ai.prompt' : '{"prompt":"Where is the second span?"}' ,
271
- 'ai.response.finishReason' : 'stop' ,
266
+ 'vercel. ai.model.id' : 'mock-model-id' ,
267
+ 'vercel. ai.model.provider' : 'mock-provider' ,
268
+ 'vercel. ai.operationId' : 'ai.generateText' ,
269
+ 'vercel. ai.pipeline.name' : 'generateText' ,
270
+ 'vercel. ai.prompt' : '{"prompt":"Where is the second span?"}' ,
271
+ 'vercel. ai.response.finishReason' : 'stop' ,
272
272
'gen_ai.response.text' : expect . any ( String ) ,
273
- 'ai.settings.maxRetries' : 2 ,
274
- 'ai.settings.maxSteps' : 1 ,
275
- 'ai.streaming' : false ,
273
+ 'vercel. ai.settings.maxRetries' : 2 ,
274
+ 'vercel. ai.settings.maxSteps' : 1 ,
275
+ 'vercel. ai.streaming' : false ,
276
276
'gen_ai.prompt' : '{"prompt":"Where is the second span?"}' ,
277
277
'gen_ai.response.model' : 'mock-model-id' ,
278
278
'gen_ai.usage.input_tokens' : 10 ,
@@ -293,20 +293,20 @@ describe('Vercel AI integration', () => {
293
293
'sentry.origin' : 'auto.vercelai.otel' ,
294
294
'sentry.op' : 'gen_ai.generate_text' ,
295
295
'operation.name' : 'ai.generateText.doGenerate' ,
296
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
297
- 'ai.model.provider' : 'mock-provider' ,
298
- 'ai.model.id' : 'mock-model-id' ,
299
- 'ai.settings.maxRetries' : 2 ,
296
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
297
+ 'vercel. ai.model.provider' : 'mock-provider' ,
298
+ 'vercel. ai.model.id' : 'mock-model-id' ,
299
+ 'vercel. ai.settings.maxRetries' : 2 ,
300
300
'gen_ai.system' : 'mock-provider' ,
301
301
'gen_ai.request.model' : 'mock-model-id' ,
302
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
303
- 'ai.streaming' : false ,
304
- 'ai.response.finishReason' : 'stop' ,
305
- 'ai.response.model' : 'mock-model-id' ,
306
- 'ai.response.id' : expect . any ( String ) ,
302
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
303
+ 'vercel. ai.streaming' : false ,
304
+ 'vercel. ai.response.finishReason' : 'stop' ,
305
+ 'vercel. ai.response.model' : 'mock-model-id' ,
306
+ 'vercel. ai.response.id' : expect . any ( String ) ,
307
307
'gen_ai.response.text' : expect . any ( String ) ,
308
- 'ai.response.timestamp' : expect . any ( String ) ,
309
- 'ai.prompt.format' : expect . any ( String ) ,
308
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
309
+ 'vercel. ai.prompt.format' : expect . any ( String ) ,
310
310
'gen_ai.request.messages' : expect . any ( String ) ,
311
311
'gen_ai.response.finish_reasons' : [ 'stop' ] ,
312
312
'gen_ai.usage.input_tokens' : 10 ,
@@ -323,17 +323,17 @@ describe('Vercel AI integration', () => {
323
323
// Fifth span - tool call generateText span (should include prompts when sendDefaultPii: true)
324
324
expect . objectContaining ( {
325
325
data : {
326
- 'ai.model.id' : 'mock-model-id' ,
327
- 'ai.model.provider' : 'mock-provider' ,
328
- 'ai.operationId' : 'ai.generateText' ,
329
- 'ai.pipeline.name' : 'generateText' ,
330
- 'ai.prompt' : '{"prompt":"What is the weather in San Francisco?"}' ,
331
- 'ai.response.finishReason' : 'tool-calls' ,
326
+ 'vercel. ai.model.id' : 'mock-model-id' ,
327
+ 'vercel. ai.model.provider' : 'mock-provider' ,
328
+ 'vercel. ai.operationId' : 'ai.generateText' ,
329
+ 'vercel. ai.pipeline.name' : 'generateText' ,
330
+ 'vercel. ai.prompt' : '{"prompt":"What is the weather in San Francisco?"}' ,
331
+ 'vercel. ai.response.finishReason' : 'tool-calls' ,
332
332
'gen_ai.response.text' : 'Tool call completed!' ,
333
333
'gen_ai.response.tool_calls' : expect . any ( String ) ,
334
- 'ai.settings.maxRetries' : 2 ,
335
- 'ai.settings.maxSteps' : 1 ,
336
- 'ai.streaming' : false ,
334
+ 'vercel. ai.settings.maxRetries' : 2 ,
335
+ 'vercel. ai.settings.maxSteps' : 1 ,
336
+ 'vercel. ai.streaming' : false ,
337
337
'gen_ai.prompt' : '{"prompt":"What is the weather in San Francisco?"}' ,
338
338
'gen_ai.response.model' : 'mock-model-id' ,
339
339
'gen_ai.usage.input_tokens' : 15 ,
@@ -351,22 +351,22 @@ describe('Vercel AI integration', () => {
351
351
// Sixth span - tool call doGenerate span (should include prompts when sendDefaultPii: true)
352
352
expect . objectContaining ( {
353
353
data : {
354
- 'ai.model.id' : 'mock-model-id' ,
355
- 'ai.model.provider' : 'mock-provider' ,
356
- 'ai.operationId' : 'ai.generateText.doGenerate' ,
357
- 'ai.pipeline.name' : 'generateText.doGenerate' ,
358
- 'ai.prompt.format' : expect . any ( String ) ,
354
+ 'vercel. ai.model.id' : 'mock-model-id' ,
355
+ 'vercel. ai.model.provider' : 'mock-provider' ,
356
+ 'vercel. ai.operationId' : 'ai.generateText.doGenerate' ,
357
+ 'vercel. ai.pipeline.name' : 'generateText.doGenerate' ,
358
+ 'vercel. ai.prompt.format' : expect . any ( String ) ,
359
359
'gen_ai.request.messages' : expect . any ( String ) ,
360
- 'ai.prompt.toolChoice' : expect . any ( String ) ,
360
+ 'vercel. ai.prompt.toolChoice' : expect . any ( String ) ,
361
361
'gen_ai.request.available_tools' : expect . any ( Array ) ,
362
- 'ai.response.finishReason' : 'tool-calls' ,
363
- 'ai.response.id' : expect . any ( String ) ,
364
- 'ai.response.model' : 'mock-model-id' ,
362
+ 'vercel. ai.response.finishReason' : 'tool-calls' ,
363
+ 'vercel. ai.response.id' : expect . any ( String ) ,
364
+ 'vercel. ai.response.model' : 'mock-model-id' ,
365
365
'gen_ai.response.text' : 'Tool call completed!' ,
366
- 'ai.response.timestamp' : expect . any ( String ) ,
366
+ 'vercel. ai.response.timestamp' : expect . any ( String ) ,
367
367
'gen_ai.response.tool_calls' : expect . any ( String ) ,
368
- 'ai.settings.maxRetries' : 2 ,
369
- 'ai.streaming' : false ,
368
+ 'vercel. ai.settings.maxRetries' : 2 ,
369
+ 'vercel. ai.streaming' : false ,
370
370
'gen_ai.request.model' : 'mock-model-id' ,
371
371
'gen_ai.response.finish_reasons' : [ 'tool-calls' ] ,
372
372
'gen_ai.response.id' : expect . any ( String ) ,
@@ -387,7 +387,7 @@ describe('Vercel AI integration', () => {
387
387
// Seventh span - tool call execution span
388
388
expect . objectContaining ( {
389
389
data : {
390
- 'ai.operationId' : 'ai.toolCall' ,
390
+ 'vercel. ai.operationId' : 'ai.toolCall' ,
391
391
'gen_ai.tool.call.id' : 'call-1' ,
392
392
'gen_ai.tool.name' : 'getWeather' ,
393
393
'gen_ai.tool.input' : expect . any ( String ) ,
0 commit comments