UNPKG

@openai/agents-core

Version:

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

82 lines 3.12 kB
const BYTE_PREVIEW_LIMIT = 20; export function toSmartString(value) { // Produce a human-friendly string representation while preserving enough detail for debugging workflows. if (value === null || value === undefined) { return String(value); } if (isArrayBufferLike(value)) { return formatByteArray(new Uint8Array(value)); } if (isArrayBufferView(value)) { const view = value; return formatByteArray(new Uint8Array(view.buffer, view.byteOffset, view.byteLength)); } if (typeof value === 'string') { return value; } if (typeof value === 'object') { try { return JSON.stringify(value, smartStringReplacer); } catch (_e) { return '[object with circular references]'; } } return String(value); } export function isArrayBufferLike(value) { // Detect raw ArrayBuffer-backed payloads so callers can generate full previews rather than truncated hashes. if (value instanceof ArrayBuffer) { return true; } const sharedArrayBufferCtor = globalThis.SharedArrayBuffer; return Boolean(sharedArrayBufferCtor && value instanceof sharedArrayBufferCtor); } export function isArrayBufferView(value) { // Treat typed array views as binary data for consistent serialization. return typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(value); } export function isSerializedBufferSnapshot(value) { // Support serialized Buffer snapshots (e.g., from JSON.parse) emitted by some tool outputs. return (typeof value === 'object' && value !== null && value.type === 'Buffer' && Array.isArray(value.data)); } export function isNodeBuffer(value) { // Detect runtime Buffers without importing node-specific shims, handling browser builds gracefully. const bufferCtor = globalThis.Buffer; return Boolean(bufferCtor && typeof bufferCtor.isBuffer === 'function' && bufferCtor.isBuffer(value)); } function formatByteArray(bytes) { if (bytes.length === 0) { return '[byte array (0 bytes)]'; } const previewLength = Math.min(bytes.length, BYTE_PREVIEW_LIMIT); const previewParts = []; for (let i = 0; i < previewLength; i++) { previewParts.push(formatByte(bytes[i])); } const ellipsis = bytes.length > BYTE_PREVIEW_LIMIT ? ' …' : ''; const preview = previewParts.join(' '); return `[byte array ${preview}${ellipsis} (${bytes.length} bytes)]`; } function formatByte(byte) { return `0x${byte.toString(16).padStart(2, '0')}`; } function smartStringReplacer(_key, nestedValue) { if (isArrayBufferLike(nestedValue)) { return formatByteArray(new Uint8Array(nestedValue)); } if (isArrayBufferView(nestedValue)) { const view = nestedValue; return formatByteArray(new Uint8Array(view.buffer, view.byteOffset, view.byteLength)); } if (isSerializedBufferSnapshot(nestedValue)) { return formatByteArray(Uint8Array.from(nestedValue.data)); } return nestedValue; } //# sourceMappingURL=smartString.mjs.map