bitfab 0.27.0 → 0.27.2

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/index.d.cts CHANGED
@@ -411,18 +411,19 @@ declare class BitfabLangGraphCallbackHandler {
411
411
  private completeSpan;
412
412
  private sendSpan;
413
413
  private sendTraceCompletion;
414
- handleChainStart(chain: Record<string, unknown>, inputs: Record<string, unknown>, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
414
+ private sendTraceStart;
415
+ handleChainStart(chain: Record<string, unknown> | null | undefined, inputs: Record<string, unknown>, runId: string, parentRunIdOrRunType?: string, tags?: string[], metadata?: Record<string, unknown>, runTypeOrRunName?: string, runNameOrParentRunId?: string): Promise<void>;
415
416
  handleChainEnd(outputs: Record<string, unknown>, runId: string): Promise<void>;
416
417
  handleChainError(error: unknown, runId: string): Promise<void>;
417
- handleChatModelStart(llm: Record<string, unknown>, messages: unknown[][], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
418
- handleLLMStart(llm: Record<string, unknown>, prompts: string[], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
418
+ handleChatModelStart(llm: Record<string, unknown> | null | undefined, messages: unknown[][], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
419
+ handleLLMStart(llm: Record<string, unknown> | null | undefined, prompts: string[], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
419
420
  handleLLMEnd(output: Record<string, unknown>, runId: string): Promise<void>;
420
421
  handleLLMError(error: unknown, runId: string): Promise<void>;
421
422
  handleLLMNewToken(): Promise<void>;
422
- handleToolStart(tool: Record<string, unknown>, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
423
+ handleToolStart(tool: Record<string, unknown> | null | undefined, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
423
424
  handleToolEnd(output: unknown, runId: string): Promise<void>;
424
425
  handleToolError(error: unknown, runId: string): Promise<void>;
425
- handleRetrieverStart(retriever: Record<string, unknown>, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
426
+ handleRetrieverStart(retriever: Record<string, unknown> | null | undefined, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
426
427
  handleRetrieverEnd(documents: unknown, runId: string): Promise<void>;
427
428
  handleRetrieverError(error: unknown, runId: string): Promise<void>;
428
429
  }
@@ -594,6 +595,8 @@ interface ReplayOptions {
594
595
  limit?: number;
595
596
  /** Optional list of specific trace IDs to replay (max 100). */
596
597
  traceIds?: string[];
598
+ /** Optional display name for the resulting experiment/test run. */
599
+ name?: string;
597
600
  /** Maximum number of items to process in parallel. Set to 1 for sequential. Default 10. */
598
601
  maxConcurrency?: number;
599
602
  /**
@@ -1528,7 +1531,7 @@ declare class BitfabFunction {
1528
1531
  /**
1529
1532
  * SDK version from package.json (injected at build time)
1530
1533
  */
1531
- declare const __version__ = "0.27.0";
1534
+ declare const __version__ = "0.27.2";
1532
1535
 
1533
1536
  /**
1534
1537
  * Constants for the Bitfab SDK.
package/dist/index.d.ts CHANGED
@@ -411,18 +411,19 @@ declare class BitfabLangGraphCallbackHandler {
411
411
  private completeSpan;
412
412
  private sendSpan;
413
413
  private sendTraceCompletion;
414
- handleChainStart(chain: Record<string, unknown>, inputs: Record<string, unknown>, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
414
+ private sendTraceStart;
415
+ handleChainStart(chain: Record<string, unknown> | null | undefined, inputs: Record<string, unknown>, runId: string, parentRunIdOrRunType?: string, tags?: string[], metadata?: Record<string, unknown>, runTypeOrRunName?: string, runNameOrParentRunId?: string): Promise<void>;
415
416
  handleChainEnd(outputs: Record<string, unknown>, runId: string): Promise<void>;
416
417
  handleChainError(error: unknown, runId: string): Promise<void>;
417
- handleChatModelStart(llm: Record<string, unknown>, messages: unknown[][], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
418
- handleLLMStart(llm: Record<string, unknown>, prompts: string[], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
418
+ handleChatModelStart(llm: Record<string, unknown> | null | undefined, messages: unknown[][], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
419
+ handleLLMStart(llm: Record<string, unknown> | null | undefined, prompts: string[], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
419
420
  handleLLMEnd(output: Record<string, unknown>, runId: string): Promise<void>;
420
421
  handleLLMError(error: unknown, runId: string): Promise<void>;
421
422
  handleLLMNewToken(): Promise<void>;
422
- handleToolStart(tool: Record<string, unknown>, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
423
+ handleToolStart(tool: Record<string, unknown> | null | undefined, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
423
424
  handleToolEnd(output: unknown, runId: string): Promise<void>;
424
425
  handleToolError(error: unknown, runId: string): Promise<void>;
425
- handleRetrieverStart(retriever: Record<string, unknown>, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>): Promise<void>;
426
+ handleRetrieverStart(retriever: Record<string, unknown> | null | undefined, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>, runName?: string): Promise<void>;
426
427
  handleRetrieverEnd(documents: unknown, runId: string): Promise<void>;
427
428
  handleRetrieverError(error: unknown, runId: string): Promise<void>;
428
429
  }
@@ -594,6 +595,8 @@ interface ReplayOptions {
594
595
  limit?: number;
595
596
  /** Optional list of specific trace IDs to replay (max 100). */
596
597
  traceIds?: string[];
598
+ /** Optional display name for the resulting experiment/test run. */
599
+ name?: string;
597
600
  /** Maximum number of items to process in parallel. Set to 1 for sequential. Default 10. */
598
601
  maxConcurrency?: number;
599
602
  /**
@@ -1528,7 +1531,7 @@ declare class BitfabFunction {
1528
1531
  /**
1529
1532
  * SDK version from package.json (injected at build time)
1530
1533
  */
1531
- declare const __version__ = "0.27.0";
1534
+ declare const __version__ = "0.27.2";
1532
1535
 
1533
1536
  /**
1534
1537
  * Constants for the Bitfab SDK.
package/dist/index.js CHANGED
@@ -23,12 +23,12 @@ import {
23
23
  flushTraces,
24
24
  getCurrentSpan,
25
25
  getCurrentTrace
26
- } from "./chunk-PFV4MPNS.js";
26
+ } from "./chunk-DW246LVL.js";
27
27
  import {
28
28
  BITFAB_PROGRESS_PREFIX,
29
29
  BitfabError,
30
30
  reportReplayProgress
31
- } from "./chunk-RNTDM6WM.js";
31
+ } from "./chunk-MD4XQGAF.js";
32
32
  export {
33
33
  BITFAB_PROGRESS_PREFIX,
34
34
  Bitfab,
package/dist/node.cjs CHANGED
@@ -508,6 +508,7 @@ async function replay(httpClient, serviceUrl, traceFunctionKey, fn, options) {
508
508
  // the count), so it's omitted from the request entirely.
509
509
  options?.traceIds ? void 0 : options?.limit ?? 5,
510
510
  options?.traceIds,
511
+ options?.name,
511
512
  options?.codeChangeDescription,
512
513
  options?.codeChangeFiles,
513
514
  options?.environment !== void 0,
@@ -658,7 +659,7 @@ registerAsyncLocalStorageClass(
658
659
  );
659
660
 
660
661
  // src/version.generated.ts
661
- var __version__ = "0.27.0";
662
+ var __version__ = "0.27.2";
662
663
 
663
664
  // src/constants.ts
664
665
  var DEFAULT_SERVICE_URL = "https://bitfab.ai";
@@ -966,7 +967,7 @@ var HttpClient = class {
966
967
  * Start a replay session by fetching historical traces.
967
968
  * Blocking call — creates a test run and returns lightweight item references.
968
969
  */
969
- async startReplay(traceFunctionKey, limit, traceIds, codeChangeDescription, codeChangeFiles, includeDbBranchLease, experimentGroupId, datasetId) {
970
+ async startReplay(traceFunctionKey, limit, traceIds, name, codeChangeDescription, codeChangeFiles, includeDbBranchLease, experimentGroupId, datasetId) {
970
971
  const payload = { traceFunctionKey };
971
972
  if (limit !== void 0) {
972
973
  payload.limit = limit;
@@ -974,6 +975,9 @@ var HttpClient = class {
974
975
  if (traceIds) {
975
976
  payload.traceIds = traceIds;
976
977
  }
978
+ if (name !== void 0) {
979
+ payload.name = name;
980
+ }
977
981
  if (codeChangeDescription !== void 0) {
978
982
  payload.codeChangeDescription = codeChangeDescription;
979
983
  }
@@ -2015,6 +2019,7 @@ function buildSnapshotRef(config, sdkWallClockBeforeFn) {
2015
2019
  init_randomUuid();
2016
2020
  init_serialize();
2017
2021
  var LANGSMITH_HIDDEN_TAG = "langsmith:hidden";
2022
+ var CHAIN_RUN_TYPES = /* @__PURE__ */ new Set(["chain", "parser", "prompt"]);
2018
2023
  var LANGGRAPH_METADATA_KEYS = [
2019
2024
  "langgraph_step",
2020
2025
  "langgraph_node",
@@ -2025,6 +2030,18 @@ var LANGGRAPH_METADATA_KEYS = [
2025
2030
  function nowIso2() {
2026
2031
  return (/* @__PURE__ */ new Date()).toISOString();
2027
2032
  }
2033
+ function normalizeChainStartArgs(parentRunIdOrRunType, runTypeOrRunName, runNameOrParentRunId) {
2034
+ if (parentRunIdOrRunType && CHAIN_RUN_TYPES.has(parentRunIdOrRunType)) {
2035
+ return {
2036
+ parentRunId: runNameOrParentRunId,
2037
+ runName: runTypeOrRunName
2038
+ };
2039
+ }
2040
+ return {
2041
+ parentRunId: parentRunIdOrRunType,
2042
+ runName: runNameOrParentRunId
2043
+ };
2044
+ }
2028
2045
  function convertMessage(message) {
2029
2046
  if (typeof message !== "object" || message === null) {
2030
2047
  return { role: "unknown", content: String(message) };
@@ -2236,6 +2253,7 @@ var BitfabLangGraphCallbackHandler = class {
2236
2253
  const willHide = tags?.includes(LANGSMITH_HIDDEN_TAG) === true;
2237
2254
  let invocation;
2238
2255
  let effectiveParentId;
2256
+ let isRootInvocation = false;
2239
2257
  if (parentSpan) {
2240
2258
  const existing = this.invocations.get(parentSpan.rootRunId);
2241
2259
  if (existing) {
@@ -2266,6 +2284,7 @@ var BitfabLangGraphCallbackHandler = class {
2266
2284
  };
2267
2285
  this.invocations.set(runId, invocation);
2268
2286
  effectiveParentId = activeContext?.spanId ?? null;
2287
+ isRootInvocation = true;
2269
2288
  }
2270
2289
  const lgMetadata = extractLangGraphMetadata(metadata);
2271
2290
  const contexts = Object.keys(lgMetadata).length > 0 ? [lgMetadata] : [];
@@ -2288,6 +2307,9 @@ var BitfabLangGraphCallbackHandler = class {
2288
2307
  spanInfo.hidden = true;
2289
2308
  }
2290
2309
  this.runToSpan.set(runId, spanInfo);
2310
+ if (isRootInvocation) {
2311
+ this.sendTraceStart(spanInfo);
2312
+ }
2291
2313
  return spanInfo;
2292
2314
  }
2293
2315
  completeSpan(runId, output, error, extraContexts) {
@@ -2378,11 +2400,35 @@ var BitfabLangGraphCallbackHandler = class {
2378
2400
  } catch {
2379
2401
  }
2380
2402
  }
2403
+ sendTraceStart(rootSpan) {
2404
+ const traceData = {
2405
+ type: "sdk-function",
2406
+ source: "typescript-sdk-langgraph",
2407
+ traceFunctionKey: this.traceFunctionKey,
2408
+ externalTrace: {
2409
+ id: rootSpan.traceId,
2410
+ started_at: rootSpan.startedAt,
2411
+ workflow_name: this.traceFunctionKey
2412
+ },
2413
+ completed: false
2414
+ };
2415
+ const finalized = finalizeTracePayload(traceData);
2416
+ try {
2417
+ this.httpClient.sendExternalTrace(finalized);
2418
+ } catch {
2419
+ }
2420
+ }
2381
2421
  // ── chain callbacks (graph nodes) ─────────────────────────────
2382
- async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata) {
2422
+ async handleChainStart(chain, inputs, runId, parentRunIdOrRunType, tags, metadata, runTypeOrRunName, runNameOrParentRunId) {
2383
2423
  try {
2384
- const idArr = chain.id;
2385
- const name = chain.name ?? idArr?.[idArr.length - 1] ?? "chain";
2424
+ const { parentRunId, runName } = normalizeChainStartArgs(
2425
+ parentRunIdOrRunType,
2426
+ runTypeOrRunName,
2427
+ runNameOrParentRunId
2428
+ );
2429
+ const serialized = chain ?? {};
2430
+ const idArr = serialized.id;
2431
+ const name = runName ?? serialized.name ?? idArr?.[idArr.length - 1] ?? "chain";
2386
2432
  this.startSpan(
2387
2433
  runId,
2388
2434
  parentRunId,
@@ -2417,11 +2463,12 @@ var BitfabLangGraphCallbackHandler = class {
2417
2463
  }
2418
2464
  }
2419
2465
  // ── LLM callbacks ─────────────────────────────────────────────
2420
- async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata) {
2466
+ async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata, runName) {
2421
2467
  try {
2422
- const model = extractModelName(llm, metadata);
2423
- const idArr = llm.id;
2424
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2468
+ const serialized = llm ?? {};
2469
+ const model = extractModelName(serialized, metadata);
2470
+ const idArr = serialized.id;
2471
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2425
2472
  const converted = messages.map((batch) => batch.map(convertMessage));
2426
2473
  const spanInfo = this.startSpan(
2427
2474
  runId,
@@ -2436,11 +2483,12 @@ var BitfabLangGraphCallbackHandler = class {
2436
2483
  } catch {
2437
2484
  }
2438
2485
  }
2439
- async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata) {
2486
+ async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata, runName) {
2440
2487
  try {
2441
- const model = extractModelName(llm, metadata);
2442
- const idArr = llm.id;
2443
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2488
+ const serialized = llm ?? {};
2489
+ const model = extractModelName(serialized, metadata);
2490
+ const idArr = serialized.id;
2491
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2444
2492
  const spanInfo = this.startSpan(
2445
2493
  runId,
2446
2494
  parentRunId,
@@ -2493,9 +2541,10 @@ var BitfabLangGraphCallbackHandler = class {
2493
2541
  async handleLLMNewToken() {
2494
2542
  }
2495
2543
  // ── tool callbacks ────────────────────────────────────────────
2496
- async handleToolStart(tool, input, runId, parentRunId, tags, metadata) {
2544
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {
2497
2545
  try {
2498
- const name = tool.name ?? "tool";
2546
+ const serialized = tool ?? {};
2547
+ const name = runName ?? serialized.name ?? "tool";
2499
2548
  this.startSpan(
2500
2549
  runId,
2501
2550
  parentRunId,
@@ -2525,9 +2574,10 @@ var BitfabLangGraphCallbackHandler = class {
2525
2574
  }
2526
2575
  }
2527
2576
  // ── retriever callbacks ───────────────────────────────────────
2528
- async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata) {
2577
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, runName) {
2529
2578
  try {
2530
- const name = retriever.name ?? "retriever";
2579
+ const serialized = retriever ?? {};
2580
+ const name = runName ?? serialized.name ?? "retriever";
2531
2581
  this.startSpan(
2532
2582
  runId,
2533
2583
  parentRunId,