braintrust 3.15.0 → 3.17.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/bin/bt +41 -0
- package/dev/dist/index.js +8 -2
- package/dev/dist/index.mjs +8 -2
- package/dist/auto-instrumentations/hook.mjs +5 -1
- package/dist/browser.d.mts +64 -3
- package/dist/browser.d.ts +64 -3
- package/dist/browser.js +10 -2
- package/dist/browser.mjs +10 -2
- package/dist/cli.js +25 -5
- package/dist/edge-light.d.mts +1 -1
- package/dist/edge-light.d.ts +1 -1
- package/dist/edge-light.js +10 -2
- package/dist/edge-light.mjs +10 -2
- package/dist/index.d.mts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.js +11 -3
- package/dist/index.mjs +10 -2
- package/dist/instrumentation/index.js +5 -1
- package/dist/instrumentation/index.mjs +5 -1
- package/dist/workerd.d.mts +1 -1
- package/dist/workerd.d.ts +1 -1
- package/dist/workerd.js +10 -2
- package/dist/workerd.mjs +10 -2
- package/package.json +17 -3
- package/scripts/bt-helper.js +139 -0
- package/scripts/install.js +153 -0
package/dist/index.js
CHANGED
|
@@ -3854,7 +3854,7 @@ function btStreamParser() {
|
|
|
3854
3854
|
},
|
|
3855
3855
|
async transform(chunk, controller) {
|
|
3856
3856
|
if (chunk instanceof Uint8Array) {
|
|
3857
|
-
parser.feed(decoder.decode(chunk));
|
|
3857
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3858
3858
|
} else if (typeof chunk === "string") {
|
|
3859
3859
|
parser.feed(chunk);
|
|
3860
3860
|
} else {
|
|
@@ -3862,6 +3862,10 @@ function btStreamParser() {
|
|
|
3862
3862
|
}
|
|
3863
3863
|
},
|
|
3864
3864
|
async flush(controller) {
|
|
3865
|
+
const tail = decoder.decode();
|
|
3866
|
+
if (tail) {
|
|
3867
|
+
parser.feed(tail);
|
|
3868
|
+
}
|
|
3865
3869
|
controller.terminate();
|
|
3866
3870
|
}
|
|
3867
3871
|
});
|
|
@@ -25480,6 +25484,7 @@ _chunkVMBQETG3js.__export.call(void 0, exports_exports, {
|
|
|
25480
25484
|
LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,
|
|
25481
25485
|
LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
25482
25486
|
LazyValue: () => LazyValue,
|
|
25487
|
+
LocalTrace: () => LocalTrace,
|
|
25483
25488
|
Logger: () => Logger,
|
|
25484
25489
|
LoginInvalidOrgError: () => LoginInvalidOrgError,
|
|
25485
25490
|
NOOP_SPAN: () => NOOP_SPAN,
|
|
@@ -25713,6 +25718,7 @@ async function invoke(args) {
|
|
|
25713
25718
|
mode,
|
|
25714
25719
|
schema,
|
|
25715
25720
|
strict,
|
|
25721
|
+
overrides,
|
|
25716
25722
|
projectId,
|
|
25717
25723
|
...functionIdArgs
|
|
25718
25724
|
} = args;
|
|
@@ -25749,7 +25755,8 @@ async function invoke(args) {
|
|
|
25749
25755
|
tags,
|
|
25750
25756
|
stream,
|
|
25751
25757
|
mode,
|
|
25752
|
-
strict
|
|
25758
|
+
strict,
|
|
25759
|
+
overrides
|
|
25753
25760
|
};
|
|
25754
25761
|
const headers = {
|
|
25755
25762
|
Accept: stream ? "text/event-stream" : "application/json"
|
|
@@ -32709,4 +32716,5 @@ configureNode();
|
|
|
32709
32716
|
|
|
32710
32717
|
|
|
32711
32718
|
|
|
32712
|
-
|
|
32719
|
+
|
|
32720
|
+
exports.Attachment = Attachment; exports.AttachmentReference = AttachmentReference; exports.BRAINTRUST_CURRENT_SPAN_STORE = BRAINTRUST_CURRENT_SPAN_STORE; exports.BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME = BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME; exports.BaseAttachment = BaseAttachment; exports.BaseExperiment = BaseExperiment; exports.BraintrustLangChainCallbackHandler = BraintrustLangChainCallbackHandler; exports.BraintrustMiddleware = BraintrustMiddleware; exports.BraintrustObservabilityExporter = BraintrustObservabilityExporter; exports.BraintrustState = BraintrustState; exports.BraintrustStream = BraintrustStream; exports.CachedSpanFetcher = CachedSpanFetcher; exports.CodeFunction = CodeFunction; exports.CodePrompt = CodePrompt; exports.ContextManager = ContextManager; exports.DEFAULT_FETCH_BATCH_SIZE = DEFAULT_FETCH_BATCH_SIZE; exports.DEFAULT_MAX_REQUEST_SIZE = DEFAULT_MAX_REQUEST_SIZE; exports.Dataset = Dataset2; exports.DatasetPipeline = DatasetPipeline; exports.ERR_PERMALINK = ERR_PERMALINK; exports.Eval = Eval; exports.EvalResultWithSummary = EvalResultWithSummary; exports.Experiment = Experiment2; exports.ExternalAttachment = ExternalAttachment; exports.FailedHTTPResponse = FailedHTTPResponse; exports.IDGenerator = IDGenerator; exports.JSONAttachment = JSONAttachment; exports.LEGACY_CACHED_HEADER = LEGACY_CACHED_HEADER; exports.LOGS3_OVERFLOW_REFERENCE_TYPE = LOGS3_OVERFLOW_REFERENCE_TYPE; exports.LazyValue = LazyValue; exports.LocalTrace = LocalTrace; exports.Logger = Logger; exports.LoginInvalidOrgError = LoginInvalidOrgError; exports.NOOP_SPAN = NOOP_SPAN; exports.NOOP_SPAN_PERMALINK = NOOP_SPAN_PERMALINK; exports.NoopSpan = NoopSpan; exports.ObjectFetcher = ObjectFetcher; exports.Project = Project2; exports.ProjectNameIdMap = ProjectNameIdMap; exports.Prompt = Prompt2; exports.PromptBuilder = PromptBuilder; exports.ReadonlyAttachment = ReadonlyAttachment; exports.ReadonlyExperiment = ReadonlyExperiment; exports.Reporter = Reporter; exports.ScorerBuilder = ScorerBuilder; exports.SpanFetcher = SpanFetcher; exports.SpanImpl = SpanImpl; exports.TestBackgroundLogger = TestBackgroundLogger; exports.ToolBuilder = ToolBuilder; exports.UUIDGenerator = UUIDGenerator; exports.X_CACHED_HEADER = X_CACHED_HEADER; exports._exportsForTestingOnly = _exportsForTestingOnly; exports._internalGetGlobalState = _internalGetGlobalState; exports._internalIso = _chunkVMBQETG3js.isomorph_default; exports._internalSetInitialState = _internalSetInitialState; exports.addAzureBlobHeaders = addAzureBlobHeaders; exports.braintrustFlueObserver = braintrustFlueObserver; exports.braintrustStreamChunkSchema = braintrustStreamChunkSchema; exports.buildLocalSummary = buildLocalSummary; exports.configureInstrumentation = configureInstrumentation; exports.constructLogs3OverflowRequest = constructLogs3OverflowRequest; exports.createFinalValuePassThroughStream = createFinalValuePassThroughStream; exports.currentExperiment = currentExperiment; exports.currentLogger = currentLogger; exports.currentSpan = currentSpan; exports.deepCopyEvent = deepCopyEvent; exports.default = exports_exports; exports.defaultErrorScoreHandler = defaultErrorScoreHandler; exports.deserializePlainStringAsJSON = deserializePlainStringAsJSON; exports.devNullWritableStream = devNullWritableStream; exports.evaluatorDefinitionSchema = evaluatorDefinitionSchema; exports.evaluatorDefinitionsSchema = evaluatorDefinitionsSchema; exports.flush = flush; exports.getContextManager = getContextManager; exports.getIdGenerator = getIdGenerator; exports.getPromptVersions = getPromptVersions; exports.getSpanParentObject = getSpanParentObject; exports.getTemplateRenderer = getTemplateRenderer; exports.graph = graph_framework_exports; exports.init = init; exports.initDataset = initDataset; exports.initExperiment = initExperiment; exports.initFunction = initFunction; exports.initLogger = initLogger; exports.initNodeTestSuite = initNodeTestSuite; exports.invoke = invoke; exports.isTemplateFormat = isTemplateFormat; exports.loadParameters = loadParameters; exports.loadPrompt = loadPrompt; exports.log = log; exports.logError = logError; exports.login = login; exports.loginToState = loginToState; exports.logs3OverflowUploadSchema = logs3OverflowUploadSchema; exports.newId = newId; exports.parseCachedHeader = parseCachedHeader; exports.parseTemplateFormat = parseTemplateFormat; exports.permalink = permalink; exports.pickLogs3OverflowObjectIds = pickLogs3OverflowObjectIds; exports.projects = projects; exports.promptContentsSchema = promptContentsSchema; exports.promptDefinitionSchema = promptDefinitionSchema; exports.promptDefinitionToPromptData = promptDefinitionToPromptData; exports.promptDefinitionWithToolsSchema = promptDefinitionWithToolsSchema; exports.registerOtelFlush = registerOtelFlush; exports.registerSandbox = registerSandbox; exports.registerTemplatePlugin = registerTemplatePlugin; exports.renderMessage = renderMessage; exports.renderPromptParams = renderPromptParams; exports.renderTemplateContent = renderTemplateContent; exports.reportFailures = reportFailures; exports.runEvaluator = runEvaluator; exports.setFetch = setFetch; exports.setMaskingFunction = setMaskingFunction; exports.spanComponentsToObjectId = spanComponentsToObjectId; exports.startSpan = startSpan; exports.summarize = summarize; exports.templateRegistry = templateRegistry; exports.toolFunctionDefinitionSchema = ToolFunctionDefinition; exports.traceable = traceable; exports.traced = traced; exports.updateSpan = updateSpan; exports.uploadLogs3OverflowPayload = uploadLogs3OverflowPayload; exports.utf8ByteLength = utf8ByteLength; exports.withCurrent = withCurrent; exports.withDataset = withDataset; exports.withExperiment = withExperiment; exports.withLogger = withLogger; exports.withParent = withParent; exports.wrapAISDK = wrapAISDK; exports.wrapAISDKModel = wrapAISDKModel; exports.wrapAgentClass = wrapAgentClass; exports.wrapAnthropic = wrapAnthropic; exports.wrapClaudeAgentSDK = wrapClaudeAgentSDK; exports.wrapCohere = wrapCohere; exports.wrapCopilotClient = wrapCopilotClient; exports.wrapCursorSDK = wrapCursorSDK; exports.wrapGenkit = wrapGenkit; exports.wrapGoogleADK = wrapGoogleADK; exports.wrapGoogleGenAI = wrapGoogleGenAI; exports.wrapGroq = wrapGroq; exports.wrapHuggingFace = wrapHuggingFace; exports.wrapMastraAgent = wrapMastraAgent; exports.wrapMistral = wrapMistral; exports.wrapOpenAI = wrapOpenAI; exports.wrapOpenAICodexSDK = wrapOpenAICodexSDK; exports.wrapOpenAIv4 = wrapOpenAIv4; exports.wrapOpenRouter = wrapOpenRouter; exports.wrapOpenRouterAgent = wrapOpenRouterAgent; exports.wrapTraced = wrapTraced; exports.wrapVitest = wrapVitest;
|
package/dist/index.mjs
CHANGED
|
@@ -3854,7 +3854,7 @@ function btStreamParser() {
|
|
|
3854
3854
|
},
|
|
3855
3855
|
async transform(chunk, controller) {
|
|
3856
3856
|
if (chunk instanceof Uint8Array) {
|
|
3857
|
-
parser.feed(decoder.decode(chunk));
|
|
3857
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3858
3858
|
} else if (typeof chunk === "string") {
|
|
3859
3859
|
parser.feed(chunk);
|
|
3860
3860
|
} else {
|
|
@@ -3862,6 +3862,10 @@ function btStreamParser() {
|
|
|
3862
3862
|
}
|
|
3863
3863
|
},
|
|
3864
3864
|
async flush(controller) {
|
|
3865
|
+
const tail = decoder.decode();
|
|
3866
|
+
if (tail) {
|
|
3867
|
+
parser.feed(tail);
|
|
3868
|
+
}
|
|
3865
3869
|
controller.terminate();
|
|
3866
3870
|
}
|
|
3867
3871
|
});
|
|
@@ -25480,6 +25484,7 @@ __export(exports_exports, {
|
|
|
25480
25484
|
LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,
|
|
25481
25485
|
LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
25482
25486
|
LazyValue: () => LazyValue,
|
|
25487
|
+
LocalTrace: () => LocalTrace,
|
|
25483
25488
|
Logger: () => Logger,
|
|
25484
25489
|
LoginInvalidOrgError: () => LoginInvalidOrgError,
|
|
25485
25490
|
NOOP_SPAN: () => NOOP_SPAN,
|
|
@@ -25713,6 +25718,7 @@ async function invoke(args) {
|
|
|
25713
25718
|
mode,
|
|
25714
25719
|
schema,
|
|
25715
25720
|
strict,
|
|
25721
|
+
overrides,
|
|
25716
25722
|
projectId,
|
|
25717
25723
|
...functionIdArgs
|
|
25718
25724
|
} = args;
|
|
@@ -25749,7 +25755,8 @@ async function invoke(args) {
|
|
|
25749
25755
|
tags,
|
|
25750
25756
|
stream,
|
|
25751
25757
|
mode,
|
|
25752
|
-
strict
|
|
25758
|
+
strict,
|
|
25759
|
+
overrides
|
|
25753
25760
|
};
|
|
25754
25761
|
const headers = {
|
|
25755
25762
|
Accept: stream ? "text/event-stream" : "application/json"
|
|
@@ -32589,6 +32596,7 @@ export {
|
|
|
32589
32596
|
LEGACY_CACHED_HEADER,
|
|
32590
32597
|
LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
32591
32598
|
LazyValue,
|
|
32599
|
+
LocalTrace,
|
|
32592
32600
|
Logger,
|
|
32593
32601
|
LoginInvalidOrgError,
|
|
32594
32602
|
NOOP_SPAN,
|
|
@@ -3787,7 +3787,7 @@ function btStreamParser() {
|
|
|
3787
3787
|
},
|
|
3788
3788
|
async transform(chunk, controller) {
|
|
3789
3789
|
if (chunk instanceof Uint8Array) {
|
|
3790
|
-
parser.feed(decoder.decode(chunk));
|
|
3790
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3791
3791
|
} else if (typeof chunk === "string") {
|
|
3792
3792
|
parser.feed(chunk);
|
|
3793
3793
|
} else {
|
|
@@ -3795,6 +3795,10 @@ function btStreamParser() {
|
|
|
3795
3795
|
}
|
|
3796
3796
|
},
|
|
3797
3797
|
async flush(controller) {
|
|
3798
|
+
const tail = decoder.decode();
|
|
3799
|
+
if (tail) {
|
|
3800
|
+
parser.feed(tail);
|
|
3801
|
+
}
|
|
3798
3802
|
controller.terminate();
|
|
3799
3803
|
}
|
|
3800
3804
|
});
|
|
@@ -3746,7 +3746,7 @@ function btStreamParser() {
|
|
|
3746
3746
|
},
|
|
3747
3747
|
async transform(chunk, controller) {
|
|
3748
3748
|
if (chunk instanceof Uint8Array) {
|
|
3749
|
-
parser.feed(decoder.decode(chunk));
|
|
3749
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3750
3750
|
} else if (typeof chunk === "string") {
|
|
3751
3751
|
parser.feed(chunk);
|
|
3752
3752
|
} else {
|
|
@@ -3754,6 +3754,10 @@ function btStreamParser() {
|
|
|
3754
3754
|
}
|
|
3755
3755
|
},
|
|
3756
3756
|
async flush(controller) {
|
|
3757
|
+
const tail = decoder.decode();
|
|
3758
|
+
if (tail) {
|
|
3759
|
+
parser.feed(tail);
|
|
3760
|
+
}
|
|
3757
3761
|
controller.terminate();
|
|
3758
3762
|
}
|
|
3759
3763
|
});
|
package/dist/workerd.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustObservabilityExporter, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MastraObservabilityExporter, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustFlueObserver, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.mjs';
|
|
1
|
+
export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustObservabilityExporter, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LocalTrace, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MastraObservabilityExporter, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustFlueObserver, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.mjs';
|
|
2
2
|
import 'zod/v3';
|
package/dist/workerd.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustObservabilityExporter, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MastraObservabilityExporter, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustFlueObserver, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.js';
|
|
1
|
+
export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustObservabilityExporter, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LocalTrace, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MastraObservabilityExporter, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustFlueObserver, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.js';
|
|
2
2
|
import 'zod/v3';
|
package/dist/workerd.js
CHANGED
|
@@ -60,6 +60,7 @@ __export(workerd_exports, {
|
|
|
60
60
|
LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,
|
|
61
61
|
LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
62
62
|
LazyValue: () => LazyValue,
|
|
63
|
+
LocalTrace: () => LocalTrace,
|
|
63
64
|
Logger: () => Logger,
|
|
64
65
|
LoginInvalidOrgError: () => LoginInvalidOrgError,
|
|
65
66
|
NOOP_SPAN: () => NOOP_SPAN,
|
|
@@ -3879,7 +3880,7 @@ function btStreamParser() {
|
|
|
3879
3880
|
},
|
|
3880
3881
|
async transform(chunk, controller) {
|
|
3881
3882
|
if (chunk instanceof Uint8Array) {
|
|
3882
|
-
parser.feed(decoder.decode(chunk));
|
|
3883
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3883
3884
|
} else if (typeof chunk === "string") {
|
|
3884
3885
|
parser.feed(chunk);
|
|
3885
3886
|
} else {
|
|
@@ -3887,6 +3888,10 @@ function btStreamParser() {
|
|
|
3887
3888
|
}
|
|
3888
3889
|
},
|
|
3889
3890
|
async flush(controller) {
|
|
3891
|
+
const tail = decoder.decode();
|
|
3892
|
+
if (tail) {
|
|
3893
|
+
parser.feed(tail);
|
|
3894
|
+
}
|
|
3890
3895
|
controller.terminate();
|
|
3891
3896
|
}
|
|
3892
3897
|
});
|
|
@@ -25954,6 +25959,7 @@ __export(exports_exports, {
|
|
|
25954
25959
|
LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,
|
|
25955
25960
|
LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
25956
25961
|
LazyValue: () => LazyValue,
|
|
25962
|
+
LocalTrace: () => LocalTrace,
|
|
25957
25963
|
Logger: () => Logger,
|
|
25958
25964
|
LoginInvalidOrgError: () => LoginInvalidOrgError,
|
|
25959
25965
|
NOOP_SPAN: () => NOOP_SPAN,
|
|
@@ -26187,6 +26193,7 @@ async function invoke(args) {
|
|
|
26187
26193
|
mode,
|
|
26188
26194
|
schema,
|
|
26189
26195
|
strict,
|
|
26196
|
+
overrides,
|
|
26190
26197
|
projectId,
|
|
26191
26198
|
...functionIdArgs
|
|
26192
26199
|
} = args;
|
|
@@ -26223,7 +26230,8 @@ async function invoke(args) {
|
|
|
26223
26230
|
tags,
|
|
26224
26231
|
stream,
|
|
26225
26232
|
mode,
|
|
26226
|
-
strict
|
|
26233
|
+
strict,
|
|
26234
|
+
overrides
|
|
26227
26235
|
};
|
|
26228
26236
|
const headers = {
|
|
26229
26237
|
Accept: stream ? "text/event-stream" : "application/json"
|
package/dist/workerd.mjs
CHANGED
|
@@ -3702,7 +3702,7 @@ function btStreamParser() {
|
|
|
3702
3702
|
},
|
|
3703
3703
|
async transform(chunk, controller) {
|
|
3704
3704
|
if (chunk instanceof Uint8Array) {
|
|
3705
|
-
parser.feed(decoder.decode(chunk));
|
|
3705
|
+
parser.feed(decoder.decode(chunk, { stream: true }));
|
|
3706
3706
|
} else if (typeof chunk === "string") {
|
|
3707
3707
|
parser.feed(chunk);
|
|
3708
3708
|
} else {
|
|
@@ -3710,6 +3710,10 @@ function btStreamParser() {
|
|
|
3710
3710
|
}
|
|
3711
3711
|
},
|
|
3712
3712
|
async flush(controller) {
|
|
3713
|
+
const tail = decoder.decode();
|
|
3714
|
+
if (tail) {
|
|
3715
|
+
parser.feed(tail);
|
|
3716
|
+
}
|
|
3713
3717
|
controller.terminate();
|
|
3714
3718
|
}
|
|
3715
3719
|
});
|
|
@@ -25777,6 +25781,7 @@ __export(exports_exports, {
|
|
|
25777
25781
|
LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,
|
|
25778
25782
|
LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
25779
25783
|
LazyValue: () => LazyValue,
|
|
25784
|
+
LocalTrace: () => LocalTrace,
|
|
25780
25785
|
Logger: () => Logger,
|
|
25781
25786
|
LoginInvalidOrgError: () => LoginInvalidOrgError,
|
|
25782
25787
|
NOOP_SPAN: () => NOOP_SPAN,
|
|
@@ -26010,6 +26015,7 @@ async function invoke(args) {
|
|
|
26010
26015
|
mode,
|
|
26011
26016
|
schema,
|
|
26012
26017
|
strict,
|
|
26018
|
+
overrides,
|
|
26013
26019
|
projectId,
|
|
26014
26020
|
...functionIdArgs
|
|
26015
26021
|
} = args;
|
|
@@ -26046,7 +26052,8 @@ async function invoke(args) {
|
|
|
26046
26052
|
tags,
|
|
26047
26053
|
stream,
|
|
26048
26054
|
mode,
|
|
26049
|
-
strict
|
|
26055
|
+
strict,
|
|
26056
|
+
overrides
|
|
26050
26057
|
};
|
|
26051
26058
|
const headers = {
|
|
26052
26059
|
Accept: stream ? "text/event-stream" : "application/json"
|
|
@@ -33081,6 +33088,7 @@ export {
|
|
|
33081
33088
|
LEGACY_CACHED_HEADER,
|
|
33082
33089
|
LOGS3_OVERFLOW_REFERENCE_TYPE,
|
|
33083
33090
|
LazyValue,
|
|
33091
|
+
LocalTrace,
|
|
33084
33092
|
Logger,
|
|
33085
33093
|
LoginInvalidOrgError,
|
|
33086
33094
|
NOOP_SPAN,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "braintrust",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.17.0",
|
|
4
4
|
"description": "SDK for integrating Braintrust",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"./dist/index.d.mts": "./dist/browser.d.mts"
|
|
20
20
|
},
|
|
21
21
|
"bin": {
|
|
22
|
-
"braintrust": "./dist/cli.js"
|
|
22
|
+
"braintrust": "./dist/cli.js",
|
|
23
|
+
"bt": "./bin/bt"
|
|
23
24
|
},
|
|
24
25
|
"exports": {
|
|
25
26
|
"./package.json": "./package.json",
|
|
@@ -127,9 +128,13 @@
|
|
|
127
128
|
"files": [
|
|
128
129
|
"dist/**/*",
|
|
129
130
|
"dev/dist/**/*",
|
|
130
|
-
"util/dist/**/*"
|
|
131
|
+
"util/dist/**/*",
|
|
132
|
+
"bin/bt",
|
|
133
|
+
"scripts/bt-helper.js",
|
|
134
|
+
"scripts/install.js"
|
|
131
135
|
],
|
|
132
136
|
"scripts": {
|
|
137
|
+
"postinstall": "node ./scripts/install.js",
|
|
133
138
|
"build": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsup",
|
|
134
139
|
"check:typings": "tsc --noEmit",
|
|
135
140
|
"watch": "tsup --watch",
|
|
@@ -224,6 +229,15 @@
|
|
|
224
229
|
"peerDependencies": {
|
|
225
230
|
"zod": "^3.25.34 || ^4.0"
|
|
226
231
|
},
|
|
232
|
+
"optionalDependencies": {
|
|
233
|
+
"@braintrust/bt-darwin-arm64": "0.11.1",
|
|
234
|
+
"@braintrust/bt-darwin-x64": "0.11.1",
|
|
235
|
+
"@braintrust/bt-linux-arm64": "0.11.1",
|
|
236
|
+
"@braintrust/bt-linux-x64": "0.11.1",
|
|
237
|
+
"@braintrust/bt-linux-x64-musl": "0.11.1",
|
|
238
|
+
"@braintrust/bt-win32-arm64": "0.11.1",
|
|
239
|
+
"@braintrust/bt-win32-x64": "0.11.1"
|
|
240
|
+
},
|
|
227
241
|
"publishConfig": {
|
|
228
242
|
"access": "public",
|
|
229
243
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Shared helpers for locating the `bt` binary. Used by both `bin/bt`
|
|
4
|
+
// (the runtime launcher) and `scripts/install.js` (the postinstall
|
|
5
|
+
// fallback downloader).
|
|
6
|
+
|
|
7
|
+
const fs = require("node:fs");
|
|
8
|
+
const os = require("node:os");
|
|
9
|
+
const path = require("node:path");
|
|
10
|
+
|
|
11
|
+
const BINARY_DISTRIBUTIONS = [
|
|
12
|
+
{ packageName: "@braintrust/bt-darwin-arm64", subpath: "bin/bt" },
|
|
13
|
+
{ packageName: "@braintrust/bt-darwin-x64", subpath: "bin/bt" },
|
|
14
|
+
{ packageName: "@braintrust/bt-linux-arm64", subpath: "bin/bt" },
|
|
15
|
+
{ packageName: "@braintrust/bt-linux-x64", subpath: "bin/bt" },
|
|
16
|
+
{ packageName: "@braintrust/bt-linux-x64-musl", subpath: "bin/bt" },
|
|
17
|
+
{ packageName: "@braintrust/bt-win32-arm64", subpath: "bin/bt.exe" },
|
|
18
|
+
{ packageName: "@braintrust/bt-win32-x64", subpath: "bin/bt.exe" },
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
function detectLibc() {
|
|
22
|
+
if (process.platform !== "linux") return null;
|
|
23
|
+
try {
|
|
24
|
+
const report = process.report && process.report.getReport();
|
|
25
|
+
if (report && report.header && report.header.glibcVersionRuntime) {
|
|
26
|
+
return "glibc";
|
|
27
|
+
}
|
|
28
|
+
return "musl";
|
|
29
|
+
} catch {
|
|
30
|
+
return "glibc";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function binaryName() {
|
|
35
|
+
return process.platform === "win32" ? "bt.exe" : "bt";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getDistributionForThisPlatform() {
|
|
39
|
+
const arch = os.arch();
|
|
40
|
+
const platform = os.platform();
|
|
41
|
+
const subpath = `bin/${binaryName()}`;
|
|
42
|
+
|
|
43
|
+
let packageName;
|
|
44
|
+
if (platform === "darwin") {
|
|
45
|
+
if (arch === "arm64") packageName = "@braintrust/bt-darwin-arm64";
|
|
46
|
+
else if (arch === "x64") packageName = "@braintrust/bt-darwin-x64";
|
|
47
|
+
} else if (platform === "linux") {
|
|
48
|
+
if (arch === "arm64") {
|
|
49
|
+
packageName = "@braintrust/bt-linux-arm64";
|
|
50
|
+
} else if (arch === "x64") {
|
|
51
|
+
packageName =
|
|
52
|
+
detectLibc() === "musl"
|
|
53
|
+
? "@braintrust/bt-linux-x64-musl"
|
|
54
|
+
: "@braintrust/bt-linux-x64";
|
|
55
|
+
}
|
|
56
|
+
} else if (platform === "win32") {
|
|
57
|
+
if (arch === "arm64") packageName = "@braintrust/bt-win32-arm64";
|
|
58
|
+
else if (arch === "x64") packageName = "@braintrust/bt-win32-x64";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return { packageName, subpath };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function throwUnsupportedPlatformError() {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`Unsupported operating system or architecture! The bt CLI does not work on ${process.platform}-${process.arch}.
|
|
67
|
+
|
|
68
|
+
bt supports:
|
|
69
|
+
- macOS (darwin) on arm64 and x64
|
|
70
|
+
- Linux on arm64 and x64 (glibc and musl)
|
|
71
|
+
- Windows on arm64 and x64`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Constructed indirectly so bundlers (e.g. @vercel/nft) don't statically
|
|
76
|
+
// detect the fallback binary path as an asset to trace.
|
|
77
|
+
function getFallbackBinaryPath() {
|
|
78
|
+
const parts = [__dirname, binaryName()];
|
|
79
|
+
return path.resolve(...parts);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function getBinaryPath() {
|
|
83
|
+
if (process.env.BT_BINARY_PATH) {
|
|
84
|
+
return process.env.BT_BINARY_PATH;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const { packageName, subpath } = getDistributionForThisPlatform();
|
|
88
|
+
|
|
89
|
+
if (packageName === undefined) {
|
|
90
|
+
throwUnsupportedPlatformError();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Prefer the optional dep so a stale fallback from a prior
|
|
94
|
+
// `--omit=optional` install can't shadow a newer optional dep on upgrade.
|
|
95
|
+
try {
|
|
96
|
+
return require.resolve(`${packageName}/${subpath}`);
|
|
97
|
+
} catch (e) {
|
|
98
|
+
const fallbackBinaryPath = getFallbackBinaryPath();
|
|
99
|
+
if (fs.existsSync(fallbackBinaryPath)) {
|
|
100
|
+
return fallbackBinaryPath;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const otherInstalled = BINARY_DISTRIBUTIONS.find((dist) => {
|
|
104
|
+
try {
|
|
105
|
+
require.resolve(`${dist.packageName}/${dist.subpath}`);
|
|
106
|
+
return true;
|
|
107
|
+
} catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// Error messages inspired by esbuild:
|
|
113
|
+
// https://github.com/evanw/esbuild/blob/f3d535262e3998d845d0f102b944ecd5a9efda57/lib/npm/node-platform.ts#L150
|
|
114
|
+
if (otherInstalled) {
|
|
115
|
+
throw new Error(
|
|
116
|
+
`bt binary for this platform/architecture not found!
|
|
117
|
+
|
|
118
|
+
The "${otherInstalled.packageName}" package is installed, but for the current platform you should have the "${packageName}" package installed instead. This usually happens if "braintrust" is installed on one platform (for example macOS or Windows) and the "node_modules" folder is then reused on another (for example Linux in Docker).
|
|
119
|
+
|
|
120
|
+
To fix this, avoid copying the "node_modules" folder, and instead freshly install your dependencies on the target system. You can also configure your package manager to install the right package. For example, yarn has the "supportedArchitectures" feature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitecture.`,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
throw new Error(
|
|
125
|
+
`bt binary for this platform/architecture not found!
|
|
126
|
+
|
|
127
|
+
It seems like none of the "braintrust" package's optional dependencies got installed. Please make sure your package manager is configured to install optional dependencies. If you are using npm, don't set the "--no-optional", "--ignore-optional", or "--omit=optional" flags. The "braintrust" package needs the "optionalDependencies" feature in order to install the bt binary.`,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = {
|
|
133
|
+
BINARY_DISTRIBUTIONS,
|
|
134
|
+
binaryName,
|
|
135
|
+
getBinaryPath,
|
|
136
|
+
getDistributionForThisPlatform,
|
|
137
|
+
getFallbackBinaryPath,
|
|
138
|
+
throwUnsupportedPlatformError,
|
|
139
|
+
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Postinstall script for the `bt` CLI binary.
|
|
4
|
+
//
|
|
5
|
+
// The native binary ships in a per-platform `@braintrust/bt-*` package listed
|
|
6
|
+
// in `optionalDependencies`; npm/pnpm install only the one matching the host.
|
|
7
|
+
// If a package manager is run with `--no-optional`, `--ignore-optional`, or
|
|
8
|
+
// `--omit=optional`, none of those packages get installed and `bt` would be
|
|
9
|
+
// unusable. As a workaround, we manually fetch the matching tarball from the
|
|
10
|
+
// npm registry and extract the binary so the launcher can find it.
|
|
11
|
+
|
|
12
|
+
const fs = require("node:fs");
|
|
13
|
+
const https = require("node:https");
|
|
14
|
+
const path = require("node:path");
|
|
15
|
+
const zlib = require("node:zlib");
|
|
16
|
+
|
|
17
|
+
const helper = require("./bt-helper");
|
|
18
|
+
const pkg = require("../package.json");
|
|
19
|
+
|
|
20
|
+
if (process.env.BT_SKIP_DOWNLOAD === "1") {
|
|
21
|
+
console.log(
|
|
22
|
+
"bt: skipping post-install binary download because BT_SKIP_DOWNLOAD=1 is set.",
|
|
23
|
+
);
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const { packageName, subpath } = helper.getDistributionForThisPlatform();
|
|
28
|
+
|
|
29
|
+
if (packageName === undefined) {
|
|
30
|
+
// Don't fail the install; the launcher will surface the unsupported-platform
|
|
31
|
+
// error if/when the user actually tries to run `bt`.
|
|
32
|
+
console.error(
|
|
33
|
+
`bt: no prebuilt binary available for ${process.platform}-${process.arch}; the bt CLI will not be available.`,
|
|
34
|
+
);
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
require.resolve(`${packageName}/${subpath}`);
|
|
40
|
+
// Optional dependency was installed successfully. Nothing to do.
|
|
41
|
+
process.exit(0);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
// Fall through to the manual download path below.
|
|
44
|
+
console.log(
|
|
45
|
+
`bt: failed to locate the "${packageName}" package after installation.
|
|
46
|
+
|
|
47
|
+
This can happen if you use an option to disable optional dependencies during installation, like "--no-optional", "--ignore-optional", or "--omit=optional". The "braintrust" package uses the "optionalDependencies" package.json feature to install the correct bt binary for your platform and operating system. This post-install script will now try to work around that by manually downloading the bt binary from the npm registry. If this fails, you need to remove the "--no-optional", "--ignore-optional", and "--omit=optional" flags for bt to work.`,
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const version = (pkg.optionalDependencies || {})[packageName];
|
|
52
|
+
if (!version) {
|
|
53
|
+
// Don't fail the parent install: the SDK works without `bt`, and the
|
|
54
|
+
// launcher errors clearly if it's actually invoked.
|
|
55
|
+
console.error(
|
|
56
|
+
`bt: cannot determine which version of "${packageName}" to download — it is not listed in the "braintrust" package's optionalDependencies. The bt CLI will not be available; the rest of the braintrust SDK is unaffected.`,
|
|
57
|
+
);
|
|
58
|
+
process.exit(0);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function fetchBuffer(url, redirectsRemaining = 5) {
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
https
|
|
64
|
+
.get(url, (response) => {
|
|
65
|
+
const { statusCode = 0, headers } = response;
|
|
66
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
67
|
+
const chunks = [];
|
|
68
|
+
response.on("data", (chunk) => chunks.push(chunk));
|
|
69
|
+
response.on("end", () => resolve(Buffer.concat(chunks)));
|
|
70
|
+
response.on("error", reject);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (
|
|
74
|
+
statusCode >= 300 &&
|
|
75
|
+
statusCode < 400 &&
|
|
76
|
+
headers.location &&
|
|
77
|
+
redirectsRemaining > 0
|
|
78
|
+
) {
|
|
79
|
+
response.resume();
|
|
80
|
+
fetchBuffer(headers.location, redirectsRemaining - 1).then(
|
|
81
|
+
resolve,
|
|
82
|
+
reject,
|
|
83
|
+
);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
response.resume();
|
|
87
|
+
reject(
|
|
88
|
+
new Error(
|
|
89
|
+
`npm registry responded with status code ${statusCode} when downloading ${url}`,
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
})
|
|
93
|
+
.on("error", reject);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Extracts a single file from an uncompressed tar archive. Tar archives are
|
|
98
|
+
// organized in 512-byte blocks: a header block (file name in bytes 0-99,
|
|
99
|
+
// file size in bytes 124-135 as an octal string) followed by data blocks
|
|
100
|
+
// padded out to the next multiple of 512.
|
|
101
|
+
function extractFileFromTarball(tarball, target) {
|
|
102
|
+
let offset = 0;
|
|
103
|
+
while (offset + 512 <= tarball.length) {
|
|
104
|
+
const header = tarball.subarray(offset, offset + 512);
|
|
105
|
+
offset += 512;
|
|
106
|
+
const fileName = header.toString("utf-8", 0, 100).replace(/\0.*/g, "");
|
|
107
|
+
if (!fileName) break;
|
|
108
|
+
const fileSize = parseInt(
|
|
109
|
+
header.toString("utf-8", 124, 136).replace(/\0.*/g, ""),
|
|
110
|
+
8,
|
|
111
|
+
);
|
|
112
|
+
if (fileName === target) {
|
|
113
|
+
return tarball.subarray(offset, offset + fileSize);
|
|
114
|
+
}
|
|
115
|
+
offset = (offset + fileSize + 511) & ~511;
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async function downloadFallback() {
|
|
121
|
+
// npm tarball URLs look like:
|
|
122
|
+
// https://registry.npmjs.org/<scope>/<name>/-/<name>-<version>.tgz
|
|
123
|
+
// where <name> is the unscoped package name.
|
|
124
|
+
const tarballName = packageName.split("/").pop();
|
|
125
|
+
const url = `https://registry.npmjs.org/${packageName}/-/${tarballName}-${version}.tgz`;
|
|
126
|
+
console.log(`bt: downloading ${packageName}@${version} from ${url}`);
|
|
127
|
+
|
|
128
|
+
const gzipped = await fetchBuffer(url);
|
|
129
|
+
const tarball = zlib.gunzipSync(gzipped);
|
|
130
|
+
const binary = extractFileFromTarball(tarball, `package/${subpath}`);
|
|
131
|
+
|
|
132
|
+
if (!binary) {
|
|
133
|
+
throw new Error(
|
|
134
|
+
`could not find "package/${subpath}" inside ${packageName}@${version} tarball`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const fallbackBinaryPath = helper.getFallbackBinaryPath();
|
|
139
|
+
fs.mkdirSync(path.dirname(fallbackBinaryPath), { recursive: true });
|
|
140
|
+
fs.writeFileSync(fallbackBinaryPath, binary);
|
|
141
|
+
fs.chmodSync(fallbackBinaryPath, 0o755);
|
|
142
|
+
console.log(`bt: installed fallback binary at ${fallbackBinaryPath}`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
downloadFallback().catch((err) => {
|
|
146
|
+
// Don't fail the parent install: airgapped/proxied CI may not reach the
|
|
147
|
+
// npm registry, and the SDK works without `bt`.
|
|
148
|
+
console.error(
|
|
149
|
+
`bt: failed to download fallback binary for ${packageName}@${version}: ${err.message}
|
|
150
|
+
The bt CLI will not be available; the rest of the braintrust SDK is unaffected.`,
|
|
151
|
+
);
|
|
152
|
+
process.exit(0);
|
|
153
|
+
});
|