langwatch 0.1.0 → 0.1.1

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 (39) hide show
  1. package/dist/{chunk-AP23NJ57.mjs → chunk-OVS4NSDE.mjs} +373 -2
  2. package/dist/chunk-OVS4NSDE.mjs.map +1 -0
  3. package/dist/index.d.mts +44 -2
  4. package/dist/index.d.ts +44 -2
  5. package/dist/index.js +6256 -472
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +325 -351
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/{utils-DDcm0z9v.d.mts → utils-K-jSEpnZ.d.mts} +4 -3
  10. package/dist/{utils-DDcm0z9v.d.ts → utils-K-jSEpnZ.d.ts} +4 -3
  11. package/dist/utils.d.mts +1 -1
  12. package/dist/utils.d.ts +1 -1
  13. package/dist/utils.js +370 -0
  14. package/dist/utils.js.map +1 -1
  15. package/dist/utils.mjs +3 -1
  16. package/example/README.md +3 -1
  17. package/example/app/(chat)/chat/[id]/page.tsx +1 -1
  18. package/example/app/(chat)/page.tsx +10 -5
  19. package/example/app/langchain/page.tsx +27 -0
  20. package/example/app/langchain-rag/page.tsx +28 -0
  21. package/example/app/share/[id]/page.tsx +1 -1
  22. package/example/components/chat-list.tsx +1 -1
  23. package/example/components/chat-panel.tsx +1 -1
  24. package/example/components/header.tsx +35 -13
  25. package/example/components/prompt-form.tsx +1 -1
  26. package/example/components/stocks/stock-purchase.tsx +1 -1
  27. package/example/components/stocks/stocks.tsx +1 -1
  28. package/example/lib/chat/langchain-rag.tsx +191 -0
  29. package/example/lib/chat/langchain.tsx +112 -0
  30. package/example/package-lock.json +285 -3
  31. package/example/package.json +1 -0
  32. package/package.json +11 -2
  33. package/src/index.ts +12 -3
  34. package/src/langchain.ts +557 -0
  35. package/src/types.ts +1 -1
  36. package/src/utils.ts +28 -1
  37. package/dist/chunk-AP23NJ57.mjs.map +0 -1
  38. /package/example/lib/chat/{actions.tsx → vercel-ai.tsx} +0 -0
  39. /package/src/{helpers.ts → typeUtils.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/helpers.ts","../src/server/types/tracer.generated.ts"],"sourcesContent":["import EventEmitter from \"events\";\nimport { nanoid } from \"nanoid\";\nimport { ZodError } from \"zod\";\nimport { fromZodError } from \"zod-validation-error\";\nimport { camelToSnakeCaseNested, type Strict } from \"./helpers\";\nimport {\n type CollectorRESTParams,\n type Span as ServerSpan,\n type SpanTypes,\n} from \"./server/types/tracer\";\nimport {\n collectorRESTParamsSchema,\n spanSchema,\n} from \"./server/types/tracer.generated\";\nimport {\n type BaseSpan,\n type ChatMessage,\n type ChatRichContent,\n type LLMSpan,\n type Metadata,\n type PendingBaseSpan,\n type PendingLLMSpan,\n type PendingRAGSpan,\n type RAGSpan,\n type SpanInputOutput,\n} from \"./types\";\nimport { captureError, convertFromVercelAIMessages } from \"./utils\";\n\nexport type {\n BaseSpan,\n ChatMessage as ChatMessage,\n ChatRichContent,\n LLMSpan,\n Metadata,\n PendingBaseSpan,\n PendingLLMSpan,\n PendingRAGSpan,\n RAGSpan,\n SpanInputOutput,\n};\n\nexport { convertFromVercelAIMessages, captureError };\n\nexport class LangWatch extends EventEmitter {\n apiKey: string | undefined;\n endpoint: string;\n\n constructor({\n apiKey,\n endpoint = process.env.LANGWATCH_ENDPOINT ?? \"https://app.langwatch.ai\",\n }: {\n apiKey?: string;\n endpoint?: string;\n } = {}) {\n super();\n const apiKey_ = apiKey ?? process.env.LANGWATCH_API_KEY;\n if (!apiKey_) {\n const error = new Error(\n \"LangWatch API key is not set, please set the LANGWATCH_API_KEY environment variable or pass it in the constructor. Traces will not be captured.\"\n );\n this.emit(\"error\", error);\n }\n this.apiKey = apiKey_;\n this.endpoint = endpoint;\n }\n\n getTrace({\n traceId,\n metadata,\n }: { traceId?: string; metadata?: Metadata } = {}) {\n return new LangWatchTrace({\n client: this,\n traceId: traceId ?? `trace_${nanoid()}`,\n metadata,\n });\n }\n\n async sendTrace(params: CollectorRESTParams) {\n const backoff = [1000, 2000, 4000, 8000, 16000];\n for (const backoffTime of backoff) {\n try {\n await this._sendTrace(params);\n return;\n } catch (e) {\n console.warn(\n `[LangWatch] ⚠️ Failed to send trace, retrying in ${\n backoffTime / 1000\n }s`\n );\n await new Promise((resolve) => setTimeout(resolve, backoffTime));\n }\n }\n console.warn(\"[LangWatch] ⚠️ Failed to send trace, giving up\");\n }\n\n async _sendTrace(params: CollectorRESTParams) {\n if (params.spans.length === 0) {\n return;\n }\n\n if (!this.apiKey) {\n const error = new Error(\n \"LangWatch API key is not set, LLMs traces will not be sent, go to https://langwatch.ai to set it up\"\n );\n this.emit(\"error\", error);\n return;\n }\n\n const response = await fetch(`${this.endpoint}/api/collector`, {\n method: \"POST\",\n headers: {\n \"X-Auth-Token\": this.apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(params),\n });\n\n if (response.status === 429) {\n const error = new Error(\n \"Rate limit exceeded, dropping message from being sent to LangWatch. Please check your dashboard to upgrade your plan.\"\n );\n this.emit(\"error\", error);\n return;\n }\n if (!response.ok) {\n const error = new Error(\n `Failed to send trace, status: ${response.status}`\n );\n this.emit(\"error\", error);\n throw error;\n }\n }\n}\n\nexport class LangWatchTrace {\n client: LangWatch;\n traceId: string;\n metadata?: Metadata;\n finishedSpans: Record<string, ServerSpan> = {};\n timeoutRef?: NodeJS.Timeout;\n\n constructor({\n client,\n traceId,\n metadata,\n }: {\n client: LangWatch;\n traceId: string;\n metadata?: Metadata;\n }) {\n this.client = client;\n this.traceId = traceId;\n this.metadata = metadata;\n }\n\n update({ metadata }: { metadata: Metadata }) {\n this.metadata = {\n ...this.metadata,\n ...metadata,\n ...(typeof metadata.labels !== \"undefined\"\n ? { labels: [...(this.metadata?.labels ?? []), ...metadata.labels] }\n : {}),\n };\n }\n\n startSpan(params: Omit<Partial<PendingBaseSpan>, \"parentId\">) {\n const span = new LangWatchSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n startLLMSpan(params: Omit<Partial<PendingLLMSpan>, \"parentId\">) {\n const span = new LangWatchLLMSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n startRAGSpan(params: Omit<Partial<PendingRAGSpan>, \"parentId\">) {\n const span = new LangWatchRAGSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n onEnd(span: ServerSpan) {\n this.finishedSpans[span.span_id] = span;\n this.delayedSendSpans();\n }\n\n delayedSendSpans() {\n clearTimeout(this.timeoutRef);\n this.timeoutRef = setTimeout(() => {\n void this.sendSpans();\n }, 1000);\n }\n\n async sendSpans() {\n clearTimeout(this.timeoutRef);\n\n let trace: CollectorRESTParams | undefined = undefined;\n try {\n trace = collectorRESTParamsSchema.parse({\n trace_id: this.traceId,\n metadata: camelToSnakeCaseNested(this.metadata),\n spans: Object.values(this.finishedSpans),\n } as Strict<CollectorRESTParams>);\n } catch (error) {\n if (error instanceof ZodError) {\n console.warn(\"[LangWatch] ⚠️ Failed to parse trace\");\n console.warn(fromZodError(error).message);\n }\n this.client.emit(\"error\", error);\n }\n\n if (trace) {\n await this.client.sendTrace(trace);\n }\n }\n}\n\nexport class LangWatchSpan implements PendingBaseSpan {\n trace: LangWatchTrace;\n\n spanId: string;\n parentId?: string | null;\n type: SpanTypes;\n name?: string | null;\n input?: PendingBaseSpan[\"input\"];\n output?: PendingBaseSpan[\"output\"];\n error?: PendingBaseSpan[\"error\"];\n timestamps: PendingBaseSpan[\"timestamps\"];\n metrics: PendingBaseSpan[\"metrics\"];\n\n constructor({\n trace,\n spanId,\n parentId,\n type,\n name,\n input,\n output,\n error,\n timestamps,\n metrics,\n }: Partial<PendingBaseSpan> & { trace: LangWatchTrace }) {\n this.spanId = spanId ?? `span_${nanoid()}`;\n this.parentId = parentId;\n this.trace = trace;\n this.type = type ?? \"span\";\n this.name = name;\n this.input = input;\n this.output = output;\n this.error = error;\n this.timestamps = timestamps ?? {\n startedAt: Date.now(),\n };\n this.metrics = metrics;\n }\n\n update(params: Partial<Omit<PendingBaseSpan, \"spanId\" | \"parentId\">>) {\n if (Object.isFrozen(this)) {\n const error = new Error(\n `Tried to update span ${this.spanId}, but the span is already finished, discarding update`\n );\n this.trace.client.emit(\"error\", error);\n return;\n }\n\n if (params.type) {\n this.type = params.type;\n }\n if (\"name\" in params) {\n this.name = params.name;\n }\n if (\"input\" in params) {\n this.input = params.input;\n }\n if (\"output\" in params) {\n this.output = params.output;\n }\n if (\"error\" in params) {\n this.error = params.error;\n }\n if (params.timestamps) {\n this.timestamps = params.timestamps;\n }\n if (\"metrics\" in params) {\n this.metrics = params.metrics;\n }\n }\n\n startSpan(params: Omit<Partial<PendingBaseSpan>, \"parentId\">) {\n const span = new LangWatchSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n startLLMSpan(params: Omit<Partial<PendingLLMSpan>, \"parentId\">) {\n const span = new LangWatchLLMSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n startRAGSpan(params: Omit<Partial<PendingRAGSpan>, \"parentId\">) {\n const span = new LangWatchRAGSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n end(params?: Partial<Omit<PendingBaseSpan, \"spanId\" | \"parentId\">>) {\n this.timestamps.finishedAt = Date.now();\n if (params) {\n this.update(params);\n }\n\n Object.freeze(this);\n\n try {\n const finalSpan = spanSchema.parse(\n camelToSnakeCaseNested({\n ...this,\n trace: undefined,\n traceId: this.trace.traceId,\n timestamps: {\n ...this.timestamps,\n finishedAt: this.timestamps.finishedAt,\n },\n ...(this.error && { error: captureError(this.error) }),\n }) as ServerSpan\n );\n this.trace.onEnd(finalSpan);\n } catch (error) {\n if (error instanceof ZodError) {\n console.warn(\"[LangWatch] ⚠️ Failed to parse span\");\n console.warn(fromZodError(error).message);\n }\n this.trace.client.emit(\"error\", error);\n }\n }\n}\n\nexport class LangWatchLLMSpan extends LangWatchSpan implements PendingLLMSpan {\n type: \"llm\";\n model: PendingLLMSpan[\"model\"];\n params: PendingLLMSpan[\"params\"];\n\n constructor(params: Partial<PendingLLMSpan> & { trace: LangWatchTrace }) {\n super({ ...params });\n this.type = \"llm\";\n this.model = params.model ?? \"unknown\";\n this.params = params.params ?? {};\n }\n\n update(params: Partial<PendingLLMSpan>) {\n super.update(params);\n if (params.model) {\n this.model = params.model;\n }\n if (params.params) {\n this.params = params.params;\n }\n }\n\n end(params?: Partial<PendingLLMSpan>) {\n super.end(params);\n }\n}\n\nexport class LangWatchRAGSpan extends LangWatchSpan implements PendingRAGSpan {\n type: \"rag\";\n contexts: PendingRAGSpan[\"contexts\"];\n\n constructor(params: Partial<PendingRAGSpan> & { trace: LangWatchTrace }) {\n super({ ...params });\n this.type = \"rag\";\n this.contexts = params.contexts ?? [];\n }\n\n update(params: Partial<PendingRAGSpan>) {\n super.update(params);\n if (params.contexts) {\n this.contexts = params.contexts;\n }\n }\n\n end(params?: Partial<PendingRAGSpan>) {\n super.end(params);\n }\n}\n","export type Strict<T> = T & { [K in Exclude<keyof any, keyof T>]: never };\n\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\n ? `${T}${Capitalize<SnakeToCamelCase<U>>}`\n : S;\n\nexport type SnakeToCamelCaseNested<T> = T extends object\n ? T extends (infer U)[]\n ? U extends object\n ? {\n [K in keyof U as SnakeToCamelCase<\n K & string\n >]: SnakeToCamelCaseNested<U[K]>;\n }[]\n : T\n : {\n [K in keyof T as SnakeToCamelCase<K & string>]: SnakeToCamelCaseNested<\n T[K]\n >;\n }\n : T;\n\ntype CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}`\n ? `${T extends Capitalize<T> ? \"_\" : \"\"}${Lowercase<T>}${CamelToSnakeCase<U>}`\n : S;\n\nexport type CamelToSnakeCaseNested<T> = T extends object\n ? T extends (infer U)[]\n ? U extends object\n ? {\n [K in keyof U as CamelToSnakeCase<\n K & string\n >]: CamelToSnakeCaseNested<U[K]>;\n }[]\n : T\n : {\n [K in keyof T as CamelToSnakeCase<K & string>]: CamelToSnakeCaseNested<\n T[K]\n >;\n }\n : T;\n\nfunction camelToSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\nexport function camelToSnakeCaseNested<T>(obj: T): CamelToSnakeCaseNested<T> {\n if (Array.isArray(obj)) {\n return obj.map((item) =>\n camelToSnakeCaseNested(item)\n ) as CamelToSnakeCaseNested<T>;\n } else if (typeof obj === \"object\" && obj !== null) {\n const newObj: any = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const newKey = camelToSnakeCase(key);\n newObj[newKey] = camelToSnakeCaseNested((obj as any)[key]);\n }\n }\n return newObj as CamelToSnakeCaseNested<T>;\n } else {\n return obj as CamelToSnakeCaseNested<T>;\n }\n}\n","// Generated by ts-to-zod\nimport { z } from \"zod\";\nimport { SpanInputOutput } from \"./tracer\";\n\nconst chatRoleSchema = z.union([\n z.literal(\"system\"),\n z.literal(\"user\"),\n z.literal(\"assistant\"),\n z.literal(\"function\"),\n z.literal(\"tool\"),\n z.literal(\"unknown\"),\n]);\n\nconst functionCallSchema = z.object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n});\n\nconst toolCallSchema = z.object({\n id: z.string(),\n type: z.string(),\n function: functionCallSchema,\n});\n\nexport const chatRichContentSchema = z.union([\n z.object({\n type: z.literal(\"text\"),\n text: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"image_url\"),\n image_url: z\n .object({\n url: z.string(),\n detail: z\n .union([z.literal(\"auto\"), z.literal(\"low\"), z.literal(\"high\")])\n .optional(),\n })\n .optional(),\n }),\n]);\n\nconst typedValueTextSchema = z.object({\n type: z.literal(\"text\"),\n value: z.string(),\n});\n\nconst typedValueRawSchema = z.object({\n type: z.literal(\"raw\"),\n value: z.string(),\n});\n\nconst jSONSerializableSchema = z\n .union([\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.any()),\n z.array(z.any()),\n ])\n .nullable();\n\nconst typedValueJsonSchema = z.object({\n type: z.literal(\"json\"),\n value: jSONSerializableSchema,\n});\n\nconst moneySchema = z.object({\n currency: z.string(),\n amount: z.number(),\n});\n\nexport const guardrailResultSchema = z.object({\n status: z.union([\n z.literal(\"processed\"),\n z.literal(\"skipped\"),\n z.literal(\"error\"),\n ]),\n passed: z.boolean(),\n score: z.number().optional().nullable(),\n details: z.string().optional().nullable(),\n cost: moneySchema.optional().nullable(),\n});\n\nconst typedValueGuardrailResultSchema = z.object({\n type: z.literal(\"guardrail_result\"),\n value: guardrailResultSchema,\n});\n\nexport const errorCaptureSchema = z.object({\n has_error: z.literal(true),\n message: z.string(),\n stacktrace: z.array(z.string()),\n});\n\nconst spanMetricsSchema = z.object({\n prompt_tokens: z.number().optional().nullable(),\n completion_tokens: z.number().optional().nullable(),\n tokens_estimated: z.boolean().optional().nullable(),\n cost: z.number().optional().nullable(),\n});\n\nconst spanParamsSchema = z.object({\n temperature: z.number().optional(),\n stream: z.boolean().optional(),\n functions: z.array(z.record(z.any())).optional(),\n tools: z.array(z.record(z.any())).optional(),\n tool_choice: z.string().optional(),\n});\n\nconst spanTimestampsSchema = z.object({\n started_at: z.number(),\n first_token_at: z.number().optional().nullable(),\n finished_at: z.number(),\n});\n\nexport const spanTypesSchema = z.union([\n z.literal(\"span\"),\n z.literal(\"llm\"),\n z.literal(\"chain\"),\n z.literal(\"tool\"),\n z.literal(\"agent\"),\n z.literal(\"rag\"),\n z.literal(\"guardrail\"),\n z.literal(\"unknown\"),\n]);\n\nexport const rAGChunkSchema = z.object({\n document_id: z.string().optional().nullable(),\n chunk_id: z.string().optional().nullable(),\n content: z.union([z.string(), z.record(z.any()), z.array(z.any())]),\n});\n\nexport const traceInputSchema = z.object({\n value: z.string(),\n embeddings: z\n .object({\n model: z.string(),\n embeddings: z.array(z.number()),\n })\n .optional(),\n satisfaction_score: z.number().optional(),\n});\n\nexport const traceOutputSchema = z.object({\n value: z.string(),\n embeddings: z\n .object({\n model: z.string(),\n embeddings: z.array(z.number()),\n })\n .optional(),\n});\n\nexport const traceSchema = z.object({\n trace_id: z.string(),\n project_id: z.string(),\n metadata: z.object({\n thread_id: z.string().optional(),\n user_id: z.string().optional(),\n customer_id: z.string().optional(),\n labels: z.array(z.string()).optional(),\n topic_id: z.string().optional(),\n subtopic_id: z.string().optional(),\n }),\n timestamps: z.object({\n started_at: z.number(),\n inserted_at: z.number(),\n updated_at: z.number(),\n }),\n input: traceInputSchema,\n output: traceOutputSchema.optional(),\n metrics: z.object({\n first_token_ms: z.number().optional().nullable(),\n total_time_ms: z.number().optional().nullable(),\n prompt_tokens: z.number().optional().nullable(),\n completion_tokens: z.number().optional().nullable(),\n total_cost: z.number().optional().nullable(),\n tokens_estimated: z.boolean().optional().nullable(),\n }),\n error: errorCaptureSchema.optional().nullable(),\n indexing_md5s: z.array(z.string()).optional(),\n});\n\nexport const elasticSearchTraceSchema = traceSchema.and(\n z.object({\n timestamps: traceSchema.shape.timestamps.and(\n z.object({\n updated_at: z.number(),\n }),\n ),\n }),\n);\n\nexport const traceCheckSchema = z.object({\n trace_id: z.string(),\n check_id: z.string(),\n project_id: z.string(),\n check_type: z.string(),\n check_name: z.string(),\n is_guardrail: z.boolean(),\n status: z.union([\n z.literal(\"scheduled\"),\n z.literal(\"in_progress\"),\n z.literal(\"error\"),\n z.literal(\"skipped\"),\n z.literal(\"processed\"),\n ]),\n passed: z.boolean().optional(),\n score: z.number().optional(),\n details: z.string().optional(),\n error: errorCaptureSchema.optional().nullable(),\n retries: z.number().optional(),\n timestamps: z.object({\n inserted_at: z.number().optional(),\n started_at: z.number().optional(),\n finished_at: z.number().optional(),\n updated_at: z.number(),\n }),\n trace_metadata: z.object({\n thread_id: z.string().optional(),\n user_id: z.string().optional(),\n customer_id: z.string().optional(),\n labels: z.array(z.string()).optional(),\n topics: z.array(z.string()).optional(),\n }),\n});\n\nexport const experimentSchema = z.object({\n experiment_id: z.string(),\n variant: z.number(),\n});\n\nexport const eventSchema = z.object({\n event_id: z.string(),\n event_type: z.string(),\n project_id: z.string(),\n metrics: z.record(z.number()),\n event_details: z.record(z.string()),\n trace_id: z.string().optional(),\n trace_metadata: z.object({\n thread_id: z.string().optional(),\n user_id: z.string().optional(),\n customer_id: z.string().optional(),\n labels: z.array(z.string()).optional(),\n topics: z.array(z.string()).optional(),\n }),\n timestamps: z.object({\n started_at: z.number(),\n inserted_at: z.number(),\n updated_at: z.number(),\n }),\n});\n\nexport const elasticSearchEventSchema = eventSchema\n .omit({ metrics: true, event_details: true })\n .and(\n z.object({\n metrics: z.array(\n z.object({\n key: z.string(),\n value: z.number(),\n }),\n ),\n event_details: z.array(\n z.object({\n key: z.string(),\n value: z.string(),\n }),\n ),\n }),\n );\n\nexport const trackEventRESTParamsValidatorSchema = eventSchema\n .omit({\n event_id: true,\n project_id: true,\n timestamps: true,\n event_details: true,\n trace_metadata: true,\n })\n .and(\n z.object({\n event_id: z.string().optional(),\n event_details: z.record(z.string()).optional(),\n timestamp: z.number().optional(),\n }),\n );\n\nexport const chatMessageSchema = z.object({\n role: chatRoleSchema.optional(),\n content: z\n .union([z.string(), z.array(chatRichContentSchema)])\n .optional()\n .nullable(),\n function_call: functionCallSchema.optional().nullable(),\n tool_calls: z.array(toolCallSchema).optional().nullable(),\n tool_call_id: z.string().optional().nullable(),\n});\n\nexport const typedValueChatMessagesSchema = z.object({\n type: z.literal(\"chat_messages\"),\n value: z.array(chatMessageSchema),\n});\n\nexport const spanInputOutputSchema: z.ZodSchema<SpanInputOutput> = z.lazy(() =>\n z.union([\n typedValueTextSchema,\n typedValueChatMessagesSchema,\n typedValueGuardrailResultSchema,\n typedValueJsonSchema,\n typedValueRawSchema,\n z.object({\n type: z.literal(\"list\"),\n value: z.array(spanInputOutputSchema),\n }),\n ]),\n);\n\nexport const baseSpanSchema = z.object({\n span_id: z.string(),\n parent_id: z.string().optional().nullable(),\n trace_id: z.string(),\n type: spanTypesSchema,\n name: z.string().optional().nullable(),\n input: spanInputOutputSchema.optional().nullable(),\n output: spanInputOutputSchema.optional().nullable(),\n error: errorCaptureSchema.optional().nullable(),\n timestamps: spanTimestampsSchema,\n metrics: spanMetricsSchema.optional().nullable(),\n});\n\nexport const lLMSpanSchema = baseSpanSchema.extend({\n type: z.literal(\"llm\"),\n vendor: z.string().optional().nullable(),\n model: z.string(),\n params: spanParamsSchema,\n});\n\nexport const rAGSpanSchema = baseSpanSchema.extend({\n type: z.literal(\"rag\"),\n contexts: z.array(rAGChunkSchema),\n});\n\nexport const spanSchema = z.union([\n lLMSpanSchema,\n rAGSpanSchema,\n baseSpanSchema,\n]);\n\nconst spanInputOutputValidatorSchema = spanInputOutputSchema.and(\n z.object({\n value: z.any(),\n }),\n);\n\nexport const spanValidatorSchema = z\n .union([\n lLMSpanSchema.omit({ input: true, output: true }),\n rAGSpanSchema.omit({ input: true, output: true }),\n baseSpanSchema.omit({ input: true, output: true }),\n ])\n .and(\n z.object({\n input: spanInputOutputValidatorSchema.optional().nullable(),\n output: spanInputOutputValidatorSchema.optional().nullable(),\n }),\n );\n\nexport const collectorRESTParamsSchema = z.object({\n trace_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n spans: z.array(spanSchema),\n metadata: z\n .object({\n user_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n thread_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n customer_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n labels: z\n .union([z.array(z.string()), z.undefined()])\n .optional()\n .nullable(),\n experiments: z\n .union([z.array(experimentSchema), z.undefined()])\n .optional()\n .nullable(),\n })\n .optional(),\n});\n\nexport const collectorRESTParamsValidatorSchema =\n collectorRESTParamsSchema.omit({ spans: true });\n\nexport const datasetSpanSchema = z.union([\n baseSpanSchema.omit({\n project_id: true,\n trace_id: true,\n id: true,\n timestamps: true,\n metrics: true,\n }),\n lLMSpanSchema.omit({\n project_id: true,\n trace_id: true,\n id: true,\n timestamps: true,\n metrics: true,\n }),\n rAGSpanSchema.omit({\n project_id: true,\n trace_id: true,\n id: true,\n timestamps: true,\n metrics: true,\n }),\n]);\n"],"mappings":";;;;;;;;AAAA,OAAO,kBAAkB;AACzB,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;;;ACuC7B,SAAS,iBAAiB,KAAqB;AAC7C,SAAO,IAAI,QAAQ,UAAU,CAAC,WAAW,IAAI,OAAO,YAAY,CAAC,EAAE;AACrE;AAEO,SAAS,uBAA0B,KAAmC;AAC3E,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI;AAAA,MAAI,CAAC,SACd,uBAAuB,IAAI;AAAA,IAC7B;AAAA,EACF,WAAW,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAClD,UAAM,SAAc,CAAC;AACrB,eAAW,OAAO,KAAK;AACrB,UAAI,IAAI,eAAe,GAAG,GAAG;AAC3B,cAAM,SAAS,iBAAiB,GAAG;AACnC,eAAO,MAAM,IAAI,uBAAwB,IAAY,GAAG,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;;;AC9DA,SAAS,SAAS;AAGlB,IAAM,iBAAiB,EAAE,MAAM;AAAA,EAC7B,EAAE,QAAQ,QAAQ;AAAA,EAClB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,WAAW;AAAA,EACrB,EAAE,QAAQ,UAAU;AAAA,EACpB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,SAAS;AACrB,CAAC;AAED,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAED,IAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,UAAU;AACZ,CAAC;AAEM,IAAM,wBAAwB,EAAE,MAAM;AAAA,EAC3C,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,MAAM;AAAA,IACtB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC3B,WAAW,EACR,OAAO;AAAA,MACN,KAAK,EAAE,OAAO;AAAA,MACd,QAAQ,EACL,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,EAC9D,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC;AACH,CAAC;AAED,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,IAAM,yBAAyB,EAC5B,MAAM;AAAA,EACL,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,EACT,EAAE,QAAQ;AAAA,EACV,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChB,EAAE,MAAM,EAAE,IAAI,CAAC;AACjB,CAAC,EACA,SAAS;AAEZ,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,OAAO;AACT,CAAC;AAED,IAAM,cAAc,EAAE,OAAO;AAAA,EAC3B,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,OAAO;AACnB,CAAC;AAEM,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,QAAQ,EAAE,MAAM;AAAA,IACd,EAAE,QAAQ,WAAW;AAAA,IACrB,EAAE,QAAQ,SAAS;AAAA,IACnB,EAAE,QAAQ,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,QAAQ,EAAE,QAAQ;AAAA,EAClB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,MAAM,YAAY,SAAS,EAAE,SAAS;AACxC,CAAC;AAED,IAAM,kCAAkC,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAO;AACT,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,WAAW,EAAE,QAAQ,IAAI;AAAA,EACzB,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACvC,CAAC;AAED,IAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC/C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAED,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,YAAY,EAAE,OAAO;AAAA,EACrB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAa,EAAE,OAAO;AACxB,CAAC;AAEM,IAAM,kBAAkB,EAAE,MAAM;AAAA,EACrC,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,KAAK;AAAA,EACf,EAAE,QAAQ,OAAO;AAAA,EACjB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,OAAO;AAAA,EACjB,EAAE,QAAQ,KAAK;AAAA,EACf,EAAE,QAAQ,WAAW;AAAA,EACrB,EAAE,QAAQ,SAAS;AACrB,CAAC;AAEM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAEM,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,OAAO;AAAA,EAChB,YAAY,EACT,OAAO;AAAA,IACN,OAAO,EAAE,OAAO;AAAA,IAChB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,CAAC,EACA,SAAS;AAAA,EACZ,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,OAAO,EAAE,OAAO;AAAA,EAChB,YAAY,EACT,OAAO;AAAA,IACN,OAAO,EAAE,OAAO;AAAA,IAChB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAChC,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,UAAU,EAAE,OAAO;AAAA,IACjB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACrC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,YAAY,EAAE,OAAO;AAAA,IACnB,YAAY,EAAE,OAAO;AAAA,IACrB,aAAa,EAAE,OAAO;AAAA,IACtB,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,OAAO;AAAA,EACP,QAAQ,kBAAkB,SAAS;AAAA,EACnC,SAAS,EAAE,OAAO;AAAA,IAChB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC/C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAClD,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC3C,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,CAAC;AAAA,EACD,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAC9C,CAAC;AAEM,IAAM,2BAA2B,YAAY;AAAA,EAClD,EAAE,OAAO;AAAA,IACP,YAAY,YAAY,MAAM,WAAW;AAAA,MACvC,EAAE,OAAO;AAAA,QACP,YAAY,EAAE,OAAO;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,cAAc,EAAE,QAAQ;AAAA,EACxB,QAAQ,EAAE,MAAM;AAAA,IACd,EAAE,QAAQ,WAAW;AAAA,IACrB,EAAE,QAAQ,aAAa;AAAA,IACvB,EAAE,QAAQ,OAAO;AAAA,IACjB,EAAE,QAAQ,SAAS;AAAA,IACnB,EAAE,QAAQ,WAAW;AAAA,EACvB,CAAC;AAAA,EACD,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO;AAAA,IACnB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,gBAAgB,EAAE,OAAO;AAAA,IACvB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACrC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,CAAC;AACH,CAAC;AAEM,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,eAAe,EAAE,OAAO;AAAA,EACxB,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;AAAA,EAC5B,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC;AAAA,EAClC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,gBAAgB,EAAE,OAAO;AAAA,IACvB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACrC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,YAAY,EAAE,OAAO;AAAA,IACnB,YAAY,EAAE,OAAO;AAAA,IACrB,aAAa,EAAE,OAAO;AAAA,IACtB,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AACH,CAAC;AAEM,IAAM,2BAA2B,YACrC,KAAK,EAAE,SAAS,MAAM,eAAe,KAAK,CAAC,EAC3C;AAAA,EACC,EAAE,OAAO;AAAA,IACP,SAAS,EAAE;AAAA,MACT,EAAE,OAAO;AAAA,QACP,KAAK,EAAE,OAAO;AAAA,QACd,OAAO,EAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,eAAe,EAAE;AAAA,MACf,EAAE,OAAO;AAAA,QACP,KAAK,EAAE,OAAO;AAAA,QACd,OAAO,EAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEK,IAAM,sCAAsC,YAChD,KAAK;AAAA,EACJ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,gBAAgB;AAClB,CAAC,EACA;AAAA,EACC,EAAE,OAAO;AAAA,IACP,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC7C,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AACH;AAEK,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,eAAe,SAAS;AAAA,EAC9B,SAAS,EACN,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,qBAAqB,CAAC,CAAC,EAClD,SAAS,EACT,SAAS;AAAA,EACZ,eAAe,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACtD,YAAY,EAAE,MAAM,cAAc,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC/C,CAAC;AAEM,IAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,MAAM,EAAE,QAAQ,eAAe;AAAA,EAC/B,OAAO,EAAE,MAAM,iBAAiB;AAClC,CAAC;AAEM,IAAM,wBAAsD,EAAE;AAAA,EAAK,MACxE,EAAE,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,MAAM;AAAA,MACtB,OAAO,EAAE,MAAM,qBAAqB;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,OAAO,sBAAsB,SAAS,EAAE,SAAS;AAAA,EACjD,QAAQ,sBAAsB,SAAS,EAAE,SAAS;AAAA,EAClD,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,YAAY;AAAA,EACZ,SAAS,kBAAkB,SAAS,EAAE,SAAS;AACjD,CAAC;AAEM,IAAM,gBAAgB,eAAe,OAAO;AAAA,EACjD,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,OAAO,EAAE,OAAO;AAAA,EAChB,QAAQ;AACV,CAAC;AAEM,IAAM,gBAAgB,eAAe,OAAO;AAAA,EACjD,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,UAAU,EAAE,MAAM,cAAc;AAClC,CAAC;AAEM,IAAM,aAAa,EAAE,MAAM;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,iCAAiC,sBAAsB;AAAA,EAC3D,EAAE,OAAO;AAAA,IACP,OAAO,EAAE,IAAI;AAAA,EACf,CAAC;AACH;AAEO,IAAM,sBAAsB,EAChC,MAAM;AAAA,EACL,cAAc,KAAK,EAAE,OAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,EAChD,cAAc,KAAK,EAAE,OAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,EAChD,eAAe,KAAK,EAAE,OAAO,MAAM,QAAQ,KAAK,CAAC;AACnD,CAAC,EACA;AAAA,EACC,EAAE,OAAO;AAAA,IACP,OAAO,+BAA+B,SAAS,EAAE,SAAS;AAAA,IAC1D,QAAQ,+BAA+B,SAAS,EAAE,SAAS;AAAA,EAC7D,CAAC;AACH;AAEK,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACnE,OAAO,EAAE,MAAM,UAAU;AAAA,EACzB,UAAU,EACP,OAAO;AAAA,IACN,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IAClE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACpE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACtE,QAAQ,EACL,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAC1C,SAAS,EACT,SAAS;AAAA,IACZ,aAAa,EACV,MAAM,CAAC,EAAE,MAAM,gBAAgB,GAAG,EAAE,UAAU,CAAC,CAAC,EAChD,SAAS,EACT,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,qCACX,0BAA0B,KAAK,EAAE,OAAO,KAAK,CAAC;AAEzC,IAAM,oBAAoB,EAAE,MAAM;AAAA,EACvC,eAAe,KAAK;AAAA,IAClB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,SAAS;AAAA,EACX,CAAC;AAAA,EACD,cAAc,KAAK;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,SAAS;AAAA,EACX,CAAC;AAAA,EACD,cAAc,KAAK;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,SAAS;AAAA,EACX,CAAC;AACH,CAAC;;;AFnXM,IAAM,YAAN,cAAwB,aAAa;AAAA,EAI1C,YAAY;AAAA,IACV;AAAA,IACA,YAAW,sBAAQ,IAAI,uBAAZ,YAAkC;AAAA,EAC/C,IAGI,CAAC,GAAG;AACN,UAAM;AACN,UAAM,UAAU,0BAAU,QAAQ,IAAI;AACtC,QAAI,CAAC,SAAS;AACZ,YAAM,QAAQ,IAAI;AAAA,QAChB;AAAA,MACF;AACA,WAAK,KAAK,SAAS,KAAK;AAAA,IAC1B;AACA,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,SAAS;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAA+C,CAAC,GAAG;AACjD,WAAO,IAAI,eAAe;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS,4BAAW,SAAS,OAAO,CAAC;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAA6B;AAC3C,UAAM,UAAU,CAAC,KAAM,KAAM,KAAM,KAAM,IAAK;AAC9C,eAAW,eAAe,SAAS;AACjC,UAAI;AACF,cAAM,KAAK,WAAW,MAAM;AAC5B;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ;AAAA,UACN,8DACE,cAAc,GAChB;AAAA,QACF;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,WAAW,CAAC;AAAA,MACjE;AAAA,IACF;AACA,YAAQ,KAAK,0DAAgD;AAAA,EAC/D;AAAA,EAEA,MAAM,WAAW,QAA6B;AAC5C,QAAI,OAAO,MAAM,WAAW,GAAG;AAC7B;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,QAAQ,IAAI;AAAA,QAChB;AAAA,MACF;AACA,WAAK,KAAK,SAAS,KAAK;AACxB;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,QAAQ,kBAAkB;AAAA,MAC7D,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB,KAAK;AAAA,QACrB,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,MAAM;AAAA,IAC7B,CAAC;AAED,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,QAAQ,IAAI;AAAA,QAChB;AAAA,MACF;AACA,WAAK,KAAK,SAAS,KAAK;AACxB;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,IAAI;AAAA,QAChB,iCAAiC,SAAS,MAAM;AAAA,MAClD;AACA,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAO1B,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AAXH,yBAA4C,CAAC;AAY3C,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,OAAO,EAAE,SAAS,GAA2B;AA3J/C;AA4JI,SAAK,WAAW,iDACX,KAAK,WACL,WACC,OAAO,SAAS,WAAW,cAC3B,EAAE,QAAQ,CAAC,IAAI,gBAAK,aAAL,mBAAe,WAAf,YAAyB,CAAC,GAAI,GAAG,SAAS,MAAM,EAAE,IACjE,CAAC;AAAA,EAET;AAAA,EAEA,UAAU,QAAoD;AAC5D,UAAM,OAAO,IAAI,cAAc;AAAA,MAC7B,OAAO;AAAA,OACJ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAmD;AAC9D,UAAM,OAAO,IAAI,iBAAiB;AAAA,MAChC,OAAO;AAAA,OACJ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAmD;AAC9D,UAAM,OAAO,IAAI,iBAAiB;AAAA,MAChC,OAAO;AAAA,OACJ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAkB;AACtB,SAAK,cAAc,KAAK,OAAO,IAAI;AACnC,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,mBAAmB;AACjB,iBAAa,KAAK,UAAU;AAC5B,SAAK,aAAa,WAAW,MAAM;AACjC,WAAK,KAAK,UAAU;AAAA,IACtB,GAAG,GAAI;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAChB,iBAAa,KAAK,UAAU;AAE5B,QAAI,QAAyC;AAC7C,QAAI;AACF,cAAQ,0BAA0B,MAAM;AAAA,QACtC,UAAU,KAAK;AAAA,QACf,UAAU,uBAAuB,KAAK,QAAQ;AAAA,QAC9C,OAAO,OAAO,OAAO,KAAK,aAAa;AAAA,MACzC,CAAgC;AAAA,IAClC,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,gBAAQ,KAAK,gDAAsC;AACnD,gBAAQ,KAAK,aAAa,KAAK,EAAE,OAAO;AAAA,MAC1C;AACA,WAAK,OAAO,KAAK,SAAS,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO;AACT,YAAM,KAAK,OAAO,UAAU,KAAK;AAAA,IACnC;AAAA,EACF;AACF;AAEO,IAAM,gBAAN,MAAM,eAAyC;AAAA,EAapD,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAyD;AACvD,SAAK,SAAS,0BAAU,QAAQ,OAAO,CAAC;AACxC,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,OAAO,sBAAQ;AACpB,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,aAAa,kCAAc;AAAA,MAC9B,WAAW,KAAK,IAAI;AAAA,IACtB;AACA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,QAA+D;AACpE,QAAI,OAAO,SAAS,IAAI,GAAG;AACzB,YAAM,QAAQ,IAAI;AAAA,QAChB,wBAAwB,KAAK,MAAM;AAAA,MACrC;AACA,WAAK,MAAM,OAAO,KAAK,SAAS,KAAK;AACrC;AAAA,IACF;AAEA,QAAI,OAAO,MAAM;AACf,WAAK,OAAO,OAAO;AAAA,IACrB;AACA,QAAI,UAAU,QAAQ;AACpB,WAAK,OAAO,OAAO;AAAA,IACrB;AACA,QAAI,WAAW,QAAQ;AACrB,WAAK,QAAQ,OAAO;AAAA,IACtB;AACA,QAAI,YAAY,QAAQ;AACtB,WAAK,SAAS,OAAO;AAAA,IACvB;AACA,QAAI,WAAW,QAAQ;AACrB,WAAK,QAAQ,OAAO;AAAA,IACtB;AACA,QAAI,OAAO,YAAY;AACrB,WAAK,aAAa,OAAO;AAAA,IAC3B;AACA,QAAI,aAAa,QAAQ;AACvB,WAAK,UAAU,OAAO;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,UAAU,QAAoD;AAC5D,UAAM,OAAO,IAAI,eAAc;AAAA,MAC7B,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,OACZ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAmD;AAC9D,UAAM,OAAO,IAAI,iBAAiB;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,OACZ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAmD;AAC9D,UAAM,OAAO,IAAI,iBAAiB;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,OACZ,OACJ;AACD,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAgE;AAClE,SAAK,WAAW,aAAa,KAAK,IAAI;AACtC,QAAI,QAAQ;AACV,WAAK,OAAO,MAAM;AAAA,IACpB;AAEA,WAAO,OAAO,IAAI;AAElB,QAAI;AACF,YAAM,YAAY,WAAW;AAAA,QAC3B,uBAAuB,gDAClB,OADkB;AAAA,UAErB,OAAO;AAAA,UACP,SAAS,KAAK,MAAM;AAAA,UACpB,YAAY,iCACP,KAAK,aADE;AAAA,YAEV,YAAY,KAAK,WAAW;AAAA,UAC9B;AAAA,YACI,KAAK,SAAS,EAAE,OAAO,aAAa,KAAK,KAAK,EAAE,EACrD;AAAA,MACH;AACA,WAAK,MAAM,MAAM,SAAS;AAAA,IAC5B,SAAS,OAAO;AACd,UAAI,iBAAiB,UAAU;AAC7B,gBAAQ,KAAK,+CAAqC;AAClD,gBAAQ,KAAK,aAAa,KAAK,EAAE,OAAO;AAAA,MAC1C;AACA,WAAK,MAAM,OAAO,KAAK,SAAS,KAAK;AAAA,IACvC;AAAA,EACF;AACF;AAEO,IAAM,mBAAN,cAA+B,cAAwC;AAAA,EAK5E,YAAY,QAA6D;AAxW3E;AAyWI,UAAM,mBAAK,OAAQ;AACnB,SAAK,OAAO;AACZ,SAAK,SAAQ,YAAO,UAAP,YAAgB;AAC7B,SAAK,UAAS,YAAO,WAAP,YAAiB,CAAC;AAAA,EAClC;AAAA,EAEA,OAAO,QAAiC;AACtC,UAAM,OAAO,MAAM;AACnB,QAAI,OAAO,OAAO;AAChB,WAAK,QAAQ,OAAO;AAAA,IACtB;AACA,QAAI,OAAO,QAAQ;AACjB,WAAK,SAAS,OAAO;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,IAAI,QAAkC;AACpC,UAAM,IAAI,MAAM;AAAA,EAClB;AACF;AAEO,IAAM,mBAAN,cAA+B,cAAwC;AAAA,EAI5E,YAAY,QAA6D;AAlY3E;AAmYI,UAAM,mBAAK,OAAQ;AACnB,SAAK,OAAO;AACZ,SAAK,YAAW,YAAO,aAAP,YAAmB,CAAC;AAAA,EACtC;AAAA,EAEA,OAAO,QAAiC;AACtC,UAAM,OAAO,MAAM;AACnB,QAAI,OAAO,UAAU;AACnB,WAAK,WAAW,OAAO;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,IAAI,QAAkC;AACpC,UAAM,IAAI,MAAM;AAAA,EAClB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/typeUtils.ts","../src/langchain.ts"],"sourcesContent":["import EventEmitter from \"events\";\nimport { nanoid } from \"nanoid\";\nimport { ZodError } from \"zod\";\nimport { fromZodError } from \"zod-validation-error\";\nimport { camelToSnakeCaseNested, type Strict } from \"./typeUtils\";\nimport {\n type CollectorRESTParams,\n type Span as ServerSpan,\n type SpanTypes,\n} from \"./server/types/tracer\";\nimport {\n collectorRESTParamsSchema,\n spanSchema,\n} from \"./server/types/tracer.generated\";\nimport {\n type BaseSpan,\n type ChatMessage,\n type ChatRichContent,\n type LLMSpan,\n type Metadata,\n type PendingBaseSpan,\n type PendingLLMSpan,\n type PendingRAGSpan,\n type RAGSpan,\n type SpanInputOutput,\n} from \"./types\";\nimport { autoconvertTypedValues, captureError, convertFromVercelAIMessages } from \"./utils\";\nimport { LangWatchCallbackHandler } from \"./langchain\";\n\nexport type {\n BaseSpan,\n ChatMessage as ChatMessage,\n ChatRichContent,\n LLMSpan,\n Metadata,\n PendingBaseSpan,\n PendingLLMSpan,\n PendingRAGSpan,\n RAGSpan,\n SpanInputOutput,\n};\n\nexport { convertFromVercelAIMessages, captureError, autoconvertTypedValues };\n\nexport class LangWatch extends EventEmitter {\n apiKey: string | undefined;\n endpoint: string;\n\n constructor({\n apiKey,\n endpoint = process.env.LANGWATCH_ENDPOINT ?? \"https://app.langwatch.ai\",\n }: {\n apiKey?: string;\n endpoint?: string;\n } = {}) {\n super();\n const apiKey_ = apiKey ?? process.env.LANGWATCH_API_KEY;\n if (!apiKey_) {\n const error = new Error(\n \"LangWatch API key is not set, please set the LANGWATCH_API_KEY environment variable or pass it in the constructor. Traces will not be captured.\"\n );\n this.emit(\"error\", error);\n }\n this.apiKey = apiKey_;\n this.endpoint = endpoint;\n }\n\n getTrace({\n traceId,\n metadata,\n }: { traceId?: string; metadata?: Metadata } = {}) {\n return new LangWatchTrace({\n client: this,\n traceId: traceId ?? `trace_${nanoid()}`,\n metadata,\n });\n }\n\n async sendTrace(params: CollectorRESTParams) {\n const backoff = [1000, 2000, 4000, 8000, 16000];\n for (const backoffTime of backoff) {\n try {\n await this._sendTrace(params);\n return;\n } catch (e) {\n console.warn(\n `[LangWatch] ⚠️ Failed to send trace, retrying in ${\n backoffTime / 1000\n }s`\n );\n await new Promise((resolve) => setTimeout(resolve, backoffTime));\n }\n }\n console.warn(\"[LangWatch] ⚠️ Failed to send trace, giving up\");\n }\n\n async _sendTrace(params: CollectorRESTParams) {\n if (params.spans.length === 0) {\n return;\n }\n\n if (!this.apiKey) {\n const error = new Error(\n \"LangWatch API key is not set, LLMs traces will not be sent, go to https://langwatch.ai to set it up\"\n );\n this.emit(\"error\", error);\n return;\n }\n\n const response = await fetch(`${this.endpoint}/api/collector`, {\n method: \"POST\",\n headers: {\n \"X-Auth-Token\": this.apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(params),\n });\n\n if (response.status === 429) {\n const error = new Error(\n \"Rate limit exceeded, dropping message from being sent to LangWatch. Please check your dashboard to upgrade your plan.\"\n );\n this.emit(\"error\", error);\n return;\n }\n if (!response.ok) {\n const error = new Error(\n `Failed to send trace, status: ${response.status}`\n );\n this.emit(\"error\", error);\n throw error;\n }\n }\n}\n\nexport class LangWatchTrace {\n client: LangWatch;\n traceId: string;\n metadata?: Metadata;\n finishedSpans: Record<string, ServerSpan> = {};\n timeoutRef?: NodeJS.Timeout;\n langchainCallback?: LangWatchCallbackHandler;\n\n constructor({\n client,\n traceId,\n metadata,\n }: {\n client: LangWatch;\n traceId: string;\n metadata?: Metadata;\n }) {\n this.client = client;\n this.traceId = traceId;\n this.metadata = metadata;\n }\n\n update({ metadata }: { metadata: Metadata }) {\n this.metadata = {\n ...this.metadata,\n ...metadata,\n ...(typeof metadata.labels !== \"undefined\"\n ? { labels: [...(this.metadata?.labels ?? []), ...metadata.labels] }\n : {}),\n };\n }\n\n startSpan(params: Omit<Partial<PendingBaseSpan>, \"parentId\">) {\n const span = new LangWatchSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n startLLMSpan(params: Omit<Partial<PendingLLMSpan>, \"parentId\">) {\n const span = new LangWatchLLMSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n startRAGSpan(params: Omit<Partial<PendingRAGSpan>, \"parentId\">) {\n const span = new LangWatchRAGSpan({\n trace: this,\n ...params,\n });\n return span;\n }\n\n getLangChainCallback() {\n if (!this.langchainCallback) {\n this.langchainCallback = new LangWatchCallbackHandler({ trace: this });\n }\n return this.langchainCallback;\n }\n\n onEnd(span: ServerSpan) {\n this.finishedSpans[span.span_id] = span;\n this.delayedSendSpans();\n }\n\n delayedSendSpans() {\n clearTimeout(this.timeoutRef);\n this.timeoutRef = setTimeout(() => {\n void this.sendSpans();\n }, 1000);\n }\n\n async sendSpans() {\n clearTimeout(this.timeoutRef);\n\n let trace: CollectorRESTParams | undefined = undefined;\n try {\n trace = collectorRESTParamsSchema.parse({\n trace_id: this.traceId,\n metadata: camelToSnakeCaseNested(this.metadata),\n spans: Object.values(this.finishedSpans),\n } as Strict<CollectorRESTParams>);\n } catch (error) {\n if (error instanceof ZodError) {\n console.warn(\"[LangWatch] ⚠️ Failed to parse trace\");\n console.warn(fromZodError(error).message);\n }\n this.client.emit(\"error\", error);\n }\n\n if (trace) {\n await this.client.sendTrace(trace);\n }\n }\n}\n\nexport class LangWatchSpan implements PendingBaseSpan {\n trace: LangWatchTrace;\n\n spanId: string;\n parentId?: string | null;\n type: SpanTypes;\n name?: string | null;\n input?: PendingBaseSpan[\"input\"];\n output?: PendingBaseSpan[\"output\"];\n error?: PendingBaseSpan[\"error\"];\n timestamps: PendingBaseSpan[\"timestamps\"];\n metrics: PendingBaseSpan[\"metrics\"];\n\n constructor({\n trace,\n spanId,\n parentId,\n type,\n name,\n input,\n output,\n error,\n timestamps,\n metrics,\n }: Partial<PendingBaseSpan> & { trace: LangWatchTrace }) {\n this.spanId = spanId ?? `span_${nanoid()}`;\n this.parentId = parentId;\n this.trace = trace;\n this.type = type ?? \"span\";\n this.name = name;\n this.input = input;\n this.output = output;\n this.error = error;\n this.timestamps = timestamps ?? {\n startedAt: Date.now(),\n };\n this.metrics = metrics;\n }\n\n update(params: Partial<Omit<PendingBaseSpan, \"spanId\" | \"parentId\">>) {\n if (Object.isFrozen(this)) {\n const error = new Error(\n `Tried to update span ${this.spanId}, but the span is already finished, discarding update`\n );\n this.trace.client.emit(\"error\", error);\n return;\n }\n\n if (params.type) {\n this.type = params.type;\n }\n if (\"name\" in params) {\n this.name = params.name;\n }\n if (\"input\" in params) {\n this.input = params.input;\n }\n if (\"output\" in params) {\n this.output = params.output;\n }\n if (\"error\" in params) {\n this.error = params.error;\n }\n if (params.timestamps) {\n this.timestamps = params.timestamps;\n }\n if (\"metrics\" in params) {\n this.metrics = params.metrics;\n }\n }\n\n startSpan(params: Omit<Partial<PendingBaseSpan>, \"parentId\">) {\n const span = new LangWatchSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n startLLMSpan(params: Omit<Partial<PendingLLMSpan>, \"parentId\">) {\n const span = new LangWatchLLMSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n startRAGSpan(params: Omit<Partial<PendingRAGSpan>, \"parentId\">) {\n const span = new LangWatchRAGSpan({\n trace: this.trace,\n parentId: this.spanId,\n ...params,\n });\n return span;\n }\n\n end(params?: Partial<Omit<PendingBaseSpan, \"spanId\" | \"parentId\">>) {\n this.timestamps.finishedAt = Date.now();\n if (params) {\n this.update(params);\n }\n\n Object.freeze(this);\n\n try {\n const finalSpan = spanSchema.parse(\n camelToSnakeCaseNested({\n ...this,\n trace: undefined,\n traceId: this.trace.traceId,\n timestamps: {\n ...this.timestamps,\n finishedAt: this.timestamps.finishedAt,\n },\n ...(this.error && { error: captureError(this.error) }),\n }) as ServerSpan\n );\n this.trace.onEnd(finalSpan);\n } catch (error) {\n if (error instanceof ZodError) {\n console.warn(\"[LangWatch] ⚠️ Failed to parse span\");\n console.warn(fromZodError(error).message);\n }\n this.trace.client.emit(\"error\", error);\n }\n }\n}\n\nexport class LangWatchLLMSpan extends LangWatchSpan implements PendingLLMSpan {\n type: \"llm\";\n model: PendingLLMSpan[\"model\"];\n params: PendingLLMSpan[\"params\"];\n\n constructor(params: Partial<PendingLLMSpan> & { trace: LangWatchTrace }) {\n super({ ...params });\n this.type = \"llm\";\n this.model = params.model ?? \"unknown\";\n this.params = params.params ?? {};\n }\n\n update(params: Partial<PendingLLMSpan>) {\n super.update(params);\n if (params.model) {\n this.model = params.model;\n }\n if (params.params) {\n this.params = params.params;\n }\n }\n\n end(params?: Partial<PendingLLMSpan>) {\n super.end(params);\n }\n}\n\nexport class LangWatchRAGSpan extends LangWatchSpan implements PendingRAGSpan {\n type: \"rag\";\n contexts: PendingRAGSpan[\"contexts\"];\n\n constructor(params: Partial<PendingRAGSpan> & { trace: LangWatchTrace }) {\n super({ ...params });\n this.type = \"rag\";\n this.contexts = params.contexts ?? [];\n }\n\n update(params: Partial<PendingRAGSpan>) {\n super.update(params);\n if (params.contexts) {\n this.contexts = params.contexts;\n }\n }\n\n end(params?: Partial<PendingRAGSpan>) {\n super.end(params);\n }\n}\n","export type Strict<T> = T & { [K in Exclude<keyof any, keyof T>]: never };\n\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\n ? `${T}${Capitalize<SnakeToCamelCase<U>>}`\n : S;\n\nexport type SnakeToCamelCaseNested<T> = T extends object\n ? T extends (infer U)[]\n ? U extends object\n ? {\n [K in keyof U as SnakeToCamelCase<\n K & string\n >]: SnakeToCamelCaseNested<U[K]>;\n }[]\n : T\n : {\n [K in keyof T as SnakeToCamelCase<K & string>]: SnakeToCamelCaseNested<\n T[K]\n >;\n }\n : T;\n\ntype CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}`\n ? `${T extends Capitalize<T> ? \"_\" : \"\"}${Lowercase<T>}${CamelToSnakeCase<U>}`\n : S;\n\nexport type CamelToSnakeCaseNested<T> = T extends object\n ? T extends (infer U)[]\n ? U extends object\n ? {\n [K in keyof U as CamelToSnakeCase<\n K & string\n >]: CamelToSnakeCaseNested<U[K]>;\n }[]\n : T\n : {\n [K in keyof T as CamelToSnakeCase<K & string>]: CamelToSnakeCaseNested<\n T[K]\n >;\n }\n : T;\n\nfunction camelToSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\nexport function camelToSnakeCaseNested<T>(obj: T): CamelToSnakeCaseNested<T> {\n if (Array.isArray(obj)) {\n return obj.map((item) =>\n camelToSnakeCaseNested(item)\n ) as CamelToSnakeCaseNested<T>;\n } else if (typeof obj === \"object\" && obj !== null) {\n const newObj: any = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const newKey = camelToSnakeCase(key);\n newObj[newKey] = camelToSnakeCaseNested((obj as any)[key]);\n }\n }\n return newObj as CamelToSnakeCaseNested<T>;\n } else {\n return obj as CamelToSnakeCaseNested<T>;\n }\n}\n","import type { AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport { type DocumentInterface } from \"@langchain/core/documents\";\nimport type { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n AIMessage,\n AIMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n mapChatMessagesToStoredMessages,\n type BaseMessage,\n type StoredMessage,\n} from \"@langchain/core/messages\";\nimport type { ChatGeneration, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChainValues } from \"@langchain/core/utils/types\";\nimport { stringify } from \"javascript-stringify\";\nimport {\n type LangWatchRAGSpan,\n type LangWatchSpan,\n type LangWatchTrace,\n} from \".\";\nimport {\n type RAGSpan,\n type BaseSpan,\n type ChatMessage,\n type ChatRichContent,\n type SpanInputOutput,\n} from \"./types\";\n\nexport class LangWatchCallbackHandler extends BaseCallbackHandler {\n name = \"LangWatchCallbackHandler\";\n trace: LangWatchTrace;\n spans: Record<string, LangWatchSpan> = {};\n\n constructor({ trace }: { trace: LangWatchTrace }) {\n super();\n this.trace = trace;\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n _tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n this.spans[runId] = this.buildLLMSpan({\n llm,\n runId,\n parentRunId,\n input: {\n type: \"json\",\n value: prompts,\n },\n extraParams,\n metadata,\n name,\n });\n }\n\n private buildLLMSpan({\n llm,\n runId,\n parentRunId,\n input,\n extraParams,\n metadata,\n name,\n }: {\n llm: Serialized;\n runId: string;\n parentRunId?: string | undefined;\n input: SpanInputOutput;\n extraParams?: Record<string, unknown> | undefined;\n metadata?: Record<string, unknown> | undefined;\n name?: string | undefined;\n }) {\n try {\n const parent = this.getParent(parentRunId);\n\n const vendor = metadata?.ls_provider ?? llm.id.at(-2)?.toString();\n const model =\n metadata?.ls_model_name ?? (llm as any).kwargs?.model ?? \"unknown\";\n\n const span = parent.startLLMSpan({\n spanId: runId,\n name: name ?? llm.id.at(-1)?.toString(),\n input,\n model: [vendor, model].filter((x) => x).join(\"/\"),\n params: {\n temperature: (extraParams?.invocation_params as any)?.temperature,\n ...((extraParams?.invocation_params as any)?.functions\n ? { functions: (extraParams?.invocation_params as any)?.functions }\n : {}),\n },\n });\n\n return span;\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n this.spans[runId] = this.buildLLMSpan({\n name,\n llm,\n runId,\n parentRunId,\n input: {\n type: \"chat_messages\",\n value: messages.flatMap(convertFromLangChainMessages),\n },\n extraParams,\n metadata,\n });\n }\n\n async handleNewToken(_token: string, runId: string): Promise<void> {\n const span = this.spans[runId];\n if (runId && span && !span.timestamps.firstTokenAt) {\n span.update({\n timestamps: { ...span.timestamps, firstTokenAt: Date.now() },\n });\n }\n }\n\n async handleLLMEnd(\n response: LLMResult,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n const span = this.spans[runId];\n if (!span) {\n return;\n }\n\n const outputs: SpanInputOutput[] = [];\n for (const generation of response.generations) {\n // TODO: again, why the twice loop? Can OpenAI generate multiple chat outputs?\n for (const generation_ of generation) {\n if (\"message\" in generation_) {\n outputs.push({\n type: \"chat_messages\",\n value: convertFromLangChainMessages([\n (generation_ as ChatGeneration).message,\n ]),\n });\n } else if (\"text\" in generation_) {\n outputs.push({\n type: \"text\",\n value: generation_.text,\n });\n } else {\n outputs.push({\n type: \"text\",\n value: JSON.stringify(generation_),\n });\n }\n }\n }\n\n const output: SpanInputOutput | undefined =\n outputs.length === 1\n ? outputs[0]\n : { type: \"list\", value: outputs as any };\n\n // Commenting it out because LangChain.js prompt and completion tokens is broken, this one doesn't work as it should with python,\n // and response_metadata.prompt and response_metadata.completion is there but it's always 0. Better let our server count.\n // const metrics = response.llmOutput?.token_usage\n // ? {\n // promptTokens: response.llmOutput.token_usage.prompt_tokens,\n // completionTokens: response.llmOutput.token_usage.completion_tokens,\n // }\n // : undefined;\n\n span.end({\n output,\n // ...(metrics ? { metrics } : {}),\n });\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n async handleLLMError(\n err: Error,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n this.errorSpan({ runId, error: err });\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string | undefined,\n _tags?: string[] | undefined,\n _metadata?: Record<string, unknown> | undefined,\n _runType?: string,\n name?: string\n ): Promise<void> {\n this.spans[runId] = this.buildSpan({\n type: \"chain\",\n serialized: chain,\n runId,\n parentRunId,\n input: inputs,\n name,\n });\n }\n\n async handleChainEnd(\n output: ChainValues,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n this.endSpan({\n runId,\n output,\n });\n }\n\n async handleChainError(\n err: Error,\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined,\n _kwargs?: { inputs?: Record<string, unknown> | undefined } | undefined\n ): Promise<void> {\n this.errorSpan({ runId, error: err });\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string | undefined,\n _tags?: string[] | undefined,\n _metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n this.spans[runId] = this.buildSpan({\n type: \"tool\",\n serialized: tool,\n runId,\n parentRunId,\n input,\n name,\n });\n }\n\n async handleToolEnd(\n output: string,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n this.endSpan({ runId, output });\n }\n\n async handleToolError(\n err: Error,\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined\n ): Promise<void> {\n this.errorSpan({ runId, error: err });\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string | undefined,\n _tags?: string[] | undefined,\n _metadata?: Record<string, unknown> | undefined,\n name?: string | undefined\n ) {\n try {\n const parent = this.getParent(parentRunId);\n\n this.spans[runId] = parent.startRAGSpan({\n spanId: runId,\n name: name ?? retriever.name ?? retriever.id.at(-1)?.toString(),\n input: this.autoconvertTypedValues(query),\n });\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n async handleRetrieverEnd(\n documents: DocumentInterface<Record<string, any>>[],\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined\n ) {\n try {\n const contexts: RAGSpan[\"contexts\"] = documents.map((doc) => ({\n content: doc.pageContent,\n ...(doc.metadata.source ? { documentId: doc.metadata.source } : {}),\n }));\n\n const span = this.spans[runId] as LangWatchRAGSpan;\n if (!span) {\n return;\n }\n\n span.end({\n contexts,\n output: this.autoconvertTypedValues(documents),\n });\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n async handleRetrieverError(\n err: Error,\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined\n ) {\n this.errorSpan({ runId, error: err });\n }\n\n async handleAgentAction(\n _action: AgentAction,\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined\n ): Promise<void> {\n const span = this.spans[runId];\n if (!span) {\n return;\n }\n\n span.update({\n type: \"agent\",\n });\n }\n\n async handleAgentEnd(\n action: AgentFinish,\n runId: string,\n _parentRunId?: string | undefined,\n _tags?: string[] | undefined\n ): Promise<void> {\n this.endSpan({\n runId,\n output: action.returnValues,\n });\n }\n\n private buildSpan({\n type,\n serialized,\n runId,\n parentRunId,\n input,\n name,\n }: {\n type: BaseSpan[\"type\"];\n serialized: Serialized;\n runId: string;\n parentRunId?: string | undefined;\n input: unknown;\n name?: string | undefined;\n }) {\n try {\n const parent = this.getParent(parentRunId);\n\n const span = parent.startSpan({\n spanId: runId,\n type,\n name: name ?? serialized.name ?? serialized.id.at(-1)?.toString(),\n input: this.autoconvertTypedValues(input),\n });\n\n return span;\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n private endSpan({ runId, output }: { runId: string; output: unknown }): void {\n try {\n const span = this.spans[runId];\n if (!span) {\n return;\n }\n\n span.end({\n output: this.autoconvertTypedValues(output),\n });\n } catch (e) {\n this.trace.client.emit(\"error\", e);\n throw e;\n }\n }\n\n private errorSpan({ runId, error }: { runId: string; error: Error }): void {\n const span = this.spans[runId];\n if (!span) {\n return;\n }\n\n span.end({\n error,\n });\n }\n\n private autoconvertTypedValues(value: any): SpanInputOutput | undefined {\n if (\n !value ||\n (typeof value === \"object\" && Object.keys(value).length === 0)\n ) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return { type: \"text\", value };\n }\n try {\n JSON.stringify(value);\n return { type: \"json\", value };\n } catch (e) {\n return { type: \"text\", value: stringify(value) ?? value.toString() };\n }\n }\n\n private getParent(\n parentRunId?: string | undefined\n ): LangWatchSpan | LangWatchTrace {\n return (\n (parentRunId\n ? this.spans[parentRunId]\n : this.spans[Object.keys(this.spans).at(-1) ?? \"\"]) ?? this.trace\n );\n }\n}\n\nexport const convertFromLangChainMessages = (\n messages: BaseMessage[]\n): ChatMessage[] => {\n const chatMessages: ChatMessage[] = [];\n for (const message of messages) {\n chatMessages.push(convertFromLangChainMessage(message));\n }\n return chatMessages;\n};\n\nconst convertFromLangChainMessage = (\n message: BaseMessage & { id?: string[] }\n): ChatMessage => {\n let role: ChatMessage[\"role\"] = \"user\";\n\n const message_: (BaseMessage | StoredMessage) & {\n id?: string[];\n type?: string;\n } = message.lc_serializable\n ? mapChatMessagesToStoredMessages([message])[0]!\n : message;\n\n // Dang this is so hard, langchain.js has 3 ways of representing the same thing...\n if (\n message_ instanceof HumanMessage ||\n message_ instanceof HumanMessageChunk ||\n message_.id?.at(-1) === \"HumanMessage\" ||\n message_.id?.at(-1) === \"HumanMessageChunk\" ||\n message_.type === \"human\"\n ) {\n role = \"user\";\n } else if (\n message instanceof AIMessage ||\n message instanceof AIMessageChunk ||\n message.id?.at(-1) === \"AIMessage\" ||\n message.id?.at(-1) === \"AIMessageChunk\" ||\n message_.type === \"ai\"\n ) {\n role = \"assistant\";\n } else if (\n message instanceof SystemMessage ||\n message instanceof SystemMessageChunk ||\n message.id?.at(-1) === \"SystemMessage\" ||\n message.id?.at(-1) === \"SystemMessageChunk\" ||\n message_.type === \"system\"\n ) {\n role = \"system\";\n } else if (\n message instanceof FunctionMessage ||\n message instanceof FunctionMessageChunk ||\n message.id?.at(-1) === \"FunctionMessage\" ||\n message.id?.at(-1) === \"FunctionMessageChunk\" ||\n message_.type === \"function\"\n ) {\n role = \"function\";\n } else if (\n message instanceof ToolMessage ||\n message instanceof ToolMessageChunk ||\n message.id?.at(-1) === \"ToolMessage\" ||\n message.id?.at(-1) === \"ToolMessageChunk\" ||\n message_.type === \"tool\"\n ) {\n role = \"tool\";\n }\n\n const content =\n typeof message.content === \"string\"\n ? message.content\n : message.content.map(\n (content): ChatRichContent =>\n content.type === \"text\"\n ? { type: \"text\", text: content.text }\n : content.type == \"image_url\"\n ? { type: \"image_url\", image_url: content.image_url }\n : { type: \"text\", text: JSON.stringify(content) }\n );\n\n const functionCall = message.additional_kwargs as\n | ChatMessage[\"function_call\"]\n | undefined;\n\n return {\n role,\n content,\n ...(functionCall &&\n typeof functionCall === \"object\" &&\n Object.keys(functionCall).length > 0\n ? { function_call: functionCall }\n : {}),\n };\n};\n"],"mappings":"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","names":["content"]}
