@langchain/langgraph-sdk 1.0.3 → 1.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @langchain/langgraph-sdk
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 379de5e: Fix tool calls arguments not being streamed to the client
8
+
9
+ ### Patch Changes
10
+
11
+ - d08e484: Add support for sending `AbortSignal` to all SDK methods
12
+ - d08e484: Fix `useStream().stop()` not cancelling creation of thread.
13
+
14
+ ## 1.1.0
15
+
16
+ ### Minor Changes
17
+
18
+ - e19e76c: Rename `experimental_thread` to `thread`, allowing replacing built-in history fetching hook with React Query / SWR
19
+ - fa6c009: Add throttle option to `useStream` and batch updates in a macrotask to prevent `Maximum update depth exceeded` error
20
+
21
+ ### Patch Changes
22
+
23
+ - 35e8fc7: Add name parameter to assistants count API.
24
+ - b78a738: feat(sdk): add `includePagination` property when searching from assistants
25
+
3
26
  ## 1.0.3
4
27
 
5
28
  ### Patch Changes
package/dist/client.cjs CHANGED
@@ -177,7 +177,8 @@ var CronsClient = class extends BaseClient {
177
177
  };
178
178
  return this.fetch(`/threads/${threadId}/runs/crons`, {
179
179
  method: "POST",
180
- json
180
+ json,
181
+ signal: payload?.signal
181
182
  });
182
183
  }
183
184
  /**
@@ -204,15 +205,19 @@ var CronsClient = class extends BaseClient {
204
205
  };
205
206
  return this.fetch(`/runs/crons`, {
206
207
  method: "POST",
207
- json
208
+ json,
209
+ signal: payload?.signal
208
210
  });
209
211
  }
210
212
  /**
211
213
  *
212
214
  * @param cronId Cron ID of Cron job to delete.
213
215
  */
