UNPKG

@openai/agents-openai

Version:

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

86 lines 3.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAITracingExporter = void 0; exports.setDefaultOpenAITracingExporter = setDefaultOpenAITracingExporter; const agents_core_1 = require("@openai/agents-core"); const defaults_1 = require("./defaults.js"); const logger_1 = __importDefault(require("./logger.js")); /** * A tracing exporter that exports traces to OpenAI's tracing API. */ class OpenAITracingExporter { #options; constructor(options = {}) { this.#options = { apiKey: options.apiKey ?? undefined, organization: options.organization ?? '', project: options.project ?? '', endpoint: options.endpoint ?? 'https://api.openai.com/v1/traces/ingest', maxRetries: options.maxRetries ?? 3, baseDelay: options.baseDelay ?? 1000, maxDelay: options.maxDelay ?? 30000, }; } async export(items, signal) { const apiKey = this.#options.apiKey ?? (0, defaults_1.getTracingExportApiKey)(); if (!apiKey) { logger_1.default.error('No API key provided for OpenAI tracing exporter. Exports will be skipped'); return; } const payload = { data: items.map((items) => items.toJSON()).filter((item) => !!item), }; let attempts = 0; let delay = this.#options.baseDelay; while (attempts < this.#options.maxRetries) { try { const response = await fetch(this.#options.endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}`, 'OpenAI-Beta': 'traces=v1', ...defaults_1.HEADERS, }, body: JSON.stringify(payload), signal, }); if (response.ok) { logger_1.default.debug(`Exported ${payload.data.length} items`); return; } if (response.status >= 400 && response.status < 500) { logger_1.default.error(`[non-fatal] Tracing client error ${response.status}: ${await response.text()}`); return; } logger_1.default.warn(`[non-fatal] Tracing: server error ${response.status}, retrying.`); } catch (error) { logger_1.default.error('[non-fatal] Tracing: request failed: ', error); } if (signal?.aborted) { logger_1.default.error('Tracing: request aborted'); return; } const sleepTime = delay + Math.random() * 0.1 * delay; // 10% jitter await new Promise((resolve) => setTimeout(resolve, sleepTime)); delay = Math.min(delay * 2, this.#options.maxDelay); attempts++; } logger_1.default.error(`Tracing: failed to export traces after ${this.#options.maxRetries} attempts`); } } exports.OpenAITracingExporter = OpenAITracingExporter; /** * Sets the OpenAI Tracing exporter as the default exporter with a BatchTraceProcessor handling the * traces */ function setDefaultOpenAITracingExporter() { const exporter = new OpenAITracingExporter(); const processor = new agents_core_1.BatchTraceProcessor(exporter); (0, agents_core_1.setTraceProcessors)([processor]); } //# sourceMappingURL=openaiTracingExporter.js.map