@deepagents/context 6.1.2 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -1
- package/dist/browser.js +9 -2
- package/dist/browser.js.map +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1187 -516
- package/dist/index.js.map +4 -4
- package/dist/lib/agent.d.ts +78 -37
- package/dist/lib/agent.d.ts.map +1 -1
- package/dist/lib/chat.d.ts +16 -17
- package/dist/lib/chat.d.ts.map +1 -1
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/fragments/plan-shared.d.ts +46 -0
- package/dist/lib/fragments/plan-shared.d.ts.map +1 -0
- package/dist/lib/fragments/plan.d.ts.map +1 -1
- package/dist/lib/fragments/socratic-inquiry.d.ts +4 -0
- package/dist/lib/fragments/socratic-inquiry.d.ts.map +1 -0
- package/dist/lib/fragments/socratic-plan.d.ts +13 -0
- package/dist/lib/fragments/socratic-plan.d.ts.map +1 -0
- package/dist/lib/fragments/socratic.d.ts +2 -5
- package/dist/lib/fragments/socratic.d.ts.map +1 -1
- package/dist/lib/sandbox/agent-os-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/apple-container-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/bash-tool.d.ts +1 -1
- package/dist/lib/sandbox/bash-tool.d.ts.map +1 -1
- package/dist/lib/sandbox/cli-process.d.ts +6 -0
- package/dist/lib/sandbox/cli-process.d.ts.map +1 -1
- package/dist/lib/sandbox/container-engine.d.ts +1 -0
- package/dist/lib/sandbox/container-engine.d.ts.map +1 -1
- package/dist/lib/sandbox/container-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/daytona-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/docker-sandbox.d.ts +7 -0
- package/dist/lib/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/index.d.ts +1 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/microsandbox-sandbox.d.ts +13 -17
- package/dist/lib/sandbox/microsandbox-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/read-file-tool/binary.d.ts +13 -0
- package/dist/lib/sandbox/read-file-tool/binary.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/format.d.ts +17 -0
- package/dist/lib/sandbox/read-file-tool/format.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/image.d.ts +4 -0
- package/dist/lib/sandbox/read-file-tool/image.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/index.d.ts +6 -0
- package/dist/lib/sandbox/read-file-tool/index.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/ooxml.d.ts +4 -0
- package/dist/lib/sandbox/read-file-tool/ooxml.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/pdf.d.ts +4 -0
- package/dist/lib/sandbox/read-file-tool/pdf.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file-tool/text.d.ts +10 -0
- package/dist/lib/sandbox/read-file-tool/text.d.ts.map +1 -0
- package/dist/lib/sandbox/read-file.d.ts +8 -0
- package/dist/lib/sandbox/read-file.d.ts.map +1 -0
- package/dist/lib/sandbox/types.d.ts +19 -5
- package/dist/lib/sandbox/types.d.ts.map +1 -1
- package/dist/lib/sandbox/virtual-sandbox.d.ts.map +1 -1
- package/dist/lib/stream-buffer.d.ts +1 -1
- package/dist/lib/stream-buffer.d.ts.map +1 -1
- package/dist/lib/telemetry/console-telemetry.d.ts +0 -1
- package/dist/lib/telemetry/console-telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry/file/file-telemetry.d.ts +5 -3
- package/dist/lib/telemetry/file/file-telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry/file/index.js +16 -11
- package/dist/lib/telemetry/file/index.js.map +2 -2
- package/dist/lib/telemetry/index.js +3 -4
- package/dist/lib/telemetry/index.js.map +2 -2
- package/dist/lib/telemetry/safe-serialize.d.ts +2 -2
- package/dist/lib/telemetry/safe-serialize.d.ts.map +1 -1
- package/dist/lib/tracing/index.js +4 -4
- package/dist/lib/tracing/index.js.map +2 -2
- package/package.json +9 -8
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/telemetry/redact-telemetry-event.ts", "../../../src/lib/telemetry/create-telemetry-integration.ts", "../../../src/lib/telemetry/safe-serialize.ts", "../../../src/lib/telemetry/console-telemetry.ts"],
|
|
4
|
-
"sourcesContent": ["const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp?: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n includeTimestamp: boolean,\n): TelemetryLogRecord {\n return {\n ...(includeTimestamp ? { timestamp: new Date().toISOString() } : {}),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n normalized.name = error.name;\n normalized.message = error.message;\n if (error.stack != null) normalized.stack = error.stack;\n if (error.cause !== undefined) {\n normalized.cause = normalize(error.cause, ancestors);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n normalized[key] = normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n const prototype = Object.getPrototypeOf(value) as {\n constructor?: { name?: string };\n } | null;\n const typeName = prototype?.constructor?.name;\n if (typeName && typeName !== 'Object') normalized.$type = typeName;\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n normalized[typeof key === 'symbol' ? String(key) : key] =\n normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { createTelemetryIntegration } from './create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from './safe-serialize.ts';\n\nexport interface ConsoleTelemetryOptions {\n includeTimestamp?: boolean;\n pretty?: boolean;\n logger?: Pick<Console, 'log' | 'error'>;\n}\n\nexport function createConsoleTelemetry(\n options: ConsoleTelemetryOptions = {},\n): Telemetry {\n const logger = options.logger ?? console;\n const includeTimestamp = options.includeTimestamp ?? true;\n const indentation = (options.pretty ?? true) ? 2 : undefined;\n const write = (method: 'log' | 'error', event: string, data: unknown) => {\n const record = createTelemetryLogRecord(event, data, includeTimestamp);\n try {\n logger[method](stringifyTelemetryLogRecord(record, indentation));\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n return createTelemetryIntegration(write);\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n): TelemetryLogRecord {\n return {\n timestamp: new Date().toISOString(),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n normalized.name = error.name;\n normalized.message = error.message;\n if (error.stack != null) normalized.stack = error.stack;\n if (error.cause !== undefined) {\n normalized.cause = normalize(error.cause, ancestors);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n normalized[key] = normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n const prototype = Object.getPrototypeOf(value) as {\n constructor?: { name?: string };\n } | null;\n const typeName = prototype?.constructor?.name;\n if (typeName && typeName !== 'Object') normalized.$type = typeName;\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n normalized[typeof key === 'symbol' ? String(key) : key] =\n normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { createTelemetryIntegration } from './create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from './safe-serialize.ts';\n\nexport interface ConsoleTelemetryOptions {\n pretty?: boolean;\n logger?: Pick<Console, 'log' | 'error'>;\n}\n\nexport function createConsoleTelemetry(\n options: ConsoleTelemetryOptions = {},\n): Telemetry {\n const logger = options.logger ?? console;\n const indentation = (options.pretty ?? true) ? 2 : undefined;\n const write = (method: 'log' | 'error', event: string, data: unknown) => {\n const record = createTelemetryLogRecord(event, data);\n try {\n logger[method](stringifyTelemetryLogRecord(record, indentation));\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n return createTelemetryIntegration(write);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export interface TelemetryLogRecord {
|
|
2
|
-
timestamp
|
|
2
|
+
timestamp: string;
|
|
3
3
|
event: string;
|
|
4
4
|
data: unknown;
|
|
5
5
|
}
|
|
6
|
-
export declare function createTelemetryLogRecord(event: string, data: unknown
|
|
6
|
+
export declare function createTelemetryLogRecord(event: string, data: unknown): TelemetryLogRecord;
|
|
7
7
|
export declare function stringifyTelemetryLogRecord(record: TelemetryLogRecord, indentation?: number): string;
|
|
8
8
|
//# sourceMappingURL=safe-serialize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-serialize.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/safe-serialize.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,
|
|
1
|
+
{"version":3,"file":"safe-serialize.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/safe-serialize.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,kBAAkB,CAMpB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAER"}
|
|
@@ -445,7 +445,7 @@ function createOpenAITracesIntegration(options = {}) {
|
|
|
445
445
|
active_tools: event.activeTools,
|
|
446
446
|
provider_options: event.providerOptions
|
|
447
447
|
}),
|
|
448
|
-
...includeSensitive ? { input: normalizeRecordArray(event.messages) } : {}
|
|
448
|
+
...includeSensitive && event.recordInputs !== false ? { input: normalizeRecordArray(event.messages) } : {}
|
|
449
449
|
}
|
|
450
450
|
};
|
|
451
451
|
state.stepSpans.push(span.id);
|
|
@@ -466,7 +466,7 @@ function createOpenAITracesIntegration(options = {}) {
|
|
|
466
466
|
span_data: {
|
|
467
467
|
type: "function",
|
|
468
468
|
name: event.toolCall.toolName,
|
|
469
|
-
...includeSensitive ? {
|
|
469
|
+
...includeSensitive && event.recordInputs !== false ? {
|
|
470
470
|
input: normalizeForJson(event.toolCall.input)
|
|
471
471
|
} : {}
|
|
472
472
|
}
|
|
@@ -494,7 +494,7 @@ function createOpenAITracesIntegration(options = {}) {
|
|
|
494
494
|
span.ended_at = now();
|
|
495
495
|
const data = span.span_data;
|
|
496
496
|
if (event.toolOutput.type === "tool-result") {
|
|
497
|
-
if (includeSensitive) {
|
|
497
|
+
if (includeSensitive && event.recordOutputs !== false) {
|
|
498
498
|
data.output = normalizeForJson(event.toolOutput.output);
|
|
499
499
|
}
|
|
500
500
|
} else {
|
|
@@ -517,7 +517,7 @@ function createOpenAITracesIntegration(options = {}) {
|
|
|
517
517
|
}
|
|
518
518
|
span.ended_at = now();
|
|
519
519
|
const data = span.span_data;
|
|
520
|
-
if (includeSensitive) {
|
|
520
|
+
if (includeSensitive && event.recordOutputs !== false) {
|
|
521
521
|
data.output = normalizeRecordArray(event.response.messages);
|
|
522
522
|
}
|
|
523
523
|
data.usage = normalizeUsage(event.usage);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/tracing/batch-processor.ts", "../../../src/lib/tracing/exporter.ts", "../../../src/lib/tracing/ids.ts", "../../../src/lib/tracing/processor.ts", "../../../src/lib/tracing/serialization.ts", "../../../src/lib/tracing/openai-traces-integration.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTrace = Omit<OpenAITrace, 'metadata'> & {\n metadata?: Record<string, string>;\n};\ntype WireTraceItem = WireTrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction encodeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata == null) return undefined;\n const encoded: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n const result = encodeField(value);\n if (result !== undefined) {\n encoded[key] = result;\n }\n }\n return Object.keys(encoded).length > 0 ? encoded : undefined;\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object === 'trace') {\n const encoded = encodeMetadata(item.metadata);\n const { metadata: _ignored, ...rest } = item;\n return encoded != null ? { ...rest, metadata: encoded } : rest;\n }\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n }\n\n return String(value);\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) =>\n typeof item === 'object' && item != null\n ? (item as Record<string, unknown>)\n : { value: item },\n );\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n }) as Record<string, unknown>;\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n GenerateTextEndEvent,\n GenerateTextStartEvent,\n Telemetry,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n callId: string;\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n callId?: string;\n response?: { id?: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): Telemetry {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const callIdToRun = new Map<string, TraceRunState>();\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n const integration: Telemetry = {\n onStart: async (event) => {\n if (!isGenerateTextStartEvent(event)) {\n return;\n }\n\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n callId: event.callId,\n trace,\n rootSpan,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n callIdToRun.set(event.callId, state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.modelId,\n model_config: normalizeMetadata({\n provider: event.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionEnd: async (event) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as FunctionSpanData;\n if (event.toolOutput.type === 'tool-result') {\n if (includeSensitive) {\n data.output = normalizeForJson(event.toolOutput.output);\n }\n } else {\n span.error = errorToSpanError(event.toolOutput.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepEnd: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as GenerationSpanData;\n if (includeSensitive) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n if (event.response.id != null) {\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onEnd: async (event) => {\n if (!isGenerateTextEndEvent(event)) {\n return;\n }\n\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.usage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n return integration;\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.callId != null) {\n const state = callIdToRun.get(event.callId);\n if (state != null) {\n return state;\n }\n }\n\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n return undefined;\n }\n\n function closeRunState(state: TraceRunState): void {\n callIdToRun.delete(state.callId);\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction isGenerateTextStartEvent(\n event: unknown,\n): event is GenerateTextStartEvent {\n if (event == null || typeof event !== 'object') {\n return false;\n }\n const operationId = (event as { operationId?: unknown }).operationId;\n return operationId === 'ai.generateText' || operationId === 'ai.streamText';\n}\n\nfunction isGenerateTextEndEvent(event: unknown): event is GenerateTextEndEvent {\n return (\n event != null &&\n typeof event === 'object' &&\n 'finalStep' in event &&\n 'steps' in event &&\n 'usage' in event\n );\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeForJson(metadata);\n if (\n normalized == null ||\n typeof normalized !== 'object' ||\n Array.isArray(normalized)\n ) {\n return undefined;\n }\n\n return Object.keys(normalized).length > 0\n ? (normalized as Record<string, unknown>)\n : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in (output as Record<string, unknown>) &&\n typeof (output as Record<string, unknown>).type === 'string'\n ) {\n return (output as Record<string, unknown>).type as string;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n"],
|
|
5
|
-
"mappings": ";AAWO,IAAM,sBAAN,MAAsD;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,SAAsB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EAEZ,YACE,UACA,UAAsC,CAAC,GACvC;AACA,SAAK,YAAY;AACjB,SAAK,gBAAgB,QAAQ,gBAAgB;AAC7C,SAAK,gBAAgB,QAAQ,gBAAgB;AAC7C,SAAK,mBAAmB,QAAQ,mBAAmB;AACnD,SAAK,mBAAmB,QAAQ,mBAAmB;AACnD,SAAK,kBAAkB,KAAK;AAAA,MAC1B;AAAA,MACA,KAAK,MAAM,KAAK,iBAAiB,QAAQ,sBAAsB,IAAI;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,aAAa,KAAK,eAAe,MAAM;AAC9C;AAAA,IACF;AAEA,SAAK,cAAc,YAAY,MAAM;AACnC,WAAK,KAAK,WAAW;AAAA,IACvB,GAAG,KAAK,gBAAgB;AACxB,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA,EAEA,WAAW,OAA0B;AACnC,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEA,UAAU,MAAwB;AAChC,SAAK,SAAS,IAAI;AAAA,EACpB;AAAA,EAEA,MAAM,aAA4B;AAChC,QAAI,KAAK,iBAAiB,MAAM;AAC9B,YAAM,KAAK;AACX;AAAA,IACF;AAEA,QAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,IACF;AAEA,SAAK,gBAAgB,KAAK,OAAO;AAEjC,QAAI;AACF,YAAM,KAAK;AAAA,IACb,UAAE;AACA,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,WAA0B;AAC9B,SAAK,YAAY;AAEjB,QAAI,KAAK,eAAe,MAAM;AAC5B,oBAAc,KAAK,WAAW;AAC9B,WAAK,cAAc;AAAA,IACrB;AAEA,UAAM,KAAK,WAAW;AAAA,EACxB;AAAA,EAEA,SAAS,MAAuB;AAC9B,QAAI,KAAK,OAAO,UAAU,KAAK,eAAe;AAC5C;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,IAAI;AAErB,QAAI,KAAK,OAAO,UAAU,KAAK,iBAAiB;AAC9C,WAAK,KAAK,WAAW;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,SAAwB;AAC5B,WAAO,KAAK,OAAO,SAAS,GAAG;AAC7B,YAAM,QAAQ,KAAK,OAAO,MAAM,GAAG,KAAK,aAAa;AACrD,YAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,YAAY,QAAQ,KAAK,gBAAgB;AAAA,MAC3C;AACA,WAAK,OAAO,OAAO,GAAG,MAAM,MAAM;AAAA,IACpC;AAAA,EACF;AACF;;;ACjGA,IAAM,uBAAuB;AAAA,EAC3B,UAAU;AAAA,EACV,eAAe;AACjB;AAeA,SAAS,iBAAiB,MAA2C;AACnE,SAAO,KAAK,QAAQ;AACtB;AAEA,SAAS,YAAY,OAAoC;AACvD,MAAI,SAAS,KAAM,QAAO;AAC1B,SAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK;AACjE;AAEA,SAAS,eACP,UACoC;AACpC,MAAI,YAAY,KAAM,QAAO;AAC7B,QAAM,UAAkC,CAAC;AACzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,UAAM,SAAS,YAAY,KAAK;AAChC,QAAI,WAAW,QAAW;AACxB,cAAQ,GAAG,IAAI;AAAA,IACjB;AAAA,EACF;AACA,SAAO,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,UAAU;AACrD;AAEA,SAAS,WAAW,MAAgC;AAClD,MAAI,KAAK,WAAW,SAAS;AAC3B,UAAM,UAAU,eAAe,KAAK,QAAQ;AAC5C,UAAM,EAAE,UAAU,UAAU,GAAG,KAAK,IAAI;AACxC,WAAO,WAAW,OAAO,EAAE,GAAG,MAAM,UAAU,QAAQ,IAAI;AAAA,EAC5D;AACA,QAAM,WAAW,KAAK;AACtB,MAAI,CAAC,iBAAiB,QAAQ,GAAG;AAC/B,WAAO,EAAE,GAAG,MAAM,WAAW,SAAS;AAAA,EACxC;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW;AAAA,MACT,GAAG;AAAA,MACH,OAAO,YAAY,SAAS,KAAK;AAAA,MACjC,QAAQ,YAAY,SAAS,MAAM;AAAA,IACrC;AAAA,EACF;AACF;AAEO,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAClC;AAAA,EAET,YAAY,QAAgB,MAAc;AACxC,UAAM,gCAAgC,MAAM,MAAM,IAAI,EAAE;AACxD,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;AAaO,IAAM,uBAAN,MAAsD;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,UAAuC,CAAC,GAAG;AACrD,SAAK,UAAU,QAAQ,UAAU,QAAQ,IAAI,kBAAkB;AAC/D,SAAK,YACH,QAAQ,YACR,GAAG,QAAQ,WAAW,wBAAwB;AAChD,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,WAAW,QAAQ;AACxB,SAAK,cAAc,QAAQ,cAAc;AACzC,SAAK,eAAe,QAAQ,eAAe;AAC3C,SAAK,cAAc,QAAQ,cAAc;AAAA,EAC3C;AAAA,EAEA,MAAM,OAAO,OAAoB,QAAqC;AACpE,QAAI,MAAM,WAAW,EAAG;AACxB,UAAM,SAAS,MAAM,KAAK,eAAe;AACzC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,eAAe,UAAU,MAAM;AAAA,MAC/B,eAAe;AAAA,IACjB;AACA,QAAI,KAAK,eAAe;AACtB,cAAQ,qBAAqB,IAAI,KAAK;AAAA,IACxC;AACA,QAAI,KAAK,UAAU;AACjB,cAAQ,gBAAgB,IAAI,KAAK;AAAA,IACnC;AAEA,UAAM,OAAO,KAAK,UAAU,EAAE,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;AAC3D,UAAM,KAAK,gBAAgB,KAAK,WAAW;AAAA,MACzC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAkC;AACtC,WAAO,OAAO,KAAK,YAAY,aAC3B,MAAM,KAAK,QAAQ,IACnB,KAAK;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,KAAa,MAAsC;AACvE,QAAI;AACJ,aAAS,UAAU,GAAG,UAAU,KAAK,aAAa,WAAW;AAC3D,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,KAAK,IAAI;AACtC,YAAI,SAAS,GAAI,QAAO;AACxB,YAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;AACnD,gBAAM,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACjD,gBAAM,IAAI,kBAAkB,SAAS,QAAQ,IAAI;AAAA,QACnD;AACA,oBAAY,IAAI,MAAM,gBAAgB,SAAS,MAAM,EAAE;AAAA,MACzD,SAAS,OAAO;AACd,YAAI,iBAAiB,mBAAmB;AACtC,gBAAM;AAAA,QACR;AACA,oBAAY;AAAA,MACd;AACA,UAAI,UAAU,KAAK,cAAc,GAAG;AAClC,cAAM,QAAQ,KAAK;AAAA,UACjB,KAAK,eAAe,KAAK;AAAA,UACzB,KAAK;AAAA,QACP;AACA,cAAM,SAAS,SAAS,MAAM,KAAK,OAAO,IAAI;AAC9C,cAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAAA,MAChD;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;;;ACpLA,SAAS,kBAAkB;AAEpB,SAAS,UAAkB;AAChC,SAAO,SAAS,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;AAChD;AAEO,SAAS,SAAiB;AAC/B,SAAO,QAAQ,WAAW,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AAC5D;AAEO,SAAS,UAAkB;AAChC,SAAO,SAAS,WAAW,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AAC7D;;;ACIO,IAAM,0BAAN,MAA0D;AAAA,EACtD;AAAA,EAET,YAAY,YAAgC;AAC1C,SAAK,cAAc,WAAW,OAAO,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,QAAuB;AAC3B,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,OAAmC;AACpD,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,eAAe,KAAK;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,OAAmC;AAClD,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,aAAa,KAAK;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,MAAiC;AACjD,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,cAAc,IAAI;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAiC;AAC/C,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,YAAY,IAAI;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,aAA4B;AAChC,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,aAAa;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,WAA0B;AAC9B,eAAW,aAAa,KAAK,aAAa;AACxC,YAAM,UAAU,WAAW;AAAA,IAC7B;AAAA,EACF;AACF;AAEO,SAAS,uBACd,YAC8B;AAC9B,MAAI,cAAc,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAC,UAAU;AACjE,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,wBAAwB,IAAI;AACvE;;;AC3EO,SAAS,iBAAiB,OAAyB;AACxD,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,MACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,WACjB;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,SAAS;AAAA,EACxB;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO,MAAM,YAAY;AAAA,EAC3B;AAEA,MAAI,iBAAiB,OAAO;AAC1B,WAAO,iBAAiB,KAAK;AAAA,EAC/B;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MACJ,IAAI,CAAC,SAAS,iBAAiB,IAAI,CAAC,EACpC,OAAO,CAAC,SAAS,SAAS,MAAS;AAAA,EACxC;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,aAAsC,CAAC;AAC7C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO;AAAA,MAChC;AAAA,IACF,GAAG;AACD,YAAM,SAAS,iBAAiB,KAAK;AACrC,UAAI,WAAW,QAAW;AACxB,mBAAW,GAAG,IAAI;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK;AACrB;AAEO,SAAS,qBACd,OACuC;AACvC,QAAM,aAAa,iBAAiB,KAAK;AACzC,MAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,SAAO,WAAW;AAAA,IAAI,CAAC,SACrB,OAAO,SAAS,YAAY,QAAQ,OAC/B,OACD,EAAE,OAAO,KAAK;AAAA,EACpB;AACF;AAEO,SAAS,eACd,OACiC;AACjC,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,UAAmC,CAAC;AAE1C,MAAI,gBAAgB,MAAM,iBAAiB,GAAG;AAC5C,YAAQ,sBAAsB,iBAAiB;AAAA,MAC7C,iBAAiB,MAAM,kBAAkB;AAAA,MACzC,mBAAmB,MAAM,kBAAkB;AAAA,MAC3C,oBAAoB,MAAM,kBAAkB;AAAA,IAC9C,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM,kBAAkB,GAAG;AAC7C,YAAQ,uBAAuB,iBAAiB;AAAA,MAC9C,aAAa,MAAM,mBAAmB;AAAA,MACtC,kBAAkB,MAAM,mBAAmB;AAAA,IAC7C,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,OAAO,MAAM;AACrB,YAAQ,MAAM,iBAAiB,MAAM,GAAG;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,cAAc,MAAM;AAAA,IACpB,eAAe,MAAM;AAAA,IACrB,GAAI,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvD;AACF;AAEO,SAAS,iBAAiB,OAAiC;AAChE,MAAI,iBAAiB,OAAO;AAC1B,UAAM,OAAO,iBAAiB;AAAA,MAC5B,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AAED,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,GAAI,OAAO,KAAK,IAAI,EAAE,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,OAAO,KAAK;AAAA,EACvB;AACF;AAEA,SAAS,gBAAgB,OAAqD;AAC5E,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,OAAO,KAAK,EAAE,KAAK,CAAC,UAAU,UAAU,MAAS;AACjE;;;ACpEO,SAAS,8BACd,UAA0C,CAAC,GAChC;AACX,MAAI,QAAQ,IAAI,kCAAkC,KAAK;AACrD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WACJ,QAAQ,YACR,IAAI,qBAAqB;AAAA,IACvB,QAAQ,QAAQ;AAAA,IAChB,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB,cAAc,QAAQ;AAAA,IACtB,SAAS,QAAQ;AAAA,EACnB,CAAC;AAEH,QAAM,YACJ,uBAAuB,QAAQ,SAAS,KACxC,IAAI,oBAAoB,UAAU,QAAQ,KAAK;AAEjD,QAAM,mBACJ,QAAQ,wBACR,QAAQ,IAAI,+CAA+C;AAC7D,QAAM,WAA4B,CAAC;AACnC,QAAM,cAAc,oBAAI,IAA2B;AACnD,QAAM,kBAAkB,oBAAI,IAA2B;AACvD,QAAM,kBAAkB,oBAAI,IAA2B;AAEvD,OAAK,UAAU,QAAQ;AAEvB,QAAM,cAAyB;AAAA,IAC7B,SAAS,OAAO,UAAU;AACxB,UAAI,CAAC,yBAAyB,KAAK,GAAG;AACpC;AAAA,MACF;AAEA,YAAM,QAAqB;AAAA,QACzB,QAAQ;AAAA,QACR,IAAI,QAAQ;AAAA,QACZ,eACE,QAAQ,gBAAgB,MAAM,cAAc;AAAA,QAC9C,UAAU,QAAQ,WAAW;AAAA,QAC7B,UAAU,kBAAkB;AAAA,UAC1B,GAAG,QAAQ;AAAA,QACb,CAAC;AAAA,MACH;AAEA,YAAM,WAAuB;AAAA,QAC3B,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,QACX,UAAU,MAAM;AAAA,QAChB,WAAW;AAAA,QACX,YAAY,IAAI;AAAA,QAChB,WAAW;AAAA,UACT,MAAM;AAAA,UACN,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM,KAAK,IAAI;AAAA,UAChD,aAAa,cAAc,MAAM,MAAM;AAAA,QACzC;AAAA,MACF;AAEA,YAAM,QAAuB;AAAA,QAC3B,QAAQ,MAAM;AAAA,QACd;AAAA,QACA;AAAA,QACA,aAAa,oBAAI,IAAI;AAAA,QACrB,WAAW,CAAC;AAAA,QACZ,WAAW,oBAAI,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;AAAA,QAC5C,eAAe,oBAAI,IAAI;AAAA,MACzB;AAEA,eAAS,KAAK,KAAK;AACnB,kBAAY,IAAI,MAAM,QAAQ,KAAK;AAEnC,YAAM,UAAU,eAAe,KAAK;AACpC,YAAM,UAAU,cAAc,QAAQ;AAAA,IACxC;AAAA,IAEA,aAAa,OAAO,UAAU;AAC5B,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,SAAS,MAAM;AACjB;AAAA,MACF;AAEA,YAAM,OAAmB;AAAA,QACvB,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,QACX,UAAU,MAAM,MAAM;AAAA,QACtB,WAAW,gBAAgB,KAAK;AAAA,QAChC,YAAY,IAAI;AAAA,QAChB,WAAW;AAAA,UACT,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb,cAAc,kBAAkB;AAAA,YAC9B,UAAU,MAAM;AAAA,YAChB,aAAa,MAAM;AAAA,YACnB,cAAc,MAAM;AAAA,YACpB,kBAAkB,MAAM;AAAA,UAC1B,CAAC;AAAA,UACD,GAAI,mBACA,EAAE,OAAO,qBAAqB,MAAM,QAAQ,EAAE,IAC9C,CAAC;AAAA,QACP;AAAA,MACF;AAEA,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,YAAM,UAAU,IAAI,KAAK,IAAI,IAAI;AAEjC,YAAM,UAAU,cAAc,IAAI;AAAA,IACpC;AAAA,IAEA,sBAAsB,OAAO,UAAU;AACrC,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,SAAS,MAAM;AACjB;AAAA,MACF;AAEA,YAAM,OAAmB;AAAA,QACvB,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,QACX,UAAU,MAAM,MAAM;AAAA,QACtB,WAAW,gBAAgB,KAAK;AAAA,QAChC,YAAY,IAAI;AAAA,QAChB,WAAW;AAAA,UACT,MAAM;AAAA,UACN,MAAM,MAAM,SAAS;AAAA,UACrB,GAAI,mBACA;AAAA,YACE,OAAO,iBAAiB,MAAM,SAAS,KAAK;AAAA,UAC9C,IACA,CAAC;AAAA,QACP;AAAA,MACF;AAEA,YAAM,cAAc,IAAI,MAAM,SAAS,YAAY,KAAK,EAAE;AAC1D,sBAAgB,IAAI,MAAM,SAAS,YAAY,KAAK;AACpD,YAAM,UAAU,IAAI,KAAK,IAAI,IAAI;AAEjC,YAAM,UAAU,cAAc,IAAI;AAAA,IACpC;AAAA,IAEA,oBAAoB,OAAO,UAAU;AACnC,YAAM,QACJ,gBAAgB,IAAI,MAAM,SAAS,UAAU,KAC7C,gBAAgB,KAAK;AACvB,UAAI,SAAS,MAAM;AACjB;AAAA,MACF;AAEA,YAAM,KAAK,MAAM,cAAc,IAAI,MAAM,SAAS,UAAU;AAC5D,UAAI,MAAM,MAAM;AACd;AAAA,MACF;AAEA,YAAM,cAAc,OAAO,MAAM,SAAS,UAAU;AACpD,sBAAgB,OAAO,MAAM,SAAS,UAAU;AAEhD,YAAM,OAAO,MAAM,UAAU,IAAI,EAAE;AACnC,UAAI,QAAQ,MAAM;AAChB;AAAA,MACF;AAEA,WAAK,WAAW,IAAI;AAEpB,YAAM,OAAO,KAAK;AAClB,UAAI,MAAM,WAAW,SAAS,eAAe;AAC3C,YAAI,kBAAkB;AACpB,eAAK,SAAS,iBAAiB,MAAM,WAAW,MAAM;AAAA,QACxD;AAAA,MACF,OAAO;AACL,aAAK,QAAQ,iBAAiB,MAAM,WAAW,KAAK;AAAA,MACtD;AAEA,YAAM,UAAU,YAAY,IAAI;AAAA,IAClC;AAAA,IAEA,WAAW,OAAO,UAAU;AAC1B,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,SAAS,MAAM;AACjB;AAAA,MACF;AAEA,YAAM,KAAK,MAAM,UAAU,IAAI;AAC/B,UAAI,MAAM,MAAM;AACd;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,UAAU,IAAI,EAAE;AACnC,UAAI,QAAQ,MAAM;AAChB;AAAA,MACF;AAEA,WAAK,WAAW,IAAI;AAEpB,YAAM,OAAO,KAAK;AAClB,UAAI,kBAAkB;AACpB,aAAK,SAAS,qBAAqB,MAAM,SAAS,QAAQ;AAAA,MAC5D;AACA,WAAK,QAAQ,eAAe,MAAM,KAAK;AACvC,UAAI,MAAM,SAAS,MAAM,MAAM;AAC7B,cAAM,YAAY,IAAI,MAAM,SAAS,EAAE;AACvC,wBAAgB,IAAI,MAAM,SAAS,IAAI,KAAK;AAAA,MAC9C;AAEA,YAAM,UAAU,YAAY,IAAI;AAAA,IAClC;AAAA,IAEA,OAAO,OAAO,UAAU;AACtB,UAAI,CAAC,uBAAuB,KAAK,GAAG;AAClC;AAAA,MACF;AAEA,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,SAAS,MAAM;AACjB;AAAA,MACF;AAEA,UAAI;AACF,eAAO,MAAM,UAAU,SAAS,GAAG;AACjC,gBAAM,aAAa,MAAM,UAAU,IAAI;AACvC,cAAI,cAAc,MAAM;AACtB;AAAA,UACF;AAEA,gBAAM,WAAW,MAAM,UAAU,IAAI,UAAU;AAC/C,cAAI,YAAY,QAAQ,SAAS,YAAY,MAAM;AACjD;AAAA,UACF;AAEA,mBAAS,WAAW,IAAI;AACxB,gBAAM,UAAU,YAAY,QAAQ;AAAA,QACtC;AAEA,cAAM,SAAS,WAAW,IAAI;AAC9B,cAAM,MAAM,WAAW,kBAAkB;AAAA,UACvC,GAAG,MAAM,MAAM;AAAA,UACf,aAAa,eAAe,MAAM,KAAK;AAAA,UACvC,OAAO,MAAM,MAAM;AAAA,UACnB,eAAe,MAAM;AAAA,QACvB,CAAC;AAED,cAAM,UAAU,YAAY,MAAM,QAAQ;AAC1C,cAAM,UAAU,aAAa,MAAM,KAAK;AACxC,cAAM,UAAU,aAAa;AAAA,MAC/B,UAAE;AACA,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAEP,WAAS,gBAAgB,OAAmD;AAC1E,QAAI,MAAM,UAAU,MAAM;AACxB,YAAM,QAAQ,YAAY,IAAI,MAAM,MAAM;AAC1C,UAAI,SAAS,MAAM;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,MAAM,UAAU,MAAM,MAAM;AAC9B,YAAM,QAAQ,gBAAgB,IAAI,MAAM,SAAS,EAAE;AACnD,UAAI,SAAS,MAAM;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,MAAM,UAAU,cAAc,MAAM;AACtC,YAAM,QAAQ,gBAAgB,IAAI,MAAM,SAAS,UAAU;AAC3D,UAAI,SAAS,MAAM;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO;AAAA,IACT;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,SAAS,CAAC;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,OAA4B;AACjD,gBAAY,OAAO,MAAM,MAAM;AAC/B,UAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,QAAI,SAAS,GAAG;AACd,eAAS,OAAO,OAAO,CAAC;AAAA,IAC1B;AAEA,eAAW,cAAc,MAAM,aAAa;AAC1C,sBAAgB,OAAO,UAAU;AAAA,IACnC;AAEA,eAAW,cAAc,MAAM,cAAc,KAAK,GAAG;AACnD,sBAAgB,OAAO,UAAU;AAAA,IACnC;AAAA,EACF;AACF;AAEA,SAAS,yBACP,OACiC;AACjC,MAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;AAC9C,WAAO;AAAA,EACT;AACA,QAAM,cAAe,MAAoC;AACzD,SAAO,gBAAgB,qBAAqB,gBAAgB;AAC9D;AAEA,SAAS,uBAAuB,OAA+C;AAC7E,SACE,SAAS,QACT,OAAO,UAAU,YACjB,eAAe,SACf,WAAW,SACX,WAAW;AAEf;AAEA,SAAS,gBAAgB,OAA8B;AACrD,SAAO,MAAM,UAAU,MAAM,UAAU,SAAS,CAAC,KAAK,MAAM,SAAS;AACvE;AAEA,SAAS,kBACP,UACqC;AACrC,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,iBAAiB,QAAQ;AAC5C,MACE,cAAc,QACd,OAAO,eAAe,YACtB,MAAM,QAAQ,UAAU,GACxB;AACA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK,UAAU,EAAE,SAAS,IACnC,aACD;AACN;AAEA,SAAS,cAAc,QAAqC;AAC1D,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,MACE,OAAO,WAAW,YAClB,UAAW,UACX,OAAQ,OAAmC,SAAS,UACpD;AACA,WAAQ,OAAmC;AAAA,EAC7C;AAEA,MAAI,OAAO,WAAW,YAAY,OAAO,aAAa,QAAQ,MAAM;AAClE,WAAO,OAAO,YAAY;AAAA,EAC5B;AAEA,SAAO,OAAO;AAChB;AAEA,SAAS,MAAc;AACrB,UAAO,oBAAI,KAAK,GAAE,YAAY;AAChC;",
|
|
4
|
+
"sourcesContent": ["import type { TracingExporter, TracingProcessor } from './processor.ts';\nimport type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface BatchTraceProcessorOptions {\n maxQueueSize?: number;\n maxBatchSize?: number;\n scheduleDelayMs?: number;\n exportTriggerRatio?: number;\n exportTimeoutMs?: number;\n}\n\nexport class BatchTraceProcessor implements TracingProcessor {\n readonly #exporter: TracingExporter;\n readonly #maxQueueSize: number;\n readonly #maxBatchSize: number;\n readonly #scheduleDelayMs: number;\n readonly #exportTimeoutMs: number;\n readonly #flushThreshold: number;\n\n #queue: TraceItem[] = [];\n #flushTimer?: NodeJS.Timeout;\n #flushPromise?: Promise<void>;\n #shutdown = false;\n\n constructor(\n exporter: TracingExporter,\n options: BatchTraceProcessorOptions = {},\n ) {\n this.#exporter = exporter;\n this.#maxQueueSize = options.maxQueueSize ?? 8192;\n this.#maxBatchSize = options.maxBatchSize ?? 128;\n this.#scheduleDelayMs = options.scheduleDelayMs ?? 5000;\n this.#exportTimeoutMs = options.exportTimeoutMs ?? 30000;\n this.#flushThreshold = Math.max(\n 1,\n Math.floor(this.#maxQueueSize * (options.exportTriggerRatio ?? 0.7)),\n );\n }\n\n start(): void {\n if (this.#shutdown || this.#flushTimer != null) {\n return;\n }\n\n this.#flushTimer = setInterval(() => {\n void this.forceFlush();\n }, this.#scheduleDelayMs);\n this.#flushTimer.unref?.();\n }\n\n onTraceEnd(trace: OpenAITrace): void {\n this.#enqueue(trace);\n }\n\n onSpanEnd(span: OpenAISpan): void {\n this.#enqueue(span);\n }\n\n async forceFlush(): Promise<void> {\n if (this.#flushPromise != null) {\n await this.#flushPromise;\n return;\n }\n\n if (this.#queue.length === 0) {\n return;\n }\n\n this.#flushPromise = this.#flush();\n\n try {\n await this.#flushPromise;\n } finally {\n this.#flushPromise = undefined;\n }\n }\n\n async shutdown(): Promise<void> {\n this.#shutdown = true;\n\n if (this.#flushTimer != null) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n await this.forceFlush();\n }\n\n #enqueue(item: TraceItem): void {\n if (this.#queue.length >= this.#maxQueueSize) {\n return;\n }\n\n this.#queue.push(item);\n\n if (this.#queue.length >= this.#flushThreshold) {\n void this.forceFlush();\n }\n }\n\n async #flush(): Promise<void> {\n while (this.#queue.length > 0) {\n const batch = this.#queue.slice(0, this.#maxBatchSize);\n await this.#exporter.export(\n batch,\n AbortSignal.timeout(this.#exportTimeoutMs),\n );\n this.#queue.splice(0, batch.length);\n }\n }\n}\n", "import type { TracingExporter } from './processor.ts';\nimport type {\n FunctionSpanData,\n OpenAISpan,\n OpenAITrace,\n SpanData,\n TraceItem,\n TranscriptionSpanData,\n} from './types.ts';\n\ntype StringifiedIOSpan = FunctionSpanData | TranscriptionSpanData;\ntype StringifiedIOSpanType = StringifiedIOSpan['type'];\n\nconst STRINGIFIED_IO_TYPES = {\n function: true,\n transcription: true,\n} as const satisfies Record<StringifiedIOSpanType, true>;\n\ntype WireSpanData =\n | Exclude<SpanData, StringifiedIOSpan>\n | (Omit<StringifiedIOSpan, 'input' | 'output'> & {\n input?: string;\n output?: string;\n });\n\ntype WireSpan = Omit<OpenAISpan, 'span_data'> & { span_data: WireSpanData };\ntype WireTrace = Omit<OpenAITrace, 'metadata'> & {\n metadata?: Record<string, string>;\n};\ntype WireTraceItem = WireTrace | WireSpan;\n\nfunction hasStringifiedIO(data: SpanData): data is StringifiedIOSpan {\n return data.type in STRINGIFIED_IO_TYPES;\n}\n\nfunction encodeField(value: unknown): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nfunction encodeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata == null) return undefined;\n const encoded: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n const result = encodeField(value);\n if (result !== undefined) {\n encoded[key] = result;\n }\n }\n return Object.keys(encoded).length > 0 ? encoded : undefined;\n}\n\nfunction toWireItem(item: TraceItem): WireTraceItem {\n if (item.object === 'trace') {\n const encoded = encodeMetadata(item.metadata);\n const { metadata: _ignored, ...rest } = item;\n return encoded != null ? { ...rest, metadata: encoded } : rest;\n }\n const spanData = item.span_data;\n if (!hasStringifiedIO(spanData)) {\n return { ...item, span_data: spanData };\n }\n return {\n ...item,\n span_data: {\n ...spanData,\n input: encodeField(spanData.input),\n output: encodeField(spanData.output),\n },\n };\n}\n\nexport class OpenAIExportError extends Error {\n readonly status: number;\n\n constructor(status: number, body: string) {\n super(`OpenAI traces export failed (${status}): ${body}`);\n this.name = 'OpenAIExportError';\n this.status = status;\n }\n}\n\nexport interface OpenAITracesExporterOptions {\n apiKey?: string | (() => string | Promise<string>);\n endpoint?: string;\n baseURL?: string;\n organization?: string;\n project?: string;\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nexport class OpenAITracesExporter implements TracingExporter {\n #apiKey: string | (() => string | Promise<string>);\n #endpoint: string;\n #organization?: string;\n #project?: string;\n #maxRetries: number;\n #baseDelayMs: number;\n #maxDelayMs: number;\n\n constructor(options: OpenAITracesExporterOptions = {}) {\n this.#apiKey = options.apiKey ?? process.env.OPENAI_API_KEY ?? '';\n this.#endpoint =\n options.endpoint ??\n `${options.baseURL ?? 'https://api.openai.com'}/v1/traces/ingest`;\n this.#organization = options.organization;\n this.#project = options.project;\n this.#maxRetries = options.maxRetries ?? 3;\n this.#baseDelayMs = options.baseDelayMs ?? 1000;\n this.#maxDelayMs = options.maxDelayMs ?? 30000;\n }\n\n async export(items: TraceItem[], signal?: AbortSignal): Promise<void> {\n if (items.length === 0) return;\n const apiKey = await this.#resolveApiKey();\n if (!apiKey) {\n throw new Error(\n 'OpenAI API key is required. Set OPENAI_API_KEY or pass apiKey option.',\n );\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n 'OpenAI-Beta': 'traces=v1',\n };\n if (this.#organization) {\n headers['OpenAI-Organization'] = this.#organization;\n }\n if (this.#project) {\n headers['OpenAI-Project'] = this.#project;\n }\n\n const body = JSON.stringify({ data: items.map(toWireItem) });\n await this.#fetchWithRetry(this.#endpoint, {\n method: 'POST',\n headers,\n body,\n signal,\n });\n }\n\n async #resolveApiKey(): Promise<string> {\n return typeof this.#apiKey === 'function'\n ? await this.#apiKey()\n : this.#apiKey;\n }\n\n async #fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < this.#maxRetries; attempt++) {\n try {\n const response = await fetch(url, init);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const text = await response.text().catch(() => '');\n throw new OpenAIExportError(response.status, text);\n }\n lastError = new Error(`Server error ${response.status}`);\n } catch (error) {\n if (error instanceof OpenAIExportError) {\n throw error;\n }\n lastError = error;\n }\n if (attempt < this.#maxRetries - 1) {\n const delay = Math.min(\n this.#baseDelayMs * 2 ** attempt,\n this.#maxDelayMs,\n );\n const jitter = delay * (0.9 + Math.random() * 0.2);\n await new Promise((r) => setTimeout(r, jitter));\n }\n }\n throw lastError;\n }\n}\n", "import { randomUUID } from 'node:crypto';\n\nexport function traceId(): string {\n return `trace_${randomUUID().replace(/-/g, '')}`;\n}\n\nexport function spanId(): string {\n return `span_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n\nexport function groupId(): string {\n return `group_${randomUUID().replace(/-/g, '').slice(0, 24)}`;\n}\n", "import type { OpenAISpan, OpenAITrace, TraceItem } from './types.ts';\n\nexport interface TracingExporter {\n export(items: TraceItem[], signal?: AbortSignal): Promise<void>;\n}\n\nexport interface TracingProcessor {\n start?(): Promise<void> | void;\n onTraceStart?(trace: OpenAITrace): Promise<void> | void;\n onTraceEnd?(trace: OpenAITrace): Promise<void> | void;\n onSpanStart?(span: OpenAISpan): Promise<void> | void;\n onSpanEnd?(span: OpenAISpan): Promise<void> | void;\n forceFlush?(): Promise<void> | void;\n shutdown?(): Promise<void> | void;\n}\n\nexport class CompositeTraceProcessor implements TracingProcessor {\n readonly #processors: TracingProcessor[];\n\n constructor(processors: TracingProcessor[]) {\n this.#processors = processors.filter(Boolean);\n }\n\n async start(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.start?.();\n }\n }\n\n async onTraceStart(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceStart?.(trace);\n }\n }\n\n async onTraceEnd(trace: OpenAITrace): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onTraceEnd?.(trace);\n }\n }\n\n async onSpanStart(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanStart?.(span);\n }\n }\n\n async onSpanEnd(span: OpenAISpan): Promise<void> {\n for (const processor of this.#processors) {\n await processor.onSpanEnd?.(span);\n }\n }\n\n async forceFlush(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.forceFlush?.();\n }\n }\n\n async shutdown(): Promise<void> {\n for (const processor of this.#processors) {\n await processor.shutdown?.();\n }\n }\n}\n\nexport function createTracingProcessor(\n processors: TracingProcessor | TracingProcessor[] | undefined,\n): TracingProcessor | undefined {\n if (processors == null) {\n return undefined;\n }\n\n const list = Array.isArray(processors) ? processors : [processors];\n if (list.length === 0) {\n return undefined;\n }\n\n return list.length === 1 ? list[0] : new CompositeTraceProcessor(list);\n}\n", "import type { LanguageModelUsage } from 'ai';\n\nimport type { GenerationUsageData, OpenAISpanError } from './types.ts';\n\nexport function normalizeForJson(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return errorToSpanError(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeForJson(item))\n .filter((item) => item !== undefined);\n }\n\n if (typeof value === 'object') {\n const normalized: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const result = normalizeForJson(entry);\n if (result !== undefined) {\n normalized[key] = result;\n }\n }\n return normalized;\n }\n\n return String(value);\n}\n\nexport function normalizeRecordArray(\n value: unknown,\n): Record<string, unknown>[] | undefined {\n const normalized = normalizeForJson(value);\n if (!Array.isArray(normalized)) {\n return undefined;\n }\n\n return normalized.map((item) =>\n typeof item === 'object' && item != null\n ? (item as Record<string, unknown>)\n : { value: item },\n );\n}\n\nexport function normalizeUsage(\n usage: LanguageModelUsage | undefined,\n): GenerationUsageData | undefined {\n if (usage == null) {\n return undefined;\n }\n\n const details: Record<string, unknown> = {};\n\n if (hasDefinedValue(usage.inputTokenDetails)) {\n details.input_token_details = normalizeForJson({\n no_cache_tokens: usage.inputTokenDetails.noCacheTokens,\n cache_read_tokens: usage.inputTokenDetails.cacheReadTokens,\n cache_write_tokens: usage.inputTokenDetails.cacheWriteTokens,\n });\n }\n\n if (hasDefinedValue(usage.outputTokenDetails)) {\n details.output_token_details = normalizeForJson({\n text_tokens: usage.outputTokenDetails.textTokens,\n reasoning_tokens: usage.outputTokenDetails.reasoningTokens,\n });\n }\n\n if (usage.raw != null) {\n details.raw = normalizeForJson(usage.raw);\n }\n\n return {\n input_tokens: usage.inputTokens,\n output_tokens: usage.outputTokens,\n ...(Object.keys(details).length > 0 ? { details } : {}),\n };\n}\n\nexport function errorToSpanError(error: unknown): OpenAISpanError {\n if (error instanceof Error) {\n const data = normalizeForJson({\n name: error.name,\n stack: error.stack,\n cause: error.cause,\n }) as Record<string, unknown>;\n\n return {\n message: error.message,\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n }\n\n return {\n message: String(error),\n };\n}\n\nfunction hasDefinedValue(value: Record<string, unknown> | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n return Object.values(value).some((entry) => entry !== undefined);\n}\n", "import type {\n GenerateTextEndEvent,\n GenerateTextStartEvent,\n Telemetry,\n} from 'ai';\n\nimport {\n BatchTraceProcessor,\n type BatchTraceProcessorOptions,\n} from './batch-processor.ts';\nimport { OpenAITracesExporter } from './exporter.ts';\nimport { spanId, traceId } from './ids.ts';\nimport { type TracingProcessor, createTracingProcessor } from './processor.ts';\nimport {\n errorToSpanError,\n normalizeForJson,\n normalizeRecordArray,\n normalizeUsage,\n} from './serialization.ts';\nimport type {\n AgentSpanData,\n FunctionSpanData,\n GenerationSpanData,\n OpenAISpan,\n OpenAITrace,\n} from './types.ts';\n\ninterface TraceRunState {\n callId: string;\n trace: OpenAITrace;\n rootSpan: OpenAISpan;\n responseIds: Set<string>;\n stepSpans: string[];\n spansById: Map<string, OpenAISpan>;\n toolCallSpans: Map<string, string>;\n}\n\ninterface ResolvableEvent {\n callId?: string;\n response?: { id?: string };\n toolCall?: { toolCallId: string };\n}\n\nexport interface OpenAITracesIntegrationOptions {\n apiKey?: string | (() => string | Promise<string>);\n baseURL?: string;\n endpoint?: string;\n organization?: string;\n project?: string;\n workflowName?: string;\n groupId?: string;\n metadata?: Record<string, unknown>;\n exporter?: OpenAITracesExporter;\n processor?: TracingProcessor | TracingProcessor[];\n batch?: BatchTraceProcessorOptions;\n includeSensitiveData?: boolean;\n}\n\nexport function createOpenAITracesIntegration(\n options: OpenAITracesIntegrationOptions = {},\n): Telemetry {\n if (process.env.OPENAI_AGENTS_DISABLE_TRACING === '1') {\n return {};\n }\n\n const exporter =\n options.exporter ??\n new OpenAITracesExporter({\n apiKey: options.apiKey,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n organization: options.organization,\n project: options.project,\n });\n\n const processor: TracingProcessor =\n createTracingProcessor(options.processor) ??\n new BatchTraceProcessor(exporter, options.batch);\n\n const includeSensitive =\n options.includeSensitiveData ??\n process.env.OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA !== '0';\n const openRuns: TraceRunState[] = [];\n const callIdToRun = new Map<string, TraceRunState>();\n const responseIdToRun = new Map<string, TraceRunState>();\n const toolCallIdToRun = new Map<string, TraceRunState>();\n\n void processor.start?.();\n\n const integration: Telemetry = {\n onStart: async (event) => {\n if (!isGenerateTextStartEvent(event)) {\n return;\n }\n\n const trace: OpenAITrace = {\n object: 'trace',\n id: traceId(),\n workflow_name:\n options.workflowName ?? event.functionId ?? 'ai-sdk-workflow',\n group_id: options.groupId ?? null,\n metadata: normalizeMetadata({\n ...options.metadata,\n }),\n };\n\n const rootSpan: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: trace.id,\n parent_id: null,\n started_at: now(),\n span_data: {\n type: 'agent',\n name: trace.workflow_name,\n tools: event.tools ? Object.keys(event.tools) : undefined,\n output_type: getOutputType(event.output),\n } satisfies AgentSpanData,\n };\n\n const state: TraceRunState = {\n callId: event.callId,\n trace,\n rootSpan,\n responseIds: new Set(),\n stepSpans: [],\n spansById: new Map([[rootSpan.id, rootSpan]]),\n toolCallSpans: new Map(),\n };\n\n openRuns.push(state);\n callIdToRun.set(event.callId, state);\n\n await processor.onTraceStart?.(trace);\n await processor.onSpanStart?.(rootSpan);\n },\n\n onStepStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'generation',\n model: event.modelId,\n model_config: normalizeMetadata({\n provider: event.provider,\n tool_choice: event.toolChoice,\n active_tools: event.activeTools,\n provider_options: event.providerOptions,\n }),\n ...(includeSensitive && event.recordInputs !== false\n ? { input: normalizeRecordArray(event.messages) }\n : {}),\n } satisfies GenerationSpanData,\n };\n\n state.stepSpans.push(span.id);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionStart: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const span: OpenAISpan = {\n object: 'trace.span',\n id: spanId(),\n trace_id: state.trace.id,\n parent_id: currentParentId(state),\n started_at: now(),\n span_data: {\n type: 'function',\n name: event.toolCall.toolName,\n ...(includeSensitive && event.recordInputs !== false\n ? {\n input: normalizeForJson(event.toolCall.input),\n }\n : {}),\n } satisfies FunctionSpanData,\n };\n\n state.toolCallSpans.set(event.toolCall.toolCallId, span.id);\n toolCallIdToRun.set(event.toolCall.toolCallId, state);\n state.spansById.set(span.id, span);\n\n await processor.onSpanStart?.(span);\n },\n\n onToolExecutionEnd: async (event) => {\n const state =\n toolCallIdToRun.get(event.toolCall.toolCallId) ??\n resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.toolCallSpans.get(event.toolCall.toolCallId);\n if (id == null) {\n return;\n }\n\n state.toolCallSpans.delete(event.toolCall.toolCallId);\n toolCallIdToRun.delete(event.toolCall.toolCallId);\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as FunctionSpanData;\n if (event.toolOutput.type === 'tool-result') {\n if (includeSensitive && event.recordOutputs !== false) {\n data.output = normalizeForJson(event.toolOutput.output);\n }\n } else {\n span.error = errorToSpanError(event.toolOutput.error);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onStepEnd: async (event) => {\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n const id = state.stepSpans.pop();\n if (id == null) {\n return;\n }\n\n const span = state.spansById.get(id);\n if (span == null) {\n return;\n }\n\n span.ended_at = now();\n\n const data = span.span_data as GenerationSpanData;\n if (includeSensitive && event.recordOutputs !== false) {\n data.output = normalizeRecordArray(event.response.messages);\n }\n data.usage = normalizeUsage(event.usage);\n if (event.response.id != null) {\n state.responseIds.add(event.response.id);\n responseIdToRun.set(event.response.id, state);\n }\n\n await processor.onSpanEnd?.(span);\n },\n\n onEnd: async (event) => {\n if (!isGenerateTextEndEvent(event)) {\n return;\n }\n\n const state = resolveRunState(event);\n if (state == null) {\n return;\n }\n\n try {\n while (state.stepSpans.length > 0) {\n const openStepId = state.stepSpans.pop();\n if (openStepId == null) {\n continue;\n }\n\n const openStep = state.spansById.get(openStepId);\n if (openStep == null || openStep.ended_at != null) {\n continue;\n }\n\n openStep.ended_at = now();\n await processor.onSpanEnd?.(openStep);\n }\n\n state.rootSpan.ended_at = now();\n state.trace.metadata = normalizeMetadata({\n ...state.trace.metadata,\n total_usage: normalizeUsage(event.usage),\n steps: event.steps.length,\n finish_reason: event.finishReason,\n });\n\n await processor.onSpanEnd?.(state.rootSpan);\n await processor.onTraceEnd?.(state.trace);\n await processor.forceFlush?.();\n } finally {\n closeRunState(state);\n }\n },\n };\n\n return integration;\n\n function resolveRunState(event: ResolvableEvent): TraceRunState | undefined {\n if (event.callId != null) {\n const state = callIdToRun.get(event.callId);\n if (state != null) {\n return state;\n }\n }\n\n if (event.response?.id != null) {\n const state = responseIdToRun.get(event.response.id);\n if (state != null) {\n return state;\n }\n }\n\n if (event.toolCall?.toolCallId != null) {\n const state = toolCallIdToRun.get(event.toolCall.toolCallId);\n if (state != null) {\n return state;\n }\n }\n\n if (openRuns.length === 0) {\n return undefined;\n }\n if (openRuns.length === 1) {\n return openRuns[0];\n }\n\n return undefined;\n }\n\n function closeRunState(state: TraceRunState): void {\n callIdToRun.delete(state.callId);\n const index = openRuns.indexOf(state);\n if (index >= 0) {\n openRuns.splice(index, 1);\n }\n\n for (const responseId of state.responseIds) {\n responseIdToRun.delete(responseId);\n }\n\n for (const toolCallId of state.toolCallSpans.keys()) {\n toolCallIdToRun.delete(toolCallId);\n }\n }\n}\n\nfunction isGenerateTextStartEvent(\n event: unknown,\n): event is GenerateTextStartEvent {\n if (event == null || typeof event !== 'object') {\n return false;\n }\n const operationId = (event as { operationId?: unknown }).operationId;\n return operationId === 'ai.generateText' || operationId === 'ai.streamText';\n}\n\nfunction isGenerateTextEndEvent(event: unknown): event is GenerateTextEndEvent {\n return (\n event != null &&\n typeof event === 'object' &&\n 'finalStep' in event &&\n 'steps' in event &&\n 'usage' in event\n );\n}\n\nfunction currentParentId(state: TraceRunState): string {\n return state.stepSpans[state.stepSpans.length - 1] ?? state.rootSpan.id;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata == null) {\n return undefined;\n }\n\n const normalized = normalizeForJson(metadata);\n if (\n normalized == null ||\n typeof normalized !== 'object' ||\n Array.isArray(normalized)\n ) {\n return undefined;\n }\n\n return Object.keys(normalized).length > 0\n ? (normalized as Record<string, unknown>)\n : undefined;\n}\n\nfunction getOutputType(output: unknown): string | undefined {\n if (output == null) {\n return undefined;\n }\n\n if (\n typeof output === 'object' &&\n 'type' in (output as Record<string, unknown>) &&\n typeof (output as Record<string, unknown>).type === 'string'\n ) {\n return (output as Record<string, unknown>).type as string;\n }\n\n if (typeof output === 'object' && output.constructor?.name != null) {\n return output.constructor.name;\n }\n\n return typeof output;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepagents/context",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -58,10 +58,11 @@
|
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@ai-sdk/groq": "^4.0.
|
|
62
|
-
"@ai-sdk/provider": "^4.0.
|
|
63
|
-
"@
|
|
64
|
-
"
|
|
61
|
+
"@ai-sdk/groq": "^4.0.35",
|
|
62
|
+
"@ai-sdk/provider": "^4.0.9",
|
|
63
|
+
"@ai-sdk/provider-utils": "^5.0.34",
|
|
64
|
+
"@deepagents/agent": "7.0.1",
|
|
65
|
+
"ai": "^7.0.85",
|
|
65
66
|
"chalk": "^5.6.2",
|
|
66
67
|
"dedent": "^1.7.2",
|
|
67
68
|
"fast-glob": "^3.3.3",
|
|
@@ -73,21 +74,21 @@
|
|
|
73
74
|
"tiny-tfidf": "^1.0.0",
|
|
74
75
|
"yaml": "^2.9.0",
|
|
75
76
|
"zod": "^4.4.3",
|
|
76
|
-
"@ai-sdk/openai": "^4.0.
|
|
77
|
+
"@ai-sdk/openai": "^4.0.52"
|
|
77
78
|
},
|
|
78
79
|
"devDependencies": {
|
|
79
80
|
"@daytona/sdk": "^0.198.0",
|
|
80
81
|
"@types/debug": "^4.1.13",
|
|
81
82
|
"@types/mssql": "^12.3.0",
|
|
82
83
|
"@types/pg": "^8.20.0",
|
|
83
|
-
"microsandbox": "^0.6.
|
|
84
|
+
"microsandbox": "^0.6.15",
|
|
84
85
|
"nock": "^14.0.16"
|
|
85
86
|
},
|
|
86
87
|
"peerDependencies": {
|
|
87
88
|
"@daytona/sdk": "^0.198.0",
|
|
88
89
|
"@rivet-dev/agent-os-common": "^0.0.260331072558",
|
|
89
90
|
"@rivet-dev/agent-os-core": ">=0.1.1",
|
|
90
|
-
"microsandbox": "^0.6.
|
|
91
|
+
"microsandbox": "^0.6.15",
|
|
91
92
|
"mssql": "^12.7.0",
|
|
92
93
|
"pg": "^8.22.0"
|
|
93
94
|
},
|