bitfab 0.21.2 → 0.23.0

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/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { Trace, Span } from '@openai/agents';
1
+ import { Agent, AgentInputItem, RunState, NonStreamRunOptions, RunResult, StreamRunOptions, StreamedRunResult, Trace, Span } from '@openai/agents';
2
2
 
3
3
  /**
4
4
  * BAML execution utilities for the Bitfab TypeScript SDK.
@@ -278,8 +278,8 @@ interface ActiveSpanContext$1 {
278
278
  */
279
279
  declare class BitfabLangGraphCallbackHandler {
280
280
  name: string;
281
- ignoreRetriever: boolean;
282
281
  ignoreRetry: boolean;
282
+ ignoreRetriever: boolean;
283
283
  ignoreCustomEvent: boolean;
284
284
  private readonly httpClient;
285
285
  private readonly traceFunctionKey;
@@ -313,6 +313,76 @@ declare class BitfabLangGraphCallbackHandler {
313
313
  handleRetrieverError(error: unknown, runId: string): Promise<void>;
314
314
  }
315
315
 
316
+ /**
317
+ * OpenAI Agents SDK handler for Bitfab tracing.
318
+ *
319
+ * The OpenAI Agents SDK is instrumented in two layers:
320
+ *
321
+ * 1. A process-wide `TracingProcessor` (see `getOpenAiTracingProcessor` /
322
+ * `BitfabOpenAITracingProcessor`) registered once with `addTraceProcessor`.
323
+ * It captures everything *inside* a run — LLM calls, tool calls, handoffs —
324
+ * as Bitfab spans.
325
+ * 2. This handler's `wrapRun`, which owns the *root*. The processor never sees
326
+ * the caller's input (the SDK's trace events don't carry it), so a
327
+ * processor-only run records a root span with an empty input and is not
328
+ * replayable. `wrapRun` is a thin drop-in for `run()` that opens a
329
+ * `withSpan` root carrying the input and final output, so the run is
330
+ * replayable with no hand-written `withSpan`. The processor's spans nest
331
+ * underneath it automatically (it remaps onto the active span context).
332
+ *
333
+ * Use both together: register the processor once at startup, then call
334
+ * `handler.wrapRun(agent, input)` instead of `run(agent, input)`.
335
+ */
336
+
337
+ type RootSpanOptions = {
338
+ type: "agent";
339
+ finalize: (result: unknown) => unknown | Promise<unknown>;
340
+ };
341
+ type WithSpanFn = <TArgs extends unknown[], TReturn>(traceFunctionKey: string, options: RootSpanOptions, fn: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;
342
+ type RunInput<TContext, TAgent extends Agent<any, any>> = string | AgentInputItem[] | RunState<TContext, TAgent>;
343
+ /**
344
+ * OpenAI Agents SDK handler that records a replayable root span around a run.
345
+ *
346
+ * ```typescript
347
+ * import { Bitfab } from "@bitfab/sdk";
348
+ * import { addTraceProcessor, Agent, run } from "@openai/agents";
349
+ *
350
+ * const bitfab = new Bitfab({ apiKey: "..." });
351
+ * addTraceProcessor(bitfab.getOpenAiTracingProcessor()); // captures internals
352
+ *
353
+ * const agent = new Agent({ name: "Researcher", instructions: "..." });
354
+ * const handler = bitfab.getOpenAiAgentHandler("research-topic");
355
+ *
356
+ * // Swap run(agent, input) -> handler.wrapRun(agent, input)
357
+ * const result = await handler.wrapRun(agent, "Find X");
358
+ * return result.finalOutput;
359
+ * ```
360
+ */
361
+ declare class BitfabOpenAIAgentHandler {
362
+ private readonly traceFunctionKey;
363
+ private readonly withSpanFn;
364
+ constructor(config: {
365
+ traceFunctionKey: string;
366
+ withSpan: WithSpanFn;
367
+ });
368
+ /**
369
+ * Drop-in replacement for the OpenAI Agents SDK's `run()` that records a
370
+ * replayable root `agent` span.
371
+ *
372
+ * The `input` is captured as the root span's input (as a single positional
373
+ * argument, so `replay(key, fn)` re-feeds it), and the run's `finalOutput`
374
+ * is recorded as the root output. For streaming runs (`{ stream: true }`),
375
+ * the result is handed back immediately and the final output is recorded
376
+ * once the stream completes — first-byte latency is untouched.
377
+ *
378
+ * The process-wide tracing processor (`getOpenAiTracingProcessor`) must still
379
+ * be registered: it captures the LLM/tool/handoff spans that nest beneath
380
+ * this root.
381
+ */
382
+ wrapRun<TAgent extends Agent<any, any>, TContext = undefined>(agent: TAgent, input: RunInput<TContext, TAgent>, options?: NonStreamRunOptions<TContext>): Promise<RunResult<TContext, TAgent>>;
383
+ wrapRun<TAgent extends Agent<any, any>, TContext = undefined>(agent: TAgent, input: RunInput<TContext, TAgent>, options: StreamRunOptions<TContext>): Promise<StreamedRunResult<TContext, TAgent>>;
384
+ }
385
+
316
386
  /**
317
387
  * Per-trace environment exposed to customer code during replay.
318
388
  *
@@ -863,6 +933,29 @@ declare class Bitfab {
863
933
  * @returns A BitfabOpenAITracingProcessor instance configured for this client
864
934
  */
865
935
  getOpenAiTracingProcessor(): BitfabOpenAITracingProcessor;
936
+ /**
937
+ * Get an OpenAI Agents SDK handler that records a replayable root span.
938
+ *
939
+ * The processor from {@link getOpenAiTracingProcessor} captures everything
940
+ * inside a run (LLM calls, tools, handoffs) but never sees the caller's
941
+ * input, so a processor-only run records an empty-input root and is not
942
+ * replayable. This handler's `wrapRun` is a drop-in for `run()` that opens a
943
+ * `withSpan` root carrying the input and final output; the processor's spans
944
+ * nest beneath it. Register the processor once at startup, then call
945
+ * `handler.wrapRun(agent, input)` in place of `run(agent, input)`.
946
+ *
947
+ * ```typescript
948
+ * import { addTraceProcessor, Agent, run } from "@openai/agents";
949
+ *
950
+ * addTraceProcessor(client.getOpenAiTracingProcessor());
951
+ * const handler = client.getOpenAiAgentHandler("research-topic");
952
+ * const result = await handler.wrapRun(agent, "Find X");
953
+ * ```
954
+ *
955
+ * @param traceFunctionKey - Groups traces under this key in Bitfab
956
+ * @returns A BitfabOpenAIAgentHandler configured for this client
957
+ */
958
+ getOpenAiAgentHandler(traceFunctionKey: string): BitfabOpenAIAgentHandler;
866
959
  /**
867
960
  * Get a LangGraph/LangChain callback handler for tracing.
868
961
  *
@@ -1117,7 +1210,7 @@ declare class BitfabFunction {
1117
1210
  /**
1118
1211
  * SDK version from package.json (injected at build time)
1119
1212
  */
1120
- declare const __version__ = "0.21.2";
1213
+ declare const __version__ = "0.23.0";
1121
1214
 
1122
1215
  /**
1123
1216
  * Constants for the Bitfab SDK.
@@ -1185,4 +1278,4 @@ declare const finalizers: {
1185
1278
  readableStream: typeof readableStream;
1186
1279
  };
1187
1280
 
1188
- export { type ActiveSpanContext, type AdaptContext, type AdaptInputsFn, type AllowedEnvVars, type BamlExecutionResult, Bitfab, BitfabClaudeAgentHandler, type BitfabConfig, BitfabError, BitfabFunction, BitfabLangGraphCallbackHandler as BitfabLangChainCallbackHandler, BitfabLangGraphCallbackHandler, BitfabOpenAITracingProcessor, type CodeChangeFile, type CurrentSpan, type CurrentTrace, DEFAULT_SERVICE_URL, type DbSnapshotConfig, type DbSnapshotProvider, type DbSnapshotRef, type DetachedTrace, type MockStrategy, type ProviderDefinition, ReplayEnvironment, type ReplayEnvironmentSnapshot, type ReplayItem, type ReplayOptions, type ReplayResult, SUPPORTED_PROVIDERS, type SpanOptions, type SpanType, type TokenUsage, type TraceResponse, type TracingProcessor, type WrapBAMLOptions, type WrappedBamlFn, __version__, finalizers, flushTraces, getCurrentSpan, getCurrentTrace };
1281
+ export { type ActiveSpanContext, type AdaptContext, type AdaptInputsFn, type AllowedEnvVars, type BamlExecutionResult, Bitfab, BitfabClaudeAgentHandler, type BitfabConfig, BitfabError, BitfabFunction, BitfabLangGraphCallbackHandler as BitfabLangChainCallbackHandler, BitfabLangGraphCallbackHandler, BitfabOpenAIAgentHandler, BitfabOpenAITracingProcessor, type CodeChangeFile, type CurrentSpan, type CurrentTrace, DEFAULT_SERVICE_URL, type DbSnapshotConfig, type DbSnapshotProvider, type DbSnapshotRef, type DetachedTrace, type MockStrategy, type ProviderDefinition, ReplayEnvironment, type ReplayEnvironmentSnapshot, type ReplayItem, type ReplayOptions, type ReplayResult, SUPPORTED_PROVIDERS, type SpanOptions, type SpanType, type TokenUsage, type TraceResponse, type TracingProcessor, type WrapBAMLOptions, type WrappedBamlFn, __version__, finalizers, flushTraces, getCurrentSpan, getCurrentTrace };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Trace, Span } from '@openai/agents';
1
+ import { Agent, AgentInputItem, RunState, NonStreamRunOptions, RunResult, StreamRunOptions, StreamedRunResult, Trace, Span } from '@openai/agents';
2
2
 
3
3
  /**
4
4
  * BAML execution utilities for the Bitfab TypeScript SDK.
@@ -278,8 +278,8 @@ interface ActiveSpanContext$1 {
278
278
  */
279
279
  declare class BitfabLangGraphCallbackHandler {
280
280
  name: string;
281
- ignoreRetriever: boolean;
282
281
  ignoreRetry: boolean;
282
+ ignoreRetriever: boolean;
283
283
  ignoreCustomEvent: boolean;
284
284
  private readonly httpClient;
285
285
  private readonly traceFunctionKey;
@@ -313,6 +313,76 @@ declare class BitfabLangGraphCallbackHandler {
313
313
  handleRetrieverError(error: unknown, runId: string): Promise<void>;
314
314
  }
315
315
 
316
+ /**
317
+ * OpenAI Agents SDK handler for Bitfab tracing.
318
+ *
319
+ * The OpenAI Agents SDK is instrumented in two layers:
320
+ *
321
+ * 1. A process-wide `TracingProcessor` (see `getOpenAiTracingProcessor` /
322
+ * `BitfabOpenAITracingProcessor`) registered once with `addTraceProcessor`.
323
+ * It captures everything *inside* a run — LLM calls, tool calls, handoffs —
324
+ * as Bitfab spans.
325
+ * 2. This handler's `wrapRun`, which owns the *root*. The processor never sees
326
+ * the caller's input (the SDK's trace events don't carry it), so a
327
+ * processor-only run records a root span with an empty input and is not
328
+ * replayable. `wrapRun` is a thin drop-in for `run()` that opens a
329
+ * `withSpan` root carrying the input and final output, so the run is
330
+ * replayable with no hand-written `withSpan`. The processor's spans nest
331
+ * underneath it automatically (it remaps onto the active span context).
332
+ *
333
+ * Use both together: register the processor once at startup, then call
334
+ * `handler.wrapRun(agent, input)` instead of `run(agent, input)`.
335
+ */
336
+
337
+ type RootSpanOptions = {
338
+ type: "agent";
339
+ finalize: (result: unknown) => unknown | Promise<unknown>;
340
+ };
341
+ type WithSpanFn = <TArgs extends unknown[], TReturn>(traceFunctionKey: string, options: RootSpanOptions, fn: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;
342
+ type RunInput<TContext, TAgent extends Agent<any, any>> = string | AgentInputItem[] | RunState<TContext, TAgent>;
343
+ /**
344
+ * OpenAI Agents SDK handler that records a replayable root span around a run.
345
+ *
346
+ * ```typescript
347
+ * import { Bitfab } from "@bitfab/sdk";
348
+ * import { addTraceProcessor, Agent, run } from "@openai/agents";
349
+ *
350
+ * const bitfab = new Bitfab({ apiKey: "..." });
351
+ * addTraceProcessor(bitfab.getOpenAiTracingProcessor()); // captures internals
352
+ *
353
+ * const agent = new Agent({ name: "Researcher", instructions: "..." });
354
+ * const handler = bitfab.getOpenAiAgentHandler("research-topic");
355
+ *
356
+ * // Swap run(agent, input) -> handler.wrapRun(agent, input)
357
+ * const result = await handler.wrapRun(agent, "Find X");
358
+ * return result.finalOutput;
359
+ * ```
360
+ */
361
+ declare class BitfabOpenAIAgentHandler {
362
+ private readonly traceFunctionKey;
363
+ private readonly withSpanFn;
364
+ constructor(config: {
365
+ traceFunctionKey: string;
366
+ withSpan: WithSpanFn;
367
+ });
368
+ /**
369
+ * Drop-in replacement for the OpenAI Agents SDK's `run()` that records a
370
+ * replayable root `agent` span.
371
+ *
372
+ * The `input` is captured as the root span's input (as a single positional
373
+ * argument, so `replay(key, fn)` re-feeds it), and the run's `finalOutput`
374
+ * is recorded as the root output. For streaming runs (`{ stream: true }`),
375
+ * the result is handed back immediately and the final output is recorded
376
+ * once the stream completes — first-byte latency is untouched.
377
+ *
378
+ * The process-wide tracing processor (`getOpenAiTracingProcessor`) must still
379
+ * be registered: it captures the LLM/tool/handoff spans that nest beneath
380
+ * this root.
381
+ */
382
+ wrapRun<TAgent extends Agent<any, any>, TContext = undefined>(agent: TAgent, input: RunInput<TContext, TAgent>, options?: NonStreamRunOptions<TContext>): Promise<RunResult<TContext, TAgent>>;
383
+ wrapRun<TAgent extends Agent<any, any>, TContext = undefined>(agent: TAgent, input: RunInput<TContext, TAgent>, options: StreamRunOptions<TContext>): Promise<StreamedRunResult<TContext, TAgent>>;
384
+ }
385
+
316
386
  /**
317
387
  * Per-trace environment exposed to customer code during replay.
318
388
  *
@@ -863,6 +933,29 @@ declare class Bitfab {
863
933
  * @returns A BitfabOpenAITracingProcessor instance configured for this client
864
934
  */
865
935
  getOpenAiTracingProcessor(): BitfabOpenAITracingProcessor;
936
+ /**
937
+ * Get an OpenAI Agents SDK handler that records a replayable root span.
938
+ *
939
+ * The processor from {@link getOpenAiTracingProcessor} captures everything
940
+ * inside a run (LLM calls, tools, handoffs) but never sees the caller's
941
+ * input, so a processor-only run records an empty-input root and is not
942
+ * replayable. This handler's `wrapRun` is a drop-in for `run()` that opens a
943
+ * `withSpan` root carrying the input and final output; the processor's spans
944
+ * nest beneath it. Register the processor once at startup, then call
945
+ * `handler.wrapRun(agent, input)` in place of `run(agent, input)`.
946
+ *
947
+ * ```typescript
948
+ * import { addTraceProcessor, Agent, run } from "@openai/agents";
949
+ *
950
+ * addTraceProcessor(client.getOpenAiTracingProcessor());
951
+ * const handler = client.getOpenAiAgentHandler("research-topic");
952
+ * const result = await handler.wrapRun(agent, "Find X");
953
+ * ```
954
+ *
955
+ * @param traceFunctionKey - Groups traces under this key in Bitfab
956
+ * @returns A BitfabOpenAIAgentHandler configured for this client
957
+ */
958
+ getOpenAiAgentHandler(traceFunctionKey: string): BitfabOpenAIAgentHandler;
866
959
  /**
867
960
  * Get a LangGraph/LangChain callback handler for tracing.
868
961
  *
@@ -1117,7 +1210,7 @@ declare class BitfabFunction {
1117
1210
  /**
1118
1211
  * SDK version from package.json (injected at build time)
1119
1212
  */
1120
- declare const __version__ = "0.21.2";
1213
+ declare const __version__ = "0.23.0";
1121
1214
 
1122
1215
  /**
1123
1216
  * Constants for the Bitfab SDK.
@@ -1185,4 +1278,4 @@ declare const finalizers: {
1185
1278
  readableStream: typeof readableStream;
1186
1279
  };
1187
1280
 
1188
- export { type ActiveSpanContext, type AdaptContext, type AdaptInputsFn, type AllowedEnvVars, type BamlExecutionResult, Bitfab, BitfabClaudeAgentHandler, type BitfabConfig, BitfabError, BitfabFunction, BitfabLangGraphCallbackHandler as BitfabLangChainCallbackHandler, BitfabLangGraphCallbackHandler, BitfabOpenAITracingProcessor, type CodeChangeFile, type CurrentSpan, type CurrentTrace, DEFAULT_SERVICE_URL, type DbSnapshotConfig, type DbSnapshotProvider, type DbSnapshotRef, type DetachedTrace, type MockStrategy, type ProviderDefinition, ReplayEnvironment, type ReplayEnvironmentSnapshot, type ReplayItem, type ReplayOptions, type ReplayResult, SUPPORTED_PROVIDERS, type SpanOptions, type SpanType, type TokenUsage, type TraceResponse, type TracingProcessor, type WrapBAMLOptions, type WrappedBamlFn, __version__, finalizers, flushTraces, getCurrentSpan, getCurrentTrace };
1281
+ export { type ActiveSpanContext, type AdaptContext, type AdaptInputsFn, type AllowedEnvVars, type BamlExecutionResult, Bitfab, BitfabClaudeAgentHandler, type BitfabConfig, BitfabError, BitfabFunction, BitfabLangGraphCallbackHandler as BitfabLangChainCallbackHandler, BitfabLangGraphCallbackHandler, BitfabOpenAIAgentHandler, BitfabOpenAITracingProcessor, type CodeChangeFile, type CurrentSpan, type CurrentTrace, DEFAULT_SERVICE_URL, type DbSnapshotConfig, type DbSnapshotProvider, type DbSnapshotRef, type DetachedTrace, type MockStrategy, type ProviderDefinition, ReplayEnvironment, type ReplayEnvironmentSnapshot, type ReplayItem, type ReplayOptions, type ReplayResult, SUPPORTED_PROVIDERS, type SpanOptions, type SpanType, type TokenUsage, type TraceResponse, type TracingProcessor, type WrapBAMLOptions, type WrappedBamlFn, __version__, finalizers, flushTraces, getCurrentSpan, getCurrentTrace };
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  BitfabClaudeAgentHandler,
13
13
  BitfabFunction,
14
14
  BitfabLangGraphCallbackHandler,
15
+ BitfabOpenAIAgentHandler,
15
16
  BitfabOpenAITracingProcessor,
16
17
  DEFAULT_SERVICE_URL,
17
18
  ReplayEnvironment,
@@ -21,7 +22,7 @@ import {
21
22
  flushTraces,
22
23
  getCurrentSpan,
23
24
  getCurrentTrace
24
- } from "./chunk-3YKMCCDV.js";
25
+ } from "./chunk-QOPP5TSO.js";
25
26
  import {
26
27
  BitfabError
27
28
  } from "./chunk-EQI6ZJC3.js";
@@ -32,6 +33,7 @@ export {
32
33
  BitfabFunction,
33
34
  BitfabLangGraphCallbackHandler as BitfabLangChainCallbackHandler,
34
35
  BitfabLangGraphCallbackHandler,
36
+ BitfabOpenAIAgentHandler,
35
37
  BitfabOpenAITracingProcessor,
36
38
  DEFAULT_SERVICE_URL,
37
39
  ReplayEnvironment,
package/dist/node.cjs CHANGED
@@ -493,6 +493,7 @@ __export(node_exports, {
493
493
  BitfabFunction: () => BitfabFunction,
494
494
  BitfabLangChainCallbackHandler: () => BitfabLangGraphCallbackHandler,
495
495
  BitfabLangGraphCallbackHandler: () => BitfabLangGraphCallbackHandler,
496
+ BitfabOpenAIAgentHandler: () => BitfabOpenAIAgentHandler,
496
497
  BitfabOpenAITracingProcessor: () => BitfabOpenAITracingProcessor,
497
498
  DEFAULT_SERVICE_URL: () => DEFAULT_SERVICE_URL,
498
499
  ReplayEnvironment: () => ReplayEnvironment,
@@ -513,7 +514,7 @@ registerAsyncLocalStorageClass(
513
514
  );
514
515
 
515
516
  // src/version.generated.ts
516
- var __version__ = "0.21.2";
517
+ var __version__ = "0.23.0";
517
518
 
518
519
  // src/constants.ts
519
520
  var DEFAULT_SERVICE_URL = "https://bitfab.ai";
@@ -1964,8 +1965,9 @@ function extractLangGraphMetadata(metadata) {
1964
1965
  var BitfabLangGraphCallbackHandler = class {
1965
1966
  constructor(config) {
1966
1967
  this.name = "BitfabLangGraphCallbackHandler";
1967
- this.ignoreRetriever = true;
1968
1968
  this.ignoreRetry = true;
1969
+ // Retriever callbacks ARE captured (retriever queries -> function spans).
1970
+ this.ignoreRetriever = false;
1969
1971
  this.ignoreCustomEvent = true;
1970
1972
  this.runToSpan = /* @__PURE__ */ new Map();
1971
1973
  this.invocations = /* @__PURE__ */ new Map();
@@ -2295,6 +2297,39 @@ var BitfabLangGraphCallbackHandler = class {
2295
2297
  }
2296
2298
  };
2297
2299
 
2300
+ // src/openaiAgentSdk.ts
2301
+ var BitfabOpenAIAgentHandler = class {
2302
+ constructor(config) {
2303
+ this.traceFunctionKey = config.traceFunctionKey;
2304
+ this.withSpanFn = config.withSpan;
2305
+ }
2306
+ async wrapRun(agent, input, options) {
2307
+ const { run } = await import("@openai/agents");
2308
+ const isStreaming = options?.stream === true;
2309
+ const finalize = async (result) => {
2310
+ const res = result;
2311
+ if (isStreaming && res?.completed) {
2312
+ try {
2313
+ await res.completed;
2314
+ } catch {
2315
+ }
2316
+ }
2317
+ return res?.finalOutput;
2318
+ };
2319
+ const options_ = { type: "agent", finalize };
2320
+ const traced = this.withSpanFn(
2321
+ this.traceFunctionKey,
2322
+ options_,
2323
+ (agentInput) => run(
2324
+ agent,
2325
+ agentInput,
2326
+ options
2327
+ )
2328
+ );
2329
+ return traced(input);
2330
+ }
2331
+ };
2332
+
2298
2333
  // src/client.ts
2299
2334
  init_replayContext();
2300
2335
 
@@ -2988,6 +3023,34 @@ var Bitfab = class {
2988
3023
  }
2989
3024
  });
2990
3025
  }
