@arizeai/openinference-instrumentation-openai 0.0.4 → 0.1.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/dist/esm/instrumentation.d.ts.map +1 -1
- package/dist/esm/instrumentation.js +438 -44
- package/dist/esm/instrumentation.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/typeUtils.d.ts +9 -0
- package/dist/esm/typeUtils.d.ts.map +1 -0
- package/dist/esm/typeUtils.js +13 -0
- package/dist/esm/typeUtils.js.map +1 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esnext/instrumentation.d.ts.map +1 -1
- package/dist/esnext/instrumentation.js +300 -43
- package/dist/esnext/instrumentation.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/esnext/typeUtils.d.ts +9 -0
- package/dist/esnext/typeUtils.d.ts.map +1 -0
- package/dist/esnext/typeUtils.js +13 -0
- package/dist/esnext/typeUtils.js.map +1 -0
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/src/instrumentation.d.ts.map +1 -1
- package/dist/src/instrumentation.js +312 -43
- package/dist/src/instrumentation.js.map +1 -1
- package/dist/src/typeUtils.d.ts +9 -0
- package/dist/src/typeUtils.d.ts.map +1 -0
- package/dist/src/typeUtils.js +18 -0
- package/dist/src/typeUtils.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/test/openai.test.js +607 -1
- package/dist/test/openai.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/instrumentation.ts +368 -65
- package/src/typeUtils.ts +13 -0
- package/src/version.ts +1 -1
|
@@ -9,10 +9,18 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
13
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
14
|
+
var m = o[Symbol.asyncIterator], i;
|
|
15
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
16
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
17
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
18
|
+
};
|
|
12
19
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, safeExecuteInTheMiddle, } from "@opentelemetry/instrumentation";
|
|
13
20
|
import { diag, context, trace, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
|
|
14
21
|
import { VERSION } from "./version";
|
|
15
22
|
import { SemanticConventions, OpenInferenceSpanKind, MimeType, } from "@arizeai/openinference-semantic-conventions";
|
|
23
|
+
import { assertUnreachable, isString } from "./typeUtils";
|
|
16
24
|
const MODULE_NAME = "openai";
|
|
17
25
|
export class OpenAIInstrumentation extends InstrumentationBase {
|
|
18
26
|
constructor(config) {
|
|
@@ -60,16 +68,62 @@ export class OpenAIInstrumentation extends InstrumentationBase {
|
|
|
60
68
|
}
|
|
61
69
|
});
|
|
62
70
|
const wrappedPromise = execPromise.then((result) => {
|
|
63
|
-
if (result) {
|
|
71
|
+
if (isChatCompletionResponse(result)) {
|
|
64
72
|
// Record the results
|
|
65
73
|
span.setAttributes(Object.assign(Object.assign({ [SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.JSON,
|
|
66
74
|
// Override the model from the value sent by the server
|
|
67
|
-
[SemanticConventions.LLM_MODEL_NAME]:
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
[SemanticConventions.LLM_MODEL_NAME]: result.model }, getChatCompletionLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
|
|
76
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
77
|
+
span.end();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// This is a streaming response
|
|
81
|
+
// handle the chunks and add them to the span
|
|
82
|
+
// First split the stream via tee
|
|
83
|
+
const [leftStream, rightStream] = result.tee();
|
|
84
|
+
consumeChatCompletionStreamChunks(rightStream, span);
|
|
85
|
+
result = leftStream;
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
});
|
|
89
|
+
return context.bind(execContext, wrappedPromise);
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
this._wrap(module.OpenAI.Completions.prototype, "create",
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
|
+
(original) => {
|
|
95
|
+
return function patchedCreate(...args) {
|
|
96
|
+
const body = args[0];
|
|
97
|
+
const { prompt: _prompt } = body, invocationParameters = __rest(body, ["prompt"]);
|
|
98
|
+
const span = instrumentation.tracer.startSpan(`OpenAI Completions`, {
|
|
99
|
+
kind: SpanKind.INTERNAL,
|
|
100
|
+
attributes: Object.assign({ [SemanticConventions.OPENINFERENCE_SPAN_KIND]: OpenInferenceSpanKind.LLM, [SemanticConventions.LLM_MODEL_NAME]: body.model, [SemanticConventions.LLM_INVOCATION_PARAMETERS]: JSON.stringify(invocationParameters) }, getCompletionInputValueAndMimeType(body)),
|
|
101
|
+
});
|
|
102
|
+
const execContext = trace.setSpan(context.active(), span);
|
|
103
|
+
const execPromise = safeExecuteInTheMiddle(() => {
|
|
104
|
+
return context.with(execContext, () => {
|
|
105
|
+
return original.apply(this, args);
|
|
106
|
+
});
|
|
107
|
+
}, (error) => {
|
|
108
|
+
// Push the error to the span
|
|
109
|
+
if (error) {
|
|
110
|
+
span.recordException(error);
|
|
111
|
+
span.setStatus({
|
|
112
|
+
code: SpanStatusCode.ERROR,
|
|
113
|
+
message: error.message,
|
|
114
|
+
});
|
|
115
|
+
span.end();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
const wrappedPromise = execPromise.then((result) => {
|
|
119
|
+
if (isCompletionResponse(result)) {
|
|
120
|
+
// Record the results
|
|
121
|
+
span.setAttributes(Object.assign(Object.assign({ [SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.JSON,
|
|
122
|
+
// Override the model from the value sent by the server
|
|
123
|
+
[SemanticConventions.LLM_MODEL_NAME]: result.model }, getCompletionOutputValueAndMimeType(result)), getUsageAttributes(result)));
|
|
124
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
125
|
+
span.end();
|
|
70
126
|
}
|
|
71
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
72
|
-
span.end();
|
|
73
127
|
return result;
|
|
74
128
|
});
|
|
75
129
|
return context.bind(execContext, wrappedPromise);
|
|
@@ -81,7 +135,7 @@ export class OpenAIInstrumentation extends InstrumentationBase {
|
|
|
81
135
|
return function patchedEmbeddingCreate(...args) {
|
|
82
136
|
const body = args[0];
|
|
83
137
|
const { input } = body;
|
|
84
|
-
const isStringInput = typeof input
|
|
138
|
+
const isStringInput = typeof input === "string";
|
|
85
139
|
const span = instrumentation.tracer.startSpan(`OpenAI Embeddings`, {
|
|
86
140
|
kind: SpanKind.INTERNAL,
|
|
87
141
|
attributes: Object.assign({ [SemanticConventions.OPENINFERENCE_SPAN_KIND]: OpenInferenceSpanKind.EMBEDDING, [SemanticConventions.EMBEDDING_MODEL_NAME]: body.model, [SemanticConventions.INPUT_VALUE]: isStringInput
|
|
@@ -137,68 +191,184 @@ function isChatCompletionResponse(response) {
|
|
|
137
191
|
return "choices" in response;
|
|
138
192
|
}
|
|
139
193
|
/**
|
|
140
|
-
*
|
|
194
|
+
* type-guard that checks if the response is a completion response
|
|
195
|
+
*/
|
|
196
|
+
function isCompletionResponse(response) {
|
|
197
|
+
return "choices" in response;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* type-guard that checks if completion prompt attribute is an array of strings
|
|
201
|
+
*/
|
|
202
|
+
function isPromptStringArray(prompt) {
|
|
203
|
+
return (Array.isArray(prompt) && prompt.every((item) => typeof item === "string"));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Converts the body of a chat completions request to LLM input messages
|
|
141
207
|
*/
|
|
142
208
|
function getLLMInputMessagesAttributes(body) {
|
|
143
209
|
return body.messages.reduce((acc, message, index) => {
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
210
|
+
const messageAttributes = getChatCompletionInputMessageAttributes(message);
|
|
211
|
+
const indexPrefix = `${SemanticConventions.LLM_INPUT_MESSAGES}.${index}.`;
|
|
212
|
+
// Flatten the attributes on the index prefix
|
|
213
|
+
for (const [key, value] of Object.entries(messageAttributes)) {
|
|
214
|
+
acc[`${indexPrefix}${key}`] = value;
|
|
215
|
+
}
|
|
147
216
|
return acc;
|
|
148
217
|
}, {});
|
|
149
218
|
}
|
|
219
|
+
function getChatCompletionInputMessageAttributes(message) {
|
|
220
|
+
const role = message.role;
|
|
221
|
+
const attributes = {
|
|
222
|
+
[SemanticConventions.MESSAGE_ROLE]: role,
|
|
223
|
+
};
|
|
224
|
+
// Add the content only if it is a string
|
|
225
|
+
if (typeof message.content === "string")
|
|
226
|
+
attributes[SemanticConventions.MESSAGE_CONTENT] = message.content;
|
|
227
|
+
switch (role) {
|
|
228
|
+
case "user":
|
|
229
|
+
// There's nothing to add for the user
|
|
230
|
+
break;
|
|
231
|
+
case "assistant":
|
|
232
|
+
if (message.tool_calls) {
|
|
233
|
+
message.tool_calls.forEach((toolCall, index) => {
|
|
234
|
+
// Make sure the tool call has a function
|
|
235
|
+
if (toolCall.function) {
|
|
236
|
+
const toolCallIndexPrefix = `${SemanticConventions.MESSAGE_TOOL_CALLS}.${index}.`;
|
|
237
|
+
attributes[toolCallIndexPrefix + SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
|
|
238
|
+
attributes[toolCallIndexPrefix +
|
|
239
|
+
SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
break;
|
|
244
|
+
case "function":
|
|
245
|
+
attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] = message.name;
|
|
246
|
+
break;
|
|
247
|
+
case "tool":
|
|
248
|
+
// There's nothing to add for the tool. There is a tool_id, but there are no
|
|
249
|
+
// semantic conventions for it
|
|
250
|
+
break;
|
|
251
|
+
case "system":
|
|
252
|
+
// There's nothing to add for the system. Content is captured above
|
|
253
|
+
break;
|
|
254
|
+
default:
|
|
255
|
+
assertUnreachable(role);
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
return attributes;
|
|
259
|
+
}
|
|
150
260
|
/**
|
|
151
|
-
*
|
|
261
|
+
* Converts the body of a completions request to input attributes
|
|
152
262
|
*/
|
|
153
|
-
function
|
|
154
|
-
if (
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
263
|
+
function getCompletionInputValueAndMimeType(body) {
|
|
264
|
+
if (typeof body.prompt === "string") {
|
|
265
|
+
return {
|
|
266
|
+
[SemanticConventions.INPUT_VALUE]: body.prompt,
|
|
267
|
+
[SemanticConventions.INPUT_MIME_TYPE]: MimeType.TEXT,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
else if (isPromptStringArray(body.prompt)) {
|
|
271
|
+
const prompt = body.prompt[0]; // Only single prompts are currently supported
|
|
272
|
+
if (prompt === undefined) {
|
|
273
|
+
return {};
|
|
162
274
|
}
|
|
275
|
+
return {
|
|
276
|
+
[SemanticConventions.INPUT_VALUE]: prompt,
|
|
277
|
+
[SemanticConventions.INPUT_MIME_TYPE]: MimeType.TEXT,
|
|
278
|
+
};
|
|
163
279
|
}
|
|
280
|
+
// Other cases in which the prompt is a token or array of tokens are currently unsupported
|
|
164
281
|
return {};
|
|
165
282
|
}
|
|
166
283
|
/**
|
|
167
|
-
*
|
|
284
|
+
* Get usage attributes
|
|
168
285
|
*/
|
|
169
|
-
function
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return {};
|
|
177
|
-
}
|
|
178
|
-
return [choice.message].reduce((acc, message, index) => {
|
|
179
|
-
const index_prefix = `${SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}`;
|
|
180
|
-
acc[`${index_prefix}.${SemanticConventions.MESSAGE_CONTENT}`] = String(message.content);
|
|
181
|
-
acc[`${index_prefix}.${SemanticConventions.MESSAGE_ROLE}`] = message.role;
|
|
182
|
-
return acc;
|
|
183
|
-
}, {});
|
|
286
|
+
function getUsageAttributes(completion) {
|
|
287
|
+
if (completion.usage) {
|
|
288
|
+
return {
|
|
289
|
+
[SemanticConventions.LLM_TOKEN_COUNT_COMPLETION]: completion.usage.completion_tokens,
|
|
290
|
+
[SemanticConventions.LLM_TOKEN_COUNT_PROMPT]: completion.usage.prompt_tokens,
|
|
291
|
+
[SemanticConventions.LLM_TOKEN_COUNT_TOTAL]: completion.usage.total_tokens,
|
|
292
|
+
};
|
|
184
293
|
}
|
|
185
294
|
return {};
|
|
186
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Converts the chat completion result to LLM output attributes
|
|
298
|
+
*/
|
|
299
|
+
function getChatCompletionLLMOutputMessagesAttributes(chatCompletion) {
|
|
300
|
+
// Right now support just the first choice
|
|
301
|
+
const choice = chatCompletion.choices[0];
|
|
302
|
+
if (!choice) {
|
|
303
|
+
return {};
|
|
304
|
+
}
|
|
305
|
+
return [choice.message].reduce((acc, message, index) => {
|
|
306
|
+
const indexPrefix = `${SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}.`;
|
|
307
|
+
const messageAttributes = getChatCompletionOutputMessageAttributes(message);
|
|
308
|
+
// Flatten the attributes on the index prefix
|
|
309
|
+
for (const [key, value] of Object.entries(messageAttributes)) {
|
|
310
|
+
acc[`${indexPrefix}${key}`] = value;
|
|
311
|
+
}
|
|
312
|
+
return acc;
|
|
313
|
+
}, {});
|
|
314
|
+
}
|
|
315
|
+
function getChatCompletionOutputMessageAttributes(message) {
|
|
316
|
+
const role = message.role;
|
|
317
|
+
const attributes = {
|
|
318
|
+
[SemanticConventions.MESSAGE_ROLE]: role,
|
|
319
|
+
};
|
|
320
|
+
if (message.content) {
|
|
321
|
+
attributes[SemanticConventions.MESSAGE_CONTENT] = message.content;
|
|
322
|
+
}
|
|
323
|
+
if (message.tool_calls) {
|
|
324
|
+
message.tool_calls.forEach((toolCall, index) => {
|
|
325
|
+
const toolCallIndexPrefix = `${SemanticConventions.MESSAGE_TOOL_CALLS}.${index}.`;
|
|
326
|
+
// Double check that the tool call has a function
|
|
327
|
+
// NB: OpenAI only supports tool calls with functions right now but this may change
|
|
328
|
+
if (toolCall.function) {
|
|
329
|
+
attributes[toolCallIndexPrefix + SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
|
|
330
|
+
attributes[toolCallIndexPrefix +
|
|
331
|
+
SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
if (message.function_call) {
|
|
336
|
+
attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] =
|
|
337
|
+
message.function_call.name;
|
|
338
|
+
attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_ARGUMENTS_JSON] =
|
|
339
|
+
message.function_call.arguments;
|
|
340
|
+
}
|
|
341
|
+
return attributes;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Converts the completion result to output attributes
|
|
345
|
+
*/
|
|
346
|
+
function getCompletionOutputValueAndMimeType(completion) {
|
|
347
|
+
// Right now support just the first choice
|
|
348
|
+
const choice = completion.choices[0];
|
|
349
|
+
if (!choice) {
|
|
350
|
+
return {};
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
[SemanticConventions.OUTPUT_VALUE]: String(choice.text),
|
|
354
|
+
[SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.TEXT,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
187
357
|
/**
|
|
188
358
|
* Converts the embedding result payload to embedding attributes
|
|
189
359
|
*/
|
|
190
360
|
function getEmbeddingTextAttributes(request) {
|
|
191
|
-
if (typeof request.input
|
|
361
|
+
if (typeof request.input === "string") {
|
|
192
362
|
return {
|
|
193
363
|
[`${SemanticConventions.EMBEDDING_EMBEDDINGS}.0.${SemanticConventions.EMBEDDING_TEXT}`]: request.input,
|
|
194
364
|
};
|
|
195
365
|
}
|
|
196
366
|
else if (Array.isArray(request.input) &&
|
|
197
367
|
request.input.length > 0 &&
|
|
198
|
-
typeof request.input[0]
|
|
368
|
+
typeof request.input[0] === "string") {
|
|
199
369
|
return request.input.reduce((acc, input, index) => {
|
|
200
|
-
const
|
|
201
|
-
acc[`${
|
|
370
|
+
const indexPrefix = `${SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}.`;
|
|
371
|
+
acc[`${indexPrefix}${SemanticConventions.EMBEDDING_TEXT}`] = input;
|
|
202
372
|
return acc;
|
|
203
373
|
}, {});
|
|
204
374
|
}
|
|
@@ -210,10 +380,97 @@ function getEmbeddingTextAttributes(request) {
|
|
|
210
380
|
*/
|
|
211
381
|
function getEmbeddingEmbeddingsAttributes(response) {
|
|
212
382
|
return response.data.reduce((acc, embedding, index) => {
|
|
213
|
-
const
|
|
214
|
-
acc[`${
|
|
383
|
+
const indexPrefix = `${SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}.`;
|
|
384
|
+
acc[`${indexPrefix}${SemanticConventions.EMBEDDING_VECTOR}`] =
|
|
215
385
|
embedding.embedding;
|
|
216
386
|
return acc;
|
|
217
387
|
}, {});
|
|
218
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Consumes the stream chunks and adds them to the span
|
|
391
|
+
*/
|
|
392
|
+
async function consumeChatCompletionStreamChunks(stream, span) {
|
|
393
|
+
var _a, e_1, _b, _c;
|
|
394
|
+
let streamResponse = "";
|
|
395
|
+
// Tool and function call attributes can also arrive in the stream
|
|
396
|
+
// NB: the tools and function calls arrive in partial diffs
|
|
397
|
+
// So the final tool and function calls need to be aggregated
|
|
398
|
+
// across chunks
|
|
399
|
+
const toolAndFunctionCallAttributes = {};
|
|
400
|
+
try {
|
|
401
|
+
// The first message is for the assistant response so we start at 1
|
|
402
|
+
for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = await stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
|
|
403
|
+
_c = stream_1_1.value;
|
|
404
|
+
_d = false;
|
|
405
|
+
const chunk = _c;
|
|
406
|
+
if (chunk.choices.length <= 0) {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
const choice = chunk.choices[0];
|
|
410
|
+
if (choice.delta.content) {
|
|
411
|
+
streamResponse += choice.delta.content;
|
|
412
|
+
}
|
|
413
|
+
// Accumulate the tool and function call attributes
|
|
414
|
+
const toolAndFunctionCallAttributesDiff = getToolAndFunctionCallAttributesFromStreamChunk(chunk);
|
|
415
|
+
for (const [key, value] of Object.entries(toolAndFunctionCallAttributesDiff)) {
|
|
416
|
+
if (isString(toolAndFunctionCallAttributes[key]) && isString(value)) {
|
|
417
|
+
toolAndFunctionCallAttributes[key] += value;
|
|
418
|
+
}
|
|
419
|
+
else if (isString(value)) {
|
|
420
|
+
toolAndFunctionCallAttributes[key] = value;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
426
|
+
finally {
|
|
427
|
+
try {
|
|
428
|
+
if (!_d && !_a && (_b = stream_1.return)) await _b.call(stream_1);
|
|
429
|
+
}
|
|
430
|
+
finally { if (e_1) throw e_1.error; }
|
|
431
|
+
}
|
|
432
|
+
const messageIndexPrefix = `${SemanticConventions.LLM_OUTPUT_MESSAGES}.0.`;
|
|
433
|
+
// Append the attributes to the span as a message
|
|
434
|
+
const attributes = {
|
|
435
|
+
[SemanticConventions.OUTPUT_VALUE]: streamResponse,
|
|
436
|
+
[SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.TEXT,
|
|
437
|
+
[`${messageIndexPrefix}${SemanticConventions.MESSAGE_CONTENT}`]: streamResponse,
|
|
438
|
+
[`${messageIndexPrefix}${SemanticConventions.MESSAGE_ROLE}`]: "assistant",
|
|
439
|
+
};
|
|
440
|
+
// Add the tool and function call attributes
|
|
441
|
+
for (const [key, value] of Object.entries(toolAndFunctionCallAttributes)) {
|
|
442
|
+
attributes[`${messageIndexPrefix}${key}`] = value;
|
|
443
|
+
}
|
|
444
|
+
span.setAttributes(attributes);
|
|
445
|
+
span.end();
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Extracts the semantic attributes from the stream chunk for tool_calls and function_calls
|
|
449
|
+
*/
|
|
450
|
+
function getToolAndFunctionCallAttributesFromStreamChunk(chunk) {
|
|
451
|
+
if (chunk.choices.length <= 0) {
|
|
452
|
+
return {};
|
|
453
|
+
}
|
|
454
|
+
const choice = chunk.choices[0];
|
|
455
|
+
const attributes = {};
|
|
456
|
+
if (choice.delta.tool_calls) {
|
|
457
|
+
choice.delta.tool_calls.forEach((toolCall, index) => {
|
|
458
|
+
const toolCallIndexPrefix = `${SemanticConventions.MESSAGE_TOOL_CALLS}.${index}.`;
|
|
459
|
+
// Double check that the tool call has a function
|
|
460
|
+
// NB: OpenAI only supports tool calls with functions right now but this may change
|
|
461
|
+
if (toolCall.function) {
|
|
462
|
+
attributes[toolCallIndexPrefix + SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
|
|
463
|
+
attributes[toolCallIndexPrefix +
|
|
464
|
+
SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
if (choice.delta.function_call) {
|
|
469
|
+
attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] =
|
|
470
|
+
choice.delta.function_call.name;
|
|
471
|
+
attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_ARGUMENTS_JSON] =
|
|
472
|
+
choice.delta.function_call.arguments;
|
|
473
|
+
}
|
|
474
|
+
return attributes;
|
|
475
|
+
}
|
|
219
476
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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"}
|