openlit 1.8.0 → 1.9.1

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 (84) hide show
  1. package/dist/constant.d.ts +1 -0
  2. package/dist/constant.js +2 -1
  3. package/dist/constant.js.map +1 -1
  4. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js +4 -0
  5. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js.map +1 -1
  6. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js +11 -0
  7. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js.map +1 -1
  8. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js +11 -0
  9. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js.map +1 -1
  10. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js +11 -0
  11. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js.map +1 -1
  12. package/dist/instrumentation/__tests__/together-trace-comparison.test.js +11 -0
  13. package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -1
  14. package/dist/instrumentation/__tests__/trace-comparison-utils.js +3 -0
  15. package/dist/instrumentation/__tests__/trace-comparison-utils.js.map +1 -1
  16. package/dist/instrumentation/anthropic/wrapper.d.ts +7 -1
  17. package/dist/instrumentation/anthropic/wrapper.js +71 -3
  18. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  19. package/dist/instrumentation/base-wrapper.d.ts +3 -1
  20. package/dist/instrumentation/base-wrapper.js +19 -1
  21. package/dist/instrumentation/base-wrapper.js.map +1 -1
  22. package/dist/instrumentation/bedrock/index.d.ts +11 -0
  23. package/dist/instrumentation/bedrock/index.js +52 -0
  24. package/dist/instrumentation/bedrock/index.js.map +1 -0
  25. package/dist/instrumentation/bedrock/wrapper.d.ts +10 -0
  26. package/dist/instrumentation/bedrock/wrapper.js +360 -0
  27. package/dist/instrumentation/bedrock/wrapper.js.map +1 -0
  28. package/dist/instrumentation/cohere/wrapper.d.ts +5 -1
  29. package/dist/instrumentation/cohere/wrapper.js +24 -1
  30. package/dist/instrumentation/cohere/wrapper.js.map +1 -1
  31. package/dist/instrumentation/google-ai/wrapper.d.ts +2 -0
  32. package/dist/instrumentation/google-ai/wrapper.js +4 -0
  33. package/dist/instrumentation/google-ai/wrapper.js.map +1 -1
  34. package/dist/instrumentation/groq/wrapper.d.ts +2 -0
  35. package/dist/instrumentation/groq/wrapper.js +4 -0
  36. package/dist/instrumentation/groq/wrapper.js.map +1 -1
  37. package/dist/instrumentation/index.js +10 -0
  38. package/dist/instrumentation/index.js.map +1 -1
  39. package/dist/instrumentation/langchain/index.d.ts +23 -0
  40. package/dist/instrumentation/langchain/index.js +109 -0
  41. package/dist/instrumentation/langchain/index.js.map +1 -0
  42. package/dist/instrumentation/langchain/wrapper.d.ts +6 -0
  43. package/dist/instrumentation/langchain/wrapper.js +322 -0
  44. package/dist/instrumentation/langchain/wrapper.js.map +1 -0
  45. package/dist/instrumentation/llamaindex/index.d.ts +11 -0
  46. package/dist/instrumentation/llamaindex/index.js +102 -0
  47. package/dist/instrumentation/llamaindex/index.js.map +1 -0
  48. package/dist/instrumentation/llamaindex/wrapper.d.ts +11 -0
  49. package/dist/instrumentation/llamaindex/wrapper.js +252 -0
  50. package/dist/instrumentation/llamaindex/wrapper.js.map +1 -0
  51. package/dist/instrumentation/mistral/wrapper.d.ts +2 -0
  52. package/dist/instrumentation/mistral/wrapper.js +6 -0
  53. package/dist/instrumentation/mistral/wrapper.js.map +1 -1
  54. package/dist/instrumentation/ollama/wrapper.d.ts +2 -0
  55. package/dist/instrumentation/ollama/wrapper.js +4 -0
  56. package/dist/instrumentation/ollama/wrapper.js.map +1 -1
  57. package/dist/instrumentation/openai/index.js +1 -1
  58. package/dist/instrumentation/openai/index.js.map +1 -1
  59. package/dist/instrumentation/openai/wrapper.d.ts +2 -0
  60. package/dist/instrumentation/openai/wrapper.js +17 -7
  61. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  62. package/dist/instrumentation/pinecone/index.d.ts +11 -0
  63. package/dist/instrumentation/pinecone/index.js +79 -0
  64. package/dist/instrumentation/pinecone/index.js.map +1 -0
  65. package/dist/instrumentation/pinecone/wrapper.d.ts +14 -0
  66. package/dist/instrumentation/pinecone/wrapper.js +198 -0
  67. package/dist/instrumentation/pinecone/wrapper.js.map +1 -0
  68. package/dist/instrumentation/together/wrapper.d.ts +2 -0
  69. package/dist/instrumentation/together/wrapper.js +4 -0
  70. package/dist/instrumentation/together/wrapper.js.map +1 -1
  71. package/dist/instrumentation/vercel-ai/index.d.ts +10 -0
  72. package/dist/instrumentation/vercel-ai/index.js +59 -0
  73. package/dist/instrumentation/vercel-ai/index.js.map +1 -0
  74. package/dist/instrumentation/vercel-ai/wrapper.d.ts +11 -0
  75. package/dist/instrumentation/vercel-ai/wrapper.js +284 -0
  76. package/dist/instrumentation/vercel-ai/wrapper.js.map +1 -0
  77. package/dist/otel/metrics.d.ts +3 -0
  78. package/dist/otel/metrics.js +21 -0
  79. package/dist/otel/metrics.js.map +1 -1
  80. package/dist/semantic-convention.d.ts +15 -0
  81. package/dist/semantic-convention.js +21 -5
  82. package/dist/semantic-convention.js.map +1 -1
  83. package/dist/types.d.ts +1 -1
  84. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"base-wrapper.js","sourceRoot":"","sources":["../../src/instrumentation/base-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-wrapper.js","sourceRoot":"","sources":["../../src/instrumentation/base-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { InstrumentationBase, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';
2
+ import { InstrumentationConfig } from '@opentelemetry/instrumentation';
3
+ export interface BedrockInstrumentationConfig extends InstrumentationConfig {
4
+ }
5
+ export default class OpenlitBedrockInstrumentation extends InstrumentationBase {
6
+ constructor(config?: BedrockInstrumentationConfig);
7
+ protected init(): void | InstrumentationModuleDefinition | InstrumentationModuleDefinition[];
8
+ manualPatch(bedrock: any): void;
9
+ protected _patch(moduleExports: any): void;
10
+ protected _unpatch(moduleExports: any): void;
11
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const instrumentation_1 = require("@opentelemetry/instrumentation");
7
+ const constant_1 = require("../../constant");
8
+ const wrapper_1 = __importDefault(require("./wrapper"));
9
+ class OpenlitBedrockInstrumentation extends instrumentation_1.InstrumentationBase {
10
+ constructor(config = {}) {
11
+ super(`${constant_1.INSTRUMENTATION_PREFIX}/instrumentation-bedrock`, '1.0.0', config);
12
+ }
13
+ init() {
14
+ const module = new instrumentation_1.InstrumentationNodeModuleDefinition('@aws-sdk/client-bedrock-runtime', ['>=3.0.0'], (moduleExports) => {
15
+ this._patch(moduleExports);
16
+ return moduleExports;
17
+ }, (moduleExports) => {
18
+ if (moduleExports !== undefined) {
19
+ this._unpatch(moduleExports);
20
+ }
21
+ });
22
+ return [module];
23
+ }
24
+ manualPatch(bedrock) {
25
+ this._patch(bedrock);
26
+ }
27
+ _patch(moduleExports) {
28
+ try {
29
+ const BedrockRuntimeClient = moduleExports.BedrockRuntimeClient;
30
+ if (!BedrockRuntimeClient?.prototype)
31
+ return;
32
+ if ((0, instrumentation_1.isWrapped)(BedrockRuntimeClient.prototype.send)) {
33
+ this._unwrap(BedrockRuntimeClient.prototype, 'send');
34
+ }
35
+ this._wrap(BedrockRuntimeClient.prototype, 'send', wrapper_1.default._patchSend(this.tracer));
36
+ }
37
+ catch (e) {
38
+ console.error('Error in Bedrock _patch method:', e);
39
+ }
40
+ }
41
+ _unpatch(moduleExports) {
42
+ try {
43
+ const BedrockRuntimeClient = moduleExports.BedrockRuntimeClient;
44
+ if (BedrockRuntimeClient?.prototype?.send) {
45
+ this._unwrap(BedrockRuntimeClient.prototype, 'send');
46
+ }
47
+ }
48
+ catch { /* ignore */ }
49
+ }
50
+ }
51
+ exports.default = OpenlitBedrockInstrumentation;
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentation/bedrock/index.ts"],"names":[],"mappings":";;;;;AAAA,oEAKwC;AAExC,6CAAwD;AACxD,wDAAuC;AAIvC,MAAqB,6BAA8B,SAAQ,qCAAmB;IAC5E,YAAY,SAAuC,EAAE;QACnD,KAAK,CAAC,GAAG,iCAAsB,0BAA0B,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAES,IAAI;QACZ,MAAM,MAAM,GAAG,IAAI,qDAAmC,CACpD,iCAAiC,EACjC,CAAC,SAAS,CAAC,EACX,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,OAAY;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAES,MAAM,CAAC,aAAkB;QACjC,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC;YAChE,IAAI,CAAC,oBAAoB,EAAE,SAAS;gBAAE,OAAO;YAE7C,IAAI,IAAA,2BAAS,EAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,KAAK,CACR,oBAAoB,CAAC,SAAS,EAC9B,MAAM,EACN,iBAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CACvC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAES,QAAQ,CAAC,aAAkB;QACnC,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC;YAChE,IAAI,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;CACF;AArDD,gDAqDC"}
@@ -0,0 +1,10 @@
1
+ import { Tracer } from '@opentelemetry/api';
2
+ import BaseWrapper from '../base-wrapper';
3
+ declare class BedrockWrapper extends BaseWrapper {
4
+ static aiSystem: string;
5
+ static _patchSend(tracer: Tracer): any;
6
+ static _handleConverseCommand(tracer: Tracer, originalMethod: any, instance: any, args: any[]): Promise<any>;
7
+ static _handleConverseStreamCommand(tracer: Tracer, originalMethod: any, instance: any, args: any[]): Promise<any>;
8
+ static _handleInvokeModelCommand(tracer: Tracer, originalMethod: any, instance: any, args: any[], commandName: string): Promise<any>;
9
+ }
10
+ export default BedrockWrapper;
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const api_1 = require("@opentelemetry/api");
7
+ const config_1 = __importDefault(require("../../config"));
8
+ const helpers_1 = __importDefault(require("../../helpers"));
9
+ const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
10
+ const base_wrapper_1 = __importDefault(require("../base-wrapper"));
11
+ const BEDROCK_SERVER_ADDRESS = 'bedrock-runtime.amazonaws.com';
12
+ const BEDROCK_SERVER_PORT = 443;
13
+ function mapFinishReason(stopReason) {
14
+ const map = {
15
+ end_turn: 'stop',
16
+ max_tokens: 'max_tokens',
17
+ stop_sequence: 'stop',
18
+ tool_use: 'tool_calls',
19
+ content_filtered: 'content_filter',
20
+ guardrail_intervention: 'content_filter',
21
+ };
22
+ return map[stopReason] || stopReason;
23
+ }
24
+ function applyInferenceConfigAttributes(span, inferenceConfig) {
25
+ if (inferenceConfig.maxTokens !== undefined)
26
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MAX_TOKENS, inferenceConfig.maxTokens);
27
+ if (inferenceConfig.temperature !== undefined)
28
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_TEMPERATURE, inferenceConfig.temperature);
29
+ if (inferenceConfig.topP !== undefined)
30
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_TOP_P, inferenceConfig.topP);
31
+ if (inferenceConfig.topK !== undefined)
32
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_TOP_K, inferenceConfig.topK);
33
+ if (inferenceConfig.stopSequences !== undefined)
34
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_STOP_SEQUENCES, inferenceConfig.stopSequences);
35
+ }
36
+ class BedrockWrapper extends base_wrapper_1.default {
37
+ static _patchSend(tracer) {
38
+ return (originalMethod) => {
39
+ return async function (...args) {
40
+ const command = args[0];
41
+ if (!command)
42
+ return originalMethod.apply(this, args);
43
+ const commandName = command.constructor?.name || '';
44
+ if (commandName === 'ConverseCommand') {
45
+ return BedrockWrapper._handleConverseCommand(tracer, originalMethod, this, args);
46
+ }
47
+ if (commandName === 'ConverseStreamCommand') {
48
+ return BedrockWrapper._handleConverseStreamCommand(tracer, originalMethod, this, args);
49
+ }
50
+ if (commandName === 'InvokeModelCommand' || commandName === 'InvokeModelWithResponseStreamCommand') {
51
+ return BedrockWrapper._handleInvokeModelCommand(tracer, originalMethod, this, args, commandName);
52
+ }
53
+ return originalMethod.apply(this, args);
54
+ };
55
+ };
56
+ }
57
+ static async _handleConverseCommand(tracer, originalMethod, instance, args) {
58
+ const command = args[0];
59
+ const input = command.input || {};
60
+ const modelId = input.modelId || 'unknown';
61
+ const genAIEndpoint = 'bedrock.converse';
62
+ const span = tracer.startSpan(genAIEndpoint, { kind: api_1.SpanKind.CLIENT });
63
+ return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), async () => {
64
+ const startTime = Date.now();
65
+ let metricParams;
66
+ try {
67
+ const response = await originalMethod.apply(instance, args);
68
+ const duration = (Date.now() - startTime) / 1000;
69
+ const usage = response.usage || {};
70
+ const promptTokens = usage.inputTokens || 0;
71
+ const completionTokens = usage.outputTokens || 0;
72
+ const totalTokens = usage.totalTokens || promptTokens + completionTokens;
73
+ const cacheReadTokens = usage.cacheReadInputTokens || 0;
74
+ const cacheWriteTokens = usage.cacheWriteInputTokens || 0;
75
+ const finishReason = mapFinishReason(response.stopReason || 'stop');
76
+ const pricingInfo = await config_1.default.updatePricingJson(config_1.default.pricing_json);
77
+ const cost = helpers_1.default.getChatModelCost(modelId, pricingInfo, promptTokens, completionTokens);
78
+ BedrockWrapper.setBaseSpanAttributes(span, {
79
+ genAIEndpoint,
80
+ model: modelId,
81
+ cost,
82
+ aiSystem: BedrockWrapper.aiSystem,
83
+ serverAddress: BEDROCK_SERVER_ADDRESS,
84
+ serverPort: BEDROCK_SERVER_PORT,
85
+ });
86
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT);
87
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_IS_STREAM, false);
88
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, modelId);
89
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, promptTokens);
90
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, completionTokens);
91
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, totalTokens);
92
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE, totalTokens);
93
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, [finishReason]);
94
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
95
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, duration);
96
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, BEDROCK_SERVER_ADDRESS);
97
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, BEDROCK_SERVER_PORT);
98
+ if (cacheReadTokens > 0)
99
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS, cacheReadTokens);
100
+ if (cacheWriteTokens > 0)
101
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS, cacheWriteTokens);
102
+ const requestId = response.$metadata?.requestId;
103
+ if (requestId)
104
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_ID, requestId);
105
+ applyInferenceConfigAttributes(span, input.inferenceConfig || {});
106
+ if (config_1.default.traceContent) {
107
+ const messages = (input.messages || []).map((m) => ({
108
+ role: m.role,
109
+ content: m.content?.map((c) => c.text || '').join('') || '',
110
+ }));
111
+ const systemText = input.system?.[0]?.text;
112
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, helpers_1.default.buildInputMessages(messages, systemText));
113
+ if (systemText) {
114
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS, JSON.stringify([{ type: 'text', content: systemText }]));
115
+ }
116
+ const outputText = response.output?.message?.content?.map((c) => c.text || '').join('') || '';
117
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, helpers_1.default.buildOutputMessages(outputText, finishReason));
118
+ }
119
+ metricParams = { genAIEndpoint, model: modelId, cost, aiSystem: BedrockWrapper.aiSystem };
120
+ return response;
121
+ }
122
+ catch (e) {
123
+ helpers_1.default.handleException(span, e);
124
+ throw e;
125
+ }
126
+ finally {
127
+ span.end();
128
+ if (metricParams)
129
+ base_wrapper_1.default.recordMetrics(span, metricParams);
130
+ }
131
+ });
132
+ }
133
+ static async _handleConverseStreamCommand(tracer, originalMethod, instance, args) {
134
+ const command = args[0];
135
+ const input = command.input || {};
136
+ const modelId = input.modelId || 'unknown';
137
+ const genAIEndpoint = 'bedrock.converse_stream';
138
+ const startTime = Date.now();
139
+ const span = tracer.startSpan(genAIEndpoint, { kind: api_1.SpanKind.CLIENT });
140
+ // Call the original method to get the response object (with .stream async iterable)
141
+ const response = await api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => originalMethod.apply(instance, args));
142
+ // Accumulated state from stream events
143
+ let llmResponse = '';
144
+ let finishReason = 'stop';
145
+ let inputTokens = 0;
146
+ let outputTokens = 0;
147
+ let cacheReadTokens = 0;
148
+ let cacheWriteTokens = 0;
149
+ let firstChunkTime = null;
150
+ const chunkTimestamps = [];
151
+ const originalStream = response.stream;
152
+ async function* wrappedStream() {
153
+ try {
154
+ for await (const event of originalStream) {
155
+ const now = Date.now();
156
+ if (firstChunkTime === null)
157
+ firstChunkTime = now;
158
+ chunkTimestamps.push(now);
159
+ if (event.contentBlockDelta?.delta?.text)
160
+ llmResponse += event.contentBlockDelta.delta.text;
161
+ if (event.messageStop?.stopReason)
162
+ finishReason = mapFinishReason(event.messageStop.stopReason);
163
+ if (event.metadata?.usage) {
164
+ inputTokens = event.metadata.usage.inputTokens || 0;
165
+ outputTokens = event.metadata.usage.outputTokens || 0;
166
+ cacheReadTokens = event.metadata.usage.cacheReadInputTokens || 0;
167
+ cacheWriteTokens = event.metadata.usage.cacheWriteInputTokens || 0;
168
+ }
169
+ yield event;
170
+ }
171
+ }
172
+ finally {
173
+ // Record telemetry once the stream is fully consumed
174
+ try {
175
+ const duration = (Date.now() - startTime) / 1000;
176
+ const ttft = firstChunkTime !== null ? (firstChunkTime - startTime) / 1000 : 0;
177
+ let tbt = 0;
178
+ if (chunkTimestamps.length > 1) {
179
+ const timeDiffs = chunkTimestamps.slice(1).map((t, i) => t - chunkTimestamps[i]);
180
+ tbt = timeDiffs.reduce((a, b) => a + b, 0) / timeDiffs.length / 1000;
181
+ }
182
+ const totalTokens = inputTokens + outputTokens;
183
+ const pricingInfo = await config_1.default.updatePricingJson(config_1.default.pricing_json);
184
+ const cost = helpers_1.default.getChatModelCost(modelId, pricingInfo, inputTokens, outputTokens);
185
+ BedrockWrapper.setBaseSpanAttributes(span, {
186
+ genAIEndpoint,
187
+ model: modelId,
188
+ cost,
189
+ aiSystem: BedrockWrapper.aiSystem,
190
+ });
191
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT);
192
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_IS_STREAM, true);
193
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, modelId);
194
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, inputTokens);
195
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens);
196
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, totalTokens);
197
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE, totalTokens);
198
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, [finishReason]);
199
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
200
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, duration);
201
+ if (ttft > 0)
202
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SERVER_TTFT, ttft);
203
+ if (tbt > 0)
204
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SERVER_TBT, tbt);
205
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, BEDROCK_SERVER_ADDRESS);
206
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, BEDROCK_SERVER_PORT);
207
+ if (cacheReadTokens > 0)
208
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS, cacheReadTokens);
209
+ if (cacheWriteTokens > 0)
210
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS, cacheWriteTokens);
211
+ const requestId = response.$metadata?.requestId;
212
+ if (requestId)
213
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_ID, requestId);
214
+ applyInferenceConfigAttributes(span, input.inferenceConfig || {});
215
+ if (config_1.default.traceContent) {
216
+ const messages = (input.messages || []).map((m) => ({
217
+ role: m.role,
218
+ content: m.content?.map((c) => c.text || '').join('') || '',
219
+ }));
220
+ const systemText = input.system?.[0]?.text;
221
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, helpers_1.default.buildInputMessages(messages, systemText));
222
+ if (systemText) {
223
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS, JSON.stringify([{ type: 'text', content: systemText }]));
224
+ }
225
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, helpers_1.default.buildOutputMessages(llmResponse, finishReason));
226
+ }
227
+ const metricParams = { genAIEndpoint, model: modelId, cost, aiSystem: BedrockWrapper.aiSystem };
228
+ base_wrapper_1.default.recordMetrics(span, metricParams);
229
+ }
230
+ catch { /* ignore telemetry errors in finally */ }
231
+ finally {
232
+ span.end();
233
+ }
234
+ }
235
+ }
236
+ return { ...response, stream: wrappedStream() };
237
+ }
238
+ static async _handleInvokeModelCommand(tracer, originalMethod, instance, args, commandName) {
239
+ const command = args[0];
240
+ const input = command.input || {};
241
+ const modelId = input.modelId || 'unknown';
242
+ const isStream = commandName === 'InvokeModelWithResponseStreamCommand';
243
+ const genAIEndpoint = isStream ? 'bedrock.invoke_model_stream' : 'bedrock.invoke_model';
244
+ const span = tracer.startSpan(genAIEndpoint, { kind: api_1.SpanKind.CLIENT });
245
+ return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), async () => {
246
+ const startTime = Date.now();
247
+ let metricParams;
248
+ try {
249
+ const response = await originalMethod.apply(instance, args);
250
+ const duration = (Date.now() - startTime) / 1000;
251
+ // Parse response body
252
+ let parsedBody = {};
253
+ let promptTokens = 0;
254
+ let completionTokens = 0;
255
+ let outputText = '';
256
+ let rawFinishReason = 'stop';
257
+ try {
258
+ const bodyBytes = response.body;
259
+ if (bodyBytes) {
260
+ const bodyStr = typeof bodyBytes === 'string'
261
+ ? bodyBytes
262
+ : Buffer.from(bodyBytes).toString('utf-8');
263
+ parsedBody = JSON.parse(bodyStr);
264
+ }
265
+ }
266
+ catch { /* ignore parse errors */ }
267
+ // Handle different provider response formats
268
+ if (modelId.startsWith('anthropic')) {
269
+ promptTokens = parsedBody.usage?.input_tokens || 0;
270
+ completionTokens = parsedBody.usage?.output_tokens || 0;
271
+ outputText = parsedBody.content?.[0]?.text || '';
272
+ rawFinishReason = parsedBody.stop_reason || 'stop';
273
+ }
274
+ else if (modelId.startsWith('amazon')) {
275
+ promptTokens = parsedBody.inputTextTokenCount || 0;
276
+ completionTokens = parsedBody.results?.[0]?.tokenCount || 0;
277
+ outputText = parsedBody.results?.[0]?.outputText || '';
278
+ rawFinishReason = parsedBody.results?.[0]?.completionReason || 'stop';
279
+ }
280
+ else if (modelId.startsWith('meta')) {
281
+ promptTokens = parsedBody.prompt_token_count || 0;
282
+ completionTokens = parsedBody.generation_token_count || 0;
283
+ outputText = parsedBody.generation || '';
284
+ rawFinishReason = parsedBody.stop_reason || 'stop';
285
+ }
286
+ else if (modelId.startsWith('mistral') || modelId.startsWith('mixtral')) {
287
+ promptTokens = parsedBody.usage?.prompt_tokens || 0;
288
+ completionTokens = parsedBody.usage?.completion_tokens || 0;
289
+ outputText = parsedBody.outputs?.[0]?.text || '';
290
+ rawFinishReason = parsedBody.outputs?.[0]?.stop_reason || 'stop';
291
+ }
292
+ else if (modelId.startsWith('ai21')) {
293
+ promptTokens = parsedBody.prompt?.tokens?.length || 0;
294
+ completionTokens = parsedBody.completions?.[0]?.data?.tokens?.length || 0;
295
+ outputText = parsedBody.completions?.[0]?.data?.text || '';
296
+ rawFinishReason = parsedBody.completions?.[0]?.finishReason?.reason || 'stop';
297
+ }
298
+ else {
299
+ outputText = parsedBody.output || parsedBody.generation || parsedBody.text || '';
300
+ }
301
+ const finishReason = mapFinishReason(rawFinishReason);
302
+ const totalTokens = promptTokens + completionTokens;
303
+ const pricingInfo = await config_1.default.updatePricingJson(config_1.default.pricing_json);
304
+ const cost = helpers_1.default.getChatModelCost(modelId, pricingInfo, promptTokens, completionTokens);
305
+ BedrockWrapper.setBaseSpanAttributes(span, {
306
+ genAIEndpoint,
307
+ model: modelId,
308
+ cost,
309
+ aiSystem: BedrockWrapper.aiSystem,
310
+ serverAddress: BEDROCK_SERVER_ADDRESS,
311
+ serverPort: BEDROCK_SERVER_PORT,
312
+ });
313
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OPERATION, semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT);
314
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_IS_STREAM, isStream);
315
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, modelId);
316
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, promptTokens);
317
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, completionTokens);
318
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, totalTokens);
319
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE, totalTokens);
320
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, [finishReason]);
321
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
322
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, duration);
323
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, BEDROCK_SERVER_ADDRESS);
324
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, BEDROCK_SERVER_PORT);
325
+ const requestId = response.$metadata?.requestId;
326
+ if (requestId)
327
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_ID, requestId);
328
+ if (config_1.default.traceContent) {
329
+ try {
330
+ const reqBody = input.body
331
+ ? JSON.parse(typeof input.body === 'string' ? input.body : Buffer.from(input.body).toString())
332
+ : {};
333
+ const prompt = reqBody.prompt || reqBody.inputText || '';
334
+ if (prompt) {
335
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, helpers_1.default.buildInputMessages([{ role: 'user', content: prompt }]));
336
+ }
337
+ }
338
+ catch { /* ignore */ }
339
+ if (outputText) {
340
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, helpers_1.default.buildOutputMessages(outputText, finishReason));
341
+ }
342
+ }
343
+ metricParams = { genAIEndpoint, model: modelId, cost, aiSystem: BedrockWrapper.aiSystem };
344
+ return response;
345
+ }
346
+ catch (e) {
347
+ helpers_1.default.handleException(span, e);
348
+ throw e;
349
+ }
350
+ finally {
351
+ span.end();
352
+ if (metricParams)
353
+ base_wrapper_1.default.recordMetrics(span, metricParams);
354
+ }
355
+ });
356
+ }
357
+ }
358
+ BedrockWrapper.aiSystem = semantic_convention_1.default.GEN_AI_SYSTEM_AWS_BEDROCK;
359
+ exports.default = BedrockWrapper;
360
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/instrumentation/bedrock/wrapper.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { Span, Tracer } from '@opentelemetry/api';
2
2
  import BaseWrapper from '../base-wrapper';
