@arizeai/openinference-instrumentation-openai 0.0.1-rc9 → 0.0.3

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 (37) hide show
  1. package/README.md +30 -1
  2. package/dist/esm/index.d.ts +1 -1
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/instrumentation.d.ts +19 -7
  5. package/dist/esm/instrumentation.d.ts.map +1 -1
  6. package/dist/esm/instrumentation.js +77 -9
  7. package/dist/esm/instrumentation.js.map +1 -1
  8. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  9. package/dist/esm/version.d.ts +2 -2
  10. package/dist/esm/version.d.ts.map +1 -1
  11. package/dist/esm/version.js +2 -2
  12. package/dist/esm/version.js.map +1 -1
  13. package/dist/esnext/index.d.ts +1 -1
  14. package/dist/esnext/index.js +1 -1
  15. package/dist/esnext/instrumentation.d.ts +19 -7
  16. package/dist/esnext/instrumentation.d.ts.map +1 -1
  17. package/dist/esnext/instrumentation.js +75 -9
  18. package/dist/esnext/instrumentation.js.map +1 -1
  19. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  20. package/dist/esnext/version.d.ts +2 -2
  21. package/dist/esnext/version.d.ts.map +1 -1
  22. package/dist/esnext/version.js +2 -2
  23. package/dist/esnext/version.js.map +1 -1
  24. package/dist/src/instrumentation.d.ts +6 -0
  25. package/dist/src/instrumentation.d.ts.map +1 -1
  26. package/dist/src/instrumentation.js +73 -7
  27. package/dist/src/instrumentation.js.map +1 -1
  28. package/dist/src/version.d.ts +1 -1
  29. package/dist/src/version.d.ts.map +1 -1
  30. package/dist/src/version.js +1 -1
  31. package/dist/src/version.js.map +1 -1
  32. package/dist/test/openai.test.js +55 -10
  33. package/dist/test/openai.test.js.map +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +3 -2
  36. package/src/instrumentation.ts +183 -102
  37. package/src/version.ts +1 -1
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.1-rc9";
2
- //# sourceMappingURL=version.d.ts.map
1
+ export declare const VERSION = "0.0.2";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -1,3 +1,3 @@
1
1
  // this is an auto-generated file. see js/scripts/version-update.js
2
- export const VERSION = "0.0.1-rc9";
3
- //# sourceMappingURL=version.js.map
2
+ export const VERSION = "0.0.2";
3
+ //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -3,7 +3,13 @@ import { InstrumentationBase, InstrumentationConfig, InstrumentationModuleDefini
3
3
  export declare class OpenAIInstrumentation extends InstrumentationBase<typeof openai> {
4
4
  constructor(config?: InstrumentationConfig);
5
5
  protected init(): InstrumentationModuleDefinition<typeof openai>;
6
+ /**
7
+ * Patches the OpenAI module
8
+ */
6
9
  private patch;
10
+ /**
11
+ * Un-patches the OpenAI module's chat completions API
12
+ */
7
13
  private unpatch;
8
14
  }
9
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,EACH,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAGlC,MAAM,gCAAgC,CAAC;AAmBxC,qBAAa,qBAAsB,SAAQ,mBAAmB,CAAC,OAAO,MAAM,CAAC;gBAC7D,MAAM,CAAC,EAAE,qBAAqB;IAQ1C,SAAS,CAAC,IAAI,IAAI,+BAA+B,CAAC,OAAO,MAAM,CAAC;IAShE,OAAO,CAAC,KAAK;IA2Db,OAAO,CAAC,OAAO;CAGlB"}
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,4 +1,15 @@
1
1
  "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.OpenAIInstrumentation = void 0;
4
15
  const instrumentation_1 = require("@opentelemetry/instrumentation");
@@ -14,19 +25,26 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
14
25
  const module = new instrumentation_1.InstrumentationNodeModuleDefinition("openai", ["^4.0.0"], this.patch.bind(this), this.unpatch.bind(this));
15
26
  return module;
16
27
  }
