@posthog/ai 4.0.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/lib/anthropic/index.cjs.js +32 -25
- package/lib/anthropic/index.cjs.js.map +1 -1
- package/lib/anthropic/index.d.ts +1 -0
- package/lib/anthropic/index.esm.js +32 -25
- package/lib/anthropic/index.esm.js.map +1 -1
- package/lib/index.cjs.js +131 -55
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.esm.js +131 -55
- package/lib/index.esm.js.map +1 -1
- package/lib/langchain/index.cjs.js.map +1 -1
- package/lib/langchain/index.esm.js.map +1 -1
- package/lib/openai/index.cjs.js +32 -25
- package/lib/openai/index.cjs.js.map +1 -1
- package/lib/openai/index.d.ts +1 -0
- package/lib/openai/index.esm.js +32 -25
- package/lib/openai/index.esm.js.map +1 -1
- package/lib/posthog-ai/src/utils.d.ts +5 -1
- package/lib/posthog-ai/src/vercel/middleware.d.ts +2 -0
- package/lib/vercel/index.cjs.js +132 -55
- package/lib/vercel/index.cjs.js.map +1 -1
- package/lib/vercel/index.d.ts +1 -0
- package/lib/vercel/index.esm.js +132 -55
- package/lib/vercel/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/utils.ts +48 -20
- package/src/vercel/middleware.ts +68 -19
package/lib/vercel/index.cjs.js
CHANGED
|
@@ -6,6 +6,9 @@ var ai = require('ai');
|
|
|
6
6
|
var uuid = require('uuid');
|
|
7
7
|
var buffer = require('buffer');
|
|
8
8
|
|
|
9
|
+
// limit large outputs by truncating to 200kb (approx 200k bytes)
|
|
10
|
+
const MAX_OUTPUT_SIZE = 200000;
|
|
11
|
+
const STRING_FORMAT = 'utf8';
|
|
9
12
|
const getModelParams = params => {
|
|
10
13
|
if (!params) {
|
|
11
14
|
return {};
|
|
@@ -22,13 +25,26 @@ const getModelParams = params => {
|
|
|
22
25
|
const withPrivacyMode = (client, privacyMode, input) => {
|
|
23
26
|
return client.privacy_mode || privacyMode ? null : input;
|
|
24
27
|
};
|
|
28
|
+
const truncate = str => {
|
|
29
|
+
try {
|
|
30
|
+
const buffer$1 = buffer.Buffer.from(str, STRING_FORMAT);
|
|
31
|
+
if (buffer$1.length <= MAX_OUTPUT_SIZE) {
|
|
32
|
+
return str;
|
|
33
|
+
}
|
|
34
|
+
const truncatedBuffer = buffer$1.slice(0, MAX_OUTPUT_SIZE);
|
|
35
|
+
return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.error('Error truncating, likely not a string');
|
|
38
|
+
return str;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
25
41
|
function sanitizeValues(obj) {
|
|
26
42
|
if (obj === undefined || obj === null) {
|
|
27
43
|
return obj;
|
|
28
44
|
}
|
|
29
45
|
const jsonSafe = JSON.parse(JSON.stringify(obj));
|
|
30
46
|
if (typeof jsonSafe === 'string') {
|
|
31
|
-
return buffer.Buffer.from(jsonSafe,
|
|
47
|
+
return buffer.Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT);
|
|
32
48
|
} else if (Array.isArray(jsonSafe)) {
|
|
33
49
|
return jsonSafe.map(sanitizeValues);
|
|
34
50
|
} else if (jsonSafe && typeof jsonSafe === 'object') {
|
|
@@ -51,7 +67,8 @@ const sendEventToPosthog = ({
|
|
|
51
67
|
usage = {},
|
|
52
68
|
isError = false,
|
|
53
69
|
error,
|
|
54
|
-
tools
|
|
70
|
+
tools,
|
|
71
|
+
fullDebug = false
|
|
55
72
|
}) => {
|
|
56
73
|
if (client.capture) {
|
|
57
74
|
// sanitize input and output for UTF-8 validity
|
|
@@ -86,32 +103,37 @@ const sendEventToPosthog = ({
|
|
|
86
103
|
$ai_cache_creation_input_tokens: usage.cacheCreationInputTokens
|
|
87
104
|
} : {})
|
|
88
105
|
};
|
|
106
|
+
const properties = {
|
|
107
|
+
$ai_provider: params.posthogProviderOverride ?? provider,
|
|
108
|
+
$ai_model: params.posthogModelOverride ?? model,
|
|
109
|
+
$ai_model_parameters: getModelParams(params),
|
|
110
|
+
$ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),
|
|
111
|
+
$ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),
|
|
112
|
+
$ai_http_status: httpStatus,
|
|
113
|
+
$ai_input_tokens: usage.inputTokens ?? 0,
|
|
114
|
+
$ai_output_tokens: usage.outputTokens ?? 0,
|
|
115
|
+
...additionalTokenValues,
|
|
116
|
+
$ai_latency: latency,
|
|
117
|
+
$ai_trace_id: traceId,
|
|
118
|
+
$ai_base_url: baseURL,
|
|
119
|
+
...params.posthogProperties,
|
|
120
|
+
...(distinctId ? {} : {
|
|
121
|
+
$process_person_profile: false
|
|
122
|
+
}),
|
|
123
|
+
...(tools ? {
|
|
124
|
+
$ai_tools: tools
|
|
125
|
+
} : {}),
|
|
126
|
+
...errorData,
|
|
127
|
+
...costOverrideData
|
|
128
|
+
};
|
|
129
|
+
if (fullDebug) {
|
|
130
|
+
// @ts-ignore
|
|
131
|
+
console.log('Sending event to PostHog', properties);
|
|
132
|
+
}
|
|
89
133
|
client.capture({
|
|
90
134
|
distinctId: distinctId ?? traceId,
|
|
91
135
|
event: '$ai_generation',
|
|
92
|
-
properties
|
|
93
|
-
$ai_provider: params.posthogProviderOverride ?? provider,
|
|
94
|
-
$ai_model: params.posthogModelOverride ?? model,
|
|
95
|
-
$ai_model_parameters: getModelParams(params),
|
|
96
|
-
$ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),
|
|
97
|
-
$ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),
|
|
98
|
-
$ai_http_status: httpStatus,
|
|
99
|
-
$ai_input_tokens: usage.inputTokens ?? 0,
|
|
100
|
-
$ai_output_tokens: usage.outputTokens ?? 0,
|
|
101
|
-
...additionalTokenValues,
|
|
102
|
-
$ai_latency: latency,
|
|
103
|
-
$ai_trace_id: traceId,
|
|
104
|
-
$ai_base_url: baseURL,
|
|
105
|
-
...params.posthogProperties,
|
|
106
|
-
...(distinctId ? {} : {
|
|
107
|
-
$process_person_profile: false
|
|
108
|
-
}),
|
|
109
|
-
...(tools ? {
|
|
110
|
-
$ai_tools: tools
|
|
111
|
-
} : {}),
|
|
112
|
-
...errorData,
|
|
113
|
-
...costOverrideData
|
|
114
|
-
},
|
|
136
|
+
properties,
|
|
115
137
|
groups: params.posthogGroups
|
|
116
138
|
});
|
|
117
139
|
}
|
|
@@ -129,14 +151,28 @@ const mapVercelParams = params => {
|
|
|
129
151
|
};
|
|
130
152
|
};
|
|
131
153
|
const mapVercelPrompt = prompt => {
|
|
132
|
-
|
|
154
|
+
// normalize single inputs into an array of messages
|
|
155
|
+
let promptsArray;
|
|
156
|
+
if (typeof prompt === 'string') {
|
|
157
|
+
promptsArray = [{
|
|
158
|
+
role: 'user',
|
|
159
|
+
content: prompt
|
|
160
|
+
}];
|
|
161
|
+
} else if (!Array.isArray(prompt)) {
|
|
162
|
+
promptsArray = [prompt];
|
|
163
|
+
} else {
|
|
164
|
+
promptsArray = prompt;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Map and truncate individual content
|
|
168
|
+
const inputs = promptsArray.map(p => {
|
|
133
169
|
let content = {};
|
|
134
170
|
if (Array.isArray(p.content)) {
|
|
135
171
|
content = p.content.map(c => {
|
|
136
172
|
if (c.type === 'text') {
|
|
137
173
|
return {
|
|
138
174
|
type: 'text',
|
|
139
|
-
content: c.text
|
|
175
|
+
content: truncate(c.text)
|
|
140
176
|
};
|
|
141
177
|
} else if (c.type === 'image') {
|
|
142
178
|
return {
|
|
@@ -182,7 +218,7 @@ const mapVercelPrompt = prompt => {
|
|
|
182
218
|
} else {
|
|
183
219
|
content = {
|
|
184
220
|
type: 'text',
|
|
185
|
-
text: p.content
|
|
221
|
+
text: truncate(p.content)
|
|
186
222
|
};
|
|
187
223
|
}
|
|
188
224
|
return {
|
|
@@ -190,48 +226,85 @@ const mapVercelPrompt = prompt => {
|
|
|
190
226
|
content
|
|
191
227
|
};
|
|
192
228
|
});
|
|
229
|
+
try {
|
|
230
|
+
// Trim the inputs array until its JSON size fits within MAX_OUTPUT_SIZE
|
|
231
|
+
let serialized = JSON.stringify(inputs);
|
|
232
|
+
while (buffer.Buffer.byteLength(serialized, 'utf8') > MAX_OUTPUT_SIZE && inputs.length > 0) {
|
|
233
|
+
// Remove oldest message
|
|
234
|
+
inputs.shift();
|
|
235
|
+
// add blank message to beginning of array
|
|
236
|
+
inputs.unshift({
|
|
237
|
+
role: 'assistant',
|
|
238
|
+
content: '[removed message due to size limit]'
|
|
239
|
+
});
|
|
240
|
+
serialized = JSON.stringify(inputs);
|
|
241
|
+
}
|
|
242
|
+
} catch (error) {
|
|
243
|
+
console.error('Error stringifying inputs');
|
|
244
|
+
return [{
|
|
245
|
+
role: 'posthog',
|
|
246
|
+
content: 'An error occurred while processing your request. Please try again.'
|
|
247
|
+
}];
|
|
248
|
+
}
|
|
249
|
+
return inputs;
|
|
193
250
|
};
|
|
194
251
|
const mapVercelOutput = result => {
|
|
252
|
+
// normalize string results to object
|
|
253
|
+
const normalizedResult = typeof result === 'string' ? {
|
|
254
|
+
text: result
|
|
255
|
+
} : result;
|
|
195
256
|
const output = {
|
|
196
|
-
...(
|
|
197
|
-
text:
|
|
257
|
+
...(normalizedResult.text ? {
|
|
258
|
+
text: normalizedResult.text
|
|
198
259
|
} : {}),
|
|
199
|
-
...(
|
|
200
|
-
object:
|
|
260
|
+
...(normalizedResult.object ? {
|
|
261
|
+
object: normalizedResult.object
|
|
201
262
|
} : {}),
|
|
202
|
-
...(
|
|
203
|
-
reasoning:
|
|
263
|
+
...(normalizedResult.reasoning ? {
|
|
264
|
+
reasoning: normalizedResult.reasoning
|
|
204
265
|
} : {}),
|
|
205
|
-
...(
|
|
206
|
-
response:
|
|
266
|
+
...(normalizedResult.response ? {
|
|
267
|
+
response: normalizedResult.response
|
|
207
268
|
} : {}),
|
|
208
|
-
...(
|
|
209
|
-
finishReason:
|
|
269
|
+
...(normalizedResult.finishReason ? {
|
|
270
|
+
finishReason: normalizedResult.finishReason
|
|
210
271
|
} : {}),
|
|
211
|
-
...(
|
|
212
|
-
usage:
|
|
272
|
+
...(normalizedResult.usage ? {
|
|
273
|
+
usage: normalizedResult.usage
|
|
213
274
|
} : {}),
|
|
214
|
-
...(
|
|
215
|
-
warnings:
|
|
275
|
+
...(normalizedResult.warnings ? {
|
|
276
|
+
warnings: normalizedResult.warnings
|
|
216
277
|
} : {}),
|
|
217
|
-
...(
|
|
218
|
-
toolCalls:
|
|
278
|
+
...(normalizedResult.providerMetadata ? {
|
|
279
|
+
toolCalls: normalizedResult.providerMetadata
|
|
280
|
+
} : {}),
|
|
281
|
+
...(normalizedResult.files ? {
|
|
282
|
+
files: normalizedResult.files.map(file => ({
|
|
283
|
+
name: file.name,
|
|
284
|
+
size: file.size,
|
|
285
|
+
type: file.type
|
|
286
|
+
}))
|
|
219
287
|
} : {})
|
|
220
288
|
};
|
|
221
|
-
// if text and no object or reasoning, return text
|
|
222
289
|
if (output.text && !output.object && !output.reasoning) {
|
|
223
290
|
return [{
|
|
224
|
-
content: output.text,
|
|
291
|
+
content: truncate(output.text),
|
|
292
|
+
role: 'assistant'
|
|
293
|
+
}];
|
|
294
|
+
}
|
|
295
|
+
// otherwise stringify and truncate
|
|
296
|
+
try {
|
|
297
|
+
const jsonOutput = JSON.stringify(output);
|
|
298
|
+
return [{
|
|
299
|
+
content: truncate(jsonOutput),
|
|
225
300
|
role: 'assistant'
|
|
226
301
|
}];
|
|
302
|
+
} catch (error) {
|
|
303
|
+
console.error('Error stringifying output');
|
|
304
|
+
return [];
|
|
227
305
|
}
|
|
228
|
-
return [{
|
|
229
|
-
content: JSON.stringify(output),
|
|
230
|
-
role: 'assistant'
|
|
231
|
-
}];
|
|
232
306
|
};
|
|
233
307
|
const extractProvider = model => {
|
|
234
|
-
// vercel provider is in the format of provider.endpoint
|
|
235
308
|
const provider = model.provider.toLowerCase();
|
|
236
309
|
const providerName = provider.split('.')[0];
|
|
237
310
|
return providerName;
|
|
@@ -287,7 +360,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
287
360
|
inputTokens: result.usage.promptTokens,
|
|
288
361
|
outputTokens: result.usage.completionTokens,
|
|
289
362
|
...additionalTokenValues
|
|
290
|
-
}
|
|
363
|
+
},
|
|
364
|
+
fullDebug: options.fullDebug
|
|
291
365
|
});
|
|
292
366
|
return result;
|
|
293
367
|
} catch (error) {
|
|
@@ -309,7 +383,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
309
383
|
outputTokens: 0
|
|
310
384
|
},
|
|
311
385
|
isError: true,
|
|
312
|
-
error: JSON.stringify(error)
|
|
386
|
+
error: truncate(JSON.stringify(error)),
|
|
387
|
+
fullDebug: options.fullDebug
|
|
313
388
|
});
|
|
314
389
|
throw error;
|
|
315
390
|
}
|
|
@@ -375,7 +450,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
375
450
|
baseURL,
|
|
376
451
|
params: mergedParams,
|
|
377
452
|
httpStatus: 200,
|
|
378
|
-
usage
|
|
453
|
+
usage,
|
|
454
|
+
fullDebug: options.fullDebug
|
|
379
455
|
});
|
|
380
456
|
}
|
|
381
457
|
});
|
|
@@ -401,7 +477,8 @@ const createInstrumentationMiddleware = (phClient, model, options) => {
|
|
|
401
477
|
outputTokens: 0
|
|
402
478
|
},
|
|
403
479
|
isError: true,
|
|
404
|
-
error: JSON.stringify(error)
|
|
480
|
+
error: truncate(JSON.stringify(error)),
|
|
481
|
+
fullDebug: options.fullDebug
|
|
405
482
|
});
|
|
406
483
|
throw error;
|
|
407
484
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/utils.ts","../../src/vercel/middleware.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams) | null\n): Record<string, any> => {\n if (!params) {\n return {}\n }\n const modelParams: Record<string, any> = {}\n const paramKeys = [\n 'temperature',\n 'max_tokens',\n 'max_completion_tokens',\n 'top_p',\n 'frequency_penalty',\n 'presence_penalty',\n 'n',\n 'stop',\n 'stream',\n 'streaming',\n ] as const\n\n for (const key of paramKeys) {\n if (key in params && (params as any)[key] !== undefined) {\n modelParams[key] = (params as any)[key]\n }\n }\n return modelParams\n}\n\n/**\n * Helper to format responses (non-streaming) for consumption, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\n if (!response) {\n return []\n }\n if (provider === 'anthropic') {\n return formatResponseAnthropic(response)\n } else if (provider === 'openai') {\n return formatResponseOpenAI(response)\n }\n return []\n}\n\nexport const formatResponseAnthropic = (response: any): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const mergeSystemPrompt = (params: MessageCreateParams & MonitoringParams, provider: string): any => {\n if (provider == 'anthropic') {\n const messages = params.messages || []\n if (!(params as any).system) {\n return messages\n }\n const systemMessage = (params as any).system\n return [{ role: 'system', content: systemMessage }, ...messages]\n }\n return params.messages\n}\n\nexport const withPrivacyMode = (client: PostHog, privacyMode: boolean, input: any): any => {\n return (client as any).privacy_mode || privacyMode ? null : input\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n}\n\nfunction sanitizeValues(obj: any): any {\n if (obj === undefined || obj === null) {\n return obj\n }\n const jsonSafe = JSON.parse(JSON.stringify(obj))\n if (typeof jsonSafe === 'string') {\n return Buffer.from(jsonSafe, 'utf8').toString('utf8')\n } else if (Array.isArray(jsonSafe)) {\n return jsonSafe.map(sanitizeValues)\n } else if (jsonSafe && typeof jsonSafe === 'object') {\n return Object.fromEntries(Object.entries(jsonSafe).map(([k, v]) => [k, sanitizeValues(v)]))\n }\n return jsonSafe\n}\n\nexport const sendEventToPosthog = ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.outputCost ?? 0) * (usage.outputTokens ?? 0)\n costOverrideData = {\n $ai_input_cost_usd: inputCostUSD,\n $ai_output_cost_usd: outputCostUSD,\n $ai_total_cost_usd: inputCostUSD + outputCostUSD,\n }\n }\n\n const additionalTokenValues = {\n ...(usage.reasoningTokens ? { $ai_reasoning_tokens: usage.reasoningTokens } : {}),\n ...(usage.cacheReadInputTokens ? { $ai_cache_read_input_tokens: usage.cacheReadInputTokens } : {}),\n ...(usage.cacheCreationInputTokens ? { $ai_cache_creation_input_tokens: usage.cacheCreationInputTokens } : {}),\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties: {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n },\n groups: params.posthogGroups,\n })\n }\n}\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type { LanguageModelV1, LanguageModelV1Middleware, LanguageModelV1Prompt, LanguageModelV1StreamPart } from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { CostOverride, 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 posthogCostOverride?: CostOverride\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 posthogCostOverride?: CostOverride\n}\n\ninterface PostHogInput {\n role: string\n type?: string\n content?:\n | string\n | {\n [key: string]: any\n }\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.map((c) => {\n if (c.type === 'text') {\n return {\n type: 'text',\n content: c.text,\n }\n } else if (c.type === 'image') {\n return {\n type: 'image',\n content: {\n // if image is a url use it, or use \"none supported\"\n image: c.image instanceof URL ? c.image.toString() : 'raw images not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'file') {\n return {\n type: 'file',\n content: {\n file: c.data instanceof URL ? c.data.toString() : 'raw files not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'tool-call') {\n return {\n type: 'tool-call',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n args: c.args,\n },\n }\n } else if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n result: c.result,\n isError: c.isError,\n },\n }\n }\n return {\n content: '',\n }\n })\n } else {\n content = {\n type: 'text',\n text: p.content,\n }\n }\n return {\n role: p.role,\n content,\n }\n })\n}\n\nconst mapVercelOutput = (result: any): PostHogInput[] => {\n const output = {\n ...(result.text ? { text: result.text } : {}),\n ...(result.object ? { object: result.object } : {}),\n ...(result.reasoning ? { reasoning: result.reasoning } : {}),\n ...(result.response ? { response: result.response } : {}),\n ...(result.finishReason ? { finishReason: result.finishReason } : {}),\n ...(result.usage ? { usage: result.usage } : {}),\n ...(result.warnings ? { warnings: result.warnings } : {}),\n ...(result.providerMetadata ? { toolCalls: result.providerMetadata } : {}),\n }\n // if text and no object or reasoning, return text\n if (output.text && !output.object && !output.reasoning) {\n return [{ content: output.text, role: 'assistant' }]\n }\n return [{ content: JSON.stringify(output), role: 'assistant' }]\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 const 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 const content = mapVercelOutput(result)\n // let tools = result.toolCalls\n const providerMetadata = result.providerMetadata\n const additionalTokenValues = {\n ...(providerMetadata?.openai?.reasoningTokens\n ? { reasoningTokens: providerMetadata.openai.reasoningTokens }\n : {}),\n ...(providerMetadata?.openai?.cachedPromptTokens\n ? { cacheReadInputTokens: providerMetadata.openai.cachedPromptTokens }\n : {}),\n ...(providerMetadata?.anthropic\n ? {\n cacheReadInputTokens: providerMetadata.anthropic.cacheReadInputTokens,\n cacheCreationInputTokens: providerMetadata.anthropic.cacheCreationInputTokens,\n }\n : {}),\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, 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 ...additionalTokenValues,\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: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n } = {}\n const 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 if (chunk.providerMetadata?.openai?.reasoningTokens) {\n usage.reasoningTokens = chunk.providerMetadata.openai.reasoningTokens\n }\n if (chunk.providerMetadata?.openai?.cachedPromptTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.openai.cachedPromptTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheReadInputTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.anthropic.cacheReadInputTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheCreationInputTokens) {\n usage.cacheCreationInputTokens = chunk.providerMetadata.anthropic.cacheCreationInputTokens\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","withPrivacyMode","client","privacyMode","input","privacy_mode","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Buffer","from","toString","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","output","latency","baseURL","httpStatus","usage","isError","error","tools","capture","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","inputCostUSD","inputCost","inputTokens","outputCostUSD","outputCost","outputTokens","$ai_input_cost_usd","$ai_output_cost_usd","$ai_total_cost_usd","additionalTokenValues","reasoningTokens","$ai_reasoning_tokens","cacheReadInputTokens","$ai_cache_read_input_tokens","cacheCreationInputTokens","$ai_cache_creation_input_tokens","event","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","groups","posthogGroups","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","mapVercelPrompt","prompt","p","content","c","type","text","image","URL","mimeType","file","data","toolCallId","toolName","args","result","role","mapVercelOutput","object","reasoning","response","finishReason","warnings","providerMetadata","toolCalls","extractProvider","toLowerCase","providerName","split","createInstrumentationMiddleware","phClient","options","middleware","wrapGenerate","doGenerate","startTime","Date","now","mergedParams","modelId","openai","cachedPromptTokens","anthropic","posthogDistinctId","posthogTraceId","promptTokens","completionTokens","status","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","chunk","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","uuidv4","wrappedModel","wrapLanguageModel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/utils.ts","../../src/vercel/middleware.ts"],"sourcesContent":["import { PostHog } from 'posthog-node'\nimport { Buffer } from 'buffer'\nimport OpenAIOrignal from 'openai'\nimport AnthropicOriginal from '@anthropic-ai/sdk'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\nexport interface MonitoringParams {\n posthogDistinctId?: string\n posthogTraceId?: string\n posthogProperties?: Record<string, any>\n posthogPrivacyMode?: boolean\n posthogGroups?: Record<string, any>\n posthogModelOverride?: string\n posthogProviderOverride?: string\n posthogCostOverride?: CostOverride\n fullDebug?: boolean\n}\n\nexport interface CostOverride {\n inputCost: number\n outputCost: number\n}\n\nexport const getModelParams = (\n params: ((ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams) | null\n): Record<string, any> => {\n if (!params) {\n return {}\n }\n const modelParams: Record<string, any> = {}\n const paramKeys = [\n 'temperature',\n 'max_tokens',\n 'max_completion_tokens',\n 'top_p',\n 'frequency_penalty',\n 'presence_penalty',\n 'n',\n 'stop',\n 'stream',\n 'streaming',\n ] as const\n\n for (const key of paramKeys) {\n if (key in params && (params as any)[key] !== undefined) {\n modelParams[key] = (params as any)[key]\n }\n }\n return modelParams\n}\n\n/**\n * Helper to format responses (non-streaming) for consumption, mirroring Python's openai vs. anthropic approach.\n */\nexport const formatResponse = (response: any, provider: string): Array<{ role: string; content: string }> => {\n if (!response) {\n return []\n }\n if (provider === 'anthropic') {\n return formatResponseAnthropic(response)\n } else if (provider === 'openai') {\n return formatResponseOpenAI(response)\n }\n return []\n}\n\nexport const formatResponseAnthropic = (response: any): Array<{ role: string; content: string }> => {\n // Example approach if \"response.content\" holds array of text segments, etc.\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.content ?? []) {\n if (choice?.text) {\n output.push({\n role: 'assistant',\n content: choice.text,\n })\n }\n }\n return output\n}\n\nexport const formatResponseOpenAI = (response: any): Array<{ role: string; content: string }> => {\n const output: Array<{ role: string; content: string }> = []\n for (const choice of response.choices ?? []) {\n if (choice.message?.content) {\n output.push({\n role: choice.message.role,\n content: choice.message.content,\n })\n }\n }\n return output\n}\n\nexport const mergeSystemPrompt = (params: MessageCreateParams & MonitoringParams, provider: string): any => {\n if (provider == 'anthropic') {\n const messages = params.messages || []\n if (!(params as any).system) {\n return messages\n }\n const systemMessage = (params as any).system\n return [{ role: 'system', content: systemMessage }, ...messages]\n }\n return params.messages\n}\n\nexport const withPrivacyMode = (client: PostHog, privacyMode: boolean, input: any): any => {\n return (client as any).privacy_mode || privacyMode ? null : input\n}\n\nexport const truncate = (str: string): string => {\n try {\n const buffer = Buffer.from(str, STRING_FORMAT)\n if (buffer.length <= MAX_OUTPUT_SIZE) {\n return str\n }\n const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n return `${truncatedBuffer.toString(STRING_FORMAT)}... [truncated]`\n } catch (error) {\n console.error('Error truncating, likely not a string')\n return str\n }\n}\n\nexport type SendEventToPosthogParams = {\n client: PostHog\n distinctId?: string\n traceId: string\n model: string\n provider: string\n input: any\n output: any\n latency: number\n baseURL: string\n httpStatus: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n }\n params: (ChatCompletionCreateParamsBase | MessageCreateParams) & MonitoringParams\n isError?: boolean\n error?: string\n tools?: any\n fullDebug?: boolean\n}\n\nfunction sanitizeValues(obj: any): any {\n if (obj === undefined || obj === null) {\n return obj\n }\n const jsonSafe = JSON.parse(JSON.stringify(obj))\n if (typeof jsonSafe === 'string') {\n return Buffer.from(jsonSafe, STRING_FORMAT).toString(STRING_FORMAT)\n } else if (Array.isArray(jsonSafe)) {\n return jsonSafe.map(sanitizeValues)\n } else if (jsonSafe && typeof jsonSafe === 'object') {\n return Object.fromEntries(Object.entries(jsonSafe).map(([k, v]) => [k, sanitizeValues(v)]))\n }\n return jsonSafe\n}\n\nexport const sendEventToPosthog = ({\n client,\n distinctId,\n traceId,\n model,\n provider,\n input,\n output,\n latency,\n baseURL,\n params,\n httpStatus = 200,\n usage = {},\n isError = false,\n error,\n tools,\n fullDebug = false,\n}: SendEventToPosthogParams): void => {\n if (client.capture) {\n // sanitize input and output for UTF-8 validity\n const safeInput = sanitizeValues(input)\n const safeOutput = sanitizeValues(output)\n const safeError = sanitizeValues(error)\n\n let errorData = {}\n if (isError) {\n errorData = {\n $ai_is_error: true,\n $ai_error: safeError,\n }\n }\n let costOverrideData = {}\n if (params.posthogCostOverride) {\n const inputCostUSD = (params.posthogCostOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n const outputCostUSD = (params.posthogCostOverride.outputCost ?? 0) * (usage.outputTokens ?? 0)\n costOverrideData = {\n $ai_input_cost_usd: inputCostUSD,\n $ai_output_cost_usd: outputCostUSD,\n $ai_total_cost_usd: inputCostUSD + outputCostUSD,\n }\n }\n\n const additionalTokenValues = {\n ...(usage.reasoningTokens ? { $ai_reasoning_tokens: usage.reasoningTokens } : {}),\n ...(usage.cacheReadInputTokens ? { $ai_cache_read_input_tokens: usage.cacheReadInputTokens } : {}),\n ...(usage.cacheCreationInputTokens ? { $ai_cache_creation_input_tokens: usage.cacheCreationInputTokens } : {}),\n }\n\n const properties = {\n $ai_provider: params.posthogProviderOverride ?? provider,\n $ai_model: params.posthogModelOverride ?? model,\n $ai_model_parameters: getModelParams(params),\n $ai_input: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeInput),\n $ai_output_choices: withPrivacyMode(client, params.posthogPrivacyMode ?? false, safeOutput),\n $ai_http_status: httpStatus,\n $ai_input_tokens: usage.inputTokens ?? 0,\n $ai_output_tokens: usage.outputTokens ?? 0,\n ...additionalTokenValues,\n $ai_latency: latency,\n $ai_trace_id: traceId,\n $ai_base_url: baseURL,\n ...params.posthogProperties,\n ...(distinctId ? {} : { $process_person_profile: false }),\n ...(tools ? { $ai_tools: tools } : {}),\n ...errorData,\n ...costOverrideData,\n }\n\n if (fullDebug) {\n // @ts-ignore\n console.log('Sending event to PostHog', properties)\n }\n\n client.capture({\n distinctId: distinctId ?? traceId,\n event: '$ai_generation',\n properties,\n groups: params.posthogGroups,\n })\n }\n}\n","import { experimental_wrapLanguageModel as wrapLanguageModel } from 'ai'\nimport type { LanguageModelV1, LanguageModelV1Middleware, LanguageModelV1Prompt, LanguageModelV1StreamPart } from 'ai'\nimport { v4 as uuidv4 } from 'uuid'\nimport { PostHog } from 'posthog-node'\nimport { CostOverride, sendEventToPosthog, truncate, MAX_OUTPUT_SIZE } from '../utils'\nimport { Buffer } from 'buffer'\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 posthogCostOverride?: CostOverride\n fullDebug?: boolean\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 posthogCostOverride?: CostOverride\n fullDebug?: boolean\n}\n\ninterface PostHogInput {\n role: string\n type?: string\n content?:\n | string\n | {\n [key: string]: any\n }\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 // normalize single inputs into an array of messages\n let promptsArray: any[]\n if (typeof prompt === 'string') {\n promptsArray = [{ role: 'user', content: prompt }]\n } else if (!Array.isArray(prompt)) {\n promptsArray = [prompt]\n } else {\n promptsArray = prompt\n }\n\n // Map and truncate individual content\n const inputs: PostHogInput[] = promptsArray.map((p) => {\n let content = {}\n if (Array.isArray(p.content)) {\n content = p.content.map((c: any) => {\n if (c.type === 'text') {\n return {\n type: 'text',\n content: truncate(c.text),\n }\n } else if (c.type === 'image') {\n return {\n type: 'image',\n content: {\n // if image is a url use it, or use \"none supported\"\n image: c.image instanceof URL ? c.image.toString() : 'raw images not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'file') {\n return {\n type: 'file',\n content: {\n file: c.data instanceof URL ? c.data.toString() : 'raw files not supported',\n mimeType: c.mimeType,\n },\n }\n } else if (c.type === 'tool-call') {\n return {\n type: 'tool-call',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n args: c.args,\n },\n }\n } else if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n content: {\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n result: c.result,\n isError: c.isError,\n },\n }\n }\n return {\n content: '',\n }\n })\n } else {\n content = {\n type: 'text',\n text: truncate(p.content),\n }\n }\n return {\n role: p.role,\n content,\n }\n })\n try {\n // Trim the inputs array until its JSON size fits within MAX_OUTPUT_SIZE\n let serialized = JSON.stringify(inputs)\n while (Buffer.byteLength(serialized, 'utf8') > MAX_OUTPUT_SIZE && inputs.length > 0) {\n // Remove oldest message\n inputs.shift()\n // add blank message to beginning of array\n inputs.unshift({ role: 'assistant', content: '[removed message due to size limit]' })\n serialized = JSON.stringify(inputs)\n }\n } catch (error) {\n console.error('Error stringifying inputs')\n return [{ role: 'posthog', content: 'An error occurred while processing your request. Please try again.' }]\n }\n return inputs\n}\n\nconst mapVercelOutput = (result: any): PostHogInput[] => {\n // normalize string results to object\n const normalizedResult = typeof result === 'string' ? { text: result } : result\n const output = {\n ...(normalizedResult.text ? { text: normalizedResult.text } : {}),\n ...(normalizedResult.object ? { object: normalizedResult.object } : {}),\n ...(normalizedResult.reasoning ? { reasoning: normalizedResult.reasoning } : {}),\n ...(normalizedResult.response ? { response: normalizedResult.response } : {}),\n ...(normalizedResult.finishReason ? { finishReason: normalizedResult.finishReason } : {}),\n ...(normalizedResult.usage ? { usage: normalizedResult.usage } : {}),\n ...(normalizedResult.warnings ? { warnings: normalizedResult.warnings } : {}),\n ...(normalizedResult.providerMetadata ? { toolCalls: normalizedResult.providerMetadata } : {}),\n ...(normalizedResult.files\n ? {\n files: normalizedResult.files.map((file: any) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n })),\n }\n : {}),\n }\n if (output.text && !output.object && !output.reasoning) {\n return [{ content: truncate(output.text as string), role: 'assistant' }]\n }\n // otherwise stringify and truncate\n try {\n const jsonOutput = JSON.stringify(output)\n return [{ content: truncate(jsonOutput), role: 'assistant' }]\n } catch (error) {\n console.error('Error stringifying output')\n return []\n }\n}\n\nconst extractProvider = (model: LanguageModelV1): string => {\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 const 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 const content = mapVercelOutput(result)\n // let tools = result.toolCalls\n const providerMetadata = result.providerMetadata\n const additionalTokenValues = {\n ...(providerMetadata?.openai?.reasoningTokens\n ? { reasoningTokens: providerMetadata.openai.reasoningTokens }\n : {}),\n ...(providerMetadata?.openai?.cachedPromptTokens\n ? { cacheReadInputTokens: providerMetadata.openai.cachedPromptTokens }\n : {}),\n ...(providerMetadata?.anthropic\n ? {\n cacheReadInputTokens: providerMetadata.anthropic.cacheReadInputTokens,\n cacheCreationInputTokens: providerMetadata.anthropic.cacheCreationInputTokens,\n }\n : {}),\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, 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 ...additionalTokenValues,\n },\n fullDebug: options.fullDebug,\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: truncate(JSON.stringify(error)),\n fullDebug: options.fullDebug,\n })\n throw error\n }\n },\n\n wrapStream: async ({ doStream, params }) => {\n const startTime = Date.now()\n let generatedText = ''\n let usage: {\n inputTokens?: number\n outputTokens?: number\n reasoningTokens?: any\n cacheReadInputTokens?: any\n cacheCreationInputTokens?: any\n } = {}\n const 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 if (chunk.providerMetadata?.openai?.reasoningTokens) {\n usage.reasoningTokens = chunk.providerMetadata.openai.reasoningTokens\n }\n if (chunk.providerMetadata?.openai?.cachedPromptTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.openai.cachedPromptTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheReadInputTokens) {\n usage.cacheReadInputTokens = chunk.providerMetadata.anthropic.cacheReadInputTokens\n }\n if (chunk.providerMetadata?.anthropic?.cacheCreationInputTokens) {\n usage.cacheCreationInputTokens = chunk.providerMetadata.anthropic.cacheCreationInputTokens\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 fullDebug: options.fullDebug,\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: truncate(JSON.stringify(error)),\n fullDebug: options.fullDebug,\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":["MAX_OUTPUT_SIZE","STRING_FORMAT","getModelParams","params","modelParams","paramKeys","key","undefined","withPrivacyMode","client","privacyMode","input","privacy_mode","truncate","str","buffer","Buffer","from","length","truncatedBuffer","slice","toString","error","console","sanitizeValues","obj","jsonSafe","JSON","parse","stringify","Array","isArray","map","Object","fromEntries","entries","k","v","sendEventToPosthog","distinctId","traceId","model","provider","output","latency","baseURL","httpStatus","usage","isError","tools","fullDebug","capture","safeInput","safeOutput","safeError","errorData","$ai_is_error","$ai_error","costOverrideData","posthogCostOverride","inputCostUSD","inputCost","inputTokens","outputCostUSD","outputCost","outputTokens","$ai_input_cost_usd","$ai_output_cost_usd","$ai_total_cost_usd","additionalTokenValues","reasoningTokens","$ai_reasoning_tokens","cacheReadInputTokens","$ai_cache_read_input_tokens","cacheCreationInputTokens","$ai_cache_creation_input_tokens","properties","$ai_provider","posthogProviderOverride","$ai_model","posthogModelOverride","$ai_model_parameters","$ai_input","posthogPrivacyMode","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","$ai_trace_id","$ai_base_url","posthogProperties","$process_person_profile","$ai_tools","log","event","groups","posthogGroups","mapVercelParams","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","mapVercelPrompt","prompt","promptsArray","role","content","inputs","p","c","type","text","image","URL","mimeType","file","data","toolCallId","toolName","args","result","serialized","byteLength","shift","unshift","mapVercelOutput","normalizedResult","object","reasoning","response","finishReason","warnings","providerMetadata","toolCalls","files","name","size","jsonOutput","extractProvider","toLowerCase","providerName","split","createInstrumentationMiddleware","phClient","options","middleware","wrapGenerate","doGenerate","startTime","Date","now","mergedParams","modelId","openai","cachedPromptTokens","anthropic","posthogDistinctId","posthogTraceId","promptTokens","completionTokens","status","wrapStream","doStream","generatedText","rest","transformStream","TransformStream","transform","chunk","controller","textDelta","enqueue","flush","pipeThrough","wrapVercelLanguageModel","uuidv4","wrappedModel","wrapLanguageModel"],"mappings":"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"}
|
package/lib/vercel/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ interface ClientOptions {
|
|
|
15
15
|
posthogModelOverride?: string;
|
|
16
16
|
posthogProviderOverride?: string;
|
|
17
17
|
posthogCostOverride?: CostOverride;
|
|
18
|
+
fullDebug?: boolean;
|
|
18
19
|
}
|
|
19
20
|
declare const wrapVercelLanguageModel: (model: LanguageModelV1, phClient: PostHog, options: ClientOptions) => LanguageModelV1;
|
|
20
21
|
|