@posthog/ai 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -3,6 +3,9 @@ import { PostHog } from 'posthog-node';
3
3
  import { RequestOptions, APIPromise } from 'openai/core';
4
4
  import { Stream } from 'openai/streaming';
5
5
  import { LanguageModelV1 } from 'ai';
6
+ import AnthropicOriginal from '@anthropic-ai/sdk';
7
+ import { RequestOptions as RequestOptions$1, APIPromise as APIPromise$1 } from '@anthropic-ai/sdk/core';
8
+ import { Stream as Stream$1 } from '@anthropic-ai/sdk/streaming';
6
9
 
7
10
  interface MonitoringParams {
8
11
  posthogDistinctId?: string;
@@ -79,4 +82,28 @@ interface ClientOptions {
79
82
  }
80
83
  declare const wrapVercelLanguageModel: (model: LanguageModelV1, phClient: PostHog, options: ClientOptions) => LanguageModelV1;
81
84
 
82
- export { PostHogAzureOpenAI as AzureOpenAI, PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };
85
+ type MessageCreateParamsNonStreaming = AnthropicOriginal.Messages.MessageCreateParamsNonStreaming;
86
+ type MessageCreateParamsStreaming = AnthropicOriginal.Messages.MessageCreateParamsStreaming;
87
+ type Message = AnthropicOriginal.Messages.Message;
88
+ type RawMessageStreamEvent = AnthropicOriginal.Messages.RawMessageStreamEvent;
89
+ type MessageCreateParamsBase = AnthropicOriginal.Messages.MessageCreateParams;
90
+
91
+ interface MonitoringAnthropicConfig {
92
+ apiKey: string;
93
+ posthog: PostHog;
94
+ baseURL?: string;
95
+ }
96
+ declare class PostHogAnthropic extends AnthropicOriginal {
97
+ private readonly phClient;
98
+ messages: WrappedMessages;
99
+ constructor(config: MonitoringAnthropicConfig);
100
+ }
101
+ declare class WrappedMessages extends AnthropicOriginal.Messages {
102
+ private readonly phClient;
103
+ constructor(parentClient: PostHogAnthropic, phClient: PostHog);
104
+ create(body: MessageCreateParamsNonStreaming, options?: RequestOptions$1): APIPromise$1<Message>;
105
+ create(body: MessageCreateParamsStreaming & MonitoringParams, options?: RequestOptions$1): APIPromise$1<Stream$1<RawMessageStreamEvent>>;
106
+ create(body: MessageCreateParamsBase & MonitoringParams, options?: RequestOptions$1): APIPromise$1<Stream$1<RawMessageStreamEvent> | Message>;
107
+ }
108
+
109
+ export { PostHogAnthropic as Anthropic, PostHogAzureOpenAI as AzureOpenAI, PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };
package/lib/index.esm.js CHANGED
@@ -2,6 +2,7 @@ import OpenAIOrignal, { AzureOpenAI } from 'openai';
2
2
  import { v4 } from 'uuid';
3
3
  import { PassThrough } from 'stream';
4
4
  import { experimental_wrapLanguageModel } from 'ai';
5
+ import AnthropicOriginal from '@anthropic-ai/sdk';
5
6
 
6
7
  const getModelParams = params => {
7
8
  const modelParams = {};
@@ -13,6 +14,31 @@ const getModelParams = params => {
13
14
  }
14
15
  return modelParams;
15
16
  };
17
+ const formatResponseAnthropic = response => {
18
+ // Example approach if "response.content" holds array of text segments, etc.
19
+ const output = [];
20
+ for (const choice of response.content ?? []) {
21
+ if (choice?.text) {
22
+ output.push({
23
+ role: 'assistant',
24
+ content: choice.text
25
+ });
26
+ }
27
+ }
28
+ return output;
29
+ };
30
+ const formatResponseOpenAI = response => {
31
+ const output = [];
32
+ for (const choice of response.choices ?? []) {
33
+ if (choice.message?.content) {
34
+ output.push({
35
+ role: choice.message.role,
36
+ content: choice.message.content
37
+ });
38
+ }
39
+ }
40
+ return output;
41
+ };
16
42
  const mergeSystemPrompt = (params, provider) => {
17
43
  if (provider == 'anthropic') {
18
44
  const messages = params.messages || [];
@@ -108,6 +134,7 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
108
134
  posthogDistinctId,
109
135
  posthogTraceId,
110
136
  posthogProperties,
137
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
111
138
  posthogPrivacyMode = false,
112
139
  posthogGroups,
113
140
  ...openAIParams
@@ -147,7 +174,7 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
147
174
  traceId,
148
175
  model: openAIParams.model,
149
176
  provider: 'openai',
150
- input: mergeSystemPrompt(openAIParams, 'openai'),
177
+ input: openAIParams.messages,
151
178
  output: [{
152
179
  content: accumulatedContent,
153
180
  role: 'assistant'
@@ -167,7 +194,7 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
167
194
  traceId,
168
195
  model: openAIParams.model,
169
196
  provider: 'openai',
170
- input: mergeSystemPrompt(openAIParams, 'openai'),
197
+ input: openAIParams.messages,
171
198
  output: [],
172
199
  latency: 0,
173
200
  baseURL: this.baseURL ?? '',
@@ -196,11 +223,8 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
196
223
  traceId,
197
224
  model: openAIParams.model,
198
225
  provider: 'openai',
199
- input: mergeSystemPrompt(openAIParams, 'openai'),
200
- output: [{
201
- content: result.choices[0].message.content,
202
- role: 'assistant'
203
- }],
226
+ input: openAIParams.messages,
227
+ output: formatResponseOpenAI(result),
204
228
  latency,
205
229
  baseURL: this.baseURL ?? '',
206
230
  params: body,
@@ -219,7 +243,7 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
219
243
  traceId,
220
244
  model: openAIParams.model,
221
245
  provider: 'openai',
222
- input: mergeSystemPrompt(openAIParams, 'openai'),
246
+ input: openAIParams.messages,
223
247
  output: [],
224
248
  latency: 0,
225
249
  baseURL: this.baseURL ?? '',
@@ -267,6 +291,7 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
267
291
  posthogDistinctId,
268
292
  posthogTraceId,
269
293
  posthogProperties,
294
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
270
295
  posthogPrivacyMode = false,
271
296
  posthogGroups,
272
297
  ...openAIParams
@@ -310,7 +335,7 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
310
335
  traceId,
311
336
  model,
312
337
  provider: 'azure',
313
- input: mergeSystemPrompt(openAIParams, 'azure'),
338
+ input: openAIParams.messages,
314
339
  output: [{
315
340
  content: accumulatedContent,
316
341
  role: 'assistant'
@@ -330,7 +355,7 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
330
355
  traceId,
331
356
  model,
332
357
  provider: 'azure',
333
- input: mergeSystemPrompt(openAIParams, 'azure'),
358
+ input: openAIParams.messages,
334
359
  output: JSON.stringify(error),
335
360
  latency: 0,
336
361
  baseURL: this.baseURL ?? '',
@@ -362,12 +387,9 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
362
387
  distinctId: posthogDistinctId ?? traceId,
363
388
  traceId,
364
389
  model,
365
- provider: '1234',
366
- input: mergeSystemPrompt(openAIParams, 'azure'),
367
- output: [{
368
- content: result.choices[0].message.content,
369
- role: 'assistant'
370
- }],
390
+ provider: 'azure',
391
+ input: openAIParams.messages,
392
+ output: formatResponseOpenAI(result),
371
393
  latency,
372
394
  baseURL: this.baseURL ?? '',
373
395
  params: body,
@@ -386,7 +408,7 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
386
408
  traceId,
387
409
  model: openAIParams.model,
388
410
  provider: 'azure',
389
- input: mergeSystemPrompt(openAIParams, 'azure'),
411
+ input: openAIParams.messages,
390
412
  output: [],
391
413
  latency: 0,
392
414
  baseURL: this.baseURL ?? '',
@@ -436,6 +458,12 @@ const mapVercelPrompt = prompt => {
436
458
  };
437
459
  });
438
460
  };
461
+ const extractProvider = model => {
462
+ // vercel provider is in the format of provider.endpoint
463
+ const provider = model.provider.toLowerCase();
464
+ const providerName = provider.split('.')[0];
465
+ return providerName;
466
+ };
439
467
  const createInstrumentationMiddleware = (phClient, model, options) => {
440
468
  const middleware = {
441
469
  wrapGenerate: async ({
@@ -451,7 +479,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
451
479
  const result = await doGenerate();
452
480
  const latency = (Date.now() - startTime) / 1000;
453
481
  const modelId = options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId);
454
- const provider = options.posthogProviderOverride ?? model.provider;
482
+ const provider = options.posthogProviderOverride ?? extractProvider(model);
483
+ const baseURL = ''; // cannot currently get baseURL from vercel
455
484
  sendEventToPosthog({
456
485
  client: phClient,
457
486
  distinctId: options.posthogDistinctId,
@@ -464,7 +493,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
464
493
  role: 'assistant'
465
494
  }],
466
495
  latency,
467
- baseURL: '',
496
+ baseURL,
468
497
  params: mergedParams,
469
498
  httpStatus: 200,
470
499
  usage: {
@@ -509,7 +538,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
509
538
  ...mapVercelParams(params)
510
539
  };
511
540
  const modelId = options.posthogModelOverride ?? model.modelId;
512
- const provider = options.posthogProviderOverride ?? model.provider;
541
+ const provider = options.posthogProviderOverride ?? extractProvider(model);
542
+ const baseURL = ''; // cannot currently get baseURL from vercel
513
543
  try {
514
544
  const {
515
545
  stream,
@@ -542,7 +572,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
542
572
  role: 'assistant'
543
573
  }],
544
574
  latency,
545
- baseURL: '',
575
+ baseURL,
546
576
  params: mergedParams,
547
577
  httpStatus: 200,
548
578
  usage
@@ -593,5 +623,159 @@ const wrapVercelLanguageModel = (model, phClient, options) => {
593
623
  return wrappedModel;
594
624
  };
595
625
 
596
- export { PostHogAzureOpenAI as AzureOpenAI, PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };
626
+ class PostHogAnthropic extends AnthropicOriginal {
627
+ constructor(config) {
628
+ const {
629
+ posthog,
630
+ ...anthropicConfig
631
+ } = config;
632
+ super(anthropicConfig);
633
+ this.phClient = posthog;
634
+ this.messages = new WrappedMessages(this, this.phClient);
635
+ }
636
+ }
637
+ class WrappedMessages extends AnthropicOriginal.Messages {
638
+ constructor(parentClient, phClient) {
639
+ super(parentClient);
640
+ this.phClient = phClient;
641
+ }
642
+ create(body, options) {
643
+ const {
644
+ posthogDistinctId,
645
+ posthogTraceId,
646
+ posthogProperties,
647
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
648
+ posthogPrivacyMode = false,
649
+ posthogGroups,
650
+ ...anthropicParams
651
+ } = body;
652
+ const traceId = posthogTraceId ?? v4();
653
+ const startTime = Date.now();
654
+ const parentPromise = super.create(anthropicParams, options);
655
+ if (anthropicParams.stream) {
656
+ return parentPromise.then(value => {
657
+ const passThroughStream = new PassThrough({
658
+ objectMode: true
659
+ });
660
+ let accumulatedContent = '';
661
+ let usage = {
662
+ inputTokens: 0,
663
+ outputTokens: 0
664
+ };
665
+ if ('tee' in value) {
666
+ const anthropicStream = value;
667
+ (async () => {
668
+ try {
669
+ for await (const chunk of anthropicStream) {
670
+ if ('delta' in chunk) {
671
+ if ('text' in chunk.delta) {
672
+ const delta = chunk?.delta?.text ?? '';
673
+ accumulatedContent += delta;
674
+ }
675
+ }
676
+ if (chunk.type == 'message_start') {
677
+ usage.inputTokens = chunk.message.usage.input_tokens ?? 0;
678
+ }
679
+ if ('usage' in chunk) {
680
+ usage.outputTokens = chunk.usage.output_tokens ?? 0;
681
+ }
682
+ passThroughStream.write(chunk);
683
+ }
684
+ const latency = (Date.now() - startTime) / 1000;
685
+ sendEventToPosthog({
686
+ client: this.phClient,
687
+ distinctId: posthogDistinctId ?? traceId,
688
+ traceId,
689
+ model: anthropicParams.model,
690
+ provider: 'anthropic',
691
+ input: mergeSystemPrompt(anthropicParams, 'anthropic'),
692
+ output: [{
693
+ content: accumulatedContent,
694
+ role: 'assistant'
695
+ }],
696
+ latency,
697
+ baseURL: this.baseURL ?? '',
698
+ params: body,
699
+ httpStatus: 200,
700
+ usage
701
+ });
702
+ passThroughStream.end();
703
+ } catch (error) {
704
+ // error handling
705
+ sendEventToPosthog({
706
+ client: this.phClient,
707
+ distinctId: posthogDistinctId ?? traceId,
708
+ traceId,
709
+ model: anthropicParams.model,
710
+ provider: 'anthropic',
711
+ input: mergeSystemPrompt(anthropicParams, 'anthropic'),
712
+ output: [],
713
+ latency: 0,
714
+ baseURL: this.baseURL ?? '',
715
+ params: body,
716
+ httpStatus: error?.status ? error.status : 500,
717
+ usage: {
718
+ inputTokens: 0,
719
+ outputTokens: 0
720
+ },
721
+ isError: true,
722
+ error: JSON.stringify(error)
723
+ });
724
+ passThroughStream.emit('error', error);
725
+ }
726
+ })();
727
+ }
728
+ return passThroughStream;
729
+ });
730
+ } else {
731
+ const wrappedPromise = parentPromise.then(result => {
732
+ if ('content' in result) {
733
+ const latency = (Date.now() - startTime) / 1000;
734
+ sendEventToPosthog({
735
+ client: this.phClient,
736
+ distinctId: posthogDistinctId ?? traceId,
737
+ traceId,
738
+ model: anthropicParams.model,
739
+ provider: 'anthropic',
740
+ input: mergeSystemPrompt(anthropicParams, 'anthropic'),
741
+ output: formatResponseAnthropic(result),
742
+ latency,
743
+ baseURL: this.baseURL ?? '',
744
+ params: body,
745
+ httpStatus: 200,
746
+ usage: {
747
+ inputTokens: result.usage.input_tokens ?? 0,
748
+ outputTokens: result.usage.output_tokens ?? 0
749
+ }
750
+ });
751
+ }
752
+ return result;
753
+ }, error => {
754
+ sendEventToPosthog({
755
+ client: this.phClient,
756
+ distinctId: posthogDistinctId ?? traceId,
757
+ traceId,
758
+ model: anthropicParams.model,
759
+ provider: 'anthropic',
760
+ input: mergeSystemPrompt(anthropicParams, 'anthropic'),
761
+ output: [],
762
+ latency: 0,
763
+ baseURL: this.baseURL ?? '',
764
+ params: body,
765
+ httpStatus: error?.status ? error.status : 500,
766
+ usage: {
767
+ inputTokens: 0,
768
+ outputTokens: 0
769
+ },
770
+ isError: true,
771
+ error: JSON.stringify(error)
772
+ });
773
+ throw error;
774
+ });
775
+ return wrappedPromise;
776
+ }
777
+ }
778
+ }
779
+
780
+ export { PostHogAnthropic as Anthropic, PostHogAzureOpenAI as AzureOpenAI, PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };
597
781
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils.ts","../src/openai/index.ts","../src/openai/azure.ts","../src/vercel/middleware.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport OpenAIOrignal from 'openai'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n}\n\nexport const getModelParams = (params: ChatCompletionCreateParamsBase & MonitoringParams): Record<string, any> => {\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: ChatCompletionCreateParamsBase & 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 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?: { inputTokens?: number; outputTokens?: number }\n params: ChatCompletionCreateParamsBase & MonitoringParams\n isError?: boolean\n error?: string\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}: SendEventToPosthogParams): void => {\n if (client.capture) {\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: error,\n }\n }\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties: {\n $ai_provider: provider,\n $ai_model: model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, input),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, output),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...errorData,\n },\n groups: params.posthogGroups,\n })\n }\n}\n","import OpenAIOrignal from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PassThrough } from 'stream'\nimport { mergeSystemPrompt, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\nimport type { APIPromise, RequestOptions } from 'openai/core'\nimport type { Stream } from 'openai/streaming'\n\ninterface MonitoringOpenAIConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n private readonly phClient: PostHog\n public chat: WrappedChat\n\n constructor(config: MonitoringOpenAIConfig) {\n const { posthog, ...openAIConfig } = config\n super(openAIConfig)\n this.phClient = posthog\n this.chat = new WrappedChat(this, this.phClient)\n }\n}\n\nexport class WrappedChat extends OpenAIOrignal.Chat {\n constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n super(parentClient)\n this.completions = new WrappedCompletions(parentClient, phClient)\n }\n\n public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends OpenAIOrignal.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\n }\n\n // --- Overload #1: Non-streaming\n public create(\n body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion>\n\n // --- Overload #2: Streaming\n public create(\n body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<ChatCompletionChunk>>\n\n // --- Overload #3: Generic base\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n // --- Implementation Signature\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n posthogPrivacyMode = false,\n posthogGroups,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n const passThroughStream = new PassThrough({ objectMode: true })\n let accumulatedContent = ''\n let usage: { inputTokens: number; outputTokens: number } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n if ('tee' in value) {\n const openAIStream = value\n ;(async () => {\n try {\n for await (const chunk of openAIStream) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.usage) {\n usage = {\n inputTokens: chunk.usage.prompt_tokens ?? 0,\n outputTokens: chunk.usage.completion_tokens ?? 0,\n }\n }\n passThroughStream.write(chunk)\n }\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: mergeSystemPrompt(openAIParams, 'openai'),\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n })\n passThroughStream.end()\n } catch (error: any) {\n // error handling\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: mergeSystemPrompt(openAIParams, 'openai'),\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 passThroughStream.emit('error', error)\n }\n })()\n }\n return passThroughStream as unknown as Stream<ChatCompletionChunk>\n }) as APIPromise<Stream<ChatCompletionChunk>>\n } else {\n const wrappedPromise = parentPromise.then(\n (result) => {\n if ('choices' in result) {\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: mergeSystemPrompt(openAIParams, 'openai'),\n output: [{ content: result.choices[0].message.content, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage?.prompt_tokens ?? 0,\n outputTokens: result.usage?.completion_tokens ?? 0,\n },\n })\n }\n return result\n },\n (error: any) => {\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: mergeSystemPrompt(openAIParams, 'openai'),\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<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogOpenAI\n","import OpenAIOrignal, { AzureOpenAI } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PassThrough } from 'stream'\nimport { mergeSystemPrompt, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\nimport type { APIPromise, RequestOptions } from 'openai/core'\nimport type { Stream } from 'openai/streaming'\n\ninterface MonitoringOpenAIConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogAzureOpenAI extends AzureOpenAI {\n private readonly phClient: PostHog\n public chat: WrappedChat\n\n constructor(config: MonitoringOpenAIConfig) {\n const { posthog, ...openAIConfig } = config\n super(openAIConfig)\n this.phClient = posthog\n this.chat = new WrappedChat(this, this.phClient)\n }\n}\n\nexport class WrappedChat extends AzureOpenAI.Chat {\n constructor(parentClient: PostHogAzureOpenAI, phClient: PostHog) {\n super(parentClient)\n this.completions = new WrappedCompletions(parentClient, phClient)\n }\n\n public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends AzureOpenAI.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: AzureOpenAI, phClient: PostHog) {\n super(client)\n this.phClient = phClient\n }\n\n // --- Overload #1: Non-streaming\n public create(\n body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion>\n\n // --- Overload #2: Streaming\n public create(\n body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<ChatCompletionChunk>>\n\n // --- Overload #3: Generic base\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n // --- Implementation Signature\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n posthogPrivacyMode = false,\n posthogGroups,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n const passThroughStream = new PassThrough({ objectMode: true })\n let accumulatedContent = ''\n let usage: { inputTokens: number; outputTokens: number } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n let model = openAIParams.model\n if ('tee' in value) {\n const openAIStream = value\n ;(async () => {\n try {\n for await (const chunk of openAIStream) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.usage) {\n if (chunk.model != model) {\n model = chunk.model\n }\n usage = {\n inputTokens: chunk.usage.prompt_tokens ?? 0,\n outputTokens: chunk.usage.completion_tokens ?? 0,\n }\n }\n passThroughStream.write(chunk)\n }\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: 'azure',\n input: mergeSystemPrompt(openAIParams, 'azure'),\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n })\n passThroughStream.end()\n } catch (error: any) {\n // error handling\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: 'azure',\n input: mergeSystemPrompt(openAIParams, 'azure'),\n output: JSON.stringify(error),\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 passThroughStream.emit('error', error)\n }\n })()\n }\n return passThroughStream as unknown as Stream<ChatCompletionChunk>\n }) as APIPromise<Stream<ChatCompletionChunk>>\n } else {\n const wrappedPromise = parentPromise.then(\n (result) => {\n if ('choices' in result) {\n const latency = (Date.now() - startTime) / 1000\n let model = openAIParams.model\n if (result.model != model) {\n model = result.model\n }\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: '1234',\n input: mergeSystemPrompt(openAIParams, 'azure'),\n output: [{ content: result.choices[0].message.content, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage?.prompt_tokens ?? 0,\n outputTokens: result.usage?.completion_tokens ?? 0,\n },\n })\n }\n return result\n },\n (error: any) => {\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'azure',\n input: mergeSystemPrompt(openAIParams, 'azure'),\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<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogAzureOpenAI\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type {\n LanguageModelV1,\n Experimental_LanguageModelV1Middleware as LanguageModelV1Middleware,\n LanguageModelV1Prompt,\n LanguageModelV1StreamPart,\n} from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { sendEventToPosthog } from '../utils'\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}\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}\n\ninterface PostHogInput {\n content: string\n role: string\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 return prompt.map((p) => {\n let content = ''\n if (Array.isArray(p.content)) {\n content = p.content\n .map((c) => {\n if (c.type === 'text') {\n return c.text\n }\n return ''\n })\n .join('')\n } else {\n content = p.content\n }\n return {\n role: p.role,\n content,\n }\n })\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 let mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n try {\n const result = await doGenerate()\n const latency = (Date.now() - startTime) / 1000\n\n const modelId = options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId)\n const provider = options.posthogProviderOverride ?? model.provider\n\n 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: result.text, 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 },\n })\n\n return result\n } catch (error: any) {\n const modelId = model.modelId\n 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: JSON.stringify(error),\n })\n throw error\n }\n },\n\n wrapStream: async ({ doStream, params }) => {\n const startTime = Date.now()\n let generatedText = ''\n let usage: { inputTokens?: number; outputTokens?: number } = {}\n let mergedParams = {\n ...options,\n ...mapVercelParams(params),\n }\n\n const modelId = options.posthogModelOverride ?? model.modelId\n const provider = options.posthogProviderOverride ?? model.provider\n try {\n const { stream, ...rest } = await doStream()\n\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 }\n controller.enqueue(chunk)\n },\n\n flush() {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n },\n })\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n }\n } catch (error: any) {\n 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: JSON.stringify(error),\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":["getModelParams","params","modelParams","paramKeys","key","undefined","mergeSystemPrompt","provider","messages","system","systemMessage","role","content","withPrivacyMode","client","privacyMode","input","privacy_mode","sendEventToPosthog","distinctId","traceId","model","output","latency","baseURL","httpStatus","usage","isError","error","capture","errorData","$ai_is_error","$ai_error","event","properties","$ai_provider","$ai_model","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","inputTokens","$ai_output_tokens","outputTokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","groups","posthogGroups","PostHogOpenAI","OpenAIOrignal","constructor","config","posthog","openAIConfig","phClient","chat","WrappedChat","Chat","parentClient","completions","WrappedCompletions","Completions","create","body","options","posthogDistinctId","posthogTraceId","openAIParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","passThroughStream","PassThrough","objectMode","accumulatedContent","openAIStream","chunk","delta","choices","prompt_tokens","completion_tokens","write","end","status","JSON","stringify","emit","wrappedPromise","result","message","PostHogAzureOpenAI","AzureOpenAI","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","mapVercelPrompt","prompt","map","p","Array","isArray","c","type","text","join","createInstrumentationMiddleware","middleware","wrapGenerate","doGenerate","mergedParams","modelId","posthogModelOverride","response","posthogProviderOverride","promptTokens","completionTokens","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","wrappedModel","wrapLanguageModel"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils.ts","../src/openai/index.ts","../src/openai/azure.ts","../src/vercel/middleware.ts","../src/anthropic/index.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n}\n\nexport const getModelParams = (\n params: (ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams\n): Record<string, any> => {\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 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?: { inputTokens?: number; outputTokens?: number }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\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}: SendEventToPosthogParams): void => {\n if (client.capture) {\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: error,\n }\n }\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties: {\n $ai_provider: provider,\n $ai_model: model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, input),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, output),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...errorData,\n },\n groups: params.posthogGroups,\n })\n }\n}\n","import OpenAIOrignal from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PassThrough } from 'stream'\nimport { formatResponseOpenAI, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\nimport type { APIPromise, RequestOptions } from 'openai/core'\nimport type { Stream } from 'openai/streaming'\n\ninterface MonitoringOpenAIConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n private readonly phClient: PostHog\n public chat: WrappedChat\n\n constructor(config: MonitoringOpenAIConfig) {\n const { posthog, ...openAIConfig } = config\n super(openAIConfig)\n this.phClient = posthog\n this.chat = new WrappedChat(this, this.phClient)\n }\n}\n\nexport class WrappedChat extends OpenAIOrignal.Chat {\n constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n super(parentClient)\n this.completions = new WrappedCompletions(parentClient, phClient)\n }\n\n public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends OpenAIOrignal.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: OpenAIOrignal, phClient: PostHog) {\n super(client)\n this.phClient = phClient\n }\n\n // --- Overload #1: Non-streaming\n public create(\n body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion>\n\n // --- Overload #2: Streaming\n public create(\n body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<ChatCompletionChunk>>\n\n // --- Overload #3: Generic base\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n // --- Implementation Signature\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n const passThroughStream = new PassThrough({ objectMode: true })\n let accumulatedContent = ''\n let usage: { inputTokens: number; outputTokens: number } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n if ('tee' in value) {\n const openAIStream = value\n ;(async () => {\n try {\n for await (const chunk of openAIStream) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.usage) {\n usage = {\n inputTokens: chunk.usage.prompt_tokens ?? 0,\n outputTokens: chunk.usage.completion_tokens ?? 0,\n }\n }\n passThroughStream.write(chunk)\n }\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n })\n passThroughStream.end()\n } catch (error: any) {\n // error handling\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n })\n passThroughStream.emit('error', error)\n }\n })()\n }\n return passThroughStream as unknown as Stream<ChatCompletionChunk>\n }) as APIPromise<Stream<ChatCompletionChunk>>\n } else {\n const wrappedPromise = parentPromise.then(\n (result) => {\n if ('choices' in result) {\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: formatResponseOpenAI(result),\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage?.prompt_tokens ?? 0,\n outputTokens: result.usage?.completion_tokens ?? 0,\n },\n })\n }\n return result\n },\n (error: any) => {\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'openai',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n })\n throw error\n }\n ) as APIPromise<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogOpenAI\n","import OpenAIOrignal, { AzureOpenAI } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PassThrough } from 'stream'\nimport { formatResponseOpenAI, MonitoringParams, sendEventToPosthog } from '../utils'\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\nimport type { APIPromise, RequestOptions } from 'openai/core'\nimport type { Stream } from 'openai/streaming'\n\ninterface MonitoringOpenAIConfig {\n apiKey: string\n posthog: PostHog\n baseURL?: string\n}\n\nexport class PostHogAzureOpenAI extends AzureOpenAI {\n private readonly phClient: PostHog\n public chat: WrappedChat\n\n constructor(config: MonitoringOpenAIConfig) {\n const { posthog, ...openAIConfig } = config\n super(openAIConfig)\n this.phClient = posthog\n this.chat = new WrappedChat(this, this.phClient)\n }\n}\n\nexport class WrappedChat extends AzureOpenAI.Chat {\n constructor(parentClient: PostHogAzureOpenAI, phClient: PostHog) {\n super(parentClient)\n this.completions = new WrappedCompletions(parentClient, phClient)\n }\n\n public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends AzureOpenAI.Chat.Completions {\n private readonly phClient: PostHog\n\n constructor(client: AzureOpenAI, phClient: PostHog) {\n super(client)\n this.phClient = phClient\n }\n\n // --- Overload #1: Non-streaming\n public create(\n body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion>\n\n // --- Overload #2: Streaming\n public create(\n body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<Stream<ChatCompletionChunk>>\n\n // --- Overload #3: Generic base\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n // --- Implementation Signature\n public create(\n body: ChatCompletionCreateParamsBase & MonitoringParams,\n options?: RequestOptions\n ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n const {\n posthogDistinctId,\n posthogTraceId,\n posthogProperties,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n posthogPrivacyMode = false,\n posthogGroups,\n ...openAIParams\n } = body\n\n const traceId = posthogTraceId ?? uuidv4()\n const startTime = Date.now()\n const parentPromise = super.create(openAIParams, options)\n\n if (openAIParams.stream) {\n return parentPromise.then((value) => {\n const passThroughStream = new PassThrough({ objectMode: true })\n let accumulatedContent = ''\n let usage: { inputTokens: number; outputTokens: number } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n let model = openAIParams.model\n if ('tee' in value) {\n const openAIStream = value\n ;(async () => {\n try {\n for await (const chunk of openAIStream) {\n const delta = chunk?.choices?.[0]?.delta?.content ?? ''\n accumulatedContent += delta\n if (chunk.usage) {\n if (chunk.model != model) {\n model = chunk.model\n }\n usage = {\n inputTokens: chunk.usage.prompt_tokens ?? 0,\n outputTokens: chunk.usage.completion_tokens ?? 0,\n }\n }\n passThroughStream.write(chunk)\n }\n const latency = (Date.now() - startTime) / 1000\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: 'azure',\n input: openAIParams.messages,\n output: [{ content: accumulatedContent, role: 'assistant' }],\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage,\n })\n passThroughStream.end()\n } catch (error: any) {\n // error handling\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: 'azure',\n input: openAIParams.messages,\n output: JSON.stringify(error),\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 passThroughStream.emit('error', error)\n }\n })()\n }\n return passThroughStream as unknown as Stream<ChatCompletionChunk>\n }) as APIPromise<Stream<ChatCompletionChunk>>\n } else {\n const wrappedPromise = parentPromise.then(\n (result) => {\n if ('choices' in result) {\n const latency = (Date.now() - startTime) / 1000\n let model = openAIParams.model\n if (result.model != model) {\n model = result.model\n }\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model,\n provider: 'azure',\n input: openAIParams.messages,\n output: formatResponseOpenAI(result),\n latency,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: 200,\n usage: {\n inputTokens: result.usage?.prompt_tokens ?? 0,\n outputTokens: result.usage?.completion_tokens ?? 0,\n },\n })\n }\n return result\n },\n (error: any) => {\n sendEventToPosthog({\n client: this.phClient,\n distinctId: posthogDistinctId ?? traceId,\n traceId,\n model: openAIParams.model,\n provider: 'azure',\n input: openAIParams.messages,\n output: [],\n latency: 0,\n baseURL: (this as any).baseURL ?? '',\n params: body,\n httpStatus: error?.status ? error.status : 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n isError: true,\n error: JSON.stringify(error),\n })\n throw error\n }\n ) as APIPromise<ChatCompletion>\n\n return wrappedPromise\n }\n }\n}\n\nexport default PostHogAzureOpenAI\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type {\n LanguageModelV1,\n Experimental_LanguageModelV1Middleware as LanguageModelV1Middleware,\n LanguageModelV1Prompt,\n LanguageModelV1StreamPart,\n} from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { sendEventToPosthog } from '../utils'\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}\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}\n\ninterface PostHogInput {\n content: string\n role: string\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 return prompt.map((p) => {\n let content = ''\n if (Array.isArray(p.content)) {\n content = p.content\n .map((c) => {\n if (c.type === 'text') {\n return c.text\n }\n return ''\n })\n .join('')\n } else {\n content = p.content\n }\n return {\n role: p.role,\n content,\n }\n })\n}\n\nconst extractProvider = (model: LanguageModelV1): string => {\n // vercel provider is in the format of provider.endpoint\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 let 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\n 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: result.text, 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 },\n })\n\n return result\n } catch (error: any) {\n const modelId = model.modelId\n 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: JSON.stringify(error),\n })\n throw error\n }\n },\n\n wrapStream: async ({ doStream, params }) => {\n const startTime = Date.now()\n let generatedText = ''\n let usage: { inputTokens?: number; outputTokens?: number } = {}\n let 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 }\n controller.enqueue(chunk)\n },\n\n flush() {\n const latency = (Date.now() - startTime) / 1000\n 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 })\n },\n })\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n }\n } catch (error: any) {\n 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: JSON.stringify(error),\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","import AnthropicOriginal from '@anthropic-ai/sdk'\nimport { PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PassThrough } from 'stream'\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 const passThroughStream = new PassThrough({ objectMode: true })\n let accumulatedContent = ''\n let usage: { inputTokens: number; outputTokens: number } = {\n inputTokens: 0,\n outputTokens: 0,\n }\n if ('tee' in value) {\n const anthropicStream = value\n ;(async () => {\n try {\n for await (const chunk of anthropicStream) {\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 }\n if ('usage' in chunk) {\n usage.outputTokens = chunk.usage.output_tokens ?? 0\n }\n passThroughStream.write(chunk)\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 passThroughStream.end()\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 passThroughStream.emit('error', error)\n }\n })()\n }\n return passThroughStream as unknown as Stream<RawMessageStreamEvent>\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 },\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"],"names":["getModelParams","params","modelParams","paramKeys","key","undefined","formatResponseAnthropic","response","output","choice","content","text","push","role","formatResponseOpenAI","choices","message","mergeSystemPrompt","provider","messages","system","systemMessage","withPrivacyMode","client","privacyMode","input","privacy_mode","sendEventToPosthog","distinctId","traceId","model","latency","baseURL","httpStatus","usage","isError","error","capture","errorData","$ai_is_error","$ai_error","event","properties","$ai_provider","$ai_model","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","inputTokens","$ai_output_tokens","outputTokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","groups","posthogGroups","PostHogOpenAI","OpenAIOrignal","constructor","config","posthog","openAIConfig","phClient","chat","WrappedChat","Chat","parentClient","completions","WrappedCompletions","Completions","create","body","options","posthogDistinctId","posthogTraceId","openAIParams","uuidv4","startTime","Date","now","parentPromise","stream","then","value","passThroughStream","PassThrough","objectMode","accumulatedContent","openAIStream","chunk","delta","prompt_tokens","completion_tokens","write","end","status","JSON","stringify","emit","wrappedPromise","result","PostHogAzureOpenAI","AzureOpenAI","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","mapVercelPrompt","prompt","map","p","Array","isArray","c","type","join","extractProvider","toLowerCase","providerName","split","createInstrumentationMiddleware","middleware","wrapGenerate","doGenerate","mergedParams","modelId","posthogModelOverride","posthogProviderOverride","promptTokens","completionTokens","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","wrappedModel","wrapLanguageModel","PostHogAnthropic","AnthropicOriginal","anthropicConfig","WrappedMessages","Messages","anthropicParams","anthropicStream","input_tokens","output_tokens"],"mappings":"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"}