28
+ /**
29
+ * Patches the OpenAI module
30
+ */
17
31
  patch(module, moduleVersion) {
18
- console.log(`Applying patch for ${MODULE_NAME}@${moduleVersion}`);
19
- const plugin = this;
32
+ api_1.diag.debug(`Applying patch for ${MODULE_NAME}@${moduleVersion}`);
20
33
  if (module === null || module === void 0 ? void 0 : module.openInferencePatched) {
21
34
  return module;
22
35
  }
36
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
23
37
  const instrumentation = this;
24
- this._wrap(module.OpenAI.Chat.Completions.prototype, "create", (original) => {
38
+ // Patch create chat completions
39
+ this._wrap(module.OpenAI.Chat.Completions.prototype, "create",
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ (original) => {
25
42
  return function patchedCreate(...args) {
26
43
  const body = args[0];
44
+ const { messages: _messages } = body, invocationParameters = __rest(body, ["messages"]);
27
45
  const span = instrumentation.tracer.startSpan(`OpenAI Chat Completions`, {
28
46
  kind: api_1.SpanKind.CLIENT,
29
- attributes: Object.assign({ [openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND]: openinference_semantic_conventions_1.OpenInferenceSpanKind.LLM }, getLLMInputMessagesAttributes(body)),
47
+ 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)),
30
48
  });
31
49
  const execContext = api_1.trace.setSpan(api_1.context.active(), span);
32
50
  const execPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => {
@@ -34,10 +52,17 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
34
52
  return original.apply(this, args);
35
53
  });
36
54
  }, (error) => {
37
- // TODO handler the error
55
+ // Push the error to the span
56
+ if (error) {
57
+ span.recordException(error);
58
+ }
38
59
  });
39
60
  const wrappedPromise = execPromise.then((result) => {
40
- // TODO set span attributes
61
+ if (result) {
62
+ // 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)));
64
+ }
65
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
41
66
  span.end();
42
67
  return result;
43
68
  });
@@ -47,13 +72,17 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
47
72
  module.openInferencePatched = true;
48
73
  return module;
49
74
  }
75
+ /**
76
+ * Un-patches the OpenAI module's chat completions API
77
+ */
50
78
  unpatch(moduleExports, moduleVersion) {
51
79
  api_1.diag.debug(`Removing patch for ${MODULE_NAME}@${moduleVersion}`);
80
+ this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create");
52
81
  }
53
82
  }
54
83
  exports.OpenAIInstrumentation = OpenAIInstrumentation;
55
84
  /**
56
- * Converts the body input
85
+ * Converts the body of the request to LLM input messages
57
86
  */
58
87
  function getLLMInputMessagesAttributes(body) {
59
88
  return body.messages.reduce((acc, message, index) => {
@@ -63,4 +92,41 @@ function getLLMInputMessagesAttributes(body) {
63
92
  return acc;
64
93
  }, {});
65
94
  }
95
+ /**
96
+ * Get Usage attributes
97
+ */
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
+ };
107
+ }
108
+ }
109
+ return {};
110
+ }
111
+ /**
112
+ * Converts the result to LLM output attributes
113
+ */
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 {};
122
+ }
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;
127
+ return acc;
128
+ }, {});
129
+ }
130
+ return {};
131
+ }
66
132
  //# 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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"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.1-rc9";
1
+ export declare const VERSION = "0.0.2";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -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.1-rc9";
5
+ exports.VERSION = "0.0.2";
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,OAAO,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,OAAO,GAAG,OAAO,CAAC"}
@@ -35,15 +35,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
35
35
  const src_1 = require("../src");
36
36
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
37
37
  const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
38
- const resources_1 = require("@opentelemetry/resources");
39
- const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
40
38
  const tracerProvider = new sdk_trace_node_1.NodeTracerProvider();
41
39
  tracerProvider.register();
