@posthog/ai 4.3.0 → 4.3.2

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/anthropic/{index.cjs.js → index.cjs} +4 -2
  3. package/lib/anthropic/index.cjs.map +1 -0
  4. package/lib/anthropic/index.d.ts +4163 -1
  5. package/lib/anthropic/{index.esm.js → index.mjs} +4 -2
  6. package/lib/anthropic/index.mjs.map +1 -0
  7. package/lib/{index.cjs.js → index.cjs} +4 -2
  8. package/lib/index.cjs.map +1 -0
  9. package/lib/index.d.ts +4325 -163
  10. package/lib/{index.esm.js → index.mjs} +4 -2
  11. package/lib/index.mjs.map +1 -0
  12. package/lib/langchain/{index.cjs.js → index.cjs} +1 -1
  13. package/lib/langchain/index.cjs.map +1 -0
  14. package/lib/langchain/index.d.ts +4163 -1
  15. package/lib/langchain/{index.esm.js → index.mjs} +1 -1
  16. package/lib/langchain/index.mjs.map +1 -0
  17. package/lib/openai/{index.cjs.js → index.cjs} +4 -2
  18. package/lib/openai/index.cjs.map +1 -0
  19. package/lib/openai/index.d.ts +4163 -1
  20. package/lib/openai/{index.esm.js → index.mjs} +4 -2
  21. package/lib/openai/index.mjs.map +1 -0
  22. package/lib/vercel/{index.cjs.js → index.cjs} +4 -2
  23. package/lib/vercel/index.cjs.map +1 -0
  24. package/lib/vercel/index.d.ts +4163 -1
  25. package/lib/vercel/{index.esm.js → index.mjs} +4 -2
  26. package/lib/vercel/index.mjs.map +1 -0
  27. package/package.json +14 -13
  28. package/src/utils.ts +3 -1
  29. package/tests/openai.test.ts +50 -2
  30. package/lib/anthropic/index.cjs.js.map +0 -1
  31. package/lib/anthropic/index.esm.js.map +0 -1
  32. package/lib/index.cjs.js.map +0 -1
  33. package/lib/index.esm.js.map +0 -1
  34. package/lib/langchain/index.cjs.js.map +0 -1
  35. package/lib/langchain/index.esm.js.map +0 -1
  36. package/lib/openai/index.cjs.js.map +0 -1
  37. package/lib/openai/index.esm.js.map +0 -1
  38. package/lib/posthog-ai/index.d.ts +0 -1
  39. package/lib/posthog-ai/src/anthropic/index.d.ts +0 -29
  40. package/lib/posthog-ai/src/index.d.ts +0 -10
  41. package/lib/posthog-ai/src/langchain/callbacks.d.ts +0 -65
  42. package/lib/posthog-ai/src/langchain/index.d.ts +0 -1
  43. package/lib/posthog-ai/src/openai/azure.d.ts +0 -32
  44. package/lib/posthog-ai/src/openai/index.d.ts +0 -33
  45. package/lib/posthog-ai/src/utils.d.ts +0 -66
  46. package/lib/posthog-ai/src/vercel/index.d.ts +0 -1
  47. package/lib/posthog-ai/src/vercel/middleware.d.ts +0 -28
  48. package/lib/posthog-ai/tests/openai.test.d.ts +0 -1
  49. package/lib/vercel/index.cjs.js.map +0 -1
  50. package/lib/vercel/index.esm.js.map +0 -1
@@ -66,7 +66,9 @@ const sendEventToPosthog = async ({
66
66
  tools,
67
67
  captureImmediate = false
68
68
  }) => {
69
- if (!client.capture) return Promise.resolve();
69
+ if (!client.capture) {
70
+ return Promise.resolve();
71
+ }
70
72
  // sanitize input and output for UTF-8 validity
71
73
  const safeInput = sanitizeValues(input);
72
74
  const safeOutput = sanitizeValues(output);
@@ -503,4 +505,4 @@ const wrapVercelLanguageModel = (model, phClient, options) => {
503
505
  };
504
506
 
505
507
  export { wrapVercelLanguageModel as withTracing };
506
- //# sourceMappingURL=index.esm.js.map
508
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","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\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) & 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 }\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 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) & 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 let 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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"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "@posthog/ai",
3
- "version": "4.3.0",
3
+ "version": "4.3.2",
4
4
  "description": "PostHog Node.js AI integrations",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/PostHog/posthog-js-lite.git",
8
8
  "directory": "posthog-ai"
9
9
  },
