@posthog/ai 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/index.cjs.js +14 -4
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.esm.js +14 -4
- package/lib/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/openai/azure.ts +1 -0
- package/src/openai/index.ts +1 -0
- package/src/vercel/middleware.ts +15 -7
package/README.md
CHANGED
package/lib/index.cjs.js
CHANGED
|
@@ -116,6 +116,7 @@ class WrappedCompletions$1 extends OpenAIOrignal__default["default"].Chat.Comple
|
|
|
116
116
|
posthogDistinctId,
|
|
117
117
|
posthogTraceId,
|
|
118
118
|
posthogProperties,
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
119
120
|
posthogPrivacyMode = false,
|
|
120
121
|
posthogGroups,
|
|
121
122
|
...openAIParams
|
|
@@ -275,6 +276,7 @@ class WrappedCompletions extends OpenAIOrignal.AzureOpenAI.Chat.Completions {
|
|
|
275
276
|
posthogDistinctId,
|
|
276
277
|
posthogTraceId,
|
|
277
278
|
posthogProperties,
|
|
279
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
278
280
|
posthogPrivacyMode = false,
|
|
279
281
|
posthogGroups,
|
|
280
282
|
...openAIParams
|
|
@@ -444,6 +446,12 @@ const mapVercelPrompt = prompt => {
|
|
|
444
446
|
};
|
|
445
447
|
});
|
|
446
448
|
};
|
|
449
|
+
const extractProvider = model => {
|
|
450
|
+
// vercel provider is in the format of provider.endpoint
|
|
451
|
+
const provider = model.provider.toLowerCase();
|
|
452
|
+
const providerName = provider.split('.')[0];
|
|
453
|
+
return providerName;
|
|
454
|
+
};
|
|
447
455
|
const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
448
456
|
const middleware = {
|
|
449
457
|
wrapGenerate: async ({
|
|
@@ -459,7 +467,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
459
467
|
const result = await doGenerate();
|
|
460
468
|
const latency = (Date.now() - startTime) / 1000;
|
|
461
469
|
const modelId = options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId);
|
|
462
|
-
const provider = options.posthogProviderOverride ?? model
|
|
470
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model);
|
|
471
|
+
const baseURL = ''; // cannot currently get baseURL from vercel
|
|
463
472
|
sendEventToPosthog({
|
|
464
473
|
client: phClient,
|
|
465
474
|
distinctId: options.posthogDistinctId,
|
|
@@ -472,7 +481,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
472
481
|
role: 'assistant'
|
|
473
482
|
}],
|
|
474
483
|
latency,
|
|
475
|
-
baseURL
|
|
484
|
+
baseURL,
|
|
476
485
|
params: mergedParams,
|
|
477
486
|
httpStatus: 200,
|
|
478
487
|
usage: {
|
|
@@ -517,7 +526,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
517
526
|
...mapVercelParams(params)
|
|
518
527
|
};
|
|
519
528
|
const modelId = options.posthogModelOverride ?? model.modelId;
|
|
520
|
-
const provider = options.posthogProviderOverride ?? model
|
|
529
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model);
|
|
530
|
+
const baseURL = ''; // cannot currently get baseURL from vercel
|
|
521
531
|
try {
|
|
522
532
|
const {
|
|
523
533
|
stream,
|
|
@@ -550,7 +560,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
550
560
|
role: 'assistant'
|
|
551
561
|
}],
|
|
552
562
|
latency,
|
|
553
|
-
baseURL
|
|
563
|
+
baseURL,
|
|
554
564
|
params: mergedParams,
|
|
555
565
|
httpStatus: 200,
|
|
556
566
|
usage
|
package/lib/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 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.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 // 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: 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 // 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: 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\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"],"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","extractProvider","toLowerCase","providerName","split","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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"}
|
package/lib/index.esm.js
CHANGED
|
@@ -108,6 +108,7 @@ class WrappedCompletions$1 extends OpenAIOrignal.Chat.Completions {
|
|
|
108
108
|
posthogDistinctId,
|
|
109
109
|
posthogTraceId,
|
|
110
110
|
posthogProperties,
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
111
112
|
posthogPrivacyMode = false,
|
|
112
113
|
posthogGroups,
|
|
113
114
|
...openAIParams
|
|
@@ -267,6 +268,7 @@ class WrappedCompletions extends AzureOpenAI.Chat.Completions {
|
|
|
267
268
|
posthogDistinctId,
|
|
268
269
|
posthogTraceId,
|
|
269
270
|
posthogProperties,
|
|
271
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
270
272
|
posthogPrivacyMode = false,
|
|
271
273
|
posthogGroups,
|
|
272
274
|
...openAIParams
|
|
@@ -436,6 +438,12 @@ const mapVercelPrompt = prompt => {
|
|
|
436
438
|
};
|
|
437
439
|
});
|
|
438
440
|
};
|
|
441
|
+
const extractProvider = model => {
|
|
442
|
+
// vercel provider is in the format of provider.endpoint
|
|
443
|
+
const provider = model.provider.toLowerCase();
|
|
444
|
+
const providerName = provider.split('.')[0];
|
|
445
|
+
return providerName;
|
|
446
|
+
};
|
|
439
447
|
const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
440
448
|
const middleware = {
|
|
441
449
|
wrapGenerate: async ({
|
|
@@ -451,7 +459,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
451
459
|
const result = await doGenerate();
|
|
452
460
|
const latency = (Date.now() - startTime) / 1000;
|
|
453
461
|
const modelId = options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId);
|
|
454
|
-
const provider = options.posthogProviderOverride ?? model
|
|
462
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model);
|
|
463
|
+
const baseURL = ''; // cannot currently get baseURL from vercel
|
|
455
464
|
sendEventToPosthog({
|
|
456
465
|
client: phClient,
|
|
457
466
|
distinctId: options.posthogDistinctId,
|
|
@@ -464,7 +473,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
464
473
|
role: 'assistant'
|
|
465
474
|
}],
|
|
466
475
|
latency,
|
|
467
|
-
baseURL
|
|
476
|
+
baseURL,
|
|
468
477
|
params: mergedParams,
|
|
469
478
|
httpStatus: 200,
|
|
470
479
|
usage: {
|
|
@@ -509,7 +518,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
509
518
|
...mapVercelParams(params)
|
|
510
519
|
};
|
|
511
520
|
const modelId = options.posthogModelOverride ?? model.modelId;
|
|
512
|
-
const provider = options.posthogProviderOverride ?? model
|
|
521
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model);
|
|
522
|
+
const baseURL = ''; // cannot currently get baseURL from vercel
|
|
513
523
|
try {
|
|
514
524
|
const {
|
|
515
525
|
stream,
|
|
@@ -542,7 +552,7 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
542
552
|
role: 'assistant'
|
|
543
553
|
}],
|
|
544
554
|
latency,
|
|
545
|
-
baseURL
|
|
555
|
+
baseURL,
|
|
546
556
|
params: mergedParams,
|
|
547
557
|
httpStatus: 200,
|
|
548
558
|
usage
|
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"],"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 // 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: 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 // 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: 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\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"],"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","extractProvider","toLowerCase","providerName","split","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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"}
|
package/package.json
CHANGED
package/src/openai/azure.ts
CHANGED
|
@@ -74,6 +74,7 @@ export class WrappedCompletions extends AzureOpenAI.Chat.Completions {
|
|
|
74
74
|
posthogDistinctId,
|
|
75
75
|
posthogTraceId,
|
|
76
76
|
posthogProperties,
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
77
78
|
posthogPrivacyMode = false,
|
|
78
79
|
posthogGroups,
|
|
79
80
|
...openAIParams
|
package/src/openai/index.ts
CHANGED
|
@@ -74,6 +74,7 @@ export class WrappedCompletions extends OpenAIOrignal.Chat.Completions {
|
|
|
74
74
|
posthogDistinctId,
|
|
75
75
|
posthogTraceId,
|
|
76
76
|
posthogProperties,
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
77
78
|
posthogPrivacyMode = false,
|
|
78
79
|
posthogGroups,
|
|
79
80
|
...openAIParams
|
package/src/vercel/middleware.ts
CHANGED
|
@@ -68,6 +68,13 @@ const mapVercelPrompt = (prompt: LanguageModelV1Prompt): PostHogInput[] => {
|
|
|
68
68
|
})
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
const extractProvider = (model: LanguageModelV1): string => {
|
|
72
|
+
// vercel provider is in the format of provider.endpoint
|
|
73
|
+
const provider = model.provider.toLowerCase()
|
|
74
|
+
const providerName = provider.split('.')[0]
|
|
75
|
+
return providerName
|
|
76
|
+
}
|
|
77
|
+
|
|
71
78
|
export const createInstrumentationMiddleware = (
|
|
72
79
|
phClient: PostHog,
|
|
73
80
|
model: LanguageModelV1,
|
|
@@ -83,9 +90,10 @@ export const createInstrumentationMiddleware = (
|
|
|
83
90
|
try {
|
|
84
91
|
const result = await doGenerate()
|
|
85
92
|
const latency = (Date.now() - startTime) / 1000
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const provider = options.posthogProviderOverride ?? model
|
|
93
|
+
const modelId =
|
|
94
|
+
options.posthogModelOverride ?? (result.response?.modelId ? result.response.modelId : model.modelId)
|
|
95
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model)
|
|
96
|
+
const baseURL = '' // cannot currently get baseURL from vercel
|
|
89
97
|
|
|
90
98
|
sendEventToPosthog({
|
|
91
99
|
client: phClient,
|
|
@@ -96,7 +104,7 @@ export const createInstrumentationMiddleware = (
|
|
|
96
104
|
input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
|
|
97
105
|
output: [{ content: result.text, role: 'assistant' }],
|
|
98
106
|
latency,
|
|
99
|
-
baseURL
|
|
107
|
+
baseURL,
|
|
100
108
|
params: mergedParams as any,
|
|
101
109
|
httpStatus: 200,
|
|
102
110
|
usage: {
|
|
@@ -141,10 +149,10 @@ export const createInstrumentationMiddleware = (
|
|
|
141
149
|
}
|
|
142
150
|
|
|
143
151
|
const modelId = options.posthogModelOverride ?? model.modelId
|
|
144
|
-
const provider = options.posthogProviderOverride ?? model
|
|
152
|
+
const provider = options.posthogProviderOverride ?? extractProvider(model)
|
|
153
|
+
const baseURL = '' // cannot currently get baseURL from vercel
|
|
145
154
|
try {
|
|
146
155
|
const { stream, ...rest } = await doStream()
|
|
147
|
-
|
|
148
156
|
const transformStream = new TransformStream<LanguageModelV1StreamPart, LanguageModelV1StreamPart>({
|
|
149
157
|
transform(chunk, controller) {
|
|
150
158
|
if (chunk.type === 'text-delta') {
|
|
@@ -170,7 +178,7 @@ export const createInstrumentationMiddleware = (
|
|
|
170
178
|
input: options.posthogPrivacyMode ? '' : mapVercelPrompt(params.prompt),
|
|
171
179
|
output: [{ content: generatedText, role: 'assistant' }],
|
|
172
180
|
latency,
|
|
173
|
-
baseURL
|
|
181
|
+
baseURL,
|
|
174
182
|
params: mergedParams as any,
|
|
175
183
|
httpStatus: 200,
|
|
176
184
|
usage,
|