@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/README.md +2 -0
- package/lib/index.cjs.js +207 -21
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.d.ts +28 -1
- package/lib/index.esm.js +206 -22
- package/lib/index.esm.js.map +1 -1
- package/lib/posthog-ai/src/anthropic/index.d.ts +28 -0
- package/lib/posthog-ai/src/index.d.ts +2 -0
- package/lib/posthog-ai/src/utils.d.ts +5 -3
- package/package.json +10 -8
- package/src/anthropic/index.ts +195 -0
- package/src/index.ts +2 -0
- package/src/openai/azure.ts +8 -7
- package/src/openai/index.ts +7 -6
- package/src/utils.ts +7 -3
- package/src/vercel/middleware.ts +15 -7
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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: '
|
|
366
|
-
input:
|
|
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:
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
package/lib/index.esm.js.map
CHANGED
|
@@ -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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"}
|