langgraph-api 0.19.0.dev2__py3-none-any.whl → 0.19.0.dev4__py3-none-any.whl

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.
Files changed (31) hide show
  1. langgraph_api/__init__.py +1 -1
  2. langgraph_api/api/meta.py +2 -0
  3. langgraph_api/api/runs.py +2 -1
  4. langgraph_api/api/store.py +5 -1
  5. langgraph_api/api/threads.py +7 -1
  6. langgraph_api/config/__init__.py +15 -10
  7. langgraph_api/event_streaming/service.py +5 -3
  8. langgraph_api/graph.py +10 -1
  9. langgraph_api/grpc/ops/runs.py +57 -7
  10. langgraph_api/grpc/ops/threads.py +14 -0
  11. langgraph_api/js/remote.py +20 -2
  12. langgraph_api/metadata.py +8 -2
  13. langgraph_api/middleware/ensure_store.py +4 -0
  14. langgraph_api/models/run.py +11 -2
  15. langgraph_api/priority_settings.py +12 -1
  16. langgraph_api/serde.py +10 -1
  17. langgraph_api/stream.py +66 -32
  18. langgraph_api/tracing_session.py +95 -10
  19. langgraph_api/validation.py +1 -0
  20. langgraph_api/worker.py +33 -33
  21. {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/METADATA +2 -2
  22. {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/RECORD +31 -31
  23. langgraph_grpc_common/proto/checkpointer_pb2.py +22 -22
  24. langgraph_grpc_common/proto/checkpointer_pb2.pyi +5 -1
  25. langgraph_grpc_common/proto/core_api_pb2.py +162 -162
  26. langgraph_grpc_common/proto/core_api_pb2.pyi +28 -3
  27. langgraph_grpc_common/serde.py +10 -1
  28. openapi.json +17 -0
  29. {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/WHEEL +0 -0
  30. {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/entry_points.txt +0 -0
  31. {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/licenses/LICENSE +0 -0
langgraph_api/stream.py CHANGED
@@ -1,6 +1,8 @@
1
1
  import asyncio
2
+ import itertools
3
+ import time
2
4
  import uuid
3
- from collections.abc import AsyncIterator, Callable
5
+ from collections.abc import AsyncIterator, Awaitable, Callable
4
6
  from contextlib import AsyncExitStack, aclosing, asynccontextmanager, suppress
5
7
  from functools import lru_cache
6
8
  from typing import TYPE_CHECKING, Any, cast
@@ -25,7 +27,6 @@ from langgraph.errors import (
25
27
  InvalidUpdateError,
26
28
  )
27
29
  from langgraph.pregel.debug import CheckpointPayload, TaskResultPayload
28
- from langsmith.utils import get_tracer_project
29
30
  from pydantic import ValidationError
30
31
  from pydantic.v1 import ValidationError as ValidationErrorLegacy
31
32
 
@@ -47,9 +48,10 @@ from langgraph_api.feature_flags import (
47
48
  USE_RUNTIME_CONTEXT_API,
48
49
  )
49
50
  from langgraph_api.graph import get_graph
51
+ from langgraph_api.grpc.ops.runs import Runs as GrpcRuns
50
52
  from langgraph_api.grpc.ops.runs import StreamPublishException
51
53
  from langgraph_api.js.base import BaseRemotePregel
52
- from langgraph_api.metadata import HOST, PLAN, USER_API_URL, incr_nodes
54
+ from langgraph_api.metadata import HOST, USER_API_URL, current_plan, incr_nodes
53
55
  from langgraph_api.metrics_otlp import (
54
56
  COUNTER_STREAMING_DATA_LOSS,
55
57
  GAUGE_PUBLISH_QUEUE_AVAILABILITY,
@@ -65,6 +67,7 @@ from langgraph_api.stream_v2 import (
65
67
  normalize_protocol_event,
66
68
  )
67
69
  from langgraph_api.utils.config import run_in_executor
70
+ from langgraph_api.utils.uuids import uuid7
68
71
 
69
72
  if TYPE_CHECKING:
70
73
  from langchain_core.runnables import RunnableConfig
@@ -73,7 +76,7 @@ if IS_POSTGRES_OR_GRPC_BACKEND:
73
76
  from langgraph_api.grpc.ops import Runs
74
77
  else:
75
78
  from langgraph_runtime.ops import Runs
76
-
79
+ from langgraph_api.tracing_session import run_tracing_replicas
77
80
 
78
81
  logger = structlog.stdlib.get_logger(__name__)
79
82
 
@@ -192,19 +195,21 @@ async def astream_state(
192
195
  # Remove the internal marker before the graph receives or persists the configuration.
193
196
  context_provided_by_caller = configurable.pop("__context_provided__", False)
194
197
  stack = AsyncExitStack()
198
+ store = await api_store.get_store()
199
+ checkpointer = None if temporary else await api_checkpointer.get_checkpointer()
200
+ graph_load_start = time.perf_counter()
195
201
  graph = await stack.enter_async_context(
196
202
  get_graph(
197
203
  configurable["graph_id"],
198
204
  config,
199
- store=(await api_store.get_store()),
200
- checkpointer=None
201
- if temporary
202
- else await api_checkpointer.get_checkpointer(),
205
+ store=store,
206
+ checkpointer=checkpointer,
203
207
  access_context="threads.create_run",
204
208
  run_id=run_id,
205
209
  context=context,
206
210
  )
207
211
  )
212
+ graph_load_ms = round((time.perf_counter() - graph_load_start) * 1000, 2)
208
213
 
209
214
  # Filter context with the request's authentication context when the graph is remote.
210
215
  if context and USE_RUNTIME_CONTEXT_API:
@@ -291,11 +296,14 @@ async def astream_state(
291
296
  # attach langgraph metadata
292
297
  config["metadata"]["langgraph_version"] = langgraph.version.__version__
293
298
  config["metadata"]["langgraph_api_version"] = __version__
294
- config["metadata"]["langgraph_plan"] = PLAN
299
+ config["metadata"]["langgraph_plan"] = current_plan()
295
300
  config["metadata"]["langgraph_host"] = HOST
296
301
  config["metadata"]["langgraph_api_url"] = USER_API_URL
297
- # attach node counter
298
302
  if not is_remote_pregel:
303
+ # For remote (JS) graphs this would only time building the proxy, not
304
+ # the sidecar's graph load.
305
+ config["metadata"]["langgraph_graph_load_ms"] = graph_load_ms
306
+ # attach node counter
299
307
  configurable["__pregel_node_finished"] = incr_nodes
300
308
 
301
309
  # attach run_id to config
@@ -341,26 +349,9 @@ async def astream_state(
341
349
  # yield metadata chunk
342
350
  yield "metadata", {"run_id": run_id, "attempt": attempt}
343
351
 
344
- # is a langsmith tracing project is specified, additionally pass that in to tracing context
345
- if ls_project := configurable.get("__langsmith_project__"):
346
- updates = None
347
- if example_id := configurable.get("__langsmith_example_id__"):
348
- updates = {"reference_example_id": example_id}
349
-
350
- await stack.enter_async_context(
351
- async_tracing_context(
352
- replicas=[
353
- {
354
- "project_name": ls_project,
355
- "updates": updates,
356
- },
357
- {
358
- "project_name": get_tracer_project(),
359
- "updates": None,
360
- },
361
- ]
362
- )
363
- )
352
+ # If a langsmith tracing destination (project or agent) is specified, additionally pass it in to tracing context
353
+ if replicas := run_tracing_replicas(configurable):
354
+ await stack.enter_async_context(async_tracing_context(replicas=replicas))
364
355
 
365
356
  # stream run
366
357
  if use_astream_events:
@@ -703,6 +694,41 @@ def get_stream_event_type(mode: str) -> str:
703
694
  return mode.split("|", maxsplit=1)[0]
704
695
 
705
696
 
697
+ def publish_event(
698
+ run_id: str | uuid.UUID,
699
+ mode: str,
700
+ payload: bytes,
701
+ *,
702
+ thread_id: str | uuid.UUID,
703
+ resumable: bool,
704
+ publisher_id: str,
705
+ seq: int,
706
+ ) -> Awaitable[None]:
707
+ """Publish one run event as event `seq` of publisher `publisher_id`.
708
+
709
+ The Redis publish scripts drop a retried publish instead of adding it twice.
710
+ Each consume call numbers its events under a fresh publisher id, so a
711
+ re-executed run (a new consume call) is never mistaken for a retry of an
712
+ earlier attempt; a single event, like the worker's terminal error, gets a
713
+ publisher id of its own with seq 0.
714
+ """
715
+ if IS_POSTGRES_OR_GRPC_BACKEND:
716
+ return GrpcRuns.Stream.publish(
717
+ run_id,
718
+ mode,
719
+ payload,
720
+ thread_id=thread_id,
721
+ resumable=resumable,
722
+ publisher_id=publisher_id,
723
+ seq=seq,
724
+ )
725
+ # langgraph-runtime-inmem is a separate package whose publish takes no such
726
+ # keywords, and its in-process publish never retries.
727
+ return Runs.Stream.publish(
728
+ run_id, mode, payload, thread_id=thread_id, resumable=resumable
729
+ )
730
+
731
+
706
732
  async def consume(
707
733
  stream: AnyStream,
708
734
  run_id: str | uuid.UUID,
@@ -751,6 +777,8 @@ async def _consume_inline(
751
777
  This preserves natural backpressure: each event must be published before the
752
778
  next one is consumed.
753
779
  """
780
+ publisher_id = uuid7().hex
781
+ seqs = itertools.count()
754
782
  publishing = True
755
783
  async with aclosing(stream):
756
784
  try:
@@ -765,12 +793,14 @@ async def _consume_inline(
765
793
  LATENCY_STREAM_PUBLISH,
766
794
  attributes={"stream_event_type": event_type},
767
795
  ):
768
- await Runs.Stream.publish(
796
+ await publish_event(
769
797
  run_id,
770
798
  mode,
771
799
  payload_bytes,
772
800
  thread_id=thread_id,
773
801
  resumable=is_resumable,
802
+ publisher_id=publisher_id,
803
+ seq=next(seqs),
774
804
  )
775
805
  except StreamPublishException as e:
776
806
  # Stop publishing for the rest of the run: transient errors
@@ -816,6 +846,8 @@ async def _consume_async_queue(
816
846
  maxsize=LSD_PUBLISH_QUEUE_SIZE
817
847
  )
818
848
  publish_sentinel = object()
849
+ publisher_id = uuid7().hex
850
+ seqs = itertools.count()
819
851
 
820
852
  async def _publish_worker() -> None:
821
853
  while True:
@@ -831,12 +863,14 @@ async def _consume_async_queue(
831
863
  LATENCY_STREAM_PUBLISH,
832
864
  attributes={"stream_event_type": event_type},
833
865
  ):
834
- await Runs.Stream.publish(
866
+ await publish_event(
835
867
  run_id,
836
868
  mode,
837
869
  payload_bytes,
838
870
  thread_id=thread_id,
839
871
  resumable=is_resumable,
872
+ publisher_id=publisher_id,
873
+ seq=next(seqs),
840
874
  )
841
875
  reporter.record_histogram(
842
876
  HISTOGRAM_STREAM_DATA_SIZE,
@@ -3,20 +3,105 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from collections.abc import Mapping
6
- from typing import Any
6
+ from typing import TYPE_CHECKING, Any
7
7
 
8
- from langsmith.utils import get_tracer_project
8
+ import structlog
9
+ from langsmith.utils import LangSmithUserError, get_tracer_project
9
10
 
11
+ try:
12
+ from langsmith.address import ( # ty: ignore[unresolved-import]
13
+ EnvAddressError,
14
+ resolve_destination,
15
+ )
10
16
 
11
- def resolve_tracing_session_name(payload: Mapping[str, Any]) -> str:
17
+ ADDRESS_SUPPORT = True
18
+ except ImportError:
19
+ # langsmith predates agent addressing: runs trace into projects only.
20
+ ADDRESS_SUPPORT = False
21
+
22
+ if TYPE_CHECKING:
23
+ from langsmith.address import AgentAddress # ty: ignore[unresolved-import]
24
+
25
+ logger = structlog.stdlib.get_logger(__name__)
26
+
27
+ Destination = tuple[str | None, "AgentAddress | None"]
28
+
29
+
30
+ def tracer_destination(payload: Mapping[str, Any]) -> Destination | None:
31
+ """Return the destination a run's ``langsmith_tracer`` names, as ``(project, address)``.
32
+
33
+ ``None`` when it names neither. A run goes to one or the other.
34
+
35
+ Raises:
36
+ ValueError: If the address is malformed, both are named, or the installed
37
+ langsmith cannot trace to an address.
38
+ """
39
+ ls_tracing = payload.get("langsmith_tracer")
40
+ if not isinstance(ls_tracing, Mapping):
41
+ return None
42
+ project_name = ls_tracing.get("project_name") or None
43
+ if project_name is not None and not isinstance(project_name, str):
44
+ raise ValueError("langsmith_tracer.project_name must be a string.")
45
+ address = ls_tracing.get("address")
46
+ if address is not None and not ADDRESS_SUPPORT:
47
+ raise ValueError(
48
+ "langsmith_tracer.address is not supported by the langsmith version installed here."
49
+ )
50
+ if project_name is None and address is None:
51
+ return None
52
+ if not ADDRESS_SUPPORT:
53
+ return project_name, None
54
+ try:
55
+ return resolve_destination(project_name, address)
56
+ except LangSmithUserError as exc:
57
+ raise ValueError(f"Invalid langsmith_tracer: {exc}") from None
58
+
59
+
60
+ def deployment_destination() -> Destination:
61
+ """The destination the deployment's own env vars trace into."""
62
+ if not ADDRESS_SUPPORT:
63
+ return get_tracer_project(), None
64
+ try:
65
+ return resolve_destination()
66
+ except EnvAddressError:
67
+ logger.exception(
68
+ "Invalid LANGSMITH_AGENT_* configuration; tracing to the default project instead"
69
+ )
70
+ return get_tracer_project(), None
71
+
72
+
73
+ def resolve_tracing_session_name(payload: Mapping[str, Any]) -> str | None:
12
74
  """Return the LangSmith session (project) name for a run.
13
75
 
14
76
  Per-run ``langsmith_tracer.project_name`` overrides the deployment default
15
- from ``LANGSMITH_PROJECT`` / ``LANGCHAIN_PROJECT``.
77
+ from ``LANGSMITH_PROJECT`` / ``LANGCHAIN_PROJECT``. A run addressed to an
78
+ agent, per run or by the deployment, has no project name: the endpoint
79
+ resolves the address to its project.
16
80
  """
17
- ls_tracing = payload.get("langsmith_tracer")
18
- if isinstance(ls_tracing, Mapping):
19
- project_name = ls_tracing.get("project_name")
20
- if isinstance(project_name, str) and project_name:
21
- return project_name
22
- return get_tracer_project()
81
+ project_name, _ = tracer_destination(payload) or deployment_destination()
82
+ return project_name
83
+
84
+
85
+ def _replica(project_name: str | None, address: AgentAddress | None) -> dict[str, Any]:
86
+ return {"address": address} if address else {"project_name": project_name}
87
+
88
+
89
+ def run_tracing_replicas(
90
+ configurable: Mapping[str, Any],
91
+ ) -> list[dict[str, Any]] | None:
92
+ """Replicas for a run that names its own tracing destination, or ``None``.
93
+
94
+ The run's destination comes first, then the deployment's default one, so the
95
+ run lands in both.
96
+ """
97
+ project_name = configurable.get("__langsmith_project__") or None
98
+ address = configurable.get("__langsmith_address__") or None
99
+ if project_name is None and address is None:
100
+ return None
101
+ updates = None
102
+ if example_id := configurable.get("__langsmith_example_id__"):
103
+ updates = {"reference_example_id": example_id}
104
+ return [
105
+ {**_replica(project_name, address), "updates": updates},
106
+ {**_replica(*deployment_destination()), "updates": None},
107
+ ]
@@ -23,6 +23,7 @@ RESERVED_CONFIGURABLE_KEYS = (
23
23
  "langgraph_auth_permissions",
24
24
  "langgraph_request_id",
25
25
  "__langsmith_project__",
26
+ "__langsmith_address__",
26
27
  "__langsmith_example_id__",
27
28
  "__request_start_time_ms__",
28
29
  "__after_seconds__",
langgraph_api/worker.py CHANGED
@@ -39,7 +39,8 @@ from langgraph_api.metrics_otlp import (
39
39
  )
40
40
  from langgraph_api.schema import Run, StreamMode
41
41
  from langgraph_api.serde import json_dumpb
42
- from langgraph_api.stream import AnyStream, consume
42
+ from langgraph_api.stream import AnyStream, consume, publish_event
43
+ from langgraph_api.utils.uuids import uuid7
43
44
  from langgraph_api.worker_runtime import (
44
45
  ALL_RETRIABLE_EXCEPTIONS,
45
46
  DRAIN_POLICY,
@@ -297,14 +298,9 @@ async def worker(
297
298
  **log_info,
298
299
  )
299
300
  # Without it, every stream shows a timed-out run as a success.
300
- with suppress(Exception):
301
- await Runs.Stream.publish(
302
- run_id,
303
- "error",
304
- json_dumpb(exception),
305
- thread_id=run["thread_id"],
306
- resumable=resumable,
307
- )
301
+ await _publish_error(
302
+ run_id, run["thread_id"], exception, resumable=resumable
303
+ )
308
304
  if not temporary:
309
305
  await Threads.set_joint_status(
310
306
  conn,
@@ -318,14 +314,9 @@ async def worker(
318
314
  exception=exception,
319
315
  )
320
316
  elif isinstance(exception, UserRollback):
321
- with suppress(Exception):
322
- await Runs.Stream.publish(
323
- run_id,
324
- "error",
325
- json_dumpb(exception),
326
- thread_id=run["thread_id"],
327
- resumable=resumable,
328
- )
317
+ await _publish_error(
318
+ run_id, run["thread_id"], exception, resumable=resumable
319
+ )
329
320
  status = "rollback"
330
321
  reporter.inc_counter(
331
322
  COUNTER_RUN_CANCELED_BY_REQUEST,
@@ -371,14 +362,9 @@ async def worker(
371
362
  reason=str(exception),
372
363
  **log_info,
373
364
  )
374
- with suppress(Exception):
375
- await Runs.Stream.publish(
376
- run_id,
377
- "error",
378
- json_dumpb(exception),
379
- thread_id=run["thread_id"],
380
- resumable=resumable,
381
- )
365
+ await _publish_error(
366
+ run_id, run["thread_id"], exception, resumable=resumable
367
+ )
382
368
  if not temporary:
383
369
  await Threads.set_joint_status(
384
370
  conn,
@@ -456,14 +442,9 @@ async def worker(
456
442
  # until the run actually fails. Emit before the status write so raw
457
443
  # SSE clients (no status fallback) see it even if that write fails.
458
444
  # Resumable runs cache it so `Last-Event-ID` replays end with it too.
459
- with suppress(Exception):
460
- await Runs.Stream.publish(
461
- run_id,
462
- "error",
463
- json_dumpb(exception),
464
- thread_id=run["thread_id"],
465
- resumable=resumable,
466
- )
445
+ await _publish_error(
446
+ run_id, run["thread_id"], exception, resumable=resumable
447
+ )
467
448
 
468
449
  # We're outside the original `except` block, so build exc_info manually.
469
450
  # This preserves traceback logging for non-remote exceptions.
@@ -572,3 +553,22 @@ class RunClaim:
572
553
 
573
554
  def ms(after: datetime, before: datetime) -> int:
574
555
  return int((after - before).total_seconds() * 1000)
556
+
557
+
558
+ async def _publish_error(
559
+ run_id: str | uuid.UUID,
560
+ thread_id: str | uuid.UUID,
561
+ exception: BaseException,
562
+ *,
563
+ resumable: bool,
564
+ ) -> None:
565
+ with suppress(Exception):
566
+ await publish_event(
567
+ run_id,
568
+ "error",
569
+ json_dumpb(exception),
570
+ thread_id=thread_id,
571
+ resumable=resumable,
572
+ publisher_id=uuid7().hex,
573
+ seq=0,
574
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.19.0.dev2
3
+ Version: 0.19.0.dev4
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -10,7 +10,7 @@ Requires-Dist: cloudpickle>=3.0.0
10
10
  Requires-Dist: cryptography>=50.0.0
11
11
  Requires-Dist: grpcio-health-checking<1.82.0,>=1.81.0
12
12
  Requires-Dist: grpcio-tools==1.81.1
13
- Requires-Dist: grpcio<1.82.0,>=1.81.0
13
+ Requires-Dist: grpcio<1.86.0,>=1.85.0
14
14
  Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
15
15
  Requires-Dist: httpx>=0.25.0
16
16
  Requires-Dist: jsonschema-rs<0.45,>=0.35.0
@@ -1,4 +1,4 @@
1
- langgraph_api/__init__.py,sha256=dtivyzzwmvZMwdYoGxWnnLQV20vfclnQFaRbOwD4M1w,28
1
+ langgraph_api/__init__.py,sha256=68IUsFgXfbnYwYfxlpGdm_Ro_s9oZu1GXrxbt96Uf_I,28
2
2
  langgraph_api/_factory_utils.py,sha256=_FqW0olMu2PGLsnRq0ylt3a4jDCe12YIFHExMXI6Nyo,5976
3
3
  langgraph_api/asgi_transport.py,sha256=XApY3lIWBZTMbbsl8dDJzl0cLGirmAGE0SifqZUnXvs,11896
4
4
  langgraph_api/asyncio.py,sha256=uC6et0GgUd3YHGMOw31bldbIvo0_8BTeiLLM74TZDlU,12742
@@ -10,36 +10,36 @@ langgraph_api/cron_scheduler.py,sha256=H1jPymC68A1MYyjfdApX4-hELiGBlJpGgSOsN8qhc
10
10
  langgraph_api/drain.py,sha256=MLUm3fDq3R8yxrZ-1W3TeCfhNzgNSzUA7TvB-D6K2_s,6108
11
11
  langgraph_api/errors.py,sha256=x6yhf0JrgSNweFRJw7l3ZK8De4T76d2v6MRvoDU_C-U,3312
12
12
  langgraph_api/feature_flags.py,sha256=NB1X5jO19c40hI3WDxGk9qwD6EZUROO0ooFSd1QTniM,3985
13
- langgraph_api/graph.py,sha256=aWj1o4bYU2prIWpAVAWOH7CHbjvZKYfWV2CtF-hzPko,40697
13
+ langgraph_api/graph.py,sha256=PdTNp66xuvFtXR6tm-RYocXiOL8LBd3vjaC5K6P6I78,41143
14
14
  langgraph_api/http.py,sha256=7hPxKbj-xoAKcm7iucBpT5nM_hXOgGVCPbBsCD693Cw,6977
15
15
  langgraph_api/http_metrics.py,sha256=etxbZNmYxdb58DVLNkHP7S-N6njXPTiQh2OWKMaIZi8,5336
16
16
  langgraph_api/http_metrics_utils.py,sha256=sjxF7SYGTzY0Wz_G0dzatsYNnWr31S6ujej4JmBG2yo,866
17
17
  langgraph_api/logging.py,sha256=PeApafcPxox03rcpjEU5rlSzDkxJ3gff52XC34uZjl0,6972
18
- langgraph_api/metadata.py,sha256=j4FJvZRJP5tPi6uBcmLPaI4LrrhIZ7Df1ccoTYY_no4,11976
18
+ langgraph_api/metadata.py,sha256=sSIWv90K-LztfQB8wwL95h9oKndV4NKiuxJqhw4Tygo,12102
19
19
  langgraph_api/metrics_collector.py,sha256=W88DuCqyeNxaMmcIrKzvaRtqqKU488rW-l7SJxg-8Xs,9565
20
20
  langgraph_api/metrics_otlp.py,sha256=qGZiLyeH70OSzZddSNeaQ11_6azghZYrkspLuhuz7cQ,32103
21
21
  langgraph_api/operator_routes.py,sha256=s4HfkNUdMvgyYPb8L8yM3Z8UJQbGkJrVFMiH5HJp_S4,8389
22
22
  langgraph_api/otel_context.py,sha256=DWFwW4Yu88QY4W2J0IRcURR450Th9J2DupvDDkSkMBA,7166
23
23
  langgraph_api/patch.py,sha256=ViUknYvyQWS6y0f5XuaEoci2qB_mQv8vZl-oaUxsI6M,1448
24
- langgraph_api/priority_settings.py,sha256=69qSFiNKsI13UP2xvjbYR8PldKBNWlh0OfxlzQCZb80,8478
24
+ langgraph_api/priority_settings.py,sha256=xyh6bklXx17ZttZznVlJyxlk_Q70B4mjMornZYaXXHU,9036
25
25
  langgraph_api/queue_entrypoint.py,sha256=jLZesaZZYcaNjqzUzNXpNl42xnNGeIbQLGlhcxcBq0I,11566
26
26
  langgraph_api/release_tags.py,sha256=XOiX829Bi8eVpKGWg8TiHyidjGfz1p3Pqj0elrAsj8w,10377
27
27
  langgraph_api/route.py,sha256=v6mVNSeC_OUVJb9u8uUHAgaVnNd05NUL4xKsvoN8dhI,8393
28
28
  langgraph_api/schema.py,sha256=bbKrHHHxJasf_DT44nPfyslbtfOClCoFWAizpohcFJ4,12528
29
29
  langgraph_api/self_hosted_logs.py,sha256=CSWJH-Qrt99AFQw1-8u78wgKDkbyByQ-0tXfP2PDzGs,6096
30
30
  langgraph_api/self_hosted_metrics.py,sha256=Ez1RkraEH_23VW19SpXnKTvSBmLxZvE6pJEw6ON6PwU,20043
31
- langgraph_api/serde.py,sha256=sMjrORY2WCNmZEXDaE3lydi1un686qR1E_Wxw4mFgjU,9144
31
+ langgraph_api/serde.py,sha256=4m6Hw6W0Vv1UhShmKBjspJOjaF62KHB32aJjUlRLabU,9497
32
32
  langgraph_api/server.py,sha256=9WfBir5cgkaO-mUwIuv-XsteR4aTuSiKevhW8vXYt_Y,11262
33
33
  langgraph_api/sse.py,sha256=wF80kUI6KOPX7SATUvRxIAwpoJFN5rrien9FY1dRSgE,6477
34
34
  langgraph_api/state.py,sha256=Py8HG8k7u0FRAj4Ok89_uR9GerkyeFm90gSMTbWWQX0,8356
35
35
  langgraph_api/store.py,sha256=OXcdQSVCDKOzfS8S2aJHXbfuI5iYRoQBiW9WYKnCyx8,7122
36
- langgraph_api/stream.py,sha256=Xh-CSbp54z667hOusqm6uzeMfB41t4LqUUMHB_V326c,37338
36
+ langgraph_api/stream.py,sha256=X8AwIlprc81V-NFQYUhAYor1vC1Qie2IpDEnB9NdaPM,38803
37
37
  langgraph_api/stream_v2.py,sha256=AieeCAXQsthy9n6crCibMB7unbN1W_o1xkpJ2v11RSY,10822
38
38
  langgraph_api/traceblock.py,sha256=GhgAtLhAQ8Z8LHtRQq3par-rfPpRBQp2Q7WBACJq1NI,677
39
- langgraph_api/tracing_session.py,sha256=gmfv-BW1XRar6suVur1P4rTVKWkjElDEb2hhkBduWOs,728
40
- langgraph_api/validation.py,sha256=6bCMC7MXfCwQTOIv0xwJ52ir6CwIKQoFSpg9zyqlrZo,15370
39
+ langgraph_api/tracing_session.py,sha256=A8HB5BXV0M4Tg9XnjCUmZtycPhb_HTsDeKmV7e8mht0,3874
40
+ langgraph_api/validation.py,sha256=3QS452mC19JABPL6eSfWkj6VvpLE2pl92kARXTaJDjU,15399
41
41
  langgraph_api/webhook.py,sha256=WhwP0P5fY9z14aQxXE0q1Fd8cQq8YfDvDPniSY5sitk,10195
42
- langgraph_api/worker.py,sha256=jeQtON3r4B21WTvy7BG1-Im3dBhfuvzS5BE6FScC0ss,23097
42
+ langgraph_api/worker.py,sha256=u3Kqf8TfYi5rxIptX0whLN87nzU30Y1LIaA1Fddgem8,22834
43
43
  langgraph_api/worker_runtime.py,sha256=zzVW7A4vHyJE6DRxdjRZIa2U334Eh5oO157SyWmQ3G8,11861
44
44
  langgraph_api/_checkpointer/__init__.py,sha256=ofJTJLGy7Hsuzhj-2dpfDvrDloM0BzlhTzvZOdR9K8U,2223
45
45
  langgraph_api/_checkpointer/_adapter.py,sha256=idGYL-FwyVtUXcmhvfYboARfQAkoj0aFD40L5h9N7F8,22289
@@ -49,12 +49,12 @@ langgraph_api/api/a2a.py,sha256=dYuxX4HhU0RlsOWKraA1gYD58FyyVXeR0QihLn4xNfg,1486
49
49
  langgraph_api/api/a2ui.py,sha256=Dx9qwwIOmQ0MfgOwL-UZabBI0F7DEvz3qG1cFkjvnjE,3108
50
50
  langgraph_api/api/assistants.py,sha256=iWrmWsAXpO9kgAb2ihKuJPCABYYf_7I9BPEITwwBsrA,19822
51
51
  langgraph_api/api/event_streaming.py,sha256=SBTSDz9AfbGo2QHVKpAPL1I8_11bPrpQlATrSAy3jf0,22087
52
- langgraph_api/api/meta.py,sha256=PkB-gxYERwqm-r52WksfeZp_APCcDezUlJ1t1pJ2Pl4,4837
52
+ langgraph_api/api/meta.py,sha256=qzeHDNdLUN84dgeyHVC2IhdCa9RqvLgdKRlxF9NL6mw,4957
53
53
  langgraph_api/api/openapi.py,sha256=hS4yhfJfWAYilm0Pv8iC08bK7CMDG4PIVc-77y9Y7Ts,12548
54
54
  langgraph_api/api/profile.py,sha256=CA1ZkHALOuP8orYTICnEhcG_JnnA2wnyjbWyeb117jA,3455
55
- langgraph_api/api/runs.py,sha256=Uu7NkXJ3VTelJM3mMEwmzyZl0S39pHlBEJW3XWSDWEA,33317
56
- langgraph_api/api/store.py,sha256=5d1GOxsVDK-8PPngYG2rjYF_B2qNevDvPos-nB8YPCI,7710
57
- langgraph_api/api/threads.py,sha256=iZ2dBDmEmP7jtr73CzBeih6Mevo13bUsf449g88Xaoo,22907
55
+ langgraph_api/api/runs.py,sha256=yXjrBcuAHMxqZee7TSj2oPKnrTlZy2lN5pCPUze4K7U,33371
56
+ langgraph_api/api/store.py,sha256=Hm3viayqsS9-Vw6aPKTSRlP6zFkajvOQiKVSHUotxBQ,7845
57
+ langgraph_api/api/threads.py,sha256=RV8J4Le4fuO8QCDsJlcaIFzgdrn-ZtXO3x5xmh4Bt_8,23171
58
58
  langgraph_api/api/ui.py,sha256=A1cRxaMK_4pb192mrZ_LMxLSFb8NriYwwvjeDdNDD7k,2803
59
59
  langgraph_api/api/a2ui_schemas/README.md,sha256=fZCc9rSK-qeUHsbJ17EYxMZjS3yUrYQdoQLX7ltgP8M,298
60
60
  langgraph_api/api/a2ui_schemas/client_capabilities.json,sha256=3YAHlRfeOn9dUH6uAek1loCL4caeSUuQzhrtWKWW9nU,1906
@@ -86,7 +86,7 @@ langgraph_api/auth/studio_user.py,sha256=Lx3eMsRA8gxZ3--ApL09hDW84A6qIncaZoBZjSg
86
86
  langgraph_api/auth/langsmith/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  langgraph_api/auth/langsmith/backend.py,sha256=gaSuZC8JO32XHe8IdqttNpBGO6PCVrtXaq1Negc7vX0,3857
88
88
  langgraph_api/auth/langsmith/client.py,sha256=79kwCVeHU64nsHsxWipfZhf44lM6vfs2nlfTxlJF6LU,4142
89
- langgraph_api/config/__init__.py,sha256=AwJY2YAHEp1cC21osYzFek6tWihfAWAzeKF6Xde9edI,34154
89
+ langgraph_api/config/__init__.py,sha256=-AysHspSuA4xTxk7jKcJkU955loGQnYVrKP9m7sywGo,34357
90
90
  langgraph_api/config/_parse.py,sha256=RpfZgFAPJlRMv13AzGr3kAYbIrqHcgjzO8IgeboTw4A,3922
91
91
  langgraph_api/config/schemas.py,sha256=wRiUzjtdls89XPIrNsPfuJX2iBLsde_QE2mVzjEQCzU,21856
92
92
  langgraph_api/encryption/__init__.py,sha256=gaCZ00CocSbqSqrDn6XJHaSp2CZCnC8qnrD9G4fbzyI,363
@@ -100,7 +100,7 @@ langgraph_api/event_streaming/capabilities.py,sha256=qjVbhCjl1VEQPGeiDxeJAhYGI_7
100
100
  langgraph_api/event_streaming/constants.py,sha256=eGsm-NvOlqV3gNxDO5vlr00FdngmgEQf59zuHSi_74E,1378
101
101
  langgraph_api/event_streaming/event_normalizers.py,sha256=5bVSqGPW-Uh7WX91qgTfwpK433pCSv_wchpbzW8TLi4,2794
102
102
  langgraph_api/event_streaming/namespace.py,sha256=aJDFt45Or2_bQdRpKJgdFhBgTDj6PYl7Coz5GzfbM84,1509
103
- langgraph_api/event_streaming/service.py,sha256=nxYgVqvZth-gOujA_p9Kq8aFKYc23NKvp7GQwHyQdu4,55503
103
+ langgraph_api/event_streaming/service.py,sha256=jQnv5DOnGWqtLXu_05oaHVQU17yw59yb_uAY-0biw8s,55649
104
104
  langgraph_api/event_streaming/session.py,sha256=Lop4AD1CQTQGwg_yGpi4OLvLvTVaGmq5KiYzhcP-zR8,76560
105
105
  langgraph_api/event_streaming/state_normalizers.py,sha256=vgT4O4tJPr9VDBMn1EP994ieDGDYP43sROnOyLjkEAE,13659
106
106
  langgraph_api/event_streaming/types.py,sha256=RyZqfqgH-jmmmmAFQj5f6nH9M1rGK93zVG7nlmvqZgc,3647
@@ -114,8 +114,8 @@ langgraph_api/grpc/ops/__init__.py,sha256=6L07YhOGORfLu4fnVHEsXiQXiFA6xrLESGGBFb
114
114
  langgraph_api/grpc/ops/assistants.py,sha256=T6ZIDfCkeiXvoHJyq-bUnl0j57-xLDrGwk0n-vFspz0,14199
115
115
  langgraph_api/grpc/ops/cache.py,sha256=MoPAmSuOwbt2Cud1YZJm_YJeaDHPFy1IiV4m0PDImgg,1399
116
116
  langgraph_api/grpc/ops/crons.py,sha256=aDlvNVYIfSP8gtr5NptLiAj-bfMtJOuMWYIA2NifWm0,19713
117
- langgraph_api/grpc/ops/runs.py,sha256=f0XXRwb6SwqxT07MtUHmQrm8VJ9U_8X6IwLmjhyz4_E,51743
118
- langgraph_api/grpc/ops/threads.py,sha256=A1SDGZUW-qfe3SzvAdfg39UBVqkIjoDasiCy7L9FKrc,52812
117
+ langgraph_api/grpc/ops/runs.py,sha256=rWJ4hv47-egX6cnGrgmBbuEIoOwZ6tpdAs-E4aYN-pY,53988
118
+ langgraph_api/grpc/ops/threads.py,sha256=CeweUfjr5lyrVNK6TtzCnfoq_rxcCO_IKq0F_TWQhOQ,53479
119
119
  langgraph_api/grpc/servicers/__init__.py,sha256=l8yqTA_gMbIj0xHw5-RZYo0JbjL-EpFD8RxPMgW_-bA,422
120
120
  langgraph_api/grpc/servicers/checkpointer.py,sha256=kn9J3HQEmqggtOGiDxpEAeBVkVi4qDCJikj2bXo5k4g,10543
121
121
  langgraph_api/grpc/servicers/encryption.py,sha256=ddAjRZ9btWBf4MPa7yd793japdCEi-DfEPi1Ynt8gzk,10563
@@ -130,7 +130,7 @@ langgraph_api/js/client.mts,sha256=n1gTMvcvCHXdvCVyccLfaGqgpnGGZw9A1FywKADfjG8,4
130
130
  langgraph_api/js/errors.py,sha256=Cm1TKWlUCwZReDC5AQ6SgNIVGD27Qov2xcgHyf8-GXo,361
131
131
  langgraph_api/js/global.d.ts,sha256=LHCvS5NFvr0KKJUFzqIGL-CdBC4CgFIqif1im1r9xAg,237
132
132
  langgraph_api/js/package.json,sha256=NQk9OZJpBJFp6g8u8Y2OaGWdqKSClvOqc8ymvW8XqwY,1372
133
- langgraph_api/js/remote.py,sha256=WR2hss2HL2j3FMWqfUTqleK_LXGSCNets1LH6ub8xMQ,59394
133
+ langgraph_api/js/remote.py,sha256=HSPs6NxPZsQw9AdYxL93Y-uAUZYX3piRr1YZzaZH7uk,60037
134
134
  langgraph_api/js/schema.py,sha256=M4fLtr50O1jck8H1hm_0W4cZOGYGdkrB7riLyCes4oY,438
135
135
  langgraph_api/js/sse.py,sha256=IfcEpknyZeqqjYTOWRdijc6o2EBfatbWCZarGQQ0SQI,4088
136
136
  langgraph_api/js/traceblock.mts,sha256=QtGSN5VpzmGqDfbArrGXkMiONY94pMQ5CgzetT_bKYg,761
@@ -151,12 +151,12 @@ langgraph_api/lc_security/exceptions.py,sha256=2BIF-i2jrem6A0UTRrvUnLlsen8eI9LCj
151
151
  langgraph_api/lc_security/policy.py,sha256=tW0IACvPCeJZbcsUKv9egk0LapF5gL3hxF9AoQ58j3c,12089
152
152
  langgraph_api/lc_security/transport.py,sha256=NP39bnLq5dSKoxv9PqoRlDWNtXPHg-PCNZA_KS_Vjs4,7167
153
153
  langgraph_api/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- langgraph_api/middleware/ensure_store.py,sha256=KzgAsLPloPD8mcQG-5v7kguzDMFrs9PJz2-xK5-rV0Q,1351
154
+ langgraph_api/middleware/ensure_store.py,sha256=tC2S4o1bHKkB0u2nMjs9klnRGqurV0GP30usigA2vAI,1538
155
155
  langgraph_api/middleware/http_logger.py,sha256=79iMlqKdSP5sS6G-iuEAHl2h0Z2ygYDxsjvAIWMQUEg,8196
156
156
  langgraph_api/middleware/private_network.py,sha256=eQEzWI8epBNUCiNsMu9O27ofHBQ45M0p2OZy5YdUYos,2097
157
157
  langgraph_api/middleware/request_id.py,sha256=-p230Q5jDJAJLmSZRqQvB4dFFkJS9B4Vwg6pUgQtI24,1259
158
158
  langgraph_api/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
- langgraph_api/models/run.py,sha256=ee4JmM5A7NQoiwvzdwqg_dWVNofrl8Pta96-DVSaevM,15564
159
+ langgraph_api/models/run.py,sha256=ZxkZAIScDwY7tefkY3h-87QksDQITb05dWwfzZQHWFM,15878
160
160
  langgraph_api/timing/__init__.py,sha256=UDMuNBmc5NqX0m5T-9PUFioCa1lNvd4Wv4juPIBRb-w,877
161
161
  langgraph_api/timing/profiler.py,sha256=_n0qJYJMjCGo95RDuH5z8FIzePGNSNbnm3cvGmcgn6A,6186
162
162
  langgraph_api/timing/startup.py,sha256=1Jp4-tquBhiE5glWQhXGX5XS2_006myJXHHZMOi15ng,6161
@@ -189,10 +189,10 @@ langgraph_runtime/store.py,sha256=7mowndlsIroGHv3NpTSOZDJR0lCuaYMBoTnTrewjslw,11
189
189
  LICENSE,sha256=SCVQGLQfwOllsRFa9-Z3m8IYu4pnR9Vh2oANUCJiKqI,3860
190
190
  hatch_build.py,sha256=Nn9N-EFfVqmH5q3iCUrhqX6zc7qT1jLI3gWSBN2xgYQ,1738
191
191
  logging.json,sha256=sBy8HDDPuucpLbLUD6e8t5fsiQjJoklZsbVHi2qQ7aQ,367
192
- openapi.json,sha256=6KndmiI1xwIVivTYmYHQjwQe-4fVx71qJzuNdMdg5NQ,231795
192
+ openapi.json,sha256=Z0l6MrQjZtj28vNsTyUz87D_B0063a6oYk5LrNbCsys,232575
193
193
  langgraph_grpc_common/__init__.py,sha256=sO7jFHekQxt6zZPhTPZAWLYLB_S8w7-VuJ7NyWFlFNo,97
194
194
  langgraph_grpc_common/checkpointer.py,sha256=FwY4a4zIdRFy_Fw2jd_dxIhBpWBIMi5kJqye2VkzzUg,16505
195
- langgraph_grpc_common/serde.py,sha256=8q290nZ6TdxbEhCTzwEs44XGi2b-3pfrUeMYY5WGlTY,6179
195
+ langgraph_grpc_common/serde.py,sha256=sDyHJZvLwkzeamI4Z7bhsjdqoPXWNqQm2-F648NMBZ4,6532
196
196
  langgraph_grpc_common/store.py,sha256=yyckUNGX9-2ZoU1XiuhPHpK600MNPUWV-NYoK1BUzHA,5063
197
197
  langgraph_grpc_common/conversion/__init__.py,sha256=pLsOrRtmF9YkgmCPhcfym6lYOB7PCJTRItyo1YK_AT8,208
198
198
  langgraph_grpc_common/conversion/_compat.py,sha256=MIEo69I7tfaPskunPGwBCKheksLwxpw-z-4O3hvO9og,4010
@@ -203,12 +203,12 @@ langgraph_grpc_common/conversion/store.py,sha256=uftOtzpQ8VuYXMtmEOz-q6N9GpBRKxa
203
203
  langgraph_grpc_common/conversion/struct.py,sha256=yk4jpPdywzn8UosAohun21lU5D_IIglOY9rkBhiG-gA,2072
204
204
  langgraph_grpc_common/conversion/value.py,sha256=KW-z0gvpvCq8iWUjjtx8F3XQGM7XsL-D9GzPzdtuMsA,10206
205
205
  langgraph_grpc_common/proto/__init__.py,sha256=IQUTdf5m77MdpKoEl0nGYKUbs5FOQEjtZZMLggjlQRg,1495
206
- langgraph_grpc_common/proto/checkpointer_pb2.py,sha256=I80tubDxa1ViSffF5XQfcaL_kxUKpBPWzjsiN3pIdEg,10848
207
- langgraph_grpc_common/proto/checkpointer_pb2.pyi,sha256=ZaoCSY6-B2WC6HQoVk-fYaI-CmHnQ3xNux99HTIvPU4,27063
206
+ langgraph_grpc_common/proto/checkpointer_pb2.py,sha256=y7Qxd0klSHSX8lKKRv00MYt8CnYjaVpmMk0GKVRuYZ0,10902
207
+ langgraph_grpc_common/proto/checkpointer_pb2.pyi,sha256=gLcVIlGvyY84APhWTeeD9KqHbojC6ZJqJV0Nu54SgsE,27341
208
208
  langgraph_grpc_common/proto/checkpointer_pb2_grpc.py,sha256=FQJK-lC8alOkLltA51aq1ABam62rVerTZRZccTFqUjw,20152
209
209
  langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi,sha256=8fPL90WjHnMaREG7l9qYt5fQePeT8YFWQ0qVy56QtYw,10210
210
- langgraph_grpc_common/proto/core_api_pb2.py,sha256=Np677bnh8h7bu9VG2n9glKq-ptjKfRmUm7lkwQQvZOY,55569
211
- langgraph_grpc_common/proto/core_api_pb2.pyi,sha256=Zr9CXEZDOFTvIhuP1AHZbWI4DFW07IOwKvSOKWOGvR0,230808
210
+ langgraph_grpc_common/proto/core_api_pb2.py,sha256=0mgS5SwkMWkmUGWQ88YQZMfASkGkKX5PAfxJ6fKD3bc,55771
211
+ langgraph_grpc_common/proto/core_api_pb2.pyi,sha256=xKI2he9Xia1-ttQTfC7kifofcAfwL1mFIrAv3BhZdxM,232585
212
212
  langgraph_grpc_common/proto/core_api_pb2_grpc.py,sha256=GmlSw2PohVCcd8GQ5HnmA8V1RdXZeuGM4Dt4eicbXzE,86491
213
213
  langgraph_grpc_common/proto/core_api_pb2_grpc.pyi,sha256=vCGFVkO7lcu-ImxleL_qGf_0eAu2EZP5L-avpjqUe0I,31884
214
214
  langgraph_grpc_common/proto/encryption_pb2.py,sha256=CEDsn3bJv2e_QzAFsvp2845Nac_lBRPGsb_9pFJthxE,4119
@@ -267,8 +267,8 @@ langgraph_grpc_common/proto/store_pb2.py,sha256=VWJ7wtzL9pVmZZKbxMzOzCoiFn58bB2g
267
267
  langgraph_grpc_common/proto/store_pb2.pyi,sha256=atXejijuYEb9tE0stGQdZcfA9ucMFj-ytTMwvkxwviM,29322
268
268
  langgraph_grpc_common/proto/store_pb2_grpc.py,sha256=Kyt8eV2NXkjh3be_BYytGdD19kNf74961cruonMvCrw,3300
269
269
  langgraph_grpc_common/proto/store_pb2_grpc.pyi,sha256=oS1h2cDoq2OjyM8xazcmc8LwRDC5oCAD0zto2QUmPQw,2027
270
- langgraph_api-0.19.0.dev2.dist-info/METADATA,sha256=CjTaZLFX60VhD9ikp1LeGriwVh43DdX9PtJ-sNfiYAc,5939
271
- langgraph_api-0.19.0.dev2.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
272
- langgraph_api-0.19.0.dev2.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
273
- langgraph_api-0.19.0.dev2.dist-info/licenses/LICENSE,sha256=SCVQGLQfwOllsRFa9-Z3m8IYu4pnR9Vh2oANUCJiKqI,3860
274
- langgraph_api-0.19.0.dev2.dist-info/RECORD,,
270
+ langgraph_api-0.19.0.dev4.dist-info/METADATA,sha256=M2V_fp0H3kwphwCT3J-dxvYhaa5MB3JU0ZZmLzx7xLY,5939
271
+ langgraph_api-0.19.0.dev4.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
272
+ langgraph_api-0.19.0.dev4.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
273
+ langgraph_api-0.19.0.dev4.dist-info/licenses/LICENSE,sha256=SCVQGLQfwOllsRFa9-Z3m8IYu4pnR9Vh2oANUCJiKqI,3860
274
+ langgraph_api-0.19.0.dev4.dist-info/RECORD,,