@arizeai/openinference-instrumentation-openai 0.0.3 → 0.1.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.
Files changed (42) hide show
  1. package/dist/esm/index.d.ts +1 -1
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/instrumentation.d.ts +13 -19
  4. package/dist/esm/instrumentation.d.ts.map +1 -1
  5. package/dist/esm/instrumentation.js +451 -30
  6. package/dist/esm/instrumentation.js.map +1 -1
  7. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  8. package/dist/esm/typeUtils.d.ts +8 -0
  9. package/dist/esm/typeUtils.d.ts.map +1 -0
  10. package/dist/esm/typeUtils.js +10 -0
  11. package/dist/esm/typeUtils.js.map +1 -0
  12. package/dist/esm/version.d.ts +2 -2
  13. package/dist/esm/version.js +2 -2
  14. package/dist/esnext/index.d.ts +1 -1
  15. package/dist/esnext/index.js +1 -1
  16. package/dist/esnext/instrumentation.d.ts +13 -19
  17. package/dist/esnext/instrumentation.d.ts.map +1 -1
  18. package/dist/esnext/instrumentation.js +321 -29
  19. package/dist/esnext/instrumentation.js.map +1 -1
  20. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  21. package/dist/esnext/typeUtils.d.ts +8 -0
  22. package/dist/esnext/typeUtils.d.ts.map +1 -0
  23. package/dist/esnext/typeUtils.js +10 -0
  24. package/dist/esnext/typeUtils.js.map +1 -0
  25. package/dist/esnext/version.d.ts +2 -2
  26. package/dist/esnext/version.js +2 -2
  27. package/dist/src/instrumentation.d.ts.map +1 -1
  28. package/dist/src/instrumentation.js +333 -29
  29. package/dist/src/instrumentation.js.map +1 -1
  30. package/dist/src/typeUtils.d.ts +8 -0
  31. package/dist/src/typeUtils.d.ts.map +1 -0
  32. package/dist/src/typeUtils.js +14 -0
  33. package/dist/src/typeUtils.js.map +1 -0
  34. package/dist/src/version.d.ts +1 -1
  35. package/dist/src/version.js +1 -1
  36. package/dist/test/openai.test.js +387 -6
  37. package/dist/test/openai.test.js.map +1 -1
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +6 -2
  40. package/src/instrumentation.ts +420 -48
  41. package/src/typeUtils.ts +9 -0
  42. package/src/version.ts +1 -1
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __rest = (this && this.__rest) || function (s, e) {
3
12
  var t = {};
4
13
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -10,12 +19,20 @@ var __rest = (this && this.__rest) || function (s, e) {
10
19
  }
11
20
  return t;
12
21
  };
22
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
23
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
24
+ var m = o[Symbol.asyncIterator], i;
25
+ 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);
26
+ 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); }); }; }
27
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
28
+ };
13
29
  Object.defineProperty(exports, "__esModule", { value: true });
14
30
  exports.OpenAIInstrumentation = void 0;
15
31
  const instrumentation_1 = require("@opentelemetry/instrumentation");
16
32
  const api_1 = require("@opentelemetry/api");
17
33
  const version_1 = require("./version");
18
34
  const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
35
+ const typeUtils_1 = require("./typeUtils");
19
36
  const MODULE_NAME = "openai";
20
37
  class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
21
38
  constructor(config) {
@@ -43,7 +60,7 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
43
60
  const body = args[0];
44
61
  const { messages: _messages } = body, invocationParameters = __rest(body, ["messages"]);
45
62
  const span = instrumentation.tracer.startSpan(`OpenAI Chat Completions`, {
46
- kind: api_1.SpanKind.CLIENT,
63
+ kind: api_1.SpanKind.INTERNAL,
47
64
  attributes: Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND]: openinference_semantic_conventions_1.OpenInferenceSpanKind.LLM, [openinference_semantic_conventions_1.SemanticConventions.LLM_MODEL_NAME]: body.model, [openinference_semantic_conventions_1.SemanticConventions.INPUT_VALUE]: JSON.stringify(body), [openinference_semantic_conventions_1.SemanticConventions.INPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.JSON, [openinference_semantic_conventions_1.SemanticConventions.LLM_INVOCATION_PARAMETERS]: JSON.stringify(invocationParameters) }, getLLMInputMessagesAttributes(body)),
48
65
  });
49
66
  const execContext = api_1.trace.setSpan(api_1.context.active(), span);
@@ -55,12 +72,110 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
55
72
  // Push the error to the span
