@bitfab/sdk 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-2JQSYJJR.js → chunk-IFYX3KW6.js} +10 -3
- package/dist/{chunk-2JQSYJJR.js.map → chunk-IFYX3KW6.js.map} +1 -1
- package/dist/{chunk-FW7PZ3EP.js → chunk-RWZYZRYI.js} +2 -2
- package/dist/{chunk-SHJ3ABUG.js → chunk-U3AKIFW3.js} +162 -13
- package/dist/chunk-U3AKIFW3.js.map +1 -0
- package/dist/{chunk-RH4K4RSS.js → chunk-VEA6JOKL.js} +10 -3
- package/dist/{chunk-RH4K4RSS.js.map → chunk-VEA6JOKL.js.map} +1 -1
- package/dist/{http-GJZJKNZZ.js → http-JSBWHPNA.js} +2 -2
- package/dist/{http-PRCLI43J.js → http-UCJCOKW7.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-MZYX4IFV.js → replay-HMMWDSLB.js} +3 -3
- package/dist/replayCli.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-SHJ3ABUG.js.map +0 -1
- /package/dist/{chunk-FW7PZ3EP.js.map → chunk-RWZYZRYI.js.map} +0 -0
- /package/dist/{http-GJZJKNZZ.js.map → http-JSBWHPNA.js.map} +0 -0
- /package/dist/{http-PRCLI43J.js.map → http-UCJCOKW7.js.map} +0 -0
- /package/dist/{replay-MZYX4IFV.js.map → replay-HMMWDSLB.js.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VEA6JOKL.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-JSBWHPNA.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-IFYX3KW6.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-UCJCOKW7.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -42,7 +42,7 @@ var __version__, __packageName__;
|
|
|
42
42
|
var init_version_generated = __esm({
|
|
43
43
|
"src/version.generated.ts"() {
|
|
44
44
|
"use strict";
|
|
45
|
-
__version__ = "0.
|
|
45
|
+
__version__ = "0.41.0";
|
|
46
46
|
__packageName__ = "@bitfab/sdk";
|
|
47
47
|
}
|
|
48
48
|
});
|
|
@@ -1732,6 +1732,10 @@ var init_http = __esm({
|
|
|
1732
1732
|
const response = await this.get(endpoint);
|
|
1733
1733
|
return response.span;
|
|
1734
1734
|
}
|
|
1735
|
+
/**
|
|
1736
|
+
* GET a JSON endpoint on the service with the client's API key. Throws a
|
|
1737
|
+
* `BitfabError` carrying the status text for any non-2xx response.
|
|
1738
|
+
*/
|
|
1735
1739
|
async get(endpoint) {
|
|
1736
1740
|
const url = `${this.serviceUrl}${endpoint}`;
|
|
1737
1741
|
const controller = new AbortController();
|
|
@@ -1745,7 +1749,10 @@ var init_http = __esm({
|
|
|
1745
1749
|
if (!response.ok) {
|
|
1746
1750
|
const errorText = await response.text();
|
|
1747
1751
|
throw new BitfabError(
|
|
1748
|
-
`HTTP ${response.status}: ${errorText.slice(0, 500)}
|
|
1752
|
+
`HTTP ${response.status}: ${errorText.slice(0, 500)}`,
|
|
1753
|
+
void 0,
|
|
1754
|
+
response.status,
|
|
1755
|
+
parseRetryAfterMs(readHeader(response, "retry-after"))
|
|
1749
1756
|
);
|
|
1750
1757
|
}
|
|
1751
1758
|
return await response.json();
|
|
@@ -3197,6 +3204,7 @@ __export(index_exports, {
|
|
|
3197
3204
|
BitfabOpenAITracingProcessor: () => BitfabOpenAITracingProcessor,
|
|
3198
3205
|
BitfabVercelAiHandler: () => BitfabVercelAiHandler,
|
|
3199
3206
|
DEFAULT_SERVICE_URL: () => DEFAULT_SERVICE_URL,
|
|
3207
|
+
DatasetsClient: () => DatasetsClient,
|
|
3200
3208
|
DbBranchReplayError: () => DbBranchReplayError,
|
|
3201
3209
|
HttpClient: () => HttpClient,
|
|
3202
3210
|
NO_MOCK_OVERRIDE: () => NO_MOCK_OVERRIDE,
|
|
@@ -3515,8 +3523,7 @@ var BitfabClaudeAgentHandler = class {
|
|
|
3515
3523
|
const externalTrace = {
|
|
3516
3524
|
id: traceId,
|
|
3517
3525
|
started_at: this.traceStartedAt ?? nowIso(),
|
|
3518
|
-
ended_at: endedAt ?? nowIso()
|
|
3519
|
-
workflow_name: this.traceFunctionKey
|
|
3526
|
+
ended_at: endedAt ?? nowIso()
|
|
3520
3527
|
};
|
|
3521
3528
|
if (metadata) {
|
|
3522
3529
|
externalTrace.metadata = metadata;
|
|
@@ -4276,6 +4283,131 @@ async function runFunctionWithBaml(bamlSource, inputs, providers, envVars) {
|
|
|
4276
4283
|
// src/client.ts
|
|
4277
4284
|
init_constants();
|
|
4278
4285
|
|
|
4286
|
+
// src/datasets.ts
|
|
4287
|
+
var DEFAULT_RERUN_TIMEOUT_MS = 9e4;
|
|
4288
|
+
var DEFAULT_RERUN_POLL_INTERVAL_MS = 1e3;
|
|
4289
|
+
var TERMINAL_RERUN_STATUSES = /* @__PURE__ */ new Set([
|
|
4290
|
+
"completed",
|
|
4291
|
+
"errored"
|
|
4292
|
+
]);
|
|
4293
|
+
function sleep(ms) {
|
|
4294
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
4295
|
+
}
|
|
4296
|
+
function datasetPath(datasetId, suffix = "") {
|
|
4297
|
+
return `/api/sdk/datasets/${encodeURIComponent(datasetId)}${suffix}`;
|
|
4298
|
+
}
|
|
4299
|
+
var DatasetsClient = class {
|
|
4300
|
+
constructor(httpClient) {
|
|
4301
|
+
this.httpClient = httpClient;
|
|
4302
|
+
}
|
|
4303
|
+
/**
|
|
4304
|
+
* Create a dataset, or update the one already named this way under the same
|
|
4305
|
+
* trace function. `created` reports which happened. An omitted description
|
|
4306
|
+
* leaves an existing one untouched.
|
|
4307
|
+
*/
|
|
4308
|
+
async save(params) {
|
|
4309
|
+
return this.httpClient.request("/api/sdk/datasets", {
|
|
4310
|
+
traceFunctionKey: params.traceFunctionKey,
|
|
4311
|
+
name: params.name,
|
|
4312
|
+
...params.description === void 0 ? {} : { description: params.description }
|
|
4313
|
+
});
|
|
4314
|
+
}
|
|
4315
|
+
/**
|
|
4316
|
+
* List datasets, scoped to one trace function when `traceFunctionKey` is
|
|
4317
|
+
* given and organization-wide otherwise.
|
|
4318
|
+
*/
|
|
4319
|
+
async list(params = {}) {
|
|
4320
|
+
const query = params.traceFunctionKey === void 0 ? "" : `?traceFunctionKey=${encodeURIComponent(params.traceFunctionKey)}`;
|
|
4321
|
+
const response = await this.httpClient.get(
|
|
4322
|
+
`/api/sdk/datasets${query}`
|
|
4323
|
+
);
|
|
4324
|
+
return response.datasets;
|
|
4325
|
+
}
|
|
4326
|
+
/** Fetch one dataset by id. Rejects with a 404 `BitfabError` when it is not in this organization. */
|
|
4327
|
+
async get(datasetId) {
|
|
4328
|
+
const response = await this.httpClient.get(
|
|
4329
|
+
datasetPath(datasetId)
|
|
4330
|
+
);
|
|
4331
|
+
return response.dataset;
|
|
4332
|
+
}
|
|
4333
|
+
/** The ids of every trace in the dataset, the same membership a replay with `datasetId` selects. */
|
|
4334
|
+
async listTraces(datasetId) {
|
|
4335
|
+
return this.httpClient.get(
|
|
4336
|
+
datasetPath(datasetId, "/traces")
|
|
4337
|
+
);
|
|
4338
|
+
}
|
|
4339
|
+
/**
|
|
4340
|
+
* Add traces to the dataset (1 to 100 ids per call). Traces outside the
|
|
4341
|
+
* organization or under another trace function are reported in
|
|
4342
|
+
* `skippedTraceIds` rather than failing the call.
|
|
4343
|
+
*/
|
|
4344
|
+
async addTraces(datasetId, traceIds) {
|
|
4345
|
+
return this.httpClient.request(
|
|
4346
|
+
datasetPath(datasetId, "/traces"),
|
|
4347
|
+
{ traceIds }
|
|
4348
|
+
);
|
|
4349
|
+
}
|
|
4350
|
+
/** Remove traces from the dataset. The traces themselves are never deleted. */
|
|
4351
|
+
async removeTraces(datasetId, traceIds) {
|
|
4352
|
+
return this.httpClient.request(
|
|
4353
|
+
datasetPath(datasetId, "/removeTraces"),
|
|
4354
|
+
{ traceIds }
|
|
4355
|
+
);
|
|
4356
|
+
}
|
|
4357
|
+
/**
|
|
4358
|
+
* Assign graders to the dataset (1 to 100 ids per call). Graders outside the
|
|
4359
|
+
* organization or under another trace function are reported in
|
|
4360
|
+
* `skippedGraderIds` rather than failing the call.
|
|
4361
|
+
*/
|
|
4362
|
+
async addGraders(datasetId, graderIds) {
|
|
4363
|
+
return this.httpClient.request(
|
|
4364
|
+
datasetPath(datasetId, "/graders"),
|
|
4365
|
+
{ graderIds }
|
|
4366
|
+
);
|
|
4367
|
+
}
|
|
4368
|
+
/** Unassign graders from the dataset. */
|
|
4369
|
+
async removeGraders(datasetId, graderIds) {
|
|
4370
|
+
return this.httpClient.request(
|
|
4371
|
+
datasetPath(datasetId, "/removeGraders"),
|
|
4372
|
+
{ graderIds }
|
|
4373
|
+
);
|
|
4374
|
+
}
|
|
4375
|
+
/**
|
|
4376
|
+
* Re-run graders over every trace in the dataset. Defaults to every assigned
|
|
4377
|
+
* grader; an unassigned id is rejected. Waits for the run to finish (up to
|
|
4378
|
+
* `timeoutMs`, default 90s) unless `wait` is `false`, and returns the last
|
|
4379
|
+
* run state seen either way. A request matching an in-flight run joins it.
|
|
4380
|
+
*/
|
|
4381
|
+
async rerunGraders(datasetId, options = {}) {
|
|
4382
|
+
const started = await this.httpClient.request(
|
|
4383
|
+
datasetPath(datasetId, "/rerunGraders"),
|
|
4384
|
+
options.graderIds === void 0 ? {} : { graderIds: options.graderIds }
|
|
4385
|
+
);
|
|
4386
|
+
if (options.wait === false) {
|
|
4387
|
+
return started;
|
|
4388
|
+
}
|
|
4389
|
+
const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_RERUN_TIMEOUT_MS);
|
|
4390
|
+
const interval = options.pollIntervalMs ?? DEFAULT_RERUN_POLL_INTERVAL_MS;
|
|
4391
|
+
let run = started.run;
|
|
4392
|
+
while (!TERMINAL_RERUN_STATUSES.has(run.status) && Date.now() < deadline) {
|
|
4393
|
+
await sleep(interval);
|
|
4394
|
+
run = await this.getGraderRerun(datasetId, run.id) ?? run;
|
|
4395
|
+
}
|
|
4396
|
+
return { run, joinedExisting: started.joinedExisting };
|
|
4397
|
+
}
|
|
4398
|
+
/**
|
|
4399
|
+
* The dataset's active grader re-run, or the run named by `runId`. Returns
|
|
4400
|
+
* `null` when nothing is active or the run does not belong to this dataset.
|
|
4401
|
+
*/
|
|
4402
|
+
async getGraderRerun(datasetId, runId) {
|
|
4403
|
+
const query = runId === void 0 ? "" : `?runId=${encodeURIComponent(runId)}`;
|
|
4404
|
+
const response = await this.httpClient.get(
|
|
4405
|
+
datasetPath(datasetId, `/rerunGraders${query}`)
|
|
4406
|
+
);
|
|
4407
|
+
return response.run;
|
|
4408
|
+
}
|
|
4409
|
+
};
|
|
4410
|
+
|
|
4279
4411
|
// src/dbSnapshot.ts
|
|
4280
4412
|
init_errors();
|
|
4281
4413
|
var SUPPORTED_PROVIDERS = ["neon"];
|
|
@@ -4685,8 +4817,7 @@ var BitfabLangGraphCallbackHandler = class {
|
|
|
4685
4817
|
externalTrace: {
|
|
4686
4818
|
id: rootSpan.traceId,
|
|
4687
4819
|
started_at: rootSpan.startedAt,
|
|
4688
|
-
ended_at: rootSpan.endedAt ?? nowIso2()
|
|
4689
|
-
workflow_name: this.traceFunctionKey
|
|
4820
|
+
ended_at: rootSpan.endedAt ?? nowIso2()
|
|
4690
4821
|
},
|
|
4691
4822
|
completed
|
|
4692
4823
|
};
|
|
@@ -4704,8 +4835,7 @@ var BitfabLangGraphCallbackHandler = class {
|
|
|
4704
4835
|
traceFunctionKey: this.traceFunctionKey,
|
|
4705
4836
|
externalTrace: {
|
|
4706
4837
|
id: rootSpan.traceId,
|
|
4707
|
-
started_at: rootSpan.startedAt
|
|
4708
|
-
workflow_name: this.traceFunctionKey
|
|
4838
|
+
started_at: rootSpan.startedAt
|
|
4709
4839
|
},
|
|
4710
4840
|
completed: false
|
|
4711
4841
|
};
|
|
@@ -5863,6 +5993,8 @@ var noOpSpan = {
|
|
|
5863
5993
|
var noOpTrace = {
|
|
5864
5994
|
setSessionId() {
|
|
5865
5995
|
},
|
|
5996
|
+
setName() {
|
|
5997
|
+
},
|
|
5866
5998
|
setMetadata() {
|
|
5867
5999
|
},
|
|
5868
6000
|
addContext() {
|
|
@@ -5937,6 +6069,15 @@ function getCurrentTrace() {
|
|
|
5937
6069
|
} catch {
|
|
5938
6070
|
}
|
|
5939
6071
|
},
|
|
6072
|
+
setName(name) {
|
|
6073
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
6074
|
+
return;
|
|
6075
|
+
}
|
|
6076
|
+
try {
|
|
6077
|
+
getOrCreateTraceState().name = name;
|
|
6078
|
+
} catch {
|
|
6079
|
+
}
|
|
6080
|
+
},
|
|
5940
6081
|
setMetadata(metadata) {
|
|
5941
6082
|
try {
|
|
5942
6083
|
if (typeof metadata !== "object" || metadata === null) {
|
|
@@ -6011,6 +6152,7 @@ var Bitfab = class {
|
|
|
6011
6152
|
serviceUrl: this.serviceUrl,
|
|
6012
6153
|
timeout: this.timeout
|
|
6013
6154
|
});
|
|
6155
|
+
this.datasets = new DatasetsClient(this.httpClient);
|
|
6014
6156
|
}
|
|
6015
6157
|
/**
|
|
6016
6158
|
* Decorate a class method as an automatically expanded trace root.
|
|
@@ -6915,6 +7057,7 @@ var Bitfab = class {
|
|
|
6915
7057
|
startedAt: traceState?.startedAt ?? startedAt,
|
|
6916
7058
|
endedAt,
|
|
6917
7059
|
sessionId: traceState?.sessionId,
|
|
7060
|
+
name: traceState?.name,
|
|
6918
7061
|
metadata: traceState?.metadata,
|
|
6919
7062
|
contexts: traceState?.contexts ?? [],
|
|
6920
7063
|
testRunId: traceState?.testRunId,
|
|
@@ -7233,6 +7376,15 @@ var Bitfab = class {
|
|
|
7233
7376
|
return Promise.resolve();
|
|
7234
7377
|
}
|
|
7235
7378
|
return this.httpClient.patchTrace(traceId, { setSessionId: sessionId });
|
|
7379
|
+
},
|
|
7380
|
+
setName: (name) => {
|
|
7381
|
+
if (!this.isTracingEnabled()) {
|
|
7382
|
+
return Promise.resolve();
|
|
7383
|
+
}
|
|
7384
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
7385
|
+
return Promise.resolve();
|
|
7386
|
+
}
|
|
7387
|
+
return this.httpClient.patchTrace(traceId, { setName: name });
|
|
7236
7388
|
}
|
|
7237
7389
|
};
|
|
7238
7390
|
}
|
|
@@ -7293,9 +7445,11 @@ var Bitfab = class {
|
|
|
7293
7445
|
const rawTrace = {
|
|
7294
7446
|
id: params.traceId,
|
|
7295
7447
|
started_at: params.startedAt,
|
|
7296
|
-
ended_at: params.endedAt
|
|
7297
|
-
workflow_name: params.traceFunctionKey
|
|
7448
|
+
ended_at: params.endedAt
|
|
7298
7449
|
};
|
|
7450
|
+
if (params.name) {
|
|
7451
|
+
rawTrace.name = params.name;
|
|
7452
|
+
}
|
|
7299
7453
|
if (params.metadata && Object.keys(params.metadata).length > 0) {
|
|
7300
7454
|
rawTrace.metadata = params.metadata;
|
|
7301
7455
|
}
|
|
@@ -7488,6 +7642,7 @@ var Bitfab = class {
|
|
|
7488
7642
|
contexts: [],
|
|
7489
7643
|
ingestionType: "seeded",
|
|
7490
7644
|
...options.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
7645
|
+
...options.name !== void 0 && { name: options.name },
|
|
7491
7646
|
...options.metadata !== void 0 && { metadata: options.metadata }
|
|
7492
7647
|
});
|
|
7493
7648
|
try {
|
|
@@ -7510,6 +7665,7 @@ var Bitfab = class {
|
|
|
7510
7665
|
startedAt,
|
|
7511
7666
|
endedAt: startedAt,
|
|
7512
7667
|
sessionId: options.sessionId,
|
|
7668
|
+
name: options.name,
|
|
7513
7669
|
metadata: options.metadata,
|
|
7514
7670
|
contexts: [],
|
|
7515
7671
|
ingestionType: "seeded"
|
|
@@ -7824,6 +7980,7 @@ function resolveTraceFunctionKey(registration) {
|
|
|
7824
7980
|
BitfabOpenAITracingProcessor,
|
|
7825
7981
|
BitfabVercelAiHandler,
|
|
7826
7982
|
DEFAULT_SERVICE_URL,
|
|
7983
|
+
DatasetsClient,
|
|
7827
7984
|
DbBranchReplayError,
|
|
7828
7985
|
HttpClient,
|
|
7829
7986
|
NO_MOCK_OVERRIDE,
|