3
3
  export default class CohereWrapper extends BaseWrapper {
4
4
  static aiSystem: string;
5
+ static serverAddress: string;
6
+ static serverPort: number;
5
7
  static _patchEmbed(tracer: Tracer): any;
6
8
  static _patchChat(tracer: Tracer): any;
7
9
  static _patchChatStream(tracer: Tracer): any;
@@ -17,12 +19,14 @@ export default class CohereWrapper extends BaseWrapper {
17
19
  response: any;
18
20
  span: Span;
19
21
  }): AsyncGenerator<unknown, any, unknown>;
20
- static _chatCommonSetter({ args, genAIEndpoint, result, span, stream, }: {
22
+ static _chatCommonSetter({ args, genAIEndpoint, result, span, stream, ttft, tbt, }: {
21
23
  args: any[];
22
24
  genAIEndpoint: string;
23
25
  result: any;
24
26
  span: Span;
25
27
  stream: boolean;
28
+ ttft?: number;
29
+ tbt?: number;
26
30
  }): Promise<{
27
31
  genAIEndpoint: string;
28
32
  model: any;
@@ -124,6 +124,8 @@ class CohereWrapper extends base_wrapper_1.default {
124
124
  }
125
125
  static async *_chatGenerator({ args, genAIEndpoint, response, span, }) {
126
126
  let metricParams;
127
+ const timestamps = [];
128
+ const startTime = Date.now();
127
129
  try {
128
130
  let result = {
129
131
  response_id: '',
@@ -137,17 +139,27 @@ class CohereWrapper extends base_wrapper_1.default {
137
139
  },
138
140
  };
139
141
  for await (const chunk of response) {
142
+ timestamps.push(Date.now());
140
143
  if (chunk.eventType === 'stream-end') {
141
144
  result = chunk.response;
142
145
  }
143
146
  yield chunk;
144
147
  }
148
+ // Calculate TTFT and TBT
149
+ const ttft = timestamps.length > 0 ? (timestamps[0] - startTime) / 1000 : 0;
150
+ let tbt = 0;
151
+ if (timestamps.length > 1) {
152
+ const timeDiffs = timestamps.slice(1).map((t, i) => t - timestamps[i]);
153
+ tbt = timeDiffs.reduce((a, b) => a + b, 0) / timeDiffs.length / 1000;
154
+ }
145
155
  metricParams = await CohereWrapper._chatCommonSetter({
146
156
  args,
147
157
  genAIEndpoint,
148
158
  result,
149
159
  span,
150
160
  stream: true,
161
+ ttft,
162
+ tbt,
151
163
  });
152
164
  return result;
153
165
  }
@@ -162,7 +174,7 @@ class CohereWrapper extends base_wrapper_1.default {
162
174
  }
163
175
  }
164
176
  }
165
- static async _chatCommonSetter({ args, genAIEndpoint, result, span, stream, }) {
177
+ static async _chatCommonSetter({ args, genAIEndpoint, result, span, stream, ttft = 0, tbt = 0, }) {
166
178
  const traceContent = config_1.default.traceContent;
167
179
  const { message, model = 'command-r-plus-08-2024', frequency_penalty = 0, max_tokens = null, presence_penalty = 0, seed = null, temperature = 1, user, tools, } = args[0];
168
180
  // Request Params attributes : Start
@@ -187,6 +199,8 @@ class CohereWrapper extends base_wrapper_1.default {
187
199
  user,
188
200
  cost,
189
201
  aiSystem: CohereWrapper.aiSystem,
202
+ serverAddress: CohereWrapper.serverAddress,
203
+ serverPort: CohereWrapper.serverPort,
190
204
  });
191
205
  // Response model
192
206
  span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, model);
@@ -194,6 +208,13 @@ class CohereWrapper extends base_wrapper_1.default {
194
208
  span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, result.meta.billedUnits.outputTokens);
195
209
  span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_TOTAL_TOKENS, result.meta.billedUnits.inputTokens + result.meta.billedUnits.outputTokens);
196
210
  span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE, result.meta.billedUnits.inputTokens + result.meta.billedUnits.outputTokens);
211
+ // TTFT and TBT streaming metrics
212
+ if (ttft > 0) {
213
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SERVER_TTFT, ttft);
214
+ }
215
+ if (tbt > 0) {
216
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SERVER_TBT, tbt);
217
+ }
197
218
  if (result.finishReason) {
198
219
  span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, [result.finishReason]);
199
220
  }
@@ -211,5 +232,7 @@ class CohereWrapper extends base_wrapper_1.default {
211
232
  }
212
233
  }
213
234
  CohereWrapper.aiSystem = semantic_convention_1.default.GEN_AI_SYSTEM_COHERE;
235
+ CohereWrapper.serverAddress = 'api.cohere.com';
236
+ CohereWrapper.serverPort = 443;
214
237
  exports.default = CohereWrapper;
215
238
  //# sourceMappingURL=wrapper.js.map