{"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","../../src/serializeError.ts","../../src/captureAiGeneration.ts","../../src/anthropic/index.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","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 { EventMessage, PostHog } from 'posthog-node'\nimport type { ChatCompletionTool } from 'openai/resources/chat/completions'\nimport type { Tool as GeminiTool } from '@google/genai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { uuidv7, ErrorTracking as CoreErrorTracking } from '@posthog/core'\nimport { version } from '../package.json'\nimport type { TokenUsage } from './types'\nimport { stringifyError } from './serializeError'\nimport { AIEvent, CostOverride, getTokensSource, sanitizeValues, withPrivacyMode } from './utils'\n\ntype AnthropicTool = AnthropicOriginal.Tool\n\n/**\n * Options for `captureAiGeneration`. Mirrors the `$ai_generation` event shape\n * directly so that any caller — first-party SDK wrappers and external code\n * alike — produces an identical event.\n */\nexport interface CaptureAiGenerationOptions {\n  distinctId?: string\n  /** Auto-generated when omitted. */\n  traceId?: string\n  /** Defaults to `$ai_generation`. */\n  eventType?: AIEvent\n\n  /** Required for the event to be useful, but accepted as optional so SDK wrappers can pass through whatever they detect. */\n  model?: string\n  provider: string\n  input: unknown\n  output: unknown\n\n  /** Maps to `$ai_model_parameters` (temperature, max_tokens, top_p, …). */\n  modelParameters?: Record<string, unknown>\n\n  baseURL?: string\n  httpStatus?: number\n  /** Wall-clock latency in seconds. */\n  latency?: number\n  /** Time from request start to the first streamed token, in seconds. */\n  timeToFirstToken?: number\n\n  usage?: TokenUsage\n\n  /** Extra event properties merged into the captured event. */\n  properties?: Record<string, unknown>\n  /** Mapping of group type to group id, matching `EventMessage.groups`. */\n  groups?: Record<string, string | number>\n  privacyMode?: boolean\n\n  /**\n   * For SDK wrappers: overrides the auto-detected model. External callers\n   * should pass `model` directly instead.\n   */\n  modelOverride?: string\n  /**\n   * For SDK wrappers: overrides the auto-detected provider. External callers\n   * should pass `provider` directly instead.\n   */\n  providerOverride?: string\n  costOverride?: CostOverride\n\n  tools?: ChatCompletionTool[] | AnthropicTool[] | GeminiTool[] | null\n  stopReason?: string\n  /** When set, the event is captured as an error. */\n  error?: unknown\n\n  /** Awaits delivery instead of batching. Useful in serverless environments. */\n  captureImmediate?: boolean\n}\n\n/**\n * Capture an `$ai_generation` (or `$ai_embedding`) event to PostHog.\n *\n * This is the canonical primitive that every `@posthog/ai` wrapper\n * (`withTracing`, `OpenAI`, `Anthropic`, `GoogleGenAI`, …) funnels through, so\n * external code can use it directly to instrument LLM calls made through\n * arbitrary clients (Cloudflare Workers AI, custom HTTP, etc.) and get the\n * same events the SDK wrappers produce.\n *\n * When `error` is set, the event is captured as an error. If the error is an\n * object, it is mutated in place to set `__posthog_previously_captured_error`\n * so callers can re-throw the original error reference safely.\n */\nexport const captureAiGeneration = async (client: PostHog, options: CaptureAiGenerationOptions): Promise<void> => {\n  if (!client.capture) {\n    return\n  }\n\n  const traceId = options.traceId ?? uuidv4()\n  const eventType = options.eventType ?? AIEvent.Generation\n  const privacyMode = options.privacyMode ?? false\n  const usage = options.usage ?? {}\n\n  const safeInput = sanitizeValues(options.input)\n  const safeOutput = sanitizeValues(options.output)\n\n  let httpStatus = options.httpStatus\n  let errorData: Record<string, unknown> = {}\n  if (options.error) {\n    if (httpStatus === undefined) {\n      if (typeof options.error === 'object' && 'status' in options.error && typeof options.error.status === 'number') {\n        httpStatus = options.error.status\n      } else {\n        httpStatus = 500\n      }\n    }\n\n    let exceptionId: string | undefined\n    if (client.options?.enableExceptionAutocapture) {\n      exceptionId = uuidv7()\n      client.captureException(options.error, undefined, { $ai_trace_id: traceId }, exceptionId)\n      if (typeof options.error === 'object') {\n        ;(options.error as CoreErrorTracking.PreviouslyCapturedError).__posthog_previously_captured_error = true\n      }\n    }\n\n    errorData = {\n      $ai_is_error: true,\n      $ai_error: stringifyError(options.error),\n      $exception_event_id: exceptionId,\n    }\n  }\n  httpStatus = httpStatus ?? 200\n\n  let costOverrideData: Record<string, number> = {}\n  if (options.costOverride) {\n    const inputCostUSD = (options.costOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n    const outputCostUSD = (options.costOverride.outputCost ?? 0) * (usage.outputTokens ?? 0)\n    costOverrideData = {\n      $ai_input_cost_usd: inputCostUSD,\n      $ai_output_cost_usd: outputCostUSD,\n      $ai_total_cost_usd: inputCostUSD + outputCostUSD,\n    }\n  }\n\n  const additionalTokenValues = {\n    ...(usage.reasoningTokens ? { $ai_reasoning_tokens: usage.reasoningTokens } : {}),\n    ...(usage.cacheReadInputTokens ? { $ai_cache_read_input_tokens: usage.cacheReadInputTokens } : {}),\n    ...(usage.cacheCreationInputTokens ? { $ai_cache_creation_input_tokens: usage.cacheCreationInputTokens } : {}),\n    ...(usage.webSearchCount ? { $ai_web_search_count: usage.webSearchCount } : {}),\n    ...(usage.rawUsage ? { $ai_usage: usage.rawUsage } : {}),\n  }\n\n  const properties: Record<string, unknown> = {\n    $ai_lib: 'posthog-ai',\n    $ai_lib_version: version,\n    $ai_provider: options.providerOverride ?? options.provider,\n    $ai_model: options.modelOverride ?? options.model,\n    $ai_model_parameters: options.modelParameters ?? {},\n    $ai_input: withPrivacyMode(client, privacyMode, safeInput),\n    $ai_output_choices: withPrivacyMode(client, privacyMode, safeOutput),\n    $ai_http_status: httpStatus,\n    $ai_input_tokens: usage.inputTokens ?? 0,\n    ...(usage.outputTokens !== undefined ? { $ai_output_tokens: usage.outputTokens } : {}),\n    ...additionalTokenValues,\n    $ai_latency: options.latency ?? 0,\n    ...(options.timeToFirstToken !== undefined ? { $ai_time_to_first_token: options.timeToFirstToken } : {}),\n    $ai_trace_id: traceId,\n    $ai_base_url: options.baseURL ?? '',\n    ...options.properties,\n    $ai_tokens_source: getTokensSource(options.properties),\n    ...(options.distinctId ? {} : { $process_person_profile: false }),\n    ...(options.stopReason ? { $ai_stop_reason: options.stopReason } : {}),\n    ...(options.tools ? { $ai_tools: options.tools } : {}),\n    ...errorData,\n    ...costOverrideData,\n  }\n\n  const event: EventMessage = {\n    distinctId: options.distinctId ?? traceId,\n    event: eventType,\n    properties,\n    groups: options.groups,\n  }\n\n  if (options.captureImmediate) {\n    await client.captureImmediate(event)\n  } else {\n    client.capture(event)\n  }\n}\n","import AnthropicOriginal, { APIPromise } from '@anthropic-ai/sdk'\nimport { PostHog } from 'posthog-node'\nimport {\n  formatResponseAnthropic,\n  mergeSystemPrompt,\n  MonitoringParams,\n  extractAvailableToolCalls,\n  extractPosthogParams,\n  getModelParams,\n} from '../utils'\nimport { captureAiGeneration } from '../captureAiGeneration'\nimport type { FormattedContentItem, FormattedTextContent, FormattedFunctionCall, FormattedMessage } from '../types'\n\ntype MessageCreateParamsNonStreaming = AnthropicOriginal.Messages.MessageCreateParamsNonStreaming\ntype MessageCreateParamsStreaming = AnthropicOriginal.Messages.MessageCreateParamsStreaming\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype Message = AnthropicOriginal.Messages.Message\ntype RawMessageStreamEvent = AnthropicOriginal.Messages.RawMessageStreamEvent\ntype MessageCreateParamsBase = AnthropicOriginal.Messages.MessageCreateParams\ntype RequestOptions = AnthropicOriginal.RequestOptions\nimport type { Stream } from '@anthropic-ai/sdk/streaming'\nimport { sanitizeAnthropic } from '../sanitization'\n\ninterface ToolInProgress {\n  block: FormattedFunctionCall\n  inputString: string\n}\n\ninterface MonitoringAnthropicConfig {\n  apiKey: string\n  posthog: PostHog\n  baseURL?: string\n}\n\nexport class PostHogAnthropic extends AnthropicOriginal {\n  private readonly phClient: PostHog\n  public messages: WrappedMessages\n\n  constructor(config: MonitoringAnthropicConfig) {\n    const { posthog, ...anthropicConfig } = config\n    super(anthropicConfig)\n    this.phClient = posthog\n    this.messages = new WrappedMessages(this, this.phClient)\n  }\n}\n\nexport class WrappedMessages extends AnthropicOriginal.Messages {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(parentClient: PostHogAnthropic, phClient: PostHog) {\n    super(parentClient)\n    this.phClient = phClient\n    this.baseURL = parentClient.baseURL\n  }\n\n  public create(body: MessageCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Message>\n  public create(\n    body: MessageCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<RawMessageStreamEvent>>\n  public create(\n    body: MessageCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<RawMessageStreamEvent> | Message>\n  public create(\n    body: MessageCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Message> | APIPromise<Stream<RawMessageStreamEvent>> {\n    const { providerParams: anthropicParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(anthropicParams, options)\n\n    if (anthropicParams.stream) {\n      return parentPromise.then((value) => {\n        let accumulatedContent = ''\n        const contentBlocks: FormattedContentItem[] = []\n        const toolsInProgress: Map<string, ToolInProgress> = new Map()\n        let currentTextBlock: FormattedTextContent | null = null\n        let firstTokenTime: number | undefined\n        let stopReason: string | undefined\n\n        const usage: {\n          inputTokens: number\n          outputTokens: number\n          cacheCreationInputTokens?: number\n          cacheReadInputTokens?: number\n          webSearchCount?: number\n          rawUsage?: unknown\n        } = {\n          inputTokens: 0,\n          outputTokens: 0,\n          cacheCreationInputTokens: 0,\n          cacheReadInputTokens: 0,\n          webSearchCount: 0,\n        }\n        let lastRawUsage: unknown\n        if ('tee' in value) {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            try {\n              for await (const chunk of stream1) {\n                // Handle content block start events\n                if (chunk.type === 'content_block_start') {\n                  if (chunk.content_block?.type === 'text') {\n                    currentTextBlock = {\n                      type: 'text',\n                      text: '',\n                    }\n\n                    contentBlocks.push(currentTextBlock)\n                  } else if (chunk.content_block?.type === 'tool_use') {\n                    if (firstTokenTime === undefined) {\n                      firstTokenTime = Date.now()\n                    }\n\n                    const toolBlock: FormattedFunctionCall = {\n                      type: 'function',\n                      id: chunk.content_block.id,\n                      function: {\n                        name: chunk.content_block.name,\n                        arguments: {},\n                      },\n                    }\n\n                    contentBlocks.push(toolBlock)\n\n                    toolsInProgress.set(chunk.content_block.id, {\n                      block: toolBlock,\n                      inputString: '',\n                    })\n\n                    currentTextBlock = null\n                  }\n                }\n\n                // Handle text delta events\n                if ('delta' in chunk) {\n                  if ('text' in chunk.delta) {\n                    const delta = chunk.delta.text\n\n                    if (firstTokenTime === undefined) {\n                      firstTokenTime = Date.now()\n                    }\n\n                    accumulatedContent += delta\n\n                    if (currentTextBlock) {\n                      currentTextBlock.text += delta\n                    }\n                  }\n                }\n\n                // Handle tool input delta events\n                if (chunk.type === 'content_block_delta' && chunk.delta?.type === 'input_json_delta') {\n                  const block = chunk.index !== undefined ? contentBlocks[chunk.index] : undefined\n                  const toolId = block?.type === 'function' ? block.id : undefined\n\n                  if (toolId && toolsInProgress.has(toolId)) {\n                    const tool = toolsInProgress.get(toolId)\n                    if (tool) {\n                      tool.inputString += chunk.delta.partial_json || ''\n                    }\n                  }\n                }\n\n                // Handle content block stop events\n                if (chunk.type === 'content_block_stop') {\n                  currentTextBlock = null\n\n                  // Parse accumulated tool input\n                  if (chunk.index !== undefined) {\n                    const block = contentBlocks[chunk.index]\n\n                    if (block?.type === 'function' && block.id && toolsInProgress.has(block.id)) {\n                      const tool = toolsInProgress.get(block.id)\n                      if (tool) {\n                        try {\n                          block.function.arguments = JSON.parse(tool.inputString)\n                        } catch (e) {\n                          // Keep empty object if parsing fails\n                          console.error('Error parsing tool input:', e)\n                        }\n                      }\n                      toolsInProgress.delete(block.id)\n                    }\n                  }\n                }\n\n                if (chunk.type == 'message_start') {\n                  lastRawUsage = chunk.message.usage\n                  usage.inputTokens = chunk.message.usage.input_tokens ?? 0\n                  usage.cacheCreationInputTokens = chunk.message.usage.cache_creation_input_tokens ?? 0\n                  usage.cacheReadInputTokens = chunk.message.usage.cache_read_input_tokens ?? 0\n                  usage.webSearchCount = chunk.message.usage.server_tool_use?.web_search_requests ?? 0\n                }\n                if ('usage' in chunk) {\n                  lastRawUsage = chunk.usage\n                  usage.outputTokens = chunk.usage.output_tokens ?? 0\n                  // Update web search count if present in delta\n                  if (chunk.usage.server_tool_use?.web_search_requests !== undefined) {\n                    usage.webSearchCount = chunk.usage.server_tool_use.web_search_requests\n                  }\n                }\n\n                if (chunk.type === 'message_delta' && 'delta' in chunk) {\n                  const delta = chunk.delta\n                  if ('stop_reason' in delta && typeof delta.stop_reason === 'string' && delta.stop_reason) {\n                    stopReason = delta.stop_reason\n                  }\n                }\n              }\n              usage.rawUsage = lastRawUsage\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n\n              const availableTools = extractAvailableToolCalls('anthropic', anthropicParams)\n\n              // Format output to match non-streaming version\n              const formattedOutput: FormattedMessage[] =\n                contentBlocks.length > 0\n                  ? [\n                      {\n                        role: 'assistant',\n                        content: contentBlocks,\n                      },\n                    ]\n                  : [\n                      {\n                        role: 'assistant',\n                        content: [{ type: 'text', text: accumulatedContent }],\n                      },\n                    ]\n\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: anthropicParams.model,\n                provider: 'anthropic',\n                input: sanitizeAnthropic(mergeSystemPrompt(anthropicParams, 'anthropic')),\n                output: formattedOutput,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage,\n                stopReason,\n                tools: availableTools,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: anthropicParams.model,\n                provider: 'anthropic',\n                input: sanitizeAnthropic(mergeSystemPrompt(anthropicParams, 'anthropic')),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: {\n                  inputTokens: 0,\n                  outputTokens: 0,\n                },\n                error: error,\n              })\n              throw error\n            }\n          })()\n\n          // Return the other stream to the user\n          return stream2\n        }\n        return value\n      }) as APIPromise<Stream<RawMessageStreamEvent>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('content' in result) {\n            const latency = (Date.now() - startTime) / 1000\n\n            const availableTools = extractAvailableToolCalls('anthropic', anthropicParams)\n\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: anthropicParams.model,\n              provider: 'anthropic',\n              input: sanitizeAnthropic(mergeSystemPrompt(anthropicParams, 'anthropic')),\n              output: formatResponseAnthropic(result),\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage.input_tokens ?? 0,\n                outputTokens: result.usage.output_tokens ?? 0,\n                cacheCreationInputTokens: result.usage.cache_creation_input_tokens ?? 0,\n                cacheReadInputTokens: result.usage.cache_read_input_tokens ?? 0,\n                webSearchCount: result.usage.server_tool_use?.web_search_requests ?? 0,\n                rawUsage: result.usage,\n              },\n              stopReason: result.stop_reason ?? undefined,\n              tools: availableTools,\n            })\n          }\n          return result\n        },\n        async (error: any) => {\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: anthropicParams.model,\n            provider: 'anthropic',\n            input: sanitizeAnthropic(mergeSystemPrompt(anthropicParams, 'anthropic')),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus: error?.status ? error.status : 500,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error: error,\n          })\n          throw error\n        }\n      ) as APIPromise<Message>\n\n      return wrappedPromise\n    }\n  }\n}\n\nexport default PostHogAnthropic\n\nexport { PostHogAnthropic as Anthropic }\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","sanitizeAnthropic","data","TOKEN_PROPERTY_KEYS","getTokensSource","posthogProperties","some","STRING_FORMAT","TextEncoder","TextDecoder","fatal","getModelParams","params","modelParams","paramKeys","formatResponseAnthropic","response","output","content","choice","text","push","name","id","function","arguments","input","role","mergeSystemPrompt","provider","messages","system","systemMessage","withPrivacyMode","client","privacyMode","privacy_mode","extractAvailableToolCalls","tools","AIEvent","sanitizeValues","jsonSafe","JSON","parse","stringify","decode","encode","fromEntries","entries","POSTHOG_PARAMS_MAP","posthogDistinctId","posthogTraceId","posthogPrivacyMode","posthogGroups","posthogModelOverride","posthogProviderOverride","posthogCostOverride","posthogCaptureImmediate","extractPosthogParams","body","providerParams","posthogParams","startsWith","console","warn","addDefaults","traceId","uuidv4","DEFAULT_MAX_DEPTH","MAX_STACK_LINES","serializeError","depth","Error","message","stack","truncateStack","cause","stringifyError","error","String","lines","split","join","captureAiGeneration","options","capture","eventType","Generation","usage","safeInput","safeOutput","httpStatus","errorData","status","exceptionId","enableExceptionAutocapture","uuidv7","captureException","$ai_trace_id","__posthog_previously_captured_error","$ai_is_error","$ai_error","$exception_event_id","costOverrideData","costOverride","inputCostUSD","inputCost","inputTokens","outputCostUSD","outputCost","outputTokens","$ai_input_cost_usd","$ai_output_cost_usd","$ai_total_cost_usd","additionalTokenValues","reasoningTokens","$ai_reasoning_tokens","cacheReadInputTokens","$ai_cache_read_input_tokens","cacheCreationInputTokens","$ai_cache_creation_input_tokens","webSearchCount","$ai_web_search_count","rawUsage","$ai_usage","properties","$ai_lib","$ai_lib_version","version","$ai_provider","providerOverride","$ai_model","modelOverride","model","$ai_model_parameters","modelParameters","$ai_input","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","latency","timeToFirstToken","$ai_time_to_first_token","$ai_base_url","baseURL","$ai_tokens_source","distinctId","$process_person_profile","stopReason","$ai_stop_reason","$ai_tools","event","groups","captureImmediate","PostHogAnthropic","AnthropicOriginal","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","anthropicParams","startTime","Date","now","parentPromise","stream","then","accumulatedContent","contentBlocks","toolsInProgress","Map","currentTextBlock","firstTokenTime","lastRawUsage","stream1","stream2","tee","chunk","content_block","toolBlock","set","block","inputString","delta","index","toolId","tool","get","partial_json","e","delete","input_tokens","cache_creation_input_tokens","cache_read_input_tokens","server_tool_use","web_search_requests","output_tokens","stop_reason","availableTools","formattedOutput","wrappedPromise","result"],"mappings":"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"}