openlit 1.11.0 → 1.13.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 (192) 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 +271 -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/cursor-sdk/index.d.ts +21 -0
  86. package/dist/instrumentation/cursor-sdk/index.js +58 -0
  87. package/dist/instrumentation/cursor-sdk/index.js.map +1 -0
  88. package/dist/instrumentation/cursor-sdk/wrapper.d.ts +17 -0
  89. package/dist/instrumentation/cursor-sdk/wrapper.js +689 -0
  90. package/dist/instrumentation/cursor-sdk/wrapper.js.map +1 -0
  91. package/dist/instrumentation/google-adk/index.d.ts +57 -0
  92. package/dist/instrumentation/google-adk/index.js +371 -0
  93. package/dist/instrumentation/google-adk/index.js.map +1 -0
  94. package/dist/instrumentation/google-adk/utils.d.ts +45 -0
  95. package/dist/instrumentation/google-adk/utils.js +663 -0
  96. package/dist/instrumentation/google-adk/utils.js.map +1 -0
  97. package/dist/instrumentation/google-adk/wrapper.d.ts +11 -0
  98. package/dist/instrumentation/google-adk/wrapper.js +391 -0
  99. package/dist/instrumentation/google-adk/wrapper.js.map +1 -0
  100. package/dist/instrumentation/google-ai/wrapper.d.ts +7 -4
  101. package/dist/instrumentation/google-ai/wrapper.js +197 -61
  102. package/dist/instrumentation/google-ai/wrapper.js.map +1 -1
  103. package/dist/instrumentation/groq/wrapper.js +137 -65
  104. package/dist/instrumentation/groq/wrapper.js.map +1 -1
  105. package/dist/instrumentation/huggingface/wrapper.js +241 -39
  106. package/dist/instrumentation/huggingface/wrapper.js.map +1 -1
  107. package/dist/instrumentation/index.d.ts +2 -2
  108. package/dist/instrumentation/index.js +66 -6
  109. package/dist/instrumentation/index.js.map +1 -1
  110. package/dist/instrumentation/langchain/index.d.ts +0 -7
  111. package/dist/instrumentation/langchain/index.js +2 -20
  112. package/dist/instrumentation/langchain/index.js.map +1 -1
  113. package/dist/instrumentation/langchain/wrapper.d.ts +35 -0
  114. package/dist/instrumentation/langchain/wrapper.js +1098 -184
  115. package/dist/instrumentation/langchain/wrapper.js.map +1 -1
  116. package/dist/instrumentation/langgraph/index.d.ts +12 -0
  117. package/dist/instrumentation/langgraph/index.js +99 -0
  118. package/dist/instrumentation/langgraph/index.js.map +1 -0
  119. package/dist/instrumentation/langgraph/wrapper.d.ts +20 -0
  120. package/dist/instrumentation/langgraph/wrapper.js +619 -0
  121. package/dist/instrumentation/langgraph/wrapper.js.map +1 -0
  122. package/dist/instrumentation/llamaindex/index.d.ts +31 -6
  123. package/dist/instrumentation/llamaindex/index.js +180 -61
  124. package/dist/instrumentation/llamaindex/index.js.map +1 -1
  125. package/dist/instrumentation/llamaindex/wrapper.d.ts +15 -3
  126. package/dist/instrumentation/llamaindex/wrapper.js +670 -179
  127. package/dist/instrumentation/llamaindex/wrapper.js.map +1 -1
  128. package/dist/instrumentation/milvus/wrapper.js +1 -1
  129. package/dist/instrumentation/milvus/wrapper.js.map +1 -1
  130. package/dist/instrumentation/mistral/wrapper.js +154 -79
  131. package/dist/instrumentation/mistral/wrapper.js.map +1 -1
  132. package/dist/instrumentation/ollama/index.js +33 -4
  133. package/dist/instrumentation/ollama/index.js.map +1 -1
  134. package/dist/instrumentation/ollama/wrapper.d.ts +28 -2
  135. package/dist/instrumentation/ollama/wrapper.js +432 -48
  136. package/dist/instrumentation/ollama/wrapper.js.map +1 -1
  137. package/dist/instrumentation/openai/index.d.ts +2 -3
  138. package/dist/instrumentation/openai/index.js.map +1 -1
  139. package/dist/instrumentation/openai/wrapper.js +293 -194
  140. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  141. package/dist/instrumentation/openai-agents/index.d.ts +20 -0
  142. package/dist/instrumentation/openai-agents/index.js +174 -0
  143. package/dist/instrumentation/openai-agents/index.js.map +1 -0
  144. package/dist/instrumentation/openai-agents/processor.d.ts +35 -0
  145. package/dist/instrumentation/openai-agents/processor.js +249 -0
  146. package/dist/instrumentation/openai-agents/processor.js.map +1 -0
  147. package/dist/instrumentation/openai-agents/utils.d.ts +20 -0
  148. package/dist/instrumentation/openai-agents/utils.js +624 -0
  149. package/dist/instrumentation/openai-agents/utils.js.map +1 -0
  150. package/dist/instrumentation/pinecone/wrapper.js +2 -2
  151. package/dist/instrumentation/pinecone/wrapper.js.map +1 -1
  152. package/dist/instrumentation/qdrant/wrapper.js +1 -1
  153. package/dist/instrumentation/qdrant/wrapper.js.map +1 -1
  154. package/dist/instrumentation/replicate/wrapper.js +103 -21
  155. package/dist/instrumentation/replicate/wrapper.js.map +1 -1
  156. package/dist/instrumentation/strands/index.d.ts +21 -0
  157. package/dist/instrumentation/strands/index.js +83 -0
  158. package/dist/instrumentation/strands/index.js.map +1 -0
  159. package/dist/instrumentation/strands/processor.d.ts +45 -0
  160. package/dist/instrumentation/strands/processor.js +545 -0
  161. package/dist/instrumentation/strands/processor.js.map +1 -0
  162. package/dist/instrumentation/strands/utils.d.ts +24 -0
  163. package/dist/instrumentation/strands/utils.js +360 -0
  164. package/dist/instrumentation/strands/utils.js.map +1 -0
  165. package/dist/instrumentation/together/wrapper.js +125 -51
  166. package/dist/instrumentation/together/wrapper.js.map +1 -1
  167. package/dist/instrumentation/vercel-ai/wrapper.d.ts +28 -2
  168. package/dist/instrumentation/vercel-ai/wrapper.js +314 -164
  169. package/dist/instrumentation/vercel-ai/wrapper.js.map +1 -1
  170. package/dist/llm/anthropic.js +10 -6
  171. package/dist/llm/anthropic.js.map +1 -1
  172. package/dist/llm/openai.js +9 -5
  173. package/dist/llm/openai.js.map +1 -1
  174. package/dist/otel/__tests__/metrics.test.js +16 -27
  175. package/dist/otel/__tests__/metrics.test.js.map +1 -1
  176. package/dist/otel/events.d.ts +11 -0
  177. package/dist/otel/events.js +74 -0
  178. package/dist/otel/events.js.map +1 -0
  179. package/dist/otel/metrics.d.ts +5 -6
  180. package/dist/otel/metrics.js +66 -48
  181. package/dist/otel/metrics.js.map +1 -1
  182. package/dist/otel/tracing.d.ts +6 -2
  183. package/dist/otel/tracing.js +71 -24
  184. package/dist/otel/tracing.js.map +1 -1
  185. package/dist/otel/utils.d.ts +11 -0
  186. package/dist/otel/utils.js +34 -0
  187. package/dist/otel/utils.js.map +1 -0
  188. package/dist/semantic-convention.d.ts +49 -5
  189. package/dist/semantic-convention.js +56 -8
  190. package/dist/semantic-convention.js.map +1 -1
  191. package/dist/types.d.ts +58 -22
  192. package/package.json +41 -9