10
- "main": "lib/index.cjs.js",
11
- "module": "lib/index.esm.js",
10
+ "main": "lib/index.cjs",
11
+ "module": "lib/index.mjs",
12
12
  "types": "lib/index.d.ts",
13
13
  "license": "MIT",
14
14
  "devDependencies": {
15
+ "@types/jest": "^29.5.14",
15
16
  "@types/node": "^18.0.0",
16
17
  "node-fetch": "^3.3.2",
17
18
  "typescript": "^4.7.4"
@@ -39,28 +40,28 @@
39
40
  },
40
41
  "exports": {
41
42
  ".": {
42
- "require": "./lib/index.cjs.js",
43
- "import": "./lib/index.esm.js",
43
+ "require": "./lib/index.cjs",
44
+ "import": "./lib/index.mjs",
44
45
  "types": "./lib/index.d.ts"
45
46
  },
46
47
  "./anthropic": {
47
- "require": "./lib/anthropic/index.cjs.js",
48
- "import": "./lib/anthropic/index.esm.js",
48
+ "require": "./lib/anthropic/index.cjs",
49
+ "import": "./lib/anthropic/index.mjs",
49
50
  "types": "./lib/anthropic/index.d.ts"
50
51
  },
51
52
  "./openai": {
52
- "require": "./lib/openai/index.cjs.js",
53
- "import": "./lib/openai/index.esm.js",
53
+ "require": "./lib/openai/index.cjs",
54
+ "import": "./lib/openai/index.mjs",
54
55
  "types": "./lib/openai/index.d.ts"
55
56
  },
56
57
  "./vercel": {
57
- "require": "./lib/vercel/index.cjs.js",
58
- "import": "./lib/vercel/index.esm.js",
58
+ "require": "./lib/vercel/index.cjs",
59
+ "import": "./lib/vercel/index.mjs",
59
60
  "types": "./lib/vercel/index.d.ts"
60
61
  },
61
62
  "./langchain": {
62
- "require": "./lib/langchain/index.cjs.js",
63
- "import": "./lib/langchain/index.esm.js",
63
+ "require": "./lib/langchain/index.cjs",
64
+ "import": "./lib/langchain/index.mjs",
64
65
  "types": "./lib/langchain/index.d.ts"
65
66
  }
66
67
  },
