braintrust 3.12.0 → 3.13.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.
Files changed (49) hide show
  1. package/dev/dist/index.d.mts +25 -6
  2. package/dev/dist/index.d.ts +25 -6
  3. package/dev/dist/index.js +134 -43
  4. package/dev/dist/index.mjs +113 -22
  5. package/dist/apply-auto-instrumentation.js +170 -170
  6. package/dist/apply-auto-instrumentation.mjs +1 -1
  7. package/dist/auto-instrumentations/bundler/esbuild.cjs +1 -0
  8. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  9. package/dist/auto-instrumentations/bundler/next.cjs +1 -0
  10. package/dist/auto-instrumentations/bundler/next.mjs +3 -3
  11. package/dist/auto-instrumentations/bundler/rollup.cjs +1 -0
  12. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  13. package/dist/auto-instrumentations/bundler/vite.cjs +1 -0
  14. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  15. package/dist/auto-instrumentations/bundler/webpack-loader.cjs +1 -0
  16. package/dist/auto-instrumentations/bundler/webpack.cjs +1 -0
  17. package/dist/auto-instrumentations/bundler/webpack.mjs +3 -3
  18. package/dist/auto-instrumentations/{chunk-2DPA74KK.mjs → chunk-E5DUYJWK.mjs} +1 -0
  19. package/dist/auto-instrumentations/{chunk-73BZUKVI.mjs → chunk-GJOO4ESL.mjs} +1 -1
  20. package/dist/auto-instrumentations/{chunk-AFXRW7I7.mjs → chunk-WFEUJACP.mjs} +1 -1
  21. package/dist/auto-instrumentations/hook.mjs +1 -0
  22. package/dist/auto-instrumentations/index.cjs +1 -0
  23. package/dist/auto-instrumentations/index.mjs +1 -1
  24. package/dist/browser.d.mts +149 -21
  25. package/dist/browser.d.ts +149 -21
  26. package/dist/browser.js +114 -24
  27. package/dist/browser.mjs +114 -24
  28. package/dist/{chunk-BW4DF4CY.js → chunk-26JGOELH.js} +1 -0
  29. package/dist/{chunk-MSLBGITU.mjs → chunk-75IQCUB2.mjs} +1 -0
  30. package/dist/cli.js +121 -44
  31. package/dist/edge-light.d.mts +1 -1
  32. package/dist/edge-light.d.ts +1 -1
  33. package/dist/edge-light.js +114 -24
  34. package/dist/edge-light.mjs +114 -24
  35. package/dist/index.d.mts +149 -21
  36. package/dist/index.d.ts +149 -21
  37. package/dist/index.js +529 -394
  38. package/dist/index.mjs +161 -26
  39. package/dist/instrumentation/index.d.mts +40 -3
  40. package/dist/instrumentation/index.d.ts +40 -3
  41. package/dist/instrumentation/index.js +15 -2
  42. package/dist/instrumentation/index.mjs +15 -2
  43. package/dist/workerd.d.mts +1 -1
  44. package/dist/workerd.d.ts +1 -1
  45. package/dist/workerd.js +114 -24
  46. package/dist/workerd.mjs +114 -24
  47. package/package.json +3 -17
  48. package/util/dist/index.d.mts +3 -1
  49. package/util/dist/index.d.ts +3 -1
