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