@posthog/ai 2.1.1 → 2.2.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.cjs.js CHANGED
@@ -22,18 +22,18 @@ const getModelParams = params => {
22
22
  return modelParams;
23
23
  };
24
24
  const mergeSystemPrompt = (params, provider) => {
25
- if (provider !== 'anthropic') {
26
- return params.messages;
27
- }
28
- const messages = params.messages || [];
29
- if (!params.system) {
30
- return messages;
25
+ if (provider == 'anthropic') {
26
+ const messages = params.messages || [];
27
+ if (!params.system) {
28
+ return messages;
29
+ }
30
+ const systemMessage = params.system;
31
+ return [{
32
+ role: 'system',
33
+ content: systemMessage
34
+ }, ...messages];
31
35
  }
32
- const systemMessage = params.system;
33
- return [{
34
- role: 'system',
35
- content: systemMessage
36
- }, ...messages];
36
+ return params.messages;
37
37
  };
38
38
  const withPrivacyMode = (client, privacyMode, input) => {
39
39
  return client.privacy_mode || privacyMode ? null : input;
@@ -50,9 +50,18 @@ const sendEventToPosthog = ({
50
50
  baseURL,
51
51
  params,
52
52
  httpStatus = 200,
53
- usage = {}
53
+ usage = {},
54
+ isError = false,
55
+ error
54
56
  }) => {
55
57
  if (client.capture) {
58
+ let errorData = {};
59
+ if (isError) {
60
+ errorData = {
61
+ $ai_is_error: true,
62
+ $ai_error: error
63
+ };
64
+ }
56
65
  client.capture({
57
66
  distinctId: distinctId ?? traceId,
58
67
  event: '$ai_generation',
@@ -71,7 +80,8 @@ const sendEventToPosthog = ({
71
80
  ...params.posthogProperties,
72
81
  ...(distinctId ? {} : {
73
82
  $process_person_profile: false
74
- })
83
+ }),
84
+ ...errorData
75
85
  },
76
86
  groups: params.posthogGroups
77
87
  });
@@ -86,16 +96,16 @@ class PostHogOpenAI extends OpenAIOrignal__default["default"] {
86
96
  } = config;
87
97
  super(openAIConfig);
88
98
  this.phClient = posthog;
89
- this.chat = new WrappedChat(this, this.phClient);
99
+ this.chat = new WrappedChat$1(this, this.phClient);
90
100
  }
91
101
  }
92
- class WrappedChat extends OpenAIOrignal__default["default"].Chat {
102
+ class WrappedChat$1 extends OpenAIOrignal__default["default"].Chat {
93
103
  constructor(parentClient, phClient) {
94
104
  super(parentClient);
95
- this.completions = new WrappedCompletions(parentClient, phClient);
105
+ this.completions = new WrappedCompletions$1(parentClient, phClient);
96
106
  }
97
107
  }
98
- class WrappedCompletions extends OpenAIOrignal__default["default"].Chat.Completions {
108
+ class WrappedCompletions$1 extends OpenAIOrignal__default["default"].Chat.Completions {
99
109
  constructor(client, phClient) {
100
110
  super(client);
101
111
  this.phClient = phClient;
@@ -170,11 +180,13 @@ class WrappedCompletions extends OpenAIOrignal__default["default"].Chat.Completi
170
180
  latency: 0,
171
181
  baseURL: this.baseURL ?? '',
172
182
  params: body,
173
- httpStatus: 500,
183
+ httpStatus: error?.status ? error.status : 500,
174
184
  usage: {
175
185
  inputTokens: 0,
176
186
  outputTokens: 0
177
- }
187
+ },
188
+ isError: true,
189
+ error: JSON.stringify(error)
178
190
  });
179
191
  passThroughStream.emit('error', error);
180
192
  }
@@ -220,11 +232,180 @@ class WrappedCompletions extends OpenAIOrignal__default["default"].Chat.Completi
220
232
  latency: 0,
221
233
  baseURL: this.baseURL ?? '',
222
234
  params: body,
223
- httpStatus: 500,
235
+ httpStatus: error?.status ? error.status : 500,
224
236
  usage: {
225
237
  inputTokens: 0,
226
238
  outputTokens: 0
239
+ },
240
+ isError: true,
241
+ error: JSON.stringify(error)
242
+ });
243
+ throw error;
244
+ });
245
+ return wrappedPromise;
246
+ }
247
+ }
248
+ }
249
+
250
+ class PostHogAzureOpenAI extends OpenAIOrignal.AzureOpenAI {
251
+ constructor(config) {
252
+ const {
253
+ posthog,
254
+ ...openAIConfig
255
+ } = config;
256
+ super(openAIConfig);
257
+ this.phClient = posthog;
258
+ this.chat = new WrappedChat(this, this.phClient);
259
+ }
260
+ }
261
+ class WrappedChat extends OpenAIOrignal.AzureOpenAI.Chat {
262
+ constructor(parentClient, phClient) {
263
+ super(parentClient);
264
+ this.completions = new WrappedCompletions(parentClient, phClient);
265
+ }
266
+ }
267
+ class WrappedCompletions extends OpenAIOrignal.AzureOpenAI.Chat.Completions {
268
+ constructor(client, phClient) {
269
+ super(client);
270
+ this.phClient = phClient;
271
+ }
272
+ // --- Implementation Signature
273
+ create(body, options) {
274
+ const {
275
+ posthogDistinctId,
276
+ posthogTraceId,
277
+ posthogProperties,
278
+ posthogPrivacyMode = false,
279
+ posthogGroups,
280
+ ...openAIParams
281
+ } = body;
282
+ const traceId = posthogTraceId ?? uuid.v4();
283
+ const startTime = Date.now();
284
+ const parentPromise = super.create(openAIParams, options);
285
+ if (openAIParams.stream) {
286
+ return parentPromise.then(value => {
287
+ const passThroughStream = new stream.PassThrough({
288
+ objectMode: true
289
+ });
290
+ let accumulatedContent = '';
291
+ let usage = {
292
+ inputTokens: 0,
293
+ outputTokens: 0
294
+ };
295
+ let model = openAIParams.model;
296
+ if ('tee' in value) {
297
+ const openAIStream = value;
298
+ (async () => {
299
+ try {
300
+ for await (const chunk of openAIStream) {
301
+ const delta = chunk?.choices?.[0]?.delta?.content ?? '';
302
+ accumulatedContent += delta;
303
+ if (chunk.usage) {
304
+ if (chunk.model != model) {
305
+ model = chunk.model;
306
+ }
307
+ usage = {
308
+ inputTokens: chunk.usage.prompt_tokens ?? 0,
309
+ outputTokens: chunk.usage.completion_tokens ?? 0
310
+ };
311
+ }
312
+ passThroughStream.write(chunk);
313
+ }
314
+ const latency = (Date.now() - startTime) / 1000;
315
+ sendEventToPosthog({
316
+ client: this.phClient,
317
+ distinctId: posthogDistinctId ?? traceId,
318
+ traceId,
319
+ model,
320
+ provider: 'azure',
321
+ input: mergeSystemPrompt(openAIParams, 'azure'),
322
+ output: [{
323
+ content: accumulatedContent,
324
+ role: 'assistant'
325
+ }],
326
+ latency,
327
+ baseURL: this.baseURL ?? '',
328
+ params: body,
329
+ httpStatus: 200,
330
+ usage
331
+ });
332
+ passThroughStream.end();
333
+ } catch (error) {
334
+ // error handling
335
+ sendEventToPosthog({
336
+ client: this.phClient,
337
+ distinctId: posthogDistinctId ?? traceId,
338
+ traceId,
339
+ model,
340
+ provider: 'azure',
341
+ input: mergeSystemPrompt(openAIParams, 'azure'),
342
+ output: JSON.stringify(error),
343
+ latency: 0,
344
+ baseURL: this.baseURL ?? '',
345
+ params: body,
346
+ httpStatus: error?.status ? error.status : 500,
347
+ usage: {
348
+ inputTokens: 0,
349
+ outputTokens: 0
350
+ },
351
+ isError: true,
352
+ error: JSON.stringify(error)
353
+ });
354
+ passThroughStream.emit('error', error);
355
+ }
356
+ })();
357
+ }
358
+ return passThroughStream;
359
+ });
360
+ } else {
361
+ const wrappedPromise = parentPromise.then(result => {
362
+ if ('choices' in result) {
363
+ const latency = (Date.now() - startTime) / 1000;
364
+ let model = openAIParams.model;
365
+ if (result.model != model) {
366
+ model = result.model;
227
367
  }
368
+ sendEventToPosthog({
369
+ client: this.phClient,
370
+ distinctId: posthogDistinctId ?? traceId,
371
+ traceId,
372
+ model,
373
+ provider: '1234',
374
+ input: mergeSystemPrompt(openAIParams, 'azure'),
375
+ output: [{
376
+ content: result.choices[0].message.content,
377
+ role: 'assistant'
378
+ }],
379
+ latency,
380
+ baseURL: this.baseURL ?? '',
381
+ params: body,
382
+ httpStatus: 200,
383
+ usage: {
384
+ inputTokens: result.usage?.prompt_tokens ?? 0,
385
+ outputTokens: result.usage?.completion_tokens ?? 0
386
+ }
387
+ });
388
+ }
389
+ return result;
390
+ }, error => {
391
+ sendEventToPosthog({
392
+ client: this.phClient,
393
+ distinctId: posthogDistinctId ?? traceId,
394
+ traceId,
395
+ model: openAIParams.model,
396
+ provider: 'azure',
397
+ input: mergeSystemPrompt(openAIParams, 'azure'),
398
+ output: [],
399
+ latency: 0,
400
+ baseURL: this.baseURL ?? '',
401
+ params: body,
402
+ httpStatus: error?.status ? error.status : 500,
403
+ usage: {
404
+ inputTokens: 0,
405
+ outputTokens: 0
406
+ },
407
+ isError: true,
408
+ error: JSON.stringify(error)
228
409
  });
229
410
  throw error;
230
411
  });
@@ -277,12 +458,13 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
277
458
  try {
278
459
  const result = await doGenerate();
279
460
  const latency = (Date.now() - startTime) / 1000;
461
+ const modelId = result.response?.modelId ? result.response.modelId : model.modelId;
280
462
  sendEventToPosthog({
281
463
  client: phClient,
282
464
  distinctId: options.posthogDistinctId,
283
465
  traceId: options.posthogTraceId,
284
- model: model.modelId,
285
- provider: 'vercel',
466
+ model: modelId,
467
+ provider: model.provider,
286
468
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
287
469
  output: [{
288
470
  content: result.text,
@@ -299,22 +481,25 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
299
481
  });
300
482
  return result;
301
483
  } catch (error) {
484
+ const modelId = model.modelId;
302
485
  sendEventToPosthog({
303
486
  client: phClient,
304
487
  distinctId: options.posthogDistinctId,
305
488
  traceId: options.posthogTraceId,
306
- model: model.modelId,
307
- provider: 'vercel',
489
+ model: modelId,
490
+ provider: model.provider,
308
491
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
309
492
  output: [],
310
493
  latency: 0,
311
494
  baseURL: '',
312
495
  params: mergedParams,
313
- httpStatus: 500,
496
+ httpStatus: error?.status ? error.status : 500,
314
497
  usage: {
315
498
  inputTokens: 0,
316
499
  outputTokens: 0
317
- }
500
+ },
501
+ isError: true,
502
+ error: JSON.stringify(error)
318
503
  });
319
504
  throw error;
320
505
  }
@@ -355,7 +540,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
355
540
  distinctId: options.posthogDistinctId,
356
541
  traceId: options.posthogTraceId,
357
542
  model: model.modelId,
358
- provider: 'vercel',
543
+ provider: model.provider,
359
544
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
360
545
  output: [{
361
546
  content: generatedText,
@@ -379,17 +564,19 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
379
564
  distinctId: options.posthogDistinctId,
380
565
  traceId: options.posthogTraceId,
381
566
  model: model.modelId,
382
- provider: 'vercel',
567
+ provider: model.provider,
383
568
  input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
384
569
  output: [],
385
570
  latency: 0,
386
571
  baseURL: '',
387
572
  params: mergedParams,
388
- httpStatus: 500,
573
+ httpStatus: error?.status ? error.status : 500,
389
574
  usage: {
390
575
  inputTokens: 0,
391
576
  outputTokens: 0
392
- }
577
+ },
578
+ isError: true,
579
+ error: JSON.stringify(error)
393
580
  });
394
581
  throw error;
395
582
  }
@@ -411,6 +598,7 @@ const wrapVercelLanguageModel = (model, phClient, options) => {
411
598
  return wrappedModel;
412
599
  };
413
600
 
601
+ exports.AzureOpenAI = PostHogAzureOpenAI;
414
602
  exports.OpenAI = PostHogOpenAI;
415
603
  exports.withTracing = wrapVercelLanguageModel;
416
604
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils.ts","../src/openai/index.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 return params.messages\n }\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\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}\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}: SendEventToPosthogParams): void => {\n if (client.capture) {\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 },\n groups: params.posthogGroups,\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) {\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: 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\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) => {\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: 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n })\n throw error\n }\n ) as APIPromise<ChatCompletion>\n\n return wrappedPromise\n }\n }\n\n}\n\nexport default PostHogOpenAI\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 CreateInstrumentationMiddlewareOptions {\n posthogDistinctId?: string\n posthogTraceId: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\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 sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: model.modelId,\n provider: 'vercel',\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) {\n sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: model.modelId,\n provider: 'vercel',\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\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 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: model.modelId,\n provider: 'vercel',\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) {\n sendEventToPosthog({\n client: phClient,\n distinctId: options.posthogDistinctId,\n traceId: options.posthogTraceId,\n model: model.modelId,\n provider: 'vercel',\n input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),\n output: [],\n latency: 0,\n baseURL: '',\n params: mergedParams as any,\n httpStatus: 500,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n })\n throw error\n }\n },\n }\n\n return middleware\n}\n\nexport const wrapVercelLanguageModel = (\n model: LanguageModelV1,\n phClient: PostHog,\n options: CreateInstrumentationMiddlewareOptions\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","capture","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","error","emit","wrappedPromise","result","message","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","promptTokens","completionTokens","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","wrappedModel","wrapLanguageModel"],"mappings":";;;;;;;;;;;;;AAaO,MAAMA,cAAc,GAAIC,MAAyD,IAAyB;EAC/G,MAAMC,WAAW,GAAwB,EAAE,CAAA;EAC3C,MAAMC,SAAS,GAAG,CAChB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,GAAG,EACH,MAAM,EACN,QAAQ,EACR,WAAW,CACH,CAAA;AAEV,EAAA,KAAK,MAAMC,GAAG,IAAID,SAAS,EAAE;IAC3B,IAAIC,GAAG,IAAIH,MAAM,IAAKA,MAAc,CAACG,GAAG,CAAC,KAAKC,SAAS,EAAE;AACvDH,MAAAA,WAAW,CAACE,GAAG,CAAC,GAAIH,MAAc,CAACG,GAAG,CAAC,CAAA;AACxC,KAAA;AACF,GAAA;AACD,EAAA,OAAOF,WAAW,CAAA;AACpB,CAAC,CAAA;AA4CM,MAAMI,iBAAiB,GAAGA,CAACL,MAAyD,EAAEM,QAAgB,KAAS;EACpH,IAAIA,QAAQ,KAAK,WAAW,EAAE;IAC5B,OAAON,MAAM,CAACO,QAAQ,CAAA;AACvB,GAAA;AACD,EAAA,MAAMA,QAAQ,GAAGP,MAAM,CAACO,QAAQ,IAAI,EAAE,CAAA;AACtC,EAAA,IAAI,CAAEP,MAAc,CAACQ,MAAM,EAAE;AAC3B,IAAA,OAAOD,QAAQ,CAAA;AAChB,GAAA;AACD,EAAA,MAAME,aAAa,GAAIT,MAAc,CAACQ,MAAM,CAAA;AAC5C,EAAA,OAAO,CAAC;AAAEE,IAAAA,IAAI,EAAE,QAAQ;AAAEC,IAAAA,OAAO,EAAEF,aAAAA;GAAe,EAAE,GAAGF,QAAQ,CAAC,CAAA;AAClE,CAAC,CAAA;AAEM,MAAMK,eAAe,GAAGA,CAACC,MAAe,EAAEC,WAAoB,EAAEC,KAAU,KAAS;EACxF,OAAQF,MAAc,CAACG,YAAY,IAAIF,WAAW,GAAG,IAAI,GAAGC,KAAK,CAAA;AACnE,CAAC,CAAA;AAiBM,MAAME,kBAAkB,GAAGA,CAAC;EACjCJ,MAAM;EACNK,UAAU;EACVC,OAAO;EACPC,KAAK;EACLd,QAAQ;EACRS,KAAK;EACLM,MAAM;EACNC,OAAO;EACPC,OAAO;EACPvB,MAAM;AACNwB,EAAAA,UAAU,GAAG,GAAG;AAChBC,EAAAA,KAAK,GAAG,EAAE;AAAA,CACe,KAAU;EACnC,IAAIZ,MAAM,CAACa,OAAO,EAAE;IAClBb,MAAM,CAACa,OAAO,CAAC;MACbR,UAAU,EAAEA,UAAU,IAAIC,OAAO;AACjCQ,MAAAA,KAAK,EAAE,gBAAgB;AACvBC,MAAAA,UAAU,EAAE;AACVC,QAAAA,YAAY,EAAEvB,QAAQ;AACtBwB,QAAAA,SAAS,EAAEV,KAAK;AAChBW,QAAAA,oBAAoB,EAAEhC,cAAc,CAACC,MAAM,CAAC;AAC5CgC,QAAAA,SAAS,EAAEpB,eAAe,CAACC,MAAM,EAAEb,MAAM,CAACiC,kBAAkB,IAAI,KAAK,EAAElB,KAAK,CAAC;AAC7EmB,QAAAA,kBAAkB,EAAEtB,eAAe,CAACC,MAAM,EAAEb,MAAM,CAACiC,kBAAkB,IAAI,KAAK,EAAEZ,MAAM,CAAC;AACvFc,QAAAA,eAAe,EAAEX,UAAU;AAC3BY,QAAAA,gBAAgB,EAAEX,KAAK,CAACY,WAAW,IAAI,CAAC;AACxCC,QAAAA,iBAAiB,EAAEb,KAAK,CAACc,YAAY,IAAI,CAAC;AAC1CC,QAAAA,WAAW,EAAElB,OAAO;AACpBmB,QAAAA,YAAY,EAAEtB,OAAO;AACrBuB,QAAAA,YAAY,EAAEnB,OAAO;QACrB,GAAGvB,MAAM,CAAC2C,iBAAiB;AAC3B,QAAA,IAAIzB,UAAU,GAAG,EAAE,GAAG;AAAE0B,UAAAA,uBAAuB,EAAE,KAAA;SAAO,CAAA;OACzD;MACDC,MAAM,EAAE7C,MAAM,CAAC8C,aAAAA;AAChB,KAAA,CAAC,CAAA;AACH,GAAA;AACH,CAAC;;AC7HK,MAAOC,aAAc,SAAQC,iCAAa,CAAA;EAI9CC,WAAAA,CAAYC,MAA8B,EAAA;IACxC,MAAM;MAAEC,OAAO;MAAE,GAAGC,YAAAA;AAAc,KAAA,GAAGF,MAAM,CAAA;IAC3C,KAAK,CAACE,YAAY,CAAC,CAAA;IACnB,IAAI,CAACC,QAAQ,GAAGF,OAAO,CAAA;IACvB,IAAI,CAACG,IAAI,GAAG,IAAIC,WAAW,CAAC,IAAI,EAAE,IAAI,CAACF,QAAQ,CAAC,CAAA;AAClD,GAAA;AACD,CAAA;AAEY,MAAAE,WAAY,SAAQP,iCAAa,CAACQ,IAAI,CAAA;AACjDP,EAAAA,WAAYA,CAAAQ,YAA2B,EAAEJ,QAAiB,EAAA;IACxD,KAAK,CAACI,YAAY,CAAC,CAAA;IACnB,IAAI,CAACC,WAAW,GAAG,IAAIC,kBAAkB,CAACF,YAAY,EAAEJ,QAAQ,CAAC,CAAA;AACnE,GAAA;AAGD,CAAA;MAEYM,kBAAmB,SAAQX,iCAAa,CAACQ,IAAI,CAACI,WAAW,CAAA;AAGpEX,EAAAA,WAAYA,CAAApC,MAAqB,EAAEwC,QAAiB,EAAA;IAClD,KAAK,CAACxC,MAAM,CAAC,CAAA;IACb,IAAI,CAACwC,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,GAAA;AAoBA;AACOQ,EAAAA,MAAMA,CACXC,IAAuD,EACvDC,OAAwB,EAAA;IAExB,MAAM;MACJC,iBAAiB;MACjBC,cAAc;MACdtB,iBAAiB;AACjBV,MAAAA,kBAAkB,GAAG,KAAK;MAC1Ba,aAAa;MACb,GAAGoB,YAAAA;AACJ,KAAA,GAAGJ,IAAI,CAAA;AAER,IAAA,MAAM3C,OAAO,GAAG8C,cAAc,IAAIE,OAAM,EAAE,CAAA;AAC1C,IAAA,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACV,MAAM,CAACK,YAAY,EAAEH,OAAO,CAAC,CAAA;IAEzD,IAAIG,YAAY,CAACM,MAAM,EAAE;AACvB,MAAA,OAAOD,aAAa,CAACE,IAAI,CAAEC,KAAK,IAAI;AAClC,QAAA,MAAMC,iBAAiB,GAAG,IAAIC,kBAAW,CAAC;AAAEC,UAAAA,UAAU,EAAE,IAAA;AAAM,SAAA,CAAC,CAAA;QAC/D,IAAIC,kBAAkB,GAAG,EAAE,CAAA;AAC3B,QAAA,IAAIrD,KAAK,GAAkD;AACzDY,UAAAA,WAAW,EAAE,CAAC;AACdE,UAAAA,YAAY,EAAE,CAAA;SACf,CAAA;QACD,IAAI,KAAK,IAAImC,KAAK,EAAE;UAClB,MAAMK,YAAY,GAAGL,KAAK,CAAA;AAC1B,UAAA,CAAC,YAAW;YACV,IAAI;AACF,cAAA,WAAW,MAAMM,KAAK,IAAID,YAAY,EAAE;AACtC,gBAAA,MAAME,KAAK,GAAGD,KAAK,EAAEE,OAAO,GAAG,CAAC,CAAC,EAAED,KAAK,EAAEtE,OAAO,IAAI,EAAE,CAAA;AACvDmE,gBAAAA,kBAAkB,IAAIG,KAAK,CAAA;gBAC3B,IAAID,KAAK,CAACvD,KAAK,EAAE;AACfA,kBAAAA,KAAK,GAAG;AACNY,oBAAAA,WAAW,EAAE2C,KAAK,CAACvD,KAAK,CAAC0D,aAAa,IAAI,CAAC;AAC3C5C,oBAAAA,YAAY,EAAEyC,KAAK,CAACvD,KAAK,CAAC2D,iBAAiB,IAAI,CAAA;mBAChD,CAAA;AACF,iBAAA;AACDT,gBAAAA,iBAAiB,CAACU,KAAK,CAACL,KAAK,CAAC,CAAA;AAC/B,eAAA;cACD,MAAM1D,OAAO,GAAG,CAAC+C,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/CnD,cAAAA,kBAAkB,CAAC;gBACjBJ,MAAM,EAAE,IAAI,CAACwC,QAAQ;gBACrBnC,UAAU,EAAE8C,iBAAiB,IAAI7C,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAE8C,YAAY,CAAC9C,KAAK;AACzBd,gBAAAA,QAAQ,EAAE,QAAQ;AAClBS,gBAAAA,KAAK,EAAEV,iBAAiB,CAAC6D,YAAY,EAAE,QAAQ,CAAC;AAChD7C,gBAAAA,MAAM,EAAE,CAAC;AAAEV,kBAAAA,OAAO,EAAEmE,kBAAkB;AAAEpE,kBAAAA,IAAI,EAAE,WAAA;AAAW,iBAAE,CAAC;gBAC5DY,OAAO;AACPC,gBAAAA,OAAO,EAAG,IAAY,CAACA,OAAO,IAAI,EAAE;AACpCvB,gBAAAA,MAAM,EAAE8D,IAAI;AACZtC,gBAAAA,UAAU,EAAE,GAAG;AACfC,gBAAAA,KAAAA;AACD,eAAA,CAAC,CAAA;cACFkD,iBAAiB,CAACW,GAAG,EAAE,CAAA;aACxB,CAAC,OAAOC,KAAK,EAAE;AACd;AACAtE,cAAAA,kBAAkB,CAAC;gBACjBJ,MAAM,EAAE,IAAI,CAACwC,QAAQ;gBACrBnC,UAAU,EAAE8C,iBAAiB,IAAI7C,OAAO;gBACxCA,OAAO;gBACPC,KAAK,EAAE8C,YAAY,CAAC9C,KAAK;AACzBd,gBAAAA,QAAQ,EAAE,QAAQ;AAClBS,gBAAAA,KAAK,EAAEV,iBAAiB,CAAC6D,YAAY,EAAE,QAAQ,CAAC;AAChD7C,gBAAAA,MAAM,EAAE,EAAE;AACVC,gBAAAA,OAAO,EAAE,CAAC;AACVC,gBAAAA,OAAO,EAAG,IAAY,CAACA,OAAO,IAAI,EAAE;AACpCvB,gBAAAA,MAAM,EAAE8D,IAAI;AACZtC,gBAAAA,UAAU,EAAE,GAAG;AACfC,gBAAAA,KAAK,EAAE;AACLY,kBAAAA,WAAW,EAAE,CAAC;AACdE,kBAAAA,YAAY,EAAE,CAAA;AACf,iBAAA;AACF,eAAA,CAAC,CAAA;AACFoC,cAAAA,iBAAiB,CAACa,IAAI,CAAC,OAAO,EAAED,KAAK,CAAC,CAAA;AACvC,aAAA;AACH,WAAC,GAAG,CAAA;AACL,SAAA;AACD,QAAA,OAAOZ,iBAA2D,CAAA;AACpE,OAAC,CAA4C,CAAA;AAC9C,KAAA,MAAM;AACL,MAAA,MAAMc,cAAc,GAAGlB,aAAa,CAACE,IAAI,CACtCiB,MAAM,IAAI;QACT,IAAI,SAAS,IAAIA,MAAM,EAAE;UACvB,MAAMpE,OAAO,GAAG,CAAC+C,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/CnD,UAAAA,kBAAkB,CAAC;YACjBJ,MAAM,EAAE,IAAI,CAACwC,QAAQ;YACrBnC,UAAU,EAAE8C,iBAAiB,IAAI7C,OAAO;YACxCA,OAAO;YACPC,KAAK,EAAE8C,YAAY,CAAC9C,KAAK;AACzBd,YAAAA,QAAQ,EAAE,QAAQ;AAClBS,YAAAA,KAAK,EAAEV,iBAAiB,CAAC6D,YAAY,EAAE,QAAQ,CAAC;AAChD7C,YAAAA,MAAM,EAAE,CAAC;cAAEV,OAAO,EAAE+E,MAAM,CAACR,OAAO,CAAC,CAAC,CAAC,CAACS,OAAO,CAAChF,OAAO;AAAED,cAAAA,IAAI,EAAE,WAAA;aAAa,CAAC;YAC3EY,OAAO;AACPC,YAAAA,OAAO,EAAG,IAAY,CAACA,OAAO,IAAI,EAAE;AACpCvB,YAAAA,MAAM,EAAE8D,IAAI;AACZtC,YAAAA,UAAU,EAAE,GAAG;AACfC,YAAAA,KAAK,EAAE;AACLY,cAAAA,WAAW,EAAEqD,MAAM,CAACjE,KAAK,EAAE0D,aAAa,IAAI,CAAC;AAC7C5C,cAAAA,YAAY,EAAEmD,MAAM,CAACjE,KAAK,EAAE2D,iBAAiB,IAAI,CAAA;AAClD,aAAA;AACF,WAAA,CAAC,CAAA;AACH,SAAA;AACD,QAAA,OAAOM,MAAM,CAAA;OACd,EACAH,KAAK,IAAI;AACRtE,QAAAA,kBAAkB,CAAC;UACjBJ,MAAM,EAAE,IAAI,CAACwC,QAAQ;UACrBnC,UAAU,EAAE8C,iBAAiB,IAAI7C,OAAO;UACxCA,OAAO;UACPC,KAAK,EAAE8C,YAAY,CAAC9C,KAAK;AACzBd,UAAAA,QAAQ,EAAE,QAAQ;AAClBS,UAAAA,KAAK,EAAEV,iBAAiB,CAAC6D,YAAY,EAAE,QAAQ,CAAC;AAChD7C,UAAAA,MAAM,EAAE,EAAE;AACVC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAG,IAAY,CAACA,OAAO,IAAI,EAAE;AACpCvB,UAAAA,MAAM,EAAE8D,IAAI;AACZtC,UAAAA,UAAU,EAAE,GAAG;AACfC,UAAAA,KAAK,EAAE;AACLY,YAAAA,WAAW,EAAE,CAAC;AACdE,YAAAA,YAAY,EAAE,CAAA;AACf,WAAA;AACF,SAAA,CAAC,CAAA;AACF,QAAA,MAAMgD,KAAK,CAAA;AACb,OAAC,CAC4B,CAAA;AAE/B,MAAA,OAAOE,cAAc,CAAA;AACtB,KAAA;AACH,GAAA;AAED;;ACjLD,MAAMG,eAAe,GAAI5F,MAAW,IAAyB;EAC3D,OAAO;IACL6F,WAAW,EAAE7F,MAAM,CAAC6F,WAAW;IAC/BC,UAAU,EAAE9F,MAAM,CAAC+F,SAAS;IAC5BC,KAAK,EAAEhG,MAAM,CAACiG,IAAI;IAClBC,iBAAiB,EAAElG,MAAM,CAACmG,gBAAgB;IAC1CC,gBAAgB,EAAEpG,MAAM,CAACqG,eAAe;IACxCC,IAAI,EAAEtG,MAAM,CAACuG,aAAa;IAC1B/B,MAAM,EAAExE,MAAM,CAACwE,MAAAA;GAChB,CAAA;AACH,CAAC,CAAA;AAED,MAAMgC,eAAe,GAAIC,MAA6B,IAAoB;AACxE,EAAA,OAAOA,MAAM,CAACC,GAAG,CAAEC,CAAC,IAAI;IACtB,IAAIhG,OAAO,GAAG,EAAE,CAAA;IAChB,IAAIiG,KAAK,CAACC,OAAO,CAACF,CAAC,CAAChG,OAAO,CAAC,EAAE;MAC5BA,OAAO,GAAGgG,CAAC,CAAChG,OAAO,CAChB+F,GAAG,CAAEI,CAAC,IAAI;AACT,QAAA,IAAIA,CAAC,CAACC,IAAI,KAAK,MAAM,EAAE;UACrB,OAAOD,CAAC,CAACE,IAAI,CAAA;AACd,SAAA;AACD,QAAA,OAAO,EAAE,CAAA;AACX,OAAC,CAAC,CACDC,IAAI,CAAC,EAAE,CAAC,CAAA;AACZ,KAAA,MAAM;MACLtG,OAAO,GAAGgG,CAAC,CAAChG,OAAO,CAAA;AACpB,KAAA;IACD,OAAO;MACLD,IAAI,EAAEiG,CAAC,CAACjG,IAAI;AACZC,MAAAA,OAAAA;KACD,CAAA;AACH,GAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAEM,MAAMuG,+BAA+B,GAAGA,CAC7C7D,QAAiB,EACjBjC,KAAsB,EACtB2C,OAA+C,KAClB;AAC7B,EAAA,MAAMoD,UAAU,GAA8B;IAC5CC,YAAY,EAAE,OAAO;MAAEC,UAAU;AAAErH,MAAAA,MAAAA;AAAQ,KAAA,KAAI;AAC7C,MAAA,MAAMoE,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;AAC5B,MAAA,IAAIgD,YAAY,GAAG;AACjB,QAAA,GAAGvD,OAAO;QACV,GAAG6B,eAAe,CAAC5F,MAAM,CAAA;OAC1B,CAAA;MACD,IAAI;AACF,QAAA,MAAM0F,MAAM,GAAG,MAAM2B,UAAU,EAAE,CAAA;QACjC,MAAM/F,OAAO,GAAG,CAAC+C,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAE/CnD,QAAAA,kBAAkB,CAAC;AACjBJ,UAAAA,MAAM,EAAEwC,QAAQ;UAChBnC,UAAU,EAAE6C,OAAO,CAACC,iBAAiB;UACrC7C,OAAO,EAAE4C,OAAO,CAACE,cAAc;UAC/B7C,KAAK,EAAEA,KAAK,CAACmG,OAAO;AACpBjH,UAAAA,QAAQ,EAAE,QAAQ;AAClBS,UAAAA,KAAK,EAAEgD,OAAO,CAAC9B,kBAAkB,GAAG,EAAE,GAAGuE,eAAe,CAACxG,MAAM,CAACyG,MAAM,CAAC;AACvEpF,UAAAA,MAAM,EAAE,CAAC;YAAEV,OAAO,EAAE+E,MAAM,CAACsB,IAAI;AAAEtG,YAAAA,IAAI,EAAE,WAAA;WAAa,CAAC;UACrDY,OAAO;AACPC,UAAAA,OAAO,EAAE,EAAE;AACXvB,UAAAA,MAAM,EAAEsH,YAAmB;AAC3B9F,UAAAA,UAAU,EAAE,GAAG;AACfC,UAAAA,KAAK,EAAE;AACLY,YAAAA,WAAW,EAAEqD,MAAM,CAACjE,KAAK,CAAC+F,YAAY;AACtCjF,YAAAA,YAAY,EAAEmD,MAAM,CAACjE,KAAK,CAACgG,gBAAAA;AAC5B,WAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO/B,MAAM,CAAA;OACd,CAAC,OAAOH,KAAK,EAAE;AACdtE,QAAAA,kBAAkB,CAAC;AACjBJ,UAAAA,MAAM,EAAEwC,QAAQ;UAChBnC,UAAU,EAAE6C,OAAO,CAACC,iBAAiB;UACrC7C,OAAO,EAAE4C,OAAO,CAACE,cAAc;UAC/B7C,KAAK,EAAEA,KAAK,CAACmG,OAAO;AACpBjH,UAAAA,QAAQ,EAAE,QAAQ;AAClBS,UAAAA,KAAK,EAAEgD,OAAO,CAAC9B,kBAAkB,GAAG,EAAE,GAAGuE,eAAe,CAACxG,MAAM,CAACyG,MAAM,CAAC;AACvEpF,UAAAA,MAAM,EAAE,EAAE;AACVC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAE,EAAE;AACXvB,UAAAA,MAAM,EAAEsH,YAAmB;AAC3B9F,UAAAA,UAAU,EAAE,GAAG;AACfC,UAAAA,KAAK,EAAE;AACLY,YAAAA,WAAW,EAAE,CAAC;AACdE,YAAAA,YAAY,EAAE,CAAA;AACf,WAAA;AACF,SAAA,CAAC,CAAA;AACF,QAAA,MAAMgD,KAAK,CAAA;AACZ,OAAA;KACF;IAEDmC,UAAU,EAAE,OAAO;MAAEC,QAAQ;AAAE3H,MAAAA,MAAAA;AAAQ,KAAA,KAAI;AACzC,MAAA,MAAMoE,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE,CAAA;MAC5B,IAAIsD,aAAa,GAAG,EAAE,CAAA;MACtB,IAAInG,KAAK,GAAoD,EAAE,CAAA;AAC/D,MAAA,IAAI6F,YAAY,GAAG;AACjB,QAAA,GAAGvD,OAAO;QACV,GAAG6B,eAAe,CAAC5F,MAAM,CAAA;OAC1B,CAAA;MACD,IAAI;QACF,MAAM;UAAEwE,MAAM;UAAE,GAAGqD,IAAAA;SAAM,GAAG,MAAMF,QAAQ,EAAE,CAAA;AAE5C,QAAA,MAAMG,eAAe,GAAG,IAAIC,eAAe,CAAuD;AAChGC,UAAAA,SAASA,CAAChD,KAAK,EAAEiD,UAAU,EAAA;AACzB,YAAA,IAAIjD,KAAK,CAAC+B,IAAI,KAAK,YAAY,EAAE;cAC/Ba,aAAa,IAAI5C,KAAK,CAACkD,SAAS,CAAA;AACjC,aAAA;AACD,YAAA,IAAIlD,KAAK,CAAC+B,IAAI,KAAK,QAAQ,EAAE;AAC3BtF,cAAAA,KAAK,GAAG;AACNY,gBAAAA,WAAW,EAAE2C,KAAK,CAACvD,KAAK,EAAE+F,YAAY;AACtCjF,gBAAAA,YAAY,EAAEyC,KAAK,CAACvD,KAAK,EAAEgG,gBAAAA;eAC5B,CAAA;AACF,aAAA;AACDQ,YAAAA,UAAU,CAACE,OAAO,CAACnD,KAAK,CAAC,CAAA;WAC1B;AAEDoD,UAAAA,KAAKA,GAAA;YACH,MAAM9G,OAAO,GAAG,CAAC+C,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI,CAAA;AAC/CnD,YAAAA,kBAAkB,CAAC;AACjBJ,cAAAA,MAAM,EAAEwC,QAAQ;cAChBnC,UAAU,EAAE6C,OAAO,CAACC,iBAAiB;cACrC7C,OAAO,EAAE4C,OAAO,CAACE,cAAc;cAC/B7C,KAAK,EAAEA,KAAK,CAACmG,OAAO;AACpBjH,cAAAA,QAAQ,EAAE,QAAQ;AAClBS,cAAAA,KAAK,EAAEgD,OAAO,CAAC9B,kBAAkB,GAAG,EAAE,GAAGuE,eAAe,CAACxG,MAAM,CAACyG,MAAM,CAAC;AACvEpF,cAAAA,MAAM,EAAE,CAAC;AAAEV,gBAAAA,OAAO,EAAEiH,aAAa;AAAElH,gBAAAA,IAAI,EAAE,WAAA;AAAW,eAAE,CAAC;cACvDY,OAAO;AACPC,cAAAA,OAAO,EAAE,EAAE;AACXvB,cAAAA,MAAM,EAAEsH,YAAmB;AAC3B9F,cAAAA,UAAU,EAAE,GAAG;AACfC,cAAAA,KAAAA;AACD,aAAA,CAAC,CAAA;AACJ,WAAA;AACD,SAAA,CAAC,CAAA;QAEF,OAAO;AACL+C,UAAAA,MAAM,EAAEA,MAAM,CAAC6D,WAAW,CAACP,eAAe,CAAC;UAC3C,GAAGD,IAAAA;SACJ,CAAA;OACF,CAAC,OAAOtC,KAAK,EAAE;AACdtE,QAAAA,kBAAkB,CAAC;AACjBJ,UAAAA,MAAM,EAAEwC,QAAQ;UAChBnC,UAAU,EAAE6C,OAAO,CAACC,iBAAiB;UACrC7C,OAAO,EAAE4C,OAAO,CAACE,cAAc;UAC/B7C,KAAK,EAAEA,KAAK,CAACmG,OAAO;AACpBjH,UAAAA,QAAQ,EAAE,QAAQ;AAClBS,UAAAA,KAAK,EAAEgD,OAAO,CAAC9B,kBAAkB,GAAG,EAAE,GAAGuE,eAAe,CAACxG,MAAM,CAACyG,MAAM,CAAC;AACvEpF,UAAAA,MAAM,EAAE,EAAE;AACVC,UAAAA,OAAO,EAAE,CAAC;AACVC,UAAAA,OAAO,EAAE,EAAE;AACXvB,UAAAA,MAAM,EAAEsH,YAAmB;AAC3B9F,UAAAA,UAAU,EAAE,GAAG;AACfC,UAAAA,KAAK,EAAE;AACLY,YAAAA,WAAW,EAAE,CAAC;AACdE,YAAAA,YAAY,EAAE,CAAA;AACf,WAAA;AACF,SAAA,CAAC,CAAA;AACF,QAAA,MAAMgD,KAAK,CAAA;AACZ,OAAA;AACH,KAAA;GACD,CAAA;AAED,EAAA,OAAO4B,UAAU,CAAA;AACnB,CAAC,CAAA;AAEM,MAAMmB,uBAAuB,GAAGA,CACrClH,KAAsB,EACtBiC,QAAiB,EACjBU,OAA+C,KAC5B;EACnB,MAAM5C,OAAO,GAAG4C,OAAO,CAACE,cAAc,IAAIE,OAAM,EAAE,CAAA;AAClD,EAAA,MAAMgD,UAAU,GAAGD,+BAA+B,CAAC7D,QAAQ,EAAEjC,KAAK,EAAE;AAClE,IAAA,GAAG2C,OAAO;AACVE,IAAAA,cAAc,EAAE9C,OAAO;AACvB6C,IAAAA,iBAAiB,EAAED,OAAO,CAACC,iBAAiB,IAAI7C,OAAAA;AACjD,GAAA,CAAC,CAAA;EAEF,MAAMoH,YAAY,GAAGC,iCAAiB,CAAC;IACrCpH,KAAK;AACL+F,IAAAA,UAAAA;AACD,GAAA,CAAC,CAAA;AAEF,EAAA,OAAOoB,YAAY,CAAA;AACrB;;;;;"}
1
+ {"version":3,"file":"index.cjs.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}\n\ninterface CreateInstrumentationMiddlewareOptions {\n posthogDistinctId: string\n posthogTraceId: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\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 = result.response?.modelId ? result.response.modelId : model.modelId\n\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: [{ 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 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: model.modelId,\n provider: model.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: 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\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","response","promptTokens","completionTokens","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","wrappedModel","wrapLanguageModel"],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import OpenAIOrignal from 'openai';
1
+ import OpenAIOrignal, { AzureOpenAI } from 'openai';
2
2
  import { PostHog } from 'posthog-node';
3
3
  import { RequestOptions, APIPromise } from 'openai/core';
4
4
  import { Stream } from 'openai/streaming';
@@ -12,6 +12,34 @@ interface MonitoringParams {
12
12
  posthogGroups?: Record<string, any>;
13
13
  }
14
14
 
15
+ type ChatCompletion$1 = OpenAIOrignal.ChatCompletion;
16
+ type ChatCompletionChunk$1 = OpenAIOrignal.ChatCompletionChunk;
17
+ type ChatCompletionCreateParamsBase$1 = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams;
18
+ type ChatCompletionCreateParamsNonStreaming$1 = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming;
19
+ type ChatCompletionCreateParamsStreaming$1 = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming;
20
+
21
+ interface MonitoringOpenAIConfig$1 {
22
+ apiKey: string;
23
+ posthog: PostHog;
24
+ baseURL?: string;
25
+ }
26
+ declare class PostHogOpenAI extends OpenAIOrignal {
27
+ private readonly phClient;
28
+ chat: WrappedChat$1;
29
+ constructor(config: MonitoringOpenAIConfig$1);
30
+ }
31
+ declare class WrappedChat$1 extends OpenAIOrignal.Chat {
32
+ constructor(parentClient: PostHogOpenAI, phClient: PostHog);
33
+ completions: WrappedCompletions$1;
34
+ }
35
+ declare class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
36
+ private readonly phClient;
37
+ constructor(client: OpenAIOrignal, phClient: PostHog);
38
+ create(body: ChatCompletionCreateParamsNonStreaming$1 & MonitoringParams, options?: RequestOptions): APIPromise<ChatCompletion$1>;
39
+ create(body: ChatCompletionCreateParamsStreaming$1 & MonitoringParams, options?: RequestOptions): APIPromise<Stream<ChatCompletionChunk$1>>;
40
+ create(body: ChatCompletionCreateParamsBase$1 & MonitoringParams, options?: RequestOptions): APIPromise<ChatCompletion$1 | Stream<ChatCompletionChunk$1>>;
41
+ }
42
+
15
43
  type ChatCompletion = OpenAIOrignal.ChatCompletion;
