braintrust 1.0.2 → 1.0.3
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 +30 -25
- package/dev/dist/index.d.ts +30 -25
- package/dev/dist/index.js +336 -325
- package/dev/dist/index.mjs +259 -248
- package/dist/browser.d.mts +2313 -322
- package/dist/browser.d.ts +2313 -322
- package/dist/browser.js +2819 -198
- package/dist/browser.mjs +2681 -60
- package/dist/cli.js +358 -160
- package/dist/index.d.mts +254 -284
- package/dist/index.d.ts +254 -284
- package/dist/index.js +484 -470
- package/dist/index.mjs +335 -321
- package/package.json +6 -2
package/dist/cli.js
CHANGED
|
@@ -37,8 +37,8 @@ var require_async = __commonJS({
|
|
|
37
37
|
"use strict";
|
|
38
38
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
39
39
|
exports2.read = void 0;
|
|
40
|
-
function read(
|
|
41
|
-
settings.fs.lstat(
|
|
40
|
+
function read(path8, settings, callback) {
|
|
41
|
+
settings.fs.lstat(path8, (lstatError, lstat) => {
|
|
42
42
|
if (lstatError !== null) {
|
|
43
43
|
callFailureCallback(callback, lstatError);
|
|
44
44
|
return;
|
|
@@ -47,7 +47,7 @@ var require_async = __commonJS({
|
|
|
47
47
|
callSuccessCallback(callback, lstat);
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
settings.fs.stat(
|
|
50
|
+
settings.fs.stat(path8, (statError, stat2) => {
|
|
51
51
|
if (statError !== null) {
|
|
52
52
|
if (settings.throwErrorOnBrokenSymbolicLink) {
|
|
53
53
|
callFailureCallback(callback, statError);
|
|
@@ -79,13 +79,13 @@ var require_sync = __commonJS({
|
|
|
79
79
|
"use strict";
|
|
80
80
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
81
81
|
exports2.read = void 0;
|
|
82
|
-
function read(
|
|
83
|
-
const lstat = settings.fs.lstatSync(
|
|
82
|
+
function read(path8, settings) {
|
|
83
|
+
const lstat = settings.fs.lstatSync(path8);
|
|
84
84
|
if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
|
|
85
85
|
return lstat;
|
|
86
86
|
}
|
|
87
87
|
try {
|
|
88
|
-
const stat2 = settings.fs.statSync(
|
|
88
|
+
const stat2 = settings.fs.statSync(path8);
|
|
89
89
|
if (settings.markSymbolicLink) {
|
|
90
90
|
stat2.isSymbolicLink = () => true;
|
|
91
91
|
}
|
|
@@ -156,17 +156,17 @@ var require_out = __commonJS({
|
|
|
156
156
|
var sync = require_sync();
|
|
157
157
|
var settings_1 = require_settings();
|
|
158
158
|
exports2.Settings = settings_1.default;
|
|
159
|
-
function stat2(
|
|
159
|
+
function stat2(path8, optionsOrSettingsOrCallback, callback) {
|
|
160
160
|
if (typeof optionsOrSettingsOrCallback === "function") {
|
|
161
|
-
async.read(
|
|
161
|
+
async.read(path8, getSettings(), optionsOrSettingsOrCallback);
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
|
-
async.read(
|
|
164
|
+
async.read(path8, getSettings(optionsOrSettingsOrCallback), callback);
|
|
165
165
|
}
|
|
166
166
|
exports2.stat = stat2;
|
|
167
|
-
function statSync2(
|
|
167
|
+
function statSync2(path8, optionsOrSettings) {
|
|
168
168
|
const settings = getSettings(optionsOrSettings);
|
|
169
|
-
return sync.read(
|
|
169
|
+
return sync.read(path8, settings);
|
|
170
170
|
}
|
|
171
171
|
exports2.statSync = statSync2;
|
|
172
172
|
function getSettings(settingsOrOptions = {}) {
|
|
@@ -384,16 +384,16 @@ var require_async2 = __commonJS({
|
|
|
384
384
|
return;
|
|
385
385
|
}
|
|
386
386
|
const tasks = names.map((name) => {
|
|
387
|
-
const
|
|
387
|
+
const path8 = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
|
|
388
388
|
return (done) => {
|
|
389
|
-
fsStat.stat(
|
|
389
|
+
fsStat.stat(path8, settings.fsStatSettings, (error2, stats) => {
|
|
390
390
|
if (error2 !== null) {
|
|
391
391
|
done(error2);
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
394
|
const entry = {
|
|
395
395
|
name,
|
|
396
|
-
path:
|
|
396
|
+
path: path8,
|
|
397
397
|
dirent: utils.fs.createDirentFromStats(name, stats)
|
|
398
398
|
};
|
|
399
399
|
if (settings.stats) {
|
|
@@ -511,7 +511,7 @@ var require_settings2 = __commonJS({
|
|
|
511
511
|
"../node_modules/@nodelib/fs.scandir/out/settings.js"(exports2) {
|
|
512
512
|
"use strict";
|
|
513
513
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
514
|
-
var
|
|
514
|
+
var path8 = require("path");
|
|
515
515
|
var fsStat = require_out();
|
|
516
516
|
var fs6 = require_fs3();
|
|
517
517
|
var Settings = class {
|
|
@@ -519,7 +519,7 @@ var require_settings2 = __commonJS({
|
|
|
519
519
|
this._options = _options;
|
|
520
520
|
this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
|
|
521
521
|
this.fs = fs6.createFileSystemAdapter(this._options.fs);
|
|
522
|
-
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator,
|
|
522
|
+
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path8.sep);
|
|
523
523
|
this.stats = this._getValue(this._options.stats, false);
|
|
524
524
|
this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
|
|
525
525
|
this.fsStatSettings = new fsStat.Settings({
|
|
@@ -546,17 +546,17 @@ var require_out2 = __commonJS({
|
|
|
546
546
|
var sync = require_sync2();
|
|
547
547
|
var settings_1 = require_settings2();
|
|
548
548
|
exports2.Settings = settings_1.default;
|
|
549
|
-
function scandir(
|
|
549
|
+
function scandir(path8, optionsOrSettingsOrCallback, callback) {
|
|
550
550
|
if (typeof optionsOrSettingsOrCallback === "function") {
|
|
551
|
-
async.read(
|
|
551
|
+
async.read(path8, getSettings(), optionsOrSettingsOrCallback);
|
|
552
552
|
return;
|
|
553
553
|
}
|
|
554
|
-
async.read(
|
|
554
|
+
async.read(path8, getSettings(optionsOrSettingsOrCallback), callback);
|
|
555
555
|
}
|
|
556
556
|
exports2.scandir = scandir;
|
|
557
|
-
function scandirSync(
|
|
557
|
+
function scandirSync(path8, optionsOrSettings) {
|
|
558
558
|
const settings = getSettings(optionsOrSettings);
|
|
559
|
-
return sync.read(
|
|
559
|
+
return sync.read(path8, settings);
|
|
560
560
|
}
|
|
561
561
|
exports2.scandirSync = scandirSync;
|
|
562
562
|
function getSettings(settingsOrOptions = {}) {
|
|
@@ -1180,7 +1180,7 @@ var require_settings3 = __commonJS({
|
|
|
1180
1180
|
"../node_modules/@nodelib/fs.walk/out/settings.js"(exports2) {
|
|
1181
1181
|
"use strict";
|
|
1182
1182
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1183
|
-
var
|
|
1183
|
+
var path8 = require("path");
|
|
1184
1184
|
var fsScandir = require_out2();
|
|
1185
1185
|
var Settings = class {
|
|
1186
1186
|
constructor(_options = {}) {
|
|
@@ -1190,7 +1190,7 @@ var require_settings3 = __commonJS({
|
|
|
1190
1190
|
this.deepFilter = this._getValue(this._options.deepFilter, null);
|
|
1191
1191
|
this.entryFilter = this._getValue(this._options.entryFilter, null);
|
|
1192
1192
|
this.errorFilter = this._getValue(this._options.errorFilter, null);
|
|
1193
|
-
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator,
|
|
1193
|
+
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path8.sep);
|
|
1194
1194
|
this.fsScandirSettings = new fsScandir.Settings({
|
|
1195
1195
|
followSymbolicLinks: this._options.followSymbolicLinks,
|
|
1196
1196
|
fs: this._options.fs,
|
|
@@ -1252,7 +1252,7 @@ var require_package = __commonJS({
|
|
|
1252
1252
|
"package.json"(exports2, module2) {
|
|
1253
1253
|
module2.exports = {
|
|
1254
1254
|
name: "braintrust",
|
|
1255
|
-
version: "1.0.
|
|
1255
|
+
version: "1.0.3",
|
|
1256
1256
|
description: "SDK for integrating Braintrust",
|
|
1257
1257
|
repository: {
|
|
1258
1258
|
type: "git",
|
|
@@ -1309,6 +1309,7 @@ var require_package = __commonJS({
|
|
|
1309
1309
|
clean: "rm -r dist/* && rm -r dev/dist/*",
|
|
1310
1310
|
docs: "npx typedoc --options typedoc.json src/index.ts",
|
|
1311
1311
|
test: 'vitest run --exclude "src/wrappers/**/*.test.ts" --exclude "src/otel/**/*.test.ts" --exclude "smoke/**/*.test.ts"',
|
|
1312
|
+
"test:api-compat": "vitest run src/api-compatibility.test.ts",
|
|
1312
1313
|
"test:anthropic": "vitest run src/wrappers/anthropic.test.ts",
|
|
1313
1314
|
"test:openai": "vitest run src/wrappers/oai.test.ts",
|
|
1314
1315
|
"test:otel": "vitest run --dir src/otel",
|
|
@@ -1340,7 +1341,10 @@ var require_package = __commonJS({
|
|
|
1340
1341
|
"@types/mustache": "^4.2.5",
|
|
1341
1342
|
"@types/node": "^20.10.5",
|
|
1342
1343
|
"@types/pluralize": "^0.0.30",
|
|
1344
|
+
"@types/tar": "^6.1.13",
|
|
1343
1345
|
"@types/uuid": "^9.0.7",
|
|
1346
|
+
"@typescript-eslint/eslint-plugin": "^8.49.0",
|
|
1347
|
+
"@typescript-eslint/parser": "^8.49.0",
|
|
1344
1348
|
ai: "^4.3.16",
|
|
1345
1349
|
async: "^3.2.5",
|
|
1346
1350
|
autoevals: "^0.0.131",
|
|
@@ -1348,6 +1352,7 @@ var require_package = __commonJS({
|
|
|
1348
1352
|
"npm-run-all": "^4.1.5",
|
|
1349
1353
|
"openapi-zod-client": "^1.18.3",
|
|
1350
1354
|
prettier: "^3.5.3",
|
|
1355
|
+
tar: "^7.5.2",
|
|
1351
1356
|
tinybench: "^4.0.1",
|
|
1352
1357
|
"ts-jest": "^29.1.4",
|
|
1353
1358
|
tsup: "^8.5.1",
|
|
@@ -1378,7 +1383,6 @@ var require_package = __commonJS({
|
|
|
1378
1383
|
mustache: "^4.2.0",
|
|
1379
1384
|
pluralize: "^8.0.0",
|
|
1380
1385
|
"simple-git": "^3.21.0",
|
|
1381
|
-
slugify: "^1.6.6",
|
|
1382
1386
|
"source-map": "^0.7.4",
|
|
1383
1387
|
"termi-link": "^1.0.1",
|
|
1384
1388
|
uuid: "^9.0.1",
|
|
@@ -1392,7 +1396,7 @@ var require_package = __commonJS({
|
|
|
1392
1396
|
}
|
|
1393
1397
|
});
|
|
1394
1398
|
|
|
1395
|
-
// src/cli.ts
|
|
1399
|
+
// src/cli/index.ts
|
|
1396
1400
|
var cli_exports = {};
|
|
1397
1401
|
__export(cli_exports, {
|
|
1398
1402
|
buildEvaluators: () => buildEvaluators,
|
|
@@ -1404,8 +1408,8 @@ var esbuild = __toESM(require("esbuild"));
|
|
|
1404
1408
|
var dotenv2 = __toESM(require("dotenv"));
|
|
1405
1409
|
var import_fs2 = __toESM(require("fs"));
|
|
1406
1410
|
var import_os = __toESM(require("os"));
|
|
1407
|
-
var
|
|
1408
|
-
var
|
|
1411
|
+
var import_path5 = __toESM(require("path"));
|
|
1412
|
+
var import_util15 = __toESM(require("util"));
|
|
1409
1413
|
var fsWalk = __toESM(require_out3());
|
|
1410
1414
|
var import_minimatch = require("minimatch");
|
|
1411
1415
|
var import_argparse = require("argparse");
|
|
@@ -2133,11 +2137,11 @@ function mergeDictsWithPaths({
|
|
|
2133
2137
|
function mergeDictsWithPathsHelper({
|
|
2134
2138
|
mergeInto,
|
|
2135
2139
|
mergeFrom,
|
|
2136
|
-
path:
|
|
2140
|
+
path: path8,
|
|
2137
2141
|
mergePaths
|
|
2138
2142
|
}) {
|
|
2139
2143
|
Object.entries(mergeFrom).forEach(([k, mergeFromV]) => {
|
|
2140
|
-
const fullPath =
|
|
2144
|
+
const fullPath = path8.concat([k]);
|
|
2141
2145
|
const fullPathSerialized = JSON.stringify(fullPath);
|
|
2142
2146
|
const mergeIntoV = recordFind(mergeInto, k);
|
|
2143
2147
|
if (isObject(mergeIntoV) && isObject(mergeFromV) && !mergePaths.has(fullPathSerialized)) {
|
|
@@ -2168,9 +2172,9 @@ function mapAt(m, k) {
|
|
|
2168
2172
|
function recordFind(m, k) {
|
|
2169
2173
|
return m[k];
|
|
2170
2174
|
}
|
|
2171
|
-
function getObjValueByPath(row,
|
|
2175
|
+
function getObjValueByPath(row, path8) {
|
|
2172
2176
|
let curr = row;
|
|
2173
|
-
for (const p of
|
|
2177
|
+
for (const p of path8) {
|
|
2174
2178
|
if (!isObjectOrArray(curr)) {
|
|
2175
2179
|
return null;
|
|
2176
2180
|
}
|
|
@@ -2449,6 +2453,93 @@ function capitalize(s, sep) {
|
|
|
2449
2453
|
const items = sep ? s.split(sep) : [s];
|
|
2450
2454
|
return items.map((s2) => s2 ? s2.charAt(0).toUpperCase() + s2.slice(1) : s2).join(sep || "");
|
|
2451
2455
|
}
|
|
2456
|
+
function slugify(text, options) {
|
|
2457
|
+
if (typeof text !== "string") {
|
|
2458
|
+
throw new Error("slugify: string argument expected");
|
|
2459
|
+
}
|
|
2460
|
+
const charMap = {
|
|
2461
|
+
// Currency and symbols
|
|
2462
|
+
$: "dollar",
|
|
2463
|
+
"%": "percent",
|
|
2464
|
+
"&": "and",
|
|
2465
|
+
// Latin characters
|
|
2466
|
+
\u00C0: "A",
|
|
2467
|
+
\u00C1: "A",
|
|
2468
|
+
\u00C2: "A",
|
|
2469
|
+
\u00C3: "A",
|
|
2470
|
+
\u00C4: "A",
|
|
2471
|
+
\u00C5: "A",
|
|
2472
|
+
\u00C6: "AE",
|
|
2473
|
+
\u00C7: "C",
|
|
2474
|
+
\u00C8: "E",
|
|
2475
|
+
\u00C9: "E",
|
|
2476
|
+
\u00CA: "E",
|
|
2477
|
+
\u00CB: "E",
|
|
2478
|
+
\u00CC: "I",
|
|
2479
|
+
\u00CD: "I",
|
|
2480
|
+
\u00CE: "I",
|
|
2481
|
+
\u00CF: "I",
|
|
2482
|
+
\u00D1: "N",
|
|
2483
|
+
\u00D2: "O",
|
|
2484
|
+
\u00D3: "O",
|
|
2485
|
+
\u00D4: "O",
|
|
2486
|
+
\u00D5: "O",
|
|
2487
|
+
\u00D6: "O",
|
|
2488
|
+
\u00D8: "O",
|
|
2489
|
+
\u00D9: "U",
|
|
2490
|
+
\u00DA: "U",
|
|
2491
|
+
\u00DB: "U",
|
|
2492
|
+
\u00DC: "U",
|
|
2493
|
+
\u00DD: "Y",
|
|
2494
|
+
\u00E0: "a",
|
|
2495
|
+
\u00E1: "a",
|
|
2496
|
+
\u00E2: "a",
|
|
2497
|
+
\u00E3: "a",
|
|
2498
|
+
\u00E4: "a",
|
|
2499
|
+
\u00E5: "a",
|
|
2500
|
+
\u00E6: "ae",
|
|
2501
|
+
\u00E7: "c",
|
|
2502
|
+
\u00E8: "e",
|
|
2503
|
+
\u00E9: "e",
|
|
2504
|
+
\u00EA: "e",
|
|
2505
|
+
\u00EB: "e",
|
|
2506
|
+
\u00EC: "i",
|
|
2507
|
+
\u00ED: "i",
|
|
2508
|
+
\u00EE: "i",
|
|
2509
|
+
\u00EF: "i",
|
|
2510
|
+
\u00F1: "n",
|
|
2511
|
+
\u00F2: "o",
|
|
2512
|
+
\u00F3: "o",
|
|
2513
|
+
\u00F4: "o",
|
|
2514
|
+
\u00F5: "o",
|
|
2515
|
+
\u00F6: "o",
|
|
2516
|
+
\u00F8: "o",
|
|
2517
|
+
\u00F9: "u",
|
|
2518
|
+
\u00FA: "u",
|
|
2519
|
+
\u00FB: "u",
|
|
2520
|
+
\u00FC: "u",
|
|
2521
|
+
\u00FD: "y",
|
|
2522
|
+
\u00FF: "y"
|
|
2523
|
+
};
|
|
2524
|
+
const replacement = "-";
|
|
2525
|
+
const trim = options?.trim !== false;
|
|
2526
|
+
let slug = text.normalize().split("").reduce((result, ch) => {
|
|
2527
|
+
const mapped = charMap[ch] || ch;
|
|
2528
|
+
const appendChar = mapped === replacement ? " " : mapped;
|
|
2529
|
+
return result + appendChar.replace(/[^\w\s$*_+~.()'"!\-:@]+/g, "");
|
|
2530
|
+
}, "");
|
|
2531
|
+
if (options?.strict) {
|
|
2532
|
+
slug = slug.replace(/[^A-Za-z0-9\s]/g, "");
|
|
2533
|
+
}
|
|
2534
|
+
if (trim) {
|
|
2535
|
+
slug = slug.trim();
|
|
2536
|
+
}
|
|
2537
|
+
slug = slug.replace(/\s+/g, replacement);
|
|
2538
|
+
if (options?.lower) {
|
|
2539
|
+
slug = slug.toLowerCase();
|
|
2540
|
+
}
|
|
2541
|
+
return slug;
|
|
2542
|
+
}
|
|
2452
2543
|
|
|
2453
2544
|
// util/span_identifier_v4.ts
|
|
2454
2545
|
var import_v34 = require("zod/v3");
|
|
@@ -4357,7 +4448,9 @@ var iso = {
|
|
|
4357
4448
|
getCallerLocation: () => void 0,
|
|
4358
4449
|
newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
|
|
4359
4450
|
processOn: (_0, _1) => {
|
|
4360
|
-
}
|
|
4451
|
+
},
|
|
4452
|
+
basename: (filepath) => filepath.split(/[\\/]/).pop() || filepath,
|
|
4453
|
+
writeln: (text) => console.log(text)
|
|
4361
4454
|
};
|
|
4362
4455
|
var isomorph_default = iso;
|
|
4363
4456
|
|
|
@@ -4443,10 +4536,10 @@ var DiskCache = class {
|
|
|
4443
4536
|
return;
|
|
4444
4537
|
}
|
|
4445
4538
|
const stats = await Promise.all(
|
|
4446
|
-
paths.map(async (
|
|
4447
|
-
const stat2 = await isomorph_default.stat(
|
|
4539
|
+
paths.map(async (path8) => {
|
|
4540
|
+
const stat2 = await isomorph_default.stat(path8);
|
|
4448
4541
|
return {
|
|
4449
|
-
path:
|
|
4542
|
+
path: path8,
|
|
4450
4543
|
mtime: stat2.mtime.getTime()
|
|
4451
4544
|
};
|
|
4452
4545
|
})
|
|
@@ -5165,9 +5258,9 @@ var HTTPConnection = class _HTTPConnection {
|
|
|
5165
5258
|
this.headers["Authorization"] = `Bearer ${this.token}`;
|
|
5166
5259
|
}
|
|
5167
5260
|
}
|
|
5168
|
-
async get(
|
|
5261
|
+
async get(path8, params = void 0, config3) {
|
|
5169
5262
|
const { headers, ...rest } = config3 || {};
|
|
5170
|
-
const url = new URL(_urljoin(this.base_url,
|
|
5263
|
+
const url = new URL(_urljoin(this.base_url, path8));
|
|
5171
5264
|
url.search = new URLSearchParams(
|
|
5172
5265
|
params ? Object.entries(params).filter(([_, v]) => v !== void 0).flatMap(
|
|
5173
5266
|
([k, v]) => v !== void 0 ? typeof v === "string" ? [[k, v]] : v.map((x) => [k, x]) : []
|
|
@@ -5188,13 +5281,13 @@ var HTTPConnection = class _HTTPConnection {
|
|
|
5188
5281
|
})
|
|
5189
5282
|
);
|
|
5190
5283
|
}
|
|
5191
|
-
async post(
|
|
5284
|
+
async post(path8, params, config3) {
|
|
5192
5285
|
const { headers, ...rest } = config3 || {};
|
|
5193
5286
|
const this_fetch = this.fetch;
|
|
5194
5287
|
const this_base_url = this.base_url;
|
|
5195
5288
|
const this_headers = this.headers;
|
|
5196
5289
|
return await checkResponse(
|
|
5197
|
-
await this_fetch(_urljoin(this_base_url,
|
|
5290
|
+
await this_fetch(_urljoin(this_base_url, path8), {
|
|
5198
5291
|
method: "POST",
|
|
5199
5292
|
headers: {
|
|
5200
5293
|
Accept: "application/json",
|
|
@@ -8444,17 +8537,11 @@ var Prompt2 = class _Prompt {
|
|
|
8444
8537
|
};
|
|
8445
8538
|
var TEST_API_KEY = "___TEST_API_KEY__THIS_IS_NOT_REAL___";
|
|
8446
8539
|
|
|
8447
|
-
// src/progress.ts
|
|
8540
|
+
// src/cli/reporters/progress.ts
|
|
8448
8541
|
var import_chalk = __toESM(require("chalk"));
|
|
8449
8542
|
var cliProgress = __toESM(require("cli-progress"));
|
|
8450
|
-
|
|
8451
|
-
|
|
8452
|
-
const padded = name.padEnd(length);
|
|
8453
|
-
if (padded.length <= length) {
|
|
8454
|
-
return padded;
|
|
8455
|
-
}
|
|
8456
|
-
return padded.substring(0, length - 3) + "...";
|
|
8457
|
-
}
|
|
8543
|
+
|
|
8544
|
+
// src/reporters/progress.ts
|
|
8458
8545
|
var SimpleProgressReporter = class {
|
|
8459
8546
|
start(name, _total) {
|
|
8460
8547
|
console.log(`Running evaluator ${name}`);
|
|
@@ -8466,15 +8553,23 @@ var SimpleProgressReporter = class {
|
|
|
8466
8553
|
setTotal(_name, _total) {
|
|
8467
8554
|
}
|
|
8468
8555
|
};
|
|
8556
|
+
|
|
8557
|
+
// src/cli/reporters/progress.ts
|
|
8558
|
+
var MAX_NAME_LENGTH = 40;
|
|
8559
|
+
function fitNameToSpaces(name, length) {
|
|
8560
|
+
const padded = name.padEnd(length);
|
|
8561
|
+
if (padded.length <= length) {
|
|
8562
|
+
return padded;
|
|
8563
|
+
}
|
|
8564
|
+
return padded.substring(0, length - 3) + "...";
|
|
8565
|
+
}
|
|
8469
8566
|
var BarProgressReporter = class {
|
|
8470
8567
|
multiBar;
|
|
8471
8568
|
bars = {};
|
|
8472
8569
|
constructor() {
|
|
8473
8570
|
this.multiBar = new cliProgress.MultiBar(
|
|
8474
8571
|
{
|
|
8475
|
-
// clearOnComplete: true,
|
|
8476
8572
|
format: `${import_chalk.default.blueBright("{bar}")} ${import_chalk.default.blue("{evaluator}")} {percentage}% ${import_chalk.default.gray("{value}/{total} {eta_formatted}")}`,
|
|
8477
|
-
// autopadding: true,
|
|
8478
8573
|
hideCursor: true,
|
|
8479
8574
|
barsize: 10
|
|
8480
8575
|
},
|
|
@@ -8498,7 +8593,7 @@ var BarProgressReporter = class {
|
|
|
8498
8593
|
}
|
|
8499
8594
|
};
|
|
8500
8595
|
|
|
8501
|
-
// src/cli.ts
|
|
8596
|
+
// src/cli/index.ts
|
|
8502
8597
|
var import_chalk3 = __toESM(require("chalk"));
|
|
8503
8598
|
var import_termi_link2 = require("termi-link");
|
|
8504
8599
|
|
|
@@ -9538,20 +9633,12 @@ function waterfall(tasks, callback) {
|
|
|
9538
9633
|
}
|
|
9539
9634
|
var waterfall$1 = awaitify(waterfall);
|
|
9540
9635
|
|
|
9541
|
-
// src/framework.ts
|
|
9542
|
-
var import_chalk2 = __toESM(require("chalk"));
|
|
9543
|
-
var import_termi_link = require("termi-link");
|
|
9544
|
-
var import_boxen = __toESM(require("boxen"));
|
|
9545
|
-
var import_pluralize = __toESM(require("pluralize"));
|
|
9546
|
-
var import_cli_table3 = __toESM(require("cli-table3"));
|
|
9547
|
-
|
|
9548
9636
|
// src/eval-parameters.ts
|
|
9549
9637
|
var import_v310 = require("zod/v3");
|
|
9550
9638
|
|
|
9551
9639
|
// src/framework2.ts
|
|
9552
|
-
var import_path = __toESM(require("path"));
|
|
9553
|
-
var import_slugify = __toESM(require("slugify"));
|
|
9554
9640
|
var import_v39 = require("zod/v3");
|
|
9641
|
+
var currentFilename = typeof __filename !== "undefined" ? __filename : "unknown";
|
|
9555
9642
|
var ProjectBuilder = class {
|
|
9556
9643
|
create(opts) {
|
|
9557
9644
|
return new Project2(opts);
|
|
@@ -9623,12 +9710,12 @@ var ToolBuilder = class {
|
|
|
9623
9710
|
const { handler, name, slug, parameters, returns, ...rest } = opts;
|
|
9624
9711
|
let resolvedName = name ?? handler.name;
|
|
9625
9712
|
if (resolvedName.trim().length === 0) {
|
|
9626
|
-
resolvedName = `Tool ${
|
|
9713
|
+
resolvedName = `Tool ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`;
|
|
9627
9714
|
}
|
|
9628
9715
|
const tool = new CodeFunction(this.project, {
|
|
9629
9716
|
handler,
|
|
9630
9717
|
name: resolvedName,
|
|
9631
|
-
slug: slug ?? (
|
|
9718
|
+
slug: slug ?? slugify(resolvedName, { lower: true, strict: true }),
|
|
9632
9719
|
type: "tool",
|
|
9633
9720
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions
|
|
9634
9721
|
parameters,
|
|
@@ -9652,9 +9739,9 @@ var ScorerBuilder = class {
|
|
|
9652
9739
|
resolvedName = opts.handler.name;
|
|
9653
9740
|
}
|
|
9654
9741
|
if (!resolvedName || resolvedName.trim().length === 0) {
|
|
9655
|
-
resolvedName = `Scorer ${
|
|
9742
|
+
resolvedName = `Scorer ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`;
|
|
9656
9743
|
}
|
|
9657
|
-
const slug = opts.slug ?? (
|
|
9744
|
+
const slug = opts.slug ?? slugify(resolvedName, { lower: true, strict: true });
|
|
9658
9745
|
if ("handler" in opts) {
|
|
9659
9746
|
const scorer = new CodeFunction(this.project, {
|
|
9660
9747
|
...opts,
|
|
@@ -9825,7 +9912,7 @@ var PromptBuilder = class {
|
|
|
9825
9912
|
rawTools.push(tool);
|
|
9826
9913
|
}
|
|
9827
9914
|
}
|
|
9828
|
-
const slug = opts.slug ?? (
|
|
9915
|
+
const slug = opts.slug ?? slugify(opts.name, { lower: true, strict: true });
|
|
9829
9916
|
const promptData = promptDefinitionToPromptData(opts, rawTools);
|
|
9830
9917
|
const promptRow = {
|
|
9831
9918
|
id: opts.id,
|
|
@@ -9950,8 +10037,11 @@ var EvalResultWithSummary = class {
|
|
|
9950
10037
|
this.summary = summary;
|
|
9951
10038
|
this.results = results;
|
|
9952
10039
|
}
|
|
10040
|
+
/**
|
|
10041
|
+
* @deprecated Use `summary` instead.
|
|
10042
|
+
*/
|
|
9953
10043
|
toString() {
|
|
9954
|
-
return
|
|
10044
|
+
return JSON.stringify(this.summary);
|
|
9955
10045
|
}
|
|
9956
10046
|
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
9957
10047
|
return `EvalResultWithSummary(summary="...", results=[...])`;
|
|
@@ -10030,7 +10120,7 @@ async function Eval(name, evaluator, reporterOrOpts) {
|
|
|
10030
10120
|
[]
|
|
10031
10121
|
);
|
|
10032
10122
|
}
|
|
10033
|
-
const progressReporter = options.progress ?? new
|
|
10123
|
+
const progressReporter = options.progress ?? new SimpleProgressReporter();
|
|
10034
10124
|
const shouldCollectResults = options.returnResults ?? true;
|
|
10035
10125
|
if (typeof options.reporter === "string") {
|
|
10036
10126
|
throw new Error(
|
|
@@ -10133,21 +10223,21 @@ function parseFilters(filters) {
|
|
|
10133
10223
|
if (equalsIdx === -1) {
|
|
10134
10224
|
throw new Error(`Invalid filter ${f}`);
|
|
10135
10225
|
}
|
|
10136
|
-
const [
|
|
10226
|
+
const [path8, value] = [f.slice(0, equalsIdx), f.slice(equalsIdx + 1)];
|
|
10137
10227
|
let deserializedValue = deserializePlainStringAsJSON2(value).value;
|
|
10138
10228
|
if (typeof deserializedValue !== "string") {
|
|
10139
10229
|
deserializedValue = value;
|
|
10140
10230
|
}
|
|
10141
10231
|
result.push({
|
|
10142
|
-
path:
|
|
10232
|
+
path: path8.split("."),
|
|
10143
10233
|
pattern: new RegExp(deserializedValue)
|
|
10144
10234
|
});
|
|
10145
10235
|
}
|
|
10146
10236
|
return result;
|
|
10147
10237
|
}
|
|
10148
10238
|
function evaluateFilter(object, filter2) {
|
|
10149
|
-
const { path:
|
|
10150
|
-
const key =
|
|
10239
|
+
const { path: path8, pattern } = filter2;
|
|
10240
|
+
const key = path8.reduce(
|
|
10151
10241
|
(acc, p) => typeof acc === "object" && acc !== null ? (
|
|
10152
10242
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
10153
10243
|
acc[p]
|
|
@@ -10517,7 +10607,7 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
10517
10607
|
} catch (e) {
|
|
10518
10608
|
q.kill();
|
|
10519
10609
|
if (e instanceof InternalAbortError) {
|
|
10520
|
-
if (
|
|
10610
|
+
if (isomorph_default.getEnv("BRAINTRUST_VERBOSE")) {
|
|
10521
10611
|
console.warn("Evaluator cancelled:", e.message);
|
|
10522
10612
|
}
|
|
10523
10613
|
}
|
|
@@ -10537,8 +10627,8 @@ async function runEvaluatorInternal(experiment, evaluator, progressReporter, fil
|
|
|
10537
10627
|
collectResults ? collectedResults : []
|
|
10538
10628
|
);
|
|
10539
10629
|
}
|
|
10540
|
-
var error =
|
|
10541
|
-
var warning =
|
|
10630
|
+
var error = (text) => `Error: ${text}`;
|
|
10631
|
+
var warning = (text) => `Warning: ${text}`;
|
|
10542
10632
|
function logError2(e, verbose) {
|
|
10543
10633
|
if (!verbose) {
|
|
10544
10634
|
console.error(`${e}`);
|
|
@@ -10587,11 +10677,7 @@ function reportFailures(evaluator, failingResults, { verbose, jsonl }) {
|
|
|
10587
10677
|
if (failingResults.length > 0) {
|
|
10588
10678
|
console.error(
|
|
10589
10679
|
warning(
|
|
10590
|
-
`Evaluator ${evaluator.evalName} failed with ${
|
|
10591
|
-
"error",
|
|
10592
|
-
failingResults.length,
|
|
10593
|
-
true
|
|
10594
|
-
)}. This evaluation ("${evaluator.evalName}") will not be fully logged.`
|
|
10680
|
+
`Evaluator ${evaluator.evalName} failed with ${failingResults.length} error${failingResults.length === 1 ? "" : "s"}. This evaluation ("${evaluator.evalName}") will not be fully logged.`
|
|
10595
10681
|
)
|
|
10596
10682
|
);
|
|
10597
10683
|
if (jsonl) {
|
|
@@ -10623,17 +10709,92 @@ var defaultReporter = {
|
|
|
10623
10709
|
if (failingResults.length > 0) {
|
|
10624
10710
|
reportFailures(evaluator, failingResults, { verbose, jsonl });
|
|
10625
10711
|
}
|
|
10626
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
10629
|
-
|
|
10712
|
+
if (jsonl) {
|
|
10713
|
+
isomorph_default.writeln(JSON.stringify(summary));
|
|
10714
|
+
} else {
|
|
10715
|
+
isomorph_default.writeln("Experiment summary");
|
|
10716
|
+
isomorph_default.writeln("==================");
|
|
10717
|
+
if (summary.comparisonExperimentName) {
|
|
10718
|
+
isomorph_default.writeln(
|
|
10719
|
+
`${summary.comparisonExperimentName} (baseline) <- ${summary.experimentName} (comparison)`
|
|
10720
|
+
);
|
|
10721
|
+
isomorph_default.writeln("");
|
|
10722
|
+
}
|
|
10723
|
+
const hasScores = Object.keys(summary.scores).length > 0;
|
|
10724
|
+
const hasMetrics = Object.keys(summary.metrics ?? {}).length > 0;
|
|
10725
|
+
const hasComparison = !!summary.comparisonExperimentName;
|
|
10726
|
+
if (hasScores || hasMetrics) {
|
|
10727
|
+
if (hasComparison) {
|
|
10728
|
+
isomorph_default.writeln(
|
|
10729
|
+
"Name Value Change Improvements Regressions"
|
|
10730
|
+
);
|
|
10731
|
+
isomorph_default.writeln(
|
|
10732
|
+
"----------------------------------------------------------------"
|
|
10733
|
+
);
|
|
10734
|
+
}
|
|
10735
|
+
for (const score of Object.values(summary.scores)) {
|
|
10736
|
+
const scorePercent = (score.score * 100).toFixed(2);
|
|
10737
|
+
const scoreValue = `${scorePercent}%`;
|
|
10738
|
+
if (hasComparison) {
|
|
10739
|
+
let diffString = "-";
|
|
10740
|
+
if (!isEmpty2(score.diff)) {
|
|
10741
|
+
const diffPercent = (score.diff * 100).toFixed(2);
|
|
10742
|
+
const diffSign = score.diff > 0 ? "+" : "";
|
|
10743
|
+
diffString = `${diffSign}${diffPercent}%`;
|
|
10744
|
+
}
|
|
10745
|
+
const improvements = score.improvements > 0 ? score.improvements.toString() : "-";
|
|
10746
|
+
const regressions = score.regressions > 0 ? score.regressions.toString() : "-";
|
|
10747
|
+
isomorph_default.writeln(
|
|
10748
|
+
`${score.name.padEnd(18)} ${scoreValue.padStart(10)} ${diffString.padStart(10)} ${improvements.padStart(12)} ${regressions.padStart(11)}`
|
|
10749
|
+
);
|
|
10750
|
+
} else {
|
|
10751
|
+
isomorph_default.writeln(`${score.name.padEnd(20)} ${scoreValue.padStart(15)}`);
|
|
10752
|
+
}
|
|
10753
|
+
}
|
|
10754
|
+
for (const metric of Object.values(summary.metrics ?? {})) {
|
|
10755
|
+
const fractionDigits = Number.isInteger(metric.metric) ? 0 : 2;
|
|
10756
|
+
const formattedValue = metric.metric.toFixed(fractionDigits);
|
|
10757
|
+
const metricValue = metric.unit === "$" ? `${metric.unit}${formattedValue}` : `${formattedValue}${metric.unit}`;
|
|
10758
|
+
if (hasComparison) {
|
|
10759
|
+
let diffString = "-";
|
|
10760
|
+
if (!isEmpty2(metric.diff)) {
|
|
10761
|
+
const diffPercent = (metric.diff * 100).toFixed(2);
|
|
10762
|
+
const diffSign = metric.diff > 0 ? "+" : "";
|
|
10763
|
+
diffString = `${diffSign}${diffPercent}%`;
|
|
10764
|
+
}
|
|
10765
|
+
const improvements = metric.improvements > 0 ? metric.improvements.toString() : "-";
|
|
10766
|
+
const regressions = metric.regressions > 0 ? metric.regressions.toString() : "-";
|
|
10767
|
+
isomorph_default.writeln(
|
|
10768
|
+
`${metric.name.padEnd(18)} ${metricValue.padStart(10)} ${diffString.padStart(10)} ${improvements.padStart(12)} ${regressions.padStart(11)}`
|
|
10769
|
+
);
|
|
10770
|
+
} else {
|
|
10771
|
+
isomorph_default.writeln(
|
|
10772
|
+
`${metric.name.padEnd(20)} ${metricValue.padStart(15)}`
|
|
10773
|
+
);
|
|
10774
|
+
}
|
|
10775
|
+
}
|
|
10776
|
+
}
|
|
10777
|
+
if (summary.experimentUrl) {
|
|
10778
|
+
isomorph_default.writeln("");
|
|
10779
|
+
isomorph_default.writeln(`View results for ${summary.experimentName}`);
|
|
10780
|
+
isomorph_default.writeln(`See results at ${summary.experimentUrl}`);
|
|
10781
|
+
}
|
|
10782
|
+
}
|
|
10783
|
+
isomorph_default.writeln("");
|
|
10630
10784
|
return failingResults.length === 0;
|
|
10631
10785
|
},
|
|
10632
10786
|
async reportRun(evalReports) {
|
|
10633
10787
|
return evalReports.every((r) => r);
|
|
10634
10788
|
}
|
|
10635
10789
|
};
|
|
10636
|
-
|
|
10790
|
+
|
|
10791
|
+
// src/cli/reporters/eval.ts
|
|
10792
|
+
var import_chalk2 = __toESM(require("chalk"));
|
|
10793
|
+
var import_termi_link = require("termi-link");
|
|
10794
|
+
var import_boxen = __toESM(require("boxen"));
|
|
10795
|
+
var import_cli_table3 = __toESM(require("cli-table3"));
|
|
10796
|
+
var import_pluralize = __toESM(require("pluralize"));
|
|
10797
|
+
function formatExperimentSummaryFancy(summary) {
|
|
10637
10798
|
let comparisonLine = "";
|
|
10638
10799
|
if (summary.comparisonExperimentName) {
|
|
10639
10800
|
comparisonLine = `${summary.comparisonExperimentName} ${import_chalk2.default.gray("(baseline)")} \u2190 ${summary.experimentName} ${import_chalk2.default.gray("(comparison)")}
|
|
@@ -10678,8 +10839,7 @@ function formatExperimentSummary(summary) {
|
|
|
10678
10839
|
wordWrap: false
|
|
10679
10840
|
});
|
|
10680
10841
|
const scoreValues = Object.values(summary.scores);
|
|
10681
|
-
for (
|
|
10682
|
-
const score = scoreValues[i];
|
|
10842
|
+
for (const score of scoreValues) {
|
|
10683
10843
|
const scorePercent = (score.score * 100).toFixed(2);
|
|
10684
10844
|
const scoreValue = import_chalk2.default.white(`${scorePercent}%`);
|
|
10685
10845
|
let diffString = "";
|
|
@@ -10700,8 +10860,7 @@ function formatExperimentSummary(summary) {
|
|
|
10700
10860
|
combinedTable.push(row);
|
|
10701
10861
|
}
|
|
10702
10862
|
const metricValues = Object.values(summary.metrics ?? {});
|
|
10703
|
-
for (
|
|
10704
|
-
const metric = metricValues[i];
|
|
10863
|
+
for (const metric of metricValues) {
|
|
10705
10864
|
const fractionDigits = Number.isInteger(metric.metric) ? 0 : 2;
|
|
10706
10865
|
const formattedValue = metric.metric.toFixed(fractionDigits);
|
|
10707
10866
|
const metricValue = import_chalk2.default.white(
|
|
@@ -10733,18 +10892,57 @@ function formatExperimentSummary(summary) {
|
|
|
10733
10892
|
{ fallback: () => `See results at ${summary.experimentUrl}` }
|
|
10734
10893
|
) : "";
|
|
10735
10894
|
const boxContent = [content, footer].filter(Boolean).join("\n\n");
|
|
10736
|
-
|
|
10737
|
-
|
|
10738
|
-
|
|
10739
|
-
|
|
10740
|
-
|
|
10741
|
-
|
|
10742
|
-
|
|
10895
|
+
try {
|
|
10896
|
+
return "\n" + (0, import_boxen.default)(boxContent, {
|
|
10897
|
+
title: import_chalk2.default.gray("Experiment summary"),
|
|
10898
|
+
titleAlignment: "left",
|
|
10899
|
+
padding: 0.5,
|
|
10900
|
+
borderColor: "gray",
|
|
10901
|
+
borderStyle: "round"
|
|
10902
|
+
});
|
|
10903
|
+
} catch (error2) {
|
|
10904
|
+
return "\n" + import_chalk2.default.gray("Experiment summary") + "\n" + boxContent + "\n";
|
|
10905
|
+
}
|
|
10743
10906
|
}
|
|
10907
|
+
var warning2 = import_chalk2.default.yellow;
|
|
10908
|
+
var fancyReporter = {
|
|
10909
|
+
name: "Braintrust fancy reporter",
|
|
10910
|
+
async reportEval(evaluator, result, { verbose, jsonl }) {
|
|
10911
|
+
const { results, summary } = result;
|
|
10912
|
+
const failingResults = results.filter(
|
|
10913
|
+
(r) => r.error !== void 0
|
|
10914
|
+
);
|
|
10915
|
+
if (failingResults.length > 0) {
|
|
10916
|
+
console.error(
|
|
10917
|
+
warning2(
|
|
10918
|
+
`Evaluator ${evaluator.evalName} failed with ${(0, import_pluralize.default)("error", failingResults.length, true)}. This evaluation ("${evaluator.evalName}") will not be fully logged.`
|
|
10919
|
+
)
|
|
10920
|
+
);
|
|
10921
|
+
if (jsonl) {
|
|
10922
|
+
for (const result2 of failingResults) {
|
|
10923
|
+
process.stdout.write(JSON.stringify(result2));
|
|
10924
|
+
process.stdout.write("\n");
|
|
10925
|
+
}
|
|
10926
|
+
} else if (verbose) {
|
|
10927
|
+
for (const result2 of failingResults) {
|
|
10928
|
+
console.error(result2);
|
|
10929
|
+
}
|
|
10930
|
+
}
|
|
10931
|
+
}
|
|
10932
|
+
process.stdout.write(
|
|
10933
|
+
jsonl ? JSON.stringify(summary) : formatExperimentSummaryFancy(summary)
|
|
10934
|
+
);
|
|
10935
|
+
process.stdout.write("\n");
|
|
10936
|
+
return failingResults.length === 0;
|
|
10937
|
+
},
|
|
10938
|
+
async reportRun(evalReports) {
|
|
10939
|
+
return evalReports.every((r) => r);
|
|
10940
|
+
}
|
|
10941
|
+
};
|
|
10744
10942
|
|
|
10745
10943
|
// src/node.ts
|
|
10746
10944
|
var import_node_async_hooks = require("async_hooks");
|
|
10747
|
-
var
|
|
10945
|
+
var path = __toESM(require("path"));
|
|
10748
10946
|
var fs = __toESM(require("fs/promises"));
|
|
10749
10947
|
var os = __toESM(require("os"));
|
|
10750
10948
|
var fsSync = __toESM(require("fs"));
|
|
@@ -10839,7 +11037,7 @@ async function getPastNAncestors(n = 1e3, remote = void 0) {
|
|
|
10839
11037
|
return [];
|
|
10840
11038
|
}
|
|
10841
11039
|
const commits = await git.log({ from: ancestor, to: "HEAD", maxCount: n });
|
|
10842
|
-
return commits.all.map((c) => c.hash);
|
|
11040
|
+
return commits.all.slice(0, n).map((c) => c.hash);
|
|
10843
11041
|
}
|
|
10844
11042
|
async function attempt(fn) {
|
|
10845
11043
|
try {
|
|
@@ -10965,7 +11163,7 @@ function getCallerLocation() {
|
|
|
10965
11163
|
}
|
|
10966
11164
|
|
|
10967
11165
|
// src/node.ts
|
|
10968
|
-
var
|
|
11166
|
+
var import_util9 = require("util");
|
|
10969
11167
|
var zlib = __toESM(require("zlib"));
|
|
10970
11168
|
function configureNode() {
|
|
10971
11169
|
isomorph_default.getRepoInfo = getRepoInfo;
|
|
@@ -10976,8 +11174,10 @@ function configureNode() {
|
|
|
10976
11174
|
isomorph_default.processOn = (event, handler) => {
|
|
10977
11175
|
process.on(event, handler);
|
|
10978
11176
|
};
|
|
10979
|
-
isomorph_default.
|
|
10980
|
-
isomorph_default.
|
|
11177
|
+
isomorph_default.basename = path.basename;
|
|
11178
|
+
isomorph_default.writeln = (text) => process.stdout.write(text + "\n");
|
|
11179
|
+
isomorph_default.pathJoin = path.join;
|
|
11180
|
+
isomorph_default.pathDirname = path.dirname;
|
|
10981
11181
|
isomorph_default.mkdir = fs.mkdir;
|
|
10982
11182
|
isomorph_default.writeFile = fs.writeFile;
|
|
10983
11183
|
isomorph_default.readFile = fs.readFile;
|
|
@@ -10987,45 +11187,45 @@ function configureNode() {
|
|
|
10987
11187
|
isomorph_default.utimes = fs.utimes;
|
|
10988
11188
|
isomorph_default.unlink = fs.unlink;
|
|
10989
11189
|
isomorph_default.homedir = os.homedir;
|
|
10990
|
-
isomorph_default.gzip = (0,
|
|
10991
|
-
isomorph_default.gunzip = (0,
|
|
11190
|
+
isomorph_default.gzip = (0, import_util9.promisify)(zlib.gzip);
|
|
11191
|
+
isomorph_default.gunzip = (0, import_util9.promisify)(zlib.gunzip);
|
|
10992
11192
|
isomorph_default.hash = (data) => crypto.createHash("sha256").update(data).digest("hex");
|
|
10993
11193
|
_internalSetInitialState();
|
|
10994
11194
|
}
|
|
10995
11195
|
|
|
10996
|
-
// src/cli.ts
|
|
11196
|
+
// src/cli/index.ts
|
|
10997
11197
|
var import_env2 = require("@next/env");
|
|
10998
11198
|
|
|
10999
|
-
// src/functions/upload.ts
|
|
11199
|
+
// src/cli/functions/upload.ts
|
|
11000
11200
|
var import_fs = __toESM(require("fs"));
|
|
11001
|
-
var
|
|
11201
|
+
var import_path3 = __toESM(require("path"));
|
|
11002
11202
|
var import_zlib = require("zlib");
|
|
11003
11203
|
var import_v311 = require("zod/v3");
|
|
11004
11204
|
|
|
11005
|
-
// src/functions/infer-source.ts
|
|
11205
|
+
// src/cli/functions/infer-source.ts
|
|
11006
11206
|
var import_source_map = require("source-map");
|
|
11007
11207
|
var fs2 = __toESM(require("fs/promises"));
|
|
11008
11208
|
|
|
11009
|
-
// src/jest/nodeModulesPaths.ts
|
|
11010
|
-
var
|
|
11209
|
+
// src/cli/jest/nodeModulesPaths.ts
|
|
11210
|
+
var path2 = __toESM(require("path"));
|
|
11011
11211
|
|
|
11012
|
-
// src/jest/tryRealpath.ts
|
|
11212
|
+
// src/cli/jest/tryRealpath.ts
|
|
11013
11213
|
var import_graceful_fs = require("graceful-fs");
|
|
11014
|
-
function tryRealpath(
|
|
11214
|
+
function tryRealpath(path8) {
|
|
11015
11215
|
try {
|
|
11016
|
-
|
|
11216
|
+
path8 = import_graceful_fs.realpathSync.native(path8);
|
|
11017
11217
|
} catch (error2) {
|
|
11018
11218
|
if (error2.code !== "ENOENT" && error2.code !== "EISDIR") {
|
|
11019
11219
|
throw error2;
|
|
11020
11220
|
}
|
|
11021
11221
|
}
|
|
11022
|
-
return
|
|
11222
|
+
return path8;
|
|
11023
11223
|
}
|
|
11024
11224
|
|
|
11025
|
-
// src/jest/nodeModulesPaths.ts
|
|
11225
|
+
// src/cli/jest/nodeModulesPaths.ts
|
|
11026
11226
|
function nodeModulesPaths(basedir, options) {
|
|
11027
11227
|
const modules = options && options.moduleDirectory ? Array.from(options.moduleDirectory) : ["node_modules"];
|
|
11028
|
-
const basedirAbs =
|
|
11228
|
+
const basedirAbs = path2.resolve(basedir);
|
|
11029
11229
|
let prefix = "/";
|
|
11030
11230
|
if (/^([A-Za-z]:)/.test(basedirAbs)) {
|
|
11031
11231
|
prefix = "";
|
|
@@ -11039,19 +11239,19 @@ function nodeModulesPaths(basedir, options) {
|
|
|
11039
11239
|
physicalBasedir = basedirAbs;
|
|
11040
11240
|
}
|
|
11041
11241
|
const paths = [physicalBasedir];
|
|
11042
|
-
let parsed =
|
|
11242
|
+
let parsed = path2.parse(physicalBasedir);
|
|
11043
11243
|
while (parsed.dir !== paths[paths.length - 1]) {
|
|
11044
11244
|
paths.push(parsed.dir);
|
|
11045
|
-
parsed =
|
|
11245
|
+
parsed = path2.parse(parsed.dir);
|
|
11046
11246
|
}
|
|
11047
11247
|
const dirs = paths.reduce((dirs2, aPath) => {
|
|
11048
11248
|
for (const moduleDir of modules) {
|
|
11049
|
-
if (
|
|
11249
|
+
if (path2.isAbsolute(moduleDir)) {
|
|
11050
11250
|
if (aPath === basedirAbs && moduleDir) {
|
|
11051
11251
|
dirs2.push(moduleDir);
|
|
11052
11252
|
}
|
|
11053
11253
|
} else {
|
|
11054
|
-
dirs2.push(
|
|
11254
|
+
dirs2.push(path2.join(prefix, aPath, moduleDir));
|
|
11055
11255
|
}
|
|
11056
11256
|
}
|
|
11057
11257
|
return dirs2;
|
|
@@ -11062,8 +11262,8 @@ function nodeModulesPaths(basedir, options) {
|
|
|
11062
11262
|
return dirs;
|
|
11063
11263
|
}
|
|
11064
11264
|
function findGlobalPaths() {
|
|
11065
|
-
const { root } =
|
|
11066
|
-
const globalPath =
|
|
11265
|
+
const { root } = path2.parse(process.cwd());
|
|
11266
|
+
const globalPath = path2.join(root, "node_modules");
|
|
11067
11267
|
const resolvePaths = require.resolve.paths("/");
|
|
11068
11268
|
if (resolvePaths) {
|
|
11069
11269
|
const rootIndex = resolvePaths.indexOf(globalPath);
|
|
@@ -11073,12 +11273,12 @@ function findGlobalPaths() {
|
|
|
11073
11273
|
}
|
|
11074
11274
|
var GlobalPaths = findGlobalPaths();
|
|
11075
11275
|
|
|
11076
|
-
// src/functions/load-module.ts
|
|
11077
|
-
var
|
|
11276
|
+
// src/cli/functions/load-module.ts
|
|
11277
|
+
var import_path = __toESM(require("path"));
|
|
11078
11278
|
function evalWithModuleContext(inFile, evalFn) {
|
|
11079
11279
|
const modulePaths = [...module.paths];
|
|
11080
11280
|
try {
|
|
11081
|
-
module.paths = nodeModulesPaths(
|
|
11281
|
+
module.paths = nodeModulesPaths(import_path.default.dirname(inFile), {});
|
|
11082
11282
|
return evalFn();
|
|
11083
11283
|
} finally {
|
|
11084
11284
|
module.paths = modulePaths;
|
|
@@ -11098,7 +11298,7 @@ function loadModule({
|
|
|
11098
11298
|
globalThis._lazy_load = true;
|
|
11099
11299
|
globalThis.__inherited_braintrust_state = _internalGetGlobalState();
|
|
11100
11300
|
const __filename2 = inFile;
|
|
11101
|
-
const __dirname = (0,
|
|
11301
|
+
const __dirname = (0, import_path.dirname)(__filename2);
|
|
11102
11302
|
new Function("require", "module", "__filename", "__dirname", moduleText)(
|
|
11103
11303
|
require,
|
|
11104
11304
|
module,
|
|
@@ -11109,8 +11309,8 @@ function loadModule({
|
|
|
11109
11309
|
});
|
|
11110
11310
|
}
|
|
11111
11311
|
|
|
11112
|
-
// src/functions/infer-source.ts
|
|
11113
|
-
var
|
|
11312
|
+
// src/cli/functions/infer-source.ts
|
|
11313
|
+
var import_path2 = __toESM(require("path"));
|
|
11114
11314
|
async function makeSourceMapContext({
|
|
11115
11315
|
inFile,
|
|
11116
11316
|
outFile,
|
|
@@ -11129,7 +11329,7 @@ async function makeSourceMapContext({
|
|
|
11129
11329
|
inFiles: { [inFile]: inFileContents.split("\n") },
|
|
11130
11330
|
outFileModule: loadModule({ inFile, moduleText: outFileContents }),
|
|
11131
11331
|
outFileLines: outFileContents.split("\n"),
|
|
11132
|
-
sourceMapDir:
|
|
11332
|
+
sourceMapDir: import_path2.default.dirname(sourceMapFile),
|
|
11133
11333
|
sourceMap
|
|
11134
11334
|
};
|
|
11135
11335
|
}
|
|
@@ -11200,7 +11400,7 @@ async function findCodeDefinition({
|
|
|
11200
11400
|
return void 0;
|
|
11201
11401
|
}
|
|
11202
11402
|
if (!inFiles[originalPosition.source]) {
|
|
11203
|
-
const originalFile =
|
|
11403
|
+
const originalFile = import_path2.default.join(sourceMapDir, originalPosition.source);
|
|
11204
11404
|
inFiles[originalPosition.source] = (await fs2.readFile(originalFile, "utf-8")).split("\n");
|
|
11205
11405
|
}
|
|
11206
11406
|
const originalLines = inFiles[originalPosition.source];
|
|
@@ -11256,8 +11456,7 @@ async function getTsModule() {
|
|
|
11256
11456
|
return tsModule;
|
|
11257
11457
|
}
|
|
11258
11458
|
|
|
11259
|
-
// src/functions/upload.ts
|
|
11260
|
-
var import_slugify2 = __toESM(require("slugify"));
|
|
11459
|
+
// src/cli/functions/upload.ts
|
|
11261
11460
|
var import_zod_to_json_schema = require("zod-to-json-schema");
|
|
11262
11461
|
var import_pluralize2 = __toESM(require("pluralize"));
|
|
11263
11462
|
var pathInfoSchema = import_v311.z.strictObject({
|
|
@@ -11441,7 +11640,7 @@ async function uploadBundles({
|
|
|
11441
11640
|
if (isEmpty2(bundleFileName)) {
|
|
11442
11641
|
throw new Error("No bundle file found");
|
|
11443
11642
|
}
|
|
11444
|
-
const bundleFile =
|
|
11643
|
+
const bundleFile = import_path3.default.resolve(bundleFileName);
|
|
11445
11644
|
const uploadPromise = (async () => {
|
|
11446
11645
|
if (!pathInfo) {
|
|
11447
11646
|
return true;
|
|
@@ -11532,11 +11731,11 @@ function formatNameAndSlug(pieces) {
|
|
|
11532
11731
|
const nonEmptyPieces = pieces.filter((piece) => piece.trim() !== "");
|
|
11533
11732
|
return {
|
|
11534
11733
|
name: capitalize(nonEmptyPieces.join(" ")),
|
|
11535
|
-
slug: (
|
|
11734
|
+
slug: slugify(nonEmptyPieces.join("-"))
|
|
11536
11735
|
};
|
|
11537
11736
|
}
|
|
11538
11737
|
|
|
11539
|
-
// src/cli
|
|
11738
|
+
// src/cli/util/bundle.ts
|
|
11540
11739
|
var import_env = require("@next/env");
|
|
11541
11740
|
var dotenv = __toESM(require("dotenv"));
|
|
11542
11741
|
async function loadCLIEnv(args) {
|
|
@@ -11603,12 +11802,11 @@ async function bundleCommand(args) {
|
|
|
11603
11802
|
}
|
|
11604
11803
|
}
|
|
11605
11804
|
|
|
11606
|
-
// src/cli
|
|
11805
|
+
// src/cli/util/pull.ts
|
|
11607
11806
|
var import_v312 = require("zod/v3");
|
|
11608
11807
|
var import_promises = __toESM(require("fs/promises"));
|
|
11609
|
-
var
|
|
11610
|
-
var
|
|
11611
|
-
var import_path5 = __toESM(require("path"));
|
|
11808
|
+
var import_util12 = __toESM(require("util"));
|
|
11809
|
+
var import_path4 = __toESM(require("path"));
|
|
11612
11810
|
var import_pluralize3 = __toESM(require("pluralize"));
|
|
11613
11811
|
async function pullCommand(args) {
|
|
11614
11812
|
await loadCLIEnv(args);
|
|
@@ -11650,15 +11848,15 @@ async function pullCommand(args) {
|
|
|
11650
11848
|
const repoRoot = await git?.revparse(["--show-toplevel"]);
|
|
11651
11849
|
const dirtyFiles = new Set(
|
|
11652
11850
|
(diffSummary?.files ?? []).map(
|
|
11653
|
-
(f) =>
|
|
11851
|
+
(f) => import_path4.default.resolve(repoRoot ?? ".", f.file)
|
|
11654
11852
|
)
|
|
11655
11853
|
);
|
|
11656
11854
|
for (const projectName of Object.keys(projectNameToFunctions)) {
|
|
11657
|
-
const projectFile =
|
|
11855
|
+
const projectFile = import_path4.default.join(
|
|
11658
11856
|
outputDir,
|
|
11659
|
-
`${(
|
|
11857
|
+
`${slugify(projectName, { lower: true, strict: true, trim: true })}.ts`
|
|
11660
11858
|
);
|
|
11661
|
-
const resolvedProjectFile =
|
|
11859
|
+
const resolvedProjectFile = import_path4.default.resolve(projectFile);
|
|
11662
11860
|
const fileExists = await import_promises.default.stat(projectFile).then(
|
|
11663
11861
|
() => true,
|
|
11664
11862
|
() => false
|
|
@@ -11878,7 +12076,7 @@ function safeStringify(obj) {
|
|
|
11878
12076
|
return JSON.stringify(obj, null, 2);
|
|
11879
12077
|
} catch (error2) {
|
|
11880
12078
|
try {
|
|
11881
|
-
return
|
|
12079
|
+
return import_util12.default.inspect(obj, {
|
|
11882
12080
|
depth: 5,
|
|
11883
12081
|
maxStringLength: 1e3,
|
|
11884
12082
|
breakLength: 80,
|
|
@@ -12426,7 +12624,7 @@ function makeEvalParametersSchema(parameters) {
|
|
|
12426
12624
|
);
|
|
12427
12625
|
}
|
|
12428
12626
|
|
|
12429
|
-
// src/cli
|
|
12627
|
+
// src/cli/util/external-packages-plugin.ts
|
|
12430
12628
|
function createMarkKnownPackagesExternalPlugin(additionalPackages = []) {
|
|
12431
12629
|
return {
|
|
12432
12630
|
name: "make-known-packages-external",
|
|
@@ -12458,7 +12656,7 @@ function createMarkKnownPackagesExternalPlugin(additionalPackages = []) {
|
|
|
12458
12656
|
};
|
|
12459
12657
|
}
|
|
12460
12658
|
|
|
12461
|
-
// src/cli.ts
|
|
12659
|
+
// src/cli/index.ts
|
|
12462
12660
|
var { version } = require_package();
|
|
12463
12661
|
var INCLUDE_EVAL = [
|
|
12464
12662
|
"**/*.eval.ts",
|
|
@@ -12512,7 +12710,7 @@ function resolveReporter(reporter, reporters) {
|
|
|
12512
12710
|
} else if (!isEmpty2(reporter)) {
|
|
12513
12711
|
return reporter;
|
|
12514
12712
|
} else if (Object.keys(reporters).length === 0) {
|
|
12515
|
-
return
|
|
12713
|
+
return fancyReporter;
|
|
12516
12714
|
} else if (Object.keys(reporters).length === 1) {
|
|
12517
12715
|
return reporters[Object.keys(reporters)[0]];
|
|
12518
12716
|
} else {
|
|
@@ -12719,7 +12917,7 @@ function updateEvaluators(evaluators, buildResults, opts) {
|
|
|
12719
12917
|
)) {
|
|
12720
12918
|
if (evaluators.reporters[reporterName] && evaluators.reporters[reporterName] !== reporter) {
|
|
12721
12919
|
console.warn(
|
|
12722
|
-
|
|
12920
|
+
warning2(
|
|
12723
12921
|
`Reporter '${reporterName}' already exists. Will skip '${reporterName}' from ${result.sourceFile}.`
|
|
12724
12922
|
)
|
|
12725
12923
|
);
|
|
@@ -12851,7 +13049,7 @@ async function runOnce(handles, opts) {
|
|
|
12851
13049
|
return allSuccess;
|
|
12852
13050
|
}
|
|
12853
13051
|
function checkMatch(pathInput, include_patterns, exclude_patterns) {
|
|
12854
|
-
const p =
|
|
13052
|
+
const p = import_path5.default.resolve(pathInput);
|
|
12855
13053
|
if (include_patterns !== null) {
|
|
12856
13054
|
let include = false;
|
|
12857
13055
|
for (const pattern of include_patterns) {
|
|
@@ -12893,14 +13091,14 @@ async function collectFiles(inputPath, mode) {
|
|
|
12893
13091
|
)) {
|
|
12894
13092
|
const prefix = mode === "eval" ? ".eval" : "";
|
|
12895
13093
|
console.warn(
|
|
12896
|
-
|
|
13094
|
+
warning2(
|
|
12897
13095
|
`Reading ${inputPath} because it was specified directly. Rename it to end in ${prefix}.ts or .${prefix}.js to include it automatically when you specify a directory.`
|
|
12898
13096
|
)
|
|
12899
13097
|
);
|
|
12900
13098
|
}
|
|
12901
13099
|
files.push(inputPath);
|
|
12902
13100
|
} else {
|
|
12903
|
-
const walked = await
|
|
13101
|
+
const walked = await import_util15.default.promisify(fsWalk.walk)(inputPath, {
|
|
12904
13102
|
deepFilter: (entry) => {
|
|
12905
13103
|
return checkMatch(entry.path, null, EXCLUDE);
|
|
12906
13104
|
},
|
|
@@ -12935,8 +13133,8 @@ var nativeNodeModulesPlugin = {
|
|
|
12935
13133
|
};
|
|
12936
13134
|
build2.onResolve({ filter: /\.node$/ }, (args) => {
|
|
12937
13135
|
try {
|
|
12938
|
-
const
|
|
12939
|
-
const match =
|
|
13136
|
+
const path8 = require.resolve(args.path, { paths: [args.resolveDir] });
|
|
13137
|
+
const match = path8.match(
|
|
12940
13138
|
/node_modules[/\\]((?:@[^/\\]+[/\\])?[^/\\]+)/
|
|
12941
13139
|
);
|
|
12942
13140
|
if (match) {
|
|
@@ -13006,30 +13204,30 @@ async function initializeHandles({
|
|
|
13006
13204
|
const newFiles = await collectFiles(inputPath, mode);
|
|
13007
13205
|
if (newFiles.length == 0) {
|
|
13008
13206
|
console.warn(
|
|
13009
|
-
|
|
13207
|
+
warning2(
|
|
13010
13208
|
`Provided path ${inputPath} is not an eval file or a directory containing eval files, skipping...`
|
|
13011
13209
|
)
|
|
13012
13210
|
);
|
|
13013
13211
|
}
|
|
13014
13212
|
for (const file of newFiles) {
|
|
13015
|
-
files[
|
|
13213
|
+
files[import_path5.default.resolve(file)] = true;
|
|
13016
13214
|
}
|
|
13017
13215
|
}
|
|
13018
13216
|
if (Object.keys(files).length == 0) {
|
|
13019
13217
|
console.warn(
|
|
13020
|
-
|
|
13218
|
+
warning2("No eval files were found in any of the provided paths.")
|
|
13021
13219
|
);
|
|
13022
13220
|
process.exit(0);
|
|
13023
13221
|
}
|
|
13024
|
-
const tmpDir =
|
|
13222
|
+
const tmpDir = import_path5.default.join(import_os.default.tmpdir(), `btevals-${(0, import_uuid3.v4)().slice(0, 8)}`);
|
|
13025
13223
|
const initPromises = [];
|
|
13026
13224
|
for (const file of Object.keys(files)) {
|
|
13027
|
-
const baseName = `${
|
|
13225
|
+
const baseName = `${import_path5.default.basename(
|
|
13028
13226
|
file,
|
|
13029
|
-
|
|
13227
|
+
import_path5.default.extname(file)
|
|
13030
13228
|
)}-${(0, import_uuid3.v4)().slice(0, 8)}`;
|
|
13031
|
-
const outFile =
|
|
13032
|
-
const bundleFile =
|
|
13229
|
+
const outFile = import_path5.default.join(tmpDir, `${baseName}.${OUT_EXT}`);
|
|
13230
|
+
const bundleFile = import_path5.default.join(tmpDir, `${baseName}.bundle.js`);
|
|
13033
13231
|
initPromises.push(
|
|
13034
13232
|
initFile({
|
|
13035
13233
|
inFile: file,
|