56
73
  if (error) {
57
74
  span.recordException(error);
75
+ span.setStatus({
76
+ code: api_1.SpanStatusCode.ERROR,
77
+ message: error.message,
78
+ });
79
+ span.end();
80
+ }
81
+ });
82
+ const wrappedPromise = execPromise.then((result) => {
83
+ if (isChatCompletionResponse(result)) {
84
+ // Record the results
85
+ span.setAttributes(Object.assign(Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.JSON,
86
+ // Override the model from the value sent by the server
87
+ [openinference_semantic_conventions_1.SemanticConventions.LLM_MODEL_NAME]: result.model }, getChatCompletionLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
88
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
89
+ span.end();
90
+ }
91
+ else {
92
+ // This is a streaming response
93
+ // handle the chunks and add them to the span
94
+ // First split the stream via tee
95
+ const [leftStream, rightStream] = result.tee();
96
+ consumeChatCompletionStreamChunks(rightStream, span);
97
+ result = leftStream;
98
+ }
99
+ return result;
100
+ });
101
+ return api_1.context.bind(execContext, wrappedPromise);
102
+ };
103
+ });
104
+ this._wrap(module.OpenAI.Completions.prototype, "create",
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ (original) => {
107
+ return function patchedCreate(...args) {
108
+ const body = args[0];
109
+ const { prompt: _prompt } = body, invocationParameters = __rest(body, ["prompt"]);
110
+ const span = instrumentation.tracer.startSpan(`OpenAI Completions`, {
111
+ kind: api_1.SpanKind.INTERNAL,
112
+ attributes: Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND]: openinference_semantic_conventions_1.OpenInferenceSpanKind.LLM, [openinference_semantic_conventions_1.SemanticConventions.LLM_MODEL_NAME]: body.model, [openinference_semantic_conventions_1.SemanticConventions.LLM_INVOCATION_PARAMETERS]: JSON.stringify(invocationParameters) }, getCompletionInputValueAndMimeType(body)),
113
+ });
114
+ const execContext = api_1.trace.setSpan(api_1.context.active(), span);
115
+ const execPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => {
116
+ return api_1.context.with(execContext, () => {
117
+ return original.apply(this, args);
118
+ });
119
+ }, (error) => {
120
+ // Push the error to the span
121
+ if (error) {
122
+ span.recordException(error);
123
+ span.setStatus({
124
+ code: api_1.SpanStatusCode.ERROR,
125
+ message: error.message,
126
+ });
127
+ span.end();
128
+ }
129
+ });
130
+ const wrappedPromise = execPromise.then((result) => {
131
+ if (isCompletionResponse(result)) {
132
+ // Record the results
133
+ span.setAttributes(Object.assign(Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.JSON,
134
+ // Override the model from the value sent by the server
135
+ [openinference_semantic_conventions_1.SemanticConventions.LLM_MODEL_NAME]: result.model }, getCompletionOutputValueAndMimeType(result)), getUsageAttributes(result)));
136
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
137
+ span.end();
138
+ }
139
+ return result;
140
+ });
141
+ return api_1.context.bind(execContext, wrappedPromise);
142
+ };
143
+ });
144
+ this._wrap(module.OpenAI.Embeddings.prototype, "create",
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ (original) => {
147
+ return function patchedEmbeddingCreate(...args) {
148
+ const body = args[0];
149
+ const { input } = body;
150
+ const isStringInput = typeof input === "string";
151
+ const span = instrumentation.tracer.startSpan(`OpenAI Embeddings`, {
152
+ kind: api_1.SpanKind.INTERNAL,
153
+ attributes: Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND]: openinference_semantic_conventions_1.OpenInferenceSpanKind.EMBEDDING, [openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_MODEL_NAME]: body.model, [openinference_semantic_conventions_1.SemanticConventions.INPUT_VALUE]: isStringInput
154
+ ? input
155
+ : JSON.stringify(input), [openinference_semantic_conventions_1.SemanticConventions.INPUT_MIME_TYPE]: isStringInput
156
+ ? openinference_semantic_conventions_1.MimeType.TEXT
157
+ : openinference_semantic_conventions_1.MimeType.JSON }, getEmbeddingTextAttributes(body)),
158
+ });
159
+ const execContext = api_1.trace.setSpan(api_1.context.active(), span);
160
+ const execPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => {
161
+ return api_1.context.with(execContext, () => {
162
+ return original.apply(this, args);
163
+ });
164
+ }, (error) => {
165
+ // Push the error to the span
166
+ if (error) {
167
+ span.recordException(error);
168
+ span.setStatus({
169
+ code: api_1.SpanStatusCode.ERROR,
170
+ message: error.message,
171
+ });
172
+ span.end();
58
173
  }
59
174
  });