3026
+ /**
3027
+ * Get an OpenAI Agents SDK handler that records a replayable root span.
3028
+ *
3029
+ * The processor from {@link getOpenAiTracingProcessor} captures everything
3030
+ * inside a run (LLM calls, tools, handoffs) but never sees the caller's
3031
+ * input, so a processor-only run records an empty-input root and is not
3032
+ * replayable. This handler's `wrapRun` is a drop-in for `run()` that opens a
3033
+ * `withSpan` root carrying the input and final output; the processor's spans
3034
+ * nest beneath it. Register the processor once at startup, then call
3035
+ * `handler.wrapRun(agent, input)` in place of `run(agent, input)`.
3036
+ *
3037
+ * ```typescript
3038
+ * import { addTraceProcessor, Agent, run } from "@openai/agents";
3039
+ *
3040
+ * addTraceProcessor(client.getOpenAiTracingProcessor());
3041
+ * const handler = client.getOpenAiAgentHandler("research-topic");
3042
+ * const result = await handler.wrapRun(agent, "Find X");
3043
+ * ```
3044
+ *
3045
+ * @param traceFunctionKey - Groups traces under this key in Bitfab
3046
+ * @returns A BitfabOpenAIAgentHandler configured for this client
3047
+ */
3048
+ getOpenAiAgentHandler(traceFunctionKey) {
3049
+ return new BitfabOpenAIAgentHandler({
3050
+ traceFunctionKey,
3051
+ withSpan: this.withSpan.bind(this)
3052
+ });
3053
+ }
2991
3054
  /**
2992
3055
  * Get a LangGraph/LangChain callback handler for tracing.
2993
3056
  *
@@ -3742,6 +3805,7 @@ assertAsyncStorageRegistered();
3742
3805
  BitfabFunction,
3743
3806
  BitfabLangChainCallbackHandler,
3744
3807
  BitfabLangGraphCallbackHandler,
3808
+ BitfabOpenAIAgentHandler,
3745
3809
  BitfabOpenAITracingProcessor,
3746
3810
  DEFAULT_SERVICE_URL,
3747
3811
  ReplayEnvironment,