@@ -0,0 +1,624 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Agents utilities for OTel GenAI semantic convention compliant telemetry.
4
+ *
5
+ * Maps SDK span types to OTel operation names, determines SpanKind,
6
+ * generates span names, and sets type-specific attributes on OTel spans.
7
+ *
8
+ * All attribute setting happens at on_span_end (when span data is fully
9
+ * populated), matching the Python SDK pattern.
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getOperationType = getOperationType;
16
+ exports.getSpanKind = getSpanKind;
17
+ exports.generateSpanName = generateSpanName;
18
+ exports.processSpanEnd = processSpanEnd;
19
+ exports.recordMetrics = recordMetrics;
20
+ exports.extractModelFromSpanData = extractModelFromSpanData;
21
+ const api_1 = require("@opentelemetry/api");
22
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
23
+ const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
24
+ const constant_1 = require("../../constant");
25
+ const config_1 = __importDefault(require("../../config"));
26
+ const metrics_1 = __importDefault(require("../../otel/metrics"));
27
+ const helpers_1 = require("../../helpers");
28
+ const [OPENAI_SERVER_ADDRESS, OPENAI_SERVER_PORT] = (0, helpers_1.getServerAddressForProvider)('openai');
29
+ // SDK span_data.type -> gen_ai.operation.name
30
+ const OPERATION_MAP = {
31
+ agent: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
32
+ generation: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT,
33
+ response: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT,
34
+ function: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS,
35
+ handoff: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
36
+ guardrail: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
37
+ custom: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
38
+ transcription: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT,
39
+ speech: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT,
40
+ speech_group: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK,
41
+ mcp_tools: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS,
42
+ };
43
+ // SpanKind per operation (OTel GenAI spec)
44
+ const SPAN_KIND_MAP = {
45
+ [semantic_convention_1.default.GEN_AI_OPERATION_TYPE_FRAMEWORK]: api_1.SpanKind.INTERNAL,
46
+ [semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT]: api_1.SpanKind.INTERNAL,
47
+ [semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS]: api_1.SpanKind.INTERNAL,
48
+ [semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CHAT]: api_1.SpanKind.CLIENT,
49
+ };
50
+ const MAX_HANDOFFS = 1000;
51
+ function getOperationType(spanType) {
52
+ return OPERATION_MAP[spanType] ?? semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT;
53
+ }
54
+ function getSpanKind(operationType) {
55
+ return SPAN_KIND_MAP[operationType] ?? api_1.SpanKind.INTERNAL;
56
+ }
57
+ function generateSpanName(spanData) {
58
+ const spanType = spanData?.type ?? 'unknown';
59
+ const operation = getOperationType(spanType);
60
+ if (spanType === 'agent') {
61
+ const name = spanData.name ?? 'agent';
62
+ return `${operation} ${name}`;
63
+ }
64
+ if (spanType === 'generation' || spanType === 'response') {
65
+ const model = extractModelFromSpanData(spanData);
66
+ return model ? `${operation} ${model}` : operation;
67
+ }
68
+ if (spanType === 'function') {
69
+ const name = spanData.name ?? 'function';
70
+ return `${operation} ${name}`;
71
+ }
72
+ if (spanType === 'handoff') {
73
+ const toAgent = spanData.toAgent ?? spanData.to_agent ?? 'unknown';
74
+ return `${operation} ${toAgent}`;
75
+ }
76
+ if (spanType === 'guardrail') {
77
+ const name = spanData.name ?? 'guardrail';
78
+ return `${operation} ${name}`;
79
+ }
80
+ if (spanType === 'mcp_tools') {
81
+ return `${operation} mcp_list_tools`;
82
+ }
83
+ if (spanType === 'transcription')
84
+ return `${operation} transcription`;
85
+ if (spanType === 'speech')
86
+ return `${operation} speech`;
87
+ if (spanType === 'speech_group')
88
+ return `${operation} speech_group`;
89
+ if (spanType === 'custom') {
90
+ const name = spanData.name ?? 'custom';
91
+ return `${operation} ${name}`;
92
+ }
93
+ return operation;
94
+ }
95
+ /**
96
+ * Set all OTel-compliant attributes on the OTel span using fully-populated SDK data.
97
+ * Called from on_span_end in the processor.
98
+ */
99
+ function processSpanEnd(otelSpan, sdkSpan, startTime, conversationId, handoffTracker) {
100
+ try {
101
+ const endTime = Date.now();
102
+ const spanData = sdkSpan.spanData;
103
+ const spanType = spanData?.type ?? 'unknown';
104
+ const operation = getOperationType(spanType);
105
+ const modelName = extractModelFromSpanData(spanData);
106
+ const updatedName = generateSpanName(spanData);
107
+ try {
108
+ otelSpan.updateName(updatedName);
109
+ }
110
+ catch {
111
+ // updateName may not be available on all span implementations
112
+ }
113
+ setCommonFrameworkAttributes(otelSpan, operation, modelName, endTime - startTime);
114
+ otelSpan.setAttribute(semantic_convention_1.default.GEN_AI_OPERATION, operation);
115
+ otelSpan.setAttribute(semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL, semantic_convention_1.default.GEN_AI_SYSTEM_OPENAI);
116
+ if (conversationId) {
117
+ otelSpan.setAttribute(semantic_convention_1.default.GEN_AI_CONVERSATION_ID, conversationId);
118
+ }
119
+ if (modelName) {
120
+ otelSpan.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, modelName);
121
+ }
122
+ // Dispatch to type-specific handler
123
+ const captureContent = config_1.default.captureMessageContent ?? true;
124
+ if (spanType === 'agent') {
125
+ setAgentAttributes(otelSpan, spanData, captureContent);
126
+ }
127
+ else if (spanType === 'response') {
128
+ setResponseAttributes(otelSpan, spanData, captureContent);
129
+ }
130
+ else if (spanType === 'generation') {
131
+ setGenerationAttributes(otelSpan, spanData, captureContent);
132
+ }
133
+ else if (spanType === 'function') {
134
+ setFunctionAttributes(otelSpan, spanData, captureContent);
135
+ }
136
+ else if (spanType === 'handoff') {
137
+ setHandoffAttributes(otelSpan, spanData, handoffTracker, sdkSpan.traceId ?? '');
138
+ }
139
+ else if (spanType === 'guardrail') {
140
+ setGuardrailAttributes(otelSpan, spanData);
141
+ }
142
+ else if (spanType === 'transcription') {
143
+ setTranscriptionAttributes(otelSpan, spanData, captureContent);
144
+ }
145
+ else if (spanType === 'speech') {
146
+ setSpeechAttributes(otelSpan, spanData, captureContent);
147
+ }
148
+ else if (spanType === 'mcp_tools') {
149
+ setMcpToolsAttributes(otelSpan, spanData);
150
+ }
151
+ else if (spanType === 'custom') {
152
+ setCustomAttributes(otelSpan, spanData);
153
+ }
154
+ // Error handling
155
+ const error = sdkSpan.error;
156
+ if (error) {
157
+ const errorType = typeof error === 'object' && error !== null
158
+ ? error.constructor?.name || error.code || '_OTHER'
159
+ : '_OTHER';
160
+ const errorMsg = typeof error === 'object' && error !== null
161
+ ? error.message ?? String(error)
162
+ : String(error);
163
+ otelSpan.setAttribute(semantic_convention_1.default.ERROR_TYPE, errorType);
164
+ otelSpan.setStatus({ code: api_1.SpanStatusCode.ERROR, message: errorMsg });
165
+ }
166
+ else {
167
+ otelSpan.setStatus({ code: api_1.SpanStatusCode.OK });
168
+ }
169
+ // Metrics
170
+ if (!config_1.default.disableMetrics) {
171
+ recordMetrics(operation, (endTime - startTime) / 1000, modelName);
172
+ }
173
+ }
174
+ catch {
175
+ // Swallow to avoid breaking the agent run
176
+ }
177
+ }
178
+ // ---------------------------------------------------------------------------
179
+ // Common framework span attributes (mirrors Python common_framework_span_attributes)
180
+ // ---------------------------------------------------------------------------
181
+ function setCommonFrameworkAttributes(span, operation, modelName, durationMs) {
182
+ span.setAttribute(semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME, constant_1.SDK_NAME);
183
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SDK_VERSION, constant_1.SDK_VERSION);
184
+ span.setAttribute(semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL, semantic_convention_1.default.GEN_AI_SYSTEM_OPENAI);
185
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OPERATION, operation);
186
+ if (modelName) {
187
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, modelName);
188
+ }
189
+ if (OPENAI_SERVER_ADDRESS) {
190
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, OPENAI_SERVER_ADDRESS);
191
+ if (OPENAI_SERVER_PORT) {
192
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, OPENAI_SERVER_PORT);
193
+ }
194
+ }
195
+ span.setAttribute(semantic_convention_1.default.ATTR_DEPLOYMENT_ENVIRONMENT, config_1.default.environment ?? 'default');
196
+ span.setAttribute(semantic_conventions_1.ATTR_SERVICE_NAME, config_1.default.applicationName ?? 'default');
197
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, durationMs / 1000);
198
+ (0, helpers_1.applyCustomSpanAttributes)(span);
199
+ }
200
+ // ---------------------------------------------------------------------------
201
+ // Agent (invoke_agent)
202
+ // ---------------------------------------------------------------------------
203
+ function setAgentAttributes(span, spanData, captureContent) {
204
+ try {
205
+ const name = spanData.name;
206
+ if (name) {
207
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, String(name));
208
+ }
209
+ const agentId = spanData.agentId ?? spanData.agent_id;
210
+ if (agentId && typeof agentId === 'string') {
211
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_ID, agentId);
212
+ }
213
+ const outputType = spanData.outputType ?? spanData.output_type;
214
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, mapOutputType(outputType));
215
+ if (captureContent) {
216
+ const tools = spanData.tools;
217
+ if (tools && tools.length > 0) {
218
+ const toolDefs = tools.slice(0, 20).map((t) => ({
219
+ type: 'function',
220
+ name: String(typeof t === 'string' ? t : t),
221
+ }));
222
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_DEFINITIONS, JSON.stringify(toolDefs));
223
+ }
224
+ const handoffs = spanData.handoffs;
225
+ if (handoffs && handoffs.length > 0) {
226
+ span.setAttribute('gen_ai.agent.handoffs', JSON.stringify(handoffs.slice(0, 20).map(String)));
227
+ }
228
+ }
229
+ }
230
+ catch {
231
+ // swallow
232
+ }
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // Response (chat -- Response API)
236
+ // ---------------------------------------------------------------------------
237
+ function setResponseAttributes(span, spanData, captureContent) {
238
+ try {
239
+ const response = spanData.response;
240
+ if (!response)
241
+ return;
242
+ const model = response.model;
243
+ if (model) {
244
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, String(model));
245
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, String(model));
246
+ }
247
+ const respId = response.id;
248
+ if (respId) {
249
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_ID, String(respId));
250
+ }
251
+ const usage = response.usage;
252
+ if (usage) {
253
+ const inputTokens = usage.input_tokens ?? usage.inputTokens;
254
+ const outputTokens = usage.output_tokens ?? usage.outputTokens;
255
+ if (inputTokens != null) {
256
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, inputTokens);
257
+ }
258
+ if (outputTokens != null) {
259
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens);
260
+ }
261
+ }
262
+ const outputItems = response.output;
263
+ if (Array.isArray(outputItems)) {
264
+ const finishReasons = [];
265
+ for (const item of outputItems) {
266
+ const status = item.status;
267
+ if (status)
268
+ finishReasons.push(String(status));
269
+ }
270
+ if (finishReasons.length > 0) {
271
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, finishReasons);
272
+ }
273
+ }
274
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
275
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, OPENAI_SERVER_ADDRESS);
276
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, OPENAI_SERVER_PORT);
277
+ if (captureContent) {
278
+ captureResponseMessages(span, spanData, response);
279
+ }
280
+ }
281
+ catch {
282
+ // swallow
283
+ }
284
+ }
285
+ function captureResponseMessages(span, spanData, response) {
286
+ try {
287
+ const rawInput = spanData.input;
288
+ if (rawInput) {
289
+ let messages;
290
+ if (typeof rawInput === 'string') {
291
+ messages = [formatInputMessage('user', rawInput)];
292
+ }
293
+ else if (Array.isArray(rawInput)) {
294
+ messages = [];
295
+ for (const item of rawInput.slice(0, 20)) {
296
+ if (typeof item === 'object' && item !== null && !Array.isArray(item)) {
297
+ if (item.role) {
298
+ messages.push(item);
299
+ }
300
+ else {
301
+ messages.push(formatInputMessage('user', item));
302
+ }
303
+ }
304
+ else {
305
+ const role = String(item?.role ?? 'user');
306
+ const content = item?.content ?? String(item);
307
+ messages.push(formatInputMessage(role, content));
308
+ }
309
+ }
310
+ }
311
+ else {
312
+ messages = [formatInputMessage('user', rawInput)];
313
+ }
314
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, JSON.stringify(messages));
315
+ }
316
+ const outputItems = response.output;
317
+ if (Array.isArray(outputItems)) {
318
+ const outMessages = [];
319
+ for (const item of outputItems.slice(0, 20)) {
320
+ const itemType = item.type;
321
+ if (itemType === 'message') {
322
+ const contentParts = item.content ?? [];
323
+ const textParts = [];
324
+ for (const part of contentParts) {
325
+ const text = part.text;
326
+ if (text)
327
+ textParts.push(String(text));
328
+ }
329
+ if (textParts.length > 0) {
330
+ outMessages.push(formatOutputMessage(textParts.join(' ')));
331
+ }
332
+ }
333
+ else if (itemType === 'function_call') {
334
+ outMessages.push({
335
+ role: 'assistant',
336
+ parts: [
337
+ {
338
+ type: 'tool_call',
339
+ name: item.name ?? 'unknown',
340
+ arguments: item.arguments ?? '',
341
+ },
342
+ ],
343
+ });
344
+ }
345
+ }
346
+ if (outMessages.length > 0) {
347
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, JSON.stringify(outMessages));
348
+ }
349
+ }
350
+ }
351
+ catch {
352
+ // swallow
353
+ }
354
+ }
355
+ // ---------------------------------------------------------------------------
356
+ // Generation (chat -- Chat Completions API)
357
+ // ---------------------------------------------------------------------------
358
+ function setGenerationAttributes(span, spanData, captureContent) {
359
+ try {
360
+ const model = spanData.model;
361
+ if (model) {
362
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, String(model));
363
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, String(model));
364
+ }
365
+ const usage = spanData.usage;
366
+ if (usage && typeof usage === 'object') {
367
+ const inputTokens = usage.input_tokens ?? usage.inputTokens;
368
+ const outputTokens = usage.output_tokens ?? usage.outputTokens;
369
+ if (inputTokens != null) {
370
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, inputTokens);
371
+ }
372
+ if (outputTokens != null) {
373
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens);
374
+ }
375
+ }
376
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
377
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, OPENAI_SERVER_ADDRESS);
378
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, OPENAI_SERVER_PORT);
379
+ if (captureContent) {
380
+ const rawInput = spanData.input;
381
+ if (rawInput) {
382
+ if (Array.isArray(rawInput)) {
383
+ const messages = rawInput.slice(0, 20).map((msg) => typeof msg === 'object' && msg !== null ? msg : formatInputMessage('user', msg));
384
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, JSON.stringify(messages));
385
+ }
386
+ else {
387
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, JSON.stringify([formatInputMessage('user', rawInput)]));
388
+ }
389
+ }
390
+ const rawOutput = spanData.output;
391
+ if (rawOutput) {
392
+ if (Array.isArray(rawOutput)) {
393
+ const messages = rawOutput.slice(0, 20).map((msg) => typeof msg === 'object' && msg !== null ? msg : formatOutputMessage(msg));
394
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, JSON.stringify(messages));
395
+ }
396
+ else {
397
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, JSON.stringify([formatOutputMessage(rawOutput)]));
398
+ }
399
+ }
400
+ }
401
+ }
402
+ catch {
403
+ // swallow
404
+ }
405
+ }
406
+ // ---------------------------------------------------------------------------
407
+ // Function / Tool (execute_tool)
408
+ // ---------------------------------------------------------------------------
409
+ function setFunctionAttributes(span, spanData, captureContent) {
410
+ try {
411
+ const name = spanData.name;
412
+ if (name) {
413
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_NAME, String(name));
414
+ }
415
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_TYPE, 'function');
416
+ if (captureContent) {
417
+ const toolInput = spanData.input;
418
+ if (toolInput != null) {
419
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_ARGUMENTS, String(toolInput));
420
+ }
421
+ const toolOutput = spanData.output;
422
+ if (toolOutput != null) {
423
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_RESULT, String(toolOutput));
424
+ }
425
+ }
426
+ }
427
+ catch {
428
+ // swallow
429
+ }
430
+ }
431
+ // ---------------------------------------------------------------------------
432
+ // Handoff (invoke_agent for target)
433
+ // ---------------------------------------------------------------------------
434
+ function setHandoffAttributes(span, spanData, handoffTracker, traceId) {
435
+ try {
436
+ const toAgent = spanData.toAgent ?? spanData.to_agent;
437
+ const fromAgent = spanData.fromAgent ?? spanData.from_agent;
438
+ if (toAgent) {
439
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, String(toAgent));
440
+ const key = `${toAgent}:${traceId}`;
441
+ handoffTracker.set(key, fromAgent ? String(fromAgent) : 'unknown');
442
+ if (handoffTracker.size > MAX_HANDOFFS) {
443
+ const firstKey = handoffTracker.keys().next().value;
444
+ if (firstKey !== undefined)
445
+ handoffTracker.delete(firstKey);
446
+ }
447
+ }
448
+ if (fromAgent) {
449
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_SOURCE, String(fromAgent));
450
+ }
451
+ }
452
+ catch {
453
+ // swallow
454
+ }
455
+ }
456
+ // ---------------------------------------------------------------------------
457
+ // Guardrail (invoke_agent)
458
+ // ---------------------------------------------------------------------------
459
+ function setGuardrailAttributes(span, spanData) {
460
+ try {
461
+ const name = spanData.name;
462
+ if (name) {
463
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, String(name));
464
+ }
465
+ const triggered = spanData.triggered;
466
+ if (triggered != null) {
467
+ span.setAttribute('gen_ai.guardrail.triggered', Boolean(triggered));
468
+ }
469
+ }
470
+ catch {
471
+ // swallow
472
+ }
473
+ }
474
+ // ---------------------------------------------------------------------------
475
+ // Transcription (chat)
476
+ // ---------------------------------------------------------------------------
477
+ function setTranscriptionAttributes(span, spanData, captureContent) {
478
+ try {
479
+ const model = spanData.model;
480
+ if (model) {
481
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, String(model));
482
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, String(model));
483
+ }
484
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT);
485
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, OPENAI_SERVER_ADDRESS);
486
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, OPENAI_SERVER_PORT);
487
+ if (captureContent) {
488
+ const output = spanData.output;
489
+ if (output) {
490
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, JSON.stringify([formatOutputMessage(output)]));
491
+ }
492
+ }
493
+ }
494
+ catch {
495
+ // swallow
496
+ }
497
+ }
498
+ // ---------------------------------------------------------------------------
499
+ // Speech (chat)
500
+ // ---------------------------------------------------------------------------
501
+ function setSpeechAttributes(span, spanData, captureContent) {
502
+ try {
503
+ const model = spanData.model;
504
+ if (model) {
505
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, String(model));
506
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, String(model));
507
+ }
508
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_TYPE, 'speech');
509
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, OPENAI_SERVER_ADDRESS);
510
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, OPENAI_SERVER_PORT);
511
+ if (captureContent) {
512
+ const textInput = spanData.input;
513
+ if (textInput) {
514
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, JSON.stringify([formatInputMessage('user', textInput)]));
515
+ }
516
+ }
517
+ }
518
+ catch {
519
+ // swallow
520
+ }
521
+ }
522
+ // ---------------------------------------------------------------------------
523
+ // MCP List Tools (execute_tool)
524
+ // ---------------------------------------------------------------------------
525
+ function setMcpToolsAttributes(span, spanData) {
526
+ try {
527
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_NAME, 'mcp_list_tools');
528
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_TYPE, 'function');
529
+ const server = spanData.server;
530
+ if (server) {
531
+ span.setAttribute('gen_ai.mcp.server', String(server));
532
+ }
533
+ const result = spanData.result;
534
+ if (result) {
535
+ const items = Array.isArray(result) ? result.slice(0, 50) : result;
536
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_RESULT, JSON.stringify(items));
537
+ }
538
+ }
539
+ catch {
540
+ // swallow
541
+ }
542
+ }
543
+ // ---------------------------------------------------------------------------
544
+ // Custom (invoke_agent)
545
+ // ---------------------------------------------------------------------------
546
+ function setCustomAttributes(span, spanData) {
547
+ try {
548
+ const name = spanData.name;
549
+ if (name) {
550
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, String(name));
551
+ }
552
+ const data = spanData.data;
553
+ if (data && typeof data === 'object') {
554
+ try {
555
+ span.setAttribute('gen_ai.custom.data', JSON.stringify(data));
556
+ }
557
+ catch {
558
+ // non-serialisable data
559
+ }
560
+ }
561
+ }
562
+ catch {
563
+ // swallow
564
+ }
565
+ }
566
+ // ---------------------------------------------------------------------------
567
+ // Metrics
568
+ // ---------------------------------------------------------------------------
569
+ function recordMetrics(operationType, durationSeconds, requestModel) {
570
+ try {
571
+ const attributes = {
572
+ [semantic_convention_1.default.GEN_AI_OPERATION]: operationType,
573
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_OPENAI,
574
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: config_1.default.applicationName ?? 'default',
575
+ [semantic_convention_1.default.ATTR_DEPLOYMENT_ENVIRONMENT]: config_1.default.environment ?? 'default',
576
+ };
577
+ if (requestModel) {
578
+ attributes[semantic_convention_1.default.GEN_AI_REQUEST_MODEL] = requestModel;
579
+ }
580
+ if (OPENAI_SERVER_ADDRESS) {
581
+ attributes[semantic_convention_1.default.SERVER_ADDRESS] = OPENAI_SERVER_ADDRESS;
582
+ }
583
+ if (OPENAI_SERVER_PORT) {
584
+ attributes[semantic_convention_1.default.SERVER_PORT] = OPENAI_SERVER_PORT;
585
+ }
586
+ metrics_1.default.genaiClientOperationDuration?.record(durationSeconds, attributes);
587
+ }
588
+ catch {
589
+ // swallow
590
+ }
591
+ }
592
+ // ---------------------------------------------------------------------------
593
+ // Helpers
594
+ // ---------------------------------------------------------------------------
595
+ function extractModelFromSpanData(spanData) {
596
+ const model = spanData?.model;
597
+ if (model)
598
+ return String(model);
599
+ const response = spanData?.response;
600
+ if (response) {
601
+ const rModel = response.model;
602
+ if (rModel)
603
+ return String(rModel);
604
+ }
605
+ return null;
606
+ }
607
+ function mapOutputType(outputType) {
608
+ if (outputType == null)
609
+ return semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT;
610
+ const s = String(outputType).toLowerCase();
611
+ if (s.includes('dict') || s.includes('json'))
612
+ return semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_JSON;
613
+ return semantic_convention_1.default.GEN_AI_OUTPUT_TYPE_TEXT;
614
+ }
615
+ function formatInputMessage(role, content) {
616
+ return { role, parts: [{ type: 'text', content: String(content) }] };
617
+ }
618
+ function formatOutputMessage(content) {
619
+ return {
620
+ role: 'assistant',
621
+ parts: [{ type: 'text', content: String(content) }],
622
+ };
623
+ }
624
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/instrumentation/openai-agents/utils.ts"],"names":[],"mappings":"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"}