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.
Files changed (74) hide show
  1. package/README.md +15 -11
  2. package/dist/helpers.d.ts +10 -0
  3. package/dist/helpers.js +114 -7
  4. package/dist/helpers.js.map +1 -1
  5. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js +1 -1
  6. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js.map +1 -1
  7. package/dist/instrumentation/__tests__/base-wrapper.test.js +1 -1
  8. package/dist/instrumentation/__tests__/base-wrapper.test.js.map +1 -1
  9. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.d.ts +4 -0
  10. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js +99 -0
  11. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js.map +1 -0
  12. package/dist/instrumentation/__tests__/groq-trace-comparison.test.d.ts +7 -0
  13. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js +180 -0
  14. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js.map +1 -0
  15. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.d.ts +4 -0
  16. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js +127 -0
  17. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js.map +1 -0
  18. package/dist/instrumentation/__tests__/openai-wrapper.test.js +81 -18
  19. package/dist/instrumentation/__tests__/openai-wrapper.test.js.map +1 -1
  20. package/dist/instrumentation/__tests__/together-trace-comparison.test.d.ts +4 -0
  21. package/dist/instrumentation/__tests__/together-trace-comparison.test.js +98 -0
  22. package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -0
  23. package/dist/instrumentation/__tests__/trace-comparison-utils.d.ts +66 -0
  24. package/dist/instrumentation/__tests__/trace-comparison-utils.js +245 -0
  25. package/dist/instrumentation/__tests__/trace-comparison-utils.js.map +1 -0
  26. package/dist/instrumentation/anthropic/index.js +6 -4
  27. package/dist/instrumentation/anthropic/index.js.map +1 -1
  28. package/dist/instrumentation/anthropic/wrapper.js +12 -30
  29. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  30. package/dist/instrumentation/base-wrapper.js +2 -2
  31. package/dist/instrumentation/base-wrapper.js.map +1 -1
  32. package/dist/instrumentation/cohere/wrapper.js +8 -10
  33. package/dist/instrumentation/cohere/wrapper.js.map +1 -1
  34. package/dist/instrumentation/google-ai/index.d.ts +11 -0
  35. package/dist/instrumentation/google-ai/index.js +48 -0
  36. package/dist/instrumentation/google-ai/index.js.map +1 -0
  37. package/dist/instrumentation/google-ai/wrapper.d.ts +34 -0
  38. package/dist/instrumentation/google-ai/wrapper.js +241 -0
  39. package/dist/instrumentation/google-ai/wrapper.js.map +1 -0
  40. package/dist/instrumentation/groq/index.d.ts +11 -0
  41. package/dist/instrumentation/groq/index.js +43 -0
  42. package/dist/instrumentation/groq/index.js.map +1 -0
  43. package/dist/instrumentation/groq/wrapper.d.ts +33 -0
  44. package/dist/instrumentation/groq/wrapper.js +289 -0
  45. package/dist/instrumentation/groq/wrapper.js.map +1 -0
  46. package/dist/instrumentation/index.js +10 -0
  47. package/dist/instrumentation/index.js.map +1 -1
  48. package/dist/instrumentation/mistral/index.d.ts +11 -0
  49. package/dist/instrumentation/mistral/index.js +66 -0
  50. package/dist/instrumentation/mistral/index.js.map +1 -0
  51. package/dist/instrumentation/mistral/wrapper.d.ts +34 -0
  52. package/dist/instrumentation/mistral/wrapper.js +340 -0
  53. package/dist/instrumentation/mistral/wrapper.js.map +1 -0
  54. package/dist/instrumentation/ollama/wrapper.d.ts +11 -3
  55. package/dist/instrumentation/ollama/wrapper.js +60 -95
  56. package/dist/instrumentation/ollama/wrapper.js.map +1 -1
  57. package/dist/instrumentation/openai/index.js +11 -0
  58. package/dist/instrumentation/openai/index.js.map +1 -1
  59. package/dist/instrumentation/openai/wrapper.d.ts +30 -1
  60. package/dist/instrumentation/openai/wrapper.js +419 -61
  61. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  62. package/dist/instrumentation/together/index.d.ts +11 -0
  63. package/dist/instrumentation/together/index.js +43 -0
  64. package/dist/instrumentation/together/index.js.map +1 -0
  65. package/dist/instrumentation/together/wrapper.d.ts +33 -0
  66. package/dist/instrumentation/together/wrapper.js +271 -0
  67. package/dist/instrumentation/together/wrapper.js.map +1 -0
  68. package/dist/otel/__tests__/metrics.test.js +5 -5
  69. package/dist/otel/__tests__/metrics.test.js.map +1 -1
  70. package/dist/semantic-convention.d.ts +34 -3
  71. package/dist/semantic-convention.js +50 -14
  72. package/dist/semantic-convention.js.map +1 -1
  73. package/dist/types.d.ts +1 -1
  74. 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,4 @@
1
+ /**
2
+ * Cross-Language Trace Comparison Tests for Mistral Integration
3
+ */
4
+ export {};
@@ -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 = [{ message: 'test message' }];
29
+ const mockArgs = [{ messages: [{ role: 'user', content: 'test message' }] }];
29
30
  const mockResponse = {
30
- response_id: '123',
31
- meta: { billedUnits: { inputTokens: 10, outputTokens: 20 } },
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.endpoint';
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: 'test-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: 'test-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
- message: 'test message',
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: true,
83
+ stream: false,
84
+ stop: ['STOP'],
76
85
  },
77
86
  ];
78
87
  const mockResult = {
79
- response_id: '123',
80
- meta: { billedUnits: { inputTokens: 10, outputTokens: 20 } },
81
- usage: { prompt_tokens: 10, completion_tokens: 20, total_tokens: 30 },
82
- text: 'response text',
83
- finishReason: 'stop',
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
- model: 'test-model',
102
+ system_fingerprint: 'fp_test',
103
+ service_tier: 'default',
90
104
  };
91
- const mockGenAIEndpoint = 'openai.endpoint';
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, true);
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: 'test-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":"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"}
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,4 @@
1
+ /**
2
+ * Cross-Language Trace Comparison Tests for Together AI Integration
3
+ */
4
+ export {};
@@ -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
+ };