@openai/agents-core
Version:
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
202 lines • 6.18 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.NoopSpan = exports.Span = void 0;
const logger_1 = __importStar(require("../logger.js"));
const utils_1 = require("./utils.js");
class Span {
type = 'trace.span';
#data;
#traceId;
#spanId;
#parentId;
#traceMetadata;
#processor;
#startedAt;
#endedAt;
#error;
#tracingApiKey;
#previousSpan;
constructor(options, processor) {
this.#traceId = options.traceId;
this.#spanId = options.spanId ?? (0, utils_1.generateSpanId)();
this.#data = options.data;
this.#processor = processor;
this.#parentId = options.parentId ?? null;
this.#traceMetadata = options.traceMetadata;
this.#error = options.error ?? null;
this.#startedAt = options.startedAt ?? null;
this.#endedAt = options.endedAt ?? null;
this.#tracingApiKey = options.tracingApiKey;
}
get traceId() {
return this.#traceId;
}
get spanData() {
return this.#data;
}
get traceMetadata() {
return this.#traceMetadata;
}
get spanId() {
return this.#spanId;
}
get parentId() {
return this.#parentId;
}
get previousSpan() {
return this.#previousSpan;
}
set previousSpan(span) {
this.#previousSpan = span;
}
start() {
if (this.#startedAt) {
logger_1.default.warn('Span already started');
return;
}
this.#startedAt = (0, utils_1.timeIso)();
void this.#processor.onSpanStart(this).catch((error) => {
(0, logger_1.logModelAndToolActionError)(logger_1.default, 'Tracing processor failed during span start', error);
});
}
end() {
if (this.#endedAt) {
if (logger_1.default.dontLogModelData || logger_1.default.dontLogToolData) {
logger_1.default.debug('Span already finished. Span data is redacted.');
}
else {
logger_1.default.debug('Span already finished', this.spanData);
}
return;
}
this.#endedAt = (0, utils_1.timeIso)();
void this.#processor.onSpanEnd(this).catch((error) => {
(0, logger_1.logModelAndToolActionError)(logger_1.default, 'Tracing processor failed during span end', error);
});
}
setError(error) {
this.#error = error;
}
get error() {
return this.#error;
}
get startedAt() {
return this.#startedAt;
}
get endedAt() {
return this.#endedAt;
}
get tracingApiKey() {
return this.#tracingApiKey;
}
clone() {
const span = new Span({
traceId: this.traceId,
spanId: this.spanId,
parentId: this.parentId ?? undefined,
data: this.spanData,
traceMetadata: this.traceMetadata,
startedAt: this.#startedAt ?? undefined,
endedAt: this.#endedAt ?? undefined,
error: this.#error ?? undefined,
tracingApiKey: this.#tracingApiKey,
}, this.#processor);
span.previousSpan = this.previousSpan?.clone();
return span;
}
toJSON() {
return {
object: this.type,
id: this.spanId,
trace_id: this.traceId,
parent_id: this.parentId,
started_at: this.startedAt,
ended_at: this.endedAt,
span_data: (0, utils_1.removePrivateFields)(serializeSpanData(this.spanData)),
error: this.error,
};
}
}
exports.Span = Span;
function serializeSpanData(spanData) {
if (spanData.type === 'task') {
return {
type: 'custom',
name: 'task',
data: {
sdk_span_type: 'task',
name: spanData.name,
...(spanData.usage ? { usage: spanData.usage } : {}),
},
};
}
if (spanData.type === 'turn') {
return {
type: 'custom',
name: 'turn',
data: {
sdk_span_type: 'turn',
turn: spanData.turn,
agent_name: spanData.agent_name,
...(spanData.usage ? { usage: spanData.usage } : {}),
},
};
}
return spanData;
}
class NoopSpan extends Span {
constructor(data, processor) {
super({
traceId: utils_1.NOOP_TRACE_OR_SPAN_ID,
spanId: utils_1.NOOP_TRACE_OR_SPAN_ID,
data,
}, processor);
}
start() {
return;
}
end() {
return;
}
setError() {
return;
}
toJSON() {
return null;
}
}
exports.NoopSpan = NoopSpan;
//# sourceMappingURL=spans.js.map