@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,2 +1,2 @@
1
1
  export * from "./instrumentation";
2
- //# sourceMappingURL=index.d.ts.map
2
+ //# sourceMappingURL=index.d.ts.map
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from "./instrumentation";
2
- //# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -1,21 +1,15 @@
1
1
  import * as openai from "openai";
2
- import {
3
- InstrumentationBase,
4
- InstrumentationConfig,
5
- InstrumentationModuleDefinition,
6
- } from "@opentelemetry/instrumentation";
7
- export declare class OpenAIInstrumentation extends InstrumentationBase<
8
- typeof openai
9
- > {
10
- constructor(config?: InstrumentationConfig);
11
- protected init(): InstrumentationModuleDefinition<typeof openai>;
12
- /**
13
- * Patches the OpenAI module
14
- */
15
- private patch;
16
- /**
17
- * Un-patches the OpenAI module's chat completions API
18
- */
19
- private unpatch;
2
+ import { InstrumentationBase, InstrumentationConfig, InstrumentationModuleDefinition } from "@opentelemetry/instrumentation";
3
+ export declare class OpenAIInstrumentation extends InstrumentationBase<typeof openai> {
4
+ constructor(config?: InstrumentationConfig);
5
+ protected init(): InstrumentationModuleDefinition<typeof openai>;
6
+ /**
7
+ * Patches the OpenAI module
8
+ */
9
+ private patch;
10
+ /**
11
+ * Un-patches the OpenAI module's chat completions API
12
+ */
13
+ private unpatch;
20
14
  }
21
- //# sourceMappingURL=instrumentation.d.ts.map
15
+ //# sourceMappingURL=instrumentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAGhC,MAAM,gCAAgC,CAAC;AAwBxC,qBAAa,qBAAsB,SAAQ,mBAAmB,CAAC,OAAO,MAAM,CAAC;gBAC/D,MAAM,CAAC,EAAE,qBAAqB;IAQ1C,SAAS,CAAC,IAAI,IAAI,+BAA+B,CAAC,OAAO,MAAM,CAAC;IAShE;;OAEG;IACH,OAAO,CAAC,KAAK;IAgFb;;OAEG;IACH,OAAO,CAAC,OAAO;CAIhB"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAGhC,MAAM,gCAAgC,CAAC;AAkCxC,qBAAa,qBAAsB,SAAQ,mBAAmB,CAAC,OAAO,MAAM,CAAC;gBAC/D,MAAM,CAAC,EAAE,qBAAqB;IAQ1C,SAAS,CAAC,IAAI,IAAI,+BAA+B,CAAC,OAAO,MAAM,CAAC;IAShE;;OAEG;IACH,OAAO,CAAC,KAAK;IAuOb;;OAEG;IACH,OAAO,CAAC,OAAO;CAKhB"}
@@ -24,6 +24,42 @@ var __assign = (this && this.__assign) || function () {
24
24
  };
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
28
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
29
+ return new (P || (P = Promise))(function (resolve, reject) {
30
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
31
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
32
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
33
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
34
+ });
35
+ };
36
+ var __generator = (this && this.__generator) || function (thisArg, body) {
37
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
38
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
39
+ function verb(n) { return function (v) { return step([n, v]); }; }
40
+ function step(op) {
41
+ if (f) throw new TypeError("Generator is already executing.");
42
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
43
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
44
+ if (y = 0, t) op = [op[0] & 2, t.value];
45
+ switch (op[0]) {
46
+ case 0: case 1: t = op; break;
47
+ case 4: _.label++; return { value: op[1], done: false };
48
+ case 5: _.label++; y = op[1]; op = [0]; continue;
49
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
50
+ default:
51
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
52
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
53
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
54
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
55
+ if (t[2]) _.ops.pop();
56
+ _.trys.pop(); continue;
57
+ }
58
+ op = body.call(thisArg, _);
59
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
60
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
61
+ }
62
+ };
27
63
  var __rest = (this && this.__rest) || function (s, e) {
28
64
  var t = {};
29
65
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -35,10 +71,45 @@ var __rest = (this && this.__rest) || function (s, e) {
35
71
  }
36
72
  return t;
37
73
  };
