openlit 1.11.0 → 1.12.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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/config.d.ts +12 -4
  3. package/dist/config.js +7 -17
  4. package/dist/config.js.map +1 -1
  5. package/dist/evals/llm/anthropic.js +10 -6
  6. package/dist/evals/llm/anthropic.js.map +1 -1
  7. package/dist/evals/llm/openai.js +9 -5
  8. package/dist/evals/llm/openai.js.map +1 -1
  9. package/dist/features/vault.js +1 -1
  10. package/dist/features/vault.js.map +1 -1
  11. package/dist/helpers.d.ts +93 -1
  12. package/dist/helpers.js +270 -8
  13. package/dist/helpers.js.map +1 -1
  14. package/dist/index.d.ts +6 -5
  15. package/dist/index.js +95 -50
  16. package/dist/index.js.map +1 -1
  17. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js +215 -27
  18. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js.map +1 -1
  19. package/dist/instrumentation/__tests__/base-wrapper.test.js +19 -23
  20. package/dist/instrumentation/__tests__/base-wrapper.test.js.map +1 -1
  21. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.d.ts +1 -0
  22. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.js +422 -0
  23. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.js.map +1 -0
  24. package/dist/instrumentation/__tests__/chroma-trace-comparison.test.js +1 -1
  25. package/dist/instrumentation/__tests__/chroma-trace-comparison.test.js.map +1 -1
  26. package/dist/instrumentation/__tests__/cohere-wrapper.test.js +150 -25
  27. package/dist/instrumentation/__tests__/cohere-wrapper.test.js.map +1 -1
  28. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js +152 -33
  29. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js.map +1 -1
  30. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js +391 -45
  31. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js.map +1 -1
  32. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.d.ts +2 -2
  33. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.js +323 -31
  34. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.js.map +1 -1
  35. package/dist/instrumentation/__tests__/langchain-wrapper.test.d.ts +1 -0
  36. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +282 -0
  37. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -0
  38. package/dist/instrumentation/__tests__/milvus-trace-comparison.test.js +1 -1
  39. package/dist/instrumentation/__tests__/milvus-trace-comparison.test.js.map +1 -1
  40. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.d.ts +0 -3
  41. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js +275 -68
  42. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js.map +1 -1
  43. package/dist/instrumentation/__tests__/openai-wrapper.test.js +7 -9
  44. package/dist/instrumentation/__tests__/openai-wrapper.test.js.map +1 -1
  45. package/dist/instrumentation/__tests__/qdrant-trace-comparison.test.js +1 -1
  46. package/dist/instrumentation/__tests__/qdrant-trace-comparison.test.js.map +1 -1
  47. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.d.ts +2 -1
  48. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.js +209 -21
  49. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.js.map +1 -1
  50. package/dist/instrumentation/__tests__/together-trace-comparison.test.js +231 -51
  51. package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -1
  52. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.d.ts +8 -0
  53. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.js +446 -0
  54. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.js.map +1 -0
  55. package/dist/instrumentation/anthropic/index.d.ts +2 -3
  56. package/dist/instrumentation/anthropic/index.js.map +1 -1
  57. package/dist/instrumentation/anthropic/wrapper.d.ts +1 -3
  58. package/dist/instrumentation/anthropic/wrapper.js +211 -91
  59. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  60. package/dist/instrumentation/azure-ai-inference/index.d.ts +11 -0
  61. package/dist/instrumentation/azure-ai-inference/index.js +76 -0
  62. package/dist/instrumentation/azure-ai-inference/index.js.map +1 -0
  63. package/dist/instrumentation/azure-ai-inference/wrapper.d.ts +42 -0
  64. package/dist/instrumentation/azure-ai-inference/wrapper.js +515 -0
  65. package/dist/instrumentation/azure-ai-inference/wrapper.js.map +1 -0
  66. package/dist/instrumentation/base-wrapper.d.ts +2 -1
  67. package/dist/instrumentation/base-wrapper.js +35 -23
  68. package/dist/instrumentation/base-wrapper.js.map +1 -1
  69. package/dist/instrumentation/bedrock/wrapper.d.ts +21 -3
  70. package/dist/instrumentation/bedrock/wrapper.js +318 -265
  71. package/dist/instrumentation/bedrock/wrapper.js.map +1 -1
  72. package/dist/instrumentation/chroma/wrapper.js +1 -1
  73. package/dist/instrumentation/chroma/wrapper.js.map +1 -1
  74. package/dist/instrumentation/claude-agent-sdk/index.d.ts +23 -0
  75. package/dist/instrumentation/claude-agent-sdk/index.js +83 -0
  76. package/dist/instrumentation/claude-agent-sdk/index.js.map +1 -0
  77. package/dist/instrumentation/claude-agent-sdk/wrapper.d.ts +13 -0
  78. package/dist/instrumentation/claude-agent-sdk/wrapper.js +1031 -0
  79. package/dist/instrumentation/claude-agent-sdk/wrapper.js.map +1 -0
  80. package/dist/instrumentation/cohere/index.d.ts +2 -3
  81. package/dist/instrumentation/cohere/index.js.map +1 -1
  82. package/dist/instrumentation/cohere/wrapper.d.ts +1 -1
  83. package/dist/instrumentation/cohere/wrapper.js +215 -56
  84. package/dist/instrumentation/cohere/wrapper.js.map +1 -1
  85. package/dist/instrumentation/google-adk/index.d.ts +57 -0
  86. package/dist/instrumentation/google-adk/index.js +371 -0
  87. package/dist/instrumentation/google-adk/index.js.map +1 -0
  88. package/dist/instrumentation/google-adk/utils.d.ts +45 -0
  89. package/dist/instrumentation/google-adk/utils.js +663 -0
  90. package/dist/instrumentation/google-adk/utils.js.map +1 -0
  91. package/dist/instrumentation/google-adk/wrapper.d.ts +11 -0
  92. package/dist/instrumentation/google-adk/wrapper.js +391 -0
  93. package/dist/instrumentation/google-adk/wrapper.js.map +1 -0
  94. package/dist/instrumentation/google-ai/wrapper.d.ts +7 -4
  95. package/dist/instrumentation/google-ai/wrapper.js +197 -61
  96. package/dist/instrumentation/google-ai/wrapper.js.map +1 -1
  97. package/dist/instrumentation/groq/wrapper.js +137 -65
  98. package/dist/instrumentation/groq/wrapper.js.map +1 -1
  99. package/dist/instrumentation/huggingface/wrapper.js +241 -39
  100. package/dist/instrumentation/huggingface/wrapper.js.map +1 -1
  101. package/dist/instrumentation/index.d.ts +2 -2
  102. package/dist/instrumentation/index.js +64 -6
  103. package/dist/instrumentation/index.js.map +1 -1
  104. package/dist/instrumentation/langchain/index.d.ts +0 -7
  105. package/dist/instrumentation/langchain/index.js +2 -20
  106. package/dist/instrumentation/langchain/index.js.map +1 -1
  107. package/dist/instrumentation/langchain/wrapper.d.ts +35 -0
  108. package/dist/instrumentation/langchain/wrapper.js +1098 -184
  109. package/dist/instrumentation/langchain/wrapper.js.map +1 -1
  110. package/dist/instrumentation/langgraph/index.d.ts +12 -0
  111. package/dist/instrumentation/langgraph/index.js +99 -0
  112. package/dist/instrumentation/langgraph/index.js.map +1 -0
  113. package/dist/instrumentation/langgraph/wrapper.d.ts +20 -0
  114. package/dist/instrumentation/langgraph/wrapper.js +619 -0
  115. package/dist/instrumentation/langgraph/wrapper.js.map +1 -0
  116. package/dist/instrumentation/llamaindex/index.d.ts +31 -6
  117. package/dist/instrumentation/llamaindex/index.js +180 -61
  118. package/dist/instrumentation/llamaindex/index.js.map +1 -1
  119. package/dist/instrumentation/llamaindex/wrapper.d.ts +15 -3
  120. package/dist/instrumentation/llamaindex/wrapper.js +670 -179
  121. package/dist/instrumentation/llamaindex/wrapper.js.map +1 -1
  122. package/dist/instrumentation/milvus/wrapper.js +1 -1
  123. package/dist/instrumentation/milvus/wrapper.js.map +1 -1
  124. package/dist/instrumentation/mistral/wrapper.js +154 -79
  125. package/dist/instrumentation/mistral/wrapper.js.map +1 -1
  126. package/dist/instrumentation/ollama/index.js +33 -4
  127. package/dist/instrumentation/ollama/index.js.map +1 -1
  128. package/dist/instrumentation/ollama/wrapper.d.ts +28 -2
  129. package/dist/instrumentation/ollama/wrapper.js +432 -48
  130. package/dist/instrumentation/ollama/wrapper.js.map +1 -1
  131. package/dist/instrumentation/openai/index.d.ts +2 -3
  132. package/dist/instrumentation/openai/index.js.map +1 -1
  133. package/dist/instrumentation/openai/wrapper.js +293 -194
  134. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  135. package/dist/instrumentation/openai-agents/index.d.ts +20 -0
  136. package/dist/instrumentation/openai-agents/index.js +174 -0
  137. package/dist/instrumentation/openai-agents/index.js.map +1 -0
  138. package/dist/instrumentation/openai-agents/processor.d.ts +35 -0
  139. package/dist/instrumentation/openai-agents/processor.js +249 -0
  140. package/dist/instrumentation/openai-agents/processor.js.map +1 -0
  141. package/dist/instrumentation/openai-agents/utils.d.ts +20 -0
  142. package/dist/instrumentation/openai-agents/utils.js +624 -0
  143. package/dist/instrumentation/openai-agents/utils.js.map +1 -0
  144. package/dist/instrumentation/pinecone/wrapper.js +2 -2
  145. package/dist/instrumentation/pinecone/wrapper.js.map +1 -1
  146. package/dist/instrumentation/qdrant/wrapper.js +1 -1
  147. package/dist/instrumentation/qdrant/wrapper.js.map +1 -1
  148. package/dist/instrumentation/replicate/wrapper.js +103 -21
  149. package/dist/instrumentation/replicate/wrapper.js.map +1 -1
  150. package/dist/instrumentation/strands/index.d.ts +21 -0
  151. package/dist/instrumentation/strands/index.js +83 -0
  152. package/dist/instrumentation/strands/index.js.map +1 -0
  153. package/dist/instrumentation/strands/processor.d.ts +45 -0
  154. package/dist/instrumentation/strands/processor.js +545 -0
  155. package/dist/instrumentation/strands/processor.js.map +1 -0
  156. package/dist/instrumentation/strands/utils.d.ts +24 -0
  157. package/dist/instrumentation/strands/utils.js +360 -0
  158. package/dist/instrumentation/strands/utils.js.map +1 -0
  159. package/dist/instrumentation/together/wrapper.js +125 -51
  160. package/dist/instrumentation/together/wrapper.js.map +1 -1
  161. package/dist/instrumentation/vercel-ai/wrapper.d.ts +28 -2
  162. package/dist/instrumentation/vercel-ai/wrapper.js +314 -164
  163. package/dist/instrumentation/vercel-ai/wrapper.js.map +1 -1
  164. package/dist/llm/anthropic.js +10 -6
  165. package/dist/llm/anthropic.js.map +1 -1
  166. package/dist/llm/openai.js +9 -5
  167. package/dist/llm/openai.js.map +1 -1
  168. package/dist/otel/__tests__/metrics.test.js +16 -27
  169. package/dist/otel/__tests__/metrics.test.js.map +1 -1
  170. package/dist/otel/events.d.ts +11 -0
  171. package/dist/otel/events.js +74 -0
  172. package/dist/otel/events.js.map +1 -0
  173. package/dist/otel/metrics.d.ts +5 -6
  174. package/dist/otel/metrics.js +66 -48
  175. package/dist/otel/metrics.js.map +1 -1
  176. package/dist/otel/tracing.d.ts +6 -2
  177. package/dist/otel/tracing.js +71 -24
  178. package/dist/otel/tracing.js.map +1 -1
  179. package/dist/otel/utils.d.ts +11 -0
  180. package/dist/otel/utils.js +34 -0
  181. package/dist/otel/utils.js.map +1 -0
  182. package/dist/semantic-convention.d.ts +44 -5
  183. package/dist/semantic-convention.js +51 -8
  184. package/dist/semantic-convention.js.map +1 -1
  185. package/dist/types.d.ts +58 -22
  186. package/package.json +41 -9
