{"version":3,"file":"index.cjs","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":"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"}