16
44
  type ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk;
17
45
  type ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams;
@@ -23,30 +51,30 @@ interface MonitoringOpenAIConfig {
23
51
  posthog: PostHog;
24
52
  baseURL?: string;
25
53
  }
26
- declare class PostHogOpenAI extends OpenAIOrignal {
54
+ declare class PostHogAzureOpenAI extends AzureOpenAI {
27
55
  private readonly phClient;
28
56
  chat: WrappedChat;
29
57
  constructor(config: MonitoringOpenAIConfig);
30
58
  }
31
- declare class WrappedChat extends OpenAIOrignal.Chat {
32
- constructor(parentClient: PostHogOpenAI, phClient: PostHog);
59
+ declare class WrappedChat extends AzureOpenAI.Chat {
60
+ constructor(parentClient: PostHogAzureOpenAI, phClient: PostHog);
33
61
  completions: WrappedCompletions;
34
62
  }
35
- declare class WrappedCompletions extends OpenAIOrignal.Chat.Completions {
63
+ declare class WrappedCompletions extends AzureOpenAI.Chat.Completions {
36
64
  private readonly phClient;
37
- constructor(client: OpenAIOrignal, phClient: PostHog);
65
+ constructor(client: AzureOpenAI, phClient: PostHog);
38
66
  create(body: ChatCompletionCreateParamsNonStreaming & MonitoringParams, options?: RequestOptions): APIPromise<ChatCompletion>;
39
67
  create(body: ChatCompletionCreateParamsStreaming & MonitoringParams, options?: RequestOptions): APIPromise<Stream<ChatCompletionChunk>>;
40
68
  create(body: ChatCompletionCreateParamsBase & MonitoringParams, options?: RequestOptions): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>;
41
69
  }
42
70
 
43
- interface CreateInstrumentationMiddlewareOptions {
71
+ interface ClientOptions {
44
72
  posthogDistinctId?: string;
45
- posthogTraceId: string;
73
+ posthogTraceId?: string;
46
74
  posthogProperties?: Record<string, any>;
47
75
  posthogPrivacyMode?: boolean;
48
76
  posthogGroups?: Record<string, any>;
49
77
  }
50
- declare const wrapVercelLanguageModel: (model: LanguageModelV1, phClient: PostHog, options: CreateInstrumentationMiddlewareOptions) => LanguageModelV1;
78
+ declare const wrapVercelLanguageModel: (model: LanguageModelV1, phClient: PostHog, options: ClientOptions) => LanguageModelV1;
51
79
 
52
- export { PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };
80
+ export { PostHogAzureOpenAI as AzureOpenAI, PostHogOpenAI as OpenAI, wrapVercelLanguageModel as withTracing };