@microsoft/agents-a365-observability-extensions-openai 0.1.0-preview.30

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 (42) hide show
  1. package/README.md +33 -0
  2. package/dist/cjs/Constants.d.ts +29 -0
  3. package/dist/cjs/Constants.d.ts.map +1 -0
  4. package/dist/cjs/Constants.js +37 -0
  5. package/dist/cjs/Constants.js.map +1 -0
  6. package/dist/cjs/OpenAIAgentsTraceInstrumentor.d.ts +43 -0
  7. package/dist/cjs/OpenAIAgentsTraceInstrumentor.d.ts.map +1 -0
  8. package/dist/cjs/OpenAIAgentsTraceInstrumentor.js +108 -0
  9. package/dist/cjs/OpenAIAgentsTraceInstrumentor.js.map +1 -0
  10. package/dist/cjs/OpenAIAgentsTraceProcessor.d.ts +84 -0
  11. package/dist/cjs/OpenAIAgentsTraceProcessor.d.ts.map +1 -0
  12. package/dist/cjs/OpenAIAgentsTraceProcessor.js +374 -0
  13. package/dist/cjs/OpenAIAgentsTraceProcessor.js.map +1 -0
  14. package/dist/cjs/Utils.d.ts +44 -0
  15. package/dist/cjs/Utils.d.ts.map +1 -0
  16. package/dist/cjs/Utils.js +221 -0
  17. package/dist/cjs/Utils.js.map +1 -0
  18. package/dist/cjs/index.d.ts +6 -0
  19. package/dist/cjs/index.d.ts.map +1 -0
  20. package/dist/cjs/index.js +14 -0
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/esm/Constants.d.ts +29 -0
  23. package/dist/esm/Constants.d.ts.map +1 -0
  24. package/dist/esm/Constants.js +34 -0
  25. package/dist/esm/Constants.js.map +1 -0
  26. package/dist/esm/OpenAIAgentsTraceInstrumentor.d.ts +43 -0
  27. package/dist/esm/OpenAIAgentsTraceInstrumentor.d.ts.map +1 -0
  28. package/dist/esm/OpenAIAgentsTraceInstrumentor.js +104 -0
  29. package/dist/esm/OpenAIAgentsTraceInstrumentor.js.map +1 -0
  30. package/dist/esm/OpenAIAgentsTraceProcessor.d.ts +84 -0
  31. package/dist/esm/OpenAIAgentsTraceProcessor.d.ts.map +1 -0
  32. package/dist/esm/OpenAIAgentsTraceProcessor.js +337 -0
  33. package/dist/esm/OpenAIAgentsTraceProcessor.js.map +1 -0
  34. package/dist/esm/Utils.d.ts +44 -0
  35. package/dist/esm/Utils.d.ts.map +1 -0
  36. package/dist/esm/Utils.js +177 -0
  37. package/dist/esm/Utils.js.map +1 -0
  38. package/dist/esm/index.d.ts +6 -0
  39. package/dist/esm/index.d.ts.map +1 -0
  40. package/dist/esm/index.js +9 -0
  41. package/dist/esm/index.js.map +1 -0
  42. package/package.json +69 -0