@@ -83,6 +83,7 @@ var iso = {
83
83
  getRepoInfo: async (_settings) => void 0,
84
84
  getPastNAncestors: async () => [],
85
85
  getEnv: (_name) => void 0,
86
+ getBraintrustApiKey: async () => void 0,
86
87
  getCallerLocation: () => void 0,
87
88
  newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
88
89
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -6508,10 +6509,11 @@ function initLogger(options = {}) {
6508
6509
  async function loginToState(options = {}) {
6509
6510
  const {
6510
6511
  appUrl = isomorph_default.getEnv("BRAINTRUST_APP_URL") || "https://www.braintrust.dev",
6511
- apiKey = isomorph_default.getEnv("BRAINTRUST_API_KEY"),
6512
+ apiKey: apiKeyArg,
6512
6513
  orgName = isomorph_default.getEnv("BRAINTRUST_ORG_NAME"),
6513
6514
  fetch: fetch2 = globalThis.fetch
6514
6515
  } = options || {};
6516
+ const apiKey = apiKeyArg !== void 0 ? apiKeyArg : await isomorph_default.getBraintrustApiKey();
6515
6517
  const appPublicUrl = isomorph_default.getEnv("BRAINTRUST_APP_PUBLIC_URL") || appUrl;
6516
6518
  const state = new BraintrustState(options);
6517
6519
  state.resetLoginInfo();
@@ -7442,9 +7444,15 @@ var SpanImpl = class _SpanImpl {
7442
7444
  const cachedSpan = {
7443
7445
  input: partialRecord.input,
7444
7446
  output: partialRecord.output,
7447
+ expected: partialRecord.expected,
7448
+ error: partialRecord.error,
7449
+ scores: partialRecord.scores,
7450
+ metrics: partialRecord.metrics,
7445
7451
  metadata: partialRecord.metadata,
7452
+ tags: partialRecord.tags,
7446
7453
  span_id: this._spanId,
7447
7454
  span_parents: this._spanParents,
7455
+ is_root: this._spanId === this._rootSpanId,
7448
7456
  span_attributes: partialRecord.span_attributes
7449
7457
  };
7450
7458
  this._state.spanCache.queueWrite(
@@ -7780,6 +7788,7 @@ var Dataset2 = class extends ObjectFetcher {
7780
7788
  metadata,
7781
7789
  tags,
7782
7790
  output,
7791
+ origin,
7783
7792
  isMerge
7784
7793
  }) {
7785
7794
  return new LazyValue(async () => {
@@ -7794,6 +7803,7 @@ var Dataset2 = class extends ObjectFetcher {
7794
7803
  created: !isMerge ? (/* @__PURE__ */ new Date()).toISOString() : void 0,
7795
7804
  //if we're merging/updating an event we will not add this ts
7796
7805
  metadata,
7806
+ origin,
7797
7807
  ...!!isMerge ? {
7798
7808
  [IS_MERGE_FIELD]: true
7799
7809
  } : {}
@@ -7813,6 +7823,7 @@ var Dataset2 = class extends ObjectFetcher {
7813
7823
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
7814
7824
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
7815
7825
  * JSON-serializable type, but its keys must be strings.
7826
+ * @param event.origin (Optional) a reference to the source object this dataset record was derived from.
7816
7827
  * @param event.id (Optional) a unique identifier for the event. If you don't provide one, Braintrust will generate one for you.
7817
7828
  * @param event.output: (Deprecated) The output of your application. Use `expected` instead.
7818
7829
  * @returns The `id` of the logged record.
@@ -7823,7 +7834,8 @@ var Dataset2 = class extends ObjectFetcher {
7823
7834
  metadata,
7824
7835
  tags,
7825
7836
  id,
7826
- output
7837
+ output,
7838
+ origin
7827
7839
  }) {
7828
7840
  this.validateEvent({ metadata, expected, output, tags });
7829
7841
  const rowId = id || uuidv42();
@@ -7835,6 +7847,7 @@ var Dataset2 = class extends ObjectFetcher {
7835
7847
  metadata,
7836
7848
  tags,
7837
7849
  output,
7850
+ origin,
7838
7851
  isMerge: false
7839
7852
  })
7840
7853
  );
@@ -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, 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, 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, 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, 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, wrapFlueContext, wrapFlueSession, 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, 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, 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, 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, wrapFlueContext, wrapFlueSession, 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, 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, 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, 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, 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, wrapFlueContext, wrapFlueSession, 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, 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, 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, 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, wrapFlueContext, wrapFlueSession, 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
@@ -47,6 +47,7 @@ __export(workerd_exports, {
47
47
  DEFAULT_FETCH_BATCH_SIZE: () => DEFAULT_FETCH_BATCH_SIZE,
48
48
  DEFAULT_MAX_REQUEST_SIZE: () => DEFAULT_MAX_REQUEST_SIZE,
49
49
  Dataset: () => Dataset2,
50
+ DatasetPipeline: () => DatasetPipeline,
50
51
  ERR_PERMALINK: () => ERR_PERMALINK,
51
52
  Eval: () => Eval,
52
53
  EvalResultWithSummary: () => EvalResultWithSummary,
@@ -267,6 +268,7 @@ var iso = {
267
268
  getRepoInfo: async (_settings) => void 0,
268
269
  getPastNAncestors: async () => [],
269
270
  getEnv: (_name) => void 0,
271
+ getBraintrustApiKey: async () => void 0,
270
272
  getCallerLocation: () => void 0,
271
273
  newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
272
274
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -5606,6 +5608,19 @@ var JSONAttachment = class extends Attachment {
5606
5608
  */
5607
5609
  constructor(data, options) {
5608
5610
  const { filename = "data.json", pretty = false, state } = options ?? {};
5611
+ const deferredJsonAttachment = globalThis.__BT_DATASET_PIPELINE_DEFER_JSON_ATTACHMENT__;
5612
+ if (deferredJsonAttachment) {
5613
+ super({
5614
+ data: new Blob([]),
5615
+ filename,
5616
+ contentType: "application/json",
5617
+ state
5618
+ });
5619
+ return deferredJsonAttachment(data, {
5620
+ filename,
5621
+ pretty
5622
+ });
5623
+ }
5609
5624
  const jsonString = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);
5610
5625
  const blob = new Blob([jsonString], { type: "application/json" });
5611
5626
  super({
@@ -7598,10 +7613,11 @@ async function login(options = {}) {
7598
7613
  async function loginToState(options = {}) {
7599
7614
  const {
7600
7615
  appUrl = isomorph_default.getEnv("BRAINTRUST_APP_URL") || "https://www.braintrust.dev",
7601
- apiKey = isomorph_default.getEnv("BRAINTRUST_API_KEY"),
7616
+ apiKey: apiKeyArg,
7602
7617
  orgName = isomorph_default.getEnv("BRAINTRUST_ORG_NAME"),
7603
7618
  fetch: fetch2 = globalThis.fetch
7604
7619
  } = options || {};
7620
+ const apiKey = apiKeyArg !== void 0 ? apiKeyArg : await isomorph_default.getBraintrustApiKey();
7605
7621
  const appPublicUrl = isomorph_default.getEnv("BRAINTRUST_APP_PUBLIC_URL") || appUrl;
7606
7622
  const state = new BraintrustState(options);
7607
7623
  state.resetLoginInfo();
@@ -8842,9 +8858,15 @@ var SpanImpl = class _SpanImpl {
8842
8858
  const cachedSpan = {
8843
8859
  input: partialRecord.input,
8844
8860
  output: partialRecord.output,
8861
+ expected: partialRecord.expected,
8862
+ error: partialRecord.error,
8863
+ scores: partialRecord.scores,
8864
+ metrics: partialRecord.metrics,
8845
8865
  metadata: partialRecord.metadata,
8866
+ tags: partialRecord.tags,
8846
8867
  span_id: this._spanId,
8847
8868
  span_parents: this._spanParents,
8869
+ is_root: this._spanId === this._rootSpanId,
8848
8870
  span_attributes: partialRecord.span_attributes
8849
8871
  };
8850
8872
  this._state.spanCache.queueWrite(
@@ -9180,6 +9202,7 @@ var Dataset2 = class extends ObjectFetcher {
9180
9202
  metadata,
9181
9203
  tags,
9182
9204
  output,
9205
+ origin,
9183
9206
  isMerge
9184
9207
  }) {
9185
9208
  return new LazyValue(async () => {
@@ -9194,6 +9217,7 @@ var Dataset2 = class extends ObjectFetcher {
9194
9217
  created: !isMerge ? (/* @__PURE__ */ new Date()).toISOString() : void 0,
9195
9218
  //if we're merging/updating an event we will not add this ts
9196
9219
  metadata,
9220
+ origin,
9197
9221
  ...!!isMerge ? {
9198
9222
  [IS_MERGE_FIELD]: true
9199
9223
  } : {}
@@ -9213,6 +9237,7 @@ var Dataset2 = class extends ObjectFetcher {
9213
9237
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
9214
9238
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
9215
9239
  * JSON-serializable type, but its keys must be strings.
9240
+ * @param event.origin (Optional) a reference to the source object this dataset record was derived from.
9216
9241
  * @param event.id (Optional) a unique identifier for the event. If you don't provide one, Braintrust will generate one for you.
9217
9242
  * @param event.output: (Deprecated) The output of your application. Use `expected` instead.
9218
9243
  * @returns The `id` of the logged record.
@@ -9223,7 +9248,8 @@ var Dataset2 = class extends ObjectFetcher {
9223
9248
  metadata,
9224
9249
  tags,
9225
9250
  id,
9226
- output
9251
+ output,
9252
+ origin
9227
9253
  }) {
9228
9254
  this.validateEvent({ metadata, expected, output, tags });
9229
9255
  const rowId = id || (0, import_uuid2.v4)();
@@ -9235,6 +9261,7 @@ var Dataset2 = class extends ObjectFetcher {
9235
9261
  metadata,
9236
9262
  tags,
9237
9263
  output,
9264
+ origin,
9238
9265
  isMerge: false
9239
9266
  })
9240
9267
  );
@@ -26230,6 +26257,10 @@ function configureWorkerd() {
26230
26257
  }
26231
26258
  return process.env[name];
26232
26259
  };
26260
+ isomorph_default.getBraintrustApiKey = async () => {
26261
+ const value = isomorph_default.getEnv("BRAINTRUST_API_KEY");
26262
+ return value?.trim() ? value : void 0;
26263
+ };
26233
26264
  isomorph_default.hash = (data) => {
26234
26265
  let hash = 0;
26235
26266
  for (let i = 0; i < data.length; i++) {
@@ -26265,6 +26296,7 @@ __export(exports_exports, {
26265
26296
  DEFAULT_FETCH_BATCH_SIZE: () => DEFAULT_FETCH_BATCH_SIZE,
26266
26297
  DEFAULT_MAX_REQUEST_SIZE: () => DEFAULT_MAX_REQUEST_SIZE,
26267
26298
  Dataset: () => Dataset2,
26299
+ DatasetPipeline: () => DatasetPipeline,
26268
26300
  ERR_PERMALINK: () => ERR_PERMALINK,
26269
26301
  Eval: () => Eval,
26270
26302
  EvalResultWithSummary: () => EvalResultWithSummary,
@@ -29523,10 +29555,12 @@ function formatExperimentSummary(summary) {
29523
29555
  // src/wrappers/shared/flush.ts
29524
29556
  async function summarizeAndFlush(experiment, options) {
29525
29557
  const shouldDisplay = options.displaySummary ?? true;
29526
- const summary = await experiment.summarize();
29527
- if (shouldDisplay) {
29528
- console.log(formatExperimentSummary(summary));
29558
+ if (!shouldDisplay) {
29559
+ await experiment.flush();
29560
+ return;
29529
29561
  }
29562
+ const summary = await experiment.summarize();
29563
+ console.log(formatExperimentSummary(summary));
29530
29564
  }
29531
29565
 
29532
29566
  // src/wrappers/vitest/flush-manager.ts
@@ -31390,8 +31424,12 @@ var waterfall$1 = awaitify(waterfall);
31390
31424
 
31391
31425
  // src/trace.ts
31392
31426
  var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
31393
- constructor(objectType, _objectId, rootSpanId, _state, spanTypeFilter) {
31394
- const filterExpr = _SpanFetcher.buildFilter(rootSpanId, spanTypeFilter);
31427
+ constructor(objectType, _objectId, rootSpanId, _state, spanTypeFilter, includeScorers = false) {
31428
+ const filterExpr = _SpanFetcher.buildFilter(
31429
+ rootSpanId,
31430
+ spanTypeFilter,
31431
+ includeScorers
31432
+ );
31395
31433
  super(objectType, void 0, void 0, {
31396
31434
  filter: filterExpr
31397
31435
  });
@@ -31400,16 +31438,17 @@ var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
31400
31438
  this._state = _state;
31401
31439
  this.spanTypeFilter = spanTypeFilter;
31402
31440
  }
31403
- static buildFilter(rootSpanId, spanTypeFilter) {
31441
+ static buildFilter(rootSpanId, spanTypeFilter, includeScorers = false) {
31404
31442
  const children = [
31405
31443
  // Base filter: root_span_id = 'value'
31406
31444
  {
31407
31445
  op: "eq",
31408
31446
  left: { op: "ident", name: ["root_span_id"] },
31409
31447
  right: { op: "literal", value: rootSpanId }
31410
- },
31411
- // Exclude span_attributes.purpose = 'score'
31412
- {
31448
+ }
31449
+ ];
31450
+ if (!includeScorers) {
31451
+ children.push({
31413
31452
  op: "or",
31414
31453
  children: [
31415
31454
  {
@@ -31422,8 +31461,8 @@ var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
31422
31461
  right: { op: "literal", value: "scorer" }
31423
31462
  }
31424
31463
  ]
31425
- }
31426
- ];
31464
+ });
31465
+ }
31427
31466
  if (spanTypeFilter && spanTypeFilter.length > 0) {
31428
31467
  children.push({
31429
31468
  op: "in",
@@ -31449,35 +31488,49 @@ var CachedSpanFetcher = class {
31449
31488
  fetchFn;
31450
31489
  constructor(objectTypeOrFetchFn, objectId, rootSpanId, getState) {
31451
31490
  if (typeof objectTypeOrFetchFn === "function") {
31452
- this.fetchFn = objectTypeOrFetchFn;
31491
+ this.fetchFn = (spanType) => objectTypeOrFetchFn(spanType);
31453
31492
  } else {
31454
31493
  const objectType = objectTypeOrFetchFn;
31455
- this.fetchFn = async (spanType) => {
31494
+ this.fetchFn = async (spanType, includeScorers) => {
31456
31495
  const state = await getState();
31457
31496
  const fetcher = new SpanFetcher(
31458
31497
  objectType,
31459
31498
  objectId,
31460
31499
  rootSpanId,
31461
31500
  state,
31462
- spanType
31501
+ spanType,
31502
+ includeScorers
31463
31503
  );
31464
31504
  const rows = await fetcher.fetchedData();
31465
- return rows.filter((row) => row.span_attributes?.purpose !== "scorer").map((row) => ({
31505
+ return rows.map((row) => ({
31466
31506
  input: row.input,
31467
31507
  output: row.output,
31508
+ expected: row.expected,
31509
+ error: row.error,
31510
+ scores: row.scores,
31511
+ metrics: row.metrics,
31468
31512
  metadata: row.metadata,
31469
31513
  span_id: row.span_id,
31470
31514
  span_parents: row.span_parents,
31515
+ is_root: row.is_root,
31471
31516
  span_attributes: row.span_attributes,
31472
31517
  id: row.id,
31473
31518
  _xact_id: row._xact_id,
31474
31519
  _pagination_key: row._pagination_key,
31475
- root_span_id: row.root_span_id
31520
+ root_span_id: row.root_span_id,
31521
+ created: row.created,
31522
+ tags: row.tags
31476
31523
  }));
31477
31524
  };
31478
31525
  }
31479
31526
  }
31480
- async getSpans({ spanType } = {}) {
31527
+ async getSpans({
31528
+ spanType,
31529
+ includeScorers = false
31530
+ } = {}) {
31531
+ if (includeScorers) {
31532
+ return this.fetchFn(spanType, true);
31533
+ }
31481
31534
  if (this.allFetched) {
31482
31535
  return this.getFromCache(spanType);
31483
31536
  }
@@ -31494,7 +31547,7 @@ var CachedSpanFetcher = class {
31494
31547
  return this.getFromCache(spanType);
31495
31548
  }
31496
31549
  async fetchSpans(spanType) {
31497
- const spans = await this.fetchFn(spanType);
31550
+ const spans = await this.fetchFn(spanType, false);
31498
31551
  for (const span of spans) {
31499
31552
  const type = span.span_attributes?.type ?? "";
31500
31553
  const existing = this.spanCache.get(type) ?? [];
@@ -31572,10 +31625,13 @@ var LocalTrace = class {
31572
31625
  * First checks the local span cache for recently logged spans, then falls
31573
31626
  * back to CachedSpanFetcher which handles BTQL fetching and caching.
31574
31627
  */
31575
- async getSpans({ spanType } = {}) {
31628
+ async getSpans({
31629
+ spanType,
31630
+ includeScorers = false
31631
+ } = {}) {
31576
31632
  const cachedSpans = this.state.spanCache.getByRootSpanId(this.rootSpanId);
31577
31633
  if (cachedSpans && cachedSpans.length > 0) {
31578
- let spans = cachedSpans.filter(
31634
+ let spans = includeScorers ? cachedSpans : cachedSpans.filter(
31579
31635
  (span) => span.span_attributes?.purpose !== "scorer"
31580
31636
  );
31581
31637
  if (spanType && spanType.length > 0) {
@@ -31586,13 +31642,19 @@ var LocalTrace = class {
31586
31642
  return spans.map((span) => ({
31587
31643
  input: span.input,
31588
31644
  output: span.output,
31645
+ expected: span.expected,
31646
+ error: span.error,
31647
+ scores: span.scores,
31648
+ metrics: span.metrics,
31589
31649
  metadata: span.metadata,
31590
31650
  span_id: span.span_id,
31591
31651
  span_parents: span.span_parents,
31592
- span_attributes: span.span_attributes
31652
+ is_root: span.is_root,
31653
+ span_attributes: span.span_attributes,
31654
+ tags: span.tags
31593
31655
  }));
31594
31656
  }
31595
- return this.cachedFetcher.getSpans({ spanType });
31657
+ return this.cachedFetcher.getSpans({ spanType, includeScorers });
31596
31658
  }
31597
31659
  /**
31598
31660
  * Get the thread (preprocessed messages) for this trace.
@@ -32781,6 +32843,34 @@ var defaultReporter = {
32781
32843
  }
32782
32844
  };
32783
32845
 
32846
+ // src/dataset-pipeline.ts
32847
+ function DatasetPipeline(definition) {
32848
+ if (!globalThis.__braintrust_dataset_pipelines) {
32849
+ globalThis.__braintrust_dataset_pipelines = [];
32850
+ }
32851
+ const storedDefinition = {
32852
+ name: definition.name,
32853
+ source: {
32854
+ projectId: definition.source.projectId,
32855
+ projectName: definition.source.projectName,
32856
+ orgName: definition.source.orgName,
32857
+ filter: definition.source.filter,
32858
+ scope: definition.source.scope ?? "span"
32859
+ },
32860
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any
32861
+ transform: definition.transform,
32862
+ target: {
32863
+ projectId: definition.target.projectId,
32864
+ projectName: definition.target.projectName,
32865
+ orgName: definition.target.orgName,
32866
+ datasetName: definition.target.datasetName,
32867
+ description: definition.target.description,
32868
+ metadata: definition.target.metadata
32869
+ }
32870
+ };
32871
+ globalThis.__braintrust_dataset_pipelines.push(storedDefinition);
32872
+ }
32873
+
32784
32874
  // src/framework2.ts
32785
32875
  var import_v312 = require("zod/v3");
32786
32876
  var currentFilename = typeof __filename !== "undefined" ? __filename : "unknown";