@posthog/ai 5.1.0 → 5.2.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/utils.ts","../../src/openai/index.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams) | 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 ] 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, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\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): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const formatResponseGemini = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n\n if (response.text) {\n output.push({\n role: 'assistant',\n content: response.text,\n })\n return output\n }\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 text = candidate.content.parts\n .filter((part: any) => part.text)\n .map((part: any) => part.text)\n .join('')\n if (text) {\n output.push({\n role: 'assistant',\n content: text,\n })\n }\n }\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\nexport const truncate = (str: string): string => {\n try {\n const buffer = Buffer.from(str, STRING_FORMAT)\n if (buffer.length <= MAX_OUTPUT_SIZE) {\n return str\n }\n const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`\n } catch (error) {\n console.error('Error truncating, likely not a string')\n return str\n }\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n captureImmediate?: boolean\n}\n\nfunction 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 return Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT)\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\nexport const sendEventToPosthog = async ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n captureImmediate = false,\n}: SendEventToPosthogParams): Promise<void> => {\n if (!client.capture) {\n return Promise.resolve()\n }\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.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 }\n\n const properties = {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n }\n\n const event = {\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n }\n\n if (captureImmediate) {\n // await capture promise to send single event in serverless environments\n await client.captureImmediate(event)\n } else {\n client.capture(event)\n }\n}\n","import OpenAIOrignal, { ClientOptions } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { formatResponseOpenAI, MonitoringParams, sendEventToPosthog } from '../utils'\nimport type { APIPromise } from 'openai'\nimport type { Stream } from 'openai/streaming'\nimport type { ParsedResponse } from 'openai/resources/responses/responses'\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\n\ninterface MonitoringOpenAIConfig extends ClientOptions {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\ntype RequestOptions = Record<string, any>\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n private readonly phClient: PostHog\n public chat: WrappedChat\n public responses: WrappedResponses\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 }\n}\n\nexport class WrappedChat extends OpenAIOrignal.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 OpenAIOrignal.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\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 {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n if ('tee' in value) {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n try {\n let accumulatedContent = ''\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n\n for await (const chunk of stream1) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.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 const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n captureImmediate: posthogCaptureImmediate,\n })\n } catch (error: any) {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: { inputTokens: 0, outputTokens: 0 },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: formatResponseOpenAI(result),\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n }\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n ) as APIPromise<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport class WrappedResponses extends OpenAIOrignal.Responses {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\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 {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\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 as any).tee === 'function') {\n const [stream1, stream2] = (value as any).tee()\n ;(async () => {\n try {\n let finalContent: any[] = []\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n\n for await (const chunk of stream1) {\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 }\n if ('response' in chunk && chunk.response?.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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: finalContent,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n captureImmediate: posthogCaptureImmediate,\n })\n } catch (error: any) {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: { inputTokens: 0, outputTokens: 0 },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: result.output,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n }\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n ) as APIPromise<OpenAIOrignal.Responses.Response>\n\n return wrappedPromise\n }\n }\n\n public parse<Params extends ResponsesCreateParamsBase, ParsedT = any>(\n body: Params & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ParsedResponse<ParsedT>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n // Create a temporary instance that bypasses our wrapped create method\n const originalCreate = super.create.bind(this)\n const originalSelf = this as any\n const tempCreate = originalSelf.create\n originalSelf.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 sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: result.output,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n )\n\n return wrappedPromise as APIPromise<ParsedResponse<ParsedT>>\n } finally {\n // Restore our wrapped create method\n originalSelf.create = tempCreate\n }\n }\n}\n\nexport default PostHogOpenAI\n\nexport { PostHogOpenAI as OpenAI }\n"],"names":["STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","formatResponseOpenAI","response","output","choice","choices","message","content","push","role","withPrivacyMode","client","privacyMode","input","privacy_mode","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Buffer","from","toString","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","latency","baseURL","httpStatus","usage","isError","error","tools","captureImmediate","capture","Promise","resolve","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","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","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","event","groups","posthogGroups","PostHogOpenAI","OpenAIOrignal","constructor","config","posthog","openAIConfig","phClient","chat","WrappedChat","responses","WrappedResponses","Chat","parentClient","completions","WrappedCompletions","Completions","create","body","options","posthogDistinctId","posthogTraceId","posthogCaptureImmediate","openAIParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","stream1","stream2","tee","accumulatedContent","chunk","delta","prompt_tokens","completion_tokens","completion_tokens_details","reasoning_tokens","prompt_tokens_details","cached_tokens","messages","status","wrappedPromise","result","Responses","finalContent","type","length","input_tokens","output_tokens","output_tokens_details","input_tokens_details","originalCreate","bind","originalSelf","tempCreate"],"mappings":";;;;AAWA,MAAMA,aAAa,GAAG,MAAM,CAAA;AAmBrB,MAAMC,cAAc,GACzBC,MAAiH,IACzF;EACxB,IAAI,CAACA,MAAM,EAAE;AACX,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;EACA,MAAMC,WAAgC,GAAG,EAAE,CAAA;EAC3C,MAAMC,SAAS,GAAG,CAChB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,GAAG,EACH,MAAM,EACN,QAAQ,EACR,WAAW,CACH,CAAA;AAEV,EAAA,KAAK,MAAMC,GAAG,IAAID,SAAS,EAAE;IAC3B,IAAIC,GAAG,IAAIH,MAAM,IAAKA,MAAM,CAASG,GAAG,CAAC,KAAKC,SAAS,EAAE;AACvDH,MAAAA,WAAW,CAACE,GAAG,CAAC,GAAIH,MAAM,CAASG,GAAG,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;AACA,EAAA,OAAOF,WAAW,CAAA;AACpB,CAAC,CAAA;AAiCM,MAAMI,oBAAoB,GAAIC,QAAa,IAA+C;EAC/F,MAAMC,MAAgD,GAAG,EAAE,CAAA;EAC3D,KAAK,MAAMC,MAAM,IAAIF,QAAQ,CAACG,OAAO,IAAI,EAAE,EAAE;AAC3C,IAAA,IAAID,MAAM,CAACE,OAAO,EAAEC,OAAO,EAAE;MAC3BJ,MAAM,CAACK,IAAI,CAAC;AACVC,QAAAA,IAAI,EAAEL,MAAM,CAACE,OAAO,CAACG,IAAI;AACzBF,QAAAA,OAAO,EAAEH,MAAM,CAACE,OAAO,CAACC,OAAAA;AAC1B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AACA,EAAA,OAAOJ,MAAM,CAAA;AACf,CAAC,CAAA;AA6CM,MAAMO,eAAe,GAAGA,CAACC,MAAe,EAAEC,WAAoB,EAAEC,KAAU,KAAU;EACzF,OAAQF,MAAM,CAASG,YAAY,IAAIF,WAAW,GAAG,IAAI,GAAGC,KAAK,CAAA;AACnE,CAAC,CAAA;AAyCD,SAASE,cAAcA,CAACC,GAAQ,EAAO;AACrC,EAAA,IAAIA,GAAG,KAAKhB,SAAS,IAAIgB,GAAG,KAAK,IAAI,EAAE;AACrC,IAAA,OAAOA,GAAG,CAAA;AACZ,GAAA;AACA,EAAA,MAAMC,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACJ,GAAG,CAAC,CAAC,CAAA;AAChD,EAAA,IAAI,OAAOC,QAAQ,KAAK,QAAQ,EAAE;AAChC,IAAA,OAAOI,MAAM,CAACC,IAAI,CAACL,QAAQ,EAAEvB,aAAa,CAAC,CAAC6B,QAAQ,CAAC7B,aAAa,CAAC,CAAA;GACpE,MAAM,IAAI8B,KAAK,CAACC,OAAO,CAACR,QAAQ,CAAC,EAAE;AAClC,IAAA,OAAOA,QAAQ,CAACS,GAAG,CAACX,cAAc,CAAC,CAAA;GACpC,MAAM,IAAIE,QAAQ,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;AACnD,IAAA,OAAOU,MAAM,CAACC,WAAW,CAACD,MAAM,CAACE,OAAO,CAACZ,QAAQ,CAAC,CAACS,GAAG,CAAC,CAAC,CAACI,CAAC,EAAEC,CAAC,CAAC,KAAK,CAACD,CAAC,EAAEf,cAAc,CAACgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7F,GAAA;AACA,EAAA,OAAOd,QAAQ,CAAA;AACjB,CAAA;AAEO,MAAMe,kBAAkB,GAAG,OAAO;EACvCrB,MAAM;EACNsB,UAAU;EACVC,OAAO;EACPC,KAAK;EACLC,QAAQ;EACRvB,KAAK;EACLV,MAAM;EACNkC,OAAO;EACPC,OAAO;EACP1C,MAAM;AACN2C,EAAAA,UAAU,GAAG,GAAG;EAChBC,KAAK,GAAG,EAAE;AACVC,EAAAA,OAAO,GAAG,KAAK;EACfC,KAAK;EACLC,KAAK;AACLC,EAAAA,gBAAgB,GAAG,KAAA;AACK,CAAC,KAAoB;AAC7C,EAAA,IAAI,CAACjC,MAAM,CAACkC,OAAO,EAAE;AACnB,IAAA,OAAOC,OAAO,CAACC,OAAO,EAAE,CAAA;AAC1B,GAAA;AACA;AACA,EAAA,MAAMC,SAAS,GAAGjC,cAAc,CAACF,KAAK,CAAC,CAAA;AACvC,EAAA,MAAMoC,UAAU,GAAGlC,cAAc,CAACZ,MAAM,CAAC,CAAA;AACzC,EAAA,MAAM+C,SAAS,GAAGnC,cAAc,CAAC2B,KAAK,CAAC,CAAA;EAEvC,IAAIS,SAAS,GAAG,EAAE,CAAA;AAClB,EAAA,IAAIV,OAAO,EAAE;AACXU,IAAAA,SAAS,GAAG;AACVC,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,SAAS,EAAEH,SAAAA;KACZ,CAAA;AACH,GAAA;EACA,IAAII,gBAAgB,GAAG,EAAE,CAAA;EACzB,IAAI1D,MAAM,CAAC2D,mBAAmB,EAAE;AAC9B,IAAA,MAAMC,YAAY,GAAG,CAAC5D,MAAM,CAAC2D,mBAAmB,CAACE,SAAS,IAAI,CAAC,KAAKjB,KAAK,CAACkB,WAAW,IAAI,CAAC,CAAC,CAAA;AAC3F,IAAA,MAAMC,aAAa,GAAG,CAAC/D,MAAM,CAAC2D,mBAAmB,CAACK,UAAU,IAAI,CAAC,KAAKpB,KAAK,CAACqB,YAAY,IAAI,CAAC,CAAC,CAAA;AAC9FP,IAAAA,gBAAgB,GAAG;AACjBQ,MAAAA,kBAAkB,EAAEN,YAAY;AAChCO,MAAAA,mBAAmB,EAAEJ,aAAa;MAClCK,kBAAkB,EAAER,YAAY,GAAGG,aAAAA;KACpC,CAAA;AACH,GAAA;AAEA,EAAA,MAAMM,qBAAqB,GAAG;IAC5B,IAAIzB,KAAK,CAAC0B,eAAe,GAAG;MAAEC,oBAAoB,EAAE3B,KAAK,CAAC0B,eAAAA;KAAiB,GAAG,EAAE,CAAC;IACjF,IAAI1B,KAAK,CAAC4B,oBAAoB,GAAG;MAAEC,2BAA2B,EAAE7B,KAAK,CAAC4B,oBAAAA;KAAsB,GAAG,EAAE,CAAC;IAClG,IAAI5B,KAAK,CAAC8B,wBAAwB,GAAG;MAAEC,+BAA+B,EAAE/B,KAAK,CAAC8B,wBAAAA;KAA0B,GAAG,EAAE,CAAA;GAC9G,CAAA;AAED,EAAA,MAAME,UAAU,GAAG;AACjBC,IAAAA,YAAY,EAAE7E,MAAM,CAAC8E,uBAAuB,IAAItC,QAAQ;AACxDuC,IAAAA,SAAS,EAAE/E,MAAM,CAACgF,oBAAoB,IAAIzC,KAAK;AAC/C0C,IAAAA,oBAAoB,EAAElF,cAAc,CAACC,MAAM,CAAC;AAC5CkF,IAAAA,SAAS,EAAEpE,eAAe,CAACC,MAAM,EAAEf,MAAM,CAACmF,kBAAkB,IAAI,KAAK,EAAE/B,SAAS,CAAC;AACjFgC,IAAAA,kBAAkB,EAAEtE,eAAe,CAACC,MAAM,EAAEf,MAAM,CAACmF,kBAAkB,IAAI,KAAK,EAAE9B,UAAU,CAAC;AAC3FgC,IAAAA,eAAe,EAAE1C,UAAU;AAC3B2C,IAAAA,gBAAgB,EAAE1C,KAAK,CAACkB,WAAW,IAAI,CAAC;AACxCyB,IAAAA,iBAAiB,EAAE3C,KAAK,CAACqB,YAAY,IAAI,CAAC;AAC1C,IAAA,GAAGI,qBAAqB;AACxBmB,IAAAA,WAAW,EAAE/C,OAAO;AACpBgD,IAAAA,YAAY,EAAEnD,OAAO;AACrBoD,IAAAA,YAAY,EAAEhD,OAAO;IACrB,GAAG1C,MAAM,CAAC2F,iBAAiB;AAC3B,IAAA,IAAItD,UAAU,GAAG,EAAE,GAAG;AAAEuD,MAAAA,uBAAuB,EAAE,KAAA;AAAM,KAAC,CAAC;AACzD,IAAA,IAAI7C,KAAK,GAAG;AAAE8C,MAAAA,SAAS,EAAE9C,KAAAA;KAAO,GAAG,EAAE,CAAC;AACtC,IAAA,GAAGQ,SAAS;IACZ,GAAGG,gBAAAA;GACJ,CAAA;AAED,EAAA,MAAMoC,KAAK,GAAG;IACZzD,UAAU,EAAEA,UAAU,IAAIC,OAAO;AACjCwD,IAAAA,KAAK,EAAE,gBAAgB;IACvBlB,UAAU;IACVmB,MAAM,EAAE/F,MAAM,CAACgG,aAAAA;GAChB,CAAA;AAED,EAAA,IAAIhD,gBAAgB,EAAE;AACpB;AACA,IAAA,MAAMjC,MAAM,CAACiC,gBAAgB,CAAC8C,KAAK,CAAC,CAAA;AACtC,GAAC,MAAM;AACL/E,IAAAA,MAAM,CAACkC,OAAO,CAAC6C,KAAK,CAAC,CAAA;AACvB,GAAA;AACF,CAAC;;ACrQM,MAAMG,aAAa,SAASC,aAAa,CAAC;EAK/CC,WAAWA,CAACC,MAA8B,EAAE;IAC1C,MAAM;MAAEC,OAAO;MAAE,GAAGC,YAAAA;AAAa,KAAC,GAAGF,MAAM,CAAA;IAC3C,KAAK,CAACE,YAAY,CAAC,CAAA;IACnB,IAAI,CAACC,QAAQ,GAAGF,OAAO,CAAA;IACvB,IAAI,CAACG,IAAI,GAAG,IAAIC,WAAW,CAAC,IAAI,EAAE,IAAI,CAACF,QAAQ,CAAC,CAAA;IAChD,IAAI,CAACG,SAAS,GAAG,IAAIC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAACJ,QAAQ,CAAC,CAAA;AAC5D,GAAA;AACF,CAAA;AAEO,MAAME,WAAW,SAASP,aAAa,CAACU,IAAI,CAAC;AAClDT,EAAAA,WAAWA,CAACU,YAA2B,EAAEN,QAAiB,EAAE;IAC1D,KAAK,CAACM,YAAY,CAAC,CAAA;IACnB,IAAI,CAACC,WAAW,GAAG,IAAIC,kBAAkB,CAACF,YAAY,EAAEN,QAAQ,CAAC,CAAA;AACnE,GAAA;AAGF,CAAA;AAEO,MAAMQ,kBAAkB,SAASb,aAAa,CAACU,IAAI,CAACI,WAAW,CAAC;AAGrEb,EAAAA,WAAWA,CAACpF,MAAqB,EAAEwF,QAAiB,EAAE;IACpD,KAAK,CAACxF,MAAM,CAAC,CAAA;IACb,IAAI,CAACwF,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,GAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACOU,EAAAA,MAAMA,CACXC,IAAuD,EACvDC,OAAwB,EACkC;IAC1D,MAAM;MACJC,iBAAiB;MACjBC,cAAc;MACd1B,iBAAiB;AACjB;AACAR,MAAAA,kBAAkB,GAAG,KAAK;MAC1Ba,aAAa;MACbsB,uBAAuB;MACvB,GAAGC,YAAAA;AACL,KAAC,GAAGL,IAAI,CAAA;AAER,IAAA,MAAM5E,OAAO,GAAG+E,cAAc,IAAIG,EAAM,EAAE,CAAA;AAC1C,IAAA,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACX,MAAM,CAACM,YAAY,EAAEJ,OAAO,CAAC,CAAA;IAEzD,IAAII,YAAY,CAACM,MAAM,EAAE;AACvB,MAAA,OAAOD,aAAa,CAACE,IAAI,CAAEC,KAAK,IAAK;QACnC,IAAI,KAAK,IAAIA,KAAK,EAAE;UAClB,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,GAAGF,KAAK,CAACG,GAAG,EAAE,CAAA;AACrC,UAAA,CAAC,YAAY;YACZ,IAAI;cACF,IAAIC,kBAAkB,GAAG,EAAE,CAAA;AAC3B,cAAA,IAAIvF,KAKH,GAAG;AACFkB,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE,CAAA;eACf,CAAA;AAED,cAAA,WAAW,MAAMmE,KAAK,IAAIJ,OAAO,EAAE;AACjC,gBAAA,MAAMK,KAAK,GAAGD,KAAK,EAAE3H,OAAO,GAAG,CAAC,CAAC,EAAE4H,KAAK,EAAE1H,OAAO,IAAI,EAAE,CAAA;AACvDwH,gBAAAA,kBAAkB,IAAIE,KAAK,CAAA;gBAC3B,IAAID,KAAK,CAACxF,KAAK,EAAE;AACfA,kBAAAA,KAAK,GAAG;AACNkB,oBAAAA,WAAW,EAAEsE,KAAK,CAACxF,KAAK,CAAC0F,aAAa,IAAI,CAAC;AAC3CrE,oBAAAA,YAAY,EAAEmE,KAAK,CAACxF,KAAK,CAAC2F,iBAAiB,IAAI,CAAC;oBAChDjE,eAAe,EAAE8D,KAAK,CAACxF,KAAK,CAAC4F,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;oBAC7EjE,oBAAoB,EAAE4D,KAAK,CAACxF,KAAK,CAAC8F,qBAAqB,EAAEC,aAAa,IAAI,CAAA;mBAC3E,CAAA;AACH,iBAAA;AACF,eAAA;cAEA,MAAMlG,OAAO,GAAG,CAACiF,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/C,cAAA,MAAMrF,kBAAkB,CAAC;gBACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;gBACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBvB,KAAK,EAAEsG,YAAY,CAACqB,QAAQ;AAC5BrI,gBAAAA,MAAM,EAAE,CAAC;AAAEI,kBAAAA,OAAO,EAAEwH,kBAAkB;AAAEtH,kBAAAA,IAAI,EAAE,WAAA;AAAY,iBAAC,CAAC;gBAC5D4B,OAAO;AACPC,gBAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,gBAAAA,MAAM,EAAEkH,IAAI;AACZvE,gBAAAA,UAAU,EAAE,GAAG;gBACfC,KAAK;AACLI,gBAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,eAAC,CAAC,CAAA;aACH,CAAC,OAAOxE,KAAU,EAAE;AACnB,cAAA,MAAMV,kBAAkB,CAAC;gBACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;gBACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBvB,KAAK,EAAEsG,YAAY,CAACqB,QAAQ;AAC5BrI,gBAAAA,MAAM,EAAE,EAAE;AACVkC,gBAAAA,OAAO,EAAE,CAAC;AACVC,gBAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,gBAAAA,MAAM,EAAEkH,IAAI;gBACZvE,UAAU,EAAEG,KAAK,EAAE+F,MAAM,GAAG/F,KAAK,CAAC+F,MAAM,GAAG,GAAG;AAC9CjG,gBAAAA,KAAK,EAAE;AAAEkB,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE,CAAA;iBAAG;AAC1CpB,gBAAAA,OAAO,EAAE,IAAI;AACbC,gBAAAA,KAAK,EAAExB,IAAI,CAACE,SAAS,CAACsB,KAAK,CAAC;AAC5BE,gBAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,eAAC,CAAC,CAAA;AACJ,aAAA;AACF,WAAC,GAAG,CAAA;;AAEJ;AACA,UAAA,OAAOW,OAAO,CAAA;AAChB,SAAA;AACA,QAAA,OAAOF,KAAK,CAAA;AACd,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM;MACL,MAAMe,cAAc,GAAGlB,aAAa,CAACE,IAAI,CACvC,MAAOiB,MAAM,IAAK;QAChB,IAAI,SAAS,IAAIA,MAAM,EAAE;UACvB,MAAMtG,OAAO,GAAG,CAACiF,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/C,UAAA,MAAMrF,kBAAkB,CAAC;YACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;YACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;YACxCA,OAAO;YACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,YAAAA,QAAQ,EAAE,QAAQ;YAClBvB,KAAK,EAAEsG,YAAY,CAACqB,QAAQ;AAC5BrI,YAAAA,MAAM,EAAEF,oBAAoB,CAAC0I,MAAM,CAAC;YACpCtG,OAAO;AACPC,YAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,YAAAA,MAAM,EAAEkH,IAAI;AACZvE,YAAAA,UAAU,EAAE,GAAG;AACfC,YAAAA,KAAK,EAAE;AACLkB,cAAAA,WAAW,EAAEiF,MAAM,CAACnG,KAAK,EAAE0F,aAAa,IAAI,CAAC;AAC7CrE,cAAAA,YAAY,EAAE8E,MAAM,CAACnG,KAAK,EAAE2F,iBAAiB,IAAI,CAAC;cAClDjE,eAAe,EAAEyE,MAAM,CAACnG,KAAK,EAAE4F,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;cAC/EjE,oBAAoB,EAAEuE,MAAM,CAACnG,KAAK,EAAE8F,qBAAqB,EAAEC,aAAa,IAAI,CAAA;aAC7E;AACD3F,YAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,OAAOyB,MAAM,CAAA;OACd,EACD,MAAOjG,KAAU,IAAK;AACpB,QAAA,MAAMV,kBAAkB,CAAC;UACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;UACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;UACxCA,OAAO;UACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,UAAAA,QAAQ,EAAE,QAAQ;UAClBvB,KAAK,EAAEsG,YAAY,CAACqB,QAAQ;AAC5BrI,UAAAA,MAAM,EAAE,EAAE;AACVkC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,UAAAA,MAAM,EAAEkH,IAAI;UACZvE,UAAU,EAAEG,KAAK,EAAE+F,MAAM,GAAG/F,KAAK,CAAC+F,MAAM,GAAG,GAAG;AAC9CjG,UAAAA,KAAK,EAAE;AACLkB,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE,CAAA;WACf;AACDpB,UAAAA,OAAO,EAAE,IAAI;AACbC,UAAAA,KAAK,EAAExB,IAAI,CAACE,SAAS,CAACsB,KAAK,CAAC;AAC5BE,UAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,SAAC,CAAC,CAAA;AACF,QAAA,MAAMxE,KAAK,CAAA;AACb,OACF,CAA+B,CAAA;AAE/B,MAAA,OAAOgG,cAAc,CAAA;AACvB,KAAA;AACF,GAAA;AACF,CAAA;AAEO,MAAMnC,gBAAgB,SAAST,aAAa,CAAC8C,SAAS,CAAC;AAG5D7C,EAAAA,WAAWA,CAACpF,MAAqB,EAAEwF,QAAiB,EAAE;IACpD,KAAK,CAACxF,MAAM,CAAC,CAAA;IACb,IAAI,CAACwF,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,GAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACOU,EAAAA,MAAMA,CACXC,IAAkD,EAClDC,OAAwB,EAC4E;IACpG,MAAM;MACJC,iBAAiB;MACjBC,cAAc;MACd1B,iBAAiB;AACjB;AACAR,MAAAA,kBAAkB,GAAG,KAAK;MAC1Ba,aAAa;MACbsB,uBAAuB;MACvB,GAAGC,YAAAA;AACL,KAAC,GAAGL,IAAI,CAAA;AAER,IAAA,MAAM5E,OAAO,GAAG+E,cAAc,IAAIG,EAAM,EAAE,CAAA;AAC1C,IAAA,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACX,MAAM,CAACM,YAAY,EAAEJ,OAAO,CAAC,CAAA;IAEzD,IAAII,YAAY,CAACM,MAAM,EAAE;AACvB,MAAA,OAAOD,aAAa,CAACE,IAAI,CAAEC,KAAK,IAAK;QACnC,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAQA,KAAK,CAASG,GAAG,KAAK,UAAU,EAAE;UAC9D,MAAM,CAACF,OAAO,EAAEC,OAAO,CAAC,GAAIF,KAAK,CAASG,GAAG,EAAE,CAAA;AAC9C,UAAA,CAAC,YAAY;YACZ,IAAI;cACF,IAAIe,YAAmB,GAAG,EAAE,CAAA;AAC5B,cAAA,IAAIrG,KAKH,GAAG;AACFkB,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE,CAAA;eACf,CAAA;AAED,cAAA,WAAW,MAAMmE,KAAK,IAAIJ,OAAO,EAAE;gBACjC,IACEI,KAAK,CAACc,IAAI,KAAK,oBAAoB,IACnC,UAAU,IAAId,KAAK,IACnBA,KAAK,CAAC9H,QAAQ,EAAEC,MAAM,IACtB6H,KAAK,CAAC9H,QAAQ,CAACC,MAAM,CAAC4I,MAAM,GAAG,CAAC,EAChC;AACAF,kBAAAA,YAAY,GAAGb,KAAK,CAAC9H,QAAQ,CAACC,MAAM,CAAA;AACtC,iBAAA;gBACA,IAAI,UAAU,IAAI6H,KAAK,IAAIA,KAAK,CAAC9H,QAAQ,EAAEsC,KAAK,EAAE;AAChDA,kBAAAA,KAAK,GAAG;oBACNkB,WAAW,EAAEsE,KAAK,CAAC9H,QAAQ,CAACsC,KAAK,CAACwG,YAAY,IAAI,CAAC;oBACnDnF,YAAY,EAAEmE,KAAK,CAAC9H,QAAQ,CAACsC,KAAK,CAACyG,aAAa,IAAI,CAAC;oBACrD/E,eAAe,EAAE8D,KAAK,CAAC9H,QAAQ,CAACsC,KAAK,CAAC0G,qBAAqB,EAAEb,gBAAgB,IAAI,CAAC;oBAClFjE,oBAAoB,EAAE4D,KAAK,CAAC9H,QAAQ,CAACsC,KAAK,CAAC2G,oBAAoB,EAAEZ,aAAa,IAAI,CAAA;mBACnF,CAAA;AACH,iBAAA;AACF,eAAA;cAEA,MAAMlG,OAAO,GAAG,CAACiF,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/C,cAAA,MAAMrF,kBAAkB,CAAC;gBACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;gBACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;AACzBV,gBAAAA,MAAM,EAAE0I,YAAY;gBACpBxG,OAAO;AACPC,gBAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,gBAAAA,MAAM,EAAEkH,IAAI;AACZvE,gBAAAA,UAAU,EAAE,GAAG;gBACfC,KAAK;AACLI,gBAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,eAAC,CAAC,CAAA;aACH,CAAC,OAAOxE,KAAU,EAAE;AACnB,cAAA,MAAMV,kBAAkB,CAAC;gBACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;gBACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;AACzBV,gBAAAA,MAAM,EAAE,EAAE;AACVkC,gBAAAA,OAAO,EAAE,CAAC;AACVC,gBAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,gBAAAA,MAAM,EAAEkH,IAAI;gBACZvE,UAAU,EAAEG,KAAK,EAAE+F,MAAM,GAAG/F,KAAK,CAAC+F,MAAM,GAAG,GAAG;AAC9CjG,gBAAAA,KAAK,EAAE;AAAEkB,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE,CAAA;iBAAG;AAC1CpB,gBAAAA,OAAO,EAAE,IAAI;AACbC,gBAAAA,KAAK,EAAExB,IAAI,CAACE,SAAS,CAACsB,KAAK,CAAC;AAC5BE,gBAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,eAAC,CAAC,CAAA;AACJ,aAAA;AACF,WAAC,GAAG,CAAA;AAEJ,UAAA,OAAOW,OAAO,CAAA;AAChB,SAAA;AACA,QAAA,OAAOF,KAAK,CAAA;AACd,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM;MACL,MAAMe,cAAc,GAAGlB,aAAa,CAACE,IAAI,CACvC,MAAOiB,MAAM,IAAK;QAChB,IAAI,QAAQ,IAAIA,MAAM,EAAE;UACtB,MAAMtG,OAAO,GAAG,CAACiF,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/C,UAAA,MAAMrF,kBAAkB,CAAC;YACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;YACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;YACxCA,OAAO;YACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,YAAAA,QAAQ,EAAE,QAAQ;YAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;YACzBV,MAAM,EAAEwI,MAAM,CAACxI,MAAM;YACrBkC,OAAO;AACPC,YAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,YAAAA,MAAM,EAAEkH,IAAI;AACZvE,YAAAA,UAAU,EAAE,GAAG;AACfC,YAAAA,KAAK,EAAE;AACLkB,cAAAA,WAAW,EAAEiF,MAAM,CAACnG,KAAK,EAAEwG,YAAY,IAAI,CAAC;AAC5CnF,cAAAA,YAAY,EAAE8E,MAAM,CAACnG,KAAK,EAAEyG,aAAa,IAAI,CAAC;cAC9C/E,eAAe,EAAEyE,MAAM,CAACnG,KAAK,EAAE0G,qBAAqB,EAAEb,gBAAgB,IAAI,CAAC;cAC3EjE,oBAAoB,EAAEuE,MAAM,CAACnG,KAAK,EAAE2G,oBAAoB,EAAEZ,aAAa,IAAI,CAAA;aAC5E;AACD3F,YAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,OAAOyB,MAAM,CAAA;OACd,EACD,MAAOjG,KAAU,IAAK;AACpB,QAAA,MAAMV,kBAAkB,CAAC;UACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;UACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;UACxCA,OAAO;UACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,UAAAA,QAAQ,EAAE,QAAQ;UAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;AACzBV,UAAAA,MAAM,EAAE,EAAE;AACVkC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,UAAAA,MAAM,EAAEkH,IAAI;UACZvE,UAAU,EAAEG,KAAK,EAAE+F,MAAM,GAAG/F,KAAK,CAAC+F,MAAM,GAAG,GAAG;AAC9CjG,UAAAA,KAAK,EAAE;AACLkB,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE,CAAA;WACf;AACDpB,UAAAA,OAAO,EAAE,IAAI;AACbC,UAAAA,KAAK,EAAExB,IAAI,CAACE,SAAS,CAACsB,KAAK,CAAC;AAC5BE,UAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,SAAC,CAAC,CAAA;AACF,QAAA,MAAMxE,KAAK,CAAA;AACb,OACF,CAAiD,CAAA;AAEjD,MAAA,OAAOgG,cAAc,CAAA;AACvB,KAAA;AACF,GAAA;AAEOvH,EAAAA,KAAKA,CACV2F,IAA+B,EAC/BC,OAAwB,EACa;IACrC,MAAM;MACJC,iBAAiB;MACjBC,cAAc;MACd1B,iBAAiB;AACjB;AACAR,MAAAA,kBAAkB,GAAG,KAAK;MAC1Ba,aAAa;MACbsB,uBAAuB;MACvB,GAAGC,YAAAA;AACL,KAAC,GAAGL,IAAI,CAAA;AAER,IAAA,MAAM5E,OAAO,GAAG+E,cAAc,IAAIG,EAAM,EAAE,CAAA;AAC1C,IAAA,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;;AAE5B;IACA,MAAM6B,cAAc,GAAG,KAAK,CAACvC,MAAM,CAACwC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAMC,YAAY,GAAG,IAAW,CAAA;AAChC,IAAA,MAAMC,UAAU,GAAGD,YAAY,CAACzC,MAAM,CAAA;IACtCyC,YAAY,CAACzC,MAAM,GAAGuC,cAAc,CAAA;IAEpC,IAAI;MACF,MAAM5B,aAAa,GAAG,KAAK,CAACrG,KAAK,CAACgG,YAAY,EAAEJ,OAAO,CAAC,CAAA;MAExD,MAAM2B,cAAc,GAAGlB,aAAa,CAACE,IAAI,CACvC,MAAOiB,MAAM,IAAK;QAChB,MAAMtG,OAAO,GAAG,CAACiF,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/C,QAAA,MAAMrF,kBAAkB,CAAC;UACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;UACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;UACxCA,OAAO;UACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,UAAAA,QAAQ,EAAE,QAAQ;UAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;UACzBV,MAAM,EAAEwI,MAAM,CAACxI,MAAM;UACrBkC,OAAO;AACPC,UAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,UAAAA,MAAM,EAAEkH,IAAI;AACZvE,UAAAA,UAAU,EAAE,GAAG;AACfC,UAAAA,KAAK,EAAE;AACLkB,YAAAA,WAAW,EAAEiF,MAAM,CAACnG,KAAK,EAAEwG,YAAY,IAAI,CAAC;AAC5CnF,YAAAA,YAAY,EAAE8E,MAAM,CAACnG,KAAK,EAAEyG,aAAa,IAAI,CAAC;YAC9C/E,eAAe,EAAEyE,MAAM,CAACnG,KAAK,EAAE0G,qBAAqB,EAAEb,gBAAgB,IAAI,CAAC;YAC3EjE,oBAAoB,EAAEuE,MAAM,CAACnG,KAAK,EAAE2G,oBAAoB,EAAEZ,aAAa,IAAI,CAAA;WAC5E;AACD3F,UAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,SAAC,CAAC,CAAA;AACF,QAAA,OAAOyB,MAAM,CAAA;OACd,EACD,MAAOjG,KAAU,IAAK;AACpB,QAAA,MAAMV,kBAAkB,CAAC;UACvBrB,MAAM,EAAE,IAAI,CAACwF,QAAQ;UACrBlE,UAAU,EAAE+E,iBAAiB,IAAI9E,OAAO;UACxCA,OAAO;UACPC,KAAK,EAAEgF,YAAY,CAAChF,KAAK;AACzBC,UAAAA,QAAQ,EAAE,QAAQ;UAClBvB,KAAK,EAAEsG,YAAY,CAACtG,KAAK;AACzBV,UAAAA,MAAM,EAAE,EAAE;AACVkC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAG,IAAI,CAASA,OAAO,IAAI,EAAE;AACpC1C,UAAAA,MAAM,EAAEkH,IAAI;UACZvE,UAAU,EAAEG,KAAK,EAAE+F,MAAM,GAAG/F,KAAK,CAAC+F,MAAM,GAAG,GAAG;AAC9CjG,UAAAA,KAAK,EAAE;AACLkB,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE,CAAA;WACf;AACDpB,UAAAA,OAAO,EAAE,IAAI;AACbC,UAAAA,KAAK,EAAExB,IAAI,CAACE,SAAS,CAACsB,KAAK,CAAC;AAC5BE,UAAAA,gBAAgB,EAAEsE,uBAAAA;AACpB,SAAC,CAAC,CAAA;AACF,QAAA,MAAMxE,KAAK,CAAA;AACb,OACF,CAAC,CAAA;AAED,MAAA,OAAOgG,cAAc,CAAA;AACvB,KAAC,SAAS;AACR;MACAY,YAAY,CAACzC,MAAM,GAAG0C,UAAU,CAAA;AAClC,KAAA;AACF,GAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/utils.ts","../../src/openai/index.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams) | 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 ] 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, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\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): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const formatResponseGemini = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n\n if (response.text) {\n output.push({\n role: 'assistant',\n content: response.text,\n })\n return output\n }\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 text = candidate.content.parts\n .filter((part: any) => part.text)\n .map((part: any) => part.text)\n .join('')\n if (text) {\n output.push({\n role: 'assistant',\n content: text,\n })\n }\n }\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\nexport const truncate = (str: string): string => {\n try {\n const buffer = Buffer.from(str, STRING_FORMAT)\n if (buffer.length <= MAX_OUTPUT_SIZE) {\n return str\n }\n const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`\n } catch (error) {\n console.error('Error truncating, likely not a string')\n return str\n }\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n captureImmediate?: boolean\n}\n\nfunction 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 return Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT)\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\nexport const sendEventToPosthog = async ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n captureImmediate = false,\n}: SendEventToPosthogParams): Promise<void> => {\n if (!client.capture) {\n return Promise.resolve()\n }\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.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 }\n\n const properties = {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n }\n\n const event = {\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n }\n\n if (captureImmediate) {\n // await capture promise to send single event in serverless environments\n await client.captureImmediate(event)\n } else {\n client.capture(event)\n }\n}\n","import OpenAIOrignal, { ClientOptions } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { formatResponseOpenAI, MonitoringParams, sendEventToPosthog } from '../utils'\nimport type { APIPromise } from 'openai'\nimport type { Stream } from 'openai/streaming'\nimport type { ParsedResponse } from 'openai/resources/responses/responses'\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\n\ninterface MonitoringOpenAIConfig extends ClientOptions {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\ntype RequestOptions = Record<string, any>\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n private readonly phClient: PostHog\n public chat: WrappedChat\n public responses: WrappedResponses\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 }\n}\n\nexport class WrappedChat extends OpenAIOrignal.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 OpenAIOrignal.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\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 {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n if ('tee' in value) {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n try {\n let accumulatedContent = ''\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n\n for await (const chunk of stream1) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.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 const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n captureImmediate: posthogCaptureImmediate,\n })\n } catch (error: any) {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: { inputTokens: 0, outputTokens: 0 },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: formatResponseOpenAI(result),\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n }\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n ) as APIPromise<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport class WrappedResponses extends OpenAIOrignal.Responses {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\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 {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\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 as any).tee === 'function') {\n const [stream1, stream2] = (value as any).tee()\n ;(async () => {\n try {\n let finalContent: any[] = []\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n\n for await (const chunk of stream1) {\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 }\n if ('response' in chunk && chunk.response?.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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: finalContent,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n captureImmediate: posthogCaptureImmediate,\n })\n } catch (error: any) {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: { inputTokens: 0, outputTokens: 0 },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\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 await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: result.output,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n }\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n ) as APIPromise<OpenAIOrignal.Responses.Response>\n\n return wrappedPromise\n }\n }\n\n public parse<Params extends ResponsesCreateParamsBase, ParsedT = any>(\n body: Params & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ParsedResponse<ParsedT>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n // Create a temporary instance that bypasses our wrapped create method\n const originalCreate = super.create.bind(this)\n const originalSelf = this as any\n const tempCreate = originalSelf.create\n originalSelf.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 sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: result.output,\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: 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 },\n captureImmediate: posthogCaptureImmediate,\n })\n return result\n },\n async (error: any) => {\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.input,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n captureImmediate: posthogCaptureImmediate,\n })\n throw error\n }\n )\n\n return wrappedPromise as APIPromise<ParsedResponse<ParsedT>>\n } finally {\n // Restore our wrapped create method\n originalSelf.create = tempCreate\n }\n }\n}\n\nexport default PostHogOpenAI\n\nexport { PostHogOpenAI as OpenAI }\n"],"names":["STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","formatResponseOpenAI","response","output","choice","choices","message","content","push","role","withPrivacyMode","client","privacyMode","input","privacy_mode","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Buffer","from","toString","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","latency","baseURL","httpStatus","usage","isError","error","tools","captureImmediate","capture","Promise","resolve","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","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","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","event","groups","posthogGroups","PostHogOpenAI","OpenAIOrignal","constructor","config","posthog","openAIConfig","phClient","chat","WrappedChat","responses","WrappedResponses","Chat","parentClient","completions","WrappedCompletions","Completions","create","body","options","posthogDistinctId","posthogTraceId","posthogCaptureImmediate","openAIParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","stream1","stream2","tee","accumulatedContent","chunk","delta","prompt_tokens","completion_tokens","completion_tokens_details","reasoning_tokens","prompt_tokens_details","cached_tokens","messages","status","wrappedPromise","result","Responses","finalContent","type","length","input_tokens","output_tokens","output_tokens_details","input_tokens_details","originalCreate","bind","originalSelf","tempCreate"],"mappings":"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"}
@@ -352,7 +352,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
352
352
  await sendEventToPosthog({
353
353
  client: phClient,
354
354
  distinctId: options.posthogDistinctId,
355
- traceId: options.posthogTraceId,
355
+ traceId: options.posthogTraceId ?? uuid.v4(),
356
356
  model: modelId,
357
357
  provider: provider,
358
358
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -377,7 +377,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
377
377
  await sendEventToPosthog({
378
378
  client: phClient,
379
379
  distinctId: options.posthogDistinctId,
380
- traceId: options.posthogTraceId,
380
+ traceId: options.posthogTraceId ?? uuid.v4(),
381
381
  model: modelId,
382
382
  provider: model.provider,
383
383
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -446,7 +446,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
446
446
  await sendEventToPosthog({
447
447
  client: phClient,
448
448
  distinctId: options.posthogDistinctId,
449
- traceId: options.posthogTraceId,
449
+ traceId: options.posthogTraceId ?? uuid.v4(),
450
450
  model: modelId,
451
451
  provider: provider,
452
452
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -471,7 +471,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
471
471
  await sendEventToPosthog({
472
472
  client: phClient,
473
473
  distinctId: options.posthogDistinctId,
474
- traceId: options.posthogTraceId,
474
+ traceId: options.posthogTraceId ?? uuid.v4(),
475
475
  model: modelId,
476
476
  provider: provider,
477
477
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -499,7 +499,7 @@ const wrapVercelLanguageModel = (model, phClient, options) => {
499
499
  const middleware = createInstrumentationMiddleware(phClient, model, {
500
500
  ...options,
501
501
  posthogTraceId: traceId,
502
- posthogDistinctId: options.posthogDistinctId ?? traceId
502
+ posthogDistinctId: options.posthogDistinctId
503
503
  });
504
504
  const wrappedModel = ai.experimental_wrapLanguageModel({
505
505
  model,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/utils.ts","../../src/vercel/middleware.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams) | 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 ] 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, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\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): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const formatResponseGemini = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n\n if (response.text) {\n output.push({\n role: 'assistant',\n content: response.text,\n })\n return output\n }\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 text = candidate.content.parts\n .filter((part: any) => part.text)\n .map((part: any) => part.text)\n .join('')\n if (text) {\n output.push({\n role: 'assistant',\n content: text,\n })\n }\n }\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\nexport const truncate = (str: string): string => {\n try {\n const buffer = Buffer.from(str, STRING_FORMAT)\n if (buffer.length <= MAX_OUTPUT_SIZE) {\n return str\n }\n const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`\n } catch (error) {\n console.error('Error truncating, likely not a string')\n return str\n }\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n captureImmediate?: boolean\n}\n\nfunction 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 return Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT)\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\nexport const sendEventToPosthog = async ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n captureImmediate = false,\n}: SendEventToPosthogParams): Promise<void> => {\n if (!client.capture) {\n return Promise.resolve()\n }\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.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 }\n\n const properties = {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n }\n\n const event = {\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n }\n\n if (captureImmediate) {\n // await capture promise to send single event in serverless environments\n await client.captureImmediate(event)\n } else {\n client.capture(event)\n }\n}\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type { LanguageModelV1, LanguageModelV1Middleware, LanguageModelV1Prompt, LanguageModelV1StreamPart } from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { CostOverride, sendEventToPosthog, truncate, MAX_OUTPUT_SIZE } from '../utils'\nimport { Buffer } from 'buffer'\n\ninterface ClientOptions {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\ninterface CreateInstrumentationMiddlewareOptions {\n posthogDistinctId: string\n posthogTraceId: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\ninterface PostHogInput {\n role: string\n type?: string\n content?:\n | string\n | {\n [key: string]: any\n }\n}\n\nconst mapVercelParams = (params: any): Record<string, any> => {\n return {\n temperature: params.temperature,\n max_tokens: params.maxTokens,\n top_p: params.topP,\n frequency_penalty: params.frequencyPenalty,\n presence_penalty: params.presencePenalty,\n stop: params.stopSequences,\n stream: params.stream,\n }\n}\n\nconst mapVercelPrompt = (prompt: LanguageModelV1Prompt): PostHogInput[] => {\n // normalize single inputs into an array of messages\n let promptsArray: any[]\n if (typeof prompt === 'string') {\n promptsArray = [{ role: 'user', content: prompt }]\n } else if (!Array.isArray(prompt)) {\n promptsArray = [prompt]\n } else {\n promptsArray = prompt\n }\n\n // Map and truncate individual content\n const inputs: PostHogInput[] = promptsArray.map((p) => {\n let content = {}\n if (Array.isArray(p.content)) {\n content = p.content.map((c: any) => {\n if (c.type === 'text') {\n return {\n type: 'text',\n content: truncate(c.text),\n }\n } else if (c.type === 'image') {\n return {\n type: 'image',\n content: {\n // if image is a url use it, or use \"none supported\"\n image: c.image instanceof URL ? c.image.toString() : 'raw images not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'file') {\n return {\n type: 'file',\n content: {\n file: c.data instanceof URL ? c.data.toString() : 'raw files not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'tool-call') {\n return {\n type: 'tool-call',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n args: c.args,\n },\n }\n } else if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n result: c.result,\n isError: c.isError,\n },\n }\n }\n return {\n content: '',\n }\n })\n } else {\n content = {\n type: 'text',\n text: truncate(p.content),\n }\n }\n return {\n role: p.role,\n content,\n }\n })\n try {\n // Trim the inputs array until its JSON size fits within MAX_OUTPUT_SIZE\n let serialized = JSON.stringify(inputs)\n let removedCount = 0\n // We need to keep track of the initial size of the inputs array because we're going to be mutating it\n const initialSize = inputs.length\n for (let i = 0; i < initialSize && Buffer.byteLength(serialized, 'utf8') > MAX_OUTPUT_SIZE; i++) {\n inputs.shift()\n removedCount++\n serialized = JSON.stringify(inputs)\n }\n if (removedCount > 0) {\n // Add one placeholder to indicate how many were removed\n inputs.unshift({\n role: 'posthog',\n content: `[${removedCount} message${removedCount === 1 ? '' : 's'} removed due to size limit]`,\n })\n }\n } catch (error) {\n console.error('Error stringifying inputs', error)\n return [{ role: 'posthog', content: 'An error occurred while processing your request. Please try again.' }]\n }\n return inputs\n}\n\nconst mapVercelOutput = (result: any): PostHogInput[] => {\n // normalize string results to object\n const normalizedResult = typeof result === 'string' ? { text: result } : result\n const output = {\n ...(normalizedResult.text ? { text: normalizedResult.text } : {}),\n ...(normalizedResult.object ? { object: normalizedResult.object } : {}),\n ...(normalizedResult.reasoning ? { reasoning: normalizedResult.reasoning } : {}),\n ...(normalizedResult.response ? { response: normalizedResult.response } : {}),\n ...(normalizedResult.finishReason ? { finishReason: normalizedResult.finishReason } : {}),\n ...(normalizedResult.usage ? { usage: normalizedResult.usage } : {}),\n ...(normalizedResult.warnings ? { warnings: normalizedResult.warnings } : {}),\n ...(normalizedResult.providerMetadata ? { toolCalls: normalizedResult.providerMetadata } : {}),\n ...(normalizedResult.files\n ? {\n files: normalizedResult.files.map((file: any) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n })),\n }\n : {}),\n }\n if (output.text && !output.object && !output.reasoning) {\n return [{ content: truncate(output.text as string), role: 'assistant' }]\n }\n // otherwise stringify and truncate\n try {\n const jsonOutput = JSON.stringify(output)\n return [{ content: truncate(jsonOutput), role: 'assistant' }]\n } catch (error) {\n console.error('Error stringifying output')\n return []\n }\n}\n\nconst extractProvider = (model: LanguageModelV1): string => {\n const provider = model.provider.toLowerCase()\n const providerName = provider.split('.')[0]\n return providerName\n}\n\nexport const createInstrumentationMiddleware = (\n phClient: PostHog,\n model: LanguageModelV1,\n options: CreateInstrumentationMiddlewareOptions\n): LanguageModelV1Middleware => {\n const middleware: LanguageModelV1Middleware = {\n wrapGenerate: async ({ doGenerate, params }) => {\n const startTime = Date.now()\n const mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n try {\n const result = await doGenerate()\n const latency = (Date.now() - startTime) / 1000\n const modelId =\n options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId)\n const provider = options.posthogProviderOverride ?? extractProvider(model)\n const baseURL = '' // cannot currently get baseURL from vercel\n const content = mapVercelOutput(result)\n // let tools = result.toolCalls\n const providerMetadata = result.providerMetadata\n const additionalTokenValues = {\n ...(providerMetadata?.openai?.reasoningTokens\n ? { reasoningTokens: providerMetadata.openai.reasoningTokens }\n : {}),\n ...(providerMetadata?.openai?.cachedPromptTokens\n ? { cacheReadInputTokens: providerMetadata.openai.cachedPromptTokens }\n : {}),\n ...(providerMetadata?.anthropic\n ? {\n cacheReadInputTokens: providerMetadata.anthropic.cacheReadInputTokens,\n cacheCreationInputTokens: providerMetadata.anthropic.cacheCreationInputTokens,\n }\n : {}),\n }\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [{ content, role: 'assistant' }],\n latency,\n baseURL,\n params: mergedParams as any,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage.promptTokens,\n outputTokens: result.usage.completionTokens,\n ...additionalTokenValues,\n },\n captureImmediate: options.posthogCaptureImmediate,\n })\n\n return result\n } catch (error: any) {\n const modelId = model.modelId\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: modelId,\n provider: model.provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: truncate(JSON.stringify(error)),\n captureImmediate: options.posthogCaptureImmediate,\n })\n throw error\n }\n },\n\n wrapStream: async ({ doStream, params }) => {\n const startTime = Date.now()\n let generatedText = ''\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n } = {}\n const mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n\n const modelId = options.posthogModelOverride ?? model.modelId\n const provider = options.posthogProviderOverride ?? extractProvider(model)\n const baseURL = '' // cannot currently get baseURL from vercel\n try {\n const { stream, ...rest } = await doStream()\n const transformStream = new TransformStream<LanguageModelV1StreamPart, LanguageModelV1StreamPart>({\n transform(chunk, controller) {\n if (chunk.type === 'text-delta') {\n generatedText += chunk.textDelta\n }\n if (chunk.type === 'finish') {\n usage = {\n inputTokens: chunk.usage?.promptTokens,\n outputTokens: chunk.usage?.completionTokens,\n }\n if (chunk.providerMetadata?.openai?.reasoningTokens) {\n usage.reasoningTokens = chunk.providerMetadata.openai.reasoningTokens\n }\n if (chunk.providerMetadata?.openai?.cachedPromptTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.openai.cachedPromptTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheReadInputTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.anthropic.cacheReadInputTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheCreationInputTokens) {\n usage.cacheCreationInputTokens = chunk.providerMetadata.anthropic.cacheCreationInputTokens\n }\n }\n controller.enqueue(chunk)\n },\n\n flush: async () => {\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [{ content: generatedText, role: 'assistant' }],\n latency,\n baseURL,\n params: mergedParams as any,\n httpStatus: 200,\n usage,\n captureImmediate: options.posthogCaptureImmediate,\n })\n },\n })\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n }\n } catch (error: any) {\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: truncate(JSON.stringify(error)),\n captureImmediate: options.posthogCaptureImmediate,\n })\n throw error\n }\n },\n }\n\n return middleware\n}\n\nexport const wrapVercelLanguageModel = (\n model: LanguageModelV1,\n phClient: PostHog,\n options: ClientOptions\n): LanguageModelV1 => {\n const traceId = options.posthogTraceId ?? uuidv4()\n const middleware = createInstrumentationMiddleware(phClient, model, {\n ...options,\n posthogTraceId: traceId,\n posthogDistinctId: options.posthogDistinctId ?? traceId,\n })\n\n const wrappedModel = wrapLanguageModel({\n model,\n middleware,\n })\n\n return wrappedModel\n}\n"],"names":["MAX_OUTPUT_SIZE","STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","withPrivacyMode","client","privacyMode","input","privacy_mode","truncate","str","buffer","Buffer","from","length","truncatedBuffer","slice","toString","error","console","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","output","latency","baseURL","httpStatus","usage","isError","tools","captureImmediate","capture","Promise","resolve","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","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","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","event","groups","posthogGroups","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","mapVercelPrompt","prompt","promptsArray","role","content","inputs","p","c","type","text","image","URL","mimeType","file","data","toolCallId","toolName","args","result","serialized","removedCount","initialSize","i","byteLength","shift","unshift","mapVercelOutput","normalizedResult","object","reasoning","response","finishReason","warnings","providerMetadata","toolCalls","files","name","size","jsonOutput","extractProvider","toLowerCase","providerName","split","createInstrumentationMiddleware","phClient","options","middleware","wrapGenerate","doGenerate","startTime","Date","now","mergedParams","modelId","openai","cachedPromptTokens","anthropic","posthogDistinctId","posthogTraceId","promptTokens","completionTokens","posthogCaptureImmediate","status","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","chunk","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","uuidv4","wrappedModel","wrapLanguageModel"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/utils.ts","../../src/vercel/middleware.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams) | 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 ] 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, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\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): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const formatResponseGemini = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n\n if (response.text) {\n output.push({\n role: 'assistant',\n content: response.text,\n })\n return output\n }\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 text = candidate.content.parts\n .filter((part: any) => part.text)\n .map((part: any) => part.text)\n .join('')\n if (text) {\n output.push({\n role: 'assistant',\n content: text,\n })\n }\n }\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\nexport const truncate = (str: string): string => {\n try {\n const buffer = Buffer.from(str, STRING_FORMAT)\n if (buffer.length <= MAX_OUTPUT_SIZE) {\n return str\n }\n const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`\n } catch (error) {\n console.error('Error truncating, likely not a string')\n return str\n }\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams | ResponseCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n captureImmediate?: boolean\n}\n\nfunction 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 return Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT)\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\nexport const sendEventToPosthog = async ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n captureImmediate = false,\n}: SendEventToPosthogParams): Promise<void> => {\n if (!client.capture) {\n return Promise.resolve()\n }\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.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 }\n\n const properties = {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n }\n\n const event = {\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n }\n\n if (captureImmediate) {\n // await capture promise to send single event in serverless environments\n await client.captureImmediate(event)\n } else {\n client.capture(event)\n }\n}\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type { LanguageModelV1, LanguageModelV1Middleware, LanguageModelV1Prompt, LanguageModelV1StreamPart } from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { CostOverride, sendEventToPosthog, truncate, MAX_OUTPUT_SIZE } from '../utils'\nimport { Buffer } from 'buffer'\n\ninterface ClientOptions {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\ninterface CreateInstrumentationMiddlewareOptions {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n posthogCaptureImmediate?: boolean\n}\n\ninterface PostHogInput {\n role: string\n type?: string\n content?:\n | string\n | {\n [key: string]: any\n }\n}\n\nconst mapVercelParams = (params: any): Record<string, any> => {\n return {\n temperature: params.temperature,\n max_tokens: params.maxTokens,\n top_p: params.topP,\n frequency_penalty: params.frequencyPenalty,\n presence_penalty: params.presencePenalty,\n stop: params.stopSequences,\n stream: params.stream,\n }\n}\n\nconst mapVercelPrompt = (prompt: LanguageModelV1Prompt): PostHogInput[] => {\n // normalize single inputs into an array of messages\n let promptsArray: any[]\n if (typeof prompt === 'string') {\n promptsArray = [{ role: 'user', content: prompt }]\n } else if (!Array.isArray(prompt)) {\n promptsArray = [prompt]\n } else {\n promptsArray = prompt\n }\n\n // Map and truncate individual content\n const inputs: PostHogInput[] = promptsArray.map((p) => {\n let content = {}\n if (Array.isArray(p.content)) {\n content = p.content.map((c: any) => {\n if (c.type === 'text') {\n return {\n type: 'text',\n content: truncate(c.text),\n }\n } else if (c.type === 'image') {\n return {\n type: 'image',\n content: {\n // if image is a url use it, or use \"none supported\"\n image: c.image instanceof URL ? c.image.toString() : 'raw images not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'file') {\n return {\n type: 'file',\n content: {\n file: c.data instanceof URL ? c.data.toString() : 'raw files not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'tool-call') {\n return {\n type: 'tool-call',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n args: c.args,\n },\n }\n } else if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n result: c.result,\n isError: c.isError,\n },\n }\n }\n return {\n content: '',\n }\n })\n } else {\n content = {\n type: 'text',\n text: truncate(p.content),\n }\n }\n return {\n role: p.role,\n content,\n }\n })\n try {\n // Trim the inputs array until its JSON size fits within MAX_OUTPUT_SIZE\n let serialized = JSON.stringify(inputs)\n let removedCount = 0\n // We need to keep track of the initial size of the inputs array because we're going to be mutating it\n const initialSize = inputs.length\n for (let i = 0; i < initialSize && Buffer.byteLength(serialized, 'utf8') > MAX_OUTPUT_SIZE; i++) {\n inputs.shift()\n removedCount++\n serialized = JSON.stringify(inputs)\n }\n if (removedCount > 0) {\n // Add one placeholder to indicate how many were removed\n inputs.unshift({\n role: 'posthog',\n content: `[${removedCount} message${removedCount === 1 ? '' : 's'} removed due to size limit]`,\n })\n }\n } catch (error) {\n console.error('Error stringifying inputs', error)\n return [{ role: 'posthog', content: 'An error occurred while processing your request. Please try again.' }]\n }\n return inputs\n}\n\nconst mapVercelOutput = (result: any): PostHogInput[] => {\n // normalize string results to object\n const normalizedResult = typeof result === 'string' ? { text: result } : result\n const output = {\n ...(normalizedResult.text ? { text: normalizedResult.text } : {}),\n ...(normalizedResult.object ? { object: normalizedResult.object } : {}),\n ...(normalizedResult.reasoning ? { reasoning: normalizedResult.reasoning } : {}),\n ...(normalizedResult.response ? { response: normalizedResult.response } : {}),\n ...(normalizedResult.finishReason ? { finishReason: normalizedResult.finishReason } : {}),\n ...(normalizedResult.usage ? { usage: normalizedResult.usage } : {}),\n ...(normalizedResult.warnings ? { warnings: normalizedResult.warnings } : {}),\n ...(normalizedResult.providerMetadata ? { toolCalls: normalizedResult.providerMetadata } : {}),\n ...(normalizedResult.files\n ? {\n files: normalizedResult.files.map((file: any) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n })),\n }\n : {}),\n }\n if (output.text && !output.object && !output.reasoning) {\n return [{ content: truncate(output.text as string), role: 'assistant' }]\n }\n // otherwise stringify and truncate\n try {\n const jsonOutput = JSON.stringify(output)\n return [{ content: truncate(jsonOutput), role: 'assistant' }]\n } catch (error) {\n console.error('Error stringifying output')\n return []\n }\n}\n\nconst extractProvider = (model: LanguageModelV1): string => {\n const provider = model.provider.toLowerCase()\n const providerName = provider.split('.')[0]\n return providerName\n}\n\nexport const createInstrumentationMiddleware = (\n phClient: PostHog,\n model: LanguageModelV1,\n options: CreateInstrumentationMiddlewareOptions\n): LanguageModelV1Middleware => {\n const middleware: LanguageModelV1Middleware = {\n wrapGenerate: async ({ doGenerate, params }) => {\n const startTime = Date.now()\n const mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n try {\n const result = await doGenerate()\n const latency = (Date.now() - startTime) / 1000\n const modelId =\n options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId)\n const provider = options.posthogProviderOverride ?? extractProvider(model)\n const baseURL = '' // cannot currently get baseURL from vercel\n const content = mapVercelOutput(result)\n // let tools = result.toolCalls\n const providerMetadata = result.providerMetadata\n const additionalTokenValues = {\n ...(providerMetadata?.openai?.reasoningTokens\n ? { reasoningTokens: providerMetadata.openai.reasoningTokens }\n : {}),\n ...(providerMetadata?.openai?.cachedPromptTokens\n ? { cacheReadInputTokens: providerMetadata.openai.cachedPromptTokens }\n : {}),\n ...(providerMetadata?.anthropic\n ? {\n cacheReadInputTokens: providerMetadata.anthropic.cacheReadInputTokens,\n cacheCreationInputTokens: providerMetadata.anthropic.cacheCreationInputTokens,\n }\n : {}),\n }\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId ?? uuidv4(),\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [{ content, role: 'assistant' }],\n latency,\n baseURL,\n params: mergedParams as any,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage.promptTokens,\n outputTokens: result.usage.completionTokens,\n ...additionalTokenValues,\n },\n captureImmediate: options.posthogCaptureImmediate,\n })\n\n return result\n } catch (error: any) {\n const modelId = model.modelId\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId ?? uuidv4(),\n model: modelId,\n provider: model.provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: truncate(JSON.stringify(error)),\n captureImmediate: options.posthogCaptureImmediate,\n })\n throw error\n }\n },\n\n wrapStream: async ({ doStream, params }) => {\n const startTime = Date.now()\n let generatedText = ''\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n } = {}\n const mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n\n const modelId = options.posthogModelOverride ?? model.modelId\n const provider = options.posthogProviderOverride ?? extractProvider(model)\n const baseURL = '' // cannot currently get baseURL from vercel\n try {\n const { stream, ...rest } = await doStream()\n const transformStream = new TransformStream<LanguageModelV1StreamPart, LanguageModelV1StreamPart>({\n transform(chunk, controller) {\n if (chunk.type === 'text-delta') {\n generatedText += chunk.textDelta\n }\n if (chunk.type === 'finish') {\n usage = {\n inputTokens: chunk.usage?.promptTokens,\n outputTokens: chunk.usage?.completionTokens,\n }\n if (chunk.providerMetadata?.openai?.reasoningTokens) {\n usage.reasoningTokens = chunk.providerMetadata.openai.reasoningTokens\n }\n if (chunk.providerMetadata?.openai?.cachedPromptTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.openai.cachedPromptTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheReadInputTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.anthropic.cacheReadInputTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheCreationInputTokens) {\n usage.cacheCreationInputTokens = chunk.providerMetadata.anthropic.cacheCreationInputTokens\n }\n }\n controller.enqueue(chunk)\n },\n\n flush: async () => {\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId ?? uuidv4(),\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [{ content: generatedText, role: 'assistant' }],\n latency,\n baseURL,\n params: mergedParams as any,\n httpStatus: 200,\n usage,\n captureImmediate: options.posthogCaptureImmediate,\n })\n },\n })\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n }\n } catch (error: any) {\n await sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId ?? uuidv4(),\n model: modelId,\n provider: provider,\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: truncate(JSON.stringify(error)),\n captureImmediate: options.posthogCaptureImmediate,\n })\n throw error\n }\n },\n }\n\n return middleware\n}\n\nexport const wrapVercelLanguageModel = (\n model: LanguageModelV1,\n phClient: PostHog,\n options: ClientOptions\n): LanguageModelV1 => {\n const traceId = options.posthogTraceId ?? uuidv4()\n const middleware = createInstrumentationMiddleware(phClient, model, {\n ...options,\n posthogTraceId: traceId,\n posthogDistinctId: options.posthogDistinctId,\n })\n\n const wrappedModel = wrapLanguageModel({\n model,\n middleware,\n })\n\n return wrappedModel\n}\n"],"names":["MAX_OUTPUT_SIZE","STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","withPrivacyMode","client","privacyMode","input","privacy_mode","truncate","str","buffer","Buffer","from","length","truncatedBuffer","slice","toString","error","console","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","output","latency","baseURL","httpStatus","usage","isError","tools","captureImmediate","capture","Promise","resolve","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","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","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","event","groups","posthogGroups","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","mapVercelPrompt","prompt","promptsArray","role","content","inputs","p","c","type","text","image","URL","mimeType","file","data","toolCallId","toolName","args","result","serialized","removedCount","initialSize","i","byteLength","shift","unshift","mapVercelOutput","normalizedResult","object","reasoning","response","finishReason","warnings","providerMetadata","toolCalls","files","name","size","jsonOutput","extractProvider","toLowerCase","providerName","split","createInstrumentationMiddleware","phClient","options","middleware","wrapGenerate","doGenerate","startTime","Date","now","mergedParams","modelId","openai","cachedPromptTokens","anthropic","posthogDistinctId","posthogTraceId","uuidv4","promptTokens","completionTokens","posthogCaptureImmediate","status","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","chunk","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","wrappedModel","wrapLanguageModel"],"mappings":"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"}
@@ -348,7 +348,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
348
348
  await sendEventToPosthog({
349
349
  client: phClient,
350
350
  distinctId: options.posthogDistinctId,
351
- traceId: options.posthogTraceId,
351
+ traceId: options.posthogTraceId ?? v4(),
352
352
  model: modelId,
353
353
  provider: provider,
354
354
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -373,7 +373,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
373
373
  await sendEventToPosthog({
374
374
  client: phClient,
375
375
  distinctId: options.posthogDistinctId,
376
- traceId: options.posthogTraceId,
376
+ traceId: options.posthogTraceId ?? v4(),
377
377
  model: modelId,
378
378
  provider: model.provider,
379
379
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -442,7 +442,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
442
442
  await sendEventToPosthog({
443
443
  client: phClient,
444
444
  distinctId: options.posthogDistinctId,
445
- traceId: options.posthogTraceId,
445
+ traceId: options.posthogTraceId ?? v4(),
446
446
  model: modelId,
447
447
  provider: provider,
448
448
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -467,7 +467,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
467
467
  await sendEventToPosthog({
468
468
  client: phClient,
469
469
  distinctId: options.posthogDistinctId,
470
- traceId: options.posthogTraceId,
470
+ traceId: options.posthogTraceId ?? v4(),
471
471
  model: modelId,
472
472
  provider: provider,
473
473
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
@@ -495,7 +495,7 @@ const wrapVercelLanguageModel = (model, phClient, options) => {
495
495
  const middleware = createInstrumentationMiddleware(phClient, model, {
496
496
  ...options,
497
497
  posthogTraceId: traceId,
498
- posthogDistinctId: options.posthogDistinctId ?? traceId
498
+ posthogDistinctId: options.posthogDistinctId
499
499
  });
500
500
  const wrappedModel = experimental_wrapLanguageModel({
501
501
  model,