@openai/agents-core
Version:
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
75 lines • 2.46 kB
JavaScript
import { getCurrentTrace, Trace, withCustomSpan, withTraceContext, } from "../../tracing/index.mjs";
import { emitSandboxEvent, serializeSandboxEventError } from "../events.mjs";
export async function withSandboxSpan(name, data, fn, parent) {
const startedAt = Date.now();
await emitSandboxEvent({
type: 'sandbox_operation',
name,
phase: 'start',
timestamp: new Date(startedAt).toISOString(),
data: { ...data },
});
const runWithEvents = async (span) => {
try {
const result = await fn(span);
await emitSandboxEvent({
type: 'sandbox_operation',
name,
phase: 'end',
timestamp: new Date().toISOString(),
data: { ...data },
durationMs: Date.now() - startedAt,
});
return result;
}
catch (error) {
const serializedError = serializeSandboxEventError(error);
recordSandboxSpanError(span, serializedError);
await emitSandboxEvent({
type: 'sandbox_operation',
name,
phase: 'error',
timestamp: new Date().toISOString(),
data: { ...data },
durationMs: Date.now() - startedAt,
error: serializedError,
});
throw error;
}
};
if (!getCurrentTrace() && !parent) {
return await runWithEvents();
}
const runWithSpan = async () => await withCustomSpan(async (span) => await runWithEvents(span), {
data: {
name,
data,
},
}, parent);
if (!getCurrentTrace() && parent) {
const trace = parent instanceof Trace
? parent
: new Trace({
traceId: parent.traceId,
name: 'Agent workflow',
metadata: parent.traceMetadata,
tracingApiKey: parent.tracingApiKey,
});
return await withTraceContext({
trace,
span: parent instanceof Trace ? undefined : parent,
}, runWithSpan);
}
return await runWithSpan();
}
function recordSandboxSpanError(span, error) {
if (!span) {
return;
}
span.spanData.data = {
...span.spanData.data,
error,
error_retryable: error.retryable ?? null,
};
}
//# sourceMappingURL=spans.mjs.map