@@ -0,0 +1,337 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ /**
5
+ * Trace processor for OpenAI Agents SDK
6
+ * Converts OpenAI Agents SDK spans to OpenTelemetry spans
7
+ */
8
+ import { context, trace as OtelTrace } from '@opentelemetry/api';
9
+ import { OpenTelemetryConstants, InferenceOperationType } from '@microsoft/agents-a365-observability';
10
+ import * as Constants from './Constants';
11
+ import * as Utils from './Utils';
12
+ /**
13
+ * Processor for OpenAI Agents SDK traces
14
+ */
15
+ export class OpenAIAgentsTraceProcessor {
16
+ constructor(tracer) {
17
+ this.rootSpans = new Map();
18
+ this.otelSpans = new Map();
19
+ this.tokens = new Map();
20
+ this.reverseHandoffsDict = new Map();
21
+ // Track span names for later access (since OTel Span doesn't expose name)
22
+ this.spanNames = new Map();
23
+ this.keyMappings = new Map([
24
+ ['mcp_tools' + Constants.GEN_AI_RESPONSE_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_EVENT_CONTENT],
25
+ ['mcp_tools' + Constants.GEN_AI_REQUEST_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_TOOL_ARGS_KEY],
26
+ ['function' + Constants.GEN_AI_RESPONSE_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_EVENT_CONTENT],
27
+ ['function' + Constants.GEN_AI_REQUEST_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_TOOL_ARGS_KEY],
28
+ ['generation' + Constants.GEN_AI_RESPONSE_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_OUTPUT_MESSAGES_KEY],
29
+ ['generation' + Constants.GEN_AI_REQUEST_CONTENT_KEY, OpenTelemetryConstants.GEN_AI_INPUT_MESSAGES_KEY],
30
+ ]);
31
+ this.tracer = tracer;
32
+ }
33
+ getNewKey(spanType, key) {
34
+ return this.keyMappings.get(`${spanType}${key}`) ?? null;
35
+ }
36
+ /**
37
+ * Called to initialize the processor
38
+ */
39
+ async start() {
40
+ // Initialization logic if needed
41
+ }
42
+ /**
43
+ * Called when a trace starts
44
+ */
45
+ async onTraceStart(_trace) {
46
+ // Trace start - no root span creation needed
47
+ }
48
+ /**
49
+ * Called when a trace ends
50
+ */
51
+ async onTraceEnd(trace) {
52
+ const rootSpan = this.rootSpans.get(trace.traceId);
53
+ if (rootSpan) {
54
+ this.rootSpans.delete(trace.traceId);
55
+ rootSpan.end();
56
+ }
57
+ }
58
+ /**
59
+ * Called when a span starts
60
+ */
61
+ async onSpanStart(span) {
62
+ const spanId = span.spanId;
63
+ const parentId = span.parentId;
64
+ const traceId = span.traceId;
65
+ const startedAt = span.startedAt;
66
+ const spanData = span.spanData;
67
+ if (!startedAt || !spanId || !traceId) {
68
+ return;
69
+ }
70
+ const startTime = new Date(startedAt).getTime();
71
+ // Find parent span
72
+ const parentSpan = parentId
73
+ ? this.otelSpans.get(parentId)
74
+ : this.rootSpans.get(traceId);
75
+ // Create context with parent
76
+ const parentContext = parentSpan
77
+ ? OtelTrace.setSpan(context.active(), parentSpan)
78
+ : context.active();
79
+ const spanName = Utils.getSpanName(span);
80
+ // Start OpenTelemetry span
81
+ const otelSpan = this.tracer.startSpan(spanName, {
82
+ startTime,
83
+ attributes: {
84
+ [OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY]: Utils.getSpanKind(spanData),
85
+ [OpenTelemetryConstants.GEN_AI_SYSTEM_KEY]: 'openai',
86
+ },
87
+ }, parentContext);
88
+ if (!parentSpan) {
89
+ this.rootSpans.set(traceId, otelSpan);
90
+ }
91
+ // Store span and activate context
92
+ this.otelSpans.set(spanId, otelSpan);
93
+ this.spanNames.set(otelSpan, spanName);
94
+ const newContext = OtelTrace.setSpan(context.active(), otelSpan);
95
+ const token = context.with(newContext, () => context.active());
96
+ this.tokens.set(spanId, token);
97
+ }
98
+ /**
99
+ * Called when a span ends
100
+ */
101
+ async onSpanEnd(span) {
102
+ const spanId = span.spanId;
103
+ const traceId = span.traceId;
104
+ const endedAt = span.endedAt;
105
+ const spanData = span.spanData;
106
+ if (!spanId || !traceId) {
107
+ return;
108
+ }
109
+ // Cleanup context token
110
+ const token = this.tokens.get(spanId);
111
+ if (token) {
112
+ this.tokens.delete(spanId);
113
+ // Context cleanup is automatic in JS
114
+ }
115
+ // Retrieve OpenTelemetry span
116
+ const otelSpan = this.otelSpans.get(spanId);
117
+ if (!otelSpan) {
118
+ return;
119
+ }
120
+ this.otelSpans.delete(spanId);
121
+ this.spanNames.delete(otelSpan);
122
+ // Update span name
123
+ otelSpan.updateName(Utils.getSpanName(span));
124
+ // Process based on span data type
125
+ if (spanData) {
126
+ this.processSpanData(otelSpan, spanData, traceId);
127
+ }
128
+ // Set end time and status
129
+ const endTime = endedAt ? new Date(endedAt).getTime() : undefined;
130
+ const status = Utils.getSpanStatus(span);
131
+ otelSpan.setStatus(status);
132
+ if (endTime) {
133
+ otelSpan.end(endTime);
134
+ }
135
+ else {
136
+ otelSpan.end();
137
+ }
138
+ }
139
+ /**
140
+ * Process span data based on type
141
+ */
142
+ processSpanData(otelSpan, data, traceId) {
143
+ const type = data.type;
144
+ switch (type) {
145
+ case 'response':
146
+ this.processResponseSpanData(otelSpan, data);
147
+ break;
148
+ case 'generation':
149
+ this.processGenerationSpanData(otelSpan, data, traceId);
150
+ break;
151
+ case 'function':
152
+ this.processFunctionSpanData(otelSpan, data, traceId);
153
+ break;
154
+ case 'mcp_tools':
155
+ this.processMCPListToolsSpanData(otelSpan, data);
156
+ break;
157
+ case 'handoff':
158
+ this.processHandoffSpanData(otelSpan, data, traceId);
159
+ break;
160
+ case 'agent':
161
+ this.processAgentSpanData(otelSpan, data, traceId);
162
+ break;
163
+ }
164
+ }
165
+ /**
166
+ * Process response span data
167
+ */
168
+ processResponseSpanData(otelSpan, data) {
169
+ const responseData = data;
170
+ // Handle both formats: _response/_input (actual format) and response/input (legacy format)
171
+ const responseObj = responseData._response || responseData.response;
172
+ const inputObj = responseData._input || responseData.input;
173
+ if (responseObj) {
174
+ const resp = responseObj;
175
+ // Store the output field for GEN_AI_RESPONSE_CONTENT_KEY
176
+ if (resp.output) {
177
+ if (typeof resp.output === 'string') {
178
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_OUTPUT_MESSAGES_KEY, resp.output);
179
+ }
180
+ else {
181
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_OUTPUT_MESSAGES_KEY, JSON.stringify(resp.output));
182
+ }
183
+ }
184
+ // Get attributes but filter out unwanted ones
185
+ const attrs = Utils.getAttributesFromResponse(responseObj);
186
+ Object.entries(attrs).forEach(([key, value]) => {
187
+ if (value !== null && value !== undefined &&
188
+ key !== Constants.GEN_AI_RESPONSE_CONTENT_KEY) {
189
+ otelSpan.setAttribute(key, value);
190
+ }
191
+ });
192
+ const modelName = attrs[OpenTelemetryConstants.GEN_AI_REQUEST_MODEL_KEY] ?? '';
193
+ otelSpan.updateName(`${InferenceOperationType.CHAT} ${modelName}`);
194
+ }
195
+ if (inputObj) {
196
+ if (typeof inputObj === 'string') {
197
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_INPUT_MESSAGES_KEY, inputObj);
198
+ }
199
+ else if (Array.isArray(inputObj)) {
200
+ // Store the complete _input structure as JSON
201
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_INPUT_MESSAGES_KEY, JSON.stringify(inputObj));
202
+ // Get attributes but filter out unwanted ones
203
+ const attrs = Utils.getAttributesFromInput(inputObj);
204
+ Object.entries(attrs).forEach(([key, value]) => {
205
+ if (value !== null && value !== undefined &&
206
+ key !== Constants.GEN_AI_REQUEST_CONTENT_KEY) {
207
+ otelSpan.setAttribute(key, value);
208
+ }
209
+ });
210
+ }
211
+ }
212
+ }
213
+ /**
214
+ * Process generation span data
215
+ */
216
+ processGenerationSpanData(otelSpan, data, traceId) {
217
+ const attrs = Utils.getAttributesFromGenerationSpanData(data);
218
+ Object.entries(attrs).forEach(([key, value]) => {
219
+ const shouldExcludeKey = key === OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY
220
+ || key === Constants.GEN_AI_EXECUTION_PAYLOAD_KEY;
221
+ if (value !== null && value !== undefined && !shouldExcludeKey) {
222
+ const newKey = this.getNewKey(data.type, key);
223
+ otelSpan.setAttribute(newKey || key, value);
224
+ }
225
+ });
226
+ this.stampCustomParent(otelSpan, traceId);
227
+ // Update span name with model
228
+ const operationName = attrs[OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY];
229
+ const modelName = attrs[OpenTelemetryConstants.GEN_AI_REQUEST_MODEL_KEY];
230
+ if (operationName && modelName) {
231
+ otelSpan.updateName(`${operationName} ${modelName}`);
232
+ }
233
+ }
234
+ /**
235
+ * Process function/tool span data
236
+ */
237
+ processFunctionSpanData(otelSpan, data, traceId) {
238
+ const functionData = data;
239
+ const attrs = Utils.getAttributesFromFunctionSpanData(data);
240
+ Object.entries(attrs).forEach(([key, value]) => {
241
+ if (value !== null && value !== undefined && key !== OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY) {
242
+ const newKey = this.getNewKey(data.type, key);
243
+ otelSpan.setAttribute(newKey || key, value);
244
+ }
245
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_TOOL_TYPE_KEY, 'function');
246
+ });
247
+ this.stampCustomParent(otelSpan, traceId);
248
+ // Use function name from data instead of span name
249
+ otelSpan.updateName(`${OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME} ${functionData.name ?? ''}`);
250
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY, OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME);
251
+ }
252
+ /**
253
+ * Process MCP list tools span data
254
+ */
255
+ processMCPListToolsSpanData(otelSpan, data) {
256
+ const attrs = Utils.getAttributesFromMCPListToolsSpanData(data);
257
+ Object.entries(attrs).forEach(([key, value]) => {
258
+ if (value !== null && value !== undefined && key !== OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY) {
259
+ const newKey = this.getNewKey(data.type, key);
260
+ otelSpan.setAttribute(newKey || key, value);
261
+ }
262
+ });
263
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY, OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME);
264
+ const serverName = data.server ?? 'unknown';
265
+ const newSpanName = `${OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME} ${serverName}`;
266
+ otelSpan.updateName(newSpanName);
267
+ if (serverName) {
268
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_TOOL_NAME_KEY, serverName);
269
+ }
270
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_TOOL_TYPE_KEY, 'extension');
271
+ }
272
+ /**
273
+ * Process handoff span data
274
+ */
275
+ processHandoffSpanData(otelSpan, data, traceId) {
276
+ const handoffData = data;
277
+ if (handoffData.to_agent && handoffData.from_agent) {
278
+ const key = `${handoffData.to_agent}:${traceId}`;
279
+ this.reverseHandoffsDict.set(key, handoffData.from_agent);
280
+ // Cap the size
281
+ while (this.reverseHandoffsDict.size > OpenAIAgentsTraceProcessor.MAX_HANDOFFS_IN_FLIGHT) {
282
+ const firstKey = this.reverseHandoffsDict.keys().next().value;
283
+ if (firstKey) {
284
+ this.reverseHandoffsDict.delete(firstKey);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ /**
290
+ * Process agent span data
291
+ */
292
+ processAgentSpanData(otelSpan, data, traceId) {
293
+ const agentData = data;
294
+ if (agentData.name) {
295
+ otelSpan.setAttribute(Constants.GEN_AI_GRAPH_NODE_ID, agentData.name);
296
+ otelSpan.setAttribute(OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY, OpenTelemetryConstants.INVOKE_AGENT_OPERATION_NAME);
297
+ // Lookup parent node if exists
298
+ const key = `${agentData.name}:${traceId}`;
299
+ const parentNode = this.reverseHandoffsDict.get(key);
300
+ if (parentNode) {
301
+ this.reverseHandoffsDict.delete(key);
302
+ otelSpan.setAttribute(Constants.GEN_AI_GRAPH_NODE_PARENT_ID, parentNode);
303
+ }
304
+ // Update span name for agent
305
+ otelSpan.updateName(`${OpenTelemetryConstants.INVOKE_AGENT_OPERATION_NAME} ${agentData.name}`);
306
+ }
307
+ }
308
+ /**
309
+ * Stamp custom parent reference
310
+ */
311
+ stampCustomParent(otelSpan, traceId) {
312
+ const root = this.rootSpans.get(traceId);
313
+ if (!root) {
314
+ return;
315
+ }
316
+ const spanContext = root.spanContext();
317
+ const pidHex = `0x${spanContext.spanId}`;
318
+ otelSpan.setAttribute('custom.parent.span.id', pidHex);
319
+ }
320
+ /**
321
+ * Force flush
322
+ */
323
+ async forceFlush() {
324
+ // Implementation depends on tracer provider
325
+ }
326
+ /**
327
+ * Shutdown
328
+ */
329
+ async shutdown(_timeout) {
330
+ this.rootSpans.clear();
331
+ this.otelSpans.clear();
332
+ this.tokens.clear();
333
+ this.reverseHandoffsDict.clear();
334
+ }
335
+ }
336
+ OpenAIAgentsTraceProcessor.MAX_HANDOFFS_IN_FLIGHT = 1000;
337
+ //# sourceMappingURL=OpenAIAgentsTraceProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIAgentsTraceProcessor.js","sourceRoot":"","sources":["../../src/OpenAIAgentsTraceProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { SpanStatusCode } from '@opentelemetry/api';
2
+ import { Span as AgentsSpan, SpanData } from '@openai/agents-core/dist/tracing/spans';
3
+ /**
4
+ * Safely stringify an object to JSON
5
+ * @param obj - The object to stringify
6
+ * @returns JSON string representation or string conversion if JSON.stringify fails
7
+ */
8
+ export declare function safeJsonDumps(obj: unknown): string;
9
+ /**
10
+ * Get span name from OpenAI Agents SDK span
11
+ */
12
+ export declare function getSpanName(span: AgentsSpan<SpanData>): string;
13
+ /**
14
+ * Get span kind based on span data type
15
+ */
16
+ export declare function getSpanKind(spanData: SpanData | undefined): string;
17
+ /**
18
+ * Get attributes from generation span data
19
+ */
20
+ export declare function getAttributesFromGenerationSpanData(data: SpanData): Record<string, unknown>;
21
+ /**
22
+ * Get attributes from function span data
23
+ */
24
+ export declare function getAttributesFromFunctionSpanData(data: SpanData): Record<string, unknown>;
25
+ /**
26
+ * Get attributes from MCP list tools span data
27
+ */
28
+ export declare function getAttributesFromMCPListToolsSpanData(data: SpanData): Record<string, unknown>;
29
+ /**
30
+ * Get attributes from response span data
31
+ */
32
+ export declare function getAttributesFromResponse(response: unknown): Record<string, unknown>;
33
+ /**
34
+ * Get attributes from input data
35
+ */
36
+ export declare function getAttributesFromInput(input: unknown): Record<string, unknown>;
37
+ /**
38
+ * Get span status from OpenAI Agents SDK span
39
+ */
40
+ export declare function getSpanStatus(span: AgentsSpan<SpanData>): {
41
+ code: SpanStatusCode;
42
+ message?: string;
43
+ };
44
+ //# sourceMappingURL=Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../src/Utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEtF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAiB9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAqBlE;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwC3F;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzF;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU7F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBpF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAUpG"}
@@ -0,0 +1,177 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ import { SpanStatusCode } from '@opentelemetry/api';
5
+ import { OpenTelemetryConstants } from '@microsoft/agents-a365-observability';
6
+ import * as Constants from './Constants';
7
+ /**
8
+ * Safely stringify an object to JSON
9
+ * @param obj - The object to stringify
10
+ * @returns JSON string representation or string conversion if JSON.stringify fails
11
+ */
12
+ export function safeJsonDumps(obj) {
13
+ try {
14
+ return JSON.stringify(obj);
15
+ }
16
+ catch {
17
+ return String(obj);
18
+ }
19
+ }
20
+ /**
21
+ * Get span name from OpenAI Agents SDK span
22
+ */
23
+ export function getSpanName(span) {
24
+ const data = span.spanData;
25
+ // Check if data has a 'name' property (for agent, function, custom spans)
26
+ const dataWithName = data;
27
+ if (dataWithName?.name && typeof dataWithName.name === 'string') {
28
+ return dataWithName.name;
29
+ }
30
+ if (data?.type === 'handoff') {
31
+ const handoffData = data;
32
+ if (handoffData.to_agent) {
33
+ return `handoff to ${handoffData.to_agent}`;
34
+ }
35
+ }
36
+ return data?.type || 'unknown';
37
+ }
38
+ /**
39
+ * Get span kind based on span data type
40
+ */
41
+ export function getSpanKind(spanData) {
42
+ if (!spanData?.type) {
43
+ return Constants.GEN_AI_SPAN_KIND_CHAIN_KEY;
44
+ }
45
+ switch (spanData.type) {
46
+ case 'agent':
47
+ return Constants.GEN_AI_SPAN_KIND_AGENT_KEY;
48
+ case 'function':
49
+ return Constants.GEN_AI_SPAN_KIND_TOOL_KEY;
50
+ case 'generation':
51
+ case 'response':
52
+ return Constants.GEN_AI_SPAN_KIND_LLM_KEY;
53
+ case 'handoff':
54
+ return Constants.GEN_AI_SPAN_KIND_CHAIN_KEY;
55
+ case 'custom':
56
+ case 'guardrail':
57
+ return Constants.GEN_AI_SPAN_KIND_CHAIN_KEY;
58
+ default:
59
+ return Constants.GEN_AI_SPAN_KIND_CHAIN_KEY;
60
+ }
61
+ }
62
+ /**
63
+ * Get attributes from generation span data
64
+ */
65
+ export function getAttributesFromGenerationSpanData(data) {
66
+ const attributes = {
67
+ [OpenTelemetryConstants.GEN_AI_PROVIDER_NAME_KEY]: 'openai',
68
+ };
69
+ const genData = data;
70
+ if (typeof genData.model === 'string') {
71
+ attributes[OpenTelemetryConstants.GEN_AI_REQUEST_MODEL_KEY] = genData.model;
72
+ }
73
+ if (genData.model_config || genData.modelConfig) {
74
+ const config = genData.model_config || genData.modelConfig;
75
+ attributes[OpenTelemetryConstants.GEN_AI_EXECUTION_PAYLOAD_KEY] = safeJsonDumps(config);
76
+ }
77
+ if (genData.input) {
78
+ attributes[Constants.GEN_AI_REQUEST_CONTENT_KEY] = safeJsonDumps(genData.input);
79
+ attributes[OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY] = 'application/json';
80
+ }
81
+ if (genData.output) {
82
+ attributes[Constants.GEN_AI_RESPONSE_CONTENT_KEY] = safeJsonDumps(genData.output);
83
+ const output = genData.output;
84
+ if (output.id) {
85
+ attributes[OpenTelemetryConstants.GEN_AI_RESPONSE_ID_KEY] = output.id;
86
+ }
87
+ }
88
+ if (genData.usage) {
89
+ const usage = genData.usage;
90
+ if (usage.input_tokens !== undefined) {
91
+ attributes[OpenTelemetryConstants.GEN_AI_USAGE_INPUT_TOKENS_KEY] = usage.input_tokens;
92
+ }
93
+ if (usage.output_tokens !== undefined) {
94
+ attributes[OpenTelemetryConstants.GEN_AI_USAGE_OUTPUT_TOKENS_KEY] = usage.output_tokens;
95
+ }
96
+ }
97
+ return attributes;
98
+ }
99
+ /**
100
+ * Get attributes from function span data
101
+ */
102
+ export function getAttributesFromFunctionSpanData(data) {
103
+ const attributes = {};
104
+ const funcData = data;
105
+ if (funcData.name) {
106
+ attributes['gen_ai.tool.name'] = funcData.name;
107
+ }
108
+ if (funcData.input) {
109
+ attributes[Constants.GEN_AI_REQUEST_CONTENT_KEY] =
110
+ typeof funcData.input === 'string' ? funcData.input : safeJsonDumps(funcData.input);
111
+ attributes[OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY] = 'application/json';
112
+ }
113
+ if (funcData.output !== undefined && funcData.output !== null) {
114
+ const output = typeof funcData.output === 'object' ? safeJsonDumps(funcData.output) : String(funcData.output);
115
+ attributes[Constants.GEN_AI_RESPONSE_CONTENT_KEY] = output;
116
+ }
117
+ return attributes;
118
+ }
119
+ /**
120
+ * Get attributes from MCP list tools span data
121
+ */
122
+ export function getAttributesFromMCPListToolsSpanData(data) {
123
+ const attributes = {};
124
+ const mcpData = data;
125
+ if (mcpData.result) {
126
+ attributes[Constants.GEN_AI_RESPONSE_CONTENT_KEY] = safeJsonDumps(mcpData.result);
127
+ attributes[OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY] = 'application/json';
128
+ }
129
+ return attributes;
130
+ }
131
+ /**
132
+ * Get attributes from response span data
133
+ */
134
+ export function getAttributesFromResponse(response) {
135
+ const attributes = {};
136
+ const resp = response;
137
+ if (resp.model) {
138
+ attributes[OpenTelemetryConstants.GEN_AI_REQUEST_MODEL_KEY] = resp.model;
139
+ }
140
+ if (resp.usage) {
141
+ const usage = resp.usage;
142
+ if (usage.input_tokens !== undefined) {
143
+ attributes[OpenTelemetryConstants.GEN_AI_USAGE_INPUT_TOKENS_KEY] = usage.input_tokens;
144
+ }
145
+ if (usage.output_tokens !== undefined) {
146
+ attributes[OpenTelemetryConstants.GEN_AI_USAGE_OUTPUT_TOKENS_KEY] = usage.output_tokens;
147
+ }
148
+ }
149
+ return attributes;
150
+ }
151
+ /**
152
+ * Get attributes from input data
153
+ */
154
+ export function getAttributesFromInput(input) {
155
+ const attributes = {};
156
+ if (typeof input === 'string') {
157
+ attributes[Constants.GEN_AI_REQUEST_CONTENT_KEY] = input;
158
+ }
159
+ else if (Array.isArray(input)) {
160
+ attributes[Constants.GEN_AI_REQUEST_CONTENT_KEY] = safeJsonDumps(input);
161
+ }
162
+ return attributes;
163
+ }
164
+ /**
165
+ * Get span status from OpenAI Agents SDK span
166
+ */
167
+ export function getSpanStatus(span) {
168
+ if (span.error) {
169
+ const message = span.error.message || span.error.data || 'Unknown error';
170
+ return {
171
+ code: SpanStatusCode.ERROR,
172
+ message: String(message),
173
+ };
174
+ }
175
+ return { code: SpanStatusCode.OK };
176
+ }
177
+ //# sourceMappingURL=Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Wraps the OpenAI Agents SDK tracer to integrate with Agent 365 Observability.
3
+ */
4
+ export { OpenAIAgentsTraceInstrumentor, OpenAIAgentsInstrumentationConfig } from './OpenAIAgentsTraceInstrumentor';
5
+ export { OpenAIAgentsTraceProcessor } from './OpenAIAgentsTraceProcessor';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,6BAA6B,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,9 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ /**
5
+ * Wraps the OpenAI Agents SDK tracer to integrate with Agent 365 Observability.
6
+ */
7
+ export { OpenAIAgentsTraceInstrumentor } from './OpenAIAgentsTraceInstrumentor';
8
+ export { OpenAIAgentsTraceProcessor } from './OpenAIAgentsTraceProcessor';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4DAA4D;AAC5D,iFAAiF;AAEjF;;GAEG;AAEH,OAAO,EAAE,6BAA6B,EAAqC,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}