74
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
75
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
76
+ var m = o[Symbol.asyncIterator], i;
77
+ 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);
78
+ 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); }); }; }
79
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
80
+ };
81
+ var __read = (this && this.__read) || function (o, n) {
82
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
83
+ if (!m) return o;
84
+ var i = m.call(o), r, ar = [], e;
85
+ try {
86
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
87
+ }
88
+ catch (error) { e = { error: error }; }
89
+ finally {
90
+ try {
91
+ if (r && !r.done && (m = i["return"])) m.call(i);
92
+ }
93
+ finally { if (e) throw e.error; }
94
+ }
95
+ return ar;
96
+ };
97
+ var __values = (this && this.__values) || function(o) {
98
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
99
+ if (m) return m.call(o);
100
+ if (o && typeof o.length === "number") return {
101
+ next: function () {
102
+ if (o && i >= o.length) o = void 0;
103
+ return { value: o && o[i++], done: !o };
104
+ }
105
+ };
106
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
107
+ };
38
108
  import { InstrumentationBase, InstrumentationNodeModuleDefinition, safeExecuteInTheMiddle, } from "@opentelemetry/instrumentation";
39
109
  import { diag, context, trace, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
40
110
  import { VERSION } from "./version";
41
111
  import { SemanticConventions, OpenInferenceSpanKind, MimeType, } from "@arizeai/openinference-semantic-conventions";
112
+ import { assertUnreachable } from "./typeUtils";
42
113
  var MODULE_NAME = "openai";
43
114
  var OpenAIInstrumentation = /** @class */ (function (_super) {
44
115
  __extends(OpenAIInstrumentation, _super);
@@ -73,7 +144,7 @@ var OpenAIInstrumentation = /** @class */ (function (_super) {
73
144
  var body = args[0];
74
145
  var _messages = body.messages, invocationParameters = __rest(body, ["messages"]);
75
146
  var span = instrumentation.tracer.startSpan("OpenAI Chat Completions", {
76
- kind: SpanKind.CLIENT,
147
+ kind: SpanKind.INTERNAL,
77
148
  attributes: __assign((_a = {}, _a[SemanticConventions.OPENINFERENCE_SPAN_KIND] = OpenInferenceSpanKind.LLM, _a[SemanticConventions.LLM_MODEL_NAME] = body.model, _a[SemanticConventions.INPUT_VALUE] = JSON.stringify(body), _a[SemanticConventions.INPUT_MIME_TYPE] = MimeType.JSON, _a[SemanticConventions.LLM_INVOCATION_PARAMETERS] = JSON.stringify(invocationParameters), _a), getLLMInputMessagesAttributes(body)),
78
149
  });
79
150
  var execContext = trace.setSpan(context.active(), span);
@@ -85,13 +156,120 @@ var OpenAIInstrumentation = /** @class */ (function (_super) {
85
156
  // Push the error to the span
86
157
  if (error) {
87
158
  span.recordException(error);
159
+ span.setStatus({
160
+ code: SpanStatusCode.ERROR,
161
+ message: error.message,
162
+ });
163
+ span.end();
88
164
  }
89
165
  });
90
166
  var wrappedPromise = execPromise.then(function (result) {
91
167
  var _a;
168
+ if (isChatCompletionResponse(result)) {
169
+ // Record the results
170
+ span.setAttributes(__assign(__assign((_a = {}, _a[SemanticConventions.OUTPUT_VALUE] = JSON.stringify(result), _a[SemanticConventions.OUTPUT_MIME_TYPE] = MimeType.JSON, _a[SemanticConventions.LLM_MODEL_NAME] = result.model, _a), getChatCompletionLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
171
+ span.setStatus({ code: SpanStatusCode.OK });
172
+ span.end();
173
+ }
174
+ else {
175
+ // This is a streaming response
176
+ // handle the chunks and add them to the span
177
+ // First split the stream via tee
178
+ var _b = __read(result.tee(), 2), leftStream = _b[0], rightStream = _b[1];
179
+ consumeChatCompletionStreamChunks(rightStream, span);
180
+ result = leftStream;
181
+ }
182
+ return result;
183
+ });
184
+ return context.bind(execContext, wrappedPromise);
185
+ };
186
+ });
187
+ this._wrap(module.OpenAI.Completions.prototype, "create",
188
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
189
+ function (original) {
190
+ return function patchedCreate() {
191
+ var _a;
192
+ var _this = this;
193
+ var args = [];
194
+ for (var _i = 0; _i < arguments.length; _i++) {
195
+ args[_i] = arguments[_i];
196
+ }
197
+ var body = args[0];
198
+ var _prompt = body.prompt, invocationParameters = __rest(body, ["prompt"]);
199
+ var span = instrumentation.tracer.startSpan("OpenAI Completions", {
200
+ kind: SpanKind.INTERNAL,
201
+ attributes: __assign((_a = {}, _a[SemanticConventions.OPENINFERENCE_SPAN_KIND] = OpenInferenceSpanKind.LLM, _a[SemanticConventions.LLM_MODEL_NAME] = body.model, _a[SemanticConventions.LLM_INVOCATION_PARAMETERS] = JSON.stringify(invocationParameters), _a), getCompletionInputValueAndMimeType(body)),
202
+ });
203
+ var execContext = trace.setSpan(context.active(), span);
204
+ var execPromise = safeExecuteInTheMiddle(function () {
205
+ return context.with(execContext, function () {
206
+ return original.apply(_this, args);
207
+ });
208
+ }, function (error) {
209
+ // Push the error to the span
210
+ if (error) {
211
+ span.recordException(error);
212
+ span.setStatus({
213
+ code: SpanStatusCode.ERROR,
214
+ message: error.message,
215
+ });
216
+ span.end();
217
+ }
218
+ });
219
+ var wrappedPromise = execPromise.then(function (result) {
220
+ var _a;
221
+ if (isCompletionResponse(result)) {
222
+ // Record the results
223
+ span.setAttributes(__assign(__assign((_a = {}, _a[SemanticConventions.OUTPUT_VALUE] = JSON.stringify(result), _a[SemanticConventions.OUTPUT_MIME_TYPE] = MimeType.JSON, _a[SemanticConventions.LLM_MODEL_NAME] = result.model, _a), getCompletionOutputValueAndMimeType(result)), getUsageAttributes(result)));
224
+ span.setStatus({ code: SpanStatusCode.OK });
225
+ span.end();
226
+ }
227
+ return result;
228
+ });
229
+ return context.bind(execContext, wrappedPromise);
230
+ };
231
+ });
232
+ this._wrap(module.OpenAI.Embeddings.prototype, "create",
233
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
234
+ function (original) {
235
+ return function patchedEmbeddingCreate() {
236
+ var _a;
237
+ var _this = this;
238
+ var args = [];
239
+ for (var _i = 0; _i < arguments.length; _i++) {
240
+ args[_i] = arguments[_i];
241
+ }
242
+ var body = args[0];
243
+ var input = body.input;
244
+ var isStringInput = typeof input === "string";
245
+ var span = instrumentation.tracer.startSpan("OpenAI Embeddings", {
246
+ kind: SpanKind.INTERNAL,
247
+ attributes: __assign((_a = {}, _a[SemanticConventions.OPENINFERENCE_SPAN_KIND] = OpenInferenceSpanKind.EMBEDDING, _a[SemanticConventions.EMBEDDING_MODEL_NAME] = body.model, _a[SemanticConventions.INPUT_VALUE] = isStringInput
248
+ ? input
249
+ : JSON.stringify(input), _a[SemanticConventions.INPUT_MIME_TYPE] = isStringInput
250
+ ? MimeType.TEXT
251
+ : MimeType.JSON, _a), getEmbeddingTextAttributes(body)),
252
+ });
253
+ var execContext = trace.setSpan(context.active(), span);
254
+ var execPromise = safeExecuteInTheMiddle(function () {
255
+ return context.with(execContext, function () {
256
+ return original.apply(_this, args);
257
+ });
258
+ }, function (error) {
259
+ // Push the error to the span
260
+ if (error) {
261
+ span.recordException(error);
262
+ span.setStatus({
263
+ code: SpanStatusCode.ERROR,
264
+ message: error.message,
265
+ });
266
+ span.end();
267
+ }
268
+ });
269
+ var wrappedPromise = execPromise.then(function (result) {
92
270
  if (result) {
93
271
  // Record the results
94
- span.setAttributes(__assign(__assign((_a = {}, _a[SemanticConventions.OUTPUT_VALUE] = JSON.stringify(result), _a[SemanticConventions.OUTPUT_MIME_TYPE] = MimeType.JSON, _a), getLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
272
+ span.setAttributes(__assign({}, getEmbeddingEmbeddingsAttributes(result)));
95
273
  }
96
274
  span.setStatus({ code: SpanStatusCode.OK });
97
275
  span.end();
@@ -109,57 +287,300 @@ var OpenAIInstrumentation = /** @class */ (function (_super) {
109
287
  OpenAIInstrumentation.prototype.unpatch = function (moduleExports, moduleVersion) {
110
288
  diag.debug("Removing patch for ".concat(MODULE_NAME, "@").concat(moduleVersion));
111
289
  this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create");
290
+ this._unwrap(moduleExports.OpenAI.Embeddings.prototype, "create");
112
291
  };
113
292
  return OpenAIInstrumentation;
114
293
  }(InstrumentationBase));
115
294
  export { OpenAIInstrumentation };
116
295
  /**
117
- * Converts the body of the request to LLM input messages
296
+ * type-guard that checks if the response is a chat completion response
297
+ */
298
+ function isChatCompletionResponse(response) {
299
+ return "choices" in response;
300
+ }
301
+ /**
302
+ * type-guard that checks if the response is a completion response
303
+ */
304
+ function isCompletionResponse(response) {
305
+ return "choices" in response;
306
+ }
307
+ /**
308
+ * type-guard that checks if completion prompt attribute is an array of strings
309
+ */
310
+ function isPromptStringArray(prompt) {
311
+ return (Array.isArray(prompt) && prompt.every(function (item) { return typeof item === "string"; }));
312
+ }
313
+ /**
314
+ * Converts the body of a chat completions request to LLM input messages
118
315
  */
119
316
  function getLLMInputMessagesAttributes(body) {
120
317
  return body.messages.reduce(function (acc, message, index) {
121
- var index_prefix = "".concat(SemanticConventions.LLM_INPUT_MESSAGES, ".").concat(index);
122
- acc["".concat(index_prefix, ".").concat(SemanticConventions.MESSAGE_CONTENT)] = String(message.content);
123
- acc["".concat(index_prefix, ".").concat(SemanticConventions.MESSAGE_ROLE)] = String(message.role);
318
+ var e_1, _a;
319
+ var messageAttributes = getChatCompletionInputMessageAttributes(message);
320
+ var indexPrefix = "".concat(SemanticConventions.LLM_INPUT_MESSAGES, ".").concat(index, ".");
321
+ try {
322
+ // Flatten the attributes on the index prefix
323
+ for (var _b = __values(Object.entries(messageAttributes)), _c = _b.next(); !_c.done; _c = _b.next()) {
324
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
325
+ acc["".concat(indexPrefix).concat(key)] = value;
326
+ }
327
+ }
328
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
329
+ finally {
330
+ try {
331
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
332
+ }
333
+ finally { if (e_1) throw e_1.error; }
334
+ }
124
335
  return acc;
125
336
  }, {});
126
337
  }
338
+ function getChatCompletionInputMessageAttributes(message) {
339
+ var _a;
340
+ var role = message.role;
341
+ var attributes = (_a = {},
342
+ _a[SemanticConventions.MESSAGE_ROLE] = role,
343
+ _a);
344
+ // Add the content only if it is a string
345
+ if (typeof message.content === "string")
346
+ attributes[SemanticConventions.MESSAGE_CONTENT] = message.content;
347
+ switch (role) {
348
+ case "user":
349
+ // There's nothing to add for the user
350
+ break;
351
+ case "assistant":
352
+ if (message.tool_calls) {
353
+ message.tool_calls.forEach(function (toolCall, index) {
354
+ // Make sure the tool call has a function
355
+ if (toolCall.function) {
356
+ var toolCallIndexPrefix = "".concat(SemanticConventions.MESSAGE_TOOL_CALLS, ".").concat(index, ".");
357
+ attributes[toolCallIndexPrefix + SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
358
+ attributes[toolCallIndexPrefix +
359
+ SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
360
+ }
361
+ });
362
+ }
363
+ break;
364
+ case "function":
365
+ attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] = message.name;
366
+ break;
367
+ case "tool":
368
+ // There's nothing to add for the tool. There is a tool_id, but there are no
369
+ // semantic conventions for it
370
+ break;
371
+ case "system":
372
+ // There's nothing to add for the system. Content is captured above
373
+ break;
374
+ default:
375
+ assertUnreachable(role);
376
+ break;
377
+ }
378
+ return attributes;
379
+ }
127
380
  /**
128
- * Get Usage attributes
381
+ * Converts the body of a completions request to input attributes
129
382
  */
130
- function getUsageAttributes(response) {
131
- var _a;
132
- if (Object.prototype.hasOwnProperty.call(response, "usage")) {
133
- var completion = response;
134
- if (completion.usage) {
135
- return _a = {},
136
- _a[SemanticConventions.LLM_TOKEN_COUNT_COMPLETION] = completion.usage.completion_tokens,
137
- _a[SemanticConventions.LLM_TOKEN_COUNT_PROMPT] = completion.usage.prompt_tokens,
138
- _a[SemanticConventions.LLM_TOKEN_COUNT_TOTAL] = completion.usage.total_tokens,
139
- _a;
383
+ function getCompletionInputValueAndMimeType(body) {
384
+ var _a, _b;
385
+ if (typeof body.prompt === "string") {
386
+ return _a = {},
387
+ _a[SemanticConventions.INPUT_VALUE] = body.prompt,
388
+ _a[SemanticConventions.INPUT_MIME_TYPE] = MimeType.TEXT,
389
+ _a;
390
+ }
391
+ else if (isPromptStringArray(body.prompt)) {
392
+ var prompt = body.prompt[0]; // Only single prompts are currently supported
393
+ if (prompt === undefined) {
394
+ return {};
140
395
  }
396
+ return _b = {},
397
+ _b[SemanticConventions.INPUT_VALUE] = prompt,
398
+ _b[SemanticConventions.INPUT_MIME_TYPE] = MimeType.TEXT,
399
+ _b;
141
400
  }
401
+ // Other cases in which the prompt is a token or array of tokens are currently unsupported
142
402
  return {};
143
403
  }
144
404
  /**
145
- * Converts the result to LLM output attributes
405
+ * Get usage attributes
146
406
  */
147
- function getLLMOutputMessagesAttributes(response) {
148
- // Handle chat completion
149
- if (Object.prototype.hasOwnProperty.call(response, "choices")) {
150
- var completion = response;
151
- // Right now support just the first choice
152
- var choice = completion.choices[0];
153
- if (!choice) {
154
- return {};
407
+ function getUsageAttributes(completion) {
408
+ var _a;
409
+ if (completion.usage) {
410
+ return _a = {},
411
+ _a[SemanticConventions.LLM_TOKEN_COUNT_COMPLETION] = completion.usage.completion_tokens,
412
+ _a[SemanticConventions.LLM_TOKEN_COUNT_PROMPT] = completion.usage.prompt_tokens,
413
+ _a[SemanticConventions.LLM_TOKEN_COUNT_TOTAL] = completion.usage.total_tokens,
414
+ _a;
415
+ }
416
+ return {};
417
+ }
418
+ /**
419
+ * Converts the chat completion result to LLM output attributes
420
+ */
421
+ function getChatCompletionLLMOutputMessagesAttributes(chatCompletion) {
422
+ // Right now support just the first choice
423
+ var choice = chatCompletion.choices[0];
424
+ if (!choice) {
425
+ return {};
426
+ }
427
+ return [choice.message].reduce(function (acc, message, index) {
428
+ var e_2, _a;
429
+ var indexPrefix = "".concat(SemanticConventions.LLM_OUTPUT_MESSAGES, ".").concat(index, ".");
430
+ var messageAttributes = getChatCompletionOutputMessageAttributes(message);
431
+ try {
432
+ // Flatten the attributes on the index prefix
433
+ for (var _b = __values(Object.entries(messageAttributes)), _c = _b.next(); !_c.done; _c = _b.next()) {
434
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
435
+ acc["".concat(indexPrefix).concat(key)] = value;
436
+ }
155
437
  }
156
- return [choice.message].reduce(function (acc, message, index) {
157
- var index_prefix = "".concat(SemanticConventions.LLM_OUTPUT_MESSAGES, ".").concat(index);
158
- acc["".concat(index_prefix, ".").concat(SemanticConventions.MESSAGE_CONTENT)] = String(message.content);
159
- acc["".concat(index_prefix, ".").concat(SemanticConventions.MESSAGE_ROLE)] = message.role;
438
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
439
+ finally {
440
+ try {
441
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
442
+ }
443
+ finally { if (e_2) throw e_2.error; }
444
+ }
445
+ return acc;
446
+ }, {});
447
+ }
448
+ function getChatCompletionOutputMessageAttributes(message) {
449
+ var _a;
450
+ var role = message.role;
451
+ var attributes = (_a = {},
452
+ _a[SemanticConventions.MESSAGE_ROLE] = role,
453
+ _a);
454
+ if (message.content) {
455
+ attributes[SemanticConventions.MESSAGE_CONTENT] = message.content;
456
+ }
457
+ if (message.tool_calls) {
458
+ message.tool_calls.forEach(function (toolCall, index) {
459
+ var toolCallIndexPrefix = "".concat(SemanticConventions.MESSAGE_TOOL_CALLS, ".").concat(index, ".");
460
+ // Double check that the tool call has a function
461
+ // NB: OpenAI only supports tool calls with functions right now but this may change
462
+ if (toolCall.function) {
463
+ attributes[toolCallIndexPrefix + SemanticConventions.TOOL_CALL_FUNCTION_NAME] = toolCall.function.name;
464
+ attributes[toolCallIndexPrefix +
465
+ SemanticConventions.TOOL_CALL_FUNCTION_ARGUMENTS_JSON] = toolCall.function.arguments;
466
+ }
467
+ });
468
+ }
469
+ if (message.function_call) {
470
+ attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_NAME] =
471
+ message.function_call.name;
472
+ attributes[SemanticConventions.MESSAGE_FUNCTION_CALL_ARGUMENTS_JSON] =
473
+ message.function_call.arguments;
474
+ }
475
+ return attributes;
476
+ }
477
+ /**
478
+ * Converts the completion result to output attributes
479
+ */
480
+ function getCompletionOutputValueAndMimeType(completion) {
481
+ var _a;
482
+ // Right now support just the first choice
483
+ var choice = completion.choices[0];
484
+ if (!choice) {
485
+ return {};
486
+ }
487
+ return _a = {},
488
+ _a[SemanticConventions.OUTPUT_VALUE] = String(choice.text),
489
+ _a[SemanticConventions.OUTPUT_MIME_TYPE] = MimeType.TEXT,
490
+ _a;
491
+ }
492
+ /**
493
+ * Converts the embedding result payload to embedding attributes
494
+ */
495
+ function getEmbeddingTextAttributes(request) {
496
+ var _a;
497
+ if (typeof request.input === "string") {
498
+ return _a = {},
499
+ _a["".concat(SemanticConventions.EMBEDDING_EMBEDDINGS, ".0.").concat(SemanticConventions.EMBEDDING_TEXT)] = request.input,
500
+ _a;
501
+ }
502
+ else if (Array.isArray(request.input) &&
503
+ request.input.length > 0 &&
504
+ typeof request.input[0] === "string") {
505
+ return request.input.reduce(function (acc, input, index) {
506
+ var indexPrefix = "".concat(SemanticConventions.EMBEDDING_EMBEDDINGS, ".").concat(index, ".");
507
+ acc["".concat(indexPrefix).concat(SemanticConventions.EMBEDDING_TEXT)] = input;
160
508
  return acc;
161
509
  }, {});
162
510
  }
511
+ // Ignore other cases where input is a number or an array of numbers
163
512
  return {};
164
513
  }
514
+ /**
515
+ * Converts the embedding result payload to embedding attributes
516
+ */
517
+ function getEmbeddingEmbeddingsAttributes(response) {
518
+ return response.data.reduce(function (acc, embedding, index) {
519
+ var indexPrefix = "".concat(SemanticConventions.EMBEDDING_EMBEDDINGS, ".").concat(index, ".");
520
+ acc["".concat(indexPrefix).concat(SemanticConventions.EMBEDDING_VECTOR)] =
521
+ embedding.embedding;
522
+ return acc;
523
+ }, {});
524
+ }
525
+ /**
526
+ * Consumes the stream chunks and adds them to the span
527
+ */
528
+ function consumeChatCompletionStreamChunks(stream, span) {
529
+ var _a, stream_1, stream_1_1;
530
+ var _b, e_3, _c, _d;
531
+ return __awaiter(this, void 0, void 0, function () {
532
+ var streamResponse, chunk, e_3_1;
533
+ var _e;
534
+ return __generator(this, function (_f) {
535
+ switch (_f.label) {
536
+ case 0:
537
+ streamResponse = "";
538
+ _f.label = 1;
539
+ case 1:
540
+ _f.trys.push([1, 6, 7, 12]);
541
+ _a = true, stream_1 = __asyncValues(stream);
542
+ _f.label = 2;
543
+ case 2: return [4 /*yield*/, stream_1.next()];
544
+ case 3:
545
+ if (!(stream_1_1 = _f.sent(), _b = stream_1_1.done, !_b)) return [3 /*break*/, 5];
546
+ _d = stream_1_1.value;
547
+ _a = false;
548
+ chunk = _d;
549
+ if (chunk.choices.length > 0 && chunk.choices[0].delta.content) {
550
+ streamResponse += chunk.choices[0].delta.content;
551
+ }
552
+ _f.label = 4;
553
+ case 4:
554
+ _a = true;
555
+ return [3 /*break*/, 2];
556
+ case 5: return [3 /*break*/, 12];
557
+ case 6:
558
+ e_3_1 = _f.sent();
559
+ e_3 = { error: e_3_1 };
560
+ return [3 /*break*/, 12];
561
+ case 7:
562
+ _f.trys.push([7, , 10, 11]);
563
+ if (!(!_a && !_b && (_c = stream_1.return))) return [3 /*break*/, 9];
564
+ return [4 /*yield*/, _c.call(stream_1)];
565
+ case 8:
566
+ _f.sent();
567
+ _f.label = 9;
568
+ case 9: return [3 /*break*/, 11];
569
+ case 10:
570
+ if (e_3) throw e_3.error;
571
+ return [7 /*endfinally*/];
572
+ case 11: return [7 /*endfinally*/];
573
+ case 12:
574
+ span.setAttributes((_e = {},
575
+ _e[SemanticConventions.OUTPUT_VALUE] = streamResponse,
576
+ _e[SemanticConventions.OUTPUT_MIME_TYPE] = MimeType.TEXT,
577
+ _e["".concat(SemanticConventions.LLM_OUTPUT_MESSAGES, ".0.").concat(SemanticConventions.MESSAGE_CONTENT)] = streamResponse,
578
+ _e["".concat(SemanticConventions.LLM_OUTPUT_MESSAGES, ".0.").concat(SemanticConventions.MESSAGE_ROLE)] = "assistant",
579
+ _e));
580
+ span.end();
581
+ return [2 /*return*/];
582
+ }
583
+ });
584
+ });
585
+ }
165
586
  //# 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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"}