@posthog/ai 7.20.12 → 7.20.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anthropic/index.cjs +1 -1
- package/dist/anthropic/index.mjs +1 -1
- package/dist/gemini/index.cjs +1 -1
- package/dist/gemini/index.mjs +1 -1
- package/dist/index.cjs +44 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +44 -14
- package/dist/index.mjs.map +1 -1
- package/dist/langchain/index.cjs +1 -1
- package/dist/langchain/index.mjs +1 -1
- package/dist/openai/index.cjs +44 -14
- package/dist/openai/index.cjs.map +1 -1
- package/dist/openai/index.mjs +44 -14
- package/dist/openai/index.mjs.map +1 -1
- package/dist/openai-agents/index.cjs +1 -1
- package/dist/openai-agents/index.mjs +1 -1
- package/dist/vercel/index.cjs +1 -1
- package/dist/vercel/index.mjs +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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\n /**\n * Provider-assigned ID for the generation (e.g. OpenAI's `chatcmpl-…` /\n * `resp_…`). Maps to `$ai_completion_id`. Response IDs generalize across\n * providers, so this lives in the shared schema rather than under\n * `providerMetadata`.\n */\n completionId?: string\n /**\n * Provider-specific response metadata that has no place in the shared,\n * provider-agnostic `$ai_*` schema (e.g. OpenAI's `system_fingerprint` and\n * `request_id`). Maps to `$ai_provider_metadata`; omitted when empty.\n */\n providerMetadata?: Record<string, unknown>\n\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 ...(options.completionId ? { $ai_completion_id: options.completionId } : {}),\n ...(options.providerMetadata && Object.keys(options.providerMetadata).length > 0\n ? { $ai_provider_metadata: options.providerMetadata }\n : {}),\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\n/**\n * Reads the OpenAI SDK's `_request_id` field from a response object. The SDK\n * attaches the `x-request-id` response header here, but it is not part of the\n * public response types, so it has to be read through a cast. Used to populate\n * `$ai_provider_metadata.request_id`.\n */\nexport function extractRequestId(result: unknown): string | undefined {\n return (result as { _request_id?: string | null } | null | undefined)?._request_id ?? undefined\n}\n\n/**\n * Assembles the `$ai_provider_metadata` blob for OpenAI / Azure OpenAI events.\n * Provider-specific fields (system fingerprint, request id) live here rather\n * than in the shared, provider-agnostic `$ai_*` namespace. Only keys with a\n * truthy value are included, and `undefined` is returned when there is nothing\n * to report so the property can be omitted from the event entirely.\n */\nexport function buildProviderMetadata(fields: {\n systemFingerprint?: string | null\n requestId?: string | null\n}): Record<string, string> | undefined {\n const metadata: Record<string, string> = {}\n if (fields.systemFingerprint) {\n metadata.system_fingerprint = fields.systemFingerprint\n }\n if (fields.requestId) {\n metadata.request_id = fields.requestId\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined\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, extractRequestId, buildProviderMetadata } 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 // Hoisted so the catch block can surface whatever was accumulated\n // from the streamed chunks before the failure.\n let completionIdFromResponse: string | undefined\n let systemFingerprintFromResponse: string | undefined\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 and completion metadata from chunk (Chat Completions chunks carry these fields)\n if (!modelFromResponse && chunk.model) {\n modelFromResponse = chunk.model\n }\n if (!completionIdFromResponse && chunk.id) {\n completionIdFromResponse = chunk.id\n }\n if (!systemFingerprintFromResponse && chunk.system_fingerprint) {\n systemFingerprintFromResponse = chunk.system_fingerprint\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 completionId: completionIdFromResponse,\n providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\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 // If the stream fails mid-flight, surface whatever completion\n // metadata the consumed chunks already provided so the error\n // event can still be correlated to OpenAI's Logs dashboard.\n completionId: completionIdFromResponse,\n providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\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 completionId: result.id,\n providerMetadata: buildProviderMetadata({\n systemFingerprint: result.system_fingerprint,\n requestId: extractRequestId(result),\n }),\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 // Hoisted so the catch block can surface the completion ID that\n // was accumulated from the streamed chunks before the failure.\n let completionIdFromResponse: string | undefined\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 and completion ID from the response object in the chunk (for stored prompts)\n if (!modelFromResponse && chunk.response.model) {\n modelFromResponse = chunk.response.model\n }\n if (!completionIdFromResponse && chunk.response.id) {\n completionIdFromResponse = chunk.response.id\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 completionId: completionIdFromResponse,\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 // Surface the completion ID from any chunks consumed before\n // the stream failed so the error event remains correlatable.\n completionId: completionIdFromResponse,\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 completionId: result.id,\n providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\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 completionId: result.id,\n providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\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","completionId","$ai_completion_id","providerMetadata","$ai_provider_metadata","event","groups","captureImmediate","isResponseTokenChunk","chunk","extractRequestId","_request_id","buildProviderMetadata","fields","metadata","systemFingerprint","system_fingerprint","requestId","request_id","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","completionIdFromResponse","systemFingerprintFromResponse","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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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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\n /**\n * Provider-assigned ID for the generation (e.g. OpenAI's `chatcmpl-…` /\n * `resp_…`). Maps to `$ai_completion_id`. Response IDs generalize across\n * providers, so this lives in the shared schema rather than under\n * `providerMetadata`.\n */\n completionId?: string\n /**\n * Provider-specific response metadata that has no place in the shared,\n * provider-agnostic `$ai_*` schema (e.g. OpenAI's `system_fingerprint` and\n * `request_id`). Maps to `$ai_provider_metadata`; omitted when empty.\n */\n providerMetadata?: Record<string, unknown>\n\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 ...(options.completionId ? { $ai_completion_id: options.completionId } : {}),\n ...(options.providerMetadata && Object.keys(options.providerMetadata).length > 0\n ? { $ai_provider_metadata: options.providerMetadata }\n : {}),\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\n/**\n * Reads the OpenAI SDK's `_request_id` field from a response object. The SDK\n * attaches the `x-request-id` response header here, but it is not part of the\n * public response types, so it has to be read through a cast. Used to populate\n * `$ai_provider_metadata.request_id`.\n */\nexport function extractRequestId(result: unknown): string | undefined {\n return (result as { _request_id?: string | null } | null | undefined)?._request_id ?? undefined\n}\n\n/**\n * Assembles the `$ai_provider_metadata` blob for OpenAI / Azure OpenAI events.\n * Provider-specific fields (system fingerprint, request id) live here rather\n * than in the shared, provider-agnostic `$ai_*` namespace. Only keys with a\n * truthy value are included, and `undefined` is returned when there is nothing\n * to report so the property can be omitted from the event entirely.\n */\nexport function buildProviderMetadata(fields: {\n systemFingerprint?: string | null\n requestId?: string | null\n}): Record<string, string> | undefined {\n const metadata: Record<string, string> = {}\n if (fields.systemFingerprint) {\n metadata.system_fingerprint = fields.systemFingerprint\n }\n if (fields.requestId) {\n metadata.request_id = fields.requestId\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined\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, extractRequestId, buildProviderMetadata } 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>\ntype APIPromiseWithResponse<T> = Awaited<ReturnType<APIPromise<T>['withResponse']>>\n\nfunction captureAiGenerationInBackground(...args: Parameters<typeof captureAiGeneration>): void {\n void captureAiGeneration(...args).catch(() => undefined)\n}\n\nasync function captureAiGenerationAfterSuccess(...args: Parameters<typeof captureAiGeneration>): Promise<void> {\n const [, options] = args\n\n if (options.captureImmediate) {\n await captureAiGeneration(...args)\n } else {\n captureAiGenerationInBackground(...args)\n }\n}\n\nfunction preserveAPIPromiseHelpers<Input, Output>(\n parentPromise: APIPromise<Input>,\n wrappedPromise: Promise<Output>\n): APIPromise<Output> {\n const apiPromise = wrappedPromise as APIPromise<Output>\n\n if (typeof parentPromise.asResponse === 'function') {\n apiPromise.asResponse = () => parentPromise.asResponse()\n }\n\n if (typeof parentPromise.withResponse === 'function') {\n apiPromise.withResponse = async () => {\n const [response, data] = await Promise.all([parentPromise.withResponse(), wrappedPromise])\n return { ...response, data } as APIPromiseWithResponse<Output>\n }\n }\n\n return apiPromise\n}\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 const wrappedPromise = parentPromise.then((value) => {\n if ('tee' in value) {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n // Hoisted so the catch block can surface whatever was accumulated\n // from the streamed chunks before the failure.\n let completionIdFromResponse: string | undefined\n let systemFingerprintFromResponse: string | undefined\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 and completion metadata from chunk (Chat Completions chunks carry these fields)\n if (!modelFromResponse && chunk.model) {\n modelFromResponse = chunk.model\n }\n if (!completionIdFromResponse && chunk.id) {\n completionIdFromResponse = chunk.id\n }\n if (!systemFingerprintFromResponse && chunk.system_fingerprint) {\n systemFingerprintFromResponse = chunk.system_fingerprint\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 completionId: completionIdFromResponse,\n providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\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 // If the stream fails mid-flight, surface whatever completion\n // metadata the consumed chunks already provided so the error\n // event can still be correlated to OpenAI's Logs dashboard.\n completionId: completionIdFromResponse,\n providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\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 })\n\n return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\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 captureAiGenerationAfterSuccess(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 completionId: result.id,\n providerMetadata: buildProviderMetadata({\n systemFingerprint: result.system_fingerprint,\n requestId: extractRequestId(result),\n }),\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 )\n\n return preserveAPIPromiseHelpers(parentPromise, 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 const wrappedPromise = parentPromise.then((value) => {\n if ('tee' in value && typeof value.tee === 'function') {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n // Hoisted so the catch block can surface the completion ID that\n // was accumulated from the streamed chunks before the failure.\n let completionIdFromResponse: string | undefined\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 and completion ID from the response object in the chunk (for stored prompts)\n if (!modelFromResponse && chunk.response.model) {\n modelFromResponse = chunk.response.model\n }\n if (!completionIdFromResponse && chunk.response.id) {\n completionIdFromResponse = chunk.response.id\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 completionId: completionIdFromResponse,\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 // Surface the completion ID from any chunks consumed before\n // the stream failed so the error event remains correlatable.\n completionId: completionIdFromResponse,\n error,\n })\n throw error\n }\n })()\n\n return stream2\n }\n return value\n })\n\n return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\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 captureAiGenerationAfterSuccess(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 completionId: result.id,\n providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\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 )\n\n return preserveAPIPromiseHelpers(parentPromise, 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 completionId: result.id,\n providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\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 preserveAPIPromiseHelpers(parentPromise, 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 )\n\n return preserveAPIPromiseHelpers(parentPromise, 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 const wrappedPromise = 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 })\n\n return preserveAPIPromiseHelpers(\n parentPromise as APIPromise<Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>>,\n wrappedPromise\n )\n } else {\n const wrappedPromise = parentPromise.then(\n async (result) => {\n if (result && typeof result === 'object' && 'text' in result) {\n const latency = (Date.now() - startTime) / 1000\n await captureAiGenerationAfterSuccess(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 }\n return result\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 )\n\n return preserveAPIPromiseHelpers(\n parentPromise as APIPromise<OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse>,\n wrappedPromise\n )\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","completionId","$ai_completion_id","providerMetadata","$ai_provider_metadata","event","groups","captureImmediate","isResponseTokenChunk","chunk","extractRequestId","_request_id","buildProviderMetadata","fields","metadata","systemFingerprint","system_fingerprint","requestId","request_id","Chat","OpenAIOrignal","Completions","Responses","Embeddings","Audio","Transcriptions","captureAiGenerationInBackground","args","catch","captureAiGenerationAfterSuccess","preserveAPIPromiseHelpers","parentPromise","wrappedPromise","apiPromise","asResponse","withResponse","Promise","all","PostHogOpenAI","config","posthog","openAIConfig","phClient","chat","WrappedChat","responses","WrappedResponses","embeddings","WrappedEmbeddings","WrappedAudio","parentClient","completions","WrappedCompletions","create","openAIParams","startTime","Date","now","stream","then","stream1","stream2","tee","completionIdFromResponse","systemFingerprintFromResponse","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","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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"}
|