@bitfab/sdk 0.27.1 → 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.cjs CHANGED
@@ -636,7 +636,7 @@ __export(index_exports, {
636
636
  module.exports = __toCommonJS(index_exports);
637
637
 
638
638
  // src/version.generated.ts
639
- var __version__ = "0.27.1";
639
+ var __version__ = "0.27.2";
640
640
 
641
641
  // src/constants.ts
642
642
  var DEFAULT_SERVICE_URL = "https://bitfab.ai";
@@ -1996,6 +1996,7 @@ function buildSnapshotRef(config, sdkWallClockBeforeFn) {
1996
1996
  init_randomUuid();
1997
1997
  init_serialize();
1998
1998
  var LANGSMITH_HIDDEN_TAG = "langsmith:hidden";
1999
+ var CHAIN_RUN_TYPES = /* @__PURE__ */ new Set(["chain", "parser", "prompt"]);
1999
2000
  var LANGGRAPH_METADATA_KEYS = [
2000
2001
  "langgraph_step",
2001
2002
  "langgraph_node",
@@ -2006,6 +2007,18 @@ var LANGGRAPH_METADATA_KEYS = [
2006
2007
  function nowIso2() {
2007
2008
  return (/* @__PURE__ */ new Date()).toISOString();
2008
2009
  }
2010
+ function normalizeChainStartArgs(parentRunIdOrRunType, runTypeOrRunName, runNameOrParentRunId) {
2011
+ if (parentRunIdOrRunType && CHAIN_RUN_TYPES.has(parentRunIdOrRunType)) {
2012
+ return {
2013
+ parentRunId: runNameOrParentRunId,
2014
+ runName: runTypeOrRunName
2015
+ };
2016
+ }
2017
+ return {
2018
+ parentRunId: parentRunIdOrRunType,
2019
+ runName: runNameOrParentRunId
2020
+ };
2021
+ }
2009
2022
  function convertMessage(message) {
2010
2023
  if (typeof message !== "object" || message === null) {
2011
2024
  return { role: "unknown", content: String(message) };
@@ -2217,6 +2230,7 @@ var BitfabLangGraphCallbackHandler = class {
2217
2230
  const willHide = tags?.includes(LANGSMITH_HIDDEN_TAG) === true;
2218
2231
  let invocation;
2219
2232
  let effectiveParentId;
2233
+ let isRootInvocation = false;
2220
2234
  if (parentSpan) {
2221
2235
  const existing = this.invocations.get(parentSpan.rootRunId);
2222
2236
  if (existing) {
@@ -2247,6 +2261,7 @@ var BitfabLangGraphCallbackHandler = class {
2247
2261
  };
2248
2262
  this.invocations.set(runId, invocation);
2249
2263
  effectiveParentId = activeContext?.spanId ?? null;
2264
+ isRootInvocation = true;
2250
2265
  }
2251
2266
  const lgMetadata = extractLangGraphMetadata(metadata);
2252
2267
  const contexts = Object.keys(lgMetadata).length > 0 ? [lgMetadata] : [];
@@ -2269,6 +2284,9 @@ var BitfabLangGraphCallbackHandler = class {
2269
2284
  spanInfo.hidden = true;
2270
2285
  }
2271
2286
  this.runToSpan.set(runId, spanInfo);
2287
+ if (isRootInvocation) {
2288
+ this.sendTraceStart(spanInfo);
2289
+ }
2272
2290
  return spanInfo;
2273
2291
  }
2274
2292
  completeSpan(runId, output, error, extraContexts) {
@@ -2359,11 +2377,35 @@ var BitfabLangGraphCallbackHandler = class {
2359
2377
  } catch {
2360
2378
  }
2361
2379
  }
2380
+ sendTraceStart(rootSpan) {
2381
+ const traceData = {
2382
+ type: "sdk-function",
2383
+ source: "typescript-sdk-langgraph",
2384
+ traceFunctionKey: this.traceFunctionKey,
2385
+ externalTrace: {
2386
+ id: rootSpan.traceId,
2387
+ started_at: rootSpan.startedAt,
2388
+ workflow_name: this.traceFunctionKey
2389
+ },
2390
+ completed: false
2391
+ };
2392
+ const finalized = finalizeTracePayload(traceData);
2393
+ try {
2394
+ this.httpClient.sendExternalTrace(finalized);
2395
+ } catch {
2396
+ }
2397
+ }
2362
2398
  // ── chain callbacks (graph nodes) ─────────────────────────────
2363
- async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata) {
2399
+ async handleChainStart(chain, inputs, runId, parentRunIdOrRunType, tags, metadata, runTypeOrRunName, runNameOrParentRunId) {
2364
2400
  try {
2365
- const idArr = chain.id;
2366
- const name = chain.name ?? idArr?.[idArr.length - 1] ?? "chain";
2401
+ const { parentRunId, runName } = normalizeChainStartArgs(
2402
+ parentRunIdOrRunType,
2403
+ runTypeOrRunName,
2404
+ runNameOrParentRunId
2405
+ );
2406
+ const serialized = chain ?? {};
2407
+ const idArr = serialized.id;
2408
+ const name = runName ?? serialized.name ?? idArr?.[idArr.length - 1] ?? "chain";
2367
2409
  this.startSpan(
2368
2410
  runId,
2369
2411
  parentRunId,
@@ -2398,11 +2440,12 @@ var BitfabLangGraphCallbackHandler = class {
2398
2440
  }
2399
2441
  }
2400
2442
  // ── LLM callbacks ─────────────────────────────────────────────
2401
- async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata) {
2443
+ async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata, runName) {
2402
2444
  try {
2403
- const model = extractModelName(llm, metadata);
2404
- const idArr = llm.id;
2405
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2445
+ const serialized = llm ?? {};
2446
+ const model = extractModelName(serialized, metadata);
2447
+ const idArr = serialized.id;
2448
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2406
2449
  const converted = messages.map((batch) => batch.map(convertMessage));
2407
2450
  const spanInfo = this.startSpan(
2408
2451
  runId,
@@ -2417,11 +2460,12 @@ var BitfabLangGraphCallbackHandler = class {
2417
2460
  } catch {
2418
2461
  }
2419
2462
  }
2420
- async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata) {
2463
+ async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata, runName) {
2421
2464
  try {
2422
- const model = extractModelName(llm, metadata);
2423
- const idArr = llm.id;
2424
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2465
+ const serialized = llm ?? {};
2466
+ const model = extractModelName(serialized, metadata);
2467
+ const idArr = serialized.id;
2468
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2425
2469
  const spanInfo = this.startSpan(
2426
2470
  runId,
2427
2471
  parentRunId,
@@ -2474,9 +2518,10 @@ var BitfabLangGraphCallbackHandler = class {
2474
2518
  async handleLLMNewToken() {
2475
2519
  }
2476
2520
  // ── tool callbacks ────────────────────────────────────────────
2477
- async handleToolStart(tool, input, runId, parentRunId, tags, metadata) {
2521
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {
2478
2522
  try {
2479
- const name = tool.name ?? "tool";
2523
+ const serialized = tool ?? {};
2524
+ const name = runName ?? serialized.name ?? "tool";
2480
2525
  this.startSpan(
2481
2526
  runId,
2482
2527
  parentRunId,
@@ -2506,9 +2551,10 @@ var BitfabLangGraphCallbackHandler = class {
2506
2551
  }
2507
2552
  }
2508
2553
  // ── retriever callbacks ───────────────────────────────────────
2509
- async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata) {
2554
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, runName) {
2510
2555
  try {
2511
- const name = retriever.name ?? "retriever";
2556
+ const serialized = retriever ?? {};
2557
+ const name = runName ?? serialized.name ?? "retriever";
2512
2558
  this.startSpan(
2513
2559
  runId,
2514
2560
  parentRunId,