bitfab 0.39.0 → 0.41.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/dist/{chunk-B4EJ2EQT.js → chunk-7NLXU444.js} +162 -13
- package/dist/chunk-7NLXU444.js.map +1 -0
- package/dist/{chunk-7OKE7FGZ.js → chunk-7VQJ2ABI.js} +2 -2
- package/dist/{chunk-3JIPWENI.js → chunk-RF55DQIZ.js} +10 -3
- package/dist/{chunk-3JIPWENI.js.map → chunk-RF55DQIZ.js.map} +1 -1
- package/dist/{chunk-OXE6M7CZ.js → chunk-T3JPGYBQ.js} +10 -3
- package/dist/{chunk-OXE6M7CZ.js.map → chunk-T3JPGYBQ.js.map} +1 -1
- package/dist/{http-RMF7T3LG.js → http-DOTAISBC.js} +2 -2
- package/dist/{http-ALSBGWPS.js → http-DXZSUEUK.js} +2 -2
- package/dist/index.cjs +167 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +148 -3
- package/dist/index.d.ts +148 -3
- package/dist/index.js +5 -3
- package/dist/node.cjs +167 -10
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +5 -3
- package/dist/node.js.map +1 -1
- package/dist/{replay-6VF5AG2X.js → replay-WSPGQ2BI.js} +3 -3
- package/dist/replayCli.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-B4EJ2EQT.js.map +0 -1
- /package/dist/{chunk-7OKE7FGZ.js.map → chunk-7VQJ2ABI.js.map} +0 -0
- /package/dist/{http-ALSBGWPS.js.map → http-DOTAISBC.js.map} +0 -0
- /package/dist/{http-RMF7T3LG.js.map → http-DXZSUEUK.js.map} +0 -0
- /package/dist/{replay-6VF5AG2X.js.map → replay-WSPGQ2BI.js.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-T3JPGYBQ.js";
|
|
10
10
|
import "./chunk-H6LZRFMN.js";
|
|
11
11
|
export {
|
|
12
12
|
BitfabError,
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
parseRetryAfterMs,
|
|
18
18
|
serializePayloadBody
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=http-
|
|
20
|
+
//# sourceMappingURL=http-DOTAISBC.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RF55DQIZ.js";
|
|
10
10
|
export {
|
|
11
11
|
BitfabError,
|
|
12
12
|
HttpClient,
|
|
@@ -16,4 +16,4 @@ export {
|
|
|
16
16
|
parseRetryAfterMs,
|
|
17
17
|
serializePayloadBody
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=http-
|
|
19
|
+
//# sourceMappingURL=http-DXZSUEUK.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -51,7 +51,7 @@ var __version__, __packageName__;
|
|
|
51
51
|
var init_version_generated = __esm({
|
|
52
52
|
"src/version.generated.ts"() {
|
|
53
53
|
"use strict";
|
|
54
|
-
__version__ = "0.
|
|
54
|
+
__version__ = "0.41.0";
|
|
55
55
|
__packageName__ = "bitfab";
|
|
56
56
|
}
|
|
57
57
|
});
|
|
@@ -1741,6 +1741,10 @@ var init_http = __esm({
|
|
|
1741
1741
|
const response = await this.get(endpoint);
|
|
1742
1742
|
return response.span;
|
|
1743
1743
|
}
|
|
1744
|
+
/**
|
|
1745
|
+
* GET a JSON endpoint on the service with the client's API key. Throws a
|
|
1746
|
+
* `BitfabError` carrying the status text for any non-2xx response.
|
|
1747
|
+
*/
|
|
1744
1748
|
async get(endpoint) {
|
|
1745
1749
|
const url = `${this.serviceUrl}${endpoint}`;
|
|
1746
1750
|
const controller = new AbortController();
|
|
@@ -1754,7 +1758,10 @@ var init_http = __esm({
|
|
|
1754
1758
|
if (!response.ok) {
|
|
1755
1759
|
const errorText = await response.text();
|
|
1756
1760
|
throw new BitfabError(
|
|
1757
|
-
`HTTP ${response.status}: ${errorText.slice(0, 500)}
|
|
1761
|
+
`HTTP ${response.status}: ${errorText.slice(0, 500)}`,
|
|
1762
|
+
void 0,
|
|
1763
|
+
response.status,
|
|
1764
|
+
parseRetryAfterMs(readHeader(response, "retry-after"))
|
|
1758
1765
|
);
|
|
1759
1766
|
}
|
|
1760
1767
|
return await response.json();
|
|
@@ -3206,6 +3213,7 @@ __export(index_exports, {
|
|
|
3206
3213
|
BitfabOpenAITracingProcessor: () => BitfabOpenAITracingProcessor,
|
|
3207
3214
|
BitfabVercelAiHandler: () => BitfabVercelAiHandler,
|
|
3208
3215
|
DEFAULT_SERVICE_URL: () => DEFAULT_SERVICE_URL,
|
|
3216
|
+
DatasetsClient: () => DatasetsClient,
|
|
3209
3217
|
DbBranchReplayError: () => DbBranchReplayError,
|
|
3210
3218
|
HttpClient: () => HttpClient,
|
|
3211
3219
|
NO_MOCK_OVERRIDE: () => NO_MOCK_OVERRIDE,
|
|
@@ -3524,8 +3532,7 @@ var BitfabClaudeAgentHandler = class {
|
|
|
3524
3532
|
const externalTrace = {
|
|
3525
3533
|
id: traceId,
|
|
3526
3534
|
started_at: this.traceStartedAt ?? nowIso(),
|
|
3527
|
-
ended_at: endedAt ?? nowIso()
|
|
3528
|
-
workflow_name: this.traceFunctionKey
|
|
3535
|
+
ended_at: endedAt ?? nowIso()
|
|
3529
3536
|
};
|
|
3530
3537
|
if (metadata) {
|
|
3531
3538
|
externalTrace.metadata = metadata;
|
|
@@ -4285,6 +4292,131 @@ async function runFunctionWithBaml(bamlSource, inputs, providers, envVars) {
|
|
|
4285
4292
|
// src/client.ts
|
|
4286
4293
|
init_constants();
|
|
4287
4294
|
|
|
4295
|
+
// src/datasets.ts
|
|
4296
|
+
var DEFAULT_RERUN_TIMEOUT_MS = 9e4;
|
|
4297
|
+
var DEFAULT_RERUN_POLL_INTERVAL_MS = 1e3;
|
|
4298
|
+
var TERMINAL_RERUN_STATUSES = /* @__PURE__ */ new Set([
|
|
4299
|
+
"completed",
|
|
4300
|
+
"errored"
|
|
4301
|
+
]);
|
|
4302
|
+
function sleep(ms) {
|
|
4303
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
4304
|
+
}
|
|
4305
|
+
function datasetPath(datasetId, suffix = "") {
|
|
4306
|
+
return `/api/sdk/datasets/${encodeURIComponent(datasetId)}${suffix}`;
|
|
4307
|
+
}
|
|
4308
|
+
var DatasetsClient = class {
|
|
4309
|
+
constructor(httpClient) {
|
|
4310
|
+
this.httpClient = httpClient;
|
|
4311
|
+
}
|
|
4312
|
+
/**
|
|
4313
|
+
* Create a dataset, or update the one already named this way under the same
|
|
4314
|
+
* trace function. `created` reports which happened. An omitted description
|
|
4315
|
+
* leaves an existing one untouched.
|
|
4316
|
+
*/
|
|
4317
|
+
async save(params) {
|
|
4318
|
+
return this.httpClient.request("/api/sdk/datasets", {
|
|
4319
|
+
traceFunctionKey: params.traceFunctionKey,
|
|
4320
|
+
name: params.name,
|
|
4321
|
+
...params.description === void 0 ? {} : { description: params.description }
|
|
4322
|
+
});
|
|
4323
|
+
}
|
|
4324
|
+
/**
|
|
4325
|
+
* List datasets, scoped to one trace function when `traceFunctionKey` is
|
|
4326
|
+
* given and organization-wide otherwise.
|
|
4327
|
+
*/
|
|
4328
|
+
async list(params = {}) {
|
|
4329
|
+
const query = params.traceFunctionKey === void 0 ? "" : `?traceFunctionKey=${encodeURIComponent(params.traceFunctionKey)}`;
|
|
4330
|
+
const response = await this.httpClient.get(
|
|
4331
|
+
`/api/sdk/datasets${query}`
|
|
4332
|
+
);
|
|
4333
|
+
return response.datasets;
|
|
4334
|
+
}
|
|
4335
|
+
/** Fetch one dataset by id. Rejects with a 404 `BitfabError` when it is not in this organization. */
|
|
4336
|
+
async get(datasetId) {
|
|
4337
|
+
const response = await this.httpClient.get(
|
|
4338
|
+
datasetPath(datasetId)
|
|
4339
|
+
);
|
|
4340
|
+
return response.dataset;
|
|
4341
|
+
}
|
|
4342
|
+
/** The ids of every trace in the dataset, the same membership a replay with `datasetId` selects. */
|
|
4343
|
+
async listTraces(datasetId) {
|
|
4344
|
+
return this.httpClient.get(
|
|
4345
|
+
datasetPath(datasetId, "/traces")
|
|
4346
|
+
);
|
|
4347
|
+
}
|
|
4348
|
+
/**
|
|
4349
|
+
* Add traces to the dataset (1 to 100 ids per call). Traces outside the
|
|
4350
|
+
* organization or under another trace function are reported in
|
|
4351
|
+
* `skippedTraceIds` rather than failing the call.
|
|
4352
|
+
*/
|
|
4353
|
+
async addTraces(datasetId, traceIds) {
|
|
4354
|
+
return this.httpClient.request(
|
|
4355
|
+
datasetPath(datasetId, "/traces"),
|
|
4356
|
+
{ traceIds }
|
|
4357
|
+
);
|
|
4358
|
+
}
|
|
4359
|
+
/** Remove traces from the dataset. The traces themselves are never deleted. */
|
|
4360
|
+
async removeTraces(datasetId, traceIds) {
|
|
4361
|
+
return this.httpClient.request(
|
|
4362
|
+
datasetPath(datasetId, "/removeTraces"),
|
|
4363
|
+
{ traceIds }
|
|
4364
|
+
);
|
|
4365
|
+
}
|
|
4366
|
+
/**
|
|
4367
|
+
* Assign graders to the dataset (1 to 100 ids per call). Graders outside the
|
|
4368
|
+
* organization or under another trace function are reported in
|
|
4369
|
+
* `skippedGraderIds` rather than failing the call.
|
|
4370
|
+
*/
|
|
4371
|
+
async addGraders(datasetId, graderIds) {
|
|
4372
|
+
return this.httpClient.request(
|
|
4373
|
+
datasetPath(datasetId, "/graders"),
|
|
4374
|
+
{ graderIds }
|
|
4375
|
+
);
|
|
4376
|
+
}
|
|
4377
|
+
/** Unassign graders from the dataset. */
|
|
4378
|
+
async removeGraders(datasetId, graderIds) {
|
|
4379
|
+
return this.httpClient.request(
|
|
4380
|
+
datasetPath(datasetId, "/removeGraders"),
|
|
4381
|
+
{ graderIds }
|
|
4382
|
+
);
|
|
4383
|
+
}
|
|
4384
|
+
/**
|
|
4385
|
+
* Re-run graders over every trace in the dataset. Defaults to every assigned
|
|
4386
|
+
* grader; an unassigned id is rejected. Waits for the run to finish (up to
|
|
4387
|
+
* `timeoutMs`, default 90s) unless `wait` is `false`, and returns the last
|
|
4388
|
+
* run state seen either way. A request matching an in-flight run joins it.
|
|
4389
|
+
*/
|
|
4390
|
+
async rerunGraders(datasetId, options = {}) {
|
|
4391
|
+
const started = await this.httpClient.request(
|
|
4392
|
+
datasetPath(datasetId, "/rerunGraders"),
|
|
4393
|
+
options.graderIds === void 0 ? {} : { graderIds: options.graderIds }
|
|
4394
|
+
);
|
|
4395
|
+
if (options.wait === false) {
|
|
4396
|
+
return started;
|
|
4397
|
+
}
|
|
4398
|
+
const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_RERUN_TIMEOUT_MS);
|
|
4399
|
+
const interval = options.pollIntervalMs ?? DEFAULT_RERUN_POLL_INTERVAL_MS;
|
|
4400
|
+
let run = started.run;
|
|
4401
|
+
while (!TERMINAL_RERUN_STATUSES.has(run.status) && Date.now() < deadline) {
|
|
4402
|
+
await sleep(interval);
|
|
4403
|
+
run = await this.getGraderRerun(datasetId, run.id) ?? run;
|
|
4404
|
+
}
|
|
4405
|
+
return { run, joinedExisting: started.joinedExisting };
|
|
4406
|
+
}
|
|
4407
|
+
/**
|
|
4408
|
+
* The dataset's active grader re-run, or the run named by `runId`. Returns
|
|
4409
|
+
* `null` when nothing is active or the run does not belong to this dataset.
|
|
4410
|
+
*/
|
|
4411
|
+
async getGraderRerun(datasetId, runId) {
|
|
4412
|
+
const query = runId === void 0 ? "" : `?runId=${encodeURIComponent(runId)}`;
|
|
4413
|
+
const response = await this.httpClient.get(
|
|
4414
|
+
datasetPath(datasetId, `/rerunGraders${query}`)
|
|
4415
|
+
);
|
|
4416
|
+
return response.run;
|
|
4417
|
+
}
|
|
4418
|
+
};
|
|
4419
|
+
|
|
4288
4420
|
// src/dbSnapshot.ts
|
|
4289
4421
|
init_errors();
|
|
4290
4422
|
var SUPPORTED_PROVIDERS = ["neon"];
|
|
@@ -4694,8 +4826,7 @@ var BitfabLangGraphCallbackHandler = class {
|
|
|
4694
4826
|
externalTrace: {
|
|
4695
4827
|
id: rootSpan.traceId,
|
|
4696
4828
|
started_at: rootSpan.startedAt,
|
|
4697
|
-
ended_at: rootSpan.endedAt ?? nowIso2()
|
|
4698
|
-
workflow_name: this.traceFunctionKey
|
|
4829
|
+
ended_at: rootSpan.endedAt ?? nowIso2()
|
|
4699
4830
|
},
|
|
4700
4831
|
completed
|
|
4701
4832
|
};
|
|
@@ -4713,8 +4844,7 @@ var BitfabLangGraphCallbackHandler = class {
|
|
|
4713
4844
|
traceFunctionKey: this.traceFunctionKey,
|
|
4714
4845
|
externalTrace: {
|
|
4715
4846
|
id: rootSpan.traceId,
|
|
4716
|
-
started_at: rootSpan.startedAt
|
|
4717
|
-
workflow_name: this.traceFunctionKey
|
|
4847
|
+
started_at: rootSpan.startedAt
|
|
4718
4848
|
},
|
|
4719
4849
|
completed: false
|
|
4720
4850
|
};
|
|
@@ -5872,6 +6002,8 @@ var noOpSpan = {
|
|
|
5872
6002
|
var noOpTrace = {
|
|
5873
6003
|
setSessionId() {
|
|
5874
6004
|
},
|
|
6005
|
+
setName() {
|
|
6006
|
+
},
|
|
5875
6007
|
setMetadata() {
|
|
5876
6008
|
},
|
|
5877
6009
|
addContext() {
|
|
@@ -5946,6 +6078,15 @@ function getCurrentTrace() {
|
|
|
5946
6078
|
} catch {
|
|
5947
6079
|
}
|
|
5948
6080
|
},
|
|
6081
|
+
setName(name) {
|
|
6082
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
6083
|
+
return;
|
|
6084
|
+
}
|
|
6085
|
+
try {
|
|
6086
|
+
getOrCreateTraceState().name = name;
|
|
6087
|
+
} catch {
|
|
6088
|
+
}
|
|
6089
|
+
},
|
|
5949
6090
|
setMetadata(metadata) {
|
|
5950
6091
|
try {
|
|
5951
6092
|
if (typeof metadata !== "object" || metadata === null) {
|
|
@@ -6020,6 +6161,7 @@ var Bitfab = class {
|
|
|
6020
6161
|
serviceUrl: this.serviceUrl,
|
|
6021
6162
|
timeout: this.timeout
|
|
6022
6163
|
});
|
|
6164
|
+
this.datasets = new DatasetsClient(this.httpClient);
|
|
6023
6165
|
}
|
|
6024
6166
|
/**
|
|
6025
6167
|
* Decorate a class method as an automatically expanded trace root.
|
|
@@ -6924,6 +7066,7 @@ var Bitfab = class {
|
|
|
6924
7066
|
startedAt: traceState?.startedAt ?? startedAt,
|
|
6925
7067
|
endedAt,
|
|
6926
7068
|
sessionId: traceState?.sessionId,
|
|
7069
|
+
name: traceState?.name,
|
|
6927
7070
|
metadata: traceState?.metadata,
|
|
6928
7071
|
contexts: traceState?.contexts ?? [],
|
|
6929
7072
|
testRunId: traceState?.testRunId,
|
|
@@ -7242,6 +7385,15 @@ var Bitfab = class {
|
|
|
7242
7385
|
return Promise.resolve();
|
|
7243
7386
|
}
|
|
7244
7387
|
return this.httpClient.patchTrace(traceId, { setSessionId: sessionId });
|
|
7388
|
+
},
|
|
7389
|
+
setName: (name) => {
|
|
7390
|
+
if (!this.isTracingEnabled()) {
|
|
7391
|
+
return Promise.resolve();
|
|
7392
|
+
}
|
|
7393
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
7394
|
+
return Promise.resolve();
|
|
7395
|
+
}
|
|
7396
|
+
return this.httpClient.patchTrace(traceId, { setName: name });
|
|
7245
7397
|
}
|
|
7246
7398
|
};
|
|
7247
7399
|
}
|
|
@@ -7302,9 +7454,11 @@ var Bitfab = class {
|
|
|
7302
7454
|
const rawTrace = {
|
|
7303
7455
|
id: params.traceId,
|
|
7304
7456
|
started_at: params.startedAt,
|
|
7305
|
-
ended_at: params.endedAt
|
|
7306
|
-
workflow_name: params.traceFunctionKey
|
|
7457
|
+
ended_at: params.endedAt
|
|
7307
7458
|
};
|
|
7459
|
+
if (params.name) {
|
|
7460
|
+
rawTrace.name = params.name;
|
|
7461
|
+
}
|
|
7308
7462
|
if (params.metadata && Object.keys(params.metadata).length > 0) {
|
|
7309
7463
|
rawTrace.metadata = params.metadata;
|
|
7310
7464
|
}
|
|
@@ -7497,6 +7651,7 @@ var Bitfab = class {
|
|
|
7497
7651
|
contexts: [],
|
|
7498
7652
|
ingestionType: "seeded",
|
|
7499
7653
|
...options.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
7654
|
+
...options.name !== void 0 && { name: options.name },
|
|
7500
7655
|
...options.metadata !== void 0 && { metadata: options.metadata }
|
|
7501
7656
|
});
|
|
7502
7657
|
try {
|
|
@@ -7519,6 +7674,7 @@ var Bitfab = class {
|
|
|
7519
7674
|
startedAt,
|
|
7520
7675
|
endedAt: startedAt,
|
|
7521
7676
|
sessionId: options.sessionId,
|
|
7677
|
+
name: options.name,
|
|
7522
7678
|
metadata: options.metadata,
|
|
7523
7679
|
contexts: [],
|
|
7524
7680
|
ingestionType: "seeded"
|
|
@@ -7833,6 +7989,7 @@ function resolveTraceFunctionKey(registration) {
|
|
|
7833
7989
|
BitfabOpenAITracingProcessor,
|
|
7834
7990
|
BitfabVercelAiHandler,
|
|
7835
7991
|
DEFAULT_SERVICE_URL,
|
|
7992
|
+
DatasetsClient,
|
|
7836
7993
|
DbBranchReplayError,
|
|
7837
7994
|
HttpClient,
|
|
7838
7995
|
NO_MOCK_OVERRIDE,
|