@posthog/ai 4.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- # 4.2.0
1
+ # 4.2.1
2
2
 
3
3
  - Add fullDebug mode and limit full size of event input
4
4
 
@@ -144,7 +144,15 @@ const sendEventToPosthog = ({
144
144
  };
145
145
  if (fullDebug) {
146
146
  // @ts-ignore
147
- console.log('Sending event to PostHog', properties);
147
+ console.log('Sending event to PostHog', JSON.stringify(properties));
148
+ try {
149
+ // @ts-ignore
150
+ console.log('Size of properties (kb)', Math.round(buffer.Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 * 10000) / 10000);
151
+ // @ts-ignore
152
+ console.log('Size of properties (mb)', Math.round(buffer.Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 / 1024 * 10000) / 10000);
153
+ } catch (error) {
154
+ console.error('Error printing size of properties', error);
155
+ }
148
156
  }
149
157
  client.capture({
150
158
  distinctId: distinctId ?? traceId,
@@ -1 +1 @@
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 fullDebug?: 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 fullDebug?: 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 = ({\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 fullDebug = false,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\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 if (fullDebug) {\n // @ts-ignore\n console.log('Sending event to PostHog', properties)\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n })\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 ...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 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 })\n } catch (error: any) {\n // error handling\n 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 })\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 (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n }\n return result\n },\n (error: any) => {\n 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 })\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","fullDebug","capture","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","console","log","event","groups","posthogGroups","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","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
+ {"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 fullDebug?: 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 fullDebug?: 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 = ({\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 fullDebug = false,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\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 if (fullDebug) {\n // @ts-ignore\n console.log('Sending event to PostHog', JSON.stringify(properties))\n try {\n // @ts-ignore\n console.log(\n 'Size of properties (kb)',\n Math.round((Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024) * 10000) / 10000\n )\n // @ts-ignore\n console.log(\n 'Size of properties (mb)',\n Math.round((Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 / 1024) * 10000) / 10000\n )\n } catch (error) {\n console.error('Error printing size of properties', error)\n }\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n })\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 ...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 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 })\n } catch (error: any) {\n // error handling\n 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 })\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 (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n }\n return result\n },\n (error: any) => {\n 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 })\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","fullDebug","capture","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","console","log","Math","round","byteLength","event","groups","posthogGroups","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","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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"}
@@ -136,7 +136,15 @@ const sendEventToPosthog = ({
136
136
  };
137
137
  if (fullDebug) {
138
138
  // @ts-ignore
139
- console.log('Sending event to PostHog', properties);
139
+ console.log('Sending event to PostHog', JSON.stringify(properties));
140
+ try {
141
+ // @ts-ignore
142
+ console.log('Size of properties (kb)', Math.round(Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 * 10000) / 10000);
143
+ // @ts-ignore
144
+ console.log('Size of properties (mb)', Math.round(Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 / 1024 * 10000) / 10000);
145
+ } catch (error) {
146
+ console.error('Error printing size of properties', error);
147
+ }
140
148
  }
141
149
  client.capture({
142
150
  distinctId: distinctId ?? traceId,
@@ -1 +1 @@
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 fullDebug?: 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 fullDebug?: 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 = ({\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 fullDebug = false,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\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 if (fullDebug) {\n // @ts-ignore\n console.log('Sending event to PostHog', properties)\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n })\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 ...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 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 })\n } catch (error: any) {\n // error handling\n 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 })\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 (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n }\n return result\n },\n (error: any) => {\n 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 })\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","fullDebug","capture","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","console","log","event","groups","posthogGroups","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","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
+ {"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 fullDebug?: 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 fullDebug?: 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 = ({\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 fullDebug = false,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\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 if (fullDebug) {\n // @ts-ignore\n console.log('Sending event to PostHog', JSON.stringify(properties))\n try {\n // @ts-ignore\n console.log(\n 'Size of properties (kb)',\n Math.round((Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024) * 10000) / 10000\n )\n // @ts-ignore\n console.log(\n 'Size of properties (mb)',\n Math.round((Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 / 1024) * 10000) / 10000\n )\n } catch (error) {\n console.error('Error printing size of properties', error)\n }\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n })\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 ...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 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 })\n } catch (error: any) {\n // error handling\n 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 })\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 (result) => {\n if ('content' in result) {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n }\n return result\n },\n (error: any) => {\n 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 })\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","fullDebug","capture","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","console","log","Math","round","byteLength","event","groups","posthogGroups","PostHogAnthropic","AnthropicOriginal","constructor","config","posthog","anthropicConfig","phClient","WrappedMessages","Messages","parentClient","create","body","options","posthogDistinctId","posthogTraceId","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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"}
package/lib/index.cjs.js CHANGED
@@ -193,7 +193,15 @@ const sendEventToPosthog = ({
193
193
  };
194
194
  if (fullDebug) {
195
195
  // @ts-ignore
196
- console.log('Sending event to PostHog', properties);
196
+ console.log('Sending event to PostHog', JSON.stringify(properties));
197
+ try {
198
+ // @ts-ignore
199
+ console.log('Size of properties (kb)', Math.round(buffer.Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 * 10000) / 10000);
200
+ // @ts-ignore
201
+ console.log('Size of properties (mb)', Math.round(buffer.Buffer.byteLength(JSON.stringify(properties), STRING_FORMAT) / 1024 / 1024 * 10000) / 10000);
202
+ } catch (error) {
203
+ console.error('Error printing size of properties', error);
204
+ }
197
205
  }
198
206
  client.capture({
199
207
  distinctId: distinctId ?? traceId,
@@ -614,18 +622,21 @@ const mapVercelPrompt = prompt => {
614
622
  try {
615
623
  // Trim the inputs array until its JSON size fits within MAX_OUTPUT_SIZE
616
624
  let serialized = JSON.stringify(inputs);
625
+ let removedCount = 0;
617
626
  while (buffer.Buffer.byteLength(serialized, 'utf8') > MAX_OUTPUT_SIZE && inputs.length > 0) {
618
- // Remove oldest message
619
627
  inputs.shift();
620
- // add blank message to beginning of array
628
+ removedCount++;
629
+ serialized = JSON.stringify(inputs);
630
+ }
631
+ if (removedCount > 0) {
632
+ // Add one placeholder to indicate how many were removed
621
633
  inputs.unshift({
622
634
  role: 'assistant',
623
- content: '[removed message due to size limit]'
635
+ content: `[${removedCount} message${removedCount === 1 ? '' : 's'} removed due to size limit]`
624
636
  });
625
- serialized = JSON.stringify(inputs);
626
637
  }
627
638
  } catch (error) {
628
- console.error('Error stringifying inputs');
639
+ console.error('Error stringifying inputs', error);
629
640
  return [{
630
641
  role: 'posthog',
631
642
  content: 'An error occurred while processing your request. Please try again.'