UNPKG

@openai/agents-core

Version:

The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.

75 lines • 2.46 kB
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