openlit 1.7.1 → 1.9.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 (101) hide show
  1. package/README.md +14 -10
  2. package/dist/helpers.d.ts +10 -0
  3. package/dist/helpers.js +106 -3
  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__/together-trace-comparison.test.d.ts +4 -0
  19. package/dist/instrumentation/__tests__/together-trace-comparison.test.js +98 -0
  20. package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -0
  21. package/dist/instrumentation/__tests__/trace-comparison-utils.d.ts +66 -0
  22. package/dist/instrumentation/__tests__/trace-comparison-utils.js +245 -0
  23. package/dist/instrumentation/__tests__/trace-comparison-utils.js.map +1 -0
  24. package/dist/instrumentation/anthropic/index.js +6 -4
  25. package/dist/instrumentation/anthropic/index.js.map +1 -1
  26. package/dist/instrumentation/anthropic/wrapper.js +12 -30
  27. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  28. package/dist/instrumentation/base-wrapper.js +2 -2
  29. package/dist/instrumentation/base-wrapper.js.map +1 -1
  30. package/dist/instrumentation/bedrock/index.d.ts +11 -0
  31. package/dist/instrumentation/bedrock/index.js +52 -0
  32. package/dist/instrumentation/bedrock/index.js.map +1 -0
  33. package/dist/instrumentation/bedrock/wrapper.d.ts +10 -0
  34. package/dist/instrumentation/bedrock/wrapper.js +345 -0
  35. package/dist/instrumentation/bedrock/wrapper.js.map +1 -0
  36. package/dist/instrumentation/cohere/wrapper.js +8 -10
  37. package/dist/instrumentation/cohere/wrapper.js.map +1 -1
  38. package/dist/instrumentation/google-ai/index.d.ts +11 -0
  39. package/dist/instrumentation/google-ai/index.js +48 -0
  40. package/dist/instrumentation/google-ai/index.js.map +1 -0
  41. package/dist/instrumentation/google-ai/wrapper.d.ts +34 -0
  42. package/dist/instrumentation/google-ai/wrapper.js +241 -0
  43. package/dist/instrumentation/google-ai/wrapper.js.map +1 -0
  44. package/dist/instrumentation/groq/index.d.ts +11 -0
  45. package/dist/instrumentation/groq/index.js +43 -0
  46. package/dist/instrumentation/groq/index.js.map +1 -0
  47. package/dist/instrumentation/groq/wrapper.d.ts +33 -0
  48. package/dist/instrumentation/groq/wrapper.js +289 -0
  49. package/dist/instrumentation/groq/wrapper.js.map +1 -0
  50. package/dist/instrumentation/index.js +20 -0
  51. package/dist/instrumentation/index.js.map +1 -1
  52. package/dist/instrumentation/langchain/index.d.ts +23 -0
  53. package/dist/instrumentation/langchain/index.js +109 -0
  54. package/dist/instrumentation/langchain/index.js.map +1 -0
  55. package/dist/instrumentation/langchain/wrapper.d.ts +6 -0
  56. package/dist/instrumentation/langchain/wrapper.js +318 -0
  57. package/dist/instrumentation/langchain/wrapper.js.map +1 -0
  58. package/dist/instrumentation/llamaindex/index.d.ts +11 -0
  59. package/dist/instrumentation/llamaindex/index.js +102 -0
  60. package/dist/instrumentation/llamaindex/index.js.map +1 -0
  61. package/dist/instrumentation/llamaindex/wrapper.d.ts +11 -0
  62. package/dist/instrumentation/llamaindex/wrapper.js +252 -0
  63. package/dist/instrumentation/llamaindex/wrapper.js.map +1 -0
  64. package/dist/instrumentation/mistral/index.d.ts +11 -0
  65. package/dist/instrumentation/mistral/index.js +66 -0
  66. package/dist/instrumentation/mistral/index.js.map +1 -0
  67. package/dist/instrumentation/mistral/wrapper.d.ts +34 -0
  68. package/dist/instrumentation/mistral/wrapper.js +340 -0
  69. package/dist/instrumentation/mistral/wrapper.js.map +1 -0
  70. package/dist/instrumentation/ollama/wrapper.d.ts +11 -3
  71. package/dist/instrumentation/ollama/wrapper.js +60 -95
  72. package/dist/instrumentation/ollama/wrapper.js.map +1 -1
  73. package/dist/instrumentation/openai/index.js +1 -1
  74. package/dist/instrumentation/openai/index.js.map +1 -1
  75. package/dist/instrumentation/openai/wrapper.js +14 -84
  76. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  77. package/dist/instrumentation/pinecone/index.d.ts +11 -0
  78. package/dist/instrumentation/pinecone/index.js +79 -0
  79. package/dist/instrumentation/pinecone/index.js.map +1 -0
  80. package/dist/instrumentation/pinecone/wrapper.d.ts +14 -0
  81. package/dist/instrumentation/pinecone/wrapper.js +198 -0
  82. package/dist/instrumentation/pinecone/wrapper.js.map +1 -0
  83. package/dist/instrumentation/together/index.d.ts +11 -0
  84. package/dist/instrumentation/together/index.js +43 -0
  85. package/dist/instrumentation/together/index.js.map +1 -0
  86. package/dist/instrumentation/together/wrapper.d.ts +33 -0
  87. package/dist/instrumentation/together/wrapper.js +271 -0
  88. package/dist/instrumentation/together/wrapper.js.map +1 -0
  89. package/dist/instrumentation/vercel-ai/index.d.ts +10 -0
  90. package/dist/instrumentation/vercel-ai/index.js +59 -0
  91. package/dist/instrumentation/vercel-ai/index.js.map +1 -0
  92. package/dist/instrumentation/vercel-ai/wrapper.d.ts +11 -0
  93. package/dist/instrumentation/vercel-ai/wrapper.js +248 -0
  94. package/dist/instrumentation/vercel-ai/wrapper.js.map +1 -0
  95. package/dist/otel/__tests__/metrics.test.js +5 -5
  96. package/dist/otel/__tests__/metrics.test.js.map +1 -1
  97. package/dist/semantic-convention.d.ts +14 -3
  98. package/dist/semantic-convention.js +19 -8
  99. package/dist/semantic-convention.js.map +1 -1
  100. package/dist/types.d.ts +1 -1
  101. package/package.json +1 -1