@@ -103,8 +103,8 @@ interface BaseSpan$1 {
103
103
  interface LLMSpan$1 extends BaseSpan$1 {
104
104
  type: "llm";
105
105
  vendor?: string | null;
106
- model: string;
107
- params: SpanParams;
106
+ model?: string;
107
+ params?: SpanParams;
108
108
  }
109
109
  interface RAGChunk {
110
110
  document_id?: string | null;
@@ -210,5 +210,6 @@ type PendingRAGSpan = PendingSpan<RAGSpan>;
210
210
 
211
211
  declare function convertFromVercelAIMessages(messages: CoreMessage[]): ChatMessage[];
212
212
  declare const captureError: (error: unknown) => ErrorCapture;
213
+ declare const autoconvertTypedValues: (value: unknown) => SpanInputOutput;
213
214
 
214
- export { type BaseSpan as B, type CollectorRESTParams as C, type LLMSpan as L, type Metadata as M, type PendingBaseSpan as P, type RAGSpan as R, type Span as S, type PendingLLMSpan as a, type PendingRAGSpan as b, type SpanTypes as c, type ChatMessage as d, type ChatRichContent as e, type SpanInputOutput as f, convertFromVercelAIMessages as g, captureError as h };
215
+ export { type BaseSpan as B, type CollectorRESTParams as C, type LLMSpan as L, type Metadata as M, type PendingBaseSpan as P, type RAGSpan as R, type Span as S, type PendingLLMSpan as a, type PendingRAGSpan as b, type SpanTypes as c, type ChatMessage as d, type ChatRichContent as e, type SpanInputOutput as f, convertFromVercelAIMessages as g, captureError as h, autoconvertTypedValues as i };
@@ -103,8 +103,8 @@ interface BaseSpan$1 {
103
103
  interface LLMSpan$1 extends BaseSpan$1 {
104
104
  type: "llm";
105
105
  vendor?: string | null;
106
- model: string;
107
- params: SpanParams;
106
+ model?: string;
107
+ params?: SpanParams;
108
108
  }
109
109
  interface RAGChunk {
110
110
  document_id?: string | null;
@@ -210,5 +210,6 @@ type PendingRAGSpan = PendingSpan<RAGSpan>;
210
210
 
211
211
  declare function convertFromVercelAIMessages(messages: CoreMessage[]): ChatMessage[];
212
212
  declare const captureError: (error: unknown) => ErrorCapture;
213
+ declare const autoconvertTypedValues: (value: unknown) => SpanInputOutput;
213
214
 
214
- export { type BaseSpan as B, type CollectorRESTParams as C, type LLMSpan as L, type Metadata as M, type PendingBaseSpan as P, type RAGSpan as R, type Span as S, type PendingLLMSpan as a, type PendingRAGSpan as b, type SpanTypes as c, type ChatMessage as d, type ChatRichContent as e, type SpanInputOutput as f, convertFromVercelAIMessages as g, captureError as h };
215
+ export { type BaseSpan as B, type CollectorRESTParams as C, type LLMSpan as L, type Metadata as M, type PendingBaseSpan as P, type RAGSpan as R, type Span as S, type PendingLLMSpan as a, type PendingRAGSpan as b, type SpanTypes as c, type ChatMessage as d, type ChatRichContent as e, type SpanInputOutput as f, convertFromVercelAIMessages as g, captureError as h, autoconvertTypedValues as i };
package/dist/utils.d.mts CHANGED
@@ -1,3 +1,3 @@
1
1
  import 'ai';
2
- export { h as captureError, g as convertFromVercelAIMessages } from './utils-DDcm0z9v.mjs';
2
+ export { i as autoconvertTypedValues, h as captureError, g as convertFromVercelAIMessages } from './utils-K-jSEpnZ.mjs';
3
3
  import 'llm-cost/model_prices_and_context_window.json';
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import 'ai';
2
- export { h as captureError, g as convertFromVercelAIMessages } from './utils-DDcm0z9v.js';
2
+ export { i as autoconvertTypedValues, h as captureError, g as convertFromVercelAIMessages } from './utils-K-jSEpnZ.js';
3
3
  import 'llm-cost/model_prices_and_context_window.json';
package/dist/utils.js CHANGED
@@ -137,6 +137,7 @@ var require_secure_json_parse = __commonJS({
137
137
  // src/utils.ts
138
138
  var utils_exports = {};
139
139
  __export(utils_exports, {
140
+ autoconvertTypedValues: () => autoconvertTypedValues,
140
141
  captureError: () => captureError,
141
142
  convertFromVercelAIMessages: () => convertFromVercelAIMessages
142
143
  });
@@ -157,7 +158,357 @@ function convertUint8ArrayToBase64(array) {
157
158
  return globalThis.btoa(latin1string);
158
159
  }
159
160
 
161
+ // src/server/types/tracer.generated.ts
162
+ var import_zod = require("zod");
163
+ var chatRoleSchema = import_zod.z.union([
164
+ import_zod.z.literal("system"),
165
+ import_zod.z.literal("user"),
166
+ import_zod.z.literal("assistant"),
167
+ import_zod.z.literal("function"),
168
+ import_zod.z.literal("tool"),
169
+ import_zod.z.literal("unknown")
170
+ ]);
171
+ var functionCallSchema = import_zod.z.object({
172
+ name: import_zod.z.string().optional(),
173
+ arguments: import_zod.z.string().optional()
174
+ });
175
+ var toolCallSchema = import_zod.z.object({
176
+ id: import_zod.z.string(),
177
+ type: import_zod.z.string(),
178
+ function: functionCallSchema
179
+ });
180
+ var chatRichContentSchema = import_zod.z.union([
181
+ import_zod.z.object({
182
+ type: import_zod.z.literal("text"),
183
+ text: import_zod.z.string().optional()
184
+ }),
185
+ import_zod.z.object({
186
+ type: import_zod.z.literal("image_url"),
187
+ image_url: import_zod.z.object({
188
+ url: import_zod.z.string(),
189
+ detail: import_zod.z.union([import_zod.z.literal("auto"), import_zod.z.literal("low"), import_zod.z.literal("high")]).optional()
190
+ }).optional()
191
+ })
192
+ ]);
193
+ var typedValueTextSchema = import_zod.z.object({
194
+ type: import_zod.z.literal("text"),
195
+ value: import_zod.z.string()
196
+ });
197
+ var typedValueRawSchema = import_zod.z.object({
198
+ type: import_zod.z.literal("raw"),
199
+ value: import_zod.z.string()
200
+ });
201
+ var jSONSerializableSchema = import_zod.z.union([
202
+ import_zod.z.string(),
203
+ import_zod.z.number(),
204
+ import_zod.z.boolean(),
205
+ import_zod.z.record(import_zod.z.any()),
206
+ import_zod.z.array(import_zod.z.any())
207
+ ]).nullable();
208
+ var typedValueJsonSchema = import_zod.z.object({
209
+ type: import_zod.z.literal("json"),
210
+ value: jSONSerializableSchema
211
+ });
212
+ var moneySchema = import_zod.z.object({
213
+ currency: import_zod.z.string(),
214
+ amount: import_zod.z.number()
215
+ });
216
+ var guardrailResultSchema = import_zod.z.object({
217
+ status: import_zod.z.union([
218
+ import_zod.z.literal("processed"),
219
+ import_zod.z.literal("skipped"),
220
+ import_zod.z.literal("error")
221
+ ]),
222
+ passed: import_zod.z.boolean(),
223
+ score: import_zod.z.number().optional().nullable(),
224
+ details: import_zod.z.string().optional().nullable(),
225
+ cost: moneySchema.optional().nullable()
226
+ });
227
+ var typedValueGuardrailResultSchema = import_zod.z.object({
228
+ type: import_zod.z.literal("guardrail_result"),
229
+ value: guardrailResultSchema
230
+ });
231
+ var errorCaptureSchema = import_zod.z.object({
232
+ has_error: import_zod.z.literal(true),
233
+ message: import_zod.z.string(),
234
+ stacktrace: import_zod.z.array(import_zod.z.string())
235
+ });
236
+ var spanMetricsSchema = import_zod.z.object({
237
+ prompt_tokens: import_zod.z.number().optional().nullable(),
238
+ completion_tokens: import_zod.z.number().optional().nullable(),
239
+ tokens_estimated: import_zod.z.boolean().optional().nullable(),
240
+ cost: import_zod.z.number().optional().nullable()
241
+ });
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()
248
+ });
249
+ var spanTimestampsSchema = import_zod.z.object({
250
+ started_at: import_zod.z.number(),
251
+ first_token_at: import_zod.z.number().optional().nullable(),
252
+ finished_at: import_zod.z.number()
253
+ });
254
+ var spanTypesSchema = import_zod.z.union([
255
+ import_zod.z.literal("span"),
256
+ import_zod.z.literal("llm"),
257
+ import_zod.z.literal("chain"),
258
+ import_zod.z.literal("tool"),
259
+ import_zod.z.literal("agent"),
260
+ import_zod.z.literal("rag"),
261
+ import_zod.z.literal("guardrail"),
262
+ import_zod.z.literal("unknown")
263
+ ]);
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
+ var traceInputSchema = import_zod.z.object({
270
+ value: import_zod.z.string(),
271
+ embeddings: import_zod.z.object({
272
+ model: import_zod.z.string(),
273
+ embeddings: import_zod.z.array(import_zod.z.number())
274
+ }).optional(),
275
+ satisfaction_score: import_zod.z.number().optional()
276
+ });
277
+ var traceOutputSchema = import_zod.z.object({
278
+ value: import_zod.z.string(),
279
+ embeddings: import_zod.z.object({
280
+ model: import_zod.z.string(),
281
+ embeddings: import_zod.z.array(import_zod.z.number())
282
+ }).optional()
283
+ });
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()
312
+ });
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
+ })
321
+ );
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
+ });
359
+ var eventSchema = import_zod.z.object({
360
+ event_id: import_zod.z.string(),
361
+ event_type: import_zod.z.string(),
362
+ project_id: import_zod.z.string(),
363
+ metrics: import_zod.z.record(import_zod.z.number()),
364
+ 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
+ }),
373
+ timestamps: import_zod.z.object({
374
+ started_at: import_zod.z.number(),
375
+ inserted_at: import_zod.z.number(),
376
+ updated_at: import_zod.z.number()
377
+ })
378
+ });
379
+ var elasticSearchEventSchema = eventSchema.omit({ metrics: true, event_details: true }).and(
380
+ import_zod.z.object({
381
+ metrics: import_zod.z.array(
382
+ import_zod.z.object({
383
+ key: import_zod.z.string(),
384
+ value: import_zod.z.number()
385
+ })
386
+ ),
387
+ event_details: import_zod.z.array(
388
+ import_zod.z.object({
389
+ key: import_zod.z.string(),
390
+ value: import_zod.z.string()
391
+ })
392
+ )
393
+ })
394
+ );
395
+ var trackEventRESTParamsValidatorSchema = eventSchema.omit({
396
+ event_id: true,
397
+ project_id: true,
398
+ timestamps: true,
399
+ event_details: true,
400
+ trace_metadata: true
401
+ }).and(
402
+ import_zod.z.object({
403
+ event_id: import_zod.z.string().optional(),
404
+ event_details: import_zod.z.record(import_zod.z.string()).optional(),
405
+ timestamp: import_zod.z.number().optional()
406
+ })
407
+ );
408
+ var chatMessageSchema = import_zod.z.object({
409
+ role: chatRoleSchema.optional(),
410
+ content: import_zod.z.union([import_zod.z.string(), import_zod.z.array(chatRichContentSchema)]).optional().nullable(),
411
+ function_call: functionCallSchema.optional().nullable(),
412
+ tool_calls: import_zod.z.array(toolCallSchema).optional().nullable(),
413
+ tool_call_id: import_zod.z.string().optional().nullable()
414
+ });
415
+ var typedValueChatMessagesSchema = import_zod.z.object({
416
+ type: import_zod.z.literal("chat_messages"),
417
+ value: import_zod.z.array(chatMessageSchema)
418
+ });
419
+ var spanInputOutputSchema = import_zod.z.lazy(
420
+ () => import_zod.z.union([
421
+ typedValueTextSchema,
422
+ typedValueChatMessagesSchema,
423
+ typedValueGuardrailResultSchema,
424
+ typedValueJsonSchema,
425
+ typedValueRawSchema,
426
+ import_zod.z.object({
427
+ type: import_zod.z.literal("list"),
428
+ value: import_zod.z.array(spanInputOutputSchema)
429
+ })
430
+ ])
431
+ );
432
+ var baseSpanSchema = import_zod.z.object({
433
+ span_id: import_zod.z.string(),
434
+ parent_id: import_zod.z.string().optional().nullable(),
435
+ trace_id: import_zod.z.string(),
436
+ type: spanTypesSchema,
437
+ name: import_zod.z.string().optional().nullable(),
438
+ input: spanInputOutputSchema.optional().nullable(),
439
+ output: spanInputOutputSchema.optional().nullable(),
440
+ error: errorCaptureSchema.optional().nullable(),
441
+ timestamps: spanTimestampsSchema,
442
+ metrics: spanMetricsSchema.optional().nullable()
443
+ });
444
+ var lLMSpanSchema = baseSpanSchema.extend({
445
+ type: import_zod.z.literal("llm"),
446
+ vendor: import_zod.z.string().optional().nullable(),
447
+ model: import_zod.z.string().optional(),
448
+ params: spanParamsSchema.optional()
449
+ });
450
+ var rAGSpanSchema = baseSpanSchema.extend({
451
+ type: import_zod.z.literal("rag"),
452
+ contexts: import_zod.z.array(rAGChunkSchema)
453
+ });
454
+ var spanSchema = import_zod.z.union([
455
+ lLMSpanSchema,
456
+ rAGSpanSchema,
457
+ baseSpanSchema
458
+ ]);
459
+ var spanInputOutputValidatorSchema = spanInputOutputSchema.and(
460
+ import_zod.z.object({
461
+ value: import_zod.z.any()
462
+ })
463
+ );
464
+ 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 })
468
+ ]).and(
469
+ import_zod.z.object({
470
+ input: spanInputOutputValidatorSchema.optional().nullable(),
471
+ output: spanInputOutputValidatorSchema.optional().nullable()
472
+ })
473
+ );
474
+ var collectorRESTParamsSchema = import_zod.z.object({
475
+ trace_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
476
+ spans: import_zod.z.array(spanSchema),
477
+ metadata: import_zod.z.object({
478
+ user_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
479
+ thread_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
480
+ customer_id: import_zod.z.union([import_zod.z.string(), import_zod.z.undefined()]).optional().nullable(),
481
+ 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()
484
+ });
485
+ var collectorRESTParamsValidatorSchema = collectorRESTParamsSchema.omit({ spans: true });
486
+ var datasetSpanSchema = import_zod.z.union([
487
+ baseSpanSchema.omit({
488
+ project_id: true,
489
+ trace_id: true,
490
+ id: true,
491
+ timestamps: true,
492
+ metrics: true
493
+ }),
494
+ lLMSpanSchema.omit({
495
+ project_id: true,
496
+ trace_id: true,
497
+ id: true,
498
+ timestamps: true,
499
+ metrics: true
500
+ }),
501
+ rAGSpanSchema.omit({
502
+ project_id: true,
503
+ trace_id: true,
504
+ id: true,
505
+ timestamps: true,
506
+ metrics: true
507
+ })
508
+ ]);
509
+
160
510
  // src/utils.ts
511
+ var import_zod2 = require("zod");
161
512
  var convertImageToUrl = (image, mimeType) => {
162
513
  try {
163
514
  return image instanceof URL ? image.toString() : typeof image === "string" ? image : `data:${mimeType != null ? mimeType : "image/jpeg"};base64,${convertUint8ArrayToBase64(
@@ -283,8 +634,27 @@ var captureError = (error) => {
283
634
  };
284
635
  }
285
636
  };
637
+ var autoconvertTypedValues = (value) => {
638
+ if (typeof value === "string") {
639
+ return { type: "text", value };
640
+ }
641
+ const chatMessages = import_zod2.z.array(chatMessageSchema).safeParse(value);
642
+ if (Array.isArray(value) && chatMessages.success) {
643
+ return {
644
+ type: "chat_messages",
645
+ value: chatMessages.data
646
+ };
647
+ }
648
+ try {
649
+ JSON.stringify(value);
650
+ return { type: "json", value };
651
+ } catch (e) {
652
+ return { type: "raw", value };
653
+ }
654
+ };
286
655
  // Annotate the CommonJS export names for ESM import in node:
287
656
  0 && (module.exports = {
657
+ autoconvertTypedValues,
288
658
  captureError,
289
659
  convertFromVercelAIMessages
290
660
  });