@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.
- package/README.md +30 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/instrumentation.d.ts +19 -7
- package/dist/esm/instrumentation.d.ts.map +1 -1
- package/dist/esm/instrumentation.js +77 -9
- package/dist/esm/instrumentation.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +2 -2
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +2 -2
- package/dist/esm/version.js.map +1 -1
- package/dist/esnext/index.d.ts +1 -1
- package/dist/esnext/index.js +1 -1
- package/dist/esnext/instrumentation.d.ts +19 -7
- package/dist/esnext/instrumentation.d.ts.map +1 -1
- package/dist/esnext/instrumentation.js +75 -9
- package/dist/esnext/instrumentation.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/esnext/version.d.ts +2 -2
- package/dist/esnext/version.d.ts.map +1 -1
- package/dist/esnext/version.js +2 -2
- package/dist/esnext/version.js.map +1 -1
- package/dist/src/instrumentation.d.ts +6 -0
- package/dist/src/instrumentation.d.ts.map +1 -1
- package/dist/src/instrumentation.js +73 -7
- package/dist/src/instrumentation.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/openai.test.js +55 -10
- package/dist/test/openai.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/instrumentation.ts +183 -102
- package/src/version.ts +1 -1
package/dist/esnext/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.0.
|
|
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,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/esnext/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// this is an auto-generated file. see js/scripts/version-update.js
|
|
2
|
-
export const VERSION = "0.0.
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.0.
|
|
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,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/src/version.js
CHANGED
package/dist/src/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAA,mEAAmE;AACtD,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
package/dist/test/openai.test.js
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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
|
|
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,
|
|
1
|
+
{"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../test/openai.test.ts"],"names":[],"mappings":"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"}
|