@arizeai/openinference-instrumentation-openai 0.0.2 → 0.0.4
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 +2 -2
- package/dist/esm/instrumentation.d.ts.map +1 -1
- package/dist/esm/instrumentation.js +107 -10
- package/dist/esm/instrumentation.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esnext/instrumentation.d.ts.map +1 -1
- package/dist/esnext/instrumentation.js +102 -10
- package/dist/esnext/instrumentation.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/src/instrumentation.d.ts.map +1 -1
- package/dist/src/instrumentation.js +102 -10
- package/dist/src/instrumentation.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/test/openai.test.js +46 -15
- package/dist/test/openai.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -2
- package/src/instrumentation.ts +297 -166
- package/src/version.ts +1 -1
|
@@ -33,14 +33,17 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
33
33
|
if (module === null || module === void 0 ? void 0 : module.openInferencePatched) {
|
|
34
34
|
return module;
|
|
35
35
|
}
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
36
37
|
const instrumentation = this;
|
|
37
38
|
// Patch create chat completions
|
|
38
|
-
this._wrap(module.OpenAI.Chat.Completions.prototype, "create",
|
|
39
|
+
this._wrap(module.OpenAI.Chat.Completions.prototype, "create",
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
(original) => {
|
|
39
42
|
return function patchedCreate(...args) {
|
|
40
43
|
const body = args[0];
|
|
41
|
-
const { messages } = body, invocationParameters = __rest(body, ["messages"]);
|
|
44
|
+
const { messages: _messages } = body, invocationParameters = __rest(body, ["messages"]);
|
|
42
45
|
const span = instrumentation.tracer.startSpan(`OpenAI Chat Completions`, {
|
|
43
|
-
kind: api_1.SpanKind.
|
|
46
|
+
kind: api_1.SpanKind.INTERNAL,
|
|
44
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)),
|
|
45
48
|
});
|
|
46
49
|
const execContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
@@ -52,12 +55,64 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
52
55
|
// Push the error to the span
|
|
53
56
|
if (error) {
|
|
54
57
|
span.recordException(error);
|
|
58
|
+
span.setStatus({
|
|
59
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
60
|
+
message: error.message,
|
|
61
|
+
});
|
|
62
|
+
span.end();
|
|
55
63
|
}
|
|
56
64
|
});
|
|
57
65
|
const wrappedPromise = execPromise.then((result) => {
|
|
58
66
|
if (result) {
|
|
59
67
|
// Record the results
|
|
60
|
-
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
|
|
68
|
+
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,
|
|
69
|
+
// Override the model from the value sent by the server
|
|
70
|
+
[openinference_semantic_conventions_1.SemanticConventions.LLM_MODEL_NAME]: isChatCompletionResponse(result)
|
|
71
|
+
? result.model
|
|
72
|
+
: body.model }, getLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
|
|
73
|
+
}
|
|
74
|
+
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
75
|
+
span.end();
|
|
76
|
+
return result;
|
|
77
|
+
});
|
|
78
|
+
return api_1.context.bind(execContext, wrappedPromise);
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
this._wrap(module.OpenAI.Embeddings.prototype, "create",
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
+
(original) => {
|
|
84
|
+
return function patchedEmbeddingCreate(...args) {
|
|
85
|
+
const body = args[0];
|
|
86
|
+
const { input } = body;
|
|
87
|
+
const isStringInput = typeof input == "string";
|
|
88
|
+
const span = instrumentation.tracer.startSpan(`OpenAI Embeddings`, {
|
|
89
|
+
kind: api_1.SpanKind.INTERNAL,
|
|
90
|
+
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
|
|
91
|
+
? input
|
|
92
|
+
: JSON.stringify(input), [openinference_semantic_conventions_1.SemanticConventions.INPUT_MIME_TYPE]: isStringInput
|
|
93
|
+
? openinference_semantic_conventions_1.MimeType.TEXT
|
|
94
|
+
: openinference_semantic_conventions_1.MimeType.JSON }, getEmbeddingTextAttributes(body)),
|
|
95
|
+
});
|
|
96
|
+
const execContext = api_1.trace.setSpan(api_1.context.active(), span);
|
|
97
|
+
const execPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => {
|
|
98
|
+
return api_1.context.with(execContext, () => {
|
|
99
|
+
return original.apply(this, args);
|
|
100
|
+
});
|
|
101
|
+
}, (error) => {
|
|
102
|
+
// Push the error to the span
|
|
103
|
+
if (error) {
|
|
104
|
+
span.recordException(error);
|
|
105
|
+
span.setStatus({
|
|
106
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
107
|
+
message: error.message,
|
|
108
|
+
});
|
|
109
|
+
span.end();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
const wrappedPromise = execPromise.then((result) => {
|
|
113
|
+
if (result) {
|
|
114
|
+
// Record the results
|
|
115
|
+
span.setAttributes(Object.assign({}, getEmbeddingEmbeddingsAttributes(result)));
|
|
61
116
|
}
|
|
62
117
|
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
63
118
|
span.end();
|
|
@@ -75,9 +130,16 @@ class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
75
130
|
unpatch(moduleExports, moduleVersion) {
|
|
76
131
|
api_1.diag.debug(`Removing patch for ${MODULE_NAME}@${moduleVersion}`);
|
|
77
132
|
this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create");
|
|
133
|
+
this._unwrap(moduleExports.OpenAI.Embeddings.prototype, "create");
|
|
78
134
|
}
|
|
79
135
|
}
|
|
80
136
|
exports.OpenAIInstrumentation = OpenAIInstrumentation;
|
|
137
|
+
/**
|
|
138
|
+
* type-guard that checks if the response is a chat completion response
|
|
139
|
+
*/
|
|
140
|
+
function isChatCompletionResponse(response) {
|
|
141
|
+
return "choices" in response;
|
|
142
|
+
}
|
|
81
143
|
/**
|
|
82
144
|
* Converts the body of the request to LLM input messages
|
|
83
145
|
*/
|
|
@@ -93,7 +155,7 @@ function getLLMInputMessagesAttributes(body) {
|
|
|
93
155
|
* Get Usage attributes
|
|
94
156
|
*/
|
|
95
157
|
function getUsageAttributes(response) {
|
|
96
|
-
if (
|
|
158
|
+
if (Object.prototype.hasOwnProperty.call(response, "usage")) {
|
|
97
159
|
const completion = response;
|
|
98
160
|
if (completion.usage) {
|
|
99
161
|
return {
|
|
@@ -110,7 +172,7 @@ function getUsageAttributes(response) {
|
|
|
110
172
|
*/
|
|
111
173
|
function getLLMOutputMessagesAttributes(response) {
|
|
112
174
|
// Handle chat completion
|
|
113
|
-
if (
|
|
175
|
+
if (Object.prototype.hasOwnProperty.call(response, "choices")) {
|
|
114
176
|
const completion = response;
|
|
115
177
|
// Right now support just the first choice
|
|
116
178
|
const choice = completion.choices[0];
|
|
@@ -119,13 +181,43 @@ function getLLMOutputMessagesAttributes(response) {
|
|
|
119
181
|
}
|
|
120
182
|
return [choice.message].reduce((acc, message, index) => {
|
|
121
183
|
const index_prefix = `${openinference_semantic_conventions_1.SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}`;
|
|
122
|
-
acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT}`] =
|
|
123
|
-
|
|
124
|
-
acc
|
|
125
|
-
|
|
184
|
+
acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_CONTENT}`] = String(message.content);
|
|
185
|
+
acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.MESSAGE_ROLE}`] = message.role;
|
|
186
|
+
return acc;
|
|
187
|
+
}, {});
|
|
188
|
+
}
|
|
189
|
+
return {};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Converts the embedding result payload to embedding attributes
|
|
193
|
+
*/
|
|
194
|
+
function getEmbeddingTextAttributes(request) {
|
|
195
|
+
if (typeof request.input == "string") {
|
|
196
|
+
return {
|
|
197
|
+
[`${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.0.${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_TEXT}`]: request.input,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
else if (Array.isArray(request.input) &&
|
|
201
|
+
request.input.length > 0 &&
|
|
202
|
+
typeof request.input[0] == "string") {
|
|
203
|
+
return request.input.reduce((acc, input, index) => {
|
|
204
|
+
const index_prefix = `${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}`;
|
|
205
|
+
acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_TEXT}`] = input;
|
|
126
206
|
return acc;
|
|
127
207
|
}, {});
|
|
128
208
|
}
|
|
209
|
+
// Ignore other cases where input is a number or an array of numbers
|
|
129
210
|
return {};
|
|
130
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Converts the embedding result payload to embedding attributes
|
|
214
|
+
*/
|
|
215
|
+
function getEmbeddingEmbeddingsAttributes(response) {
|
|
216
|
+
return response.data.reduce((acc, embedding, index) => {
|
|
217
|
+
const index_prefix = `${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}`;
|
|
218
|
+
acc[`${index_prefix}.${openinference_semantic_conventions_1.SemanticConventions.EMBEDDING_VECTOR}`] =
|
|
219
|
+
embedding.embedding;
|
|
220
|
+
return acc;
|
|
221
|
+
}, {});
|
|
222
|
+
}
|
|
131
223
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,oEAMwC;AACxC,4CAO4B;AAC5B,uCAAoC;AACpC,oGAIqD;
|
|
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.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/src/version.js
CHANGED
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,20 +44,24 @@ 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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
// @ts-expect-error the moduleExports property is private. This is needed to make the test work with auto-mocking
|
|
51
|
+
instrumentation._modules[0].moduleExports = OpenAI;
|
|
52
|
+
beforeAll(() => {
|
|
60
53
|
instrumentation.enable();
|
|
61
54
|
openai = new OpenAI.OpenAI({
|
|
62
55
|
apiKey: `fake-api-key`,
|
|
63
56
|
});
|
|
57
|
+
});
|
|
58
|
+
afterAll(() => {
|
|
59
|
+
instrumentation.disable();
|
|
60
|
+
});
|
|
61
|
+
beforeEach(() => {
|
|
64
62
|
memoryExporter.reset();
|
|
65
63
|
});
|
|
66
64
|
afterEach(() => {
|
|
67
|
-
instrumentation.disable();
|
|
68
65
|
jest.clearAllMocks();
|
|
69
66
|
});
|
|
70
67
|
it("is patched", () => {
|
|
@@ -95,11 +92,11 @@ describe("OpenAIInstrumentation", () => {
|
|
|
95
92
|
};
|
|
96
93
|
// Mock out the chat completions endpoint
|
|
97
94
|
jest.spyOn(openai, "post").mockImplementation(
|
|
98
|
-
// @ts-expect-error
|
|
95
|
+
// @ts-expect-error the response type is not correct - this is just for testing
|
|
99
96
|
() => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
97
|
return response;
|
|
101
98
|
}));
|
|
102
|
-
|
|
99
|
+
yield openai.chat.completions.create({
|
|
103
100
|
messages: [{ role: "user", content: "Say this is a test" }],
|
|
104
101
|
model: "gpt-3.5-turbo",
|
|
105
102
|
});
|
|
@@ -114,7 +111,7 @@ describe("OpenAIInstrumentation", () => {
|
|
|
114
111
|
"llm.input_messages.0.message.content": "Say this is a test",
|
|
115
112
|
"llm.input_messages.0.message.role": "user",
|
|
116
113
|
"llm.invocation_parameters": "{"model":"gpt-3.5-turbo"}",
|
|
117
|
-
"llm.model_name": "gpt-3.5-turbo",
|
|
114
|
+
"llm.model_name": "gpt-3.5-turbo-0613",
|
|
118
115
|
"llm.output_messages.0.message.content": "This is a test.",
|
|
119
116
|
"llm.output_messages.0.message.role": "assistant",
|
|
120
117
|
"llm.token_count.completion": 5,
|
|
@@ -126,5 +123,39 @@ describe("OpenAIInstrumentation", () => {
|
|
|
126
123
|
}
|
|
127
124
|
`);
|
|
128
125
|
}));
|
|
126
|
+
it("creates a span for embedding create", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
127
|
+
const response = {
|
|
128
|
+
object: "list",
|
|
129
|
+
data: [{ object: "embedding", index: 0, embedding: [1, 2, 3] }],
|
|
130
|
+
};
|
|
131
|
+
// Mock out the embedding create endpoint
|
|
132
|
+
jest.spyOn(openai, "post").mockImplementation(
|
|
133
|
+
// @ts-expect-error the response type is not correct - this is just for testing
|
|
134
|
+
() => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
return response;
|
|
136
|
+
}));
|
|
137
|
+
yield openai.embeddings.create({
|
|
138
|
+
input: "A happy moment",
|
|
139
|
+
model: "text-embedding-ada-002",
|
|
140
|
+
});
|
|
141
|
+
const spans = memoryExporter.getFinishedSpans();
|
|
142
|
+
expect(spans.length).toBe(1);
|
|
143
|
+
const span = spans[0];
|
|
144
|
+
expect(span.name).toBe("OpenAI Embeddings");
|
|
145
|
+
expect(span.attributes).toMatchInlineSnapshot(`
|
|
146
|
+
{
|
|
147
|
+
"embedding.embeddings.0.embedding.text": "A happy moment",
|
|
148
|
+
"embedding.embeddings.0.embedding.vector": [
|
|
149
|
+
1,
|
|
150
|
+
2,
|
|
151
|
+
3,
|
|
152
|
+
],
|
|
153
|
+
"embedding.model_name": "text-embedding-ada-002",
|
|
154
|
+
"input.mime_type": "text/plain",
|
|
155
|
+
"input.value": "A happy moment",
|
|
156
|
+
"openinference.span.kind": "embedding",
|
|
157
|
+
}
|
|
158
|
+
`);
|
|
159
|
+
}));
|
|
129
160
|
});
|
|
130
161
|
//# 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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"}
|