42
- const memoryExporter = new sdk_trace_base_1.InMemorySpanExporter();
43
- const tracer = tracerProvider.getTracer("default");
44
- const resource = new resources_1.Resource({
45
- [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: "test-instrumentation-openai",
46
- });
47
40
  const instrumentation = new src_1.OpenAIInstrumentation();
48
41
  instrumentation.disable();
49
42
  const OpenAI = __importStar(require("openai"));
@@ -51,7 +44,7 @@ describe("OpenAIInstrumentation", () => {
51
44
  let openai;
52
45
  const memoryExporter = new sdk_trace_base_1.InMemorySpanExporter();
53
46
  const provider = new sdk_trace_node_1.NodeTracerProvider();
54
- const tracer = provider.getTracer("default");
47
+ provider.getTracer("default");
55
48
  instrumentation.setTracerProvider(tracerProvider);
56
49
  tracerProvider.addSpanProcessor(new sdk_trace_base_1.SimpleSpanProcessor(memoryExporter));
57
50
  beforeEach(() => {
@@ -59,20 +52,72 @@ describe("OpenAIInstrumentation", () => {
59
52
  instrumentation._modules[0].moduleExports = OpenAI;
60
53
  instrumentation.enable();
61
54
  openai = new OpenAI.OpenAI({
62
- apiKey: process.env.OPENAI_API_KEY,
55
+ apiKey: `fake-api-key`,
63
56
  });
64
57
  memoryExporter.reset();
65
58
  });
59
+ afterEach(() => {
60
+ instrumentation.disable();
61
+ jest.clearAllMocks();
62
+ });
66
63
  it("is patched", () => {
67
64
  expect(OpenAI.openInferencePatched).toBe(true);
68
65
  });
69
66
  it("creates a span for chat completions", () => __awaiter(void 0, void 0, void 0, function* () {
70
- const chatCompletion = yield openai.chat.completions.create({
67
+ const response = {
68
+ id: "chatcmpl-8adq9JloOzNZ9TyuzrKyLpGXexh6p",
69
+ object: "chat.completion",
70
+ created: 1703743645,
71
+ model: "gpt-3.5-turbo-0613",
72
+ choices: [
73
+ {
74
+ index: 0,
75
+ message: {
76
+ role: "assistant",
77
+ content: "This is a test.",
78
+ },
79
+ logprobs: null,
80
+ finish_reason: "stop",
81
+ },
82
+ ],
83
+ usage: {
84
+ prompt_tokens: 12,
85
+ completion_tokens: 5,
86
+ total_tokens: 17,
87
+ },
88
+ };
89
+ // Mock out the chat completions endpoint
90
+ jest.spyOn(openai, "post").mockImplementation(
91
+ // @ts-expect-error the response type is not correct - this is just for testing
92
+ () => __awaiter(void 0, void 0, void 0, function* () {
93
+ return response;
94
+ }));
95
+ yield openai.chat.completions.create({
71
96
  messages: [{ role: "user", content: "Say this is a test" }],
72
97
  model: "gpt-3.5-turbo",
73
98
  });
74
99
  const spans = memoryExporter.getFinishedSpans();
75
100
  expect(spans.length).toBe(1);
101
+ const span = spans[0];
102
+ expect(span.name).toBe("OpenAI Chat Completions");
103
+ expect(span.attributes).toMatchInlineSnapshot(`
104
+ {
105
+ "input.mime_type": "application/json",
106
+ "input.value": "{"messages":[{"role":"user","content":"Say this is a test"}],"model":"gpt-3.5-turbo"}",
107
+ "llm.input_messages.0.message.content": "Say this is a test",
108
+ "llm.input_messages.0.message.role": "user",
109
+ "llm.invocation_parameters": "{"model":"gpt-3.5-turbo"}",
110
+ "llm.model_name": "gpt-3.5-turbo",
111
+ "llm.output_messages.0.message.content": "This is a test.",
112
+ "llm.output_messages.0.message.role": "assistant",
113
+ "llm.token_count.completion": 5,
114
+ "llm.token_count.prompt": 12,
115
+ "llm.token_count.total": 17,
116
+ "openinference.span.kind": "llm",
117
+ "output.mime_type": "application/json",
118
+ "output.value": "{"id":"chatcmpl-8adq9JloOzNZ9TyuzrKyLpGXexh6p","object":"chat.completion","created":1703743645,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"message":{"role":"assistant","content":"This is a test."},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":12,"completion_tokens":5,"total_tokens":17}}",
119
+ }
120
+ `);
76
121
  }));
77
122
  });
78
123
  //# sourceMappingURL=openai.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../test/openai.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gCAA+C;AAC/C,kEAGuC;AACvC,kEAAmE;AACnE,wDAAoD;AACpD,8EAAiF;AACjF,MAAM,cAAc,GAAG,IAAI,mCAAkB,EAAE,CAAC;AAChD,cAAc,CAAC,QAAQ,EAAE,CAAC;AAC1B,MAAM,cAAc,GAAG,IAAI,qCAAoB,EAAE,CAAC;AAClD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACnD,MAAM,QAAQ,GAAG,IAAI,oBAAQ,CAAC;IAC1B,CAAC,iDAA0B,CAAC,YAAY,CAAC,EAAE,6BAA6B;CAC3E,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,2BAAqB,EAAE,CAAC;AACpD,eAAe,CAAC,OAAO,EAAE,CAAC;AAE1B,+CAAiC;AAEjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACnC,IAAI,MAAqB,CAAC;IAE1B,MAAM,cAAc,GAAG,IAAI,qCAAoB,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,mCAAkB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7C,eAAe,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAClD,cAAc,CAAC,gBAAgB,CAAC,IAAI,oCAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;IAEzE,UAAU,CAAC,GAAG,EAAE;QACZ,iHAAiH;QACjH,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC;QACnD,eAAe,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACrC,CAAC,CAAC;QACH,cAAc,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QAClB,MAAM,CAAE,MAAc,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;QACjD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACxD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;YAC3D,KAAK,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAA,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../test/openai.test.ts"],"names":[],"mappings":"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"}