60
175
  const wrappedPromise = execPromise.then((result) => {
61
176
  if (result) {
62
177
  // Record the results
63
- span.setAttributes(Object.assign(Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.JSON }, getLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
178
+ span.setAttributes(Object.assign({}, getEmbeddingEmbeddingsAttributes(result)));
64
179
  }
65
180
  span.setStatus({ code: api_1.SpanStatusCode.OK });
66
181
  span.end();
@@ -78,55 +193,244 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
78
193
  unpatch(moduleExports, moduleVersion) {
79
194
  api_1.diag.debug(`Removing patch for ${MODULE_NAME}@${moduleVersion}`);
80
195
  this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create");
196
+ this._unwrap(moduleExports.OpenAI.Embeddings.prototype, "create");
81
197
  }
82
198
  }
83
199
  exports.OpenAIInstrumentation = OpenAIInstrumentation;
84
200
  /**
85
- * Converts the body of the request to LLM input messages
201
+ * type-guard that checks if the response is a chat completion response
202
+ */
203
+ function isChatCompletionResponse(response) {
204
+ return "choices" in response;
205
+ }
206
+ /**
207
+ * type-guard that checks if the response is a completion response
208
+ */
209
+ function isCompletionResponse(response) {
210
+ return "choices" in response;
211
+ }
212
+ /**
213
+ * type-guard that checks if completion prompt attribute is an array of strings
214
+ */
215
+ function isPromptStringArray(prompt) {
216
+ return (Array.isArray(prompt) && prompt.every((item) => typeof item === "string"));
217
+ }
218
+ /**
219
+ * Converts the body of a chat completions request to LLM input messages
86
220
  */
87
221
  function getLLMInputMessagesAttributes(body) {
88
222
  return body.messages.reduce((acc, message, index) => {
89
- const index_prefix = `${openinference_semantic_conventions_1.SemanticConventions.LLM_INPUT_MESSAGES}.${index}`;
90
- acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT}`] = String(message.content);
91
- acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE}`] = String(message.role);
223
+ const messageAttributes = getChatCompletionInputMessageAttributes(message);
224
+ const indexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.LLM_INPUT_MESSAGES}.${index}.`;
225
+ // Flatten the attributes on the index prefix
226
+ for (const [key, value] of Object.entries(messageAttributes)) {
227
+ acc[`${indexPrefix}${key}`] = value;
228
+ }
92
229
  return acc;
93
230
  }, {});
94
231
  }
232
+ function getChatCompletionInputMessageAttributes(message) {
233
+ const role = message.role;
234
+ const attributes = {
235
+ [openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE]: role,
236
+ };
237
+ // Add the content only if it is a string
238
+ if (typeof message.content === "string")
239
+ attributes[openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT] = message.content;
240
+ switch (role) {
241
+ case "user":
242
+ // There's nothing to add for the user
243
+ break;
244
+ case "assistant":
245
+ if (message.tool_calls) {
246
+ message.tool_calls.forEach((toolCall, index) => {
247
+ // Make sure the tool call has a function
248
+ if (toolCall.function) {
249
+ const toolCallIndexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_TOOL_CALLS}.${index}.`;
250
+ attributes[toolCallIndexPrefix + openinference_semantic_conventions_1.SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
251
+ attributes[toolCallIndexPrefix +
252
+ openinference_semantic_conventions_1.SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
253
+ }
254
+ });
255
+ }
256
+ break;
257
+ case "function":
258
+ attributes[openinference_semantic_conventions_1.SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] = message.name;
259
+ break;
260
+ case "tool":
261
+ // There's nothing to add for the tool. There is a tool_id, but there are no
262
+ // semantic conventions for it
263
+ break;
264
+ case "system":
265
+ // There's nothing to add for the system. Content is captured above
266
+ break;
267
+ default:
268
+ (0, typeUtils_1.assertUnreachable)(role);
269
+ break;
270
+ }
271
+ return attributes;
272
+ }
95
273
  /**
96
- * Get Usage attributes
274
+ * Converts the body of a completions request to input attributes
97
275
  */
