@bitfab/sdk 0.76.4 → 0.76.6
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/dist/{autoTrace-pZKu5Nk2.cjs → autoTrace-B0HsiBQB.cjs} +37 -2
- package/dist/autoTrace-B0HsiBQB.cjs.map +1 -0
- package/dist/{autoTrace-BgN0zCQf.js → autoTrace-g3y0sLPq.js} +32 -3
- package/dist/autoTrace-g3y0sLPq.js.map +1 -0
- package/dist/autoTrace.cjs +1 -1
- package/dist/autoTrace.js +1 -1
- package/dist/{babelPlugin-tupc_WZS.js → babelPlugin-398AO0eD.js} +6 -2
- package/dist/babelPlugin-398AO0eD.js.map +1 -0
- package/dist/{babelPlugin-C4ERQ8DW.cjs → babelPlugin-Btzkfl62.cjs} +6 -2
- package/dist/babelPlugin-Btzkfl62.cjs.map +1 -0
- package/dist/{http-Dw6XzN7P.cjs → http-C6oeysq-.cjs} +18 -4
- package/dist/http-C6oeysq-.cjs.map +1 -0
- package/dist/{http-CQFVgQ4S.js → http-DZlsxUgc.js} +18 -4
- package/dist/http-DZlsxUgc.js.map +1 -0
- package/dist/{index-DCLbAcum.d.cts → index-DjGNdF9p.d.cts} +58 -2
- package/dist/{index-DCLbAcum.d.ts → index-DjGNdF9p.d.ts} +58 -2
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/node.cjs +3 -3
- package/dist/node.d.cts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +3 -3
- package/dist/{registryCommand-M1u4H9PI.js → registryCommand-UEUDL6JV.js} +29 -1
- package/dist/registryCommand-UEUDL6JV.js.map +1 -0
- package/dist/replayCli.js +1 -1
- package/dist/seedCli.js +1 -1
- package/dist/{src-C9V1wPM_.cjs → src-CI_xliRE.cjs} +11 -5
- package/dist/src-CI_xliRE.cjs.map +1 -0
- package/dist/{src-CFUOdE8n.js → src-DIJP4CNn.js} +11 -5
- package/dist/{src-CFUOdE8n.js.map → src-DIJP4CNn.js.map} +1 -1
- package/dist/transform/babel.cjs +1 -1
- package/dist/transform/babel.js +1 -1
- package/dist/transform/loaderRuntime.cjs +2 -2
- package/dist/transform/loaderRuntime.js +2 -2
- package/dist/transform/nodeLoader.js +5 -1
- package/dist/transform/nodeLoader.js.map +1 -1
- package/dist/transform/swc.cjs +1 -1
- package/dist/transform/swc.js +1 -1
- package/dist/transform/unplugin.cjs +2 -2
- package/dist/transform/unplugin.js +2 -2
- package/dist/{transform-mb6EwHsJ.js → transform-BBlyY-tA.js} +2 -2
- package/dist/{transform-mb6EwHsJ.js.map → transform-BBlyY-tA.js.map} +1 -1
- package/dist/{transform-CcNCVr8A.cjs → transform-CclhVghC.cjs} +2 -2
- package/dist/{transform-CcNCVr8A.cjs.map → transform-CclhVghC.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/autoTrace-BgN0zCQf.js.map +0 -1
- package/dist/autoTrace-pZKu5Nk2.cjs.map +0 -1
- package/dist/babelPlugin-C4ERQ8DW.cjs.map +0 -1
- package/dist/babelPlugin-tupc_WZS.js.map +0 -1
- package/dist/http-CQFVgQ4S.js.map +0 -1
- package/dist/http-Dw6XzN7P.cjs.map +0 -1
- package/dist/registryCommand-M1u4H9PI.js.map +0 -1
- package/dist/src-C9V1wPM_.cjs.map +0 -1
|
@@ -591,6 +591,21 @@ function geminiUsage(body, response) {
|
|
|
591
591
|
reasoningTokens: thoughts
|
|
592
592
|
};
|
|
593
593
|
}
|
|
594
|
+
function isGeminiEmbeddingResponse(response) {
|
|
595
|
+
return Array.isArray(field(response, "embeddings"));
|
|
596
|
+
}
|
|
597
|
+
function geminiEmbeddingPrompt(body) {
|
|
598
|
+
return renderedPrompt(geminiEntries(field(body, "contents")));
|
|
599
|
+
}
|
|
600
|
+
function geminiEmbeddingUsage(body, response) {
|
|
601
|
+
const embeddings = field(response, "embeddings");
|
|
602
|
+
const inputTokens = sumOfPresent((Array.isArray(embeddings) ? embeddings : []).map((embedding) => numberField(field(embedding, "statistics"), "tokenCount")));
|
|
603
|
+
return {
|
|
604
|
+
model: geminiModel(body, response),
|
|
605
|
+
inputTokens,
|
|
606
|
+
outputTokens: inputTokens === void 0 ? void 0 : 0
|
|
607
|
+
};
|
|
608
|
+
}
|
|
594
609
|
function geminiChunkText(chunk) {
|
|
595
610
|
const candidates = field(chunk, "candidates");
|
|
596
611
|
return Array.isArray(candidates) ? geminiContentText(field(candidates[0], "content")) ?? "" : "";
|
|
@@ -701,6 +716,19 @@ const GEMINI = {
|
|
|
701
716
|
usage: geminiUsage,
|
|
702
717
|
streamSummary: geminiStreamSummary
|
|
703
718
|
};
|
|
719
|
+
const GEMINI_EMBEDDINGS = {
|
|
720
|
+
key: "gemini-embeddings",
|
|
721
|
+
provider: "gemini",
|
|
722
|
+
library: "@google/genai",
|
|
723
|
+
endpoint: "models",
|
|
724
|
+
methods: ["embedContent"],
|
|
725
|
+
streamMethods: [],
|
|
726
|
+
streamEvents: [],
|
|
727
|
+
matchesReceiver: isGeminiModels,
|
|
728
|
+
isResponse: isGeminiEmbeddingResponse,
|
|
729
|
+
prompt: geminiEmbeddingPrompt,
|
|
730
|
+
usage: geminiEmbeddingUsage
|
|
731
|
+
};
|
|
704
732
|
const CLIENT_CALL_PROVIDERS = [
|
|
705
733
|
OPENROUTER,
|
|
706
734
|
OPENAI_CHAT,
|
|
@@ -709,7 +737,8 @@ const CLIENT_CALL_PROVIDERS = [
|
|
|
709
737
|
OPENAI_TRANSCRIPTIONS,
|
|
710
738
|
ANTHROPIC,
|
|
711
739
|
OPENAI_RESPONSES,
|
|
712
|
-
GEMINI
|
|
740
|
+
GEMINI,
|
|
741
|
+
GEMINI_EMBEDDINGS
|
|
713
742
|
];
|
|
714
743
|
const CLIENT_CALL_PROVIDERS_BY_KEY = new Map(CLIENT_CALL_PROVIDERS.map((provider) => [provider.key, provider]));
|
|
715
744
|
function clientCallProvider(key) {
|
|
@@ -1275,6 +1304,12 @@ Object.defineProperty(exports, "GEMINI", {
|
|
|
1275
1304
|
return GEMINI;
|
|
1276
1305
|
}
|
|
1277
1306
|
});
|
|
1307
|
+
Object.defineProperty(exports, "GEMINI_EMBEDDINGS", {
|
|
1308
|
+
enumerable: true,
|
|
1309
|
+
get: function() {
|
|
1310
|
+
return GEMINI_EMBEDDINGS;
|
|
1311
|
+
}
|
|
1312
|
+
});
|
|
1278
1313
|
Object.defineProperty(exports, "OPENAI_CHAT", {
|
|
1279
1314
|
enumerable: true,
|
|
1280
1315
|
get: function() {
|
|
@@ -1570,4 +1605,4 @@ Object.defineProperty(exports, "writeOnce", {
|
|
|
1570
1605
|
}
|
|
1571
1606
|
});
|
|
1572
1607
|
|
|
1573
|
-
//# sourceMappingURL=autoTrace-
|
|
1608
|
+
//# sourceMappingURL=autoTrace-B0HsiBQB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoTrace-B0HsiBQB.cjs","names":["importOptionalPeer","target"],"sources":["../src/asyncStorage.ts","../src/captureSuppression.ts","../src/warnOnce.ts","../src/langchainRunScope.ts","../src/openaiAgentsSpanContext.ts","../src/streamFinalizationError.ts","../src/clientCalls.ts","../src/autoTrace.ts"],"sourcesContent":["/**\n * Shared AsyncLocalStorage loader.\n *\n * Provides two ways to initialize AsyncLocalStorage:\n *\n * 1. **Synchronous registration** (preferred for Node.js):\n * `asyncStorageNode.ts` calls `registerAsyncLocalStorageClass()` at module\n * evaluation time, so the class is available immediately - no async gap.\n * The `node.ts` entry point imports it before anything else.\n *\n * 2. **Async dynamic import** (fallback for the default entry point):\n * Loads `node:async_hooks` via a bundler-safe dynamic import. This is used\n * by the default `index.ts` entry point so the SDK works in browsers\n * (where the import silently fails) and in Node.js when imported via the\n * default entry point.\n *\n * ## Why the dynamic import looks like this\n *\n * We need to handle three environments:\n *\n * 1. **Pure Node.js** - `import(\"node:async_hooks\")` works natively.\n * 2. **Webpack/Turbopack (Next.js server)** - The bundler processes\n * `import()` calls at build time. The `webpackIgnore` magic comment tells\n * webpack (and turbopack) to emit a native `import()` call instead of\n * trying to resolve it, so Node.js handles it at runtime.\n * 3. **Browsers / Edge** - The `process.versions?.node` guard prevents\n * execution entirely. If it somehow runs, `.catch(() => {})` swallows\n * the failure.\n */\n\nexport interface AsyncLocalStorageLike<T> {\n getStore(): T | undefined\n run<R>(store: T, fn: () => R): R\n}\n\nlet AsyncLocalStorageClass: (new () => AsyncLocalStorageLike<unknown>) | null =\n null\nlet initDone = false\n\n/**\n * Register the AsyncLocalStorage class synchronously.\n *\n * Called by `asyncStorageNode.ts` at module evaluation time so the class\n * is available before any span is created - no async gap, no race condition.\n *\n * Safe to call multiple times; subsequent calls are no-ops.\n */\nexport function registerAsyncLocalStorageClass(\n cls: new () => AsyncLocalStorageLike<unknown>,\n): void {\n if (!AsyncLocalStorageClass) {\n AsyncLocalStorageClass = cls\n }\n initDone = true\n}\n\n/**\n * Assert that AsyncLocalStorage was registered successfully.\n *\n * Called by `node.ts` after importing `asyncStorageNode.ts` to catch\n * import-order bugs at startup rather than silently degrading to the\n * browser fallback (flat spans with no nesting).\n *\n * This should ONLY be called from the Node.js entry point where we\n * know `node:async_hooks` must be available.\n */\nexport function assertAsyncStorageRegistered(): void {\n if (!AsyncLocalStorageClass) {\n console.warn(\n \"Bitfab: AsyncLocalStorage not available - nested span context will not propagate.\",\n )\n }\n}\n\nexport const asyncStorageReady: Promise<void> = (\n typeof process !== \"undefined\" && process.versions?.node\n ? // The join trick hides \"node:async_hooks\" from static analysis so\n // bundlers that ban Node.js built-ins don't fail at build time.\n // webpackIgnore tells webpack/turbopack to emit a native import()\n // so Node.js can resolve the module at runtime.\n import(\n /* webpackIgnore: true */\n [\"node\", \"async_hooks\"].join(\":\")\n )\n .then(\n (mod: {\n AsyncLocalStorage: new () => AsyncLocalStorageLike<unknown>\n }) => {\n registerAsyncLocalStorageClass(mod.AsyncLocalStorage)\n },\n )\n .catch(() => {})\n : Promise.resolve()\n).then(() => {\n initDone = true\n})\n\nexport function isAsyncStorageInitDone(): boolean {\n return initDone\n}\n\nexport function createAsyncLocalStorage<T>(): AsyncLocalStorageLike<T> | null {\n return AsyncLocalStorageClass\n ? (new AsyncLocalStorageClass() as AsyncLocalStorageLike<T>)\n : null\n}\n","interface CaptureSuppressionState {\n depth: number\n}\n\ninterface CaptureSuppressionGlobal {\n __bitfabCaptureSuppressionV1?: CaptureSuppressionState\n}\n\nconst suppressionGlobal = globalThis as unknown as CaptureSuppressionGlobal\nconst suppressionState: CaptureSuppressionState =\n suppressionGlobal.__bitfabCaptureSuppressionV1 ?? { depth: 0 }\nsuppressionGlobal.__bitfabCaptureSuppressionV1 = suppressionState\n\nexport function isCaptureSuppressed(): boolean {\n return suppressionState.depth > 0\n}\n\nexport function runWithCaptureSuppressed<T>(fn: () => T): T {\n suppressionState.depth += 1\n try {\n return fn()\n } finally {\n suppressionState.depth -= 1\n }\n}\n","/**\n * Emit a `console.warn` at most once per distinct `key` for the life of the\n * process.\n *\n * The SDK must NEVER crash a host app, so every failure on the user's path\n * degrades silently (a span is dropped, a call runs untraced, a payload is\n * stubbed). Silent is safe but undebuggable: a user who suddenly has no traces,\n * or sees `<unserializable>` in a span, has no signal as to why. A one-time\n * warning per distinct issue restores that signal without spamming the console\n * from a hot path.\n *\n * Keys should identify the specific degradation (e.g. include the traced\n * function key) so each distinct issue warns once, not just the first one seen.\n */\nconst warned = new Set<string>()\n\nexport function warn(message: string): void {\n try {\n console.warn(`[bitfab] ${message}`)\n } catch {\n // Logging must never crash the host app (e.g. a closed/replaced console).\n }\n}\n\nexport function warnOnce(key: string, message: string): void {\n if (warned.has(key)) {\n return\n }\n warned.add(key)\n warn(message)\n}\n\nexport function writeOnce(\n key: string,\n line: string,\n write: (line: string) => void = console.warn,\n): void {\n if (warned.has(key)) {\n return\n }\n warned.add(key)\n try {\n write(line)\n } catch {}\n}\n\n/** Test-only: clear the dedup set so a warning can fire again. */\nexport function _resetWarnOnce(): void {\n warned.clear()\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { importOptionalPeer } from \"./optionalPeer.js\"\n\nconst RUN_SCOPE_STORAGE_SYMBOL = Symbol.for(\"bitfab.langchainRunScopeStorage\")\nconst SCOPED_GENERATE_SYMBOL = Symbol.for(\"bitfab.langchainScopedGenerate\")\nconst UNSCOPED_RUNS_SYMBOL = Symbol.for(\"bitfab.langchainUnscopedRuns\")\nconst MODEL_CLASSES = [\n {\n specifierParts: [\"@langchain\", \"core\", \"language_models\", \"chat_models\"],\n name: \"BaseChatModel\",\n },\n {\n specifierParts: [\"@langchain\", \"core\", \"language_models\", \"llms\"],\n name: \"BaseLLM\",\n },\n] as const\n\ninterface LangChainRunScope {\n recordedByHandler: boolean\n}\n\ntype Generate = ((...args: unknown[]) => unknown) & {\n [SCOPED_GENERATE_SYMBOL]?: true\n}\n\ntype StreamIterator = ((...args: unknown[]) => AsyncIterator<unknown>) & {\n [SCOPED_GENERATE_SYMBOL]?: true\n}\n\ninterface ModelPrototype {\n generate?: Generate\n _streamIterator?: StreamIterator\n}\n\nlet runScopeStorage: AsyncLocalStorageLike<LangChainRunScope> | null = null\nlet installation: Promise<void> | null = null\n\nfunction storage(): AsyncLocalStorageLike<LangChainRunScope> | null {\n if (runScopeStorage) {\n return runScopeStorage\n }\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[RUN_SCOPE_STORAGE_SYMBOL] as\n | AsyncLocalStorageLike<LangChainRunScope>\n | undefined\n runScopeStorage = existing ?? createAsyncLocalStorage<LangChainRunScope>()\n if (runScopeStorage && !existing) {\n shared[RUN_SCOPE_STORAGE_SYMBOL] = runScopeStorage\n }\n return runScopeStorage\n}\n\nfunction unscopedRuns(): Set<string> {\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[UNSCOPED_RUNS_SYMBOL] as Set<string> | undefined\n if (existing) {\n return existing\n }\n const created = new Set<string>()\n shared[UNSCOPED_RUNS_SYMBOL] = created\n return created\n}\n\nfunction scopedIterator(\n runStorage: AsyncLocalStorageLike<LangChainRunScope>,\n iterator: AsyncIterator<unknown>,\n): AsyncIterableIterator<unknown> {\n const scope: LangChainRunScope = { recordedByHandler: false }\n const inScope = <T>(step: () => Promise<T>): Promise<T> =>\n runStorage.run(scope, step)\n return {\n next: (...args: [] | [unknown]) => inScope(() => iterator.next(...args)),\n return: (value?: unknown) =>\n inScope(() =>\n iterator.return === undefined\n ? Promise.resolve({ done: true as const, value })\n : iterator.return(value),\n ),\n throw: (error?: unknown) =>\n inScope(() =>\n iterator.throw === undefined\n ? Promise.reject(error)\n : iterator.throw(error),\n ),\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\n\nfunction scopeStreamIterator(prototype: ModelPrototype): void {\n const original = prototype._streamIterator\n if (typeof original !== \"function\" || original[SCOPED_GENERATE_SYMBOL]) {\n return\n }\n const scoped: StreamIterator = function (this: unknown, ...args: unknown[]) {\n const runStorage = storage()\n const iterator = original.apply(this, args)\n return runStorage ? scopedIterator(runStorage, iterator) : iterator\n }\n scoped[SCOPED_GENERATE_SYMBOL] = true\n prototype._streamIterator = scoped\n}\n\nfunction scopeGenerate(prototype: ModelPrototype): void {\n const original = prototype.generate\n if (typeof original !== \"function\" || original[SCOPED_GENERATE_SYMBOL]) {\n return\n }\n const scoped: Generate = function (this: unknown, ...args: unknown[]) {\n const runStorage = storage()\n if (!runStorage) {\n return original.apply(this, args)\n }\n return runStorage.run({ recordedByHandler: false }, () =>\n original.apply(this, args),\n )\n }\n scoped[SCOPED_GENERATE_SYMBOL] = true\n prototype.generate = scoped\n}\n\nasync function scopeModelClass(\n specifierParts: readonly string[],\n name: string,\n): Promise<void> {\n try {\n const module =\n await importOptionalPeer<Record<string, unknown>>(specifierParts)\n const modelClass = module[name] as { prototype?: ModelPrototype }\n if (modelClass?.prototype) {\n scopeGenerate(modelClass.prototype)\n scopeStreamIterator(modelClass.prototype)\n }\n } catch {}\n}\n\nexport function installLangChainRunScopes(): Promise<void> {\n installation ??= Promise.all(\n MODEL_CLASSES.map(({ specifierParts, name }) =>\n scopeModelClass(specifierParts, name),\n ),\n ).then(() => undefined)\n return installation\n}\n\nexport function markLangChainRunRecorded(runId: string): void {\n const scope = storage()?.getStore()\n if (scope) {\n scope.recordedByHandler = true\n return\n }\n unscopedRuns().add(runId)\n}\n\nexport function forgetLangChainRun(runId: string): void {\n unscopedRuns().delete(runId)\n}\n\nexport function langChainHandlerRecordsCall(): boolean {\n const scope = storage()?.getStore()\n if (scope) {\n return scope.recordedByHandler\n }\n return unscopedRuns().size > 0\n}\n","const OPENAI_AGENTS_CONTEXT_STORAGE = Symbol.for(\n \"openai.agents.core.asyncLocalStorage\",\n)\nconst MAX_OPENAI_AGENTS_SPAN_CHAIN = 64\nconst MODEL_CALL_SPAN_TYPES = new Set([\"generation\", \"response\"])\n\ninterface OpenAiAgentsSpanLike {\n spanId?: unknown\n traceId?: unknown\n spanData?: { type?: unknown } | null\n previousSpan?: OpenAiAgentsSpanLike | null\n}\n\ninterface OpenAiAgentsContextStore {\n active?: unknown\n span?: OpenAiAgentsSpanLike | null\n}\n\ninterface OpenAiAgentsContextStorage {\n getStore(): OpenAiAgentsContextStore | undefined\n}\n\ninterface OpenAiAgentsSpanState {\n bitfabTraceIds: Map<string, string>\n endedSpanIds: Map<string, Set<string>>\n}\n\ninterface OpenAiAgentsSpanGlobal {\n __bitfabOpenAiAgentsSpansV1?: OpenAiAgentsSpanState\n}\n\nconst spanGlobal = globalThis as unknown as OpenAiAgentsSpanGlobal &\n Record<symbol, unknown>\nconst state: OpenAiAgentsSpanState = spanGlobal.__bitfabOpenAiAgentsSpansV1 ?? {\n bitfabTraceIds: new Map(),\n endedSpanIds: new Map(),\n}\nspanGlobal.__bitfabOpenAiAgentsSpansV1 = state\n\nexport function mapOpenAiAgentsTrace(\n agentsTraceId: string,\n bitfabTraceId: string,\n): void {\n state.bitfabTraceIds.set(agentsTraceId, bitfabTraceId)\n}\n\nexport function unmapOpenAiAgentsTrace(agentsTraceId: string): void {\n state.bitfabTraceIds.delete(agentsTraceId)\n state.endedSpanIds.delete(agentsTraceId)\n}\n\nexport function endOpenAiAgentsSpan(\n agentsTraceId: string,\n spanId: string,\n): void {\n if (!state.bitfabTraceIds.has(agentsTraceId)) {\n return\n }\n const ended = state.endedSpanIds.get(agentsTraceId) ?? new Set<string>()\n ended.add(spanId)\n state.endedSpanIds.set(agentsTraceId, ended)\n}\n\nfunction isOpenAiAgentsContextStorage(\n value: unknown,\n): value is OpenAiAgentsContextStorage {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as { getStore?: unknown }).getStore === \"function\"\n )\n}\n\nfunction currentOpenAiAgentsSpan(): OpenAiAgentsSpanLike | undefined {\n const storage = spanGlobal[OPENAI_AGENTS_CONTEXT_STORAGE]\n if (!isOpenAiAgentsContextStorage(storage)) {\n return undefined\n }\n try {\n const store = storage.getStore()\n return store?.active === true ? (store.span ?? undefined) : undefined\n } catch {\n return undefined\n }\n}\n\nfunction currentOpenAiAgentsSpans(): OpenAiAgentsSpanLike[] {\n const spans: OpenAiAgentsSpanLike[] = []\n let span = currentOpenAiAgentsSpan()\n while (span !== undefined && spans.length < MAX_OPENAI_AGENTS_SPAN_CHAIN) {\n spans.push(span)\n span = span.previousSpan ?? undefined\n }\n return spans\n}\n\nexport function openAiAgentsSpanChain(): string[] {\n if (state.bitfabTraceIds.size === 0) {\n return []\n }\n return currentOpenAiAgentsSpans()\n .map((span) => span.spanId)\n .filter((spanId): spanId is string => typeof spanId === \"string\")\n}\n\nexport function openAiAgentsParentSpanId(\n bitfabTraceId: string,\n enclosingSpanIds: readonly string[] | undefined,\n): string | undefined {\n if (state.bitfabTraceIds.size === 0) {\n return undefined\n }\n for (const span of currentOpenAiAgentsSpans()) {\n if (typeof span.spanId !== \"string\" || typeof span.traceId !== \"string\") {\n return undefined\n }\n if (state.bitfabTraceIds.get(span.traceId) !== bitfabTraceId) {\n return undefined\n }\n if (enclosingSpanIds?.includes(span.spanId)) {\n return undefined\n }\n if (!state.endedSpanIds.get(span.traceId)?.has(span.spanId)) {\n return span.spanId\n }\n }\n return undefined\n}\n\nexport function openAiAgentsModelCallOpen(): boolean {\n if (state.bitfabTraceIds.size === 0) {\n return false\n }\n return currentOpenAiAgentsSpans().some(\n (span) =>\n typeof span.traceId === \"string\" &&\n typeof span.spanId === \"string\" &&\n state.bitfabTraceIds.has(span.traceId) &&\n MODEL_CALL_SPAN_TYPES.has(String(span.spanData?.type)) &&\n !state.endedSpanIds.get(span.traceId)?.has(span.spanId),\n )\n}\n","export class StreamFinalizationError extends Error {\n constructor(\n message: string,\n readonly output: unknown,\n ) {\n super(message)\n this.name = \"StreamFinalizationError\"\n }\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { langChainHandlerRecordsCall } from \"./langchainRunScope.js\"\nimport { openAiAgentsModelCallOpen } from \"./openaiAgentsSpanContext.js\"\nimport { StreamFinalizationError } from \"./streamFinalizationError.js\"\n\nconst OPENROUTER_HOSTNAME = \"openrouter.ai\"\nconst CLIENT_CALL_WATCH_STORAGE_SYMBOL = Symbol.for(\n \"bitfab.clientCallWatchStorage\",\n)\nconst RESPONSE_DONE_EVENTS = [\n \"response.completed\",\n \"response.incomplete\",\n \"response.failed\",\n] as const\nconst TRANSCRIPT_DONE_EVENT = \"transcript.text.done\"\nconst STREAM_END_EVENT = \"end\"\n\nexport type ClientCallEndpoint =\n | \"chat.completions\"\n | \"embeddings\"\n | \"audio.transcriptions\"\n | \"messages\"\n | \"responses\"\n | \"models\"\n\nexport interface ClientCallProvider {\n key: string\n provider: string\n library: string\n endpoint: ClientCallEndpoint\n methods: readonly string[]\n streamMethods: readonly string[]\n streamEvents: readonly string[]\n spanMethods?: Readonly<Record<string, string>>\n matchesReceiver(receiver: unknown): boolean\n isResponse(response: unknown): boolean\n prompt(body: unknown): string | undefined\n usage(body: unknown, response: unknown): Record<string, unknown>\n streamSummary?(events: unknown[]): unknown\n}\n\ninterface ClientCallWatch {\n recorded: boolean\n parent: ClientCallWatch | null\n}\n\ninterface ClientCallSpan {\n addContext(context: Record<string, unknown>): void\n setPrompt(prompt: string): void\n}\n\ninterface PromptEntry {\n role: string\n content: string\n}\n\ninterface ToolCallSlot {\n name?: string\n arguments: string\n}\n\ninterface EventStreamLike {\n on(event: string, listener: (...args: unknown[]) => void): unknown\n readonly errored?: boolean\n readonly aborted?: boolean\n}\n\ninterface IteratorStreamLike {\n iterator: () => AsyncIterator<unknown>\n}\n\nconst responsesRecordedByAutoTrace = new WeakSet<object>()\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nfunction field(value: unknown, name: string): unknown {\n return isRecord(value) ? value[name] : undefined\n}\n\nfunction numberField(value: unknown, name: string): number | undefined {\n const found = field(value, name)\n return typeof found === \"number\" && Number.isFinite(found) ? found : undefined\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value !== \"\" ? value : undefined\n}\n\nfunction presentFields(\n values: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(values).filter(([, value]) => value !== undefined),\n )\n}\n\nfunction sumOfPresent(values: Array<number | undefined>): number | undefined {\n const present = values.filter((value) => value !== undefined)\n return present.length > 0\n ? present.reduce((total, value) => total + value, 0)\n : undefined\n}\n\nfunction textOf(content: unknown): string {\n return typeof content === \"string\" ? content : JSON.stringify(content)\n}\n\nfunction roleEntries(items: unknown[]): PromptEntry[] {\n return items.flatMap((item) => {\n const role = field(item, \"role\")\n if (typeof role !== \"string\") {\n return []\n }\n return [{ role, content: textOf(field(item, \"content\")) }]\n })\n}\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === undefined || value === null\n}\n\nfunction isBlank(content: unknown): boolean {\n return (\n isNil(content) ||\n content === \"\" ||\n (Array.isArray(content) && content.length === 0)\n )\n}\n\nfunction systemEntry(content: unknown): PromptEntry[] {\n return isBlank(content) ? [] : [{ role: \"system\", content: textOf(content) }]\n}\n\nfunction userEntries(content: unknown): PromptEntry[] {\n if (isBlank(content)) {\n return []\n }\n if (\n Array.isArray(content) &&\n content.every((item) => typeof item === \"string\")\n ) {\n return content.map((item) => ({ role: \"user\", content: item }))\n }\n return [{ role: \"user\", content: textOf(content) }]\n}\n\nfunction renderedPrompt(entries: PromptEntry[]): string | undefined {\n return entries.length > 0 ? JSON.stringify(entries) : undefined\n}\n\nfunction modelOf(body: unknown, response: unknown): string | undefined {\n return (\n nonEmptyString(field(response, \"model\")) ??\n nonEmptyString(field(body, \"model\"))\n )\n}\n\nfunction lastMatching(\n items: unknown[],\n matches: (item: unknown) => boolean,\n): unknown {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (matches(items[index])) {\n return items[index]\n }\n }\n return undefined\n}\n\nfunction lastWith(events: unknown[], name: string): unknown {\n return lastMatching(events, (event) => !isNil(field(event, name)))\n}\n\nfunction clientOf(receiver: unknown): unknown {\n try {\n return field(receiver, \"_client\")\n } catch {\n return undefined\n }\n}\n\nfunction clientClassStatic(receiver: unknown, name: string): unknown {\n const client = clientOf(receiver)\n if (!isRecord(client)) {\n return undefined\n }\n try {\n const clientClass: unknown = client.constructor\n return typeof clientClass === \"function\"\n ? (clientClass as unknown as Record<string, unknown>)[name]\n : undefined\n } catch {\n return undefined\n }\n}\n\nfunction isOpenRouterBaseUrl(baseUrl: unknown): boolean {\n if (typeof baseUrl !== \"string\") {\n return false\n }\n try {\n const host = new URL(baseUrl).hostname\n return (\n host === OPENROUTER_HOSTNAME || host.endsWith(`.${OPENROUTER_HOSTNAME}`)\n )\n } catch {\n return false\n }\n}\n\nfunction isOpenRouterResource(receiver: unknown): boolean {\n try {\n return isOpenRouterBaseUrl(field(clientOf(receiver), \"baseURL\"))\n } catch {\n return false\n }\n}\n\nfunction isAnthropicResource(receiver: unknown): boolean {\n return (\n typeof clientClassStatic(receiver, \"AnthropicError\") === \"function\" ||\n typeof clientClassStatic(receiver, \"HUMAN_PROMPT\") === \"string\"\n )\n}\n\nfunction isOpenAIResource(receiver: unknown): boolean {\n return typeof clientClassStatic(receiver, \"OpenAI\") === \"function\"\n}\n\nfunction isGeminiModels(receiver: unknown): boolean {\n try {\n return (\n isRecord(receiver) &&\n isRecord(receiver.apiClient) &&\n typeof receiver.generateContent === \"function\" &&\n typeof receiver.generateContentStream === \"function\"\n )\n } catch {\n return false\n }\n}\n\nfunction isChatCompletion(response: unknown): boolean {\n return isRecord(response) && Array.isArray(response.choices)\n}\n\nfunction chatCompletionPrompt(body: unknown): string | undefined {\n const messages = field(body, \"messages\")\n return Array.isArray(messages)\n ? renderedPrompt(roleEntries(messages))\n : undefined\n}\n\nfunction chatCompletionUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n upstreamProvider: nonEmptyString(field(response, \"provider\")),\n inputTokens: numberField(usage, \"prompt_tokens\"),\n outputTokens: numberField(usage, \"completion_tokens\"),\n cachedInputTokens: numberField(\n field(usage, \"prompt_tokens_details\"),\n \"cached_tokens\",\n ),\n reasoningTokens: numberField(\n field(usage, \"completion_tokens_details\"),\n \"reasoning_tokens\",\n ),\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction chatToolCalls(chunks: unknown[]): unknown[] {\n const slots = new Map<number, ToolCallSlot>()\n for (const chunk of chunks) {\n const delta = field(firstChoice(chunk), \"delta\")\n const toolCalls = field(delta, \"tool_calls\")\n if (!Array.isArray(toolCalls)) {\n continue\n }\n for (const toolCall of toolCalls) {\n const index = numberField(toolCall, \"index\") ?? 0\n const slot = slots.get(index) ?? { arguments: \"\" }\n const fn = field(toolCall, \"function\")\n const name = nonEmptyString(field(fn, \"name\"))\n const args = nonEmptyString(field(fn, \"arguments\"))\n slots.set(index, {\n name: name ?? slot.name,\n arguments: slot.arguments + (args ?? \"\"),\n })\n }\n }\n return [...slots.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, slot]) => ({\n type: \"function\",\n function: { name: slot.name, arguments: slot.arguments },\n }))\n}\n\nfunction firstChoice(chunk: unknown): unknown {\n const choices = field(chunk, \"choices\")\n return Array.isArray(choices) ? choices[0] : undefined\n}\n\nfunction chatStreamSummary(chunks: unknown[]): unknown {\n if (chunks.length === 0) {\n return undefined\n }\n const last = lastWith(chunks, \"usage\") ?? chunks[chunks.length - 1]\n const text = chunks\n .map((chunk) => field(field(firstChoice(chunk), \"delta\"), \"content\"))\n .filter((content): content is string => typeof content === \"string\")\n .join(\"\")\n const finishReason = lastMatching(\n chunks.map((chunk) => field(firstChoice(chunk), \"finish_reason\")),\n (reason) => typeof reason === \"string\",\n )\n const toolCalls = chatToolCalls(chunks)\n return {\n object: \"chat.completion\",\n model: field(last, \"model\"),\n provider: field(last, \"provider\"),\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n },\n finish_reason: finishReason ?? null,\n },\n ],\n usage: field(last, \"usage\"),\n }\n}\n\nfunction isEmbeddingList(response: unknown): boolean {\n return (\n field(response, \"object\") === \"list\" &&\n Array.isArray(field(response, \"data\"))\n )\n}\n\nfunction embeddingPrompt(body: unknown): string | undefined {\n return renderedPrompt(userEntries(field(body, \"input\")))\n}\n\nfunction embeddingUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n const inputTokens = numberField(usage, \"prompt_tokens\")\n return {\n model: modelOf(body, response),\n upstreamProvider: nonEmptyString(field(response, \"provider\")),\n inputTokens,\n outputTokens: inputTokens === undefined ? undefined : 0,\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction isTranscription(response: unknown): boolean {\n return typeof field(response, \"text\") === \"string\"\n}\n\nfunction transcriptionPrompt(body: unknown): string | undefined {\n return renderedPrompt(userEntries(field(body, \"prompt\")))\n}\n\nfunction transcriptionUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n inputTokens: numberField(usage, \"input_tokens\"),\n outputTokens: numberField(usage, \"output_tokens\"),\n audioSeconds: numberField(usage, \"seconds\"),\n }\n}\n\nfunction transcriptionStreamSummary(events: unknown[]): unknown {\n return lastMatching(\n events,\n (event) => field(event, \"type\") === TRANSCRIPT_DONE_EVENT,\n )\n}\n\nfunction isAnthropicMessage(response: unknown): boolean {\n return (\n field(response, \"type\") === \"message\" &&\n Array.isArray(field(response, \"content\"))\n )\n}\n\nfunction anthropicPrompt(body: unknown): string | undefined {\n const messages = field(body, \"messages\")\n return renderedPrompt([\n ...systemEntry(field(body, \"system\")),\n ...(Array.isArray(messages) ? roleEntries(messages) : []),\n ])\n}\n\nfunction anthropicUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n const cacheRead = numberField(usage, \"cache_read_input_tokens\")\n return {\n model: modelOf(body, response),\n inputTokens: sumOfPresent([\n numberField(usage, \"input_tokens\"),\n cacheRead,\n numberField(usage, \"cache_creation_input_tokens\"),\n ]),\n outputTokens: numberField(usage, \"output_tokens\"),\n cachedInputTokens: cacheRead,\n }\n}\n\nfunction anthropicStreamSummary(events: unknown[]): unknown {\n const message = field(\n events.find((event) => field(event, \"type\") === \"message_start\"),\n \"message\",\n )\n if (!isRecord(message)) {\n return undefined\n }\n let usage: Record<string, unknown> = {\n ...(isRecord(message.usage) ? message.usage : {}),\n }\n let stopReason: unknown = null\n const text: string[] = []\n for (const event of events) {\n const type = field(event, \"type\")\n if (type === \"message_delta\") {\n const deltaUsage = field(event, \"usage\")\n usage = {\n ...usage,\n ...(isRecord(deltaUsage) ? presentFields(deltaUsage) : {}),\n }\n stopReason = field(field(event, \"delta\"), \"stop_reason\") ?? stopReason\n }\n if (type === \"content_block_delta\") {\n const deltaText = field(field(event, \"delta\"), \"text\")\n if (typeof deltaText === \"string\") {\n text.push(deltaText)\n }\n }\n }\n return {\n type: \"message\",\n role: \"assistant\",\n model: message.model,\n content: [{ type: \"text\", text: text.join(\"\") }],\n stop_reason: stopReason,\n usage,\n }\n}\n\nfunction isOpenAIResponse(response: unknown): boolean {\n return field(response, \"object\") === \"response\"\n}\n\nfunction openAIResponsesPrompt(body: unknown): string | undefined {\n const input = field(body, \"input\")\n return renderedPrompt([\n ...systemEntry(field(body, \"instructions\")),\n ...(typeof input === \"string\" ? [{ role: \"user\", content: input }] : []),\n ...(Array.isArray(input) ? roleEntries(input) : []),\n ])\n}\n\nfunction openAIResponsesUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n inputTokens: numberField(usage, \"input_tokens\"),\n outputTokens: numberField(usage, \"output_tokens\"),\n cachedInputTokens: numberField(\n field(usage, \"input_tokens_details\"),\n \"cached_tokens\",\n ),\n reasoningTokens: numberField(\n field(usage, \"output_tokens_details\"),\n \"reasoning_tokens\",\n ),\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction openAIResponsesStreamSummary(events: unknown[]): unknown {\n return field(\n lastMatching(events, (event) =>\n RESPONSE_DONE_EVENTS.some((type) => field(event, \"type\") === type),\n ),\n \"response\",\n )\n}\n\nfunction isGeminiResponse(response: unknown): boolean {\n return (\n field(response, \"usageMetadata\") !== undefined ||\n Array.isArray(field(response, \"candidates\"))\n )\n}\n\nfunction geminiContentText(content: unknown): string | undefined {\n if (isNil(content)) {\n return undefined\n }\n if (typeof content === \"string\") {\n return content\n }\n const parts = field(content, \"parts\")\n if (Array.isArray(parts)) {\n const texts = parts.map((part) => field(part, \"text\"))\n if (texts.every((text) => typeof text === \"string\")) {\n return texts.join(\"\")\n }\n }\n const text = field(content, \"text\")\n return typeof text === \"string\" ? text : textOf(content)\n}\n\nfunction geminiEntries(contents: unknown): PromptEntry[] {\n if (isNil(contents)) {\n return []\n }\n const items = Array.isArray(contents) ? contents : [contents]\n return items.map((item) => ({\n role: nonEmptyString(field(item, \"role\")) ?? \"user\",\n content: geminiContentText(item) ?? \"\",\n }))\n}\n\nfunction geminiPrompt(body: unknown): string | undefined {\n return renderedPrompt([\n ...systemEntry(\n geminiContentText(field(field(body, \"config\"), \"systemInstruction\")),\n ),\n ...geminiEntries(field(body, \"contents\")),\n ])\n}\n\nfunction geminiModel(body: unknown, response: unknown): string | undefined {\n const model =\n nonEmptyString(field(response, \"modelVersion\")) ??\n nonEmptyString(field(body, \"model\"))\n return model === undefined\n ? undefined\n : model.slice(model.lastIndexOf(\"/\") + 1)\n}\n\nfunction geminiUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usageMetadata\")\n const thoughts = numberField(usage, \"thoughtsTokenCount\")\n return {\n model: geminiModel(body, response),\n inputTokens: sumOfPresent([\n numberField(usage, \"promptTokenCount\"),\n numberField(usage, \"toolUsePromptTokenCount\"),\n ]),\n outputTokens: sumOfPresent([\n numberField(usage, \"candidatesTokenCount\"),\n thoughts,\n ]),\n cachedInputTokens: numberField(usage, \"cachedContentTokenCount\"),\n reasoningTokens: thoughts,\n }\n}\n\nfunction isGeminiEmbeddingResponse(response: unknown): boolean {\n return Array.isArray(field(response, \"embeddings\"))\n}\n\nfunction geminiEmbeddingPrompt(body: unknown): string | undefined {\n return renderedPrompt(geminiEntries(field(body, \"contents\")))\n}\n\nfunction geminiEmbeddingUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const embeddings = field(response, \"embeddings\")\n const inputTokens = sumOfPresent(\n (Array.isArray(embeddings) ? embeddings : []).map((embedding) =>\n numberField(field(embedding, \"statistics\"), \"tokenCount\"),\n ),\n )\n return {\n model: geminiModel(body, response),\n inputTokens,\n outputTokens: inputTokens === undefined ? undefined : 0,\n }\n}\n\nfunction geminiChunkText(chunk: unknown): string {\n const candidates = field(chunk, \"candidates\")\n return Array.isArray(candidates)\n ? (geminiContentText(field(candidates[0], \"content\")) ?? \"\")\n : \"\"\n}\n\nfunction geminiStreamSummary(chunks: unknown[]): unknown {\n if (chunks.length === 0) {\n return undefined\n }\n const last = lastWith(chunks, \"usageMetadata\") ?? chunks[chunks.length - 1]\n return {\n modelVersion: field(last, \"modelVersion\"),\n text: chunks.map(geminiChunkText).join(\"\"),\n usageMetadata: field(last, \"usageMetadata\"),\n }\n}\n\nexport const OPENROUTER: ClientCallProvider = {\n key: \"openrouter\",\n provider: \"openrouter\",\n library: \"openai\",\n endpoint: \"chat.completions\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: [\"chunk\"],\n spanMethods: { stream: \"create\" },\n matchesReceiver: isOpenRouterResource,\n isResponse: isChatCompletion,\n prompt: chatCompletionPrompt,\n usage: chatCompletionUsage,\n streamSummary: chatStreamSummary,\n}\n\nexport const OPENAI_CHAT: ClientCallProvider = {\n ...OPENROUTER,\n key: \"openai-chat\",\n provider: \"openai\",\n matchesReceiver: isOpenAIResource,\n}\n\nconst OPENROUTER_EMBEDDINGS: ClientCallProvider = {\n key: \"openrouter-embeddings\",\n provider: \"openrouter\",\n library: \"openai\",\n endpoint: \"embeddings\",\n methods: [\"create\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isOpenRouterResource,\n isResponse: isEmbeddingList,\n prompt: embeddingPrompt,\n usage: embeddingUsage,\n}\n\nexport const OPENAI_EMBEDDINGS: ClientCallProvider = {\n ...OPENROUTER_EMBEDDINGS,\n key: \"openai-embeddings\",\n provider: \"openai\",\n matchesReceiver: isOpenAIResource,\n}\n\nexport const OPENAI_TRANSCRIPTIONS: ClientCallProvider = {\n key: \"openai-transcriptions\",\n provider: \"openai\",\n library: \"openai\",\n endpoint: \"audio.transcriptions\",\n methods: [\"create\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isOpenAIResource,\n isResponse: isTranscription,\n prompt: transcriptionPrompt,\n usage: transcriptionUsage,\n streamSummary: transcriptionStreamSummary,\n}\n\nexport const ANTHROPIC: ClientCallProvider = {\n key: \"anthropic\",\n provider: \"anthropic\",\n library: \"@anthropic-ai/sdk\",\n endpoint: \"messages\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: [\"streamEvent\"],\n matchesReceiver: isAnthropicResource,\n isResponse: isAnthropicMessage,\n prompt: anthropicPrompt,\n usage: anthropicUsage,\n streamSummary: anthropicStreamSummary,\n}\n\nexport const OPENAI_RESPONSES: ClientCallProvider = {\n key: \"openai-responses\",\n provider: \"openai\",\n library: \"openai\",\n endpoint: \"responses\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: RESPONSE_DONE_EVENTS,\n spanMethods: { stream: \"create\" },\n matchesReceiver: isOpenAIResource,\n isResponse: isOpenAIResponse,\n prompt: openAIResponsesPrompt,\n usage: openAIResponsesUsage,\n streamSummary: openAIResponsesStreamSummary,\n}\n\nexport const GEMINI: ClientCallProvider = {\n key: \"gemini\",\n provider: \"gemini\",\n library: \"@google/genai\",\n endpoint: \"models\",\n methods: [\"generateContent\"],\n streamMethods: [\"generateContentStream\"],\n streamEvents: [],\n matchesReceiver: isGeminiModels,\n isResponse: isGeminiResponse,\n prompt: geminiPrompt,\n usage: geminiUsage,\n streamSummary: geminiStreamSummary,\n}\n\nexport const GEMINI_EMBEDDINGS: ClientCallProvider = {\n key: \"gemini-embeddings\",\n provider: \"gemini\",\n library: \"@google/genai\",\n endpoint: \"models\",\n methods: [\"embedContent\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isGeminiModels,\n isResponse: isGeminiEmbeddingResponse,\n prompt: geminiEmbeddingPrompt,\n usage: geminiEmbeddingUsage,\n}\n\nconst CLIENT_CALL_PROVIDERS: readonly ClientCallProvider[] = [\n OPENROUTER,\n OPENAI_CHAT,\n OPENROUTER_EMBEDDINGS,\n OPENAI_EMBEDDINGS,\n OPENAI_TRANSCRIPTIONS,\n ANTHROPIC,\n OPENAI_RESPONSES,\n GEMINI,\n GEMINI_EMBEDDINGS,\n]\n\nconst CLIENT_CALL_PROVIDERS_BY_KEY = new Map(\n CLIENT_CALL_PROVIDERS.map((provider) => [provider.key, provider]),\n)\n\nexport function clientCallProvider(\n key: string | undefined,\n): ClientCallProvider | undefined {\n return key === undefined ? undefined : CLIENT_CALL_PROVIDERS_BY_KEY.get(key)\n}\n\nexport function providerForClientCall(\n endpoint: string,\n method: string,\n receiver: unknown,\n): ClientCallProvider | undefined {\n return CLIENT_CALL_PROVIDERS.find(\n (provider) =>\n provider.endpoint === endpoint &&\n (provider.methods.includes(method) ||\n provider.streamMethods.includes(method)) &&\n provider.matchesReceiver(receiver),\n )\n}\n\nexport function clientCallStreams(\n provider: ClientCallProvider,\n method: string,\n body: unknown,\n): boolean {\n return (\n provider.streamMethods.includes(method) || field(body, \"stream\") === true\n )\n}\n\nexport function clientCallContext(\n provider: ClientCallProvider,\n body: unknown,\n response: unknown,\n durationMs: number,\n): Record<string, unknown> {\n return {\n provider: provider.provider,\n ...presentFields(provider.usage(body, response)),\n durationMs,\n }\n}\n\nfunction recordClientCall(\n provider: ClientCallProvider,\n span: ClientCallSpan,\n body: unknown,\n response: unknown,\n durationMs: number,\n): void {\n try {\n const prompt = provider.prompt(body)\n if (prompt !== undefined) {\n span.setPrompt(prompt)\n }\n span.addContext(clientCallContext(provider, body, response, durationMs))\n } catch {}\n}\n\nlet clientCallWatchStorage: AsyncLocalStorageLike<ClientCallWatch> | null = null\n\nfunction watchStorage(): AsyncLocalStorageLike<ClientCallWatch> | null {\n if (clientCallWatchStorage) {\n return clientCallWatchStorage\n }\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[CLIENT_CALL_WATCH_STORAGE_SYMBOL] as\n | AsyncLocalStorageLike<ClientCallWatch>\n | undefined\n clientCallWatchStorage =\n existing ?? createAsyncLocalStorage<ClientCallWatch>()\n if (clientCallWatchStorage && !existing) {\n shared[CLIENT_CALL_WATCH_STORAGE_SYMBOL] = clientCallWatchStorage\n }\n return clientCallWatchStorage\n}\n\nexport function watchClientCall<T>(fn: () => T): {\n watch: ClientCallWatch\n result: T\n} {\n const storage = watchStorage()\n const watch: ClientCallWatch = {\n recorded: false,\n parent: storage?.getStore() ?? null,\n }\n const result = storage ? storage.run(watch, fn) : fn()\n return { watch, result }\n}\n\nfunction markEnclosingWatches(watch: ClientCallWatch): void {\n for (let current = watch.parent; current; current = current.parent) {\n current.recorded = true\n }\n}\n\nfunction markCurrentWatches(): void {\n markEnclosingWatches({\n recorded: true,\n parent: watchStorage()?.getStore() ?? null,\n })\n}\n\nexport function frameworkRecordsClientCall(): boolean {\n return langChainHandlerRecordsCall() || openAiAgentsModelCallOpen()\n}\n\nfunction isRecordedByAutoTrace(response: unknown): boolean {\n return isRecord(response) && responsesRecordedByAutoTrace.has(response)\n}\n\nexport function recordWatchedClientCall(\n provider: ClientCallProvider,\n span: ClientCallSpan,\n watch: ClientCallWatch,\n body: unknown,\n response: unknown,\n durationMs: number,\n): void {\n if (watch.recorded || isRecordedByAutoTrace(response)) {\n markEnclosingWatches(watch)\n return\n }\n if (!provider.isResponse(response)) {\n return\n }\n recordClientCall(provider, span, body, response, durationMs)\n responsesRecordedByAutoTrace.add(response as object)\n markEnclosingWatches(watch)\n}\n\nexport function recordAutoTracedClientCall<T>(\n provider: ClientCallProvider,\n invokeFn: () => T,\n body: unknown,\n span: ClientCallSpan,\n): T {\n const startedAt = Date.now()\n const { watch, result } = watchClientCall(invokeFn)\n const settle = (response: unknown): void => {\n recordWatchedClientCall(\n provider,\n span,\n watch,\n body,\n response,\n Date.now() - startedAt,\n )\n }\n if (result instanceof Promise) {\n return result.then((response) => {\n settle(response)\n return response\n }) as T\n }\n settle(result)\n return result\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return isRecord(value) && typeof value.then === \"function\"\n}\n\nfunction isIteratorStream(value: unknown): value is IteratorStreamLike {\n return isRecord(value) && typeof value.iterator === \"function\"\n}\n\nfunction isEventStream(value: unknown): value is EventStreamLike {\n return isRecord(value) && typeof value.on === \"function\"\n}\n\nfunction isAsyncIterator(value: unknown): value is AsyncIterator<unknown> {\n return isRecord(value) && typeof value.next === \"function\"\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nconst streamRecordingsByCall = new WeakMap<object, ClientCallStreamRecording>()\nconst droppedStreams =\n typeof FinalizationRegistry === \"function\"\n ? new FinalizationRegistry<ClientCallStreamRecording>((recording) =>\n recording.finish(undefined),\n )\n : undefined\n\nexport function sharedClientCallStreamRecording(\n call: object,\n provider: ClientCallProvider,\n body: unknown,\n): ClientCallStreamRecording {\n let recording = streamRecordingsByCall.get(call)\n if (recording === undefined) {\n recording = new ClientCallStreamRecording(provider, body)\n streamRecordingsByCall.set(call, recording)\n }\n return recording\n}\n\nexport class ClientCallStreamRecording {\n readonly done: Promise<unknown>\n private readonly events: unknown[] = []\n private readonly startedAt = Date.now()\n private finished = false\n private observing = false\n private span: ClientCallSpan | undefined\n private resolveDone: (summary: unknown) => void = () => {}\n private rejectDone: (error: unknown) => void = () => {}\n\n constructor(\n private readonly provider: ClientCallProvider,\n private readonly body: unknown,\n ) {\n this.done = new Promise((resolve, reject) => {\n this.resolveDone = resolve\n this.rejectDone = reject\n })\n this.done.catch(() => {})\n }\n\n start<T>(span: ClientCallSpan, invokeFn: () => T): T {\n this.span ??= span\n markCurrentWatches()\n let result: T\n try {\n result = invokeFn()\n } catch (error) {\n this.finish(error)\n throw error\n }\n if (this.observing) {\n return result\n }\n this.observing = true\n if (isThenable(result)) {\n result.then(\n (stream) => this.observe(stream),\n (error: unknown) => this.finish(error),\n )\n } else {\n this.observe(result)\n }\n return result\n }\n\n private observe(stream: unknown): void {\n if (isRecord(stream)) {\n droppedStreams?.register(stream, this)\n }\n try {\n if (isIteratorStream(stream)) {\n const iterator = stream.iterator\n stream.iterator = () => this.observed(iterator.call(stream))\n return\n }\n if (isEventStream(stream)) {\n for (const name of this.provider.streamEvents) {\n stream.on(name, (event: unknown) => {\n this.events.push(event)\n })\n }\n stream.on(STREAM_END_EVENT, () => {\n this.finish(\n stream.errored === true && stream.aborted !== true\n ? new Error(\"The stream failed\")\n : undefined,\n )\n })\n return\n }\n if (isAsyncIterator(stream)) {\n const observed = this.observed({\n next: stream.next.bind(stream),\n return: stream.return?.bind(stream),\n throw: stream.throw?.bind(stream),\n })\n stream.next = observed.next\n stream.return = observed.return\n stream.throw = observed.throw\n return\n }\n } catch {}\n this.finish(undefined)\n }\n\n private observed(\n iterator: AsyncIterator<unknown>,\n ): AsyncIterator<unknown> & AsyncIterable<unknown> {\n const next = async (...args: [] | [unknown]) => {\n try {\n const result = await iterator.next(...args)\n if (result.done === true) {\n this.finish(undefined)\n } else {\n this.events.push(result.value)\n }\n return result\n } catch (error) {\n this.finish(error)\n throw error\n }\n }\n const end = async (value?: unknown) => {\n try {\n return iterator.return === undefined\n ? { done: true as const, value }\n : await iterator.return(value)\n } finally {\n this.finish(undefined)\n }\n }\n const fail = async (error?: unknown) => {\n try {\n if (iterator.throw === undefined) {\n throw error\n }\n return await iterator.throw(error)\n } catch (raised) {\n this.finish(raised)\n throw raised\n }\n }\n const observed = {\n next,\n return: end,\n throw: fail,\n [Symbol.asyncIterator]: () => observed,\n }\n return observed\n }\n\n finish(error: unknown): void {\n if (this.finished) {\n return\n }\n this.finished = true\n let summary: unknown\n try {\n summary =\n this.events.length === 0\n ? undefined\n : this.provider.streamSummary?.(this.events)\n const prompt = this.provider.prompt(this.body)\n if (prompt !== undefined) {\n this.span?.setPrompt(prompt)\n }\n if (!isNil(summary)) {\n this.span?.addContext(\n clientCallContext(\n this.provider,\n this.body,\n summary,\n Date.now() - this.startedAt,\n ),\n )\n }\n } catch {}\n if (error === undefined) {\n this.resolveDone(summary)\n } else {\n this.rejectDone(new StreamFinalizationError(errorText(error), summary))\n }\n }\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { isCaptureSuppressed } from \"./captureSuppression.js\"\nimport {\n type ClientCallProvider,\n clientCallStreams,\n frameworkRecordsClientCall,\n providerForClientCall,\n} from \"./clientCalls.js\"\nimport { warnOnce } from \"./warnOnce.js\"\n\nexport interface AutoTraceFunctionDefinition {\n id: string\n name: string\n file: string\n line: number\n column: number\n async?: boolean\n wrapper?: boolean\n baml?: boolean\n jev?: boolean\n clientCall?: string\n clientCallMethod?: string\n}\n\nexport interface AutoTraceNodeConfiguration {\n functionName: string\n name?: string\n type?: \"llm\" | \"agent\" | \"function\" | \"guardrail\" | \"handoff\" | \"custom\"\n defaultType?: boolean\n capture: boolean\n experimentId?: string\n /** @deprecated Use experimentId. */\n testRunId?: string\n mockOnReplay?: boolean\n replayReusable?: boolean\n // biome-ignore lint/suspicious/noExplicitAny: node finalizers receive the configured function's result, whose type is owned by the caller\n finalize?: (result: any) => unknown | Promise<unknown>\n}\n\nexport interface NestedTraceLink {\n traceFunctionKey: string\n traceId?: string\n rootSpanId?: string\n}\n\nexport interface SpanDetails {\n contexts: Record<string, unknown>[]\n prompt?: string\n}\n\nexport interface AutoTraceEntry {\n context: AutoTraceContext\n depth: number\n spanStack: unknown\n}\n\nexport interface AutoTraceContext {\n readonly traceFunctionKey: string\n invoke<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n entry: AutoTraceEntry,\n spanDetails: SpanDetails,\n nodeConfiguration?: AutoTraceNodeConfiguration,\n ): T\n invokeNestedRoot<T>(\n name: string,\n functionName: string,\n inputs: unknown[],\n fn: () => T,\n entry: AutoTraceEntry,\n link: NestedTraceLink | undefined,\n spanDetails: SpanDetails,\n ): T\n}\n\ninterface AutoTraceRootFunction {\n name: string\n entering: boolean\n}\n\ninterface AutoTraceScope {\n entries: readonly AutoTraceEntry[]\n nodeConfiguration?: AutoTraceNodeConfiguration\n rootFunction?: AutoTraceRootFunction\n}\n\ninterface AutoTraceState {\n storage: AsyncLocalStorageLike<AutoTraceScope> | null\n browserScope: AutoTraceScope | undefined\n // Older SDK copies read this field when sharing the process-wide V4 state.\n capturePolicies: WeakMap<object, Map<string, ReadonlySet<string>>>\n activeRoots: number\n}\n\ninterface AutoTraceGlobal {\n __bitfabAutoTraceStateV4?: AutoTraceState\n __bitfab_auto_trace_transformed_v1__?: boolean\n}\n\ninterface AutoTraceAsyncGenerator {\n next(value?: unknown): Promise<IteratorResult<unknown, unknown>>\n return(value?: unknown): Promise<IteratorResult<unknown, unknown>>\n throw(error?: unknown): Promise<IteratorResult<unknown, unknown>>\n [Symbol.asyncIterator](): AutoTraceAsyncGenerator\n}\n\nconst autoTraceGlobal = globalThis as unknown as AutoTraceGlobal\nconst autoTraceState: AutoTraceState =\n autoTraceGlobal.__bitfabAutoTraceStateV4 ?? {\n storage: null,\n browserScope: undefined,\n capturePolicies: new WeakMap(),\n activeRoots: 0,\n }\nautoTraceGlobal.__bitfabAutoTraceStateV4 = autoTraceState\n\nfunction initializeAutoTraceStorage(): void {\n autoTraceState.storage ??= createAsyncLocalStorage<AutoTraceScope>()\n}\n\nfunction runWithAutoTraceScope<T>(scope: AutoTraceScope, fn: () => T): T {\n initializeAutoTraceStorage()\n if (autoTraceState.storage) {\n return autoTraceState.storage.run(scope, fn)\n }\n\n const previous = autoTraceState.browserScope\n autoTraceState.browserScope = scope\n try {\n return fn()\n } finally {\n autoTraceState.browserScope = previous\n }\n}\n\nexport function currentAutoTraceEntries(): readonly AutoTraceEntry[] {\n return currentAutoTraceScope()?.entries ?? []\n}\n\nfunction replaceEntry(\n entries: readonly AutoTraceEntry[],\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n): readonly AutoTraceEntry[] {\n return entries.map((entry) => (entry === previous ? updated : entry))\n}\n\nexport function runWithAutoTraceEntry<T>(\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n fn: () => T,\n): T {\n const result = runWithAutoTraceScope(\n { entries: replaceEntry(currentAutoTraceEntries(), previous, updated) },\n fn,\n )\n if (isAutoTraceAsyncGenerator(result)) {\n return wrapAutoTraceEntryAsyncGenerator(previous, updated, result) as T\n }\n return result\n}\n\nfunction wrapAutoTraceEntryAsyncGenerator(\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceScope(\n { entries: replaceEntry(currentAutoTraceEntries(), previous, updated) },\n () => source[method](value),\n )\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nexport function clearAutoTraceNodeConfiguration<T>(fn: () => T): T {\n return runWithAutoTraceScope({ entries: currentAutoTraceEntries() }, fn)\n}\n\nexport function runWithAutoTraceNodeConfiguration<T>(\n nodeConfiguration: AutoTraceNodeConfiguration,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0) {\n return fn()\n }\n\n const result = runWithAutoTraceScope({ ...scope, nodeConfiguration }, fn)\n if (isAutoTraceAsyncGenerator(result)) {\n return wrapAutoTraceNodeAsyncGenerator(nodeConfiguration, result) as T\n }\n return result\n}\n\n/**\n * Run `fn` with every active auto-trace frame re-based onto `spanStack`, so a\n * call the build transform discovers inside a framework integration's span\n * attaches under that span rather than under the nearest discovered call.\n * @internal\n */\nexport function runWithAutoTraceFramesAt<T>(\n spanStack: unknown,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0) {\n return fn()\n }\n return runWithAutoTraceScope(\n {\n ...scope,\n entries: scope.entries.map((entry) => ({ ...entry, spanStack })),\n },\n fn,\n )\n}\n\nexport function runAsAutoTraceRootFunction<T>(\n functionName: string,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0 || functionName === \"\") {\n return fn()\n }\n const rootFunction: AutoTraceRootFunction = {\n name: functionName,\n entering: true,\n }\n try {\n return runWithAutoTraceScope({ ...scope, rootFunction }, fn)\n } finally {\n rootFunction.entering = false\n }\n}\n\nfunction isRootFunctionEntry(\n scope: AutoTraceScope,\n simpleName: string | undefined,\n): boolean {\n const rootFunction = scope.rootFunction\n if (rootFunction === undefined || !rootFunction.entering) {\n return false\n }\n rootFunction.entering = false\n return rootFunction.name === simpleName\n}\n\nconst SUBTREE_TRACING_DOCS_URL =\n \"https://docs.bitfab.ai/typescript-sdk#experimental-subtree-tracing\"\n\nfunction noteTransformedModule(): void {\n autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = true\n}\n\nfunction transformInstalled(): boolean {\n return autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ === true\n}\n\nfunction runsOnNode(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node)\n}\n\nfunction closeAutoTraceRoot(): void {\n autoTraceState.activeRoots -= 1\n}\n\nfunction settleAutoTraceRoot(context: AutoTraceContext): void {\n closeAutoTraceRoot()\n if (transformInstalled() || !runsOnNode()) {\n return\n }\n warnOnce(\n \"auto-trace-transform-missing\",\n `trace root \"${context.traceFunctionKey}\" recorded only its own span. ` +\n \"No module in this build was compiled by @bitfab/sdk/transform, so calls \" +\n \"beneath the root were not discovered. Add the SDK's transform adapter \" +\n `to the server build: ${SUBTREE_TRACING_DOCS_URL}`,\n )\n}\n\nconst heldRootWork = new WeakMap<AutoTraceContext, Promise<unknown>[]>()\n\nexport function runWithAutoTraceRootContext<T>(\n context: AutoTraceContext,\n spanStack: unknown,\n fn: () => T,\n): T {\n autoTraceState.activeRoots += 1\n const entries = [\n ...currentAutoTraceEntries(),\n { context, depth: 0, spanStack },\n ]\n const held: Promise<unknown>[] = []\n heldRootWork.set(context, held)\n let result: T\n try {\n result = runWithAutoTraceScope({ entries }, fn)\n } catch (error) {\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n throw error\n }\n\n if (isAutoTraceAsyncGenerator(result)) {\n heldRootWork.delete(context)\n closeAutoTraceRoot()\n return wrapAutoTraceAsyncGenerator(context, spanStack, result) as T\n }\n\n if (result instanceof Promise) {\n return result.then(\n (value) => finishAfterHeldWork(context, held, () => value),\n (error) =>\n finishAfterHeldWork(context, held, () => {\n throw error\n }),\n ) as T\n }\n\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n return result\n}\n\nfunction finishAfterHeldWork<T>(\n context: AutoTraceContext,\n held: Promise<unknown>[],\n finish: () => T,\n): T | Promise<T> {\n const pending = held.splice(0)\n if (pending.length === 0) {\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n return finish()\n }\n return Promise.all(pending).then(() =>\n finishAfterHeldWork(context, held, finish),\n )\n}\n\nfunction holdAutoTraceRoots(work: Promise<unknown>): void {\n const settled = work.then(\n () => undefined,\n () => undefined,\n )\n for (const entry of currentAutoTraceEntries()) {\n heldRootWork.get(entry.context)?.push(settled)\n }\n}\n\nexport function invokeThroughAutoTraceEntries<T>(\n entries: readonly AutoTraceEntry[],\n step: (entry: AutoTraceEntry, next: () => T) => T,\n fn: () => T,\n): T {\n let run = fn\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index] as AutoTraceEntry\n const next = run\n run = () => step(entry, next)\n }\n return run()\n}\n\nfunction isAutoTraceAsyncGenerator(\n value: unknown,\n): value is AutoTraceAsyncGenerator {\n if (value === null || typeof value !== \"object\") {\n return false\n }\n const candidate = value as Record<PropertyKey, unknown>\n return (\n typeof candidate.next === \"function\" &&\n typeof candidate.return === \"function\" &&\n typeof candidate.throw === \"function\" &&\n typeof candidate[Symbol.asyncIterator] === \"function\"\n )\n}\n\nfunction wrapAutoTraceAsyncGenerator(\n context: AutoTraceContext,\n spanStack: unknown,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceRootContext(context, spanStack, () => source[method](value))\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nfunction wrapAutoTraceNodeAsyncGenerator(\n nodeConfiguration: AutoTraceNodeConfiguration,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceNodeConfiguration(nodeConfiguration, () =>\n source[method](value),\n )\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nfunction shareFinalize(\n configuration: AutoTraceNodeConfiguration,\n): AutoTraceNodeConfiguration {\n const finalize = configuration.finalize\n if (finalize === undefined) {\n return configuration\n }\n let settled: Promise<unknown> | undefined\n return {\n ...configuration,\n finalize: (result: unknown) => {\n settled ??= Promise.resolve().then(() => finalize(result))\n return settled\n },\n }\n}\n\nexport function __bitfabAutoSpan<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n): T {\n noteTransformedModule()\n return invokeAsDiscoveredCall(definition, inputs, fn)\n}\n\n/**\n * Record a call the build transform did not wrap as a function, such as a\n * rewritten call site, as if the transform had discovered it. It is internal\n * runtime protocol, not a supported application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function invokeAsDiscoveredCall<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0 || isCaptureSuppressed()) {\n return fn()\n }\n const nameParts = definition.name.split(\".\")\n const simpleName = nameParts[nameParts.length - 1]\n if (isRootFunctionEntry(scope, simpleName)) {\n return fn()\n }\n const nodeConfiguration =\n simpleName === scope.nodeConfiguration?.functionName\n ? shareFinalize(scope.nodeConfiguration)\n : undefined\n const spanDetails: SpanDetails = { contexts: [] }\n return invokeThroughAutoTraceEntries(\n scope.entries,\n (entry, next) =>\n entry.context.invoke(\n definition,\n inputs,\n next,\n entry,\n spanDetails,\n nodeConfiguration,\n ),\n fn,\n )\n}\n\nconst JEV_METHOD = \"systemOne\"\n\nconst jevDefinitions = new Map<string, AutoTraceFunctionDefinition>()\n\ntype JevReceiver = Record<typeof JEV_METHOD, (...args: unknown[]) => unknown>\n\ntype RecordedCallOutcome = { value: unknown } | { error: unknown }\n\nfunction receiverClassName(receiver: unknown): string | undefined {\n try {\n const name = (receiver as { constructor?: { name?: unknown } }).constructor\n ?.name\n return typeof name === \"string\" && name !== \"\" && name !== \"Object\"\n ? name\n : undefined\n } catch {\n return undefined\n }\n}\n\nfunction invokeRecordedClientCall(\n definition: AutoTraceFunctionDefinition,\n args: unknown[],\n call: () => unknown,\n): unknown {\n let outcome: RecordedCallOutcome | undefined\n const traced = invokeAsDiscoveredCall(definition, args, () => {\n try {\n const value = call()\n outcome = { value }\n return value\n } catch (error) {\n outcome = { error }\n throw error\n }\n })\n const settled = outcome\n outcome = undefined\n if (settled === undefined) {\n return traced\n }\n if (\"value\" in settled && traced === settled.value) {\n return traced\n }\n if (traced instanceof Promise) {\n holdAutoTraceRoots(traced)\n }\n if (\"error\" in settled) {\n throw settled.error\n }\n return settled.value\n}\n\nfunction jevDefinition(receiver: unknown): AutoTraceFunctionDefinition {\n const className = receiverClassName(receiver)\n const name =\n className === undefined ? JEV_METHOD : `${className}.${JEV_METHOD}`\n let definition = jevDefinitions.get(name)\n if (definition === undefined) {\n definition = {\n id: `ts-auto-v1:jev#${name}`,\n name,\n file: \"@typesafe-ai/sdk\",\n line: 0,\n column: 0,\n async: true,\n jev: true,\n }\n jevDefinitions.set(name, definition)\n }\n return definition\n}\n\n/**\n * Call `receiver.systemOne(...args)` from a call site rewritten by the build\n * transform. Beneath an automatic trace root the call is recorded as one `llm`\n * span with Jev's model and token usage, and the client's own returned value\n * is handed back unchanged. Outside a root it is a plain method call.\n *\n * This helper is internal transform/runtime protocol, not a supported\n * application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoJev(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n const target = receiver as JevReceiver\n if (!__bitfabAutoTraceActive()) {\n return target.systemOne(...args)\n }\n return invokeRecordedClientCall(jevDefinition(receiver), args, () =>\n target.systemOne(...args),\n )\n}\n\nconst clientCallDefinitions = new Map<string, AutoTraceFunctionDefinition>()\n\nfunction clientCallDefinition(\n provider: ClientCallProvider,\n receiver: unknown,\n method: string,\n): AutoTraceFunctionDefinition {\n const className = receiverClassName(receiver)\n const qualified = (methodName: string): string =>\n className === undefined ? methodName : `${className}.${methodName}`\n const id = `ts-auto-v1:${provider.key}#${qualified(method)}`\n let definition = clientCallDefinitions.get(id)\n if (definition === undefined) {\n definition = {\n id,\n name: qualified(provider.spanMethods?.[method] ?? method),\n file: provider.library,\n line: 0,\n column: 0,\n async: true,\n clientCall: provider.key,\n clientCallMethod: method,\n }\n clientCallDefinitions.set(id, definition)\n }\n return definition\n}\n\n/**\n * Call `receiver[method](...args)` from an LLM client call site rewritten by\n * the build transform: `.chat.completions`, `.embeddings`,\n * `.audio.transcriptions`, `.messages`, and `.responses` calls on an `openai`\n * or `@anthropic-ai/sdk` client, and `.models` calls on an `@google/genai`\n * client. Beneath an automatic trace root the call is recorded as one `llm`\n * span with the prompt, model, and token usage, and the client's own returned\n * value is handed back unchanged. A streamed call is recorded when its stream\n * finishes. Otherwise it is a plain method call.\n *\n * This helper is internal transform/runtime protocol, not a supported\n * application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoClientCall(\n endpoint: string,\n receiver: unknown,\n method: string,\n ...args: unknown[]\n): unknown {\n const call = (): unknown =>\n Reflect.apply(\n (receiver as Record<string, (...callArgs: unknown[]) => unknown>)[\n method\n ] as (...callArgs: unknown[]) => unknown,\n receiver,\n args,\n )\n if (!__bitfabAutoTraceActive()) {\n return call()\n }\n const provider = providerForClientCall(endpoint, method, receiver)\n if (\n provider === undefined ||\n (clientCallStreams(provider, method, args[0]) &&\n provider.streamSummary === undefined) ||\n frameworkRecordsClientCall()\n ) {\n return call()\n }\n return invokeRecordedClientCall(\n clientCallDefinition(provider, receiver, method),\n args,\n call,\n )\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"chat.completions\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoOpenRouter(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"chat.completions\", receiver, \"create\", ...args)\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"messages\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoAnthropic(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"messages\", receiver, \"create\", ...args)\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"responses\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoOpenAIResponses(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"responses\", receiver, \"create\", ...args)\n}\n\n/**\n * Preserve a function's original call arguments for transform cases where\n * parameter bindings discard them, such as destructured arrow parameters.\n *\n * This helper is internal transform/runtime protocol. The proxy preserves the\n * target's callability, arity, async identity, and non-constructibility while\n * only allocating a trace closure beneath an active automatic trace root.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoWrap<T extends (...args: never[]) => unknown>(\n definition: AutoTraceFunctionDefinition,\n fn: T,\n): T {\n noteTransformedModule()\n if (fn.name === \"\") {\n const nameParts = definition.name.split(\".\")\n const inferredName = nameParts[nameParts.length - 1]\n if (inferredName !== undefined) {\n Object.defineProperty(fn, \"name\", {\n configurable: true,\n value: inferredName,\n })\n }\n }\n\n const target = fn as unknown as (...args: unknown[]) => unknown\n return new Proxy(target, {\n apply(callTarget, thisArg, args) {\n if (!__bitfabAutoTraceActive()) {\n return Reflect.apply(callTarget, thisArg, args)\n }\n return __bitfabAutoSpan(definition, args, () =>\n Reflect.apply(callTarget, thisArg, args),\n )\n },\n }) as unknown as T\n}\n\n/**\n * Return whether the current call is inside an automatic trace root.\n *\n * Build transforms use this before allocating function metadata, captured\n * inputs, or an invocation closure. It is internal transform/runtime protocol,\n * not a supported application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoTraceActive(): boolean {\n if (autoTraceState.activeRoots === 0 || isCaptureSuppressed()) {\n return false\n }\n return currentAutoTraceEntries().length > 0\n}\n\nfunction currentAutoTraceScope(): AutoTraceScope | undefined {\n initializeAutoTraceStorage()\n return autoTraceState.storage?.getStore() ?? autoTraceState.browserScope\n}\n\nexport function _resetAutoTraceTransformDetection(): void {\n autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = undefined\n}\n"],"mappings":"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"}
|
|
@@ -591,6 +591,21 @@ function geminiUsage(body, response) {
|
|
|
591
591
|
reasoningTokens: thoughts
|
|
592
592
|
};
|
|
593
593
|
}
|
|
594
|
+
function isGeminiEmbeddingResponse(response) {
|
|
595
|
+
return Array.isArray(field(response, "embeddings"));
|
|
596
|
+
}
|
|
597
|
+
function geminiEmbeddingPrompt(body) {
|
|
598
|
+
return renderedPrompt(geminiEntries(field(body, "contents")));
|
|
599
|
+
}
|
|
600
|
+
function geminiEmbeddingUsage(body, response) {
|
|
601
|
+
const embeddings = field(response, "embeddings");
|
|
602
|
+
const inputTokens = sumOfPresent((Array.isArray(embeddings) ? embeddings : []).map((embedding) => numberField(field(embedding, "statistics"), "tokenCount")));
|
|
603
|
+
return {
|
|
604
|
+
model: geminiModel(body, response),
|
|
605
|
+
inputTokens,
|
|
606
|
+
outputTokens: inputTokens === void 0 ? void 0 : 0
|
|
607
|
+
};
|
|
608
|
+
}
|
|
594
609
|
function geminiChunkText(chunk) {
|
|
595
610
|
const candidates = field(chunk, "candidates");
|
|
596
611
|
return Array.isArray(candidates) ? geminiContentText(field(candidates[0], "content")) ?? "" : "";
|
|
@@ -701,6 +716,19 @@ const GEMINI = {
|
|
|
701
716
|
usage: geminiUsage,
|
|
702
717
|
streamSummary: geminiStreamSummary
|
|
703
718
|
};
|
|
719
|
+
const GEMINI_EMBEDDINGS = {
|
|
720
|
+
key: "gemini-embeddings",
|
|
721
|
+
provider: "gemini",
|
|
722
|
+
library: "@google/genai",
|
|
723
|
+
endpoint: "models",
|
|
724
|
+
methods: ["embedContent"],
|
|
725
|
+
streamMethods: [],
|
|
726
|
+
streamEvents: [],
|
|
727
|
+
matchesReceiver: isGeminiModels,
|
|
728
|
+
isResponse: isGeminiEmbeddingResponse,
|
|
729
|
+
prompt: geminiEmbeddingPrompt,
|
|
730
|
+
usage: geminiEmbeddingUsage
|
|
731
|
+
};
|
|
704
732
|
const CLIENT_CALL_PROVIDERS = [
|
|
705
733
|
OPENROUTER,
|
|
706
734
|
OPENAI_CHAT,
|
|
@@ -709,7 +737,8 @@ const CLIENT_CALL_PROVIDERS = [
|
|
|
709
737
|
OPENAI_TRANSCRIPTIONS,
|
|
710
738
|
ANTHROPIC,
|
|
711
739
|
OPENAI_RESPONSES,
|
|
712
|
-
GEMINI
|
|
740
|
+
GEMINI,
|
|
741
|
+
GEMINI_EMBEDDINGS
|
|
713
742
|
];
|
|
714
743
|
const CLIENT_CALL_PROVIDERS_BY_KEY = new Map(CLIENT_CALL_PROVIDERS.map((provider) => [provider.key, provider]));
|
|
715
744
|
function clientCallProvider(key) {
|
|
@@ -1263,6 +1292,6 @@ function _resetAutoTraceTransformDetection() {
|
|
|
1263
1292
|
autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = void 0;
|
|
1264
1293
|
}
|
|
1265
1294
|
//#endregion
|
|
1266
|
-
export {
|
|
1295
|
+
export { recordAutoTracedClientCall as A, forgetLangChainRun as B, OPENAI_EMBEDDINGS as C, clientCallProvider as D, OPENROUTER as E, endOpenAiAgentsSpan as F, writeOnce as G, markLangChainRunRecorded as H, mapOpenAiAgentsTrace as I, assertAsyncStorageRegistered as J, isCaptureSuppressed as K, openAiAgentsParentSpanId as L, sharedClientCallStreamRecording as M, watchClientCall as N, clientCallStreams as O, StreamFinalizationError as P, registerAsyncLocalStorageClass as Q, openAiAgentsSpanChain as R, OPENAI_CHAT as S, OPENAI_TRANSCRIPTIONS as T, warn as U, installLangChainRunScopes as V, warnOnce as W, createAsyncLocalStorage as X, asyncStorageReady as Y, isAsyncStorageInitDone as Z, runWithAutoTraceNodeConfiguration as _, __bitfabAutoOpenRouter as a, GEMINI as b, __bitfabAutoWrap as c, currentAutoTraceEntries as d, invokeAsDiscoveredCall as f, runWithAutoTraceFramesAt as g, runWithAutoTraceEntry as h, __bitfabAutoOpenAIResponses as i, recordWatchedClientCall as j, frameworkRecordsClientCall as k, _resetAutoTraceTransformDetection as l, runAsAutoTraceRootFunction as m, __bitfabAutoClientCall as n, __bitfabAutoSpan as o, invokeThroughAutoTraceEntries as p, runWithCaptureSuppressed as q, __bitfabAutoJev as r, __bitfabAutoTraceActive as s, __bitfabAutoAnthropic as t, clearAutoTraceNodeConfiguration as u, runWithAutoTraceRootContext as v, OPENAI_RESPONSES as w, GEMINI_EMBEDDINGS as x, ANTHROPIC as y, unmapOpenAiAgentsTrace as z };
|
|
1267
1296
|
|
|
1268
|
-
//# sourceMappingURL=autoTrace-
|
|
1297
|
+
//# sourceMappingURL=autoTrace-g3y0sLPq.js.map
|