{"version":3,"file":"index.cjs","sources":["../../src/sanitization/base64_recognizer.ts","../../src/sanitization/media_type_context.ts","../../src/sanitization/binary_content_redactor.ts","../../src/sanitization.ts","../../src/utils.ts","../../../../node_modules/.pnpm/decamelize@1.2.0/node_modules/decamelize/index.js","../../../../node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.js","../../../../node_modules/.pnpm/@langchain+core@1.1.29_@opentelemetry+api@1.9.0_@opentelemetry+sdk-trace-base@2.2.0_@op_b5576b05b1f0c657108074bbb9246c56/node_modules/@langchain/core/dist/load/map_keys.js","../../../../node_modules/.pnpm/@langchain+core@1.1.29_@opentelemetry+api@1.9.0_@opentelemetry+sdk-trace-base@2.2.0_@op_b5576b05b1f0c657108074bbb9246c56/node_modules/@langchain/core/dist/load/validation.js","../../../../node_modules/.pnpm/@langchain+core@1.1.29_@opentelemetry+api@1.9.0_@opentelemetry+sdk-trace-base@2.2.0_@op_b5576b05b1f0c657108074bbb9246c56/node_modules/@langchain/core/dist/load/serializable.js","../../../../node_modules/.pnpm/@langchain+core@1.1.29_@opentelemetry+api@1.9.0_@opentelemetry+sdk-trace-base@2.2.0_@op_b5576b05b1f0c657108074bbb9246c56/node_modules/@langchain/core/dist/utils/env.js","../../../../node_modules/.pnpm/@langchain+core@1.1.29_@opentelemetry+api@1.9.0_@opentelemetry+sdk-trace-base@2.2.0_@op_b5576b05b1f0c657108074bbb9246c56/node_modules/@langchain/core/dist/callbacks/base.js","../../src/serializeError.ts","../../src/langchain/callbacks.ts"],"sourcesContent":["const DATA_URL_PREFIX_RE = /^data:([^;,\\s]+)(?:;[^;,\\s]+)*;base64,/i\nconst BASE64_ALPHABET_RE = /^[A-Za-z0-9+/_=-]+$/\n\nexport type Base64Recognition = { kind: 'data-url'; mediaType: string } | { kind: 'raw' } | { kind: 'none' }\n\nexport class Base64Recognizer {\n  recognize(value: string, minLength: number): Base64Recognition {\n    const dataUrl = DATA_URL_PREFIX_RE.exec(value)\n    if (dataUrl) return { kind: 'data-url', mediaType: dataUrl[1] }\n\n    if (value.length < minLength) return { kind: 'none' }\n\n    const confidencePrefix = value.slice(0, minLength)\n    if (BASE64_ALPHABET_RE.test(confidencePrefix)) {\n      return { kind: 'raw' }\n    } else {\n      return { kind: 'none' }\n    }\n  }\n}\n","const MIME_HINT_KEYS = ['mediaType', 'media_type', 'mimeType', 'mime_type'] as const\n\nconst STRONG_CONTEXT_KEYS = new Set([\n  'data',\n  'file_data',\n  'fileData',\n  'image_url',\n  'imageUrl',\n  'video_url',\n  'videoUrl',\n  'audio',\n  'audio_data',\n  'audioData',\n  'inline_data',\n  'inlineData',\n  'source',\n  'result',\n])\n\nconst STRONG_CONTEXT_TYPES = new Set([\n  'image',\n  'image_url',\n  'input_image',\n  'audio',\n  'input_audio',\n  'video',\n  'video_url',\n  'file',\n  'input_file',\n  'document',\n  'media',\n  'file-data',\n])\n\nconst FILE_FAMILY_TYPES = new Set(['file', 'input_file', 'document', 'media', 'file-data'])\n\nconst KNOWN_AUDIO_FORMATS = new Set(['wav', 'mp3', 'ogg', 'flac', 'm4a', 'aac', 'webm'])\n\nexport class MediaTypeContext {\n  static readonly EMPTY = new MediaTypeContext(undefined, undefined)\n\n  constructor(\n    private readonly parent: Record<string, unknown> | undefined,\n    private readonly key: string | undefined\n  ) {}\n\n  inferMediaType(): string | undefined {\n    return (\n      this.inferFromSiblingMime() ?? this.inferFromSiblingFormat() ?? this.inferFromParentType() ?? this.inferFromKey()\n    )\n  }\n\n  inferFromSiblingMime(): string | undefined {\n    if (!this.parent) return undefined\n    for (const hint of MIME_HINT_KEYS) {\n      const v = this.parent[hint]\n      if (typeof v === 'string') return v\n    }\n    return undefined\n  }\n\n  inferFromSiblingFormat(): string | undefined {\n    if (!this.parent) return undefined\n    const fmt = this.parent.format\n    if (typeof fmt === 'string' && KNOWN_AUDIO_FORMATS.has(fmt.toLowerCase())) {\n      return `audio/${fmt.toLowerCase()}`\n    }\n    return undefined\n  }\n\n  inferFromParentType(): string | undefined {\n    if (!this.parent) return undefined\n    const t = this.parent.type\n    if (typeof t !== 'string') return undefined\n    if (t === 'image' || t === 'image_url' || t === 'input_image') return 'image'\n    if (t === 'audio' || t === 'input_audio') return 'audio'\n    if (t === 'video' || t === 'video_url') return 'video'\n    if (FILE_FAMILY_TYPES.has(t)) return 'application/octet-stream'\n    return undefined\n  }\n\n  inferFromKey(): string | undefined {\n    if (!this.key) return undefined\n    const key = this.key.toLowerCase()\n    if (key.includes('audio')) return 'audio'\n    if (key.includes('video')) return 'video'\n    if (key.includes('image')) return 'image'\n    if (key.includes('file') || key.includes('document')) return 'application/octet-stream'\n    return undefined\n  }\n\n  signalsBinary(): boolean {\n    if (this.parent) {\n      for (const hint of MIME_HINT_KEYS) {\n        if (typeof this.parent[hint] === 'string') return true\n      }\n      const fmt = this.parent.format\n      if (typeof fmt === 'string' && KNOWN_AUDIO_FORMATS.has(fmt.toLowerCase())) return true\n      const t = this.parent.type\n      if (typeof t === 'string' && STRONG_CONTEXT_TYPES.has(t)) return true\n    }\n    if (this.key && STRONG_CONTEXT_KEYS.has(this.key)) return true\n    return false\n  }\n}\n","import { Base64Recognizer } from './base64_recognizer'\nimport { MediaTypeContext } from './media_type_context'\n\nconst STRONG_CONTEXT_MIN_LENGTH = 64\nconst WEAK_CONTEXT_MIN_LENGTH = 1024\n\nexport class BinaryContentRedactor {\n  private visited: WeakSet<object> = new WeakSet()\n\n  constructor(private readonly recognizer: Base64Recognizer = new Base64Recognizer()) {}\n\n  redact<T>(value: T): T\n  redact(value: unknown): unknown {\n    if (this.isMultimodalEnabled()) return value\n    this.visited = new WeakSet()\n    return this.walk(value, MediaTypeContext.EMPTY)\n  }\n\n  private walk(value: unknown, ctx: MediaTypeContext): unknown {\n    if (value === null || value === undefined) return value\n    if (typeof value === 'string') return this.redactString(value, ctx)\n    if (typeof value !== 'object') return value\n\n    // Buffer extends Uint8Array, so this branch catches both.\n    if (typeof Uint8Array !== 'undefined' && value instanceof Uint8Array) {\n      return this.placeholderFor(ctx.inferMediaType())\n    }\n\n    if (this.visited.has(value)) return null\n    this.visited.add(value)\n\n    if (Array.isArray(value)) {\n      return value.map((item) => this.walk(item, ctx))\n    }\n\n    const obj = value as Record<string, unknown>\n    const out: Record<string, unknown> = {}\n    for (const k of Object.keys(obj)) {\n      out[k] = this.walk(obj[k], new MediaTypeContext(obj, k))\n    }\n    return out\n  }\n\n  private redactString(value: string, ctx: MediaTypeContext): string {\n    const minLength = ctx.signalsBinary() ? STRONG_CONTEXT_MIN_LENGTH : WEAK_CONTEXT_MIN_LENGTH\n    const recognition = this.recognizer.recognize(value, minLength)\n    switch (recognition.kind) {\n      case 'data-url':\n        return this.placeholderFor(recognition.mediaType)\n      case 'raw':\n        return this.placeholderFor(ctx.inferMediaType())\n      case 'none':\n        return value\n    }\n  }\n\n  private placeholderFor(mediaType?: string): string {\n    if (!mediaType) return '[base64 redacted]'\n    if (mediaType === 'application/octet-stream') return '[base64 file redacted]'\n    return `[base64 ${mediaType} redacted]`\n  }\n\n  private isMultimodalEnabled(): boolean {\n    const val = process.env._INTERNAL_LLMA_MULTIMODAL || ''\n    return val.toLowerCase() === 'true' || val === '1' || val.toLowerCase() === 'yes'\n  }\n}\n","import { BinaryContentRedactor } from './sanitization/binary_content_redactor'\n\nconst redactor = new BinaryContentRedactor()\n\nexport function redactBase64DataUrl(str: string): string\nexport function redactBase64DataUrl(str: unknown): unknown\nexport function redactBase64DataUrl(str: unknown): unknown {\n  return redactor.redact(str)\n}\n\nexport const sanitizeOpenAI = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeOpenAIResponse = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeAnthropic = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeGemini = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeLangChain = (data: unknown): unknown => redactor.redact(data)\n","import { PostHog } from 'posthog-node'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\nimport type { ChatCompletionTool } from 'openai/resources/chat/completions'\nimport type { ResponseCreateParamsWithTools } from 'openai/lib/ResponsesParser'\nimport type { Tool as GeminiTool } from '@google/genai'\nimport type {\n  FormattedMessage,\n  FormattedContent,\n  FormattedAudioContent,\n  FormattedImageContent,\n  FormattedDocumentContent,\n} from './types'\nimport { v4 as uuidv4 } from 'uuid'\nimport { isString } from './typeGuards'\nimport { redactBase64DataUrl } from './sanitization'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\ntype EmbeddingCreateParams = OpenAIOrignal.EmbeddingCreateParams\ntype TranscriptionCreateParams = OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams\ntype AnthropicTool = AnthropicOriginal.Tool\n\nconst TOKEN_PROPERTY_KEYS = new Set([\n  '$ai_input_tokens',\n  '$ai_output_tokens',\n  '$ai_cache_read_input_tokens',\n  '$ai_cache_creation_input_tokens',\n  '$ai_total_tokens',\n  '$ai_reasoning_tokens',\n])\n\nexport function getTokensSource(posthogProperties?: Record<string, unknown>): string {\n  if (posthogProperties && Object.keys(posthogProperties).some((key) => TOKEN_PROPERTY_KEYS.has(key))) {\n    return 'passthrough'\n  }\n  return 'sdk'\n}\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\n// Reused across calls to avoid per-invocation allocation; truncate() runs\n// hundreds of times for prompts with many parts.\nconst sharedTextEncoder = new TextEncoder()\nconst sharedTextDecoder = new TextDecoder(STRING_FORMAT, { fatal: false })\n\nexport const utf8ByteLength = (str: string): number => sharedTextEncoder.encode(str).byteLength\n\n/**\n * Safely converts content to a string, preserving structure for objects/arrays.\n * - If content is already a string, returns it as-is\n * - If content is an object or array, stringifies it with JSON.stringify to preserve structure\n * - Otherwise, converts to string with String()\n *\n * This prevents the \"[object Object]\" bug when objects are naively converted to strings.\n *\n * @param content - The content to convert to a string\n * @returns A string representation that preserves structure for complex types\n */\nexport function toContentString(content: unknown): string {\n  if (typeof content === 'string') {\n    return content\n  }\n  if (content !== undefined && content !== null && typeof content === 'object') {\n    try {\n      return JSON.stringify(content)\n    } catch {\n      // Fallback for circular refs, BigInt, or objects with throwing toJSON\n      return String(content)\n    }\n  }\n  return String(content)\n}\n\nexport interface MonitoringEventPropertiesWithDefaults {\n  distinctId?: string\n  traceId: string\n  properties?: Record<string, any>\n  privacyMode: boolean\n  groups?: Record<string, any>\n  modelOverride?: string\n  providerOverride?: string\n  costOverride?: CostOverride\n  captureImmediate?: boolean\n}\n\nexport type MonitoringEventProperties = Partial<MonitoringEventPropertiesWithDefaults>\n\nexport type MonitoringParams = {\n  [K in keyof MonitoringEventProperties as `posthog${Capitalize<string & K>}`]: MonitoringEventProperties[K]\n}\n\nexport interface CostOverride {\n  inputCost: number\n  outputCost: number\n}\n\nexport const getModelParams = (\n  params:\n    | ((\n        | ChatCompletionCreateParamsBase\n        | MessageCreateParams\n        | ResponseCreateParams\n        | ResponseCreateParamsWithTools\n        | EmbeddingCreateParams\n        | TranscriptionCreateParams\n      ) &\n        MonitoringParams)\n    | null\n): Record<string, any> => {\n  if (!params) {\n    return {}\n  }\n  const modelParams: Record<string, any> = {}\n  const paramKeys = [\n    'temperature',\n    'max_tokens',\n    'max_completion_tokens',\n    'top_p',\n    'frequency_penalty',\n    'presence_penalty',\n    'n',\n    'stop',\n    'stream',\n    'streaming',\n    'language',\n    'response_format',\n    'timestamp_granularities',\n  ] as const\n\n  for (const key of paramKeys) {\n    if (key in params && (params as any)[key] !== undefined) {\n      modelParams[key] = (params as any)[key]\n    }\n  }\n  return modelParams\n}\n\n/**\n * Helper to format responses (non-streaming) for consumption\n */\nexport const formatResponse = (response: any, provider: string): FormattedMessage[] => {\n  if (!response) {\n    return []\n  }\n  if (provider === 'anthropic') {\n    return formatResponseAnthropic(response)\n  } else if (provider === 'openai') {\n    return formatResponseOpenAI(response)\n  } else if (provider === 'gemini') {\n    return formatResponseGemini(response)\n  }\n  return []\n}\n\nexport const formatResponseAnthropic = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n  const content: FormattedContent = []\n\n  for (const choice of response.content ?? []) {\n    if (choice?.type === 'text' && choice?.text) {\n      content.push({ type: 'text', text: choice.text })\n    } else if (choice?.type === 'tool_use' && choice?.name && choice?.id) {\n      content.push({\n        type: 'function',\n        id: choice.id,\n        function: {\n          name: choice.name,\n          arguments: choice.input || {},\n        },\n      })\n    }\n  }\n\n  if (content.length > 0) {\n    output.push({\n      role: 'assistant',\n      content,\n    })\n  }\n\n  return output\n}\n\nexport const formatResponseOpenAI = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n\n  if (response.choices) {\n    for (const choice of response.choices) {\n      const content: FormattedContent = []\n      let role = 'assistant'\n\n      if (choice.message) {\n        if (choice.message.role) {\n          role = choice.message.role\n        }\n\n        if (choice.message.content) {\n          content.push({ type: 'text', text: choice.message.content })\n        }\n\n        if (choice.message.tool_calls) {\n          for (const toolCall of choice.message.tool_calls) {\n            content.push({\n              type: 'function',\n              id: toolCall.id,\n              function: {\n                name: toolCall.function.name,\n                arguments: toolCall.function.arguments,\n              },\n            })\n          }\n        }\n\n        // Handle audio output (gpt-4o-audio-preview)\n        if (choice.message.audio) {\n          content.push({\n            type: 'audio',\n            ...choice.message.audio,\n          })\n        }\n      }\n\n      if (content.length > 0) {\n        output.push({\n          role,\n          content,\n        })\n      }\n    }\n  }\n\n  // Handle Responses API format\n  if (response.output) {\n    const content: FormattedContent = []\n    let role = 'assistant'\n\n    for (const item of response.output) {\n      if (item.type === 'message') {\n        role = item.role\n\n        if (item.content && Array.isArray(item.content)) {\n          for (const contentItem of item.content) {\n            if (contentItem.type === 'output_text' && contentItem.text) {\n              content.push({ type: 'text', text: contentItem.text })\n            } else if (contentItem.text) {\n              content.push({ type: 'text', text: contentItem.text })\n            } else if (contentItem.type === 'input_image' && contentItem.image_url) {\n              content.push({\n                type: 'image',\n                image: contentItem.image_url,\n              })\n            }\n          }\n        } else if (item.content) {\n          content.push({ type: 'text', text: String(item.content) })\n        }\n      } else if (item.type === 'function_call') {\n        content.push({\n          type: 'function',\n          id: item.call_id || item.id || '',\n          function: {\n            name: item.name,\n            arguments: item.arguments || {},\n          },\n        })\n      }\n    }\n\n    if (content.length > 0) {\n      output.push({\n        role,\n        content,\n      })\n    }\n  }\n\n  return output\n}\n\nexport const buildInlineDataBlock = (\n  mimeType: string,\n  data: string\n): FormattedAudioContent | FormattedImageContent | FormattedDocumentContent => {\n  if (mimeType.startsWith('audio/')) {\n    return { type: 'audio', mime_type: mimeType, data }\n  }\n  if (mimeType.startsWith('image/')) {\n    return { type: 'image', inline_data: { mime_type: mimeType, data } }\n  }\n  return { type: 'document', inline_data: { mime_type: mimeType, data } }\n}\n\nexport const formatResponseGemini = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n\n  if (response.candidates && Array.isArray(response.candidates)) {\n    for (const candidate of response.candidates) {\n      if (candidate.content && candidate.content.parts) {\n        const content: FormattedContent = []\n\n        for (const part of candidate.content.parts) {\n          if (part.text) {\n            content.push({ type: 'text', text: part.text })\n          } else if (part.functionCall) {\n            content.push({\n              type: 'function',\n              function: {\n                name: part.functionCall.name,\n                arguments: part.functionCall.args,\n              },\n            })\n          } else if (part.inlineData) {\n            // Handle inline data (images, audio, documents)\n            const mimeType = part.inlineData.mimeType || part.inlineData.mime_type || 'application/octet-stream'\n            let data = part.inlineData.data\n\n            // Handle binary data (Uint8Array/Buffer -> base64)\n            if (data instanceof Uint8Array) {\n              if (typeof Buffer !== 'undefined') {\n                data = Buffer.from(data).toString('base64')\n              } else {\n                let binary = ''\n                for (let i = 0; i < data.length; i++) {\n                  binary += String.fromCharCode(data[i])\n                }\n                data = btoa(binary)\n              }\n            }\n\n            // Sanitize base64 data for images and other large inline data\n            data = redactBase64DataUrl(data)\n\n            content.push(buildInlineDataBlock(mimeType, data))\n          }\n        }\n\n        if (content.length > 0) {\n          output.push({\n            role: 'assistant',\n            content,\n          })\n        }\n      } else if (candidate.text) {\n        output.push({\n          role: 'assistant',\n          content: [{ type: 'text', text: candidate.text }],\n        })\n      }\n    }\n  } else if (response.text) {\n    output.push({\n      role: 'assistant',\n      content: [{ type: 'text', text: response.text }],\n    })\n  }\n\n  return output\n}\n\nexport const mergeSystemPrompt = (params: MessageCreateParams & MonitoringParams, provider: string): any => {\n  if (provider == 'anthropic') {\n    const messages = params.messages || []\n    if (!(params as any).system) {\n      return messages\n    }\n    const systemMessage = (params as any).system\n    return [{ role: 'system', content: systemMessage }, ...messages]\n  }\n  return params.messages\n}\n\nexport const withPrivacyMode = (client: PostHog, privacyMode: boolean, input: any): any => {\n  return (client as any).privacy_mode || privacyMode ? null : input\n}\n\nfunction toSafeString(input: unknown): string {\n  if (input === undefined || input === null) {\n    return ''\n  }\n  if (typeof input === 'string') {\n    return input\n  }\n  try {\n    return JSON.stringify(input)\n  } catch {\n    console.warn('Failed to stringify input', input)\n    return ''\n  }\n}\n\nexport const truncate = (input: unknown): string => {\n  const str = toSafeString(input)\n  if (str === '') {\n    return ''\n  }\n\n  // Check if we need to truncate and ensure STRING_FORMAT is respected\n  const buffer = sharedTextEncoder.encode(str)\n  if (buffer.length <= MAX_OUTPUT_SIZE) {\n    // Ensure STRING_FORMAT is respected\n    return sharedTextDecoder.decode(buffer)\n  }\n\n  // Truncate the buffer and ensure a valid string is returned.\n  // fatal: false means we get U+FFFD at the end if truncation broke the encoding.\n  const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n  let truncatedStr = sharedTextDecoder.decode(truncatedBuffer)\n  if (truncatedStr.endsWith('\\uFFFD')) {\n    truncatedStr = truncatedStr.slice(0, -1)\n  }\n  return `${truncatedStr}... [truncated]`\n}\n\n/**\n * Calculate web search count from raw API response.\n *\n * Uses a two-tier detection strategy:\n * Priority 1 (Exact Count): Count actual web search calls when available\n * Priority 2 (Binary Detection): Return 1 if web search indicators are present, 0 otherwise\n *\n * @param result - Raw API response from any provider (OpenAI, Perplexity, OpenRouter, Gemini, etc.)\n * @returns Number of web searches performed (exact count or binary 1/0)\n */\nexport function calculateWebSearchCount(result: unknown): number {\n  if (!result || typeof result !== 'object') {\n    return 0\n  }\n\n  // Priority 1: Exact Count\n  // Check for OpenAI Responses API web_search_call items\n  if ('output' in result && Array.isArray(result.output)) {\n    let count = 0\n\n    for (const item of result.output) {\n      if (typeof item === 'object' && item !== null && 'type' in item && item.type === 'web_search_call') {\n        count++\n      }\n    }\n\n    if (count > 0) {\n      return count\n    }\n  }\n\n  // Priority 2: Binary Detection (1 or 0)\n\n  // Check for citations at root level (Perplexity)\n  if ('citations' in result && Array.isArray(result.citations) && result.citations.length > 0) {\n    return 1\n  }\n\n  // Check for search_results at root level (Perplexity via OpenRouter)\n  if ('search_results' in result && Array.isArray(result.search_results) && result.search_results.length > 0) {\n    return 1\n  }\n\n  // Check for usage.search_context_size (Perplexity via OpenRouter)\n  if ('usage' in result && typeof result.usage === 'object' && result.usage !== null) {\n    if ('search_context_size' in result.usage && result.usage.search_context_size) {\n      return 1\n    }\n  }\n\n  // Check for annotations with url_citation in choices[].message or choices[].delta (OpenAI/Perplexity)\n  if ('choices' in result && Array.isArray(result.choices)) {\n    for (const choice of result.choices) {\n      if (typeof choice === 'object' && choice !== null) {\n        // Check both message (non-streaming) and delta (streaming) for annotations\n        const content = ('message' in choice ? choice.message : null) || ('delta' in choice ? choice.delta : null)\n\n        if (typeof content === 'object' && content !== null && 'annotations' in content) {\n          const annotations = content.annotations\n\n          if (Array.isArray(annotations)) {\n            const hasUrlCitation = annotations.some((ann: unknown) => {\n              return typeof ann === 'object' && ann !== null && 'type' in ann && ann.type === 'url_citation'\n            })\n\n            if (hasUrlCitation) {\n              return 1\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Check for annotations in output[].content[] (OpenAI Responses API)\n  if ('output' in result && Array.isArray(result.output)) {\n    for (const item of result.output) {\n      if (typeof item === 'object' && item !== null && 'content' in item) {\n        const content = item.content\n\n        if (Array.isArray(content)) {\n          for (const contentItem of content) {\n            if (typeof contentItem === 'object' && contentItem !== null && 'annotations' in contentItem) {\n              const annotations = contentItem.annotations\n\n              if (Array.isArray(annotations)) {\n                const hasUrlCitation = annotations.some((ann: unknown) => {\n                  return typeof ann === 'object' && ann !== null && 'type' in ann && ann.type === 'url_citation'\n                })\n\n                if (hasUrlCitation) {\n                  return 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Check for grounding_metadata (Gemini)\n  if ('candidates' in result && Array.isArray(result.candidates)) {\n    for (const candidate of result.candidates) {\n      if (\n        typeof candidate === 'object' &&\n        candidate !== null &&\n        'grounding_metadata' in candidate &&\n        candidate.grounding_metadata\n      ) {\n        return 1\n      }\n    }\n  }\n\n  return 0\n}\n\n/**\n * Extract available tool calls from the request parameters.\n * These are the tools provided to the LLM, not the tool calls in the response.\n */\nexport const extractAvailableToolCalls = (\n  provider: string,\n  params: any\n): ChatCompletionTool[] | AnthropicTool[] | GeminiTool[] | null => {\n  if (provider === 'anthropic') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  } else if (provider === 'gemini') {\n    if (params.config && params.config.tools) {\n      return params.config.tools\n    }\n\n    return null\n  } else if (provider === 'openai') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  } else if (provider === 'vercel') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  }\n\n  return null\n}\n\nexport enum AIEvent {\n  Generation = '$ai_generation',\n  Embedding = '$ai_embedding',\n}\n\nexport function sanitizeValues(obj: any): any {\n  if (obj === undefined || obj === null) {\n    return obj\n  }\n  const jsonSafe = JSON.parse(JSON.stringify(obj))\n  if (typeof jsonSafe === 'string') {\n    // Sanitize lone surrogates by round-tripping through UTF-8\n    return new TextDecoder().decode(new TextEncoder().encode(jsonSafe))\n  } else if (Array.isArray(jsonSafe)) {\n    return jsonSafe.map(sanitizeValues)\n  } else if (jsonSafe && typeof jsonSafe === 'object') {\n    return Object.fromEntries(Object.entries(jsonSafe).map(([k, v]) => [k, sanitizeValues(v)]))\n  }\n  return jsonSafe\n}\n\nconst POSTHOG_PARAMS_MAP: Record<keyof MonitoringParams, string> = {\n  posthogDistinctId: 'distinctId',\n  posthogTraceId: 'traceId',\n  posthogProperties: 'properties',\n  posthogPrivacyMode: 'privacyMode',\n  posthogGroups: 'groups',\n  posthogModelOverride: 'modelOverride',\n  posthogProviderOverride: 'providerOverride',\n  posthogCostOverride: 'costOverride',\n  posthogCaptureImmediate: 'captureImmediate',\n}\n\nexport function extractPosthogParams<T>(body: T & MonitoringParams): {\n  providerParams: T\n  posthogParams: MonitoringEventPropertiesWithDefaults\n} {\n  const providerParams: Record<string, unknown> = {}\n  const posthogParams: Record<string, unknown> = {}\n\n  for (const [key, value] of Object.entries(body)) {\n    if (POSTHOG_PARAMS_MAP[key as keyof MonitoringParams]) {\n      posthogParams[POSTHOG_PARAMS_MAP[key as keyof MonitoringParams]] = value\n    } else if (key.startsWith('posthog')) {\n      console.warn(`Unknown Posthog parameter ${key}`)\n    } else {\n      providerParams[key] = value\n    }\n  }\n\n  return {\n    providerParams: providerParams as T,\n    posthogParams: addDefaults(posthogParams),\n  }\n}\n\nfunction addDefaults(params: MonitoringEventProperties): MonitoringEventPropertiesWithDefaults {\n  return {\n    ...params,\n    privacyMode: params.privacyMode ?? false,\n    traceId: params.traceId ?? uuidv4(),\n  }\n}\n\nexport function formatOpenAIResponsesInput(input: unknown, instructions?: string | null): FormattedMessage[] {\n  const messages: FormattedMessage[] = []\n\n  if (instructions) {\n    messages.push({\n      role: 'system',\n      content: instructions,\n    })\n  }\n\n  if (Array.isArray(input)) {\n    for (const item of input) {\n      if (typeof item === 'string') {\n        messages.push({ role: 'user', content: item })\n      } else if (item && typeof item === 'object') {\n        const obj = item as Record<string, unknown>\n        const role = isString(obj.role) ? obj.role : 'user'\n\n        // Handle content properly - preserve structure for objects/arrays\n        const content = obj.content ?? obj.text ?? item\n        messages.push({ role, content: toContentString(content) })\n      } else {\n        messages.push({ role: 'user', content: toContentString(item) })\n      }\n    }\n  } else if (typeof input === 'string') {\n    messages.push({ role: 'user', content: input })\n  } else if (input) {\n    messages.push({ role: 'user', content: toContentString(input) })\n  }\n\n  return messages\n}\n","'use strict';\nmodule.exports = function (str, sep) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tsep = typeof sep === 'undefined' ? '_' : sep;\n\n\treturn str\n\t\t.replace(/([a-z\\d])([A-Z])/g, '$1' + sep + '$2')\n\t\t.replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, '$1' + sep + '$2')\n\t\t.toLowerCase();\n};\n","'use strict';\n\nconst UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/gu;\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp('\\\\d+' + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => {\n\tLEADING_CAPITAL.lastIndex = 0;\n\n\treturn input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));\n};\n\nconst postProcess = (input, toUpperCase) => {\n\tSEPARATORS_AND_IDENTIFIER.lastIndex = 0;\n\tNUMBERS_AND_IDENTIFIER.lastIndex = 0;\n\n\treturn input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))\n\t\t.replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst toLowerCase = options.locale === false ?\n\t\tstring => string.toLowerCase() :\n\t\tstring => string.toLocaleLowerCase(options.locale);\n\tconst toUpperCase = options.locale === false ?\n\t\tstring => string.toUpperCase() :\n\t\tstring => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? toUpperCase(input) : toLowerCase(input);\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input, toLowerCase, toUpperCase);\n\t}\n\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\n\tif (options.preserveConsecutiveUppercase) {\n\t\tinput = preserveConsecutiveUppercase(input, toLowerCase);\n\t} else {\n\t\tinput = toLowerCase(input);\n\t}\n\n\tif (options.pascalCase) {\n\t\tinput = toUpperCase(input.charAt(0)) + input.slice(1);\n\t}\n\n\treturn postProcess(input, toUpperCase);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\n//#region src/load/map_keys.ts\nfunction keyToJson(key, map) {\n\treturn map?.[key] || snakeCase(key);\n}\nfunction keyFromJson(key, map) {\n\treturn map?.[key] || camelCase(key);\n}\nfunction mapKeys(fields, mapper, map) {\n\tconst mapped = {};\n\tfor (const key in fields) if (Object.hasOwn(fields, key)) mapped[mapper(key, map)] = fields[key];\n\treturn mapped;\n}\n\n//#endregion\nexport { keyFromJson, keyToJson, mapKeys };\n//# sourceMappingURL=map_keys.js.map","//#region src/load/validation.ts\n/**\n* Sentinel key used to mark escaped user objects during serialization.\n*\n* When a plain object contains 'lc' key (which could be confused with LC objects),\n* we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n*/\nconst LC_ESCAPED_KEY = \"__lc_escaped__\";\n/**\n* Check if an object needs escaping to prevent confusion with LC objects.\n*\n* An object needs escaping if:\n* 1. It has an `'lc'` key (could be confused with LC serialization format)\n* 2. It has only the escape key (would be mistaken for an escaped object)\n*/\nfunction needsEscaping(obj) {\n\treturn \"lc\" in obj || Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n/**\n* Wrap an object in the escape marker.\n*\n* @example\n* ```typescript\n* {\"key\": \"value\"}  // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n* ```\n*/\nfunction escapeObject(obj) {\n\treturn { [LC_ESCAPED_KEY]: obj };\n}\n/**\n* Check if an object is an escaped user object.\n*\n* @example\n* ```typescript\n* {\"__lc_escaped__\": {...}}  // is an escaped object\n* ```\n*/\nfunction isEscapedObject(obj) {\n\treturn Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n/**\n* Check if an object looks like a Serializable instance (duck typing).\n*/\nfunction isSerializableLike(obj) {\n\treturn obj !== null && typeof obj === \"object\" && \"lc_serializable\" in obj && typeof obj.toJSON === \"function\";\n}\n/**\n* Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n*/\nfunction createNotImplemented(obj) {\n\tlet id;\n\tif (obj !== null && typeof obj === \"object\") if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) id = obj.lc_id;\n\telse id = [obj.constructor?.name ?? \"Object\"];\n\telse id = [typeof obj];\n\treturn {\n\t\tlc: 1,\n\t\ttype: \"not_implemented\",\n\t\tid\n\t};\n}\n/**\n* Escape a value if it needs escaping (contains `lc` key).\n*\n* This is a simpler version of `serializeValue` that doesn't handle Serializable\n* objects - it's meant to be called on kwargs values that have already been\n* processed by `toJSON()`.\n*\n* @param value - The value to potentially escape.\n* @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n*                  Objects are removed after processing to allow shared references (same object in\n*                  multiple places) while still detecting true circular references (ancestor in descendant).\n* @returns The value with any `lc`-containing objects wrapped in escape markers.\n*/\nfunction escapeIfNeeded(value, pathSet = /* @__PURE__ */ new WeakSet()) {\n\tif (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n\t\tif (pathSet.has(value)) return createNotImplemented(value);\n\t\tif (isSerializableLike(value)) return value;\n\t\tpathSet.add(value);\n\t\tconst record = value;\n\t\tif (needsEscaping(record)) {\n\t\t\tpathSet.delete(value);\n\t\t\treturn escapeObject(record);\n\t\t}\n\t\tconst result = {};\n\t\tfor (const [key, val] of Object.entries(record)) result[key] = escapeIfNeeded(val, pathSet);\n\t\tpathSet.delete(value);\n\t\treturn result;\n\t}\n\tif (Array.isArray(value)) return value.map((item) => escapeIfNeeded(item, pathSet));\n\treturn value;\n}\n/**\n* Unescape a value, processing escape markers in object values and arrays.\n*\n* When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n* unwrapped and the contents are returned AS-IS (no further processing).\n* The contents represent user data that should not be modified.\n*\n* For regular objects and arrays, we recurse to find any nested escape markers.\n*\n* @param obj - The value to unescape.\n* @returns The unescaped value.\n*/\nfunction unescapeValue(obj) {\n\tif (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n\t\tconst record = obj;\n\t\tif (isEscapedObject(record)) return record[LC_ESCAPED_KEY];\n\t\tconst result = {};\n\t\tfor (const [key, value] of Object.entries(record)) result[key] = unescapeValue(value);\n\t\treturn result;\n\t}\n\tif (Array.isArray(obj)) return obj.map((item) => unescapeValue(item));\n\treturn obj;\n}\n\n//#endregion\nexport { escapeIfNeeded, isEscapedObject, unescapeValue };\n//# sourceMappingURL=validation.js.map","import { __exportAll } from \"../_virtual/_rolldown/runtime.js\";\nimport { keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\n//#region src/load/serializable.ts\nvar serializable_exports = /* @__PURE__ */ __exportAll({\n\tSerializable: () => Serializable,\n\tget_lc_unique_name: () => get_lc_unique_name\n});\nfunction shallowCopy(obj) {\n\treturn Array.isArray(obj) ? [...obj] : { ...obj };\n}\nfunction replaceSecrets(root, secretsMap) {\n\tconst result = shallowCopy(root);\n\tfor (const [path, secretId] of Object.entries(secretsMap)) {\n\t\tconst [last, ...partsReverse] = path.split(\".\").reverse();\n\t\tlet current = result;\n\t\tfor (const part of partsReverse.reverse()) {\n\t\t\tif (current[part] === void 0) break;\n\t\t\tcurrent[part] = shallowCopy(current[part]);\n\t\t\tcurrent = current[part];\n\t\t}\n\t\tif (current[last] !== void 0) current[last] = {\n\t\t\tlc: 1,\n\t\t\ttype: \"secret\",\n\t\t\tid: [secretId]\n\t\t};\n\t}\n\treturn result;\n}\n/**\n* Get a unique name for the module, rather than parent class implementations.\n* Should not be subclassed, subclass lc_name above instead.\n*/\nfunction get_lc_unique_name(serializableClass) {\n\tconst parentClass = Object.getPrototypeOf(serializableClass);\n\tif (typeof serializableClass.lc_name === \"function\" && (typeof parentClass.lc_name !== \"function\" || serializableClass.lc_name() !== parentClass.lc_name())) return serializableClass.lc_name();\n\telse return serializableClass.name;\n}\nvar Serializable = class Serializable {\n\tlc_serializable = false;\n\tlc_kwargs;\n\t/**\n\t* The name of the serializable. Override to provide an alias or\n\t* to preserve the serialized module name in minified environments.\n\t*\n\t* Implemented as a static method to support loading logic.\n\t*/\n\tstatic lc_name() {\n\t\treturn this.name;\n\t}\n\t/**\n\t* The final serialized identifier for the module.\n\t*/\n\tget lc_id() {\n\t\treturn [...this.lc_namespace, get_lc_unique_name(this.constructor)];\n\t}\n\t/**\n\t* A map of secrets, which will be omitted from serialization.\n\t* Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n\t* Values are the secret ids, which will be used when deserializing.\n\t*/\n\tget lc_secrets() {}\n\t/**\n\t* A map of additional attributes to merge with constructor args.\n\t* Keys are the attribute names, e.g. \"foo\".\n\t* Values are the attribute values, which will be serialized.\n\t* These attributes need to be accepted by the constructor as arguments.\n\t*/\n\tget lc_attributes() {}\n\t/**\n\t* A map of aliases for constructor args.\n\t* Keys are the attribute names, e.g. \"foo\".\n\t* Values are the alias that will replace the key in serialization.\n\t* This is used to eg. make argument names match Python.\n\t*/\n\tget lc_aliases() {}\n\t/**\n\t* A manual list of keys that should be serialized.\n\t* If not overridden, all fields passed into the constructor will be serialized.\n\t*/\n\tget lc_serializable_keys() {}\n\tconstructor(kwargs, ..._args) {\n\t\tif (this.lc_serializable_keys !== void 0) this.lc_kwargs = Object.fromEntries(Object.entries(kwargs || {}).filter(([key]) => this.lc_serializable_keys?.includes(key)));\n\t\telse this.lc_kwargs = kwargs ?? {};\n\t}\n\ttoJSON() {\n\t\tif (!this.lc_serializable) return this.toJSONNotImplemented();\n\t\tif (this.lc_kwargs instanceof Serializable || typeof this.lc_kwargs !== \"object\" || Array.isArray(this.lc_kwargs)) return this.toJSONNotImplemented();\n\t\tconst aliases = {};\n\t\tconst secrets = {};\n\t\tconst kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n\t\t\tacc[key] = key in this ? this[key] : this.lc_kwargs[key];\n\t\t\treturn acc;\n\t\t}, {});\n\t\tfor (let current = Object.getPrototypeOf(this); current; current = Object.getPrototypeOf(current)) {\n\t\t\tObject.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n\t\t\tObject.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n\t\t\tObject.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n\t\t}\n\t\tObject.keys(secrets).forEach((keyPath) => {\n\t\t\tlet read = this;\n\t\t\tlet write = kwargs;\n\t\t\tconst [last, ...partsReverse] = keyPath.split(\".\").reverse();\n\t\t\tfor (const key of partsReverse.reverse()) {\n\t\t\t\tif (!(key in read) || read[key] === void 0) return;\n\t\t\t\tif (!(key in write) || write[key] === void 0) {\n\t\t\t\t\tif (typeof read[key] === \"object\" && read[key] != null) write[key] = {};\n\t\t\t\t\telse if (Array.isArray(read[key])) write[key] = [];\n\t\t\t\t}\n\t\t\t\tread = read[key];\n\t\t\t\twrite = write[key];\n\t\t\t}\n\t\t\tif (last in read && read[last] !== void 0) write[last] = write[last] || read[last];\n\t\t});\n\t\tconst escapedKwargs = {};\n\t\tconst pathSet = /* @__PURE__ */ new WeakSet();\n\t\tpathSet.add(this);\n\t\tfor (const [key, value] of Object.entries(kwargs)) escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n\t\tconst processedKwargs = mapKeys(Object.keys(secrets).length ? replaceSecrets(escapedKwargs, secrets) : escapedKwargs, keyToJson, aliases);\n\t\treturn {\n\t\t\tlc: 1,\n\t\t\ttype: \"constructor\",\n\t\t\tid: this.lc_id,\n\t\t\tkwargs: processedKwargs\n\t\t};\n\t}\n\ttoJSONNotImplemented() {\n\t\treturn {\n\t\t\tlc: 1,\n\t\t\ttype: \"not_implemented\",\n\t\t\tid: this.lc_id\n\t\t};\n\t}\n};\n\n//#endregion\nexport { Serializable, get_lc_unique_name, serializable_exports };\n//# sourceMappingURL=serializable.js.map","import { __exportAll } from \"../_virtual/_rolldown/runtime.js\";\n\n//#region src/utils/env.ts\nvar env_exports = /* @__PURE__ */ __exportAll({\n\tgetEnv: () => getEnv,\n\tgetEnvironmentVariable: () => getEnvironmentVariable,\n\tgetRuntimeEnvironment: () => getRuntimeEnvironment,\n\tisBrowser: () => isBrowser,\n\tisDeno: () => isDeno,\n\tisJsDom: () => isJsDom,\n\tisNode: () => isNode,\n\tisWebWorker: () => isWebWorker\n});\nconst isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\nconst isWebWorker = () => typeof globalThis === \"object\" && globalThis.constructor && globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\nconst isJsDom = () => typeof window !== \"undefined\" && window.name === \"nodejs\" || typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\");\nconst isDeno = () => typeof Deno !== \"undefined\";\nconst isNode = () => typeof process !== \"undefined\" && typeof process.versions !== \"undefined\" && typeof process.versions.node !== \"undefined\" && !isDeno();\nconst getEnv = () => {\n\tlet env;\n\tif (isBrowser()) env = \"browser\";\n\telse if (isNode()) env = \"node\";\n\telse if (isWebWorker()) env = \"webworker\";\n\telse if (isJsDom()) env = \"jsdom\";\n\telse if (isDeno()) env = \"deno\";\n\telse env = \"other\";\n\treturn env;\n};\nlet runtimeEnvironment;\nfunction getRuntimeEnvironment() {\n\tif (runtimeEnvironment === void 0) runtimeEnvironment = {\n\t\tlibrary: \"langchain-js\",\n\t\truntime: getEnv()\n\t};\n\treturn runtimeEnvironment;\n}\nfunction getEnvironmentVariable(name) {\n\ttry {\n\t\tif (typeof process !== \"undefined\") return process.env?.[name];\n\t\telse if (isDeno()) return Deno?.env.get(name);\n\t\telse return;\n\t} catch {\n\t\treturn;\n\t}\n}\n\n//#endregion\nexport { env_exports, getEnv, getEnvironmentVariable, getRuntimeEnvironment, isBrowser, isDeno, isJsDom, isNode, isWebWorker };\n//# sourceMappingURL=env.js.map","import { __exportAll } from \"../_virtual/_rolldown/runtime.js\";\nimport { Serializable, get_lc_unique_name } from \"../load/serializable.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport * as uuid from \"uuid\";\n\n//#region src/callbacks/base.ts\nvar base_exports = /* @__PURE__ */ __exportAll({\n\tBaseCallbackHandler: () => BaseCallbackHandler,\n\tcallbackHandlerPrefersStreaming: () => callbackHandlerPrefersStreaming,\n\tisBaseCallbackHandler: () => isBaseCallbackHandler\n});\n/**\n* Abstract class that provides a set of optional methods that can be\n* overridden in derived classes to handle various events during the\n* execution of a LangChain application.\n*/\nvar BaseCallbackHandlerMethodsClass = class {};\nfunction callbackHandlerPrefersStreaming(x) {\n\treturn \"lc_prefer_streaming\" in x && x.lc_prefer_streaming;\n}\n/**\n* Abstract base class for creating callback handlers in the LangChain\n* framework. It provides a set of optional methods that can be overridden\n* in derived classes to handle various events during the execution of a\n* LangChain application.\n*/\nvar BaseCallbackHandler = class extends BaseCallbackHandlerMethodsClass {\n\tlc_serializable = false;\n\tget lc_namespace() {\n\t\treturn [\n\t\t\t\"langchain_core\",\n\t\t\t\"callbacks\",\n\t\t\tthis.name\n\t\t];\n\t}\n\tget lc_secrets() {}\n\tget lc_attributes() {}\n\tget lc_aliases() {}\n\tget lc_serializable_keys() {}\n\t/**\n\t* The name of the serializable. Override to provide an alias or\n\t* to preserve the serialized module name in minified environments.\n\t*\n\t* Implemented as a static method to support loading logic.\n\t*/\n\tstatic lc_name() {\n\t\treturn this.name;\n\t}\n\t/**\n\t* The final serialized identifier for the module.\n\t*/\n\tget lc_id() {\n\t\treturn [...this.lc_namespace, get_lc_unique_name(this.constructor)];\n\t}\n\tlc_kwargs;\n\tignoreLLM = false;\n\tignoreChain = false;\n\tignoreAgent = false;\n\tignoreRetriever = false;\n\tignoreCustomEvent = false;\n\traiseError = false;\n\tawaitHandlers = getEnvironmentVariable(\"LANGCHAIN_CALLBACKS_BACKGROUND\") === \"false\";\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.lc_kwargs = input || {};\n\t\tif (input) {\n\t\t\tthis.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM;\n\t\t\tthis.ignoreChain = input.ignoreChain ?? this.ignoreChain;\n\t\t\tthis.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent;\n\t\t\tthis.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever;\n\t\t\tthis.ignoreCustomEvent = input.ignoreCustomEvent ?? this.ignoreCustomEvent;\n\t\t\tthis.raiseError = input.raiseError ?? this.raiseError;\n\t\t\tthis.awaitHandlers = this.raiseError || (input._awaitHandler ?? this.awaitHandlers);\n\t\t}\n\t}\n\tcopy() {\n\t\treturn new this.constructor(this);\n\t}\n\ttoJSON() {\n\t\treturn Serializable.prototype.toJSON.call(this);\n\t}\n\ttoJSONNotImplemented() {\n\t\treturn Serializable.prototype.toJSONNotImplemented.call(this);\n\t}\n\tstatic fromMethods(methods) {\n\t\tclass Handler extends BaseCallbackHandler {\n\t\t\tname = uuid.v7();\n\t\t\tconstructor() {\n\t\t\t\tsuper();\n\t\t\t\tObject.assign(this, methods);\n\t\t\t}\n\t\t}\n\t\treturn new Handler();\n\t}\n};\nconst isBaseCallbackHandler = (x) => {\n\tconst callbackHandler = x;\n\treturn callbackHandler !== void 0 && typeof callbackHandler.copy === \"function\" && typeof callbackHandler.name === \"string\" && typeof callbackHandler.awaitHandlers === \"boolean\";\n};\n\n//#endregion\nexport { BaseCallbackHandler, base_exports, callbackHandlerPrefersStreaming, isBaseCallbackHandler };\n//# sourceMappingURL=base.js.map","import { sanitizeValues } from './utils'\n\nconst DEFAULT_MAX_DEPTH = 3\nconst MAX_STACK_LINES = 20\n\nexport function serializeError(value: unknown, depth = DEFAULT_MAX_DEPTH): unknown {\n  if (depth < 0 || value === null || typeof value !== 'object') {\n    return value\n  }\n  if (value instanceof Error) {\n    const out: Record<string, unknown> = {\n      name: value.name,\n      message: value.message,\n      stack: truncateStack(value.stack),\n    }\n    for (const key of Object.keys(value)) {\n      out[key] = serializeError((value as unknown as Record<string, unknown>)[key], depth - 1)\n    }\n    if (value.cause !== undefined) {\n      out.cause = serializeError(value.cause, depth - 1)\n    }\n    return out\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => serializeError(item, depth - 1))\n  }\n  return value\n}\n\nexport function stringifyError(error: unknown): string {\n  try {\n    return JSON.stringify(sanitizeValues(serializeError(error)))\n  } catch {\n    if (error instanceof Error) {\n      return JSON.stringify({ name: error.name, message: error.message })\n    }\n    return JSON.stringify({ message: String(error) })\n  }\n}\n\nfunction truncateStack(stack: string | undefined): string | undefined {\n  if (!stack) {\n    return stack\n  }\n  const lines = stack.split('\\n')\n  if (lines.length <= MAX_STACK_LINES) {\n    return stack\n  }\n  return [...lines.slice(0, MAX_STACK_LINES), '... (truncated)'].join('\\n')\n}\n","import { PostHog } from 'posthog-node'\nimport { withPrivacyMode, getModelParams, toContentString } from '../utils'\nimport { BaseCallbackHandler } from '@langchain/core/callbacks/base'\nimport { version } from '../../package.json'\nimport type { Serialized } from '@langchain/core/load/serializable'\nimport type { ChainValues } from '@langchain/core/utils/types'\nimport type { LLMResult } from '@langchain/core/outputs'\nimport type { AgentAction, AgentFinish } from '@langchain/core/agents'\nimport type { DocumentInterface } from '@langchain/core/documents'\nimport { ToolCall } from '@langchain/core/messages/tool'\nimport { BaseMessage } from '@langchain/core/messages'\nimport { sanitizeLangChain } from '../sanitization'\nimport { stringifyError } from '../serializeError'\n\ninterface SpanMetadata {\n  /** Name of the trace/span (e.g. chain name) */\n  name: string\n  /** Timestamp (in ms) when the run started */\n  startTime: number\n  /** Timestamp (in ms) when the run ended (if already finished) */\n  endTime?: number\n  /** The input state */\n  input?: any\n}\n\ninterface GenerationMetadata extends SpanMetadata {\n  /** Provider used (e.g. openai, anthropic) */\n  provider?: string\n  /** Model name used in the generation */\n  model?: string\n  /** The model parameters (temperature, max_tokens, etc.) */\n  modelParams?: Record<string, any>\n  /** The base URL—for example, the API base used */\n  baseUrl?: string\n  /** The tools used in the generation */\n  tools?: Record<string, any>\n}\n\n/** A run may either be a Span or a Generation */\ntype RunMetadata = SpanMetadata | GenerationMetadata\n\n/** Storage for run metadata */\ntype RunMetadataStorage = { [runId: string]: RunMetadata }\n\nexport class LangChainCallbackHandler extends BaseCallbackHandler {\n  public name = 'PosthogCallbackHandler'\n  private client: PostHog\n  private distinctId?: string | number\n  private traceId?: string | number\n  private properties: Record<string, any>\n  private privacyMode: boolean\n  private groups: Record<string, any>\n  private debug: boolean\n\n  private runs: RunMetadataStorage = {}\n  private parentTree: { [runId: string]: string } = {}\n\n  constructor(options: {\n    client: PostHog\n    distinctId?: string | number\n    traceId?: string | number\n    properties?: Record<string, any>\n    privacyMode?: boolean\n    groups?: Record<string, any>\n    debug?: boolean\n  }) {\n    if (!options.client) {\n      throw new Error('PostHog client is required')\n    }\n    super()\n    this.client = options.client\n    this.distinctId = options.distinctId\n    this.traceId = options.traceId\n    this.properties = options.properties || {}\n    this.privacyMode = options.privacyMode || false\n    this.groups = options.groups || {}\n    this.debug = options.debug || false\n  }\n\n  // ===== CALLBACK METHODS =====\n\n  public handleChainStart(\n    chain: Serialized,\n    inputs: ChainValues,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    metadata?: Record<string, unknown>,\n    _runType?: string,\n    runName?: string\n  ): void {\n    this._logDebugEvent('on_chain_start', runId, parentRunId, { inputs, tags })\n    this._setParentOfRun(runId, parentRunId)\n    this._setTraceOrSpanMetadata(chain, inputs, runId, parentRunId, metadata, tags, runName)\n  }\n\n  public handleChainEnd(\n    outputs: ChainValues,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    _kwargs?: { inputs?: Record<string, unknown> }\n  ): void {\n    this._logDebugEvent('on_chain_end', runId, parentRunId, { outputs, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, outputs)\n  }\n\n  public handleChainError(\n    error: Error,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    _kwargs?: { inputs?: Record<string, unknown> }\n  ): void {\n    this._logDebugEvent('on_chain_error', runId, parentRunId, { error, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, error)\n  }\n\n  public handleChatModelStart(\n    serialized: Serialized,\n    messages: BaseMessage[][],\n    runId: string,\n    parentRunId?: string,\n    extraParams?: Record<string, unknown>,\n    tags?: string[],\n    metadata?: Record<string, unknown>,\n    runName?: string\n  ): void {\n    this._logDebugEvent('on_chat_model_start', runId, parentRunId, { messages, tags })\n    this._setParentOfRun(runId, parentRunId)\n    // Flatten the two-dimensional messages and convert each message to a plain object\n    const input = messages.flat().map((m) => this._convertMessageToDict(m))\n    this._setLLMMetadata(serialized, runId, input, metadata, extraParams, runName)\n  }\n\n  public handleLLMStart(\n    serialized: Serialized,\n    prompts: string[],\n    runId: string,\n    parentRunId?: string,\n    extraParams?: Record<string, unknown>,\n    tags?: string[],\n    metadata?: Record<string, unknown>,\n    runName?: string\n  ): void {\n    this._logDebugEvent('on_llm_start', runId, parentRunId, { prompts, tags })\n    this._setParentOfRun(runId, parentRunId)\n    this._setLLMMetadata(serialized, runId, prompts, metadata, extraParams, runName)\n  }\n\n  public handleLLMEnd(\n    output: LLMResult,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    _extraParams?: Record<string, unknown>\n  ): void {\n    this._logDebugEvent('on_llm_end', runId, parentRunId, { output, tags })\n    this._popRunAndCaptureGeneration(runId, parentRunId, output)\n  }\n\n  public handleLLMError(\n    err: Error,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    _extraParams?: Record<string, unknown>\n  ): void {\n    this._logDebugEvent('on_llm_error', runId, parentRunId, { err, tags })\n    this._popRunAndCaptureGeneration(runId, parentRunId, err)\n  }\n\n  public handleToolStart(\n    tool: Serialized,\n    input: string,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    metadata?: Record<string, unknown>,\n    runName?: string\n  ): void {\n    this._logDebugEvent('on_tool_start', runId, parentRunId, { input, tags })\n    this._setParentOfRun(runId, parentRunId)\n    this._setTraceOrSpanMetadata(tool, input, runId, parentRunId, metadata, tags, runName)\n  }\n\n  public handleToolEnd(output: any, runId: string, parentRunId?: string, tags?: string[]): void {\n    this._logDebugEvent('on_tool_end', runId, parentRunId, { output, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, output)\n  }\n\n  public handleToolError(err: Error, runId: string, parentRunId?: string, tags?: string[]): void {\n    this._logDebugEvent('on_tool_error', runId, parentRunId, { err, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, err)\n  }\n\n  public handleRetrieverStart(\n    retriever: Serialized,\n    query: string,\n    runId: string,\n    parentRunId?: string,\n    tags?: string[],\n    metadata?: Record<string, unknown>,\n    name?: string\n  ): void {\n    this._logDebugEvent('on_retriever_start', runId, parentRunId, { query, tags })\n    this._setParentOfRun(runId, parentRunId)\n    this._setTraceOrSpanMetadata(retriever, query, runId, parentRunId, metadata, tags, name)\n  }\n\n  public handleRetrieverEnd(\n    documents: DocumentInterface[],\n    runId: string,\n    parentRunId?: string,\n    tags?: string[]\n  ): void {\n    this._logDebugEvent('on_retriever_end', runId, parentRunId, { documents, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, documents)\n  }\n\n  public handleRetrieverError(err: Error, runId: string, parentRunId?: string, tags?: string[]): void {\n    this._logDebugEvent('on_retriever_error', runId, parentRunId, { err, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, err)\n  }\n\n  public handleAgentAction(action: AgentAction, runId: string, parentRunId?: string, tags?: string[]): void {\n    this._logDebugEvent('on_agent_action', runId, parentRunId, { action, tags })\n    this._setParentOfRun(runId, parentRunId)\n    this._setTraceOrSpanMetadata(null, action, runId, parentRunId)\n  }\n\n  public handleAgentEnd(action: AgentFinish, runId: string, parentRunId?: string, tags?: string[]): void {\n    this._logDebugEvent('on_agent_finish', runId, parentRunId, { action, tags })\n    this._popRunAndCaptureTraceOrSpan(runId, parentRunId, action)\n  }\n\n  // ===== PRIVATE HELPERS =====\n\n  private _setParentOfRun(runId: string, parentRunId?: string): void {\n    if (parentRunId) {\n      this.parentTree[runId] = parentRunId\n    }\n  }\n\n  private _popParentOfRun(runId: string): void {\n    delete this.parentTree[runId]\n  }\n\n  private _findRootRun(runId: string): string {\n    let id = runId\n    while (this.parentTree[id]) {\n      id = this.parentTree[id]\n    }\n    return id\n  }\n\n  private _setTraceOrSpanMetadata(\n    serialized: any,\n    input: any,\n    runId: string,\n    parentRunId?: string,\n    ...args: any[]\n  ): void {\n    // Use default names if not provided: if this is a top-level run, we mark it as a trace, otherwise as a span.\n    const defaultName = parentRunId ? 'span' : 'trace'\n    const runName = this._getLangchainRunName(serialized, ...args) || defaultName\n    this.runs[runId] = {\n      name: runName,\n      input,\n      startTime: Date.now(),\n    } as SpanMetadata\n  }\n\n  private _setLLMMetadata(\n    serialized: Serialized | null,\n    runId: string,\n    messages: any,\n    metadata?: any,\n    extraParams?: any,\n    runName?: string\n  ): void {\n    const runNameFound = this._getLangchainRunName(serialized, { extraParams, runName }) || 'generation'\n    const generation: GenerationMetadata = {\n      name: runNameFound,\n      input: sanitizeLangChain(messages),\n      startTime: Date.now(),\n    }\n    if (extraParams) {\n      generation.modelParams = getModelParams(extraParams.invocation_params)\n\n      if (extraParams.invocation_params && extraParams.invocation_params.tools) {\n        generation.tools = extraParams.invocation_params.tools\n      }\n    }\n    if (metadata) {\n      if (metadata.ls_model_name) {\n        generation.model = metadata.ls_model_name\n      }\n      if (metadata.ls_provider) {\n        generation.provider = metadata.ls_provider\n      }\n    }\n    if (serialized && 'kwargs' in serialized && serialized.kwargs.openai_api_base) {\n      generation.baseUrl = serialized.kwargs.openai_api_base\n    }\n    this.runs[runId] = generation\n  }\n\n  private _popRunMetadata(runId: string): RunMetadata | undefined {\n    const endTime = Date.now()\n    const run = this.runs[runId]\n    if (!run) {\n      console.warn(`No run metadata found for run ${runId}`)\n      return undefined\n    }\n    run.endTime = endTime\n    delete this.runs[runId]\n    return run\n  }\n\n  private _getTraceId(runId: string): string {\n    return this.traceId ? String(this.traceId) : this._findRootRun(runId)\n  }\n\n  private _getParentRunId(traceId: string, _runId: string, parentRunId?: string): string | undefined {\n    // Replace the parent-run if not found in our stored parent tree.\n    if (parentRunId && !this.parentTree[parentRunId]) {\n      return traceId\n    }\n    return parentRunId\n  }\n\n  private _popRunAndCaptureTraceOrSpan(\n    runId: string,\n    parentRunId: string | undefined,\n    outputs: ChainValues | DocumentInterface[] | AgentFinish | Error | any\n  ): void {\n    const traceId = this._getTraceId(runId)\n    this._popParentOfRun(runId)\n    const run = this._popRunMetadata(runId)\n    if (!run) {\n      return\n    }\n    if ('modelParams' in run) {\n      console.warn(`Run ${runId} is a generation, but attempted to be captured as a trace/span.`)\n      return\n    }\n    const actualParentRunId = this._getParentRunId(traceId, runId, parentRunId)\n    this._captureTraceOrSpan(traceId, runId, run as SpanMetadata, outputs, actualParentRunId)\n  }\n\n  private _captureTraceOrSpan(\n    traceId: string,\n    runId: string,\n    run: SpanMetadata,\n    outputs: ChainValues | DocumentInterface[] | AgentFinish | Error | any,\n    parentRunId?: string\n  ): void {\n    const eventName = parentRunId ? '$ai_span' : '$ai_trace'\n    const latency = run.endTime ? (run.endTime - run.startTime) / 1000 : 0\n    const eventProperties: Record<string, any> = {\n      $ai_lib: 'posthog-ai',\n      $ai_lib_version: version,\n      $ai_trace_id: traceId,\n      $ai_input_state: withPrivacyMode(this.client, this.privacyMode, run.input),\n      $ai_latency: latency,\n      $ai_span_name: run.name,\n      $ai_span_id: runId,\n      $ai_framework: 'langchain',\n    }\n    if (parentRunId) {\n      eventProperties['$ai_parent_id'] = parentRunId\n    }\n\n    Object.assign(eventProperties, this.properties)\n    if (!this.distinctId) {\n      eventProperties['$process_person_profile'] = false\n    }\n    if (outputs instanceof Error) {\n      eventProperties['$ai_error'] = stringifyError(outputs)\n      eventProperties['$ai_is_error'] = true\n    } else if (outputs !== undefined) {\n      eventProperties['$ai_output_state'] = withPrivacyMode(this.client, this.privacyMode, outputs)\n    }\n    this.client.capture({\n      distinctId: this.distinctId ? this.distinctId.toString() : runId,\n      event: eventName,\n      properties: eventProperties,\n      groups: this.groups,\n    })\n  }\n\n  private _popRunAndCaptureGeneration(\n    runId: string,\n    parentRunId: string | undefined,\n    response: LLMResult | Error\n  ): void {\n    const traceId = this._getTraceId(runId)\n    this._popParentOfRun(runId)\n    const run = this._popRunMetadata(runId)\n    if (!run || typeof run !== 'object' || !('modelParams' in run)) {\n      console.warn(`Run ${runId} is not a generation, but attempted to be captured as such.`)\n      return\n    }\n    const actualParentRunId = this._getParentRunId(traceId, runId, parentRunId)\n    this._captureGeneration(traceId, runId, run as GenerationMetadata, response, actualParentRunId)\n  }\n\n  private _captureGeneration(\n    traceId: string,\n    runId: string,\n    run: GenerationMetadata,\n    output: LLMResult | Error,\n    parentRunId?: string\n  ): void {\n    const latency = run.endTime ? (run.endTime - run.startTime) / 1000 : 0\n    const eventProperties: Record<string, any> = {\n      $ai_lib: 'posthog-ai',\n      $ai_lib_version: version,\n      $ai_trace_id: traceId,\n      $ai_span_id: runId,\n      $ai_span_name: run.name,\n      $ai_parent_id: parentRunId,\n      $ai_provider: run.provider,\n      $ai_model: run.model,\n      $ai_model_parameters: run.modelParams,\n      $ai_input: withPrivacyMode(this.client, this.privacyMode, run.input),\n      $ai_http_status: 200,\n      $ai_latency: latency,\n      $ai_base_url: run.baseUrl,\n      $ai_framework: 'langchain',\n    }\n\n    if (run.tools) {\n      eventProperties['$ai_tools'] = run.tools\n    }\n\n    if (output instanceof Error) {\n      eventProperties['$ai_http_status'] = (output as any).status || 500\n      eventProperties['$ai_error'] = stringifyError(output)\n      eventProperties['$ai_is_error'] = true\n    } else {\n      // Handle token usage\n      const [inputTokens, outputTokens, additionalTokenData] = this.parseUsage(output, run.provider, run.model)\n      eventProperties['$ai_input_tokens'] = inputTokens\n      eventProperties['$ai_output_tokens'] = outputTokens\n\n      // Add additional token data to properties\n      if (additionalTokenData.cacheReadInputTokens) {\n        eventProperties['$ai_cache_read_input_tokens'] = additionalTokenData.cacheReadInputTokens\n      }\n      if (additionalTokenData.cacheWriteInputTokens) {\n        eventProperties['$ai_cache_creation_input_tokens'] = additionalTokenData.cacheWriteInputTokens\n      }\n      if (additionalTokenData.reasoningTokens) {\n        eventProperties['$ai_reasoning_tokens'] = additionalTokenData.reasoningTokens\n      }\n      if (additionalTokenData.webSearchCount !== undefined) {\n        eventProperties['$ai_web_search_count'] = additionalTokenData.webSearchCount\n      }\n\n      // Extract stop reason from generation info\n      const stopReason = this._extractStopReason(output)\n      if (stopReason) {\n        eventProperties['$ai_stop_reason'] = stopReason\n      }\n\n      // Handle generations/completions\n      let completions\n      if (output.generations && Array.isArray(output.generations)) {\n        const lastGeneration = output.generations[output.generations.length - 1]\n        if (Array.isArray(lastGeneration) && lastGeneration.length > 0) {\n          // Check if this is a ChatGeneration by looking at the first item\n          const isChatGeneration = 'message' in lastGeneration[0] && lastGeneration[0].message\n\n          if (isChatGeneration) {\n            // For ChatGeneration, convert messages to dict format\n            completions = lastGeneration.map((gen: any) => {\n              return this._convertMessageToDict(gen.message)\n            })\n          } else {\n            // For non-ChatGeneration, extract raw response\n            completions = lastGeneration.map((gen: any) => {\n              return this._extractRawResponse(gen)\n            })\n          }\n        }\n      }\n\n      if (completions) {\n        eventProperties['$ai_output_choices'] = withPrivacyMode(this.client, this.privacyMode, completions)\n      }\n    }\n\n    Object.assign(eventProperties, this.properties)\n    if (!this.distinctId) {\n      eventProperties['$process_person_profile'] = false\n    }\n\n    this.client.capture({\n      distinctId: this.distinctId ? this.distinctId.toString() : traceId,\n      event: '$ai_generation',\n      properties: eventProperties,\n      groups: this.groups,\n    })\n  }\n\n  private _logDebugEvent(eventName: string, runId: string, parentRunId: string | undefined, extra: any): void {\n    if (this.debug) {\n      console.log(`Event: ${eventName}, runId: ${runId}, parentRunId: ${parentRunId}, extra:`, extra)\n    }\n  }\n\n  private _getLangchainRunName(serialized: any, ...args: any): string | undefined {\n    if (args && args.length > 0) {\n      for (const arg of args) {\n        if (arg && typeof arg === 'object' && 'name' in arg) {\n          return arg.name\n        } else if (arg && typeof arg === 'object' && 'runName' in arg) {\n          return arg.runName\n        }\n      }\n    }\n\n    if (serialized && serialized.name) {\n      return serialized.name\n    }\n    if (serialized && serialized.id) {\n      return Array.isArray(serialized.id) ? serialized.id[serialized.id.length - 1] : serialized.id\n    }\n    return undefined\n  }\n\n  private _convertLcToolCallsToOai(toolCalls: ToolCall[]): Record<string, any>[] {\n    return toolCalls.map((toolCall: ToolCall) => ({\n      type: 'function',\n      id: toolCall.id,\n      function: {\n        name: toolCall.name,\n        arguments: JSON.stringify(toolCall.args),\n      },\n    }))\n  }\n\n  private _extractRawResponse(generation: any): any {\n    // Extract the response from the last response of the LLM call\n    // We return the text of the response if not empty\n    if (generation.text != null && generation.text.trim() !== '') {\n      return generation.text.trim()\n    } else if (generation.message) {\n      // Additional kwargs contains the response in case of tool usage\n      return generation.message.additional_kwargs || generation.message.additionalKwargs || {}\n    } else {\n      // Not tool usage, some LLM responses can be simply empty\n      return ''\n    }\n  }\n\n  private _convertMessageToDict(message: any): Record<string, any> {\n    let messageDict: Record<string, any> = {}\n\n    const messageType: string = message.getType()\n\n    switch (messageType) {\n      case 'human':\n        messageDict = { role: 'user', content: message.content }\n        break\n      case 'ai':\n        messageDict = { role: 'assistant', content: message.content }\n\n        if (message.tool_calls) {\n          messageDict.tool_calls = this._convertLcToolCallsToOai(message.tool_calls)\n        }\n\n        break\n      case 'system':\n        messageDict = { role: 'system', content: message.content }\n        break\n      case 'tool':\n        messageDict = { role: 'tool', content: message.content }\n        break\n      case 'function':\n        messageDict = { role: 'function', content: message.content }\n        break\n      default:\n        messageDict = { role: messageType, content: toContentString(message.content) }\n        break\n    }\n\n    if (message.additional_kwargs) {\n      messageDict = { ...messageDict, ...message.additional_kwargs }\n    }\n\n    // Sanitize the message content to redact base64 images\n    return sanitizeLangChain(messageDict) as Record<string, any>\n  }\n\n  private _extractStopReason(output: LLMResult): string | undefined {\n    if (!output.generations || !Array.isArray(output.generations)) {\n      return undefined\n    }\n    const lastGeneration = output.generations[output.generations.length - 1]\n    if (!Array.isArray(lastGeneration) || lastGeneration.length === 0) {\n      return undefined\n    }\n    const gen = lastGeneration[0]\n\n    // Check generationInfo for finish_reason (OpenAI format)\n    if (gen.generationInfo?.finish_reason) {\n      return String(gen.generationInfo.finish_reason)\n    }\n\n    // Check generationInfo for response_metadata.stop_reason (Anthropic format)\n    if (gen.generationInfo?.response_metadata?.stop_reason) {\n      return String(gen.generationInfo.response_metadata.stop_reason)\n    }\n\n    // Check message response_metadata for finish_reason (common LangChain format)\n    if (gen.generationInfo?.response_metadata?.finish_reason) {\n      return String(gen.generationInfo.response_metadata.finish_reason)\n    }\n\n    // Check for stop_reason directly in generationInfo\n    if (gen.generationInfo?.stop_reason) {\n      return String(gen.generationInfo.stop_reason)\n    }\n\n    return undefined\n  }\n\n  private _parseUsageModel(usage: any, provider?: string, model?: string): [number, number, Record<string, any>] {\n    const conversionList: Array<[string, 'input' | 'output']> = [\n      ['promptTokens', 'input'],\n      ['completionTokens', 'output'],\n      ['input_tokens', 'input'],\n      ['output_tokens', 'output'],\n      ['prompt_token_count', 'input'],\n      ['candidates_token_count', 'output'],\n      ['inputTokenCount', 'input'],\n      ['outputTokenCount', 'output'],\n      ['input_token_count', 'input'],\n      ['generated_token_count', 'output'],\n    ]\n\n    const parsedUsage = conversionList.reduce(\n      (acc: { input: number; output: number }, [modelKey, typeKey]) => {\n        const value = usage[modelKey]\n        if (value != null) {\n          const finalCount = Array.isArray(value)\n            ? value.reduce((sum: number, tokenCount: number) => sum + tokenCount, 0)\n            : value\n          acc[typeKey] = finalCount\n        }\n        return acc\n      },\n      { input: 0, output: 0 }\n    )\n\n    // Extract additional token details like cached tokens and reasoning tokens\n    const additionalTokenData: Record<string, any> = {}\n\n    // Check for cached tokens in various formats\n    if (usage.prompt_tokens_details?.cached_tokens != null) {\n      additionalTokenData.cacheReadInputTokens = usage.prompt_tokens_details.cached_tokens\n    } else if (usage.input_token_details?.cache_read != null) {\n      additionalTokenData.cacheReadInputTokens = usage.input_token_details.cache_read\n    } else if (usage.cachedPromptTokens != null) {\n      additionalTokenData.cacheReadInputTokens = usage.cachedPromptTokens\n    } else if (usage.cache_read_input_tokens != null) {\n      additionalTokenData.cacheReadInputTokens = usage.cache_read_input_tokens\n    }\n\n    // Check for cache write/creation tokens in various formats\n    if (usage.cache_creation_input_tokens != null) {\n      additionalTokenData.cacheWriteInputTokens = usage.cache_creation_input_tokens\n    } else if (usage.input_token_details?.cache_creation != null) {\n      additionalTokenData.cacheWriteInputTokens = usage.input_token_details.cache_creation\n    }\n\n    // Check for reasoning tokens in various formats\n    if (usage.completion_tokens_details?.reasoning_tokens != null) {\n      additionalTokenData.reasoningTokens = usage.completion_tokens_details.reasoning_tokens\n    } else if (usage.output_token_details?.reasoning != null) {\n      additionalTokenData.reasoningTokens = usage.output_token_details.reasoning\n    } else if (usage.reasoningTokens != null) {\n      additionalTokenData.reasoningTokens = usage.reasoningTokens\n    }\n\n    // Extract web search counts from various provider formats\n    let webSearchCount: number | undefined\n\n    // Priority 1: Exact Count\n    // Check Anthropic format (server_tool_use.web_search_requests)\n    if (usage.server_tool_use?.web_search_requests !== undefined) {\n      webSearchCount = usage.server_tool_use.web_search_requests\n    }\n    // Priority 2: Binary Detection (1 or 0)\n    // Check for citations array (Perplexity)\n    else if (usage.citations && Array.isArray(usage.citations) && usage.citations.length > 0) {\n      webSearchCount = 1\n    }\n    // Check for search_results array (Perplexity via OpenRouter)\n    else if (usage.search_results && Array.isArray(usage.search_results) && usage.search_results.length > 0) {\n      webSearchCount = 1\n    }\n    // Check for search_context_size (Perplexity via OpenRouter)\n    else if (usage.search_context_size) {\n      webSearchCount = 1\n    }\n    // Check for annotations with url_citation type\n    else if (usage.annotations && Array.isArray(usage.annotations)) {\n      const hasUrlCitation = usage.annotations.some((ann: unknown) => {\n        return ann && typeof ann === 'object' && 'type' in ann && ann.type === 'url_citation'\n      })\n\n      if (hasUrlCitation) {\n        webSearchCount = 1\n      }\n    }\n    // Check Gemini format (grounding metadata - binary 0 or 1)\n    else if (\n      usage.grounding_metadata?.grounding_support !== undefined ||\n      usage.grounding_metadata?.web_search_queries !== undefined\n    ) {\n      webSearchCount = 1\n    }\n\n    if (webSearchCount !== undefined) {\n      additionalTokenData.webSearchCount = webSearchCount\n    }\n\n    // For Anthropic providers, LangChain reports input_tokens as the sum of all input tokens.\n    // Our cost calculation expects them to be separate for Anthropic, so we subtract cache tokens.\n    // Both cache_read and cache_write tokens should be subtracted since Anthropic's raw API\n    // reports input_tokens as tokens NOT read from or used to create a cache.\n    // For other providers (OpenAI, etc.), input_tokens already excludes cache tokens as expected.\n    // Match logic consistent with plugin-server: exact match on provider OR substring match on model\n    let isAnthropic = false\n    if (provider && provider.toLowerCase() === 'anthropic') {\n      isAnthropic = true\n    } else if (model && model.toLowerCase().includes('anthropic')) {\n      isAnthropic = true\n    }\n\n    if (isAnthropic && parsedUsage.input) {\n      const cacheTokens =\n        (additionalTokenData.cacheReadInputTokens || 0) + (additionalTokenData.cacheWriteInputTokens || 0)\n      if (cacheTokens > 0) {\n        parsedUsage.input = Math.max(parsedUsage.input - cacheTokens, 0)\n      }\n    }\n\n    return [parsedUsage.input, parsedUsage.output, additionalTokenData]\n  }\n\n  private parseUsage(response: LLMResult, provider?: string, model?: string): [number, number, Record<string, any>] {\n    let llmUsage: [number, number, Record<string, any>] = [0, 0, {}]\n    const llmUsageKeys = ['token_usage', 'usage', 'tokenUsage']\n\n    if (response.llmOutput != null) {\n      const key = llmUsageKeys.find((k) => response.llmOutput?.[k] != null)\n      if (key) {\n        llmUsage = this._parseUsageModel(response.llmOutput[key], provider, model)\n      }\n    }\n\n    // If top-level usage info was not found, try checking the generations.\n    if (llmUsage[0] === 0 && llmUsage[1] === 0 && response.generations) {\n      for (const generation of response.generations) {\n        for (const genChunk of generation) {\n          // Check other paths for usage information\n          if (genChunk.generationInfo?.usage_metadata) {\n            llmUsage = this._parseUsageModel(genChunk.generationInfo.usage_metadata, provider, model)\n            return llmUsage\n          }\n\n          const messageChunk = genChunk.generationInfo ?? {}\n          const responseMetadata = messageChunk.response_metadata ?? {}\n          const chunkUsage =\n            responseMetadata['usage'] ??\n            responseMetadata['amazon-bedrock-invocationMetrics'] ??\n            messageChunk.usage_metadata\n          if (chunkUsage) {\n            llmUsage = this._parseUsageModel(chunkUsage, provider, model)\n            return llmUsage\n          }\n        }\n      }\n    }\n\n    return llmUsage\n  }\n}\n"],"names":["DATA_URL_PREFIX_RE","BASE64_ALPHABET_RE","Base64Recognizer","recognize","value","minLength","dataUrl","exec","kind","mediaType","length","confidencePrefix","slice","test","MIME_HINT_KEYS","STRONG_CONTEXT_KEYS","Set","STRONG_CONTEXT_TYPES","FILE_FAMILY_TYPES","KNOWN_AUDIO_FORMATS","MediaTypeContext","EMPTY","undefined","constructor","parent","key","inferMediaType","inferFromSiblingMime","inferFromSiblingFormat","inferFromParentType","inferFromKey","hint","v","fmt","format","has","toLowerCase","t","type","includes","signalsBinary","STRONG_CONTEXT_MIN_LENGTH","WEAK_CONTEXT_MIN_LENGTH","BinaryContentRedactor","visited","WeakSet","recognizer","redact","isMultimodalEnabled","walk","ctx","redactString","Uint8Array","placeholderFor","add","Array","isArray","map","item","obj","out","k","Object","keys","recognition","val","process","env","_INTERNAL_LLMA_MULTIMODAL","redactor","sanitizeLangChain","data","STRING_FORMAT","TextEncoder","TextDecoder","fatal","toContentString","content","JSON","stringify","String","getModelParams","params","modelParams","paramKeys","withPrivacyMode","client","privacyMode","input","privacy_mode","sanitizeValues","jsonSafe","parse","decode","encode","fromEntries","entries","camelcaseModule","uuid","DEFAULT_MAX_DEPTH","MAX_STACK_LINES","serializeError","depth","Error","name","message","stack","truncateStack","cause","stringifyError","error","lines","split","join","LangChainCallbackHandler","BaseCallbackHandler","runs","parentTree","options","distinctId","traceId","properties","groups","debug","handleChainStart","chain","inputs","runId","parentRunId","tags","metadata","_runType","runName","_logDebugEvent","_setParentOfRun","_setTraceOrSpanMetadata","handleChainEnd","outputs","_kwargs","_popRunAndCaptureTraceOrSpan","handleChainError","handleChatModelStart","serialized","messages","extraParams","flat","m","_convertMessageToDict","_setLLMMetadata","handleLLMStart","prompts","handleLLMEnd","output","_extraParams","_popRunAndCaptureGeneration","handleLLMError","err","handleToolStart","tool","handleToolEnd","handleToolError","handleRetrieverStart","retriever","query","handleRetrieverEnd","documents","handleRetrieverError","handleAgentAction","action","handleAgentEnd","_popParentOfRun","_findRootRun","id","args","defaultName","_getLangchainRunName","startTime","Date","now","runNameFound","generation","invocation_params","tools","ls_model_name","model","ls_provider","provider","kwargs","openai_api_base","baseUrl","_popRunMetadata","endTime","run","console","warn","_getTraceId","_getParentRunId","_runId","actualParentRunId","_captureTraceOrSpan","eventName","latency","eventProperties","$ai_lib","$ai_lib_version","version","$ai_trace_id","$ai_input_state","$ai_latency","$ai_span_name","$ai_span_id","$ai_framework","assign","capture","toString","event","response","_captureGeneration","$ai_parent_id","$ai_provider","$ai_model","$ai_model_parameters","$ai_input","$ai_http_status","$ai_base_url","status","inputTokens","outputTokens","additionalTokenData","parseUsage","cacheReadInputTokens","cacheWriteInputTokens","reasoningTokens","webSearchCount","stopReason","_extractStopReason","completions","generations","lastGeneration","isChatGeneration","gen","_extractRawResponse","extra","log","arg","_convertLcToolCallsToOai","toolCalls","toolCall","function","arguments","text","trim","additional_kwargs","additionalKwargs","messageDict","messageType","getType","role","tool_calls","generationInfo","finish_reason","response_metadata","stop_reason","_parseUsageModel","usage","conversionList","parsedUsage","reduce","acc","modelKey","typeKey","finalCount","sum","tokenCount","prompt_tokens_details","cached_tokens","input_token_details","cache_read","cachedPromptTokens","cache_read_input_tokens","cache_creation_input_tokens","cache_creation","completion_tokens_details","reasoning_tokens","output_token_details","reasoning","server_tool_use","web_search_requests","citations","search_results","search_context_size","annotations","hasUrlCitation","some","ann","grounding_metadata","grounding_support","web_search_queries","isAnthropic","cacheTokens","Math","max","llmUsage","llmUsageKeys","llmOutput","find","genChunk","usage_metadata","messageChunk","responseMetadata","chunkUsage"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11]}