braintrust 3.23.1 → 3.24.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/dev/dist/index.d.mts +6 -0
- package/dev/dist/index.d.ts +6 -0
- package/dev/dist/index.js +902 -586
- package/dev/dist/index.mjs +320 -4
- package/dist/apply-auto-instrumentation.js +211 -189
- package/dist/apply-auto-instrumentation.mjs +23 -1
- package/dist/auto-instrumentations/bundler/esbuild.cjs +40 -0
- package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
- package/dist/auto-instrumentations/bundler/next.cjs +40 -0
- package/dist/auto-instrumentations/bundler/next.mjs +3 -3
- package/dist/auto-instrumentations/bundler/rollup.cjs +40 -0
- package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
- package/dist/auto-instrumentations/bundler/vite.cjs +40 -0
- package/dist/auto-instrumentations/bundler/vite.d.mts +1 -1
- package/dist/auto-instrumentations/bundler/vite.d.ts +1 -1
- package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
- package/dist/auto-instrumentations/bundler/webpack-loader.cjs +40 -0
- package/dist/auto-instrumentations/bundler/webpack.cjs +40 -0
- package/dist/auto-instrumentations/bundler/webpack.mjs +3 -3
- package/dist/auto-instrumentations/{chunk-KIMLYPRW.mjs → chunk-BURMPO7L.mjs} +1 -1
- package/dist/auto-instrumentations/{chunk-YXLNSAMJ.mjs → chunk-F43DNLPD.mjs} +40 -0
- package/dist/auto-instrumentations/{chunk-EXY7QCJD.mjs → chunk-GSZHTAQW.mjs} +1 -1
- package/dist/auto-instrumentations/hook.mjs +150 -1
- package/dist/auto-instrumentations/index.cjs +40 -0
- package/dist/auto-instrumentations/index.mjs +1 -1
- package/dist/browser.d.mts +131 -9
- package/dist/browser.d.ts +131 -9
- package/dist/browser.js +703 -65
- package/dist/browser.mjs +703 -65
- package/dist/{chunk-CDIKAHDZ.js → chunk-7AUY2XWX.js} +21 -1
- package/dist/{chunk-36IPYKMG.mjs → chunk-7F6GCRHH.mjs} +20 -0
- package/dist/{chunk-B6ZQIAK3.js → chunk-SU6EHKJV.js} +1085 -799
- package/dist/{chunk-RBXD2KYN.mjs → chunk-XE5FS7QY.mjs} +291 -5
- package/dist/cli.js +328 -8
- package/dist/edge-light.js +703 -65
- package/dist/edge-light.mjs +703 -65
- package/dist/index.d.mts +131 -9
- package/dist/index.d.ts +131 -9
- package/dist/index.js +891 -532
- package/dist/index.mjs +423 -64
- package/dist/instrumentation/index.d.mts +130 -9
- package/dist/instrumentation/index.d.ts +130 -9
- package/dist/instrumentation/index.js +601 -65
- package/dist/instrumentation/index.mjs +601 -65
- package/dist/vitest-evals-reporter.js +17 -16
- package/dist/vitest-evals-reporter.mjs +3 -2
- package/dist/workerd.js +703 -65
- package/dist/workerd.mjs +703 -65
- package/package.json +3 -3
- package/util/dist/index.js +4 -0
- package/util/dist/index.mjs +4 -0
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
9
|
var __commonJS = (cb, mod) => function __require() {
|
|
10
|
-
|
|
10
|
+
try {
|
|
11
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
12
|
+
} catch (e) {
|
|
13
|
+
throw mod = 0, e;
|
|
14
|
+
}
|
|
11
15
|
};
|
|
12
16
|
var __export = (target, all) => {
|
|
13
17
|
for (var name in all)
|
|
@@ -1232,7 +1236,7 @@ var require_package = __commonJS({
|
|
|
1232
1236
|
"package.json"(exports2, module2) {
|
|
1233
1237
|
module2.exports = {
|
|
1234
1238
|
name: "braintrust",
|
|
1235
|
-
version: "3.
|
|
1239
|
+
version: "3.24.0",
|
|
1236
1240
|
description: "SDK for integrating Braintrust",
|
|
1237
1241
|
repository: {
|
|
1238
1242
|
type: "git",
|
|
@@ -1438,7 +1442,7 @@ var require_package = __commonJS({
|
|
|
1438
1442
|
typedoc: "^0.25.13",
|
|
1439
1443
|
"typedoc-plugin-markdown": "^3.17.1",
|
|
1440
1444
|
typescript: "5.4.4",
|
|
1441
|
-
vite: "^
|
|
1445
|
+
vite: "^8.1.5",
|
|
1442
1446
|
"vite-tsconfig-paths": "^4.3.2",
|
|
1443
1447
|
vitest: "4.1.5",
|
|
1444
1448
|
webpack: "^5.106.2",
|
|
@@ -1458,7 +1462,7 @@ var require_package = __commonJS({
|
|
|
1458
1462
|
cors: "^2.8.5",
|
|
1459
1463
|
"dc-browser": "^1.0.4",
|
|
1460
1464
|
dotenv: "^16.4.5",
|
|
1461
|
-
esbuild: "0.28.
|
|
1465
|
+
esbuild: "0.28.1",
|
|
1462
1466
|
esquery: "^1.7.0",
|
|
1463
1467
|
"eventsource-parser": "^1.1.2",
|
|
1464
1468
|
express: "^5.2.1",
|
|
@@ -1537,6 +1541,7 @@ var DefaultChannel = class {
|
|
|
1537
1541
|
constructor(name) {
|
|
1538
1542
|
this.name = name;
|
|
1539
1543
|
}
|
|
1544
|
+
name;
|
|
1540
1545
|
hasSubscribers = false;
|
|
1541
1546
|
subscribe(_subscription) {
|
|
1542
1547
|
}
|
|
@@ -2586,6 +2591,7 @@ var SpanComponentsV3 = class _SpanComponentsV3 {
|
|
|
2586
2591
|
constructor(data) {
|
|
2587
2592
|
this.data = data;
|
|
2588
2593
|
}
|
|
2594
|
+
data;
|
|
2589
2595
|
toStr() {
|
|
2590
2596
|
const jsonObj = {
|
|
2591
2597
|
compute_object_metadata_args: this.data.compute_object_metadata_args || void 0,
|
|
@@ -3104,6 +3110,7 @@ var SpanComponentsV4 = class _SpanComponentsV4 {
|
|
|
3104
3110
|
constructor(data) {
|
|
3105
3111
|
this.data = data;
|
|
3106
3112
|
}
|
|
3113
|
+
data;
|
|
3107
3114
|
toStr() {
|
|
3108
3115
|
const jsonObj = {
|
|
3109
3116
|
compute_object_metadata_args: this.data.compute_object_metadata_args || void 0,
|
|
@@ -6353,6 +6360,97 @@ var SpanCache = class {
|
|
|
6353
6360
|
}
|
|
6354
6361
|
};
|
|
6355
6362
|
|
|
6363
|
+
// src/span-origin.ts
|
|
6364
|
+
var SDK_VERSION = true ? "3.24.0" : "0.0.0";
|
|
6365
|
+
function detectSpanOriginEnvironment(explicit) {
|
|
6366
|
+
if (explicit) return explicit;
|
|
6367
|
+
const envType = isomorph_default.getEnv("BRAINTRUST_ENVIRONMENT_TYPE");
|
|
6368
|
+
const envName = isomorph_default.getEnv("BRAINTRUST_ENVIRONMENT_NAME");
|
|
6369
|
+
if (envType || envName) {
|
|
6370
|
+
return {
|
|
6371
|
+
...envType ? { type: envType } : {},
|
|
6372
|
+
...envName ? { name: envName } : {}
|
|
6373
|
+
};
|
|
6374
|
+
}
|
|
6375
|
+
const ci = firstPresent([
|
|
6376
|
+
["GITHUB_ACTIONS", "github_actions"],
|
|
6377
|
+
["GITLAB_CI", "gitlab_ci"],
|
|
6378
|
+
["CIRCLECI", "circleci"],
|
|
6379
|
+
["BUILDKITE", "buildkite"],
|
|
6380
|
+
["JENKINS_URL", "jenkins"],
|
|
6381
|
+
["JENKINS_HOME", "jenkins"],
|
|
6382
|
+
["TF_BUILD", "azure_pipelines"],
|
|
6383
|
+
["TEAMCITY_VERSION", "teamcity"],
|
|
6384
|
+
["TRAVIS", "travis"],
|
|
6385
|
+
["BITBUCKET_BUILD_NUMBER", "bitbucket"]
|
|
6386
|
+
]);
|
|
6387
|
+
if (ci) return { type: "ci", name: ci };
|
|
6388
|
+
if (isomorph_default.getEnv("CI")) return { type: "ci", name: "ci" };
|
|
6389
|
+
const earlyServer = firstPresent([
|
|
6390
|
+
["VERCEL", "vercel"],
|
|
6391
|
+
["NETLIFY", "netlify"]
|
|
6392
|
+
]);
|
|
6393
|
+
if (earlyServer) return { type: "server", name: earlyServer };
|
|
6394
|
+
if (isomorph_default.getEnv("ECS_CONTAINER_METADATA_URI") || isomorph_default.getEnv("ECS_CONTAINER_METADATA_URI_V4")) {
|
|
6395
|
+
return { type: "server", name: "ecs" };
|
|
6396
|
+
}
|
|
6397
|
+
const awsExecutionEnv = isomorph_default.getEnv("AWS_EXECUTION_ENV");
|
|
6398
|
+
if (awsExecutionEnv?.startsWith("AWS_ECS_")) {
|
|
6399
|
+
return { type: "server", name: "ecs" };
|
|
6400
|
+
}
|
|
6401
|
+
if (awsExecutionEnv?.startsWith("AWS_Lambda_")) {
|
|
6402
|
+
return { type: "server", name: "aws_lambda" };
|
|
6403
|
+
}
|
|
6404
|
+
if (isomorph_default.getEnv("AWS_LAMBDA_FUNCTION_NAME")) {
|
|
6405
|
+
return { type: "server", name: "aws_lambda" };
|
|
6406
|
+
}
|
|
6407
|
+
const server = firstPresent([
|
|
6408
|
+
["K_SERVICE", "cloud_run"],
|
|
6409
|
+
["FUNCTION_TARGET", "gcp_functions"],
|
|
6410
|
+
["KUBERNETES_SERVICE_HOST", "kubernetes"],
|
|
6411
|
+
["DYNO", "heroku"],
|
|
6412
|
+
["FLY_APP_NAME", "fly"],
|
|
6413
|
+
["RAILWAY_ENVIRONMENT", "railway"],
|
|
6414
|
+
["RENDER_SERVICE_NAME", "render"]
|
|
6415
|
+
]);
|
|
6416
|
+
if (server) return { type: "server", name: server };
|
|
6417
|
+
return deploymentModeEnvironment("NODE_ENV", isomorph_default.getEnv("NODE_ENV"));
|
|
6418
|
+
}
|
|
6419
|
+
function makeSpanOrigin(instrumentationName, environment) {
|
|
6420
|
+
return {
|
|
6421
|
+
name: "braintrust.sdk.javascript",
|
|
6422
|
+
version: SDK_VERSION,
|
|
6423
|
+
instrumentation: { name: instrumentationName },
|
|
6424
|
+
...environment ? { environment } : {}
|
|
6425
|
+
};
|
|
6426
|
+
}
|
|
6427
|
+
function mergeSpanOriginContext(context2, instrumentationName, environment) {
|
|
6428
|
+
const next = { ...context2 ?? {} };
|
|
6429
|
+
const current = isObject2(next.span_origin) ? { ...next.span_origin } : {};
|
|
6430
|
+
next.span_origin = {
|
|
6431
|
+
...makeSpanOrigin(instrumentationName, environment),
|
|
6432
|
+
...current
|
|
6433
|
+
};
|
|
6434
|
+
return next;
|
|
6435
|
+
}
|
|
6436
|
+
function firstPresent(entries) {
|
|
6437
|
+
return entries.find(([key]) => Boolean(isomorph_default.getEnv(key)))?.[1];
|
|
6438
|
+
}
|
|
6439
|
+
function deploymentModeEnvironment(_key, value) {
|
|
6440
|
+
if (!value) return void 0;
|
|
6441
|
+
const normalized = value.toLowerCase();
|
|
6442
|
+
if (normalized === "production" || normalized === "staging") {
|
|
6443
|
+
return { type: "server", name: normalized };
|
|
6444
|
+
}
|
|
6445
|
+
if (normalized === "development" || normalized === "local") {
|
|
6446
|
+
return { type: "local", name: normalized };
|
|
6447
|
+
}
|
|
6448
|
+
return { name: value };
|
|
6449
|
+
}
|
|
6450
|
+
function isObject2(value) {
|
|
6451
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6452
|
+
}
|
|
6453
|
+
|
|
6356
6454
|
// src/logger.ts
|
|
6357
6455
|
var BRAINTRUST_ATTACHMENT = BraintrustAttachmentReference.shape.type.value;
|
|
6358
6456
|
var EXTERNAL_ATTACHMENT = ExternalAttachmentReference.shape.type.value;
|
|
@@ -6401,6 +6499,7 @@ var LoginInvalidOrgError = class extends Error {
|
|
|
6401
6499
|
super(message);
|
|
6402
6500
|
this.message = message;
|
|
6403
6501
|
}
|
|
6502
|
+
message;
|
|
6404
6503
|
};
|
|
6405
6504
|
var REDACTION_FIELDS = [
|
|
6406
6505
|
"input",
|
|
@@ -6416,6 +6515,8 @@ var MaskingError = class {
|
|
|
6416
6515
|
this.fieldName = fieldName;
|
|
6417
6516
|
this.errorType = errorType;
|
|
6418
6517
|
}
|
|
6518
|
+
fieldName;
|
|
6519
|
+
errorType;
|
|
6419
6520
|
get errorMsg() {
|
|
6420
6521
|
return `ERROR: Failed to mask field '${this.fieldName}' - ${this.errorType}`;
|
|
6421
6522
|
}
|
|
@@ -6625,7 +6726,9 @@ var BraintrustState = class _BraintrustState {
|
|
|
6625
6726
|
diskCache: parametersDiskCache
|
|
6626
6727
|
});
|
|
6627
6728
|
this.spanCache = new SpanCache({ disabled: loginParams.disableSpanCache });
|
|
6729
|
+
this.spanOriginEnvironment = detectSpanOriginEnvironment();
|
|
6628
6730
|
}
|
|
6731
|
+
loginParams;
|
|
6629
6732
|
id;
|
|
6630
6733
|
currentExperiment;
|
|
6631
6734
|
// Note: the value of IsAsyncFlush doesn't really matter here, since we
|
|
@@ -6660,6 +6763,7 @@ var BraintrustState = class _BraintrustState {
|
|
|
6660
6763
|
_idGenerator = null;
|
|
6661
6764
|
_contextManager = null;
|
|
6662
6765
|
_otelFlushCallback = null;
|
|
6766
|
+
spanOriginEnvironment;
|
|
6663
6767
|
resetLoginInfo() {
|
|
6664
6768
|
this.appUrl = null;
|
|
6665
6769
|
this.appPublicUrl = null;
|
|
@@ -9013,6 +9117,7 @@ function initLogger(options = {}) {
|
|
|
9013
9117
|
orgName,
|
|
9014
9118
|
forceLogin,
|
|
9015
9119
|
debugLogLevel,
|
|
9120
|
+
environment,
|
|
9016
9121
|
fetch: fetch2,
|
|
9017
9122
|
state: stateArg
|
|
9018
9123
|
} = options || {};
|
|
@@ -9029,6 +9134,7 @@ function initLogger(options = {}) {
|
|
|
9029
9134
|
};
|
|
9030
9135
|
const state = stateArg ?? _globalState;
|
|
9031
9136
|
state.setDebugLogLevel(debugLogLevel);
|
|
9137
|
+
state.spanOriginEnvironment = detectSpanOriginEnvironment(environment);
|
|
9032
9138
|
state.enforceQueueSizeLimit(true);
|
|
9033
9139
|
const lazyMetadata = new LazyValue(
|
|
9034
9140
|
async () => {
|
|
@@ -9737,6 +9843,11 @@ var ObjectFetcher = class {
|
|
|
9737
9843
|
this._internal_btql = _internal_btql;
|
|
9738
9844
|
this._internalBrainstoreRealtime = _internalBrainstoreRealtime;
|
|
9739
9845
|
}
|
|
9846
|
+
objectType;
|
|
9847
|
+
pinnedVersion;
|
|
9848
|
+
mutateRecord;
|
|
9849
|
+
_internal_btql;
|
|
9850
|
+
_internalBrainstoreRealtime;
|
|
9740
9851
|
_fetchedData = void 0;
|
|
9741
9852
|
get id() {
|
|
9742
9853
|
throw new Error("ObjectFetcher subclasses must have an 'id' attribute");
|
|
@@ -10175,6 +10286,8 @@ var ReadonlyExperiment = class extends ObjectFetcher {
|
|
|
10175
10286
|
this.state = state;
|
|
10176
10287
|
this.lazyMetadata = lazyMetadata;
|
|
10177
10288
|
}
|
|
10289
|
+
state;
|
|
10290
|
+
lazyMetadata;
|
|
10178
10291
|
get id() {
|
|
10179
10292
|
return (async () => {
|
|
10180
10293
|
return (await this.lazyMetadata.get()).experiment.id;
|
|
@@ -10297,7 +10410,11 @@ var SpanImpl = class _SpanImpl {
|
|
|
10297
10410
|
metrics: {
|
|
10298
10411
|
start: args.startTime ?? getCurrentUnixTimestamp()
|
|
10299
10412
|
},
|
|
10300
|
-
context:
|
|
10413
|
+
context: mergeSpanOriginContext(
|
|
10414
|
+
{ ...callerLocation },
|
|
10415
|
+
"braintrust-js-logger",
|
|
10416
|
+
this._state.spanOriginEnvironment
|
|
10417
|
+
),
|
|
10301
10418
|
span_attributes: {
|
|
10302
10419
|
name,
|
|
10303
10420
|
type,
|
|
@@ -10671,6 +10788,7 @@ var Dataset2 = class extends ObjectFetcher {
|
|
|
10671
10788
|
this.pinnedEnvironment = pinState?.pinnedEnvironment;
|
|
10672
10789
|
this.pinnedSnapshotName = pinState?.pinnedSnapshotName;
|
|
10673
10790
|
}
|
|
10791
|
+
state;
|
|
10674
10792
|
lazyMetadata;
|
|
10675
10793
|
__braintrust_dataset_marker = true;
|
|
10676
10794
|
newRecords = 0;
|
|
@@ -11182,6 +11300,9 @@ var Prompt2 = class _Prompt {
|
|
|
11182
11300
|
this.noTrace = noTrace;
|
|
11183
11301
|
void this.__braintrust_prompt_marker;
|
|
11184
11302
|
}
|
|
11303
|
+
metadata;
|
|
11304
|
+
defaults;
|
|
11305
|
+
noTrace;
|
|
11185
11306
|
parsedPromptData;
|
|
11186
11307
|
hasParsedPromptData = false;
|
|
11187
11308
|
__braintrust_prompt_marker = true;
|
|
@@ -11419,6 +11540,7 @@ var RemoteEvalParameters = class {
|
|
|
11419
11540
|
this.metadata = metadata;
|
|
11420
11541
|
void this.__braintrust_parameters_marker;
|
|
11421
11542
|
}
|
|
11543
|
+
metadata;
|
|
11422
11544
|
__braintrust_parameters_marker = true;
|
|
11423
11545
|
get id() {
|
|
11424
11546
|
return this.metadata.id;
|
|
@@ -12663,6 +12785,10 @@ var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
|
|
|
12663
12785
|
this._state = _state;
|
|
12664
12786
|
this.spanTypeFilter = spanTypeFilter;
|
|
12665
12787
|
}
|
|
12788
|
+
_objectId;
|
|
12789
|
+
rootSpanId;
|
|
12790
|
+
_state;
|
|
12791
|
+
spanTypeFilter;
|
|
12666
12792
|
static buildFilter(rootSpanId, spanTypeFilter, includeScorers = false) {
|
|
12667
12793
|
const children = [
|
|
12668
12794
|
// Base filter: root_span_id = 'value'
|
|
@@ -13097,6 +13223,8 @@ var EvalResultWithSummary = class {
|
|
|
13097
13223
|
this.summary = summary;
|
|
13098
13224
|
this.results = results;
|
|
13099
13225
|
}
|
|
13226
|
+
summary;
|
|
13227
|
+
results;
|
|
13100
13228
|
/**
|
|
13101
13229
|
* @deprecated Use `summary` instead.
|
|
13102
13230
|
*/
|
|
@@ -18877,6 +19005,24 @@ var aiSDKChannels = defineChannels("ai", {
|
|
|
18877
19005
|
kind: "sync-stream"
|
|
18878
19006
|
})
|
|
18879
19007
|
});
|
|
19008
|
+
var harnessAgentChannels = defineChannels("@ai-sdk/harness", {
|
|
19009
|
+
generate: channel({
|
|
19010
|
+
channelName: "HarnessAgent.generate",
|
|
19011
|
+
kind: "async"
|
|
19012
|
+
}),
|
|
19013
|
+
stream: channel({
|
|
19014
|
+
channelName: "HarnessAgent.stream",
|
|
19015
|
+
kind: "async"
|
|
19016
|
+
}),
|
|
19017
|
+
continueGenerate: channel({
|
|
19018
|
+
channelName: "HarnessAgent.continueGenerate",
|
|
19019
|
+
kind: "async"
|
|
19020
|
+
}),
|
|
19021
|
+
continueStream: channel({
|
|
19022
|
+
channelName: "HarnessAgent.continueStream",
|
|
19023
|
+
kind: "async"
|
|
19024
|
+
})
|
|
19025
|
+
});
|
|
18880
19026
|
|
|
18881
19027
|
// src/instrumentation/plugins/ai-sdk-plugin.ts
|
|
18882
19028
|
var DEFAULT_DENY_OUTPUT_PATHS = [
|
|
@@ -19145,6 +19291,84 @@ var AISDKPlugin = class extends BasePlugin {
|
|
|
19145
19291
|
})
|
|
19146
19292
|
})
|
|
19147
19293
|
);
|
|
19294
|
+
this.unsubscribers.push(
|
|
19295
|
+
traceStreamingChannel(harnessAgentChannels.generate, {
|
|
19296
|
+
name: "HarnessAgent.generate",
|
|
19297
|
+
type: "task" /* TASK */,
|
|
19298
|
+
extractInput: ([params], event) => prepareAISDKHarnessAgentInput(params, event.self),
|
|
19299
|
+
extractOutput: (result, endEvent) => processAISDKOutput(
|
|
19300
|
+
result,
|
|
19301
|
+
resolveDenyOutputPaths(endEvent, denyOutputPaths)
|
|
19302
|
+
),
|
|
19303
|
+
extractMetrics: (result) => extractTokenMetrics(result),
|
|
19304
|
+
aggregateChunks: aggregateAISDKChunks
|
|
19305
|
+
})
|
|
19306
|
+
);
|
|
19307
|
+
this.unsubscribers.push(
|
|
19308
|
+
traceStreamingChannel(harnessAgentChannels.stream, {
|
|
19309
|
+
name: "HarnessAgent.stream",
|
|
19310
|
+
type: "task" /* TASK */,
|
|
19311
|
+
extractInput: ([params], event) => prepareAISDKHarnessAgentInput(params, event.self),
|
|
19312
|
+
extractOutput: (result, endEvent) => processAISDKOutput(
|
|
19313
|
+
result,
|
|
19314
|
+
resolveDenyOutputPaths(endEvent, denyOutputPaths)
|
|
19315
|
+
),
|
|
19316
|
+
extractMetrics: (result, startTime) => ({
|
|
19317
|
+
...extractTokenMetrics(result),
|
|
19318
|
+
...startTime === void 0 ? {} : {
|
|
19319
|
+
time_to_first_token: getCurrentUnixTimestamp() - startTime
|
|
19320
|
+
}
|
|
19321
|
+
}),
|
|
19322
|
+
aggregateChunks: aggregateAISDKChunks,
|
|
19323
|
+
patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({
|
|
19324
|
+
defaultDenyOutputPaths: denyOutputPaths,
|
|
19325
|
+
endEvent,
|
|
19326
|
+
result,
|
|
19327
|
+
resolvePromiseUsage: true,
|
|
19328
|
+
span,
|
|
19329
|
+
startTime
|
|
19330
|
+
})
|
|
19331
|
+
})
|
|
19332
|
+
);
|
|
19333
|
+
this.unsubscribers.push(
|
|
19334
|
+
traceStreamingChannel(harnessAgentChannels.continueGenerate, {
|
|
19335
|
+
name: "HarnessAgent.continueGenerate",
|
|
19336
|
+
type: "task" /* TASK */,
|
|
19337
|
+
extractInput: ([params], event) => prepareAISDKHarnessAgentInput(params, event.self),
|
|
19338
|
+
extractOutput: (result, endEvent) => processAISDKOutput(
|
|
19339
|
+
result,
|
|
19340
|
+
resolveDenyOutputPaths(endEvent, denyOutputPaths)
|
|
19341
|
+
),
|
|
19342
|
+
extractMetrics: (result) => extractTokenMetrics(result),
|
|
19343
|
+
aggregateChunks: aggregateAISDKChunks
|
|
19344
|
+
})
|
|
19345
|
+
);
|
|
19346
|
+
this.unsubscribers.push(
|
|
19347
|
+
traceStreamingChannel(harnessAgentChannels.continueStream, {
|
|
19348
|
+
name: "HarnessAgent.continueStream",
|
|
19349
|
+
type: "task" /* TASK */,
|
|
19350
|
+
extractInput: ([params], event) => prepareAISDKHarnessAgentInput(params, event.self),
|
|
19351
|
+
extractOutput: (result, endEvent) => processAISDKOutput(
|
|
19352
|
+
result,
|
|
19353
|
+
resolveDenyOutputPaths(endEvent, denyOutputPaths)
|
|
19354
|
+
),
|
|
19355
|
+
extractMetrics: (result, startTime) => ({
|
|
19356
|
+
...extractTokenMetrics(result),
|
|
19357
|
+
...startTime === void 0 ? {} : {
|
|
19358
|
+
time_to_first_token: getCurrentUnixTimestamp() - startTime
|
|
19359
|
+
}
|
|
19360
|
+
}),
|
|
19361
|
+
aggregateChunks: aggregateAISDKChunks,
|
|
19362
|
+
patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({
|
|
19363
|
+
defaultDenyOutputPaths: denyOutputPaths,
|
|
19364
|
+
endEvent,
|
|
19365
|
+
result,
|
|
19366
|
+
resolvePromiseUsage: true,
|
|
19367
|
+
span,
|
|
19368
|
+
startTime
|
|
19369
|
+
})
|
|
19370
|
+
})
|
|
19371
|
+
);
|
|
19148
19372
|
this.unsubscribers.push(
|
|
19149
19373
|
traceStreamingChannel(aiSDKChannels.toolLoopAgentGenerate, {
|
|
19150
19374
|
name: "ToolLoopAgent.generate",
|
|
@@ -19675,6 +19899,45 @@ function prepareAISDKCallInput(params, event, span, defaultDenyOutputPaths, chil
|
|
|
19675
19899
|
metadata
|
|
19676
19900
|
};
|
|
19677
19901
|
}
|
|
19902
|
+
function prepareAISDKHarnessAgentInput(params, self) {
|
|
19903
|
+
if (isObject(self)) {
|
|
19904
|
+
try {
|
|
19905
|
+
if (isObject(self.settings)) {
|
|
19906
|
+
const settings = self.settings;
|
|
19907
|
+
if (settings.telemetry === void 0) {
|
|
19908
|
+
Reflect.set(self, "settings", { ...settings, telemetry: {} });
|
|
19909
|
+
}
|
|
19910
|
+
}
|
|
19911
|
+
} catch {
|
|
19912
|
+
}
|
|
19913
|
+
}
|
|
19914
|
+
const selectedInput = {};
|
|
19915
|
+
if (params.prompt !== void 0) {
|
|
19916
|
+
selectedInput.prompt = params.prompt;
|
|
19917
|
+
}
|
|
19918
|
+
if (params.messages !== void 0) {
|
|
19919
|
+
selectedInput.messages = params.messages;
|
|
19920
|
+
}
|
|
19921
|
+
if (params.toolApprovalContinuations !== void 0) {
|
|
19922
|
+
selectedInput.toolApprovalContinuations = params.toolApprovalContinuations;
|
|
19923
|
+
}
|
|
19924
|
+
const metadata = extractMetadataFromCallParams({}, self);
|
|
19925
|
+
if (isObject(params.session) && typeof params.session.sessionId === "string") {
|
|
19926
|
+
metadata.sessionId = params.session.sessionId;
|
|
19927
|
+
}
|
|
19928
|
+
if (isObject(self)) {
|
|
19929
|
+
if (typeof self.harnessId === "string") {
|
|
19930
|
+
metadata.harnessId = self.harnessId;
|
|
19931
|
+
}
|
|
19932
|
+
if (typeof self.permissionMode === "string") {
|
|
19933
|
+
metadata.permissionMode = self.permissionMode;
|
|
19934
|
+
}
|
|
19935
|
+
}
|
|
19936
|
+
return {
|
|
19937
|
+
input: processAISDKCallInput(selectedInput).input,
|
|
19938
|
+
metadata
|
|
19939
|
+
};
|
|
19940
|
+
}
|
|
19678
19941
|
function prepareAISDKWorkflowAgentStreamInput(params, event, span, defaultDenyOutputPaths) {
|
|
19679
19942
|
registerWorkflowAgentWrapperSpan(span);
|
|
19680
19943
|
const { input } = processAISDKWorkflowAgentCallInput(params);
|
|
@@ -20522,6 +20785,7 @@ function patchAISDKStreamingResult(args) {
|
|
|
20522
20785
|
endEvent,
|
|
20523
20786
|
onComplete,
|
|
20524
20787
|
result,
|
|
20788
|
+
resolvePromiseUsage,
|
|
20525
20789
|
span,
|
|
20526
20790
|
startTime
|
|
20527
20791
|
} = args;
|
|
@@ -20548,6 +20812,22 @@ function patchAISDKStreamingResult(args) {
|
|
|
20548
20812
|
outputLogged = true;
|
|
20549
20813
|
try {
|
|
20550
20814
|
const metrics = extractTopLevelAISDKMetrics(result, endEvent);
|
|
20815
|
+
if (resolvePromiseUsage) {
|
|
20816
|
+
try {
|
|
20817
|
+
const resultRecord2 = result;
|
|
20818
|
+
const pendingUsage = resultRecord2.totalUsage ?? resultRecord2.usage;
|
|
20819
|
+
if (isPromiseLike(pendingUsage)) {
|
|
20820
|
+
const usage = await Promise.resolve(pendingUsage);
|
|
20821
|
+
if (isObject(usage)) {
|
|
20822
|
+
Object.assign(
|
|
20823
|
+
metrics,
|
|
20824
|
+
extractTokenMetrics({ usage })
|
|
20825
|
+
);
|
|
20826
|
+
}
|
|
20827
|
+
}
|
|
20828
|
+
} catch {
|
|
20829
|
+
}
|
|
20830
|
+
}
|
|
20551
20831
|
if (metrics.time_to_first_token === void 0 && firstChunkTime !== void 0) {
|
|
20552
20832
|
metrics.time_to_first_token = firstChunkTime - startTime;
|
|
20553
20833
|
}
|
|
@@ -32805,6 +33085,16 @@ function cleanObject(obj) {
|
|
|
32805
33085
|
})
|
|
32806
33086
|
);
|
|
32807
33087
|
}
|
|
33088
|
+
function normalizeTokenMetrics(obj) {
|
|
33089
|
+
const metrics = cleanObject(obj);
|
|
33090
|
+
if (metrics.total_tokens !== void 0) {
|
|
33091
|
+
metrics.tokens = metrics.total_tokens;
|
|
33092
|
+
} else if (metrics.prompt_tokens !== void 0 && metrics.completion_tokens !== void 0) {
|
|
33093
|
+
metrics.tokens = metrics.prompt_tokens + metrics.completion_tokens;
|
|
33094
|
+
}
|
|
33095
|
+
delete metrics.total_tokens;
|
|
33096
|
+
return metrics;
|
|
33097
|
+
}
|
|
32808
33098
|
function walkGenerations(response) {
|
|
32809
33099
|
const result = [];
|
|
32810
33100
|
const generations = response.generations || [];
|
|
@@ -32851,7 +33141,7 @@ function getMetricsFromResponse(response) {
|
|
|
32851
33141
|
continue;
|
|
32852
33142
|
}
|
|
32853
33143
|
const inputTokenDetails = usageMetadata.input_token_details;
|
|
32854
|
-
return
|
|
33144
|
+
return normalizeTokenMetrics({
|
|
32855
33145
|
total_tokens: usageMetadata.total_tokens,
|
|
32856
33146
|
prompt_tokens: usageMetadata.input_tokens,
|
|
32857
33147
|
completion_tokens: usageMetadata.output_tokens,
|
|
@@ -32861,7 +33151,7 @@ function getMetricsFromResponse(response) {
|
|
|
32861
33151
|
}
|
|
32862
33152
|
const llmOutput = response.llmOutput || {};
|
|
32863
33153
|
const tokenUsage = isRecord(llmOutput.tokenUsage) ? llmOutput.tokenUsage : isRecord(llmOutput.estimatedTokens) ? llmOutput.estimatedTokens : {};
|
|
32864
|
-
return
|
|
33154
|
+
return normalizeTokenMetrics({
|
|
32865
33155
|
total_tokens: tokenUsage.totalTokens,
|
|
32866
33156
|
prompt_tokens: tokenUsage.promptTokens,
|
|
32867
33157
|
completion_tokens: tokenUsage.completionTokens
|
|
@@ -35971,7 +36261,13 @@ function configureNode() {
|
|
|
35971
36261
|
isomorph_default.getPastNAncestors = getPastNAncestors;
|
|
35972
36262
|
isomorph_default.getEnv = (name) => {
|
|
35973
36263
|
const value = process.env[name];
|
|
35974
|
-
|
|
36264
|
+
if (name === "BRAINTRUST_API_KEY") {
|
|
36265
|
+
return value?.trim() ? value : void 0;
|
|
36266
|
+
}
|
|
36267
|
+
if ((name === "BRAINTRUST_ENVIRONMENT_TYPE" || name === "BRAINTRUST_ENVIRONMENT_NAME") && !value?.trim()) {
|
|
36268
|
+
return getNearestBraintrustEnvValue(name);
|
|
36269
|
+
}
|
|
36270
|
+
return value;
|
|
35975
36271
|
};
|
|
35976
36272
|
isomorph_default.getBraintrustApiKey = async () => {
|
|
35977
36273
|
const value = process.env.BRAINTRUST_API_KEY;
|
|
@@ -36056,6 +36352,24 @@ function configureNode() {
|
|
|
36056
36352
|
}
|
|
36057
36353
|
registry.enable();
|
|
36058
36354
|
}
|
|
36355
|
+
function getNearestBraintrustEnvValue(name) {
|
|
36356
|
+
for (let dir2 = process.cwd(), depth = 0; depth <= BRAINTRUST_ENV_SEARCH_PARENT_LIMIT; dir2 = path.dirname(dir2), depth++) {
|
|
36357
|
+
const envPath = path.join(dir2, ".env.braintrust");
|
|
36358
|
+
try {
|
|
36359
|
+
const parsed = dotenv.parse(fsSync.readFileSync(envPath, "utf8"));
|
|
36360
|
+
const value = parsed[name];
|
|
36361
|
+
return value?.trim() ? value : void 0;
|
|
36362
|
+
} catch (e) {
|
|
36363
|
+
if (typeof e !== "object" || e === null || !("code" in e) || e.code !== "ENOENT") {
|
|
36364
|
+
return void 0;
|
|
36365
|
+
}
|
|
36366
|
+
}
|
|
36367
|
+
if (path.dirname(dir2) === dir2) {
|
|
36368
|
+
break;
|
|
36369
|
+
}
|
|
36370
|
+
}
|
|
36371
|
+
return void 0;
|
|
36372
|
+
}
|
|
36059
36373
|
|
|
36060
36374
|
// src/cli/index.ts
|
|
36061
36375
|
var import_env2 = require("@next/env");
|
|
@@ -36388,6 +36702,7 @@ var ToolBuilder = class {
|
|
|
36388
36702
|
constructor(project) {
|
|
36389
36703
|
this.project = project;
|
|
36390
36704
|
}
|
|
36705
|
+
project;
|
|
36391
36706
|
taskCounter = 0;
|
|
36392
36707
|
// This type definition is just a catch all so that the implementation can be
|
|
36393
36708
|
// less specific than the two more specific declarations above.
|
|
@@ -36418,6 +36733,7 @@ var ScorerBuilder = class {
|
|
|
36418
36733
|
constructor(project) {
|
|
36419
36734
|
this.project = project;
|
|
36420
36735
|
}
|
|
36736
|
+
project;
|
|
36421
36737
|
taskCounter = 0;
|
|
36422
36738
|
create(opts) {
|
|
36423
36739
|
this.taskCounter++;
|
|
@@ -36477,6 +36793,7 @@ var ClassifierBuilder = class {
|
|
|
36477
36793
|
constructor(project) {
|
|
36478
36794
|
this.project = project;
|
|
36479
36795
|
}
|
|
36796
|
+
project;
|
|
36480
36797
|
taskCounter = 0;
|
|
36481
36798
|
create(opts) {
|
|
36482
36799
|
this.taskCounter++;
|
|
@@ -36512,6 +36829,7 @@ var CodeFunction = class {
|
|
|
36512
36829
|
throw new Error("parameters are required if return type is defined");
|
|
36513
36830
|
}
|
|
36514
36831
|
}
|
|
36832
|
+
project;
|
|
36515
36833
|
handler;
|
|
36516
36834
|
name;
|
|
36517
36835
|
slug;
|
|
@@ -36599,6 +36917,7 @@ var PromptBuilder = class {
|
|
|
36599
36917
|
constructor(project) {
|
|
36600
36918
|
this.project = project;
|
|
36601
36919
|
}
|
|
36920
|
+
project;
|
|
36602
36921
|
create(opts) {
|
|
36603
36922
|
const toolFunctions = [];
|
|
36604
36923
|
const rawTools = [];
|
|
@@ -36675,6 +36994,7 @@ var ParametersBuilder = class {
|
|
|
36675
36994
|
constructor(project) {
|
|
36676
36995
|
this.project = project;
|
|
36677
36996
|
}
|
|
36997
|
+
project;
|
|
36678
36998
|
create(opts) {
|
|
36679
36999
|
const slug = opts.slug ?? slugify(opts.name, { lower: true, strict: true });
|
|
36680
37000
|
const codeParameters = new CodeParameters(this.project, {
|