@bitfab/sdk 0.20.0 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-IUZIGC6T.js → chunk-75LZO6JS.js} +97 -9
- package/dist/chunk-75LZO6JS.js.map +1 -0
- package/dist/index.cjs +96 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +79 -2
- package/dist/index.d.ts +79 -2
- package/dist/index.js +3 -1
- package/dist/node.cjs +96 -7
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +3 -1
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-IUZIGC6T.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -756,6 +756,25 @@ interface SpanOptions {
|
|
|
756
756
|
* only the marked descendants return their recorded output.
|
|
757
757
|
*/
|
|
758
758
|
mockOnReplay?: boolean;
|
|
759
|
+
/**
|
|
760
|
+
* Record a serializable view of a non-serializable result (e.g. a live
|
|
761
|
+
* stream object) as the span output.
|
|
762
|
+
*
|
|
763
|
+
* When set, the wrapped function's raw return value is handed back to the
|
|
764
|
+
* caller unchanged (so streaming and first-byte latency are untouched),
|
|
765
|
+
* but instead of serializing that raw value, the span records
|
|
766
|
+
* `await finalize(result)`. Use this to trace functions that return a live
|
|
767
|
+
* stream consumed by the caller (Vercel AI SDK `streamText`, a
|
|
768
|
+
* `ReadableStream`, an SSE response) while still capturing a serializable,
|
|
769
|
+
* replayable output such as `{ text, usage, toolCalls }`.
|
|
770
|
+
*
|
|
771
|
+
* Reading from a multi-consumer stream result (like the AI SDK's, which
|
|
772
|
+
* tees internally) does not disturb the caller's own consumption. For the
|
|
773
|
+
* Vercel AI SDK shape, pass the prebuilt `finalizers.aiSdk` helper.
|
|
774
|
+
*
|
|
775
|
+
* Ignored for async-generator results, which are captured automatically.
|
|
776
|
+
*/
|
|
777
|
+
finalize?: (result: any) => unknown | Promise<unknown>;
|
|
759
778
|
}
|
|
760
779
|
|
|
761
780
|
/**
|
|
@@ -1070,7 +1089,7 @@ declare class BitfabFunction {
|
|
|
1070
1089
|
/**
|
|
1071
1090
|
* SDK version from package.json (injected at build time)
|
|
1072
1091
|
*/
|
|
1073
|
-
declare const __version__ = "0.
|
|
1092
|
+
declare const __version__ = "0.21.1";
|
|
1074
1093
|
|
|
1075
1094
|
/**
|
|
1076
1095
|
* Constants for the Bitfab SDK.
|
|
@@ -1080,4 +1099,62 @@ declare const __version__ = "0.20.0";
|
|
|
1080
1099
|
*/
|
|
1081
1100
|
declare const DEFAULT_SERVICE_URL = "https://bitfab.ai";
|
|
1082
1101
|
|
|
1083
|
-
|
|
1102
|
+
/**
|
|
1103
|
+
* Prebuilt `finalize` helpers for `withSpan({ finalize }, fn)`.
|
|
1104
|
+
*
|
|
1105
|
+
* A streaming function returns a live stream object that the caller consumes
|
|
1106
|
+
* directly (SSE, a UI message stream). `withSpan` hands that object back
|
|
1107
|
+
* unchanged; a `finalize` function tells it what serializable view to record
|
|
1108
|
+
* as the span output instead of the raw, non-serializable stream.
|
|
1109
|
+
*/
|
|
1110
|
+
/**
|
|
1111
|
+
* Drain a Vercel AI SDK streaming result into a serializable, replayable
|
|
1112
|
+
* span output: `{ text, usage, finishReason, toolCalls, toolResults }`.
|
|
1113
|
+
*
|
|
1114
|
+
* Pass it straight to `withSpan`:
|
|
1115
|
+
*
|
|
1116
|
+
* ```ts
|
|
1117
|
+
* import { finalizers } from "@bitfab/sdk"
|
|
1118
|
+
*
|
|
1119
|
+
* const traced = bitfab.withSpan(
|
|
1120
|
+
* "chat-turn",
|
|
1121
|
+
* { type: "agent", finalize: finalizers.aiSdk },
|
|
1122
|
+
* () => streamText({ model, messages }),
|
|
1123
|
+
* )
|
|
1124
|
+
* const result = traced() // caller still gets the live StreamTextResult
|
|
1125
|
+
* return result.toUIMessageStreamResponse()
|
|
1126
|
+
* ```
|
|
1127
|
+
*
|
|
1128
|
+
* Never throws: any field that is absent or rejects is recorded as
|
|
1129
|
+
* `undefined` so finalize never drops the span.
|
|
1130
|
+
*/
|
|
1131
|
+
declare function aiSdk(result: unknown): Promise<Record<string, unknown>>;
|
|
1132
|
+
/**
|
|
1133
|
+
* Collect a `ReadableStream`'s chunks into an array for the span output,
|
|
1134
|
+
* via a `tee()` so the caller's branch is untouched. The caller MUST use
|
|
1135
|
+
* the returned stream, not the original, since a stream can only be read
|
|
1136
|
+
* once:
|
|
1137
|
+
*
|
|
1138
|
+
* ```ts
|
|
1139
|
+
* let live: ReadableStream
|
|
1140
|
+
* const traced = bitfab.withSpan(
|
|
1141
|
+
* "render",
|
|
1142
|
+
* { finalize: (r) => finalizers.readableStream(r, (s) => { live = s }) },
|
|
1143
|
+
* () => makeReadableStream(),
|
|
1144
|
+
* )
|
|
1145
|
+
* traced()
|
|
1146
|
+
* return new Response(live!)
|
|
1147
|
+
* ```
|
|
1148
|
+
*
|
|
1149
|
+
* Prefer `aiSdk` for the Vercel AI SDK, whose result tees internally and
|
|
1150
|
+
* needs no caller rewiring.
|
|
1151
|
+
*/
|
|
1152
|
+
declare function readableStream(stream: ReadableStream, onLive: (live: ReadableStream) => void): Promise<{
|
|
1153
|
+
chunks: unknown[];
|
|
1154
|
+
}>;
|
|
1155
|
+
declare const finalizers: {
|
|
1156
|
+
aiSdk: typeof aiSdk;
|
|
1157
|
+
readableStream: typeof readableStream;
|
|
1158
|
+
};
|
|
1159
|
+
|
|
1160
|
+
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -756,6 +756,25 @@ interface SpanOptions {
|
|
|
756
756
|
* only the marked descendants return their recorded output.
|
|
757
757
|
*/
|
|
758
758
|
mockOnReplay?: boolean;
|
|
759
|
+
/**
|
|
760
|
+
* Record a serializable view of a non-serializable result (e.g. a live
|
|
761
|
+
* stream object) as the span output.
|
|
762
|
+
*
|
|
763
|
+
* When set, the wrapped function's raw return value is handed back to the
|
|
764
|
+
* caller unchanged (so streaming and first-byte latency are untouched),
|
|
765
|
+
* but instead of serializing that raw value, the span records
|
|
766
|
+
* `await finalize(result)`. Use this to trace functions that return a live
|
|
767
|
+
* stream consumed by the caller (Vercel AI SDK `streamText`, a
|
|
768
|
+
* `ReadableStream`, an SSE response) while still capturing a serializable,
|
|
769
|
+
* replayable output such as `{ text, usage, toolCalls }`.
|
|
770
|
+
*
|
|
771
|
+
* Reading from a multi-consumer stream result (like the AI SDK's, which
|
|
772
|
+
* tees internally) does not disturb the caller's own consumption. For the
|
|
773
|
+
* Vercel AI SDK shape, pass the prebuilt `finalizers.aiSdk` helper.
|
|
774
|
+
*
|
|
775
|
+
* Ignored for async-generator results, which are captured automatically.
|
|
776
|
+
*/
|
|
777
|
+
finalize?: (result: any) => unknown | Promise<unknown>;
|
|
759
778
|
}
|
|
760
779
|
|
|
761
780
|
/**
|
|
@@ -1070,7 +1089,7 @@ declare class BitfabFunction {
|
|
|
1070
1089
|
/**
|
|
1071
1090
|
* SDK version from package.json (injected at build time)
|
|
1072
1091
|
*/
|
|
1073
|
-
declare const __version__ = "0.
|
|
1092
|
+
declare const __version__ = "0.21.1";
|
|
1074
1093
|
|
|
1075
1094
|
/**
|
|
1076
1095
|
* Constants for the Bitfab SDK.
|
|
@@ -1080,4 +1099,62 @@ declare const __version__ = "0.20.0";
|
|
|
1080
1099
|
*/
|
|
1081
1100
|
declare const DEFAULT_SERVICE_URL = "https://bitfab.ai";
|
|
1082
1101
|
|
|
1083
|
-
|
|
1102
|
+
/**
|
|
1103
|
+
* Prebuilt `finalize` helpers for `withSpan({ finalize }, fn)`.
|
|
1104
|
+
*
|
|
1105
|
+
* A streaming function returns a live stream object that the caller consumes
|
|
1106
|
+
* directly (SSE, a UI message stream). `withSpan` hands that object back
|
|
1107
|
+
* unchanged; a `finalize` function tells it what serializable view to record
|
|
1108
|
+
* as the span output instead of the raw, non-serializable stream.
|
|
1109
|
+
*/
|
|
1110
|
+
/**
|
|
1111
|
+
* Drain a Vercel AI SDK streaming result into a serializable, replayable
|
|
1112
|
+
* span output: `{ text, usage, finishReason, toolCalls, toolResults }`.
|
|
1113
|
+
*
|
|
1114
|
+
* Pass it straight to `withSpan`:
|
|
1115
|
+
*
|
|
1116
|
+
* ```ts
|
|
1117
|
+
* import { finalizers } from "@bitfab/sdk"
|
|
1118
|
+
*
|
|
1119
|
+
* const traced = bitfab.withSpan(
|
|
1120
|
+
* "chat-turn",
|
|
1121
|
+
* { type: "agent", finalize: finalizers.aiSdk },
|
|
1122
|
+
* () => streamText({ model, messages }),
|
|
1123
|
+
* )
|
|
1124
|
+
* const result = traced() // caller still gets the live StreamTextResult
|
|
1125
|
+
* return result.toUIMessageStreamResponse()
|
|
1126
|
+
* ```
|
|
1127
|
+
*
|
|
1128
|
+
* Never throws: any field that is absent or rejects is recorded as
|
|
1129
|
+
* `undefined` so finalize never drops the span.
|
|
1130
|
+
*/
|
|
1131
|
+
declare function aiSdk(result: unknown): Promise<Record<string, unknown>>;
|
|
1132
|
+
/**
|
|
1133
|
+
* Collect a `ReadableStream`'s chunks into an array for the span output,
|
|
1134
|
+
* via a `tee()` so the caller's branch is untouched. The caller MUST use
|
|
1135
|
+
* the returned stream, not the original, since a stream can only be read
|
|
1136
|
+
* once:
|
|
1137
|
+
*
|
|
1138
|
+
* ```ts
|
|
1139
|
+
* let live: ReadableStream
|
|
1140
|
+
* const traced = bitfab.withSpan(
|
|
1141
|
+
* "render",
|
|
1142
|
+
* { finalize: (r) => finalizers.readableStream(r, (s) => { live = s }) },
|
|
1143
|
+
* () => makeReadableStream(),
|
|
1144
|
+
* )
|
|
1145
|
+
* traced()
|
|
1146
|
+
* return new Response(live!)
|
|
1147
|
+
* ```
|
|
1148
|
+
*
|
|
1149
|
+
* Prefer `aiSdk` for the Vercel AI SDK, whose result tees internally and
|
|
1150
|
+
* needs no caller rewiring.
|
|
1151
|
+
*/
|
|
1152
|
+
declare function readableStream(stream: ReadableStream, onLive: (live: ReadableStream) => void): Promise<{
|
|
1153
|
+
chunks: unknown[];
|
|
1154
|
+
}>;
|
|
1155
|
+
declare const finalizers: {
|
|
1156
|
+
aiSdk: typeof aiSdk;
|
|
1157
|
+
readableStream: typeof readableStream;
|
|
1158
|
+
};
|
|
1159
|
+
|
|
1160
|
+
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 };
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,11 @@ import {
|
|
|
8
8
|
ReplayEnvironment,
|
|
9
9
|
SUPPORTED_PROVIDERS,
|
|
10
10
|
__version__,
|
|
11
|
+
finalizers,
|
|
11
12
|
flushTraces,
|
|
12
13
|
getCurrentSpan,
|
|
13
14
|
getCurrentTrace
|
|
14
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-75LZO6JS.js";
|
|
15
16
|
import {
|
|
16
17
|
BitfabError
|
|
17
18
|
} from "./chunk-EQI6ZJC3.js";
|
|
@@ -27,6 +28,7 @@ export {
|
|
|
27
28
|
ReplayEnvironment,
|
|
28
29
|
SUPPORTED_PROVIDERS,
|
|
29
30
|
__version__,
|
|
31
|
+
finalizers,
|
|
30
32
|
flushTraces,
|
|
31
33
|
getCurrentSpan,
|
|
32
34
|
getCurrentTrace
|
package/dist/node.cjs
CHANGED
|
@@ -489,6 +489,7 @@ __export(node_exports, {
|
|
|
489
489
|
ReplayEnvironment: () => ReplayEnvironment,
|
|
490
490
|
SUPPORTED_PROVIDERS: () => SUPPORTED_PROVIDERS,
|
|
491
491
|
__version__: () => __version__,
|
|
492
|
+
finalizers: () => finalizers,
|
|
492
493
|
flushTraces: () => flushTraces,
|
|
493
494
|
getCurrentSpan: () => getCurrentSpan,
|
|
494
495
|
getCurrentTrace: () => getCurrentTrace
|
|
@@ -503,7 +504,7 @@ registerAsyncLocalStorageClass(
|
|
|
503
504
|
);
|
|
504
505
|
|
|
505
506
|
// src/version.generated.ts
|
|
506
|
-
var __version__ = "0.
|
|
507
|
+
var __version__ = "0.21.1";
|
|
507
508
|
|
|
508
509
|
// src/constants.ts
|
|
509
510
|
var DEFAULT_SERVICE_URL = "https://bitfab.ai";
|
|
@@ -2436,9 +2437,15 @@ var BitfabOpenAITracingProcessor = class {
|
|
|
2436
2437
|
* Extract and add input/response to serialized span, updating errors list.
|
|
2437
2438
|
*/
|
|
2438
2439
|
extractSpanInputResponse(span, serializedSpan, errors) {
|
|
2440
|
+
if (span.spanData?.type !== "response") {
|
|
2441
|
+
return;
|
|
2442
|
+
}
|
|
2439
2443
|
const spanData = serializedSpan.span_data;
|
|
2440
2444
|
try {
|
|
2441
|
-
|
|
2445
|
+
const input = span.spanData?._input;
|
|
2446
|
+
if (input !== void 0) {
|
|
2447
|
+
spanData.input = input;
|
|
2448
|
+
}
|
|
2442
2449
|
} catch (error) {
|
|
2443
2450
|
errors.push({
|
|
2444
2451
|
source: "sdk",
|
|
@@ -2447,7 +2454,10 @@ var BitfabOpenAITracingProcessor = class {
|
|
|
2447
2454
|
});
|
|
2448
2455
|
}
|
|
2449
2456
|
try {
|
|
2450
|
-
|
|
2457
|
+
const response = span.spanData?._response;
|
|
2458
|
+
if (response !== void 0) {
|
|
2459
|
+
spanData.response = response;
|
|
2460
|
+
}
|
|
2451
2461
|
} catch (error) {
|
|
2452
2462
|
errors.push({
|
|
2453
2463
|
source: "sdk",
|
|
@@ -3161,11 +3171,11 @@ var Bitfab = class {
|
|
|
3161
3171
|
startedAt,
|
|
3162
3172
|
spanType: options.type ?? "custom"
|
|
3163
3173
|
};
|
|
3164
|
-
const sendSpan = async (params) => {
|
|
3174
|
+
const sendSpan = async (params, spanOpts) => {
|
|
3165
3175
|
const replayCtx = getReplayContext();
|
|
3166
3176
|
const persistenceCollector = isRootSpan ? replayCtx?.pendingPersistence : void 0;
|
|
3167
3177
|
let resolvePersistence;
|
|
3168
|
-
if (persistenceCollector) {
|
|
3178
|
+
if (persistenceCollector && !spanOpts?.skipPersistenceRegistration) {
|
|
3169
3179
|
persistenceCollector.push(
|
|
3170
3180
|
new Promise((resolve) => {
|
|
3171
3181
|
resolvePersistence = resolve;
|
|
@@ -3265,11 +3275,41 @@ var Bitfab = class {
|
|
|
3265
3275
|
}
|
|
3266
3276
|
}
|
|
3267
3277
|
}
|
|
3278
|
+
const recordSpan = (result) => {
|
|
3279
|
+
if (options.finalize) {
|
|
3280
|
+
const replayCtx = getReplayContext();
|
|
3281
|
+
const persistenceCollector = isRootSpan ? replayCtx?.pendingPersistence : void 0;
|
|
3282
|
+
let resolvePersistence;
|
|
3283
|
+
if (persistenceCollector) {
|
|
3284
|
+
persistenceCollector.push(
|
|
3285
|
+
new Promise((resolve) => {
|
|
3286
|
+
resolvePersistence = resolve;
|
|
3287
|
+
})
|
|
3288
|
+
);
|
|
3289
|
+
}
|
|
3290
|
+
void Promise.resolve().then(() => options.finalize(result)).then(
|
|
3291
|
+
(output) => sendSpan(
|
|
3292
|
+
{ result: output },
|
|
3293
|
+
{ skipPersistenceRegistration: true }
|
|
3294
|
+
)
|
|
3295
|
+
).catch(
|
|
3296
|
+
(error) => sendSpan(
|
|
3297
|
+
{
|
|
3298
|
+
result: void 0,
|
|
3299
|
+
error: error instanceof Error ? `finalize failed: ${error.message}` : `finalize failed: ${String(error)}`
|
|
3300
|
+
},
|
|
3301
|
+
{ skipPersistenceRegistration: true }
|
|
3302
|
+
)
|
|
3303
|
+
).finally(() => resolvePersistence?.());
|
|
3304
|
+
} else {
|
|
3305
|
+
void sendSpan({ result });
|
|
3306
|
+
}
|
|
3307
|
+
};
|
|
3268
3308
|
const executeWithContext = () => {
|
|
3269
3309
|
const result = fn(...args);
|
|
3270
3310
|
if (result instanceof Promise) {
|
|
3271
3311
|
return result.then((resolvedResult) => {
|
|
3272
|
-
|
|
3312
|
+
recordSpan(resolvedResult);
|
|
3273
3313
|
return resolvedResult;
|
|
3274
3314
|
}).catch((error) => {
|
|
3275
3315
|
void sendSpan({
|
|
@@ -3282,7 +3322,7 @@ var Bitfab = class {
|
|
|
3282
3322
|
if (isAsyncGenerator(result)) {
|
|
3283
3323
|
return wrapAsyncGenerator(result, newStack, sendSpan);
|
|
3284
3324
|
}
|
|
3285
|
-
|
|
3325
|
+
recordSpan(result);
|
|
3286
3326
|
return result;
|
|
3287
3327
|
};
|
|
3288
3328
|
return runWithSpanStack(newStack, executeWithContext);
|
|
@@ -3566,6 +3606,54 @@ var BitfabFunction = class {
|
|
|
3566
3606
|
}
|
|
3567
3607
|
};
|
|
3568
3608
|
|
|
3609
|
+
// src/finalizers.ts
|
|
3610
|
+
async function settle(value) {
|
|
3611
|
+
try {
|
|
3612
|
+
return await value;
|
|
3613
|
+
} catch {
|
|
3614
|
+
return void 0;
|
|
3615
|
+
}
|
|
3616
|
+
}
|
|
3617
|
+
async function aiSdk(result) {
|
|
3618
|
+
const r = result ?? {};
|
|
3619
|
+
const [text, usage, totalUsage, finishReason, toolCalls, toolResults] = await Promise.all([
|
|
3620
|
+
settle(r.text),
|
|
3621
|
+
settle(r.usage),
|
|
3622
|
+
settle(r.totalUsage),
|
|
3623
|
+
settle(r.finishReason),
|
|
3624
|
+
settle(r.toolCalls),
|
|
3625
|
+
settle(r.toolResults)
|
|
3626
|
+
]);
|
|
3627
|
+
return {
|
|
3628
|
+
text,
|
|
3629
|
+
usage: totalUsage ?? usage,
|
|
3630
|
+
finishReason,
|
|
3631
|
+
toolCalls,
|
|
3632
|
+
toolResults
|
|
3633
|
+
};
|
|
3634
|
+
}
|
|
3635
|
+
async function readableStream(stream, onLive) {
|
|
3636
|
+
const [live, copy] = stream.tee();
|
|
3637
|
+
onLive(live);
|
|
3638
|
+
const chunks = [];
|
|
3639
|
+
const reader = copy.getReader();
|
|
3640
|
+
try {
|
|
3641
|
+
for (; ; ) {
|
|
3642
|
+
const { done, value } = await reader.read();
|
|
3643
|
+
if (done) {
|
|
3644
|
+
break;
|
|
3645
|
+
}
|
|
3646
|
+
chunks.push(value);
|
|
3647
|
+
}
|
|
3648
|
+
} catch {
|
|
3649
|
+
}
|
|
3650
|
+
return { chunks };
|
|
3651
|
+
}
|
|
3652
|
+
var finalizers = {
|
|
3653
|
+
aiSdk,
|
|
3654
|
+
readableStream
|
|
3655
|
+
};
|
|
3656
|
+
|
|
3569
3657
|
// src/node.ts
|
|
3570
3658
|
init_asyncStorage();
|
|
3571
3659
|
assertAsyncStorageRegistered();
|
|
@@ -3582,6 +3670,7 @@ assertAsyncStorageRegistered();
|
|
|
3582
3670
|
ReplayEnvironment,
|
|
3583
3671
|
SUPPORTED_PROVIDERS,
|
|
3584
3672
|
__version__,
|
|
3673
|
+
finalizers,
|
|
3585
3674
|
flushTraces,
|
|
3586
3675
|
getCurrentSpan,
|
|
3587
3676
|
getCurrentTrace
|