langwatch 0.1.1 → 0.1.3

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/utils.js CHANGED
@@ -158,6 +158,9 @@ function convertUint8ArrayToBase64(array) {
158
158
  return globalThis.btoa(latin1string);
159
159
  }
160
160
 
161
+ // src/utils.ts
162
+ var import_zod2 = require("zod");
163
+
161
164
  // src/server/types/tracer.generated.ts
162
165
  var import_zod = require("zod");
163
166
  var chatRoleSchema = import_zod.z.union([
@@ -177,6 +180,11 @@ var toolCallSchema = import_zod.z.object({
177
180
  type: import_zod.z.string(),
178
181
  function: functionCallSchema
179
182
  });
183
+ var rAGChunkSchema = import_zod.z.object({
184
+ document_id: import_zod.z.string().optional().nullable(),
185
+ chunk_id: import_zod.z.string().optional().nullable(),
186
+ content: import_zod.z.union([import_zod.z.string(), import_zod.z.record(import_zod.z.any()), import_zod.z.array(import_zod.z.any())])
187
+ });
180
188
  var chatRichContentSchema = import_zod.z.union([
181
189
  import_zod.z.object({
182
190
  type: import_zod.z.literal("text"),
@@ -213,20 +221,25 @@ var moneySchema = import_zod.z.object({
213
221
  currency: import_zod.z.string(),
214
222
  amount: import_zod.z.number()
215
223
  });
216
- var guardrailResultSchema = import_zod.z.object({
224
+ var evaluationResultSchema = import_zod.z.object({
217
225
  status: import_zod.z.union([
218
226
  import_zod.z.literal("processed"),
219
227
  import_zod.z.literal("skipped"),
220
228
  import_zod.z.literal("error")
221
229
  ]),
222
- passed: import_zod.z.boolean(),
230
+ passed: import_zod.z.boolean().optional().nullable(),
223
231
  score: import_zod.z.number().optional().nullable(),
232
+ label: import_zod.z.string().optional().nullable(),
224
233
  details: import_zod.z.string().optional().nullable(),
225
234
  cost: moneySchema.optional().nullable()
226
235
  });
227
236
  var typedValueGuardrailResultSchema = import_zod.z.object({
228
237
  type: import_zod.z.literal("guardrail_result"),
229
- value: guardrailResultSchema
238
+ value: evaluationResultSchema
239
+ });
240
+ var typedValueEvaluationResultSchema = import_zod.z.object({
241
+ type: import_zod.z.literal("evaluation_result"),
242
+ value: evaluationResultSchema
230
243
  });
231
244
  var errorCaptureSchema = import_zod.z.object({
232
245
  has_error: import_zod.z.literal(true),
@@ -239,13 +252,26 @@ var spanMetricsSchema = import_zod.z.object({
239
252
  tokens_estimated: import_zod.z.boolean().optional().nullable(),
240
253
  cost: import_zod.z.number().optional().nullable()
241
254
  });
242
- var spanParamsSchema = import_zod.z.object({
243
- temperature: import_zod.z.number().optional(),
244
- stream: import_zod.z.boolean().optional(),
245
- functions: import_zod.z.array(import_zod.z.record(import_zod.z.any())).optional(),
246
- tools: import_zod.z.array(import_zod.z.record(import_zod.z.any())).optional(),
247
- tool_choice: import_zod.z.string().optional()
255
+ var reservedSpanParamsSchema = import_zod.z.object({
256
+ frequency_penalty: import_zod.z.number().optional().nullable(),
257
+ logit_bias: import_zod.z.record(import_zod.z.number()).optional().nullable(),
258
+ logprobs: import_zod.z.boolean().optional().nullable(),
259
+ top_logprobs: import_zod.z.number().optional().nullable(),
260
+ max_tokens: import_zod.z.number().optional().nullable(),
261
+ n: import_zod.z.number().optional().nullable(),
262
+ presence_penalty: import_zod.z.number().optional().nullable(),
263
+ seed: import_zod.z.number().optional().nullable(),
264
+ stop: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().nullable(),
265
+ stream: import_zod.z.boolean().optional().nullable(),
266
+ temperature: import_zod.z.number().optional().nullable(),
267
+ top_p: import_zod.z.number().optional().nullable(),
268
+ tools: import_zod.z.array(import_zod.z.record(import_zod.z.any())).optional().nullable(),
269
+ tool_choice: import_zod.z.union([import_zod.z.record(import_zod.z.any()), import_zod.z.string()]).optional().nullable(),
270
+ parallel_tool_calls: import_zod.z.boolean().optional().nullable(),
271
+ functions: import_zod.z.array(import_zod.z.record(import_zod.z.any())).optional().nullable(),
272
+ user: import_zod.z.string().optional().nullable()
248
273
  });
274
+ var spanParamsSchema = reservedSpanParamsSchema.and(import_zod.z.record(import_zod.z.any()));
249
275
  var spanTimestampsSchema = import_zod.z.object({
250
276
  started_at: import_zod.z.number(),
251
277
  first_token_at: import_zod.z.number().optional().nullable(),
@@ -259,13 +285,16 @@ var spanTypesSchema = import_zod.z.union([
259
285
  import_zod.z.literal("agent"),
260
286
  import_zod.z.literal("rag"),
261
287
  import_zod.z.literal("guardrail"),
288
+ import_zod.z.literal("evaluation"),
289
+ import_zod.z.literal("workflow"),
290
+ import_zod.z.literal("component"),
291
+ import_zod.z.literal("server"),
292
+ import_zod.z.literal("client"),
293
+ import_zod.z.literal("producer"),
294
+ import_zod.z.literal("consumer"),
295
+ import_zod.z.literal("task"),
262
296
  import_zod.z.literal("unknown")
263
297
  ]);
264
- var rAGChunkSchema = import_zod.z.object({
265
- document_id: import_zod.z.string().optional().nullable(),
266
- chunk_id: import_zod.z.string().optional().nullable(),
267
- content: import_zod.z.union([import_zod.z.string(), import_zod.z.record(import_zod.z.any()), import_zod.z.array(import_zod.z.any())])
268
- });
269
298
  var traceInputSchema = import_zod.z.object({
270
299
  value: import_zod.z.string(),
271
300
  embeddings: import_zod.z.object({
@@ -281,95 +310,33 @@ var traceOutputSchema = import_zod.z.object({
281
310
  embeddings: import_zod.z.array(import_zod.z.number())
282
311
  }).optional()
283
312
  });
284
- var traceSchema = import_zod.z.object({
285
- trace_id: import_zod.z.string(),
286
- project_id: import_zod.z.string(),
287
- metadata: import_zod.z.object({
288
- thread_id: import_zod.z.string().optional(),
289
- user_id: import_zod.z.string().optional(),
290
- customer_id: import_zod.z.string().optional(),
291
- labels: import_zod.z.array(import_zod.z.string()).optional(),
292
- topic_id: import_zod.z.string().optional(),
293
- subtopic_id: import_zod.z.string().optional()
294
- }),
295
- timestamps: import_zod.z.object({
296
- started_at: import_zod.z.number(),
297
- inserted_at: import_zod.z.number(),
298
- updated_at: import_zod.z.number()
299
- }),
300
- input: traceInputSchema,
301
- output: traceOutputSchema.optional(),
302
- metrics: import_zod.z.object({
303
- first_token_ms: import_zod.z.number().optional().nullable(),
304
- total_time_ms: import_zod.z.number().optional().nullable(),
305
- prompt_tokens: import_zod.z.number().optional().nullable(),
306
- completion_tokens: import_zod.z.number().optional().nullable(),
307
- total_cost: import_zod.z.number().optional().nullable(),
308
- tokens_estimated: import_zod.z.boolean().optional().nullable()
309
- }),
310
- error: errorCaptureSchema.optional().nullable(),
311
- indexing_md5s: import_zod.z.array(import_zod.z.string()).optional()
313
+ var primitiveTypeSchema = import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean(), import_zod.z.undefined()]).nullable();
314
+ var reservedTraceMetadataSchema = import_zod.z.object({
315
+ thread_id: import_zod.z.string().optional().nullable(),
316
+ user_id: import_zod.z.string().optional().nullable(),
317
+ customer_id: import_zod.z.string().optional().nullable(),
318
+ labels: import_zod.z.array(import_zod.z.string()).optional().nullable(),
319
+ topic_id: import_zod.z.string().optional().nullable(),
320
+ subtopic_id: import_zod.z.string().optional().nullable(),
321
+ sdk_version: import_zod.z.string().optional().nullable(),
322
+ sdk_language: import_zod.z.string().optional().nullable()
312
323
  });
313
- var elasticSearchTraceSchema = traceSchema.and(
314
- import_zod.z.object({
315
- timestamps: traceSchema.shape.timestamps.and(
316
- import_zod.z.object({
317
- updated_at: import_zod.z.number()
318
- })
319
- )
320
- })
324
+ var customMetadataSchema = import_zod.z.record(
325
+ import_zod.z.union([
326
+ primitiveTypeSchema,
327
+ import_zod.z.array(primitiveTypeSchema),
328
+ import_zod.z.record(primitiveTypeSchema),
329
+ import_zod.z.record(import_zod.z.record(primitiveTypeSchema))
330
+ ])
321
331
  );
322
- var traceCheckSchema = import_zod.z.object({
323
- trace_id: import_zod.z.string(),
324
- check_id: import_zod.z.string(),
325
- project_id: import_zod.z.string(),
326
- check_type: import_zod.z.string(),
327
- check_name: import_zod.z.string(),
328
- is_guardrail: import_zod.z.boolean(),
329
- status: import_zod.z.union([
330
- import_zod.z.literal("scheduled"),
331
- import_zod.z.literal("in_progress"),
332
- import_zod.z.literal("error"),
333
- import_zod.z.literal("skipped"),
334
- import_zod.z.literal("processed")
335
- ]),
336
- passed: import_zod.z.boolean().optional(),
337
- score: import_zod.z.number().optional(),
338
- details: import_zod.z.string().optional(),
339
- error: errorCaptureSchema.optional().nullable(),
340
- retries: import_zod.z.number().optional(),
341
- timestamps: import_zod.z.object({
342
- inserted_at: import_zod.z.number().optional(),
343
- started_at: import_zod.z.number().optional(),
344
- finished_at: import_zod.z.number().optional(),
345
- updated_at: import_zod.z.number()
346
- }),
347
- trace_metadata: import_zod.z.object({
348
- thread_id: import_zod.z.string().optional(),
349
- user_id: import_zod.z.string().optional(),
350
- customer_id: import_zod.z.string().optional(),
351
- labels: import_zod.z.array(import_zod.z.string()).optional(),
352
- topics: import_zod.z.array(import_zod.z.string()).optional()
353
- })
354
- });
355
- var experimentSchema = import_zod.z.object({
356
- experiment_id: import_zod.z.string(),
357
- variant: import_zod.z.number()
358
- });
332
+ var traceMetadataSchema = reservedTraceMetadataSchema.and(customMetadataSchema);
359
333
  var eventSchema = import_zod.z.object({
360
334
  event_id: import_zod.z.string(),
361
335
  event_type: import_zod.z.string(),
362
336
  project_id: import_zod.z.string(),
363
337
  metrics: import_zod.z.record(import_zod.z.number()),
364
338
  event_details: import_zod.z.record(import_zod.z.string()),
365
- trace_id: import_zod.z.string().optional(),
366
- trace_metadata: import_zod.z.object({
367
- thread_id: import_zod.z.string().optional(),
368
- user_id: import_zod.z.string().optional(),
369
- customer_id: import_zod.z.string().optional(),
370
- labels: import_zod.z.array(import_zod.z.string()).optional(),
371
- topics: import_zod.z.array(import_zod.z.string()).optional()
372
- }),
339
+ trace_id: import_zod.z.string(),
373
340
  timestamps: import_zod.z.object({
374
341
  started_at: import_zod.z.number(),
375
342
  inserted_at: import_zod.z.number(),
@@ -392,12 +359,18 @@ var elasticSearchEventSchema = eventSchema.omit({ metrics: true, event_details:
392
359
  )
393
360
  })
394
361
  );
362
+ var evaluationStatusSchema = import_zod.z.union([
363
+ import_zod.z.literal("scheduled"),
364
+ import_zod.z.literal("in_progress"),
365
+ import_zod.z.literal("error"),
366
+ import_zod.z.literal("skipped"),
367
+ import_zod.z.literal("processed")
368
+ ]);
395
369
  var trackEventRESTParamsValidatorSchema = eventSchema.omit({
396
370
  event_id: true,
397
371
  project_id: true,
398
372
  timestamps: true,
399
- event_details: true,
400
- trace_metadata: true
373
+ event_details: true
401
374
  }).and(
402
375
  import_zod.z.object({
403
376
  event_id: import_zod.z.string().optional(),
@@ -405,12 +378,17 @@ var trackEventRESTParamsValidatorSchema = eventSchema.omit({
405
378
  timestamp: import_zod.z.number().optional()
406
379
  })
407
380
  );
381
+ var contextsSchema = import_zod.z.object({
382
+ traceId: import_zod.z.string(),
383
+ contexts: import_zod.z.array(rAGChunkSchema)
384
+ });
408
385
  var chatMessageSchema = import_zod.z.object({
409
386
  role: chatRoleSchema.optional(),
410
387
  content: import_zod.z.union([import_zod.z.string(), import_zod.z.array(chatRichContentSchema)]).optional().nullable(),
411
388
  function_call: functionCallSchema.optional().nullable(),
412
389
  tool_calls: import_zod.z.array(toolCallSchema).optional().nullable(),
413
- tool_call_id: import_zod.z.string().optional().nullable()
390
+ tool_call_id: import_zod.z.string().optional().nullable(),
391
+ name: import_zod.z.string().optional().nullable()
414
392
  });
415
393
  var typedValueChatMessagesSchema = import_zod.z.object({
416
394
  type: import_zod.z.literal("chat_messages"),
@@ -421,6 +399,7 @@ var spanInputOutputSchema = import_zod.z.lazy(
421
399
  typedValueTextSchema,
422
400
  typedValueChatMessagesSchema,
423
401
  typedValueGuardrailResultSchema,
402
+ typedValueEvaluationResultSchema,
424
403
  typedValueJsonSchema,
425
404
  typedValueRawSchema,
426
405
  import_zod.z.object({
@@ -439,13 +418,13 @@ var baseSpanSchema = import_zod.z.object({
439
418
  output: spanInputOutputSchema.optional().nullable(),
440
419
  error: errorCaptureSchema.optional().nullable(),
441
420
  timestamps: spanTimestampsSchema,
442
- metrics: spanMetricsSchema.optional().nullable()
421
+ metrics: spanMetricsSchema.optional().nullable(),
422
+ params: spanParamsSchema.optional().nullable()
443
423
  });
444
424
  var lLMSpanSchema = baseSpanSchema.extend({
445
425
  type: import_zod.z.literal("llm"),
446
426
  vendor: import_zod.z.string().optional().nullable(),
447
- model: import_zod.z.string().optional(),
448
- params: spanParamsSchema.optional()
427
+ model: import_zod.z.string().optional().nullable()
449
428
  });
450
429
  var rAGSpanSchema = baseSpanSchema.extend({
451
430
  type: import_zod.z.literal("rag"),
@@ -462,13 +441,56 @@ var spanInputOutputValidatorSchema = spanInputOutputSchema.and(
462
441
  })
463
442
  );
464
443
  var spanValidatorSchema = import_zod.z.union([
465
- lLMSpanSchema.omit({ input: true, output: true }),
466
- rAGSpanSchema.omit({ input: true, output: true }),
467
- baseSpanSchema.omit({ input: true, output: true })
444
+ lLMSpanSchema.omit({ input: true, output: true, params: true }),
445
+ rAGSpanSchema.omit({ input: true, output: true, params: true }),
446
+ baseSpanSchema.omit({ input: true, output: true, params: true })
468
447
  ]).and(
469
448
  import_zod.z.object({
470
449
  input: spanInputOutputValidatorSchema.optional().nullable(),
471
- output: spanInputOutputValidatorSchema.optional().nullable()
450
+ output: spanInputOutputValidatorSchema.optional().nullable(),
451
+ params: import_zod.z.record(import_zod.z.any()).optional().nullable()
452
+ })
453
+ );
454
+ var evaluationSchema = import_zod.z.object({
455
+ evaluation_id: import_zod.z.string(),
456
+ evaluator_id: import_zod.z.string(),
457
+ span_id: import_zod.z.string().optional().nullable(),
458
+ name: import_zod.z.string(),
459
+ type: import_zod.z.string().optional().nullable(),
460
+ is_guardrail: import_zod.z.boolean().optional().nullable(),
461
+ status: evaluationStatusSchema,
462
+ passed: import_zod.z.boolean().optional().nullable(),
463
+ score: import_zod.z.number().optional().nullable(),
464
+ label: import_zod.z.string().optional().nullable(),
465
+ details: import_zod.z.string().optional().nullable(),
466
+ error: errorCaptureSchema.optional().nullable(),
467
+ retries: import_zod.z.number().optional().nullable(),
468
+ timestamps: import_zod.z.object({
469
+ inserted_at: import_zod.z.number().optional().nullable(),
470
+ started_at: import_zod.z.number().optional().nullable(),
471
+ finished_at: import_zod.z.number().optional().nullable(),
472
+ updated_at: import_zod.z.number().optional().nullable()
473
+ })
474
+ });
475
+ var rESTEvaluationSchema = evaluationSchema.omit({
476
+ evaluation_id: true,
477
+ evaluator_id: true,
478
+ status: true,
479
+ timestamps: true,
480
+ retries: true
481
+ }).and(
482
+ import_zod.z.object({
483
+ evaluation_id: import_zod.z.string().optional().nullable(),
484
+ evaluator_id: import_zod.z.string().optional().nullable(),
485
+ status: import_zod.z.union([
486
+ import_zod.z.literal("processed"),
487
+ import_zod.z.literal("skipped"),
488
+ import_zod.z.literal("error")
489
+ ]).optional().nullable(),
490
+ timestamps: import_zod.z.object({
491
+ started_at: import_zod.z.number().optional().nullable(),
492
+ finished_at: import_zod.z.number().optional().nullable()
493
+ }).optional().nullable()
472
494
  })
473
495
  );
474
496
  var collectorRESTParamsSchema = import_zod.z.object({
@@ -479,8 +501,11 @@ var collectorRESTParamsSchema = import_zod.z.object({
479
501
  thread_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
480
502
  customer_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
481
503
  labels: import_zod.z.union([import_zod.z.array(import_zod.z.string()), import_zod.z.undefined()]).optional().nullable(),
482
- experiments: import_zod.z.union([import_zod.z.array(experimentSchema), import_zod.z.undefined()]).optional().nullable()
483
- }).optional()
504
+ sdk_version: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
505
+ sdk_language: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable()
506
+ }).and(customMetadataSchema).optional(),
507
+ expected_output: import_zod.z.string().optional().nullable(),
508
+ evaluations: import_zod.z.array(rESTEvaluationSchema).optional()
484
509
  });
485
510
  var collectorRESTParamsValidatorSchema = collectorRESTParamsSchema.omit({ spans: true });
486
511
  var datasetSpanSchema = import_zod.z.union([
@@ -489,26 +514,68 @@ var datasetSpanSchema = import_zod.z.union([
489
514
  trace_id: true,
490
515
  id: true,
491
516
  timestamps: true,
492
- metrics: true
493
- }),
517
+ metrics: true,
518
+ params: true
519
+ }).and(
520
+ import_zod.z.object({
521
+ params: import_zod.z.record(import_zod.z.any())
522
+ })
523
+ ),
494
524
  lLMSpanSchema.omit({
495
525
  project_id: true,
496
526
  trace_id: true,
497
527
  id: true,
498
528
  timestamps: true,
499
- metrics: true
500
- }),
529
+ metrics: true,
530
+ params: true
531
+ }).and(
532
+ import_zod.z.object({
533
+ params: import_zod.z.record(import_zod.z.any())
534
+ })
535
+ ),
501
536
  rAGSpanSchema.omit({
502
537
  project_id: true,
503
538
  trace_id: true,
504
539
  id: true,
505
540
  timestamps: true,
506
- metrics: true
507
- })
541
+ metrics: true,
542
+ params: true
543
+ }).and(
544
+ import_zod.z.object({
545
+ params: import_zod.z.record(import_zod.z.any())
546
+ })
547
+ )
508
548
  ]);
549
+ var traceSchema = import_zod.z.object({
550
+ trace_id: import_zod.z.string(),
551
+ project_id: import_zod.z.string(),
552
+ metadata: traceMetadataSchema,
553
+ timestamps: import_zod.z.object({
554
+ started_at: import_zod.z.number(),
555
+ inserted_at: import_zod.z.number(),
556
+ updated_at: import_zod.z.number()
557
+ }),
558
+ input: traceInputSchema.optional(),
559
+ output: traceOutputSchema.optional(),
560
+ contexts: import_zod.z.array(rAGChunkSchema).optional(),
561
+ expected_output: import_zod.z.object({
562
+ value: import_zod.z.string()
563
+ }).optional(),
564
+ metrics: import_zod.z.object({
565
+ first_token_ms: import_zod.z.number().optional().nullable(),
566
+ total_time_ms: import_zod.z.number().optional().nullable(),
567
+ prompt_tokens: import_zod.z.number().optional().nullable(),
568
+ completion_tokens: import_zod.z.number().optional().nullable(),
569
+ total_cost: import_zod.z.number().optional().nullable(),
570
+ tokens_estimated: import_zod.z.boolean().optional().nullable()
571
+ }).optional(),
572
+ error: errorCaptureSchema.optional().nullable(),
573
+ indexing_md5s: import_zod.z.array(import_zod.z.string()).optional(),
574
+ events: import_zod.z.array(eventSchema).optional(),
575
+ evaluations: import_zod.z.array(evaluationSchema).optional()
576
+ });
509
577
 
510
578
  // src/utils.ts
511
- var import_zod2 = require("zod");
512
579
  var convertImageToUrl = (image, mimeType) => {
513
580
  try {
514
581
  return image instanceof URL ? image.toString() : typeof image === "string" ? image : `data:${mimeType != null ? mimeType : "image/jpeg"};base64,${convertUint8ArrayToBase64(