@bitfab/sdk 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
@@ -14,12 +14,12 @@ import {
14
14
  flushTraces,
15
15
  getCurrentSpan,
16
16
  getCurrentTrace
17
- } from "./chunk-PFV4MPNS.js";
17
+ } from "./chunk-DW246LVL.js";
18
18
  import {
19
19
  BITFAB_PROGRESS_PREFIX,
20
20
  BitfabError,
21
21
  reportReplayProgress
22
- } from "./chunk-RNTDM6WM.js";
22
+ } from "./chunk-MD4XQGAF.js";
23
23
  export {
24
24
  BITFAB_PROGRESS_PREFIX,
25
25
  Bitfab,
package/dist/node.cjs CHANGED
@@ -499,6 +499,7 @@ async function replay(httpClient, serviceUrl, traceFunctionKey, fn, options) {
499
499
  // the count), so it's omitted from the request entirely.
500
500
  options?.traceIds ? void 0 : options?.limit ?? 5,
501
501
  options?.traceIds,
502
+ options?.name,
502
503
  options?.codeChangeDescription,
503
504
  options?.codeChangeFiles,
504
505
  options?.environment !== void 0,
@@ -649,7 +650,7 @@ registerAsyncLocalStorageClass(
649
650
  );
650
651
 
651
652
  // src/version.generated.ts
652
- var __version__ = "0.27.0";
653
+ var __version__ = "0.27.2";
653
654
 
654
655
  // src/constants.ts
655
656
  var DEFAULT_SERVICE_URL = "https://bitfab.ai";
@@ -957,7 +958,7 @@ var HttpClient = class {
957
958
  * Start a replay session by fetching historical traces.
958
959
  * Blocking call — creates a test run and returns lightweight item references.
959
960
  */
960
- async startReplay(traceFunctionKey, limit, traceIds, codeChangeDescription, codeChangeFiles, includeDbBranchLease, experimentGroupId, datasetId) {
961
+ async startReplay(traceFunctionKey, limit, traceIds, name, codeChangeDescription, codeChangeFiles, includeDbBranchLease, experimentGroupId, datasetId) {
961
962
  const payload = { traceFunctionKey };
962
963
  if (limit !== void 0) {
963
964
  payload.limit = limit;
@@ -965,6 +966,9 @@ var HttpClient = class {
965
966
  if (traceIds) {
966
967
  payload.traceIds = traceIds;
967
968
  }
969
+ if (name !== void 0) {
970
+ payload.name = name;
971
+ }
968
972
  if (codeChangeDescription !== void 0) {
969
973
  payload.codeChangeDescription = codeChangeDescription;
970
974
  }
@@ -2006,6 +2010,7 @@ function buildSnapshotRef(config, sdkWallClockBeforeFn) {
2006
2010
  init_randomUuid();
2007
2011
  init_serialize();
2008
2012
  var LANGSMITH_HIDDEN_TAG = "langsmith:hidden";
2013
+ var CHAIN_RUN_TYPES = /* @__PURE__ */ new Set(["chain", "parser", "prompt"]);
2009
2014
  var LANGGRAPH_METADATA_KEYS = [
2010
2015
  "langgraph_step",
2011
2016
  "langgraph_node",
@@ -2016,6 +2021,18 @@ var LANGGRAPH_METADATA_KEYS = [
2016
2021
  function nowIso2() {
2017
2022
  return (/* @__PURE__ */ new Date()).toISOString();
2018
2023
  }
2024
+ function normalizeChainStartArgs(parentRunIdOrRunType, runTypeOrRunName, runNameOrParentRunId) {
2025
+ if (parentRunIdOrRunType && CHAIN_RUN_TYPES.has(parentRunIdOrRunType)) {
2026
+ return {
2027
+ parentRunId: runNameOrParentRunId,
2028
+ runName: runTypeOrRunName
2029
+ };
2030
+ }
2031
+ return {
2032
+ parentRunId: parentRunIdOrRunType,
2033
+ runName: runNameOrParentRunId
2034
+ };
2035
+ }
2019
2036
  function convertMessage(message) {
2020
2037
  if (typeof message !== "object" || message === null) {
2021
2038
  return { role: "unknown", content: String(message) };
@@ -2227,6 +2244,7 @@ var BitfabLangGraphCallbackHandler = class {
2227
2244
  const willHide = tags?.includes(LANGSMITH_HIDDEN_TAG) === true;
2228
2245
  let invocation;
2229
2246
  let effectiveParentId;
2247
+ let isRootInvocation = false;
2230
2248
  if (parentSpan) {
2231
2249
  const existing = this.invocations.get(parentSpan.rootRunId);
2232
2250
  if (existing) {
@@ -2257,6 +2275,7 @@ var BitfabLangGraphCallbackHandler = class {
2257
2275
  };
2258
2276
  this.invocations.set(runId, invocation);
2259
2277
  effectiveParentId = activeContext?.spanId ?? null;
2278
+ isRootInvocation = true;
2260
2279
  }
2261
2280
  const lgMetadata = extractLangGraphMetadata(metadata);
2262
2281
  const contexts = Object.keys(lgMetadata).length > 0 ? [lgMetadata] : [];
@@ -2279,6 +2298,9 @@ var BitfabLangGraphCallbackHandler = class {
2279
2298
  spanInfo.hidden = true;
2280
2299
  }
2281
2300
  this.runToSpan.set(runId, spanInfo);
2301
+ if (isRootInvocation) {
2302
+ this.sendTraceStart(spanInfo);
2303
+ }
2282
2304
  return spanInfo;
2283
2305
  }
2284
2306
  completeSpan(runId, output, error, extraContexts) {
@@ -2369,11 +2391,35 @@ var BitfabLangGraphCallbackHandler = class {
2369
2391
  } catch {
2370
2392
  }
2371
2393
  }
2394
+ sendTraceStart(rootSpan) {
2395
+ const traceData = {
2396
+ type: "sdk-function",
2397
+ source: "typescript-sdk-langgraph",
2398
+ traceFunctionKey: this.traceFunctionKey,
2399
+ externalTrace: {
2400
+ id: rootSpan.traceId,
2401
+ started_at: rootSpan.startedAt,
2402
+ workflow_name: this.traceFunctionKey
2403
+ },
2404
+ completed: false
2405
+ };
2406
+ const finalized = finalizeTracePayload(traceData);
2407
+ try {
2408
+ this.httpClient.sendExternalTrace(finalized);
2409
+ } catch {
2410
+ }
2411
+ }
2372
2412
  // ── chain callbacks (graph nodes) ─────────────────────────────
2373
- async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata) {
2413
+ async handleChainStart(chain, inputs, runId, parentRunIdOrRunType, tags, metadata, runTypeOrRunName, runNameOrParentRunId) {
2374
2414
  try {
2375
- const idArr = chain.id;
2376
- const name = chain.name ?? idArr?.[idArr.length - 1] ?? "chain";
2415
+ const { parentRunId, runName } = normalizeChainStartArgs(
2416
+ parentRunIdOrRunType,
2417
+ runTypeOrRunName,
2418
+ runNameOrParentRunId
2419
+ );
2420
+ const serialized = chain ?? {};
2421
+ const idArr = serialized.id;
2422
+ const name = runName ?? serialized.name ?? idArr?.[idArr.length - 1] ?? "chain";
2377
2423
  this.startSpan(
2378
2424
  runId,
2379
2425
  parentRunId,
@@ -2408,11 +2454,12 @@ var BitfabLangGraphCallbackHandler = class {
2408
2454
  }
2409
2455
  }
2410
2456
  // ── LLM callbacks ─────────────────────────────────────────────
2411
- async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata) {
2457
+ async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata, runName) {
2412
2458
  try {
2413
- const model = extractModelName(llm, metadata);
2414
- const idArr = llm.id;
2415
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2459
+ const serialized = llm ?? {};
2460
+ const model = extractModelName(serialized, metadata);
2461
+ const idArr = serialized.id;
2462
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2416
2463
  const converted = messages.map((batch) => batch.map(convertMessage));
2417
2464
  const spanInfo = this.startSpan(
2418
2465
  runId,
@@ -2427,11 +2474,12 @@ var BitfabLangGraphCallbackHandler = class {
2427
2474
  } catch {
2428
2475
  }
2429
2476
  }
2430
- async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata) {
2477
+ async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata, runName) {
2431
2478
  try {
2432
- const model = extractModelName(llm, metadata);
2433
- const idArr = llm.id;
2434
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2479
+ const serialized = llm ?? {};
2480
+ const model = extractModelName(serialized, metadata);
2481
+ const idArr = serialized.id;
2482
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2435
2483
  const spanInfo = this.startSpan(
2436
2484
  runId,
2437
2485
  parentRunId,
@@ -2484,9 +2532,10 @@ var BitfabLangGraphCallbackHandler = class {
2484
2532
  async handleLLMNewToken() {
2485
2533
  }
2486
2534
  // ── tool callbacks ────────────────────────────────────────────
2487
- async handleToolStart(tool, input, runId, parentRunId, tags, metadata) {
2535
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {
2488
2536
  try {
2489
- const name = tool.name ?? "tool";
2537
+ const serialized = tool ?? {};
2538
+ const name = runName ?? serialized.name ?? "tool";
2490
2539
  this.startSpan(
2491
2540
  runId,
2492
2541
  parentRunId,
@@ -2516,9 +2565,10 @@ var BitfabLangGraphCallbackHandler = class {
2516
2565
  }
2517
2566
  }
2518
2567
  // ── retriever callbacks ───────────────────────────────────────
2519
- async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata) {
2568
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, runName) {
2520
2569
  try {
2521
- const name = retriever.name ?? "retriever";
2570
+ const serialized = retriever ?? {};
2571
+ const name = runName ?? serialized.name ?? "retriever";
2522
2572
  this.startSpan(
2523
2573
  runId,
2524
2574
  parentRunId,