214
- async delete(cronId) {
215
- await this.fetch(`/runs/crons/${cronId}`, { method: "DELETE" });
216
+ async delete(cronId, options) {
217
+ await this.fetch(`/runs/crons/${cronId}`, {
218
+ method: "DELETE",
219
+ signal: options?.signal
220
+ });
216
221
  }
217
222
  /**
218
223
  *
@@ -230,7 +235,8 @@ var CronsClient = class extends BaseClient {
230
235
  sort_by: query?.sortBy ?? void 0,
231
236
  sort_order: query?.sortOrder ?? void 0,
232
237
  select: query?.select ?? void 0
233
- }
238
+ },
239
+ signal: query?.signal
234
240
  });
235
241
  }
236
242
  /**
@@ -246,7 +252,8 @@ var CronsClient = class extends BaseClient {
246
252
  json: {
247
253
  assistant_id: query?.assistantId ?? void 0,
248
254
  thread_id: query?.threadId ?? void 0
249
- }
255
+ },
256
+ signal: query?.signal
250
257
  });
251
258
  }
252
259
  };
@@ -257,8 +264,8 @@ var AssistantsClient = class extends BaseClient {
257
264
  * @param assistantId The ID of the assistant.
258
265
  * @returns Assistant
259
266
  */
260
- async get(assistantId) {
261
- return this.fetch(`/assistants/${assistantId}`);
267
+ async get(assistantId, options) {
268
+ return this.fetch(`/assistants/${assistantId}`, { signal: options?.signal });
262
269
  }
263
270
  /**
264
271
  * Get the JSON representation of the graph assigned to a runnable
@@ -267,15 +274,18 @@ var AssistantsClient = class extends BaseClient {
267
274
  * @returns Serialized graph
268
275
  */
269
276
  async getGraph(assistantId, options) {
270
- return this.fetch(`/assistants/${assistantId}/graph`, { params: { xray: options?.xray } });
277
+ return this.fetch(`/assistants/${assistantId}/graph`, {
278
+ params: { xray: options?.xray },
279
+ signal: options?.signal
280
+ });
271
281
  }
272
282
  /**
273
283
  * Get the state and config schema of the graph assigned to a runnable
274
284
  * @param assistantId The ID of the assistant.
275
285
  * @returns Graph schema
276
286
  */
277
- async getSchemas(assistantId) {
278
- return this.fetch(`/assistants/${assistantId}/schemas`);
287
+ async getSchemas(assistantId, options) {
288
+ return this.fetch(`/assistants/${assistantId}/schemas`, { signal: options?.signal });
279
289
  }
280
290
  /**
281
291
  * Get the schemas of an assistant by ID.
@@ -285,8 +295,14 @@ var AssistantsClient = class extends BaseClient {
285
295
  * @returns The subgraphs of the assistant.
286
296
  */
287
297
  async getSubgraphs(assistantId, options) {
288
- if (options?.namespace) return this.fetch(`/assistants/${assistantId}/subgraphs/${options.namespace}`, { params: { recurse: options?.recurse } });
289
- return this.fetch(`/assistants/${assistantId}/subgraphs`, { params: { recurse: options?.recurse } });
298
+ if (options?.namespace) return this.fetch(`/assistants/${assistantId}/subgraphs/${options.namespace}`, {
299
+ params: { recurse: options?.recurse },
300
+ signal: options?.signal
301
+ });
302
+ return this.fetch(`/assistants/${assistantId}/subgraphs`, {
303
+ params: { recurse: options?.recurse },
304
+ signal: options?.signal
305
+ });
290
306
  }
291
307
  /**
292
308
  * Create a new assistant.
@@ -305,7 +321,8 @@ var AssistantsClient = class extends BaseClient {
305
321
  if_exists: payload.ifExists,
306
322
  name: payload.name,
307
323
  description: payload.description
308
- }
324
+ },
325
+ signal: payload.signal
309
326
  });
310
327
  }
311
328
  /**
@@ -324,7 +341,8 @@ var AssistantsClient = class extends BaseClient {
324
341
  metadata: payload.metadata,
325
342
  name: payload.name,
326
343
  description: payload.description
327
- }
344
+ },
345
+ signal: payload.signal
328
346
  });
329
347
  }
330
348
  /**
@@ -332,34 +350,44 @@ var AssistantsClient = class extends BaseClient {
332
350
  *
333
351
  * @param assistantId ID of the assistant.
334
352
  */
335
- async delete(assistantId) {
336
- return this.fetch(`/assistants/${assistantId}`, { method: "DELETE" });
353
+ async delete(assistantId, options) {
354
+ return this.fetch(`/assistants/${assistantId}`, {
355
+ method: "DELETE",
356
+ signal: options?.signal
357
+ });
337
358
  }
338
- /**
339
- * List assistants.
340
- * @param query Query options.
341
- * @returns List of assistants.
342
- */
343
359
  async search(query) {
344
- return this.fetch("/assistants/search", {
360
+ const json = {
361
+ graph_id: query?.graphId ?? void 0,
362
+ name: query?.name ?? void 0,
363
+ metadata: query?.metadata ?? void 0,
364
+ limit: query?.limit ?? 10,
365
+ offset: query?.offset ?? 0,
366
+ sort_by: query?.sortBy ?? void 0,
367
+ sort_order: query?.sortOrder ?? void 0,
368
+ select: query?.select ?? void 0
369
+ };
370
+ const [assistants, response] = await this.fetch("/assistants/search", {
345
371
  method: "POST",
346
- json: {
347
- graph_id: query?.graphId ?? void 0,
348
- name: query?.name ?? void 0,
349
- metadata: query?.metadata ?? void 0,
350
- limit: query?.limit ?? 10,
351
- offset: query?.offset ?? 0,
352
- sort_by: query?.sortBy ?? void 0,
353
- sort_order: query?.sortOrder ?? void 0,
354
- select: query?.select ?? void 0
355
- }
372
+ json,
373
+ withResponse: true,
374
+ signal: query?.signal
356
375
  });
376
+ if (query?.includePagination) {
377
+ const next = response.headers.get("X-Pagination-Next");
378
+ return {
379
+ assistants,
380
+ next
381
+ };
382
+ }
383
+ return assistants;
357
384
  }
358
385
  /**
359
386
  * Count assistants matching filters.
360
387
  *
361
388
  * @param query.metadata Metadata to filter by. Exact match for each key/value.
362
389
  * @param query.graphId Optional graph id to filter by.
390
+ * @param query.name Optional name to filter by.
363
391
  * @returns Number of assistants matching the criteria.
364
392
  */
365
393
  async count(query) {
@@ -367,8 +395,10 @@ var AssistantsClient = class extends BaseClient {
367
395
  method: "POST",
368
396
  json: {
369
397
  metadata: query?.metadata ?? void 0,
370
- graph_id: query?.graphId ?? void 0
371
- }
398
+ graph_id: query?.graphId ?? void 0,
399
+ name: query?.name ?? void 0
400
+ },
401
+ signal: query?.signal
372
402
  });
373
403
  }
374
404
  /**
@@ -384,7 +414,8 @@ var AssistantsClient = class extends BaseClient {
384
414
  metadata: payload?.metadata ?? void 0,
385
415
  limit: payload?.limit ?? 10,
386
416
  offset: payload?.offset ?? 0
387
- }
417
+ },
418
+ signal: payload?.signal
388
419
  });
389
420
  }
390
421
  /**
@@ -394,10 +425,11 @@ var AssistantsClient = class extends BaseClient {
394
425
  * @param version The version to change to.
395
426
  * @returns The updated assistant.
396
427
  */
397
- async setLatest(assistantId, version) {
428
+ async setLatest(assistantId, version, options) {
398
429
  return this.fetch(`/assistants/${assistantId}/latest`, {
399
430
  method: "POST",
400
- json: { version }
431
+ json: { version },
432
+ signal: options?.signal
401
433
  });
402
434
  }
403
435
  };
@@ -408,8 +440,8 @@ var ThreadsClient = class extends BaseClient {
408
440
  * @param threadId ID of the thread.
409
441
  * @returns The thread.
410
442
  */
411
- async get(threadId) {
412
- return this.fetch(`/threads/${threadId}`);
443
+ async get(threadId, options) {
444
+ return this.fetch(`/threads/${threadId}`, { signal: options?.signal });
413
445
  }
414
446
  /**
415
447
  * Create a new thread.
@@ -437,7 +469,8 @@ var ThreadsClient = class extends BaseClient {
437
469
  as_node: u.asNode
438
470
  })) })),
439
471
  ttl: ttlPayload
440
- }
472
+ },
473
+ signal: payload?.signal
441
474
  });
442
475
  }
443
476
  /**
@@ -445,8 +478,11 @@ var ThreadsClient = class extends BaseClient {
445
478
  * @param threadId ID of the thread to be copied
446
479
  * @returns Newly copied thread
447
480
  */
448
- async copy(threadId) {
449
- return this.fetch(`/threads/${threadId}/copy`, { method: "POST" });
481
+ async copy(threadId, options) {
482
+ return this.fetch(`/threads/${threadId}/copy`, {
483
+ method: "POST",
484
+ signal: options?.signal
485
+ });
450
486
  }
451
487
  /**
452
488
  * Update a thread.
@@ -465,7 +501,8 @@ var ThreadsClient = class extends BaseClient {
465
501
  json: {
466
502
  metadata: payload?.metadata,
467
503
  ttl: ttlPayload
468
- }
504
+ },
505
+ signal: payload?.signal
469
506
  });
470
507
  }
471
508
  /**
@@ -473,8 +510,11 @@ var ThreadsClient = class extends BaseClient {
473
510
  *
474
511
  * @param threadId ID of the thread.
475
512
  */
476
- async delete(threadId) {
477
- return this.fetch(`/threads/${threadId}`, { method: "DELETE" });
513
+ async delete(threadId, options) {
514
+ return this.fetch(`/threads/${threadId}`, {
515
+ method: "DELETE",
516
+ signal: options?.signal
517
+ });
478
518
  }
479
519
  /**
480
520
  * List threads
@@ -495,7 +535,8 @@ var ThreadsClient = class extends BaseClient {
495
535
  sort_order: query?.sortOrder,
496
536
  select: query?.select ?? void 0,
497
537
  values: query?.values ?? void 0
498
- }
538
+ },
539
+ signal: query?.signal
499
540
  });
500
541
  }
501
542
  /**
@@ -513,7 +554,8 @@ var ThreadsClient = class extends BaseClient {
513
554
  metadata: query?.metadata ?? void 0,
514
555
  values: query?.values ?? void 0,
515
556
  status: query?.status ?? void 0
516
- }
557
+ },
558
+ signal: query?.signal
517
559
  });
518
560
  }
519
561
  /**
@@ -529,11 +571,18 @@ var ThreadsClient = class extends BaseClient {
529
571
  json: {
530
572
  checkpoint,
531
573
  subgraphs: options?.subgraphs
532
- }
574
+ },
575
+ signal: options?.signal
576
+ });
577
+ return this.fetch(`/threads/${threadId}/state/${checkpoint}`, {
578
+ params: { subgraphs: options?.subgraphs },
579
+ signal: options?.signal
533
580
  });
534
- return this.fetch(`/threads/${threadId}/state/${checkpoint}`, { params: { subgraphs: options?.subgraphs } });
535
581
  }
536
- return this.fetch(`/threads/${threadId}/state`, { params: { subgraphs: options?.subgraphs } });
582
+ return this.fetch(`/threads/${threadId}/state`, {
583
+ params: { subgraphs: options?.subgraphs },
584
+ signal: options?.signal
585
+ });
537
586
  }
538
587
  /**
539
588
  * Add state to a thread.
@@ -549,7 +598,8 @@ var ThreadsClient = class extends BaseClient {
549
598
  checkpoint_id: options.checkpointId,
550
599
  checkpoint: options.checkpoint,
551
600
  as_node: options?.asNode
552
- }
601
+ },
602
+ signal: options?.signal
553
603
  });
554
604
  }
555
605
  /**
@@ -558,7 +608,7 @@ var ThreadsClient = class extends BaseClient {
558
608
  * @param threadIdOrConfig Thread ID or config to patch the state of.
559
609
  * @param metadata Metadata to patch the state with.
560
610
  */
561
- async patchState(threadIdOrConfig, metadata) {
611
+ async patchState(threadIdOrConfig, metadata, options) {
562
612
  let threadId;
563
613
  if (typeof threadIdOrConfig !== "string") {
564
614
  if (typeof threadIdOrConfig.configurable?.thread_id !== "string") throw new Error("Thread ID is required when updating state with a config.");
@@ -566,7 +616,8 @@ var ThreadsClient = class extends BaseClient {
566
616
  } else threadId = threadIdOrConfig;
567
617
  return this.fetch(`/threads/${threadId}/state`, {
568
618
  method: "PATCH",
569
- json: { metadata }
619
+ json: { metadata },
620
+ signal: options?.signal
570
621
  });
571
622
  }
572
623
  /**
@@ -584,14 +635,16 @@ var ThreadsClient = class extends BaseClient {
584
635
  before: options?.before,
585
636
  metadata: options?.metadata,
586
637
  checkpoint: options?.checkpoint
587
- }
638
+ },
639
+ signal: options?.signal
588
640
  });
589
641
  }
590
642
  async *joinStream(threadId, options) {
591
643
  let [url, init] = this.prepareFetchOptions(`/threads/${threadId}/stream`, {
592
644
  method: "GET",
593
645
  headers: options?.lastEventId ? { "Last-Event-ID": options.lastEventId } : void 0,
594
- params: options?.streamMode ? { stream_mode: options.streamMode } : void 0
646
+ params: options?.streamMode ? { stream_mode: options.streamMode } : void 0,
647
+ signal: options?.signal
595
648
  });
596
649
  if (this.onRequest != null) init = await this.onRequest(url, init);
597
650
  const response = await this.asyncCaller.fetch(url, init);
@@ -697,7 +750,7 @@ var RunsClient = class extends BaseClient {
697
750
  * @param payloads An array of payloads for creating runs.
698
751
  * @returns An array of created runs.
699
752
  */
700
- async createBatch(payloads) {
753
+ async createBatch(payloads, options) {
701
754
  const filteredPayloads = payloads.map((payload) => ({
702
755
  ...payload,
703
756
  assistant_id: payload.assistantId
@@ -706,7 +759,8 @@ var RunsClient = class extends BaseClient {
706
759
  });
707
760
  return this.fetch("/runs/batch", {
708
761
  method: "POST",
709
- json: filteredPayloads
762
+ json: filteredPayloads,
763
+ signal: options?.signal
710
764
  });
711
765
  }
712
766
  /**
@@ -764,12 +818,15 @@ var RunsClient = class extends BaseClient {
764
818
  * @returns List of runs.
765
819
  */
766
820
  async list(threadId, options) {
767
- return this.fetch(`/threads/${threadId}/runs`, { params: {
768
- limit: options?.limit ?? 10,
769
- offset: options?.offset ?? 0,
770
- status: options?.status ?? void 0,
771
- select: options?.select ?? void 0
772
- } });
821
+ return this.fetch(`/threads/${threadId}/runs`, {
822
+ params: {
823
+ limit: options?.limit ?? 10,
824
+ offset: options?.offset ?? 0,
825
+ status: options?.status ?? void 0,
826
+ select: options?.select ?? void 0
827
+ },
828
+ signal: options?.signal
829
+ });
773
830
  }
774
831
  /**
775
832
  * Get a run by ID.
@@ -778,8 +835,8 @@ var RunsClient = class extends BaseClient {
778
835
  * @param runId The ID of the run.
779
836
  * @returns The run.
780
837
  */
781
- async get(threadId, runId) {
782
- return this.fetch(`/threads/${threadId}/runs/${runId}`);
838
+ async get(threadId, runId, options) {
839
+ return this.fetch(`/threads/${threadId}/runs/${runId}`, { signal: options?.signal });
783
840
  }
784
841
  /**
785
842
  * Cancel a run.
@@ -790,13 +847,14 @@ var RunsClient = class extends BaseClient {
790
847
  * @param action Action to take when cancelling the run. Possible values are `interrupt` or `rollback`. Default is `interrupt`.
791
848
  * @returns
792
849
  */
793
- async cancel(threadId, runId, wait = false, action = "interrupt") {
850
+ async cancel(threadId, runId, wait = false, action = "interrupt", options = {}) {
794
851
  return this.fetch(`/threads/${threadId}/runs/${runId}/cancel`, {
795
852
  method: "POST",
796
853
  params: {
797
854
  wait: wait ? "1" : "0",
798
855
  action
799
- }
856
+ },
857
+ signal: options?.signal
800
858
  });
801
859
  }
802
860
  /**
@@ -850,8 +908,11 @@ var RunsClient = class extends BaseClient {
850
908
  * @param runId The ID of the run.
851
909
  * @returns
852
910
  */
853
- async delete(threadId, runId) {
854
- return this.fetch(`/threads/${threadId}/runs/${runId}`, { method: "DELETE" });
911
+ async delete(threadId, runId, options) {
912
+ return this.fetch(`/threads/${threadId}/runs/${runId}`, {
913
+ method: "DELETE",
914
+ signal: options?.signal
915
+ });
855
916
  }
856
917
  };
857
918
  var StoreClient = class extends BaseClient {
@@ -888,7 +949,8 @@ var StoreClient = class extends BaseClient {
888
949
  };
889
950
  return this.fetch("/store/items", {
890
951
  method: "PUT",
891
- json: payload
952
+ json: payload,
953
+ signal: options?.signal
892
954
  });
893
955
  }
894
956
  /**
@@ -925,7 +987,10 @@ var StoreClient = class extends BaseClient {
925
987
  key
926
988
  };
927
989
  if (options?.refreshTtl !== void 0) params.refresh_ttl = options.refreshTtl;
928
- const response = await this.fetch("/store/items", { params });
990
+ const response = await this.fetch("/store/items", {
991
+ params,
992
+ signal: options?.signal
993
+ });
929
994
  return response ? {
930
995
  ...response,
931
996
  createdAt: response.created_at,
@@ -939,7 +1004,7 @@ var StoreClient = class extends BaseClient {
939
1004
  * @param key The unique identifier for the item.
940
1005
  * @returns Promise<void>
941
1006
  */
942
- async deleteItem(namespace, key) {
1007
+ async deleteItem(namespace, key, options) {
943
1008
  namespace.forEach((label) => {
944
1009
  if (label.includes(".")) throw new Error(`Invalid namespace label '${label}'. Namespace labels cannot contain periods ('.')`);
945
1010
  });
@@ -948,7 +1013,8 @@ var StoreClient = class extends BaseClient {
948
1013
  json: {
949
1014
  namespace,
950
1015
  key
951
- }
1016
+ },
1017
+ signal: options?.signal
952
1018
  });
953
1019
  }
954
1020
  /**
@@ -998,7 +1064,8 @@ var StoreClient = class extends BaseClient {
998
1064
  };
999
1065
  const response = await this.fetch("/store/items/search", {
1000
1066
  method: "POST",
1001
- json: payload
1067
+ json: payload,
1068
+ signal: options?.signal
1002
1069
  });
1003
1070
  return { items: response.items.map((item) => ({
1004
1071
  ...item,
@@ -1026,7 +1093,8 @@ var StoreClient = class extends BaseClient {
1026
1093
  };
1027
1094
  return this.fetch("/store/namespaces", {
1028
1095
  method: "POST",
1029
- json: payload
1096
+ json: payload,
1097
+ signal: options?.signal
1030
1098
  });
1031
1099
  }
1032
1100
  };