openlit 1.7.0 → 1.8.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.
- package/README.md +15 -11
- package/dist/helpers.d.ts +10 -0
- package/dist/helpers.js +114 -7
- package/dist/helpers.js.map +1 -1
- package/dist/instrumentation/__tests__/anthropic-wrapper.test.js +1 -1
- package/dist/instrumentation/__tests__/anthropic-wrapper.test.js.map +1 -1
- package/dist/instrumentation/__tests__/base-wrapper.test.js +1 -1
- package/dist/instrumentation/__tests__/base-wrapper.test.js.map +1 -1
- package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.d.ts +4 -0
- package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js +99 -0
- package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js.map +1 -0
- package/dist/instrumentation/__tests__/groq-trace-comparison.test.d.ts +7 -0
- package/dist/instrumentation/__tests__/groq-trace-comparison.test.js +180 -0
- package/dist/instrumentation/__tests__/groq-trace-comparison.test.js.map +1 -0
- package/dist/instrumentation/__tests__/mistral-trace-comparison.test.d.ts +4 -0
- package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js +127 -0
- package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js.map +1 -0
- package/dist/instrumentation/__tests__/openai-wrapper.test.js +81 -18
- package/dist/instrumentation/__tests__/openai-wrapper.test.js.map +1 -1
- package/dist/instrumentation/__tests__/together-trace-comparison.test.d.ts +4 -0
- package/dist/instrumentation/__tests__/together-trace-comparison.test.js +98 -0
- package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -0
- package/dist/instrumentation/__tests__/trace-comparison-utils.d.ts +66 -0
- package/dist/instrumentation/__tests__/trace-comparison-utils.js +245 -0
- package/dist/instrumentation/__tests__/trace-comparison-utils.js.map +1 -0
- package/dist/instrumentation/anthropic/index.js +6 -4
- package/dist/instrumentation/anthropic/index.js.map +1 -1
- package/dist/instrumentation/anthropic/wrapper.js +12 -30
- package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
- package/dist/instrumentation/base-wrapper.js +2 -2
- package/dist/instrumentation/base-wrapper.js.map +1 -1
- package/dist/instrumentation/cohere/wrapper.js +8 -10
- package/dist/instrumentation/cohere/wrapper.js.map +1 -1
- package/dist/instrumentation/google-ai/index.d.ts +11 -0
- package/dist/instrumentation/google-ai/index.js +48 -0
- package/dist/instrumentation/google-ai/index.js.map +1 -0
- package/dist/instrumentation/google-ai/wrapper.d.ts +34 -0
- package/dist/instrumentation/google-ai/wrapper.js +241 -0
- package/dist/instrumentation/google-ai/wrapper.js.map +1 -0
- package/dist/instrumentation/groq/index.d.ts +11 -0
- package/dist/instrumentation/groq/index.js +43 -0
- package/dist/instrumentation/groq/index.js.map +1 -0
- package/dist/instrumentation/groq/wrapper.d.ts +33 -0
- package/dist/instrumentation/groq/wrapper.js +289 -0
- package/dist/instrumentation/groq/wrapper.js.map +1 -0
- package/dist/instrumentation/index.js +10 -0
- package/dist/instrumentation/index.js.map +1 -1
- package/dist/instrumentation/mistral/index.d.ts +11 -0
- package/dist/instrumentation/mistral/index.js +66 -0
- package/dist/instrumentation/mistral/index.js.map +1 -0
- package/dist/instrumentation/mistral/wrapper.d.ts +34 -0
- package/dist/instrumentation/mistral/wrapper.js +340 -0
- package/dist/instrumentation/mistral/wrapper.js.map +1 -0
- package/dist/instrumentation/ollama/wrapper.d.ts +11 -3
- package/dist/instrumentation/ollama/wrapper.js +60 -95
- package/dist/instrumentation/ollama/wrapper.js.map +1 -1
- package/dist/instrumentation/openai/index.js +11 -0
- package/dist/instrumentation/openai/index.js.map +1 -1
- package/dist/instrumentation/openai/wrapper.d.ts +30 -1
- package/dist/instrumentation/openai/wrapper.js +419 -61
- package/dist/instrumentation/openai/wrapper.js.map +1 -1
- package/dist/instrumentation/together/index.d.ts +11 -0
- package/dist/instrumentation/together/index.js +43 -0
- package/dist/instrumentation/together/index.js.map +1 -0
- package/dist/instrumentation/together/wrapper.d.ts +33 -0
- package/dist/instrumentation/together/wrapper.js +271 -0
- package/dist/instrumentation/together/wrapper.js.map +1 -0
- package/dist/otel/__tests__/metrics.test.js +5 -5
- package/dist/otel/__tests__/metrics.test.js.map +1 -1
- package/dist/semantic-convention.d.ts +34 -3
- package/dist/semantic-convention.js +50 -14
- package/dist/semantic-convention.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq-trace-comparison.test.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/groq-trace-comparison.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cross-Language Trace Comparison Tests for Mistral Integration
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const wrapper_1 = __importDefault(require("../mistral/wrapper"));
|
|
10
|
+
const config_1 = __importDefault(require("../../config"));
|
|
11
|
+
const helpers_1 = __importDefault(require("../../helpers"));
|
|
12
|
+
const base_wrapper_1 = __importDefault(require("../base-wrapper"));
|
|
13
|
+
const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
|
|
14
|
+
jest.mock('../../config');
|
|
15
|
+
jest.mock('../../helpers');
|
|
16
|
+
jest.mock('../base-wrapper');
|
|
17
|
+
describe('Mistral Cross-Language Trace Comparison', () => {
|
|
18
|
+
let mockSpan;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
// Create mock span
|
|
21
|
+
mockSpan = {
|
|
22
|
+
setAttribute: jest.fn(),
|
|
23
|
+
addEvent: jest.fn(),
|
|
24
|
+
end: jest.fn(),
|
|
25
|
+
setStatus: jest.fn(),
|
|
26
|
+
};
|
|
27
|
+
// Mock OpenlitConfig
|
|
28
|
+
config_1.default.environment = 'openlit-testing';
|
|
29
|
+
config_1.default.applicationName = 'openlit-test';
|
|
30
|
+
config_1.default.traceContent = true;
|
|
31
|
+
config_1.default.pricing_json = {};
|
|
32
|
+
config_1.default.updatePricingJson = jest.fn().mockResolvedValue({});
|
|
33
|
+
// Mock OpenLitHelper
|
|
34
|
+
helpers_1.default.getChatModelCost = jest.fn().mockReturnValue(0.001);
|
|
35
|
+
helpers_1.default.getEmbedModelCost = jest.fn().mockReturnValue(0.0001);
|
|
36
|
+
helpers_1.default.openaiTokens = jest.fn().mockReturnValue(5);
|
|
37
|
+
helpers_1.default.handleException = jest.fn();
|
|
38
|
+
helpers_1.default.createStreamProxy = jest.fn().mockImplementation((stream, generator) => stream);
|
|
39
|
+
// Mock BaseWrapper
|
|
40
|
+
base_wrapper_1.default.recordMetrics = jest.fn();
|
|
41
|
+
base_wrapper_1.default.setBaseSpanAttributes = jest.fn().mockImplementation((span, attrs) => {
|
|
42
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_PROVIDER_NAME, attrs.aiSystem);
|
|
43
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_ENDPOINT, attrs.genAIEndpoint);
|
|
44
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, attrs.model);
|
|
45
|
+
if (attrs.cost !== undefined) {
|
|
46
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_COST, attrs.cost);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
jest.clearAllMocks();
|
|
52
|
+
});
|
|
53
|
+
describe('Chat Completion Trace Consistency', () => {
|
|
54
|
+
it('should set same attributes as Python SDK', async () => {
|
|
55
|
+
const mockArgs = [
|
|
56
|
+
{
|
|
57
|
+
messages: [{ role: 'user', content: 'What is Mistral AI?' }],
|
|
58
|
+
model: 'mistral-small-latest',
|
|
59
|
+
max_tokens: 50,
|
|
60
|
+
temperature: 0.7,
|
|
61
|
+
stream: false,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
const mockResponse = {
|
|
65
|
+
id: 'mistral-test-id',
|
|
66
|
+
created: Date.now(),
|
|
67
|
+
model: 'mistral-small-latest',
|
|
68
|
+
choices: [
|
|
69
|
+
{
|
|
70
|
+
index: 0,
|
|
71
|
+
finish_reason: 'stop',
|
|
72
|
+
message: { role: 'assistant', content: 'Mistral AI is...' },
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
usage: {
|
|
76
|
+
prompt_tokens: 8,
|
|
77
|
+
completion_tokens: 15,
|
|
78
|
+
total_tokens: 23,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
await wrapper_1.default._chatCompletion({
|
|
82
|
+
args: mockArgs,
|
|
83
|
+
genAIEndpoint: 'mistral.chat.completions',
|
|
84
|
+
response: mockResponse,
|
|
85
|
+
span: mockSpan,
|
|
86
|
+
});
|
|
87
|
+
// Verify critical attributes are set (matching Python SDK)
|
|
88
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_PROVIDER_NAME, 'mistral');
|
|
89
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT);
|
|
90
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, 'mistral-small-latest');
|
|
91
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, 'mistral-small-latest');
|
|
92
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, 8);
|
|
93
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, 15);
|
|
94
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, 23);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('Embedding Trace Consistency', () => {
|
|
98
|
+
it('should set embedding attributes matching Python SDK', async () => {
|
|
99
|
+
const mockArgs = [
|
|
100
|
+
{
|
|
101
|
+
model: 'mistral-embed',
|
|
102
|
+
input: 'Test embedding text',
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
const mockResponse = {
|
|
106
|
+
model: 'mistral-embed',
|
|
107
|
+
data: [{ embedding: [0.1, 0.2, 0.3] }],
|
|
108
|
+
usage: {
|
|
109
|
+
prompt_tokens: 3,
|
|
110
|
+
total_tokens: 3,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
const mockTracer = {
|
|
114
|
+
startSpan: jest.fn().mockReturnValue(mockSpan),
|
|
115
|
+
};
|
|
116
|
+
const patchMethod = wrapper_1.default._patchEmbedding(mockTracer);
|
|
117
|
+
const wrappedMethod = patchMethod(async () => mockResponse);
|
|
118
|
+
await wrappedMethod.call({}, ...mockArgs);
|
|
119
|
+
// Verify embedding-specific attributes
|
|
120
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_PROVIDER_NAME, 'mistral');
|
|
121
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_EMBEDDING);
|
|
122
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, 'mistral-embed');
|
|
123
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, 3);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=mistral-trace-comparison.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mistral-trace-comparison.test.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/mistral-trace-comparison.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ describe('OpenAIWrapper', () => {
|
|
|
18
18
|
beforeEach(() => {
|
|
19
19
|
span = mockTracer.startSpan('test-span');
|
|
20
20
|
span.setAttribute = jest.fn();
|
|
21
|
+
span.addEvent = jest.fn();
|
|
21
22
|
jest.clearAllMocks();
|
|
22
23
|
});
|
|
23
24
|
afterEach(() => {
|
|
@@ -25,12 +26,19 @@ describe('OpenAIWrapper', () => {
|
|
|
25
26
|
});
|
|
26
27
|
describe('_chatCompletion', () => {
|
|
27
28
|
it('should call recordMetrics after span ends', async () => {
|
|
28
|
-
const mockArgs = [{
|
|
29
|
+
const mockArgs = [{ messages: [{ role: 'user', content: 'test message' }] }];
|
|
29
30
|
const mockResponse = {
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
id: '123',
|
|
32
|
+
model: 'gpt-3.5-turbo',
|
|
33
|
+
usage: { prompt_tokens: 10, completion_tokens: 20, total_tokens: 30 },
|
|
34
|
+
choices: [
|
|
35
|
+
{
|
|
36
|
+
message: { content: 'response text', role: 'assistant' },
|
|
37
|
+
finish_reason: 'stop',
|
|
38
|
+
},
|
|
39
|
+
],
|
|
32
40
|
};
|
|
33
|
-
const mockGenAIEndpoint = 'openai.
|
|
41
|
+
const mockGenAIEndpoint = 'openai.resources.chat.completions';
|
|
34
42
|
jest
|
|
35
43
|
.spyOn(wrapper_1.default, '_chatCompletionCommonSetter')
|
|
36
44
|
.mockImplementationOnce(async ({ genAIEndpoint, span }) => {
|
|
@@ -39,7 +47,7 @@ describe('OpenAIWrapper', () => {
|
|
|
39
47
|
span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_TEMPERATURE, 0.7);
|
|
40
48
|
return {
|
|
41
49
|
genAIEndpoint,
|
|
42
|
-
model: '
|
|
50
|
+
model: 'gpt-3.5-turbo',
|
|
43
51
|
user: 'test-user',
|
|
44
52
|
cost: 0.5,
|
|
45
53
|
aiSystem: 'openai',
|
|
@@ -53,7 +61,7 @@ describe('OpenAIWrapper', () => {
|
|
|
53
61
|
});
|
|
54
62
|
expect(base_wrapper_1.default.recordMetrics).toHaveBeenCalledWith(span, {
|
|
55
63
|
genAIEndpoint: mockGenAIEndpoint,
|
|
56
|
-
model: '
|
|
64
|
+
model: 'gpt-3.5-turbo',
|
|
57
65
|
user: 'test-user',
|
|
58
66
|
cost: 0.5,
|
|
59
67
|
aiSystem: 'openai',
|
|
@@ -64,7 +72,7 @@ describe('OpenAIWrapper', () => {
|
|
|
64
72
|
it('should set span attributes and return metric parameters', async () => {
|
|
65
73
|
const mockArgs = [
|
|
66
74
|
{
|
|
67
|
-
|
|
75
|
+
messages: [{ role: 'user', content: 'test message' }],
|
|
68
76
|
max_tokens: 100,
|
|
69
77
|
temperature: 0.7,
|
|
70
78
|
top_p: 1,
|
|
@@ -72,23 +80,29 @@ describe('OpenAIWrapper', () => {
|
|
|
72
80
|
presence_penalty: 2,
|
|
73
81
|
frequency_penalty: 3,
|
|
74
82
|
seed: 3,
|
|
75
|
-
stream:
|
|
83
|
+
stream: false,
|
|
84
|
+
stop: ['STOP'],
|
|
76
85
|
},
|
|
77
86
|
];
|
|
78
87
|
const mockResult = {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
usage: {
|
|
82
|
-
|
|
83
|
-
|
|
88
|
+
id: '123',
|
|
89
|
+
model: 'gpt-3.5-turbo',
|
|
90
|
+
usage: {
|
|
91
|
+
prompt_tokens: 10,
|
|
92
|
+
completion_tokens: 20,
|
|
93
|
+
total_tokens: 30,
|
|
94
|
+
completion_tokens_details: { reasoning_tokens: 5 },
|
|
95
|
+
},
|
|
84
96
|
choices: [
|
|
85
97
|
{
|
|
98
|
+
message: { content: 'response text', role: 'assistant' },
|
|
86
99
|
finish_reason: 'stop',
|
|
87
100
|
},
|
|
88
101
|
],
|
|
89
|
-
|
|
102
|
+
system_fingerprint: 'fp_test',
|
|
103
|
+
service_tier: 'default',
|
|
90
104
|
};
|
|
91
|
-
const mockGenAIEndpoint = 'openai.
|
|
105
|
+
const mockGenAIEndpoint = 'openai.resources.chat.completions';
|
|
92
106
|
jest.restoreAllMocks();
|
|
93
107
|
jest.spyOn(config_1.default, 'updatePricingJson').mockResolvedValue({});
|
|
94
108
|
jest.spyOn(helpers_1.default, 'getChatModelCost').mockReturnValue(0.5);
|
|
@@ -98,21 +112,70 @@ describe('OpenAIWrapper', () => {
|
|
|
98
112
|
result: mockResult,
|
|
99
113
|
span,
|
|
100
114
|
});
|
|
115
|
+
// Basic request parameters
|
|
101
116
|
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_TOP_P, 1);
|
|
102
117
|
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_MAX_TOKENS, 100);
|
|
103
118
|
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_TEMPERATURE, 0.7);
|
|
104
119
|
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_PRESENCE_PENALTY, 2);
|
|
105
120
|
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_FREQUENCY_PENALTY, 3);
|
|
106
|
-
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_SEED, 3);
|
|
107
|
-
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_IS_STREAM,
|
|
121
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_SEED, '3');
|
|
122
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_IS_STREAM, false);
|
|
123
|
+
// New attributes
|
|
124
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_STOP_SEQUENCES, ['STOP']);
|
|
125
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, 'gpt-3.5-turbo');
|
|
126
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_RESPONSE_SYSTEM_FINGERPRINT, 'fp_test');
|
|
127
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_SERVICE_TIER, 'default');
|
|
128
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE, 30);
|
|
129
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_COMPLETION_TOKENS_DETAILS_REASONING, 5);
|
|
108
130
|
expect(metricParams).toEqual({
|
|
109
131
|
genAIEndpoint: mockGenAIEndpoint,
|
|
110
|
-
model: '
|
|
132
|
+
model: 'gpt-3.5-turbo',
|
|
111
133
|
user: 'test-user',
|
|
112
134
|
cost: 0.5,
|
|
113
135
|
aiSystem: 'openai',
|
|
114
136
|
});
|
|
115
137
|
});
|
|
138
|
+
it('should handle tool calls properly', async () => {
|
|
139
|
+
const mockArgs = [
|
|
140
|
+
{
|
|
141
|
+
messages: [{ role: 'user', content: 'test message' }],
|
|
142
|
+
tools: [{ type: 'function', function: { name: 'get_weather' } }],
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
const mockResult = {
|
|
146
|
+
id: '123',
|
|
147
|
+
model: 'gpt-3.5-turbo',
|
|
148
|
+
usage: { prompt_tokens: 10, completion_tokens: 20, total_tokens: 30 },
|
|
149
|
+
choices: [
|
|
150
|
+
{
|
|
151
|
+
message: {
|
|
152
|
+
content: null,
|
|
153
|
+
role: 'assistant',
|
|
154
|
+
tool_calls: [
|
|
155
|
+
{
|
|
156
|
+
id: 'call_123',
|
|
157
|
+
type: 'function',
|
|
158
|
+
function: { name: 'get_weather', arguments: '{"location":"SF"}' },
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
finish_reason: 'tool_calls',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
jest.spyOn(config_1.default, 'updatePricingJson').mockResolvedValue({});
|
|
167
|
+
jest.spyOn(helpers_1.default, 'getChatModelCost').mockReturnValue(0.5);
|
|
168
|
+
await wrapper_1.default._chatCompletionCommonSetter({
|
|
169
|
+
args: mockArgs,
|
|
170
|
+
genAIEndpoint: 'openai.resources.chat.completions',
|
|
171
|
+
result: mockResult,
|
|
172
|
+
span,
|
|
173
|
+
});
|
|
174
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_TOOL_NAME, 'get_weather');
|
|
175
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_TOOL_CALL_ID, 'call_123');
|
|
176
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_TOOL_CALL_ARGUMENTS, ['{"location":"SF"}']);
|
|
177
|
+
expect(span.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_TOOL_TYPE, 'function');
|
|
178
|
+
});
|
|
116
179
|
});
|
|
117
180
|
});
|
|
118
181
|
//# sourceMappingURL=openai-wrapper.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-wrapper.test.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/openai-wrapper.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAiD;AACjD,gEAA8C;AAC9C,0DAAyC;AACzC,4DAA0C;AAC1C,mEAA0C;AAC1C,oFAA2D;AAE3D,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACjC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AAEvD,MAAM,UAAU,GAAG,WAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AAElD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,IAAU,CAAC;IAEf,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-wrapper.test.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/openai-wrapper.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cross-Language Trace Comparison Tests for Together AI Integration
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const wrapper_1 = __importDefault(require("../together/wrapper"));
|
|
10
|
+
const config_1 = __importDefault(require("../../config"));
|
|
11
|
+
const helpers_1 = __importDefault(require("../../helpers"));
|
|
12
|
+
const base_wrapper_1 = __importDefault(require("../base-wrapper"));
|
|
13
|
+
const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
|
|
14
|
+
jest.mock('../../config');
|
|
15
|
+
jest.mock('../../helpers');
|
|
16
|
+
jest.mock('../base-wrapper');
|
|
17
|
+
describe('Together AI Cross-Language Trace Comparison', () => {
|
|
18
|
+
let mockSpan;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
// Create mock span
|
|
21
|
+
mockSpan = {
|
|
22
|
+
setAttribute: jest.fn(),
|
|
23
|
+
addEvent: jest.fn(),
|
|
24
|
+
end: jest.fn(),
|
|
25
|
+
setStatus: jest.fn(),
|
|
26
|
+
};
|
|
27
|
+
// Mock OpenlitConfig
|
|
28
|
+
config_1.default.environment = 'openlit-testing';
|
|
29
|
+
config_1.default.applicationName = 'openlit-test';
|
|
30
|
+
config_1.default.traceContent = true;
|
|
31
|
+
config_1.default.pricing_json = {};
|
|
32
|
+
config_1.default.updatePricingJson = jest.fn().mockResolvedValue({});
|
|
33
|
+
// Mock OpenLitHelper
|
|
34
|
+
helpers_1.default.getChatModelCost = jest.fn().mockReturnValue(0.001);
|
|
35
|
+
helpers_1.default.openaiTokens = jest.fn().mockReturnValue(5);
|
|
36
|
+
helpers_1.default.handleException = jest.fn();
|
|
37
|
+
helpers_1.default.createStreamProxy = jest.fn().mockImplementation((stream, generator) => stream);
|
|
38
|
+
// Mock BaseWrapper
|
|
39
|
+
base_wrapper_1.default.recordMetrics = jest.fn();
|
|
40
|
+
base_wrapper_1.default.setBaseSpanAttributes = jest.fn().mockImplementation((span, attrs) => {
|
|
41
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_PROVIDER_NAME, attrs.aiSystem);
|
|
42
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_ENDPOINT, attrs.genAIEndpoint);
|
|
43
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, attrs.model);
|
|
44
|
+
if (attrs.cost !== undefined) {
|
|
45
|
+
span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_COST, attrs.cost);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
jest.clearAllMocks();
|
|
51
|
+
});
|
|
52
|
+
describe('Chat Completion Trace Consistency', () => {
|
|
53
|
+
it('should set same attributes as Python SDK', async () => {
|
|
54
|
+
const mockArgs = [
|
|
55
|
+
{
|
|
56
|
+
messages: [{ role: 'user', content: 'What is Together AI?' }],
|
|
57
|
+
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
|
|
58
|
+
max_tokens: 50,
|
|
59
|
+
temperature: 0.7,
|
|
60
|
+
top_p: 0.9,
|
|
61
|
+
stream: false,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
const mockResponse = {
|
|
65
|
+
id: 'together-test-id',
|
|
66
|
+
created: Date.now(),
|
|
67
|
+
model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo',
|
|
68
|
+
choices: [
|
|
69
|
+
{
|
|
70
|
+
index: 0,
|
|
71
|
+
finish_reason: 'stop',
|
|
72
|
+
message: { role: 'assistant', content: 'Together AI is...' },
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
usage: {
|
|
76
|
+
prompt_tokens: 9,
|
|
77
|
+
completion_tokens: 12,
|
|
78
|
+
total_tokens: 21,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
await wrapper_1.default._chatCompletion({
|
|
82
|
+
args: mockArgs,
|
|
83
|
+
genAIEndpoint: 'together.chat.completions',
|
|
84
|
+
response: mockResponse,
|
|
85
|
+
span: mockSpan,
|
|
86
|
+
});
|
|
87
|
+
// Verify critical attributes are set (matching Python SDK)
|
|
88
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_PROVIDER_NAME, 'together');
|
|
89
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT);
|
|
90
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo');
|
|
91
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo');
|
|
92
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, 9);
|
|
93
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, 12);
|
|
94
|
+
expect(mockSpan.setAttribute).toHaveBeenCalledWith(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, 21);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=together-trace-comparison.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"together-trace-comparison.test.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/together-trace-comparison.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Language Trace Comparison Utilities
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities to compare traces generated by Python and TypeScript
|
|
5
|
+
* OpenLIT SDKs to ensure consistency across implementations.
|
|
6
|
+
*/
|
|
7
|
+
import { Span } from '@opentelemetry/api';
|
|
8
|
+
import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
9
|
+
export interface NormalizedTrace {
|
|
10
|
+
spanName: string;
|
|
11
|
+
spanKind: string;
|
|
12
|
+
attributes: Record<string, any>;
|
|
13
|
+
events: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
attributes?: Record<string, any>;
|
|
16
|
+
}>;
|
|
17
|
+
status: {
|
|
18
|
+
code: string;
|
|
19
|
+
message?: string;
|
|
20
|
+
};
|
|
21
|
+
duration?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface TraceComparisonResult {
|
|
24
|
+
match: boolean;
|
|
25
|
+
differences: string[];
|
|
26
|
+
pythonTrace?: NormalizedTrace;
|
|
27
|
+
typescriptTrace?: NormalizedTrace;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Normalize a TypeScript span to a comparable format
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeTypeScriptSpan(span: ReadableSpan | Span): NormalizedTrace;
|
|
33
|
+
/**
|
|
34
|
+
* Compare two normalized traces
|
|
35
|
+
*/
|
|
36
|
+
export declare function compareTraces(pythonTrace: NormalizedTrace, typescriptTrace: NormalizedTrace): TraceComparisonResult;
|
|
37
|
+
/**
|
|
38
|
+
* Extract key metrics from a trace for comparison
|
|
39
|
+
*/
|
|
40
|
+
export declare function extractKeyMetrics(trace: NormalizedTrace): {
|
|
41
|
+
tokens: {
|
|
42
|
+
input: number;
|
|
43
|
+
output: number;
|
|
44
|
+
total: number;
|
|
45
|
+
};
|
|
46
|
+
cost: number;
|
|
47
|
+
model: string;
|
|
48
|
+
operation: string;
|
|
49
|
+
system: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Compare key metrics between Python and TypeScript traces
|
|
53
|
+
*/
|
|
54
|
+
export declare function compareMetrics(pythonTrace: NormalizedTrace, typescriptTrace: NormalizedTrace): {
|
|
55
|
+
match: boolean;
|
|
56
|
+
differences: string[];
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Create a test helper that validates trace consistency
|
|
60
|
+
*/
|
|
61
|
+
export declare function createTraceValidator(providerName: string, expectedAttributes?: string[]): {
|
|
62
|
+
validateTrace: (trace: NormalizedTrace) => {
|
|
63
|
+
valid: boolean;
|
|
64
|
+
errors: string[];
|
|
65
|
+
};
|
|
66
|
+
};
|