@@ -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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"}
@@ -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
+ };
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * Cross-Language Trace Comparison Utilities
4
+ *
5
+ * This module provides utilities to compare traces generated by Python and TypeScript
6
+ * OpenLIT SDKs to ensure consistency across implementations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.normalizeTypeScriptSpan = normalizeTypeScriptSpan;
10
+ exports.compareTraces = compareTraces;
11
+ exports.extractKeyMetrics = extractKeyMetrics;
12
+ exports.compareMetrics = compareMetrics;
13
+ exports.createTraceValidator = createTraceValidator;
14
+ const api_1 = require("@opentelemetry/api");
15
+ /**
16
+ * Normalize a TypeScript span to a comparable format
17
+ */
18
+ function normalizeTypeScriptSpan(span) {
19
+ const spanData = span;
20
+ return {
21
+ spanName: spanData.name || '',
22
+ spanKind: spanData.kind?.toString() || 'INTERNAL',
23
+ attributes: normalizeAttributes(spanData.attributes || {}),
24
+ events: (spanData.events || []).map((event) => ({
25
+ name: event.name || '',
26
+ attributes: normalizeAttributes(event.attributes || {}),
27
+ })),
28
+ status: {
29
+ code: spanData.status?.code === api_1.SpanStatusCode.OK ? 'OK' :
30
+ spanData.status?.code === api_1.SpanStatusCode.ERROR ? 'ERROR' : 'UNSET',
31
+ message: spanData.status?.message,
32
+ },
33
+ duration: spanData.duration?.[0] ? spanData.duration[0] * 1e9 + spanData.duration[1] : undefined,
34
+ };
35
+ }
36
+ /**
37
+ * Normalize attributes for comparison (handles array/object differences)
38
+ */
39
+ function normalizeAttributes(attrs) {
40
+ const normalized = {};
41
+ for (const [key, value] of Object.entries(attrs)) {
42
+ // Normalize arrays - sort for comparison
43
+ if (Array.isArray(value)) {
44
+ normalized[key] = [...value].sort();
45
+ }
46
+ // Normalize numbers (handle float precision)
47
+ else if (typeof value === 'number') {
48
+ normalized[key] = Math.round(value * 1000) / 1000; // Round to 3 decimal places
49
+ }
50
+ // Normalize strings (trim whitespace)
51
+ else if (typeof value === 'string') {
52
+ normalized[key] = value.trim();
53
+ }
54
+ // Keep other types as-is
55
+ else {
56
+ normalized[key] = value;
57
+ }
58
+ }
59
+ return normalized;
60
+ }
61
+ /**
62
+ * Compare two normalized traces
63
+ */
64
+ function compareTraces(pythonTrace, typescriptTrace) {
65
+ const differences = [];
66
+ // Compare span names
67
+ if (pythonTrace.spanName !== typescriptTrace.spanName) {
68
+ differences.push(`Span name mismatch: Python="${pythonTrace.spanName}", TypeScript="${typescriptTrace.spanName}"`);
69
+ }
70
+ // Compare span kind
71
+ if (pythonTrace.spanKind !== typescriptTrace.spanKind) {
72
+ differences.push(`Span kind mismatch: Python="${pythonTrace.spanKind}", TypeScript="${typescriptTrace.spanKind}"`);
73
+ }
74
+ // Compare status
75
+ if (pythonTrace.status.code !== typescriptTrace.status.code) {
76
+ differences.push(`Status code mismatch: Python="${pythonTrace.status.code}", TypeScript="${typescriptTrace.status.code}"`);
77
+ }
78
+ // Compare attributes
79
+ const attrDiff = compareAttributes(pythonTrace.attributes, typescriptTrace.attributes);
80
+ differences.push(...attrDiff);
81
+ // Compare events (optional - events may differ slightly)
82
+ const eventDiff = compareEvents(pythonTrace.events, typescriptTrace.events);
83
+ if (eventDiff.length > 0) {
84
+ differences.push(`Event differences: ${eventDiff.join(', ')}`);
85
+ }
86
+ return {
87
+ match: differences.length === 0,
88
+ differences,
89
+ pythonTrace,
90
+ typescriptTrace,
91
+ };
92
+ }
93
+ /**
94
+ * Compare attributes between two traces
95
+ */
96
+ function compareAttributes(pythonAttrs, typescriptAttrs) {
97
+ const differences = [];
98
+ const allKeys = new Set([...Object.keys(pythonAttrs), ...Object.keys(typescriptAttrs)]);
99
+ // Critical attributes that must match
100
+ const criticalAttributes = [
101
+ 'gen_ai.system',
102
+ 'gen_ai.operation.name',
103
+ 'gen_ai.request.model',
104
+ 'gen_ai.response.model',
105
+ 'gen_ai.usage.input_tokens',
106
+ 'gen_ai.usage.output_tokens',
107
+ 'gen_ai.usage.total_tokens',
108
+ 'gen_ai.usage.cost',
109
+ 'gen_ai.endpoint',
110
+ 'gen_ai.environment',
111
+ 'gen_ai.application_name',
112
+ ];
113
+ for (const key of allKeys) {
114
+ const pythonValue = pythonAttrs[key];
115
+ const typescriptValue = typescriptAttrs[key];
116
+ const isCritical = criticalAttributes.includes(key);
117
+ if (pythonValue === undefined && typescriptValue !== undefined) {
118
+ if (isCritical) {
119
+ differences.push(`Missing in Python: ${key} (TypeScript has: ${typescriptValue})`);
120
+ }
121
+ }
122
+ else if (typescriptValue === undefined && pythonValue !== undefined) {
123
+ if (isCritical) {
124
+ differences.push(`Missing in TypeScript: ${key} (Python has: ${pythonValue})`);
125
+ }
126
+ }
127
+ else if (pythonValue !== typescriptValue) {
128
+ // For critical attributes, always report differences
129
+ if (isCritical) {
130
+ differences.push(`Attribute "${key}" mismatch: Python="${pythonValue}", TypeScript="${typescriptValue}"`);
131
+ }
132
+ // For non-critical, only report if significantly different
133
+ else if (typeof pythonValue === 'number' && typeof typescriptValue === 'number') {
134
+ const diff = Math.abs(pythonValue - typescriptValue);
135
+ if (diff > 0.01) { // Allow small floating point differences
136
+ differences.push(`Attribute "${key}" significant difference: Python=${pythonValue}, TypeScript=${typescriptValue}`);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ return differences;
142
+ }
143
+ /**
144
+ * Compare events between two traces
145
+ */
146
+ function compareEvents(pythonEvents, typescriptEvents) {
147
+ const differences = [];
148
+ if (pythonEvents.length !== typescriptEvents.length) {
149
+ differences.push(`Event count mismatch: Python=${pythonEvents.length}, TypeScript=${typescriptEvents.length}`);
150
+ }
151
+ // Compare event names (order may differ)
152
+ const pythonEventNames = pythonEvents.map(e => e.name).sort();
153
+ const typescriptEventNames = typescriptEvents.map(e => e.name).sort();
154
+ if (JSON.stringify(pythonEventNames) !== JSON.stringify(typescriptEventNames)) {
155
+ differences.push(`Event names differ: Python=[${pythonEventNames.join(', ')}], TypeScript=[${typescriptEventNames.join(', ')}]`);
156
+ }
157
+ return differences;
158
+ }
159
+ /**
160
+ * Extract key metrics from a trace for comparison
161
+ */
162
+ function extractKeyMetrics(trace) {
163
+ const attrs = trace.attributes;
164
+ return {
165
+ tokens: {
166
+ input: attrs['gen_ai.usage.input_tokens'] || 0,
167
+ output: attrs['gen_ai.usage.output_tokens'] || 0,
168
+ total: attrs['gen_ai.usage.total_tokens'] || 0,
169
+ },
170
+ cost: attrs['gen_ai.usage.cost'] || 0,
171
+ model: attrs['gen_ai.request.model'] || attrs['gen_ai.response.model'] || '',
172
+ operation: attrs['gen_ai.operation.name'] || '',
173
+ system: attrs['gen_ai.system'] || '',
174
+ };
175
+ }
176
+ /**
177
+ * Compare key metrics between Python and TypeScript traces
178
+ */
179
+ function compareMetrics(pythonTrace, typescriptTrace) {
180
+ const pythonMetrics = extractKeyMetrics(pythonTrace);
181
+ const typescriptMetrics = extractKeyMetrics(typescriptTrace);
182
+ const differences = [];
183
+ // Compare tokens (allow small differences due to estimation)
184
+ const tokenTolerance = 5; // Allow 5 token difference
185
+ if (Math.abs(pythonMetrics.tokens.input - typescriptMetrics.tokens.input) > tokenTolerance) {
186
+ differences.push(`Input tokens differ significantly: Python=${pythonMetrics.tokens.input}, TypeScript=${typescriptMetrics.tokens.input}`);
187
+ }
188
+ if (Math.abs(pythonMetrics.tokens.output - typescriptMetrics.tokens.output) > tokenTolerance) {
189
+ differences.push(`Output tokens differ significantly: Python=${pythonMetrics.tokens.output}, TypeScript=${typescriptMetrics.tokens.output}`);
190
+ }
191
+ // Compare cost (allow small differences due to rounding)
192
+ const costTolerance = 0.0001;
193
+ if (Math.abs(pythonMetrics.cost - typescriptMetrics.cost) > costTolerance) {
194
+ differences.push(`Cost differs: Python=${pythonMetrics.cost}, TypeScript=${typescriptMetrics.cost}`);
195
+ }
196
+ // Compare model (must match exactly)
197
+ if (pythonMetrics.model !== typescriptMetrics.model) {
198
+ differences.push(`Model mismatch: Python="${pythonMetrics.model}", TypeScript="${typescriptMetrics.model}"`);
199
+ }
200
+ // Compare operation (must match exactly)
201
+ if (pythonMetrics.operation !== typescriptMetrics.operation) {
202
+ differences.push(`Operation mismatch: Python="${pythonMetrics.operation}", TypeScript="${typescriptMetrics.operation}"`);
203
+ }
204
+ // Compare system (must match exactly)
205
+ if (pythonMetrics.system !== typescriptMetrics.system) {
206
+ differences.push(`System mismatch: Python="${pythonMetrics.system}", TypeScript="${typescriptMetrics.system}"`);
207
+ }
208
+ return {
209
+ match: differences.length === 0,
210
+ differences,
211
+ };
212
+ }
213
+ /**
214
+ * Create a test helper that validates trace consistency
215
+ */
216
+ function createTraceValidator(providerName, expectedAttributes = []) {
217
+ return {
218
+ validateTrace: (trace) => {
219
+ const errors = [];
220
+ // Check required attributes
221
+ for (const attr of expectedAttributes) {
222
+ if (!(attr in trace.attributes)) {
223
+ errors.push(`Missing required attribute: ${attr}`);
224
+ }
225
+ }
226
+ // Check system matches provider
227
+ if (trace.attributes['gen_ai.system'] !== providerName) {
228
+ errors.push(`System mismatch: expected "${providerName}", got "${trace.attributes['gen_ai.system']}"`);
229
+ }
230
+ // Check operation is set
231
+ if (!trace.attributes['gen_ai.operation.name']) {
232
+ errors.push('Missing operation name');
233
+ }
234
+ // Check tokens are present
235
+ if (!trace.attributes['gen_ai.usage.input_tokens'] && !trace.attributes['gen_ai.usage.output_tokens']) {
236
+ errors.push('Missing token usage information');
237
+ }
238
+ return {
239
+ valid: errors.length === 0,
240
+ errors,
241
+ };
242
+ },
243
+ };
244
+ }
245
+ //# sourceMappingURL=trace-comparison-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-comparison-utils.js","sourceRoot":"","sources":["../../../src/instrumentation/__tests__/trace-comparison-utils.ts"],"names":[],"mappings":"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"}
@@ -26,17 +26,19 @@ class OpenlitAnthropicInstrumentation extends instrumentation_1.InstrumentationB
26
26
  }
27
27
  _patch(moduleExports) {
28
28
  try {
29
- if ((0, instrumentation_1.isWrapped)(moduleExports.Anthropic.Messages.prototype.create)) {
30
- this._unwrap(moduleExports.Anthropic.Messages.prototype, 'create');
29
+ const AnthropicClass = moduleExports.Anthropic ?? moduleExports;
30
+ if ((0, instrumentation_1.isWrapped)(AnthropicClass.Messages.prototype.create)) {
31
+ this._unwrap(AnthropicClass.Messages.prototype, 'create');
31
32
  }
32
- this._wrap(moduleExports.Anthropic.Messages.prototype, 'create', wrapper_1.default._patchMessageCreate(this.tracer));
33
+ this._wrap(AnthropicClass.Messages.prototype, 'create', wrapper_1.default._patchMessageCreate(this.tracer));
33
34
  }
34
35
  catch (e) {
35
36
  console.error('Error in _patch method:', e);
36
37
  }
37
38
  }
38
39
  _unpatch(moduleExports) {
39
- this._unwrap(moduleExports.Anthropic.Messages.prototype, 'create');
40
+ const AnthropicClass = moduleExports.Anthropic ?? moduleExports;
41
+ this._unwrap(AnthropicClass.Messages.prototype, 'create');
40
42
  }
41
43
  }
42
44
  exports.default = OpenlitAnthropicInstrumentation;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentation/anthropic/index.ts"],"names":[],"mappings":";;;;;AAAA,oEAKwC;AAExC,6CAAwD;AAExD,wDAAyC;AAIzC,MAAqB,+BAAgC,SAAQ,qCAAmB;IAC9E,YAAY,SAAyC,EAAE;QACrD,KAAK,CAAC,GAAG,iCAAsB,4BAA4B,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAES,IAAI;QACZ,MAAM,MAAM,GAAG,IAAI,qDAAmC,CACpD,mBAAmB,EACnB,CAAC,WAAW,CAAC,EACb,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC,EACD,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CACF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAEM,WAAW,CAAC,SAAc;QAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAES,MAAM,CAAC,aAA+B;QAC9C,IAAI,CAAC;YACH,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAC1C,QAAQ,EACR,iBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAClD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAES,QAAQ,CAAC,aAA+B;QAChD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;CACF;AA7CD,kDA6CC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentation/anthropic/index.ts"],"names":[],"mappings":";;;;;AAAA,oEAKwC;AAExC,6CAAwD;AAExD,wDAAyC;AAIzC,MAAqB,+BAAgC,SAAQ,qCAAmB;IAC9E,YAAY,SAAyC,EAAE;QACrD,KAAK,CAAC,GAAG,iCAAsB,4BAA4B,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAES,IAAI;QACZ,MAAM,MAAM,GAAG,IAAI,qDAAmC,CACpD,mBAAmB,EACnB,CAAC,WAAW,CAAC,EACb,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,aAAa,CAAC;QACvB,CAAC,EACD,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CACF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAEM,WAAW,CAAC,SAAc;QAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAES,MAAM,CAAC,aAA+B;QAC9C,IAAI,CAAC;YACH,MAAM,cAAc,GAAI,aAAqB,CAAC,SAAS,IAAI,aAAa,CAAC;YACzE,IAAI,IAAA,2BAAS,EAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC,KAAK,CACR,cAAc,CAAC,QAAQ,CAAC,SAAS,EACjC,QAAQ,EACR,iBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAClD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAES,QAAQ,CAAC,aAA+B;QAChD,MAAM,cAAc,GAAI,aAAqB,CAAC,SAAS,IAAI,aAAa,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;CACF;AA/CD,kDA+CC"}