bitfab 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
@@ -645,7 +645,7 @@ __export(index_exports, {
645
645
  module.exports = __toCommonJS(index_exports);
646
646
 
647
647
  // src/version.generated.ts
648
- var __version__ = "0.27.1";
648
+ var __version__ = "0.27.2";
649
649
 
650
650
  // src/constants.ts
651
651
  var DEFAULT_SERVICE_URL = "https://bitfab.ai";
@@ -2005,6 +2005,7 @@ function buildSnapshotRef(config, sdkWallClockBeforeFn) {
2005
2005
  init_randomUuid();
2006
2006
  init_serialize();
2007
2007
  var LANGSMITH_HIDDEN_TAG = "langsmith:hidden";
2008
+ var CHAIN_RUN_TYPES = /* @__PURE__ */ new Set(["chain", "parser", "prompt"]);
2008
2009
  var LANGGRAPH_METADATA_KEYS = [
2009
2010
  "langgraph_step",
2010
2011
  "langgraph_node",
@@ -2015,6 +2016,18 @@ var LANGGRAPH_METADATA_KEYS = [
2015
2016
  function nowIso2() {
2016
2017
  return (/* @__PURE__ */ new Date()).toISOString();
2017
2018
  }
2019
+ function normalizeChainStartArgs(parentRunIdOrRunType, runTypeOrRunName, runNameOrParentRunId) {
2020
+ if (parentRunIdOrRunType && CHAIN_RUN_TYPES.has(parentRunIdOrRunType)) {
2021
+ return {
2022
+ parentRunId: runNameOrParentRunId,
2023
+ runName: runTypeOrRunName
2024
+ };
2025
+ }
2026
+ return {
2027
+ parentRunId: parentRunIdOrRunType,
2028
+ runName: runNameOrParentRunId
2029
+ };
2030
+ }
2018
2031
  function convertMessage(message) {
2019
2032
  if (typeof message !== "object" || message === null) {
2020
2033
  return { role: "unknown", content: String(message) };
@@ -2226,6 +2239,7 @@ var BitfabLangGraphCallbackHandler = class {
2226
2239
  const willHide = tags?.includes(LANGSMITH_HIDDEN_TAG) === true;
2227
2240
  let invocation;
2228
2241
  let effectiveParentId;
2242
+ let isRootInvocation = false;
2229
2243
  if (parentSpan) {
2230
2244
  const existing = this.invocations.get(parentSpan.rootRunId);
2231
2245
  if (existing) {
@@ -2256,6 +2270,7 @@ var BitfabLangGraphCallbackHandler = class {
2256
2270
  };
2257
2271
  this.invocations.set(runId, invocation);
2258
2272
  effectiveParentId = activeContext?.spanId ?? null;
2273
+ isRootInvocation = true;
2259
2274
  }
2260
2275
  const lgMetadata = extractLangGraphMetadata(metadata);
2261
2276
  const contexts = Object.keys(lgMetadata).length > 0 ? [lgMetadata] : [];
@@ -2278,6 +2293,9 @@ var BitfabLangGraphCallbackHandler = class {
2278
2293
  spanInfo.hidden = true;
2279
2294
  }
2280
2295
  this.runToSpan.set(runId, spanInfo);
2296
+ if (isRootInvocation) {
2297
+ this.sendTraceStart(spanInfo);
2298
+ }
2281
2299
  return spanInfo;
2282
2300
  }
2283
2301
  completeSpan(runId, output, error, extraContexts) {
@@ -2368,11 +2386,35 @@ var BitfabLangGraphCallbackHandler = class {
2368
2386
  } catch {
2369
2387
  }
2370
2388
  }
2389
+ sendTraceStart(rootSpan) {
2390
+ const traceData = {
2391
+ type: "sdk-function",
2392
+ source: "typescript-sdk-langgraph",
2393
+ traceFunctionKey: this.traceFunctionKey,
2394
+ externalTrace: {
2395
+ id: rootSpan.traceId,
2396
+ started_at: rootSpan.startedAt,
2397
+ workflow_name: this.traceFunctionKey
2398
+ },
2399
+ completed: false
2400
+ };
2401
+ const finalized = finalizeTracePayload(traceData);
2402
+ try {
2403
+ this.httpClient.sendExternalTrace(finalized);
2404
+ } catch {
2405
+ }
2406
+ }
2371
2407
  // ── chain callbacks (graph nodes) ─────────────────────────────
2372
- async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata) {
2408
+ async handleChainStart(chain, inputs, runId, parentRunIdOrRunType, tags, metadata, runTypeOrRunName, runNameOrParentRunId) {
2373
2409
  try {
2374
- const idArr = chain.id;
2375
- const name = chain.name ?? idArr?.[idArr.length - 1] ?? "chain";
2410
+ const { parentRunId, runName } = normalizeChainStartArgs(
2411
+ parentRunIdOrRunType,
2412
+ runTypeOrRunName,
2413
+ runNameOrParentRunId
2414
+ );
2415
+ const serialized = chain ?? {};
2416
+ const idArr = serialized.id;
2417
+ const name = runName ?? serialized.name ?? idArr?.[idArr.length - 1] ?? "chain";
2376
2418
  this.startSpan(
2377
2419
  runId,
2378
2420
  parentRunId,
@@ -2407,11 +2449,12 @@ var BitfabLangGraphCallbackHandler = class {
2407
2449
  }
2408
2450
  }
2409
2451
  // ── LLM callbacks ─────────────────────────────────────────────
2410
- async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata) {
2452
+ async handleChatModelStart(llm, messages, runId, parentRunId, _extraParams, tags, metadata, runName) {
2411
2453
  try {
2412
- const model = extractModelName(llm, metadata);
2413
- const idArr = llm.id;
2414
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2454
+ const serialized = llm ?? {};
2455
+ const model = extractModelName(serialized, metadata);
2456
+ const idArr = serialized.id;
2457
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2415
2458
  const converted = messages.map((batch) => batch.map(convertMessage));
2416
2459
  const spanInfo = this.startSpan(
2417
2460
  runId,
@@ -2426,11 +2469,12 @@ var BitfabLangGraphCallbackHandler = class {
2426
2469
  } catch {
2427
2470
  }
2428
2471
  }
2429
- async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata) {
2472
+ async handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata, runName) {
2430
2473
  try {
2431
- const model = extractModelName(llm, metadata);
2432
- const idArr = llm.id;
2433
- const name = model ?? idArr?.[idArr.length - 1] ?? "llm";
2474
+ const serialized = llm ?? {};
2475
+ const model = extractModelName(serialized, metadata);
2476
+ const idArr = serialized.id;
2477
+ const name = runName ?? model ?? idArr?.[idArr.length - 1] ?? "llm";
2434
2478
  const spanInfo = this.startSpan(
2435
2479
  runId,
2436
2480
  parentRunId,
@@ -2483,9 +2527,10 @@ var BitfabLangGraphCallbackHandler = class {
2483
2527
  async handleLLMNewToken() {
2484
2528
  }
2485
2529
  // ── tool callbacks ────────────────────────────────────────────
2486
- async handleToolStart(tool, input, runId, parentRunId, tags, metadata) {
2530
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {
2487
2531
  try {
2488
- const name = tool.name ?? "tool";
2532
+ const serialized = tool ?? {};
2533
+ const name = runName ?? serialized.name ?? "tool";
2489
2534
  this.startSpan(
2490
2535
  runId,
2491
2536
  parentRunId,
@@ -2515,9 +2560,10 @@ var BitfabLangGraphCallbackHandler = class {
2515
2560
  }
2516
2561
  }
2517
2562
  // ── retriever callbacks ───────────────────────────────────────
2518
- async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata) {
2563
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, runName) {
2519
2564
  try {
2520
- const name = retriever.name ?? "retriever";
2565
+ const serialized = retriever ?? {};
2566
+ const name = runName ?? serialized.name ?? "retriever";
2521
2567
  this.startSpan(
2522
2568
  runId,
2523
2569
  parentRunId,