98
- function getUsageAttributes(response) {
99
- if (Object.prototype.hasOwnProperty.call(response, "usage")) {
100
- const completion = response;
101
- if (completion.usage) {
102
- return {
103
- [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_COMPLETION]: completion.usage.completion_tokens,
104
- [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_PROMPT]: completion.usage.prompt_tokens,
105
- [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_TOTAL]: completion.usage.total_tokens,
106
- };
276
+ function getCompletionInputValueAndMimeType(body) {
277
+ if (typeof body.prompt === "string") {
278
+ return {
279
+ [openinference_semantic_conventions_1.SemanticConventions.INPUT_VALUE]: body.prompt,
280
+ [openinference_semantic_conventions_1.SemanticConventions.INPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.TEXT,
281
+ };
282
+ }
283
+ else if (isPromptStringArray(body.prompt)) {
284
+ const prompt = body.prompt[0]; // Only single prompts are currently supported
285
+ if (prompt === undefined) {
286
+ return {};
107
287
  }
288
+ return {
289
+ [openinference_semantic_conventions_1.SemanticConventions.INPUT_VALUE]: prompt,
290
+ [openinference_semantic_conventions_1.SemanticConventions.INPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.TEXT,
291
+ };
108
292
  }
293
+ // Other cases in which the prompt is a token or array of tokens are currently unsupported
109
294
  return {};
110
295
  }
111
296
  /**
112
- * Converts the result to LLM output attributes
297
+ * Get usage attributes
113
298
  */
114
- function getLLMOutputMessagesAttributes(response) {
115
- // Handle chat completion
116
- if (Object.prototype.hasOwnProperty.call(response, "choices")) {
117
- const completion = response;
118
- // Right now support just the first choice
119
- const choice = completion.choices[0];
120
- if (!choice) {
121
- return {};
299
+ function getUsageAttributes(completion) {
300
+ if (completion.usage) {
301
+ return {
302
+ [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_COMPLETION]: completion.usage.completion_tokens,
303
+ [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_PROMPT]: completion.usage.prompt_tokens,
304
+ [openinference_semantic_conventions_1.SemanticConventions.LLM_TOKEN_COUNT_TOTAL]: completion.usage.total_tokens,
305
+ };
306
+ }
307
+ return {};
308
+ }
309
+ /**
310
+ * Converts the chat completion result to LLM output attributes
311
+ */
312
+ function getChatCompletionLLMOutputMessagesAttributes(chatCompletion) {
313
+ // Right now support just the first choice
314
+ const choice = chatCompletion.choices[0];
315
+ if (!choice) {
316
+ return {};
317
+ }
318
+ return [choice.message].reduce((acc, message, index) => {
319
+ const indexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}.`;
320
+ const messageAttributes = getChatCompletionOutputMessageAttributes(message);
321
+ // Flatten the attributes on the index prefix
322
+ for (const [key, value] of Object.entries(messageAttributes)) {
323
+ acc[`${indexPrefix}${key}`] = value;
122
324
  }
123
- return [choice.message].reduce((acc, message, index) => {
124
- const index_prefix = `${openinference_semantic_conventions_1.SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}`;
125
- acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT}`] = String(message.content);
126
- acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE}`] = message.role;
325
+ return acc;
326
+ }, {});
327
+ }
328
+ function getChatCompletionOutputMessageAttributes(message) {
329
+ const role = message.role;
330
+ const attributes = {
331
+ [openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE]: role,
332
+ };
333
+ if (message.content) {
334
+ attributes[openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT] = message.content;
335
+ }
336
+ if (message.tool_calls) {
337
+ message.tool_calls.forEach((toolCall, index) => {
338
+ const toolCallIndexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_TOOL_CALLS}.${index}.`;
339
+ // Double check that the tool call has a function
340
+ // NB: OpenAI only supports tool calls with functions right now but this may change
341
+ if (toolCall.function) {
342
+ attributes[toolCallIndexPrefix + openinference_semantic_conventions_1.SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
343
+ attributes[toolCallIndexPrefix +
344
+ openinference_semantic_conventions_1.SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
345
+ }
346
+ });
347
+ }
348
+ if (message.function_call) {
349
+ attributes[openinference_semantic_conventions_1.SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] =
350
+ message.function_call.name;
351
+ attributes[openinference_semantic_conventions_1.SemanticConventions.MESSAGE_FUNCTION_CALL_ARGUMENTS_JSON] =
352
+ message.function_call.arguments;
353
+ }
354
+ return attributes;
355
+ }
356
+ /**
357
+ * Converts the completion result to output attributes
358
+ */
359
+ function getCompletionOutputValueAndMimeType(completion) {
360
+ // Right now support just the first choice
361
+ const choice = completion.choices[0];
362
+ if (!choice) {
363
+ return {};
364
+ }
365
+ return {
366
+ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_VALUE]: String(choice.text),
367
+ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.TEXT,
368
+ };
369
+ }
370
+ /**
371
+ * Converts the embedding result payload to embedding attributes
372
+ */
373
+ function getEmbeddingTextAttributes(request) {
374
+ if (typeof request.input === "string") {
375
+ return {
376
+ [`${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.0.${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_TEXT}`]: request.input,
377
+ };
378
+ }
379
+ else if (Array.isArray(request.input) &&
380
+ request.input.length > 0 &&
381
+ typeof request.input[0] === "string") {
382
+ return request.input.reduce((acc, input, index) => {
383
+ const indexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}.`;
384
+ acc[`${indexPrefix}${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_TEXT}`] = input;
127
385
  return acc;
128
386
  }, {});
129
387
  }
388
+ // Ignore other cases where input is a number or an array of numbers
130
389
  return {};
131
390
  }
391
+ /**
392
+ * Converts the embedding result payload to embedding attributes
393
+ */
394
+ function getEmbeddingEmbeddingsAttributes(response) {
395
+ return response.data.reduce((acc, embedding, index) => {
396
+ const indexPrefix = `${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}.`;
397
+ acc[`${indexPrefix}${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_VECTOR}`] =
398
+ embedding.embedding;
399
+ return acc;
400
+ }, {});
401
+ }
402
+ /**
403
+ * Consumes the stream chunks and adds them to the span
404
+ */
405
+ function consumeChatCompletionStreamChunks(stream, span) {
406
+ var _a, stream_1, stream_1_1;
407
+ var _b, e_1, _c, _d;
408
+ return __awaiter(this, void 0, void 0, function* () {
409
+ let streamResponse = "";
410
+ try {
411
+ for (_a = true, stream_1 = __asyncValues(stream); stream_1_1 = yield stream_1.next(), _b = stream_1_1.done, !_b; _a = true) {
412
+ _d = stream_1_1.value;
413
+ _a = false;
414
+ const chunk = _d;
415
+ if (chunk.choices.length > 0 && chunk.choices[0].delta.content) {
416
+ streamResponse += chunk.choices[0].delta.content;
417
+ }
418
+ }
419
+ }
420
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
421
+ finally {
422
+ try {
423
+ if (!_a && !_b && (_c = stream_1.return)) yield _c.call(stream_1);
424
+ }
425
+ finally { if (e_1) throw e_1.error; }
426
+ }
427
+ span.setAttributes({
428
+ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_VALUE]: streamResponse,
429
+ [openinference_semantic_conventions_1.SemanticConventions.OUTPUT_MIME_TYPE]: openinference_semantic_conventions_1.MimeType.TEXT,
430
+ [`${openinference_semantic_conventions_1.SemanticConventions.LLM_OUTPUT_MESSAGES}.0.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT}`]: streamResponse,
431
+ [`${openinference_semantic_conventions_1.SemanticConventions.LLM_OUTPUT_MESSAGES}.0.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE}`]: "assistant",
432
+ });
433
+ span.end();
434
+ });
435
+ }
132
436
  //# 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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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Utility function that uses the type system to check if a switch statement is exhaustive.
3
+ * If the switch statement is not exhaustive, there will be a type error caught in typescript
4
+ *
5
+ * See https://stackoverflow.com/questions/39419170/how-do-i-check-that-a-switch-block-is-exhaustive-in-typescript for more details.
6
+ */
7
+ export declare function assertUnreachable(_: never): never;
8
+ //# sourceMappingURL=typeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeUtils.d.ts","sourceRoot":"","sources":["../../src/typeUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEjD"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertUnreachable = void 0;
4
+ /**
5
+ * Utility function that uses the type system to check if a switch statement is exhaustive.
6
+ * If the switch statement is not exhaustive, there will be a type error caught in typescript
7
+ *
8
+ * See https://stackoverflow.com/questions/39419170/how-do-i-check-that-a-switch-block-is-exhaustive-in-typescript for more details.
9
+ */
10
+ function assertUnreachable(_) {
11
+ throw new Error("Unreachable");
12
+ }
13
+ exports.assertUnreachable = assertUnreachable;
14
+ //# sourceMappingURL=typeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../src/typeUtils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,CAAQ;IACxC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAFD,8CAEC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.2";
1
+ export declare const VERSION = "0.1.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // this is an auto-generated file. see js/scripts/version-update.js
5
- exports.VERSION = "0.0.2";
5
+ exports.VERSION = "0.1.0";
6
6
  //# sourceMappingURL=version.js.map