package/src/utils.ts CHANGED
@@ -185,7 +185,9 @@ export const sendEventToPosthog = async ({
185
185
  tools,
186
186
  captureImmediate = false,
187
187
  }: SendEventToPosthogParams): Promise<void> => {
188
- if (!client.capture) return Promise.resolve()
188
+ if (!client.capture) {
189
+ return Promise.resolve()
190
+ }
189
191
  // sanitize input and output for UTF-8 validity
190
192
  const safeInput = sanitizeValues(input)
191
193
  const safeOutput = sanitizeValues(output)
@@ -1,5 +1,9 @@
1
1
  import { PostHog } from 'posthog-node'
2
2
  import PostHogOpenAI from '../src/openai'
3
+ import openaiModule from 'openai'
4
+
5
+ let mockOpenAiChatResponse: any = {}
6
+ let mockOpenAiEmbeddingResponse: any = {}
3
7
 
4
8
  jest.mock('posthog-node', () => {
5
9
  return {
@@ -13,8 +17,49 @@ jest.mock('posthog-node', () => {
13
17
  }
14
18
  })
15
19
 
16
- let mockOpenAiChatResponse: any = {}
17
- let mockOpenAiEmbeddingResponse: any = {}
20
+ jest.mock('openai', () => {
21
+ // Mock Completions class – `create` is declared on the prototype so that
22
+ // subclasses can safely `super.create(...)` without it being shadowed by an
23
+ // instance field (which would overwrite the subclass implementation).
24
+ class MockCompletions {
25
+ constructor() {}
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ create(..._args: any[]): any {
28
+ /* will be stubbed in beforeEach */
29
+ return undefined
30
+ }
31
+ }
32
+
33
+ // Mock Chat class
34
+ class MockChat {
35
+ constructor() {}
36
+ static Completions = MockCompletions
37
+ }
38
+
39
+ // Mock OpenAI class
40
+ class MockOpenAI {
41
+ chat: any
42
+ embeddings: any
43
+ constructor() {
44
+ this.chat = {
45
+ completions: {
46
+ create: jest.fn(),
47
+ },
48
+ }
49
+ this.embeddings = {
50
+ create: jest.fn(),
51
+ }
52
+ }
53
+ static Chat = MockChat
54
+ }
55
+
56
+ return {
57
+ __esModule: true,
58
+ default: MockOpenAI,
59
+ OpenAI: MockOpenAI,
60
+ Chat: MockChat,
61
+ }
62
+ })
18
63
 
19
64
  describe('PostHogOpenAI - Jest test suite', () => {
20
65
  let mockPostHogClient: PostHog
@@ -80,6 +125,9 @@ describe('PostHogOpenAI - Jest test suite', () => {
80
125
  total_tokens: 10,
81
126
  },
82
127
  }
128
+
129
+ const ChatMock: any = openaiModule.Chat
130
+ ;(ChatMock.Completions as any).prototype.create = jest.fn().mockResolvedValue(mockOpenAiChatResponse)
83
131
  })
84
132
 
85
133
  // Wrap each test with conditional skip
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/utils.ts","../../src/anthropic/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\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) & 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 }\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 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) & 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) return Promise.resolve()\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 AnthropicOriginal from '@anthropic-ai/sdk'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { formatResponseAnthropic, mergeSystemPrompt, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype MessageCreateParamsNonStreaming = AnthropicOriginal.Messages.MessageCreateParamsNonStreaming\ntype MessageCreateParamsStreaming = AnthropicOriginal.Messages.MessageCreateParamsStreaming\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype Message = AnthropicOriginal.Messages.Message\ntype RawMessageStreamEvent = AnthropicOriginal.Messages.RawMessageStreamEvent\ntype MessageCreateParamsBase = AnthropicOriginal.Messages.MessageCreateParams\n\nimport type { APIPromise, RequestOptions } from '@anthropic-ai/sdk/core'\nimport type { Stream } from '@anthropic-ai/sdk/streaming'\n\ninterface MonitoringAnthropicConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogAnthropic extends AnthropicOriginal {\n private readonly phClient: PostHog\n public messages: WrappedMessages\n\n constructor(config: MonitoringAnthropicConfig) {\n const { posthog, ...anthropicConfig } = config\n super(anthropicConfig)\n this.phClient = posthog\n this.messages = new WrappedMessages(this, this.phClient)\n }\n}\n\nexport class WrappedMessages extends AnthropicOriginal.Messages {\n private readonly phClient: PostHog\n\n constructor(parentClient: PostHogAnthropic, phClient: PostHog) {\n super(parentClient)\n this.phClient = phClient\n }\n\n public create(body: MessageCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Message>\n public create(\n body: MessageCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<RawMessageStreamEvent>>\n public create(\n body: MessageCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<RawMessageStreamEvent> | Message>\n public create(\n body: MessageCreateParams & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Message> | APIPromise<Stream<RawMessageStreamEvent>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...anthropicParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(anthropicParams, options)\n\n if (anthropicParams.stream) {\n return parentPromise.then((value) => {\n let accumulatedContent = ''\n const usage: {\n inputTokens: number\n outputTokens: number\n cacheCreationInputTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n cacheCreationInputTokens: 0,\n cacheReadInputTokens: 0,\n }\n if ('tee' in value) {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n try {\n for await (const chunk of stream1) {\n if ('delta' in chunk) {\n if ('text' in chunk.delta) {\n const delta = chunk?.delta?.text ?? ''\n accumulatedContent += delta\n }\n }\n if (chunk.type == 'message_start') {\n usage.inputTokens = chunk.message.usage.input_tokens ?? 0\n usage.cacheCreationInputTokens = chunk.message.usage.cache_creation_input_tokens ?? 0\n usage.cacheReadInputTokens = chunk.message.usage.cache_read_input_tokens ?? 0\n }\n if ('usage' in chunk) {\n usage.outputTokens = chunk.usage.output_tokens ?? 0\n }\n }\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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 // error handling\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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 }\n })()\n\n // Return the other stream to the user\n return stream2\n }\n return value\n }) as APIPromise<Stream<RawMessageStreamEvent>>\n } else {\n const wrappedPromise = parentPromise.then(\n async (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\n output: formatResponseAnthropic(result),\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 cacheCreationInputTokens: result.usage.cache_creation_input_tokens ?? 0,\n cacheReadInputTokens: result.usage.cache_read_input_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: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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<Message>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogAnthropic\n\nexport { PostHogAnthropic as Anthropic }\n"],"names":["STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","formatResponseAnthropic","response","output","choice","content","text","push","role","mergeSystemPrompt","provider","messages","system","systemMessage","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","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","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","posthogCaptureImmediate","anthropicParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","accumulatedContent","stream1","stream2","tee","chunk","delta","type","message","input_tokens","cache_creation_input_tokens","cache_read_input_tokens","output_tokens","status","wrappedPromise","result"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/utils.ts","../../src/anthropic/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\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) & 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 }\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 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) & 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) return Promise.resolve()\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 AnthropicOriginal from '@anthropic-ai/sdk'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { formatResponseAnthropic, mergeSystemPrompt, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype MessageCreateParamsNonStreaming = AnthropicOriginal.Messages.MessageCreateParamsNonStreaming\ntype MessageCreateParamsStreaming = AnthropicOriginal.Messages.MessageCreateParamsStreaming\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype Message = AnthropicOriginal.Messages.Message\ntype RawMessageStreamEvent = AnthropicOriginal.Messages.RawMessageStreamEvent\ntype MessageCreateParamsBase = AnthropicOriginal.Messages.MessageCreateParams\n\nimport type { APIPromise, RequestOptions } from '@anthropic-ai/sdk/core'\nimport type { Stream } from '@anthropic-ai/sdk/streaming'\n\ninterface MonitoringAnthropicConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogAnthropic extends AnthropicOriginal {\n private readonly phClient: PostHog\n public messages: WrappedMessages\n\n constructor(config: MonitoringAnthropicConfig) {\n const { posthog, ...anthropicConfig } = config\n super(anthropicConfig)\n this.phClient = posthog\n this.messages = new WrappedMessages(this, this.phClient)\n }\n}\n\nexport class WrappedMessages extends AnthropicOriginal.Messages {\n private readonly phClient: PostHog\n\n constructor(parentClient: PostHogAnthropic, phClient: PostHog) {\n super(parentClient)\n this.phClient = phClient\n }\n\n public create(body: MessageCreateParamsNonStreaming, options?: RequestOptions): APIPromise<Message>\n public create(\n body: MessageCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<RawMessageStreamEvent>>\n public create(\n body: MessageCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<RawMessageStreamEvent> | Message>\n public create(\n body: MessageCreateParams & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Message> | APIPromise<Stream<RawMessageStreamEvent>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n posthogCaptureImmediate,\n ...anthropicParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(anthropicParams, options)\n\n if (anthropicParams.stream) {\n return parentPromise.then((value) => {\n let accumulatedContent = ''\n const usage: {\n inputTokens: number\n outputTokens: number\n cacheCreationInputTokens?: number\n cacheReadInputTokens?: number\n } = {\n inputTokens: 0,\n outputTokens: 0,\n cacheCreationInputTokens: 0,\n cacheReadInputTokens: 0,\n }\n if ('tee' in value) {\n const [stream1, stream2] = value.tee()\n ;(async () => {\n try {\n for await (const chunk of stream1) {\n if ('delta' in chunk) {\n if ('text' in chunk.delta) {\n const delta = chunk?.delta?.text ?? ''\n accumulatedContent += delta\n }\n }\n if (chunk.type == 'message_start') {\n usage.inputTokens = chunk.message.usage.input_tokens ?? 0\n usage.cacheCreationInputTokens = chunk.message.usage.cache_creation_input_tokens ?? 0\n usage.cacheReadInputTokens = chunk.message.usage.cache_read_input_tokens ?? 0\n }\n if ('usage' in chunk) {\n usage.outputTokens = chunk.usage.output_tokens ?? 0\n }\n }\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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 // error handling\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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 }\n })()\n\n // Return the other stream to the user\n return stream2\n }\n return value\n }) as APIPromise<Stream<RawMessageStreamEvent>>\n } else {\n const wrappedPromise = parentPromise.then(\n async (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n await sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\n output: formatResponseAnthropic(result),\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 cacheCreationInputTokens: result.usage.cache_creation_input_tokens ?? 0,\n cacheReadInputTokens: result.usage.cache_read_input_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: anthropicParams.model,\n provider: 'anthropic',\n input: mergeSystemPrompt(anthropicParams, 'anthropic'),\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<Message>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogAnthropic\n\nexport { PostHogAnthropic as Anthropic }\n"],"names":["STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","formatResponseAnthropic","response","output","choice","content","text","push","role","mergeSystemPrompt","provider","messages","system","systemMessage","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","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","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","posthogCaptureImmediate","anthropicParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","accumulatedContent","stream1","stream2","tee","chunk","delta","type","message","input_tokens","cache_creation_input_tokens","cache_read_input_tokens","output_tokens","status","wrappedPromise","result"],"mappings":"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"}