{"version":3,"file":"index.mjs","sources":["../../src/typeGuards.ts","../../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/openai/utils.ts","../../src/openai/index.ts"],"sourcesContent":["// Type guards for safer type checking\n\nexport const isString = (value: unknown): value is string => {\n  return typeof value === 'string'\n}\n\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n  return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","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 type OpenAI from 'openai'\n\n/**\n * Checks if a ResponseStreamEvent chunk represents the first token/content from the model.\n * This includes various content types like text, reasoning, audio, and refusals.\n */\nexport function isResponseTokenChunk(chunk: OpenAI.Responses.ResponseStreamEvent): boolean {\n  return (\n    chunk.type === 'response.output_item.added' ||\n    chunk.type === 'response.content_part.added' ||\n    chunk.type === 'response.output_text.delta' ||\n    chunk.type === 'response.reasoning_text.delta' ||\n    chunk.type === 'response.reasoning_summary_text.delta' ||\n    chunk.type === 'response.audio.delta' ||\n    chunk.type === 'response.audio.transcript.delta' ||\n    chunk.type === 'response.refusal.delta'\n  )\n}\n","import { OpenAI as OpenAIOrignal, ClientOptions } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport {\n  formatResponseOpenAI,\n  MonitoringParams,\n  extractAvailableToolCalls,\n  withPrivacyMode,\n  AIEvent,\n  formatOpenAIResponsesInput,\n  calculateWebSearchCount,\n  getModelParams,\n} from '../utils'\nimport { captureAiGeneration } from '../captureAiGeneration'\nimport type { APIPromise } from 'openai'\nimport type { Stream } from 'openai/streaming'\nimport type { ParsedResponse } from 'openai/resources/responses/responses'\nimport type { ResponseCreateParamsWithTools, ExtractParsedContentFromParams } from 'openai/lib/ResponsesParser'\nimport type { FormattedMessage, FormattedContent, FormattedFunctionCall } from '../types'\nimport { sanitizeOpenAI, sanitizeOpenAIResponse } from '../sanitization'\nimport { extractPosthogParams } from '../utils'\nimport { isResponseTokenChunk } from './utils'\n\nconst Chat = OpenAIOrignal.Chat\nconst Completions = Chat.Completions\nconst Responses = OpenAIOrignal.Responses\nconst Embeddings = OpenAIOrignal.Embeddings\nconst Audio = OpenAIOrignal.Audio\nconst Transcriptions = OpenAIOrignal.Audio.Transcriptions\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\ntype ResponsesCreateParamsBase = OpenAIOrignal.Responses.ResponseCreateParams\ntype ResponsesCreateParamsNonStreaming = OpenAIOrignal.Responses.ResponseCreateParamsNonStreaming\ntype ResponsesCreateParamsStreaming = OpenAIOrignal.Responses.ResponseCreateParamsStreaming\ntype CreateEmbeddingResponse = OpenAIOrignal.CreateEmbeddingResponse\ntype EmbeddingCreateParams = OpenAIOrignal.EmbeddingCreateParams\n\ninterface MonitoringOpenAIConfig extends ClientOptions {\n  apiKey: string\n  posthog: PostHog\n  baseURL?: string\n}\n\ntype RequestOptions = Record<string, unknown>\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n  private readonly phClient: PostHog\n  public chat: WrappedChat\n  public responses: WrappedResponses\n  public embeddings: WrappedEmbeddings\n  public audio: WrappedAudio\n\n  constructor(config: MonitoringOpenAIConfig) {\n    const { posthog, ...openAIConfig } = config\n    super(openAIConfig)\n    this.phClient = posthog\n    this.chat = new WrappedChat(this, this.phClient)\n    this.responses = new WrappedResponses(this, this.phClient)\n    this.embeddings = new WrappedEmbeddings(this, this.phClient)\n    this.audio = new WrappedAudio(this, this.phClient)\n  }\n}\n\nexport class WrappedChat extends Chat {\n  constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n    super(parentClient)\n    this.completions = new WrappedCompletions(parentClient, phClient)\n  }\n\n  public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends Completions {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<ChatCompletionChunk>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n  // --- Implementation Signature\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      return parentPromise.then((value) => {\n        if ('tee' in value) {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            try {\n              const contentBlocks: FormattedContent = []\n              let accumulatedContent = ''\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let stopReason: string | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n                webSearchCount?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n                webSearchCount: 0,\n              }\n\n              // Map to track in-progress tool calls\n              const toolCallsInProgress = new Map<\n                number,\n                {\n                  id: string\n                  name: string\n                  arguments: string\n                }\n              >()\n              let rawUsageData: unknown\n\n              for await (const chunk of stream1) {\n                // Extract model from chunk (Chat Completions chunks have model field)\n                if (!modelFromResponse && chunk.model) {\n                  modelFromResponse = chunk.model\n                }\n\n                const choice = chunk?.choices?.[0]\n\n                if (choice?.finish_reason) {\n                  stopReason = choice.finish_reason\n                }\n\n                const chunkWebSearchCount = calculateWebSearchCount(chunk)\n                if (chunkWebSearchCount > 0 && chunkWebSearchCount > (usage.webSearchCount ?? 0)) {\n                  usage.webSearchCount = chunkWebSearchCount\n                }\n\n                // Handle text content\n                const deltaContent = choice?.delta?.content\n                if (deltaContent) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  accumulatedContent += deltaContent\n                }\n\n                // Handle tool calls\n                const deltaToolCalls = choice?.delta?.tool_calls\n                if (deltaToolCalls && Array.isArray(deltaToolCalls)) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  for (const toolCall of deltaToolCalls) {\n                    const index = toolCall.index\n\n                    if (index !== undefined) {\n                      if (!toolCallsInProgress.has(index)) {\n                        // New tool call\n                        toolCallsInProgress.set(index, {\n                          id: toolCall.id || '',\n                          name: toolCall.function?.name || '',\n                          arguments: '',\n                        })\n                      }\n\n                      const inProgressCall = toolCallsInProgress.get(index)\n                      if (inProgressCall) {\n                        // Update tool call data\n                        if (toolCall.id) {\n                          inProgressCall.id = toolCall.id\n                        }\n                        if (toolCall.function?.name) {\n                          inProgressCall.name = toolCall.function.name\n                        }\n                        if (toolCall.function?.arguments) {\n                          inProgressCall.arguments += toolCall.function.arguments\n                        }\n                      }\n                    }\n                  }\n                }\n\n                // Handle usage information\n                if (chunk.usage) {\n                  rawUsageData = chunk.usage\n                  usage = {\n                    ...usage,\n                    inputTokens: chunk.usage.prompt_tokens ?? 0,\n                    outputTokens: chunk.usage.completion_tokens ?? 0,\n                    reasoningTokens: chunk.usage.completion_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.usage.prompt_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              // Build final content blocks\n              if (accumulatedContent) {\n                contentBlocks.push({ type: 'text', text: accumulatedContent })\n              }\n\n              // Add completed tool calls to content blocks\n              for (const toolCall of toolCallsInProgress.values()) {\n                if (toolCall.name) {\n                  contentBlocks.push({\n                    type: 'function',\n                    id: toolCall.id,\n                    function: {\n                      name: toolCall.name,\n                      arguments: toolCall.arguments,\n                    },\n                  } as FormattedFunctionCall)\n                }\n              }\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: '' }],\n                      },\n                    ]\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'openai',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: formattedOutput,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage: {\n                  inputTokens: usage.inputTokens,\n                  outputTokens: usage.outputTokens,\n                  reasoningTokens: usage.reasoningTokens,\n                  cacheReadInputTokens: usage.cacheReadInputTokens,\n                  webSearchCount: usage.webSearchCount,\n                  rawUsage: rawUsageData,\n                },\n                stopReason,\n                tools: availableTools,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                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<ChatCompletionChunk>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('choices' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            const availableTools = extractAvailableToolCalls('openai', openAIParams)\n            const formattedOutput = formatResponseOpenAI(result)\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'openai',\n              input: sanitizeOpenAI(openAIParams.messages),\n              output: formattedOutput,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.prompt_tokens ?? 0,\n                outputTokens: result.usage?.completion_tokens ?? 0,\n                reasoningTokens: result.usage?.completion_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.prompt_tokens_details?.cached_tokens ?? 0,\n                webSearchCount: calculateWebSearchCount(result),\n                rawUsage: result.usage,\n              },\n              stopReason: result.choices[0]?.finish_reason ?? undefined,\n              tools: availableTools,\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: sanitizeOpenAI(openAIParams.messages),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      ) as APIPromise<ChatCompletion>\n\n      return wrappedPromise\n    }\n  }\n}\n\nexport class WrappedResponses extends Responses {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ResponsesCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ResponsesCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Implementation Signature\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      return parentPromise.then((value) => {\n        if ('tee' in value && typeof value.tee === 'function') {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            try {\n              let finalContent: unknown[] = []\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let stopReason: string | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n                webSearchCount?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n                webSearchCount: 0,\n              }\n              let rawUsageData: unknown\n\n              for await (const chunk of stream1) {\n                // Track first token time on content delta events\n                if (firstTokenTime === undefined && isResponseTokenChunk(chunk)) {\n                  firstTokenTime = Date.now()\n                }\n\n                if ('response' in chunk && chunk.response) {\n                  // Extract model from response object in chunk (for stored prompts)\n                  if (!modelFromResponse && chunk.response.model) {\n                    modelFromResponse = chunk.response.model\n                  }\n\n                  const chunkWebSearchCount = calculateWebSearchCount(chunk.response)\n                  if (chunkWebSearchCount > 0 && chunkWebSearchCount > (usage.webSearchCount ?? 0)) {\n                    usage.webSearchCount = chunkWebSearchCount\n                  }\n                }\n\n                if (\n                  chunk.type === 'response.completed' &&\n                  'response' in chunk &&\n                  chunk.response?.output &&\n                  chunk.response.output.length > 0\n                ) {\n                  finalContent = chunk.response.output\n                  if (chunk.response.status) {\n                    stopReason = chunk.response.status\n                  }\n                }\n                if ('response' in chunk && chunk.response?.usage) {\n                  rawUsageData = chunk.response.usage\n                  usage = {\n                    ...usage,\n                    inputTokens: chunk.response.usage.input_tokens ?? 0,\n                    outputTokens: chunk.response.usage.output_tokens ?? 0,\n                    reasoningTokens: chunk.response.usage.output_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.response.usage.input_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'openai',\n                input: formatOpenAIResponsesInput(\n                  sanitizeOpenAIResponse(openAIParams.input),\n                  openAIParams.instructions\n                ),\n                output: finalContent,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage: {\n                  inputTokens: usage.inputTokens,\n                  outputTokens: usage.outputTokens,\n                  reasoningTokens: usage.reasoningTokens,\n                  cacheReadInputTokens: usage.cacheReadInputTokens,\n                  webSearchCount: usage.webSearchCount,\n                  rawUsage: rawUsageData,\n                },\n                stopReason,\n                tools: availableTools,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: formatOpenAIResponsesInput(\n                  sanitizeOpenAIResponse(openAIParams.input),\n                  openAIParams.instructions\n                ),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                error,\n              })\n              throw error\n            }\n          })()\n\n          return stream2\n        }\n        return value\n      }) as APIPromise<Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('output' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            const availableTools = extractAvailableToolCalls('openai', openAIParams)\n            const formattedOutput = formatResponseOpenAI({ output: result.output })\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'openai',\n              input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n              output: formattedOutput,\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                reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n                webSearchCount: calculateWebSearchCount(result),\n                rawUsage: result.usage,\n              },\n              stopReason: result.status ?? undefined,\n              tools: availableTools,\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      ) as APIPromise<OpenAIOrignal.Responses.Response>\n\n      return wrappedPromise\n    }\n  }\n\n  public parse<Params extends ResponseCreateParamsWithTools, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ParsedResponse<ParsedT>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const originalCreate = super.create.bind(this)\n    const originalSelfRecord = this as Record<string, unknown>\n    const tempCreate = originalSelfRecord['create']\n    originalSelfRecord['create'] = originalCreate\n\n    try {\n      const parentPromise = super.parse(openAIParams, options)\n\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          const latency = (Date.now() - startTime) / 1000\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model ?? result.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: result.output,\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              reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n              cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n              rawUsage: result.usage,\n            },\n            stopReason: result.status ?? undefined,\n          })\n          return result\n        },\n        async (error: Error) => {\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      )\n\n      return wrappedPromise as APIPromise<ParsedResponse<ParsedT>>\n    } finally {\n      // Restore our wrapped create method\n      originalSelfRecord['create'] = tempCreate\n    }\n  }\n}\n\nexport class WrappedEmbeddings extends Embeddings {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  public create(\n    body: EmbeddingCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<CreateEmbeddingResponse> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    const wrappedPromise = parentPromise.then(\n      async (result) => {\n        const latency = (Date.now() - startTime) / 1000\n        await captureAiGeneration(this.phClient, {\n          ...posthogParams,\n          eventType: AIEvent.Embedding,\n          model: openAIParams.model,\n          provider: 'openai',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null, // Embeddings don't have output content\n          latency,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus: 200,\n          usage: {\n            inputTokens: result.usage?.prompt_tokens ?? 0,\n            rawUsage: result.usage,\n          },\n        })\n        return result\n      },\n      async (error: unknown) => {\n        const httpStatus =\n          error && typeof error === 'object' && 'status' in error ? ((error as { status?: number }).status ?? 500) : 500\n\n        await captureAiGeneration(this.phClient, {\n          eventType: AIEvent.Embedding,\n          ...posthogParams,\n          model: openAIParams.model,\n          provider: 'openai',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null, // Embeddings don't have output content\n          latency: 0,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus,\n          usage: {\n            inputTokens: 0,\n          },\n          error,\n        })\n        throw error\n      }\n    ) as APIPromise<CreateEmbeddingResponse>\n\n    return wrappedPromise\n  }\n}\n\nexport class WrappedAudio extends Audio {\n  constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n    super(parentClient)\n    this.transcriptions = new WrappedTranscriptions(parentClient, phClient)\n  }\n\n  public transcriptions: WrappedTranscriptions\n}\n\nexport class WrappedTranscriptions extends Transcriptions {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'json' | undefined> &\n      MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.Transcription>\n\n  // --- Overload #2: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'verbose_json'> & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.TranscriptionVerbose>\n\n  // --- Overload #3: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'srt' | 'vtt' | 'text'> &\n      MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<string>\n\n  // --- Overload #4: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.Transcription>\n\n  // --- Overload #5: Streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>>\n\n  // --- Overload #6: Streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  >\n\n  // --- Overload #7: Generic base\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  >\n\n  // --- Implementation Signature\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  > {\n    const { providerParams: openAIParams, posthogParams } =\n      extractPosthogParams<OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams>(body)\n    const startTime = Date.now()\n\n    const parentPromise = openAIParams.stream\n      ? super.create(openAIParams, options)\n      : super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      return parentPromise.then((value) => {\n        if ('tee' in value && typeof (value as any).tee === 'function') {\n          const [stream1, stream2] = (value as any).tee()\n          ;(async () => {\n            try {\n              let finalContent: string = ''\n              let firstTokenTime: number | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                rawUsage?: unknown\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n              }\n\n              const doneEvent: OpenAIOrignal.Audio.Transcriptions.TranscriptionTextDoneEvent['type'] =\n                'transcript.text.done'\n              for await (const chunk of stream1) {\n                // Track first token on text delta events\n                if (firstTokenTime === undefined && chunk.type === 'transcript.text.delta') {\n                  firstTokenTime = Date.now()\n                }\n\n                if (chunk.type === doneEvent && 'text' in chunk && chunk.text && chunk.text.length > 0) {\n                  finalContent = chunk.text\n                }\n                if ('usage' in chunk && chunk.usage) {\n                  usage = {\n                    inputTokens: chunk.usage?.type === 'tokens' ? (chunk.usage.input_tokens ?? 0) : 0,\n                    outputTokens: chunk.usage?.type === 'tokens' ? (chunk.usage.output_tokens ?? 0) : 0,\n                    rawUsage: chunk.usage,\n                  }\n                }\n              }\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: openAIParams.prompt,\n                output: finalContent,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage,\n                tools: availableTools,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: openAIParams.prompt,\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                error,\n              })\n              throw error\n            }\n          })()\n\n          return stream2\n        }\n        return value\n      }) as APIPromise<Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('text' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model,\n              provider: 'openai',\n              input: openAIParams.prompt,\n              output: result.text,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.type === 'tokens' ? (result.usage.input_tokens ?? 0) : 0,\n                outputTokens: result.usage?.type === 'tokens' ? (result.usage.output_tokens ?? 0) : 0,\n                rawUsage: result.usage,\n              },\n            })\n            return result\n          }\n        },\n        async (error: unknown) => {\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: openAIParams.prompt,\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      ) as APIPromise<OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse>\n\n      return wrappedPromise\n    }\n  }\n}\n\nexport default PostHogOpenAI\n\nexport { PostHogOpenAI as OpenAI }\n"],"names":["isString","value","DATA_URL_PREFIX_RE","BASE64_ALPHABET_RE","Base64Recognizer","recognize","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","sanitizeOpenAI","data","sanitizeOpenAIResponse","TOKEN_PROPERTY_KEYS","getTokensSource","posthogProperties","some","STRING_FORMAT","TextEncoder","TextDecoder","fatal","toContentString","content","JSON","stringify","String","getModelParams","params","modelParams","paramKeys","formatResponseOpenAI","response","output","choices","choice","role","message","push","text","tool_calls","toolCall","id","function","name","arguments","audio","contentItem","image_url","image","call_id","withPrivacyMode","client","privacyMode","input","privacy_mode","calculateWebSearchCount","result","count","citations","search_results","usage","search_context_size","delta","annotations","hasUrlCitation","ann","candidates","candidate","grounding_metadata","extractAvailableToolCalls","provider","tools","AIEvent","sanitizeValues","jsonSafe","parse","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","formatOpenAIResponsesInput","instructions","messages","DEFAULT_MAX_DEPTH","MAX_STACK_LINES","serializeError","depth","Error","stack","truncateStack","cause","stringifyError","error","lines","split","join","captureAiGeneration","options","capture","eventType","Generation","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","isResponseTokenChunk","chunk","Chat","OpenAIOrignal","Completions","Responses","Embeddings","Audio","Transcriptions","PostHogOpenAI","config","posthog","openAIConfig","phClient","chat","WrappedChat","responses","WrappedResponses","embeddings","WrappedEmbeddings","WrappedAudio","parentClient","completions","WrappedCompletions","create","openAIParams","startTime","Date","now","parentPromise","stream","then","stream1","stream2","tee","contentBlocks","accumulatedContent","modelFromResponse","firstTokenTime","toolCallsInProgress","Map","rawUsageData","finish_reason","chunkWebSearchCount","deltaContent","deltaToolCalls","index","set","inProgressCall","get","prompt_tokens","completion_tokens","completion_tokens_details","reasoning_tokens","prompt_tokens_details","cached_tokens","values","formattedOutput","availableTools","wrappedPromise","finalContent","input_tokens","output_tokens","output_tokens_details","input_tokens_details","originalCreate","bind","originalSelfRecord","tempCreate","Embedding","transcriptions","WrappedTranscriptions","doneEvent","prompt"],"mappings":"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"}