@@ -0,0 +1,545 @@
1
+ "use strict";
2
+ /**
3
+ * Strands Agents SpanProcessor.
4
+ *
5
+ * Enriches Strands' native OTel spans with OpenLIT-specific attributes,
6
+ * extracts content from span events into span attributes, emits
7
+ * gen_ai.client.inference.operation.details log events for chat spans,
8
+ * and records OpenLIT metrics.
9
+ *
10
+ * Provider-level chat spans (OpenAI, Anthropic, etc.) are suppressed
11
+ * when they occur inside a Strands chat span via the shared
12
+ * frameworkLlmActive flag.
13
+ *
14
+ * Mirrors: sdk/python/src/openlit/instrumentation/strands/processor.py
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.StrandsSpanProcessor = void 0;
54
+ const api_1 = require("@opentelemetry/api");
55
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
56
+ const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
57
+ const config_1 = __importDefault(require("../../config"));
58
+ const helpers_1 = __importStar(require("../../helpers"));
59
+ const utils_1 = require("./utils");
60
+ const STRANDS_TRACER_SCOPES = new Set([
61
+ 'strands.telemetry.tracer',
62
+ 'strands-agents',
63
+ ]);
64
+ /**
65
+ * Enriches Strands-generated spans with OpenLIT telemetry.
66
+ * Added to the TracerProvider so it receives all spans; non-Strands
67
+ * spans are ignored via the _isStrandsSpan() check.
68
+ */
69
+ class StrandsSpanProcessor {
70
+ constructor(strandsVersion = 'unknown') {
71
+ this._chatSpanIds = new Set();
72
+ this._chatInfo = new Map();
73
+ this._strandsVersion = strandsVersion;
74
+ }
75
+ // -----------------------------------------------------------------
76
+ // Span detection
77
+ // -----------------------------------------------------------------
78
+ static _isStrandsSpan(span) {
79
+ const scope = span.instrumentationLibrary;
80
+ if (scope && STRANDS_TRACER_SCOPES.has(scope.name)) {
81
+ return true;
82
+ }
83
+ const attrs = span.attributes || {};
84
+ const system = attrs['gen_ai.system'] || '';
85
+ const provider = attrs['gen_ai.provider.name'] || '';
86
+ return (system === semantic_convention_1.default.GEN_AI_SYSTEM_STRANDS ||
87
+ system === 'strands-agents' ||
88
+ provider === semantic_convention_1.default.GEN_AI_SYSTEM_STRANDS ||
89
+ provider === 'strands-agents');
90
+ }
91
+ // -----------------------------------------------------------------
92
+ // Attribute mutation helpers (span is read-only after onEnd)
93
+ // -----------------------------------------------------------------
94
+ static _setAttr(span, key, value) {
95
+ try {
96
+ if (span.attributes) {
97
+ span.attributes[key] = value;
98
+ }
99
+ }
100
+ catch {
101
+ // ignore
102
+ }
103
+ }
104
+ static _setAttrs(span, mapping) {
105
+ try {
106
+ if (span.attributes) {
107
+ Object.assign(span.attributes, mapping);
108
+ }
109
+ }
110
+ catch {
111
+ // ignore
112
+ }
113
+ }
114
+ static _setSpanName(span, name) {
115
+ try {
116
+ if ('_name' in span)
117
+ span._name = name;
118
+ if ('name' in span)
119
+ span.name = name;
120
+ }
121
+ catch {
122
+ // ignore
123
+ }
124
+ }
125
+ // -----------------------------------------------------------------
126
+ // SpanProcessor API
127
+ // -----------------------------------------------------------------
128
+ onStart(span, _parentContext) {
129
+ if (!StrandsSpanProcessor._isStrandsSpan(span))
130
+ return;
131
+ try {
132
+ span.setAttribute(semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME, 'openlit');
133
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SDK_VERSION, this._strandsVersion);
134
+ span.setAttribute(semantic_convention_1.default.ATTR_DEPLOYMENT_ENVIRONMENT, config_1.default.environment || 'default');
135
+ span.setAttribute(semantic_conventions_1.ATTR_SERVICE_NAME, config_1.default.applicationName || 'default');
136
+ (0, helpers_1.applyCustomSpanAttributes)(span);
137
+ }
138
+ catch {
139
+ // ignore
140
+ }
141
+ const spanName = span.name || '';
142
+ if (spanName === 'chat') {
143
+ try {
144
+ span._kind = api_1.SpanKind.CLIENT;
145
+ }
146
+ catch {
147
+ // ignore
148
+ }
149
+ try {
150
+ (0, helpers_1.setFrameworkLlmActive)();
151
+ const spanId = span.spanContext().spanId;
152
+ this._chatSpanIds.add(spanId);
153
+ }
154
+ catch {
155
+ // ignore
156
+ }
157
+ }
158
+ }
159
+ onEnd(span) {
160
+ if (!StrandsSpanProcessor._isStrandsSpan(span))
161
+ return;
162
+ const spanId = span.spanContext().spanId;
163
+ if (this._chatSpanIds.has(spanId)) {
164
+ this._chatSpanIds.delete(spanId);
165
+ try {
166
+ (0, helpers_1.resetFrameworkLlmActive)();
167
+ }
168
+ catch {
169
+ // ignore
170
+ }
171
+ }
172
+ try {
173
+ this._processSpan(span);
174
+ }
175
+ catch {
176
+ // ignore
177
+ }
178
+ }
179
+ shutdown() {
180
+ return Promise.resolve();
181
+ }
182
+ forceFlush() {
183
+ return Promise.resolve();
184
+ }
185
+ // -----------------------------------------------------------------
186
+ // Core processing (mirrors Python _process_span)
187
+ // -----------------------------------------------------------------
188
+ _processSpan(span) {
189
+ const attrs = span.attributes || {};
190
+ let operation = String(attrs[semantic_convention_1.default.GEN_AI_OPERATION] || '');
191
+ // Normalize agent id: agent_name-span_id_hex
192
+ const agentName = attrs[semantic_convention_1.default.GEN_AI_AGENT_NAME];
193
+ if (agentName && !attrs[semantic_convention_1.default.GEN_AI_AGENT_ID]) {
194
+ const spanIdHex = span.spanContext().spanId;
195
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_AGENT_ID, `${agentName}-${spanIdHex}`);
196
+ }
197
+ // Normalize gen_ai.system → gen_ai.provider.name
198
+ const genAiSystem = String(attrs['gen_ai.system'] || '');
199
+ if (genAiSystem && !attrs[semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]) {
200
+ const provider = genAiSystem === 'strands-agents' || genAiSystem === 'strands_agents'
201
+ ? semantic_convention_1.default.GEN_AI_SYSTEM_STRANDS
202
+ : genAiSystem;
203
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL, provider);
204
+ }
205
+ // Normalize Strands-native cache token keys → OTel standard keys
206
+ const cacheKeyMap = [
207
+ ['gen_ai.usage.cache_read_input_tokens', semantic_convention_1.default.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS],
208
+ ['gen_ai.usage.cache_write_input_tokens', semantic_convention_1.default.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS],
209
+ ];
210
+ for (const [strandsKey, otelKey] of cacheKeyMap) {
211
+ const val = attrs[strandsKey];
212
+ if (val != null && !attrs[otelKey]) {
213
+ StrandsSpanProcessor._setAttr(span, otelKey, val);
214
+ }
215
+ }
216
+ // Remap Strands-native system_prompt → gen_ai.system_instructions
217
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT) {
218
+ const systemPrompt = attrs['system_prompt'];
219
+ if (systemPrompt && !attrs[semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS]) {
220
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS, systemPrompt);
221
+ }
222
+ }
223
+ // Duration (HrTime → seconds)
224
+ let duration = 0;
225
+ if (span.endTime && span.startTime) {
226
+ const endNs = span.endTime[0] * 1e9 + span.endTime[1];
227
+ const startNs = span.startTime[0] * 1e9 + span.startTime[1];
228
+ duration = (endNs - startNs) / 1e9;
229
+ }
230
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, duration);
231
+ // Server address / port (inferred from model name)
232
+ const modelName = String(attrs[semantic_convention_1.default.GEN_AI_REQUEST_MODEL] || '');
233
+ let serverAddress = String(attrs[semantic_convention_1.default.SERVER_ADDRESS] || '');
234
+ let serverPort = Number(attrs[semantic_convention_1.default.SERVER_PORT] || 0);
235
+ if (!serverAddress && modelName) {
236
+ [serverAddress, serverPort] = (0, utils_1.inferServerAddress)(modelName);
237
+ if (serverAddress) {
238
+ StrandsSpanProcessor._setAttrs(span, {
239
+ [semantic_convention_1.default.SERVER_ADDRESS]: serverAddress,
240
+ [semantic_convention_1.default.SERVER_PORT]: serverPort,
241
+ });
242
+ }
243
+ }
244
+ // Normalize multi-agent operation names to invoke_workflow
245
+ if (operation === 'invoke_swarm' || operation === 'invoke_graph') {
246
+ const workflowName = String(attrs[semantic_convention_1.default.GEN_AI_AGENT_NAME] || '');
247
+ StrandsSpanProcessor._setAttrs(span, {
248
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK,
249
+ [semantic_convention_1.default.GEN_AI_WORKFLOW_NAME]: workflowName,
250
+ });
251
+ operation = semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK;
252
+ }
253
+ // Output type for agent / workflow spans
254
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT ||
255
+ operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK) {
256
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
257
+ }
258
+ // Tool type and tool call id
259
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS) {
260
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_TOOL_TYPE, 'function');
261
+ if (!attrs[semantic_convention_1.default.GEN_AI_TOOL_CALL_ID]) {
262
+ const tid = attrs['tool_use_id'] ||
263
+ attrs['toolUseId'] ||
264
+ attrs['gen_ai.tool.call.id'] ||
265
+ StrandsSpanProcessor._extractToolCallIdFromSpanEvents(span);
266
+ if (tid) {
267
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.GEN_AI_TOOL_CALL_ID, String(tid));
268
+ }
269
+ }
270
+ }
271
+ // OTel-compliant span names
272
+ this._setOtelCompliantSpanName(span, operation);
273
+ // Chat span enrichment: match provider span attributes
274
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT) {
275
+ this._enrichChatSpan(span, attrs, modelName);
276
+ this._storeChatInfoForParent(span, modelName);
277
+ }
278
+ // Propagate recommended attrs from child chat spans to invoke_agent
279
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT) {
280
+ this._enrichAgentFromChildren(span);
281
+ }
282
+ // Content capture: extract from events → span attributes
283
+ if (config_1.default.captureMessageContent) {
284
+ this._extractAndSetContent(span, operation);
285
+ }
286
+ // Emit inference log event for chat spans
287
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT) {
288
+ this._emitChatInferenceEvent(span, attrs, serverAddress, serverPort);
289
+ }
290
+ // Record OpenLIT metrics
291
+ if (!config_1.default.disableMetrics && operation) {
292
+ (0, utils_1.recordStrandsMetrics)(operation, duration, modelName, serverAddress, serverPort);
293
+ }
294
+ // Set error type if missing (low-cardinality per OTel spec)
295
+ if (span.status && span.status.code === api_1.SpanStatusCode.ERROR) {
296
+ const currentAttrs = span.attributes || {};
297
+ if (!currentAttrs[semantic_convention_1.default.ERROR_TYPE]) {
298
+ StrandsSpanProcessor._setAttr(span, semantic_convention_1.default.ERROR_TYPE, '_OTHER');
299
+ }
300
+ }
301
+ }
302
+ // -----------------------------------------------------------------
303
+ // OTel-compliant span naming
304
+ // -----------------------------------------------------------------
305
+ _setOtelCompliantSpanName(span, operation) {
306
+ if (operation !== semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT &&
307
+ operation !== semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS &&
308
+ operation !== semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK) {
309
+ return;
310
+ }
311
+ try {
312
+ const attrs = span.attributes || {};
313
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT) {
314
+ const name = attrs[semantic_convention_1.default.GEN_AI_AGENT_NAME];
315
+ if (name)
316
+ StrandsSpanProcessor._setSpanName(span, `invoke_agent ${name}`);
317
+ }
318
+ else if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS) {
319
+ const name = attrs[semantic_convention_1.default.GEN_AI_TOOL_NAME];
320
+ if (name)
321
+ StrandsSpanProcessor._setSpanName(span, `execute_tool ${name}`);
322
+ }
323
+ else if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK) {
324
+ const name = attrs[semantic_convention_1.default.GEN_AI_WORKFLOW_NAME];
325
+ if (name)
326
+ StrandsSpanProcessor._setSpanName(span, `invoke_workflow ${name}`);
327
+ }
328
+ }
329
+ catch {
330
+ // ignore
331
+ }
332
+ }
333
+ // -----------------------------------------------------------------
334
+ // Chat span enrichment (parity with provider spans)
335
+ // -----------------------------------------------------------------
336
+ _enrichChatSpan(span, attrs, modelName) {
337
+ const enrichments = {};
338
+ // Span name: "chat" → "chat {model}"
339
+ if (modelName) {
340
+ StrandsSpanProcessor._setSpanName(span, `chat ${modelName}`);
341
+ }
342
+ // Override gen_ai.provider.name with actual provider for chat spans
343
+ const provider = modelName ? (0, utils_1.inferProviderName)(modelName) : '';
344
+ if (provider) {
345
+ enrichments[semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL] = provider;
346
+ }
347
+ // response.model: fall back to request model
348
+ if (!attrs[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL] && modelName) {
349
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL] = modelName;
350
+ }
351
+ // response.id: extract from events
352
+ if (!attrs[semantic_convention_1.default.GEN_AI_RESPONSE_ID]) {
353
+ const responseId = StrandsSpanProcessor._extractResponseId(span);
354
+ if (responseId) {
355
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_ID] = responseId;
356
+ }
357
+ }
358
+ // Finish reasons from output events
359
+ const [, outputMsgs] = (0, utils_1.extractContentFromEvents)(span, 'chat');
360
+ if (outputMsgs && outputMsgs.length > 0) {
361
+ const finishReasons = outputMsgs
362
+ .filter((m) => typeof m === 'object' && m.finish_reason)
363
+ .map((m) => m.finish_reason);
364
+ if (finishReasons.length > 0) {
365
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON] = finishReasons;
366
+ }
367
+ }
368
+ enrichments[semantic_convention_1.default.GEN_AI_OUTPUT_TYPE] = semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT;
369
+ // Token totals and cost
370
+ const inputTokens = Number(attrs['gen_ai.usage.input_tokens'] || 0);
371
+ const outputTokens = Number(attrs['gen_ai.usage.output_tokens'] || 0);
372
+ if (inputTokens || outputTokens) {
373
+ enrichments[semantic_convention_1.default.GEN_AI_CLIENT_TOKEN_USAGE] = inputTokens + outputTokens;
374
+ }
375
+ if (config_1.default.pricingInfo && modelName) {
376
+ const cost = helpers_1.default.getChatModelCost(modelName, config_1.default.pricingInfo, inputTokens, outputTokens);
377
+ enrichments[semantic_convention_1.default.GEN_AI_USAGE_COST] = cost;
378
+ }
379
+ if (Object.keys(enrichments).length > 0) {
380
+ StrandsSpanProcessor._setAttrs(span, enrichments);
381
+ }
382
+ }
383
+ _storeChatInfoForParent(span, modelName) {
384
+ try {
385
+ const parentId = span.parentSpanId;
386
+ if (!parentId)
387
+ return;
388
+ const finalAttrs = span.attributes || {};
389
+ const info = {
390
+ responseModel: finalAttrs[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL] || modelName,
391
+ responseId: finalAttrs[semantic_convention_1.default.GEN_AI_RESPONSE_ID],
392
+ finishReasons: finalAttrs[semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON],
393
+ inputTokens: finalAttrs['gen_ai.usage.input_tokens'] || 0,
394
+ outputTokens: finalAttrs['gen_ai.usage.output_tokens'] || 0,
395
+ };
396
+ this._chatInfo.set(parentId, info);
397
+ }
398
+ catch {
399
+ // ignore
400
+ }
401
+ }
402
+ _enrichAgentFromChildren(span) {
403
+ try {
404
+ const spanId = span.spanContext().spanId;
405
+ const info = this._chatInfo.get(spanId);
406
+ this._chatInfo.delete(spanId);
407
+ if (!info)
408
+ return;
409
+ const enrichments = {};
410
+ const current = span.attributes || {};
411
+ if (info.responseModel && !current[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL]) {
412
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL] = info.responseModel;
413
+ }
414
+ if (info.responseId && !current[semantic_convention_1.default.GEN_AI_RESPONSE_ID]) {
415
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_ID] = info.responseId;
416
+ }
417
+ if (info.finishReasons && !current[semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON]) {
418
+ enrichments[semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON] = info.finishReasons;
419
+ }
420
+ if (Object.keys(enrichments).length > 0) {
421
+ StrandsSpanProcessor._setAttrs(span, enrichments);
422
+ }
423
+ }
424
+ catch {
425
+ // ignore
426
+ }
427
+ }
428
+ // -----------------------------------------------------------------
429
+ // Static extraction helpers
430
+ // -----------------------------------------------------------------
431
+ static _extractResponseId(span) {
432
+ for (const event of span.events || []) {
433
+ const ea = event.attributes || {};
434
+ const rid = ea['gen_ai.response.id'] || ea['response_id'];
435
+ if (rid)
436
+ return String(rid);
437
+ }
438
+ return '';
439
+ }
440
+ static _extractToolCallIdFromSpanEvents(span) {
441
+ for (const event of span.events || []) {
442
+ if (event.name === 'gen_ai.tool.message') {
443
+ const ea = event.attributes || {};
444
+ const tid = ea['id'] || ea[semantic_convention_1.default.GEN_AI_TOOL_CALL_ID];
445
+ if (tid)
446
+ return String(tid);
447
+ }
448
+ }
449
+ for (const event of span.events || []) {
450
+ const ea = event.attributes || {};
451
+ const tid = ea[semantic_convention_1.default.GEN_AI_TOOL_CALL_ID] ||
452
+ ea['tool_use_id'] ||
453
+ ea['toolUseId'] ||
454
+ ea['gen_ai.tool.call.id'];
455
+ if (tid)
456
+ return String(tid);
457
+ }
458
+ return null;
459
+ }
460
+ // -----------------------------------------------------------------
461
+ // Content extraction → span attributes
462
+ // -----------------------------------------------------------------
463
+ _extractAndSetContent(span, operation) {
464
+ try {
465
+ const [inputMsgs, outputMsgs, systemInstr] = (0, utils_1.extractContentFromEvents)(span, operation);
466
+ const additions = {};
467
+ if (operation === semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS) {
468
+ if (inputMsgs.length > 0) {
469
+ const first = inputMsgs[0];
470
+ const parts = (typeof first === 'object' && first.parts) ? first.parts : [];
471
+ if (parts.length > 0) {
472
+ const arguments_ = parts[0].arguments || parts[0].response || '';
473
+ additions[semantic_convention_1.default.GEN_AI_TOOL_CALL_ARGUMENTS] = (0, utils_1.truncateContent)(typeof arguments_ === 'string' ? arguments_ : JSON.stringify(arguments_));
474
+ }
475
+ }
476
+ if (outputMsgs.length > 0) {
477
+ additions[semantic_convention_1.default.GEN_AI_TOOL_CALL_RESULT] = (0, utils_1.truncateContent)(JSON.stringify(outputMsgs));
478
+ }
479
+ }
480
+ else {
481
+ if (inputMsgs.length > 0) {
482
+ (0, utils_1.truncateMessageContent)(inputMsgs);
483
+ additions[semantic_convention_1.default.GEN_AI_INPUT_MESSAGES] = JSON.stringify(inputMsgs);
484
+ }
485
+ if (outputMsgs.length > 0) {
486
+ (0, utils_1.truncateMessageContent)(outputMsgs);
487
+ additions[semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES] = JSON.stringify(outputMsgs);
488
+ }
489
+ if (systemInstr) {
490
+ additions[semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS] = (0, utils_1.truncateContent)(String(systemInstr));
491
+ }
492
+ }
493
+ if (Object.keys(additions).length > 0) {
494
+ StrandsSpanProcessor._setAttrs(span, additions);
495
+ }
496
+ }
497
+ catch {
498
+ // ignore
499
+ }
500
+ }
501
+ // -----------------------------------------------------------------
502
+ // Chat inference log event
503
+ // -----------------------------------------------------------------
504
+ _emitChatInferenceEvent(span, attrs, serverAddress, serverPort) {
505
+ try {
506
+ const [inputMsgs, outputMsgs, systemInstr] = (0, utils_1.extractContentFromEvents)(span, 'chat');
507
+ const extra = {};
508
+ const inputTokens = attrs['gen_ai.usage.input_tokens'];
509
+ const outputTokens = attrs['gen_ai.usage.output_tokens'];
510
+ if (inputTokens != null)
511
+ extra.inputTokens = inputTokens;
512
+ if (outputTokens != null)
513
+ extra.outputTokens = outputTokens;
514
+ const cacheRead = attrs[semantic_convention_1.default.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] ||
515
+ attrs['gen_ai.usage.cache_read_input_tokens'];
516
+ const cacheWrite = attrs[semantic_convention_1.default.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] ||
517
+ attrs['gen_ai.usage.cache_write_input_tokens'];
518
+ if (cacheRead != null)
519
+ extra.cacheReadInputTokens = cacheRead;
520
+ if (cacheWrite != null)
521
+ extra.cacheCreationInputTokens = cacheWrite;
522
+ const responseId = attrs[semantic_convention_1.default.GEN_AI_RESPONSE_ID] ||
523
+ StrandsSpanProcessor._extractResponseId(span);
524
+ if (responseId)
525
+ extra.responseId = responseId;
526
+ if (systemInstr)
527
+ extra.systemInstructions = systemInstr;
528
+ if (outputMsgs.length > 0) {
529
+ const finishReasons = outputMsgs
530
+ .filter((m) => typeof m === 'object' && m.finish_reason)
531
+ .map((m) => m.finish_reason);
532
+ if (finishReasons.length > 0)
533
+ extra.finishReasons = finishReasons;
534
+ }
535
+ extra.inputMessages = inputMsgs;
536
+ extra.outputMessages = outputMsgs;
537
+ (0, utils_1.emitStrandsInferenceEvent)(span, String(attrs[semantic_convention_1.default.GEN_AI_REQUEST_MODEL] || ''), serverAddress, serverPort, extra);
538
+ }
539
+ catch {
540
+ // ignore
541
+ }
542
+ }
543
+ }
544
+ exports.StrandsSpanProcessor = StrandsSpanProcessor;
545
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/instrumentation/strands/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Strands Agents instrumentation utilities.
3
+ *
4
+ * Provides model-to-provider mapping, server address inference, content
5
+ * extraction from Strands native span events, inference event emission,
6
+ * and metrics recording.
7
+ *
8
+ * Mirrors: sdk/python/src/openlit/instrumentation/strands/utils.py
9
+ */
10
+ export declare function inferServerAddress(modelName: string): [string, number];
11
+ export declare function inferProviderName(modelName: string): string;
12
+ /**
13
+ * Extract message content from Strands span events.
14
+ *
15
+ * Handles both legacy named events (gen_ai.user.message, gen_ai.choice, etc.)
16
+ * and the gen_ai.client.inference.operation.details event convention.
17
+ *
18
+ * Returns [inputMessages, outputMessages, systemInstructions].
19
+ */
20
+ export declare function extractContentFromEvents(span: any, operation: string): [any[], any[], string | null];
21
+ export declare function truncateContent(content: string): string;
22
+ export declare function truncateMessageContent(messages: any[]): void;
23
+ export declare function recordStrandsMetrics(operation: string, duration: number, modelName: string, serverAddress: string, serverPort: number): void;
24
+ export declare function emitStrandsInferenceEvent(span: any, requestModel: string, serverAddress: string, serverPort: number, extra?: Record<string, any>): void;