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.
- langgraph_api/__init__.py +1 -1
- langgraph_api/api/meta.py +2 -0
- langgraph_api/api/runs.py +2 -1
- langgraph_api/api/store.py +5 -1
- langgraph_api/api/threads.py +7 -1
- langgraph_api/config/__init__.py +15 -10
- langgraph_api/event_streaming/service.py +5 -3
- langgraph_api/graph.py +10 -1
- langgraph_api/grpc/ops/runs.py +57 -7
- langgraph_api/grpc/ops/threads.py +14 -0
- langgraph_api/js/remote.py +20 -2
- langgraph_api/metadata.py +8 -2
- langgraph_api/middleware/ensure_store.py +4 -0
- langgraph_api/models/run.py +11 -2
- langgraph_api/priority_settings.py +12 -1
- langgraph_api/serde.py +10 -1
- langgraph_api/stream.py +66 -32
- langgraph_api/tracing_session.py +95 -10
- langgraph_api/validation.py +1 -0
- langgraph_api/worker.py +33 -33
- {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/METADATA +2 -2
- {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/RECORD +31 -31
- langgraph_grpc_common/proto/checkpointer_pb2.py +22 -22
- langgraph_grpc_common/proto/checkpointer_pb2.pyi +5 -1
- langgraph_grpc_common/proto/core_api_pb2.py +162 -162
- langgraph_grpc_common/proto/core_api_pb2.pyi +28 -3
- langgraph_grpc_common/serde.py +10 -1
- openapi.json +17 -0
- {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/WHEEL +0 -0
- {langgraph_api-0.19.0.dev2.dist-info → langgraph_api-0.19.0.dev4.dist-info}/entry_points.txt +0 -0
- {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,
|
|
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=
|
|
200
|
-
checkpointer=
|
|
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"] =
|
|
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
|
-
#
|
|
345
|
-
if
|
|
346
|
-
|
|
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
|
|
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
|
|
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,
|
langgraph_api/tracing_session.py
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return
|
|
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
|
+
]
|
langgraph_api/validation.py
CHANGED
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
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
40
|
-
langgraph_api/validation.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
56
|
-
langgraph_api/api/store.py,sha256=
|
|
57
|
-
langgraph_api/api/threads.py,sha256=
|
|
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
|
|
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=
|
|
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=
|
|
118
|
-
langgraph_api/grpc/ops/threads.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
207
|
-
langgraph_grpc_common/proto/checkpointer_pb2.pyi,sha256=
|
|
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=
|
|
211
|
-
langgraph_grpc_common/proto/core_api_pb2.pyi,sha256=
|
|
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.
|
|
271
|
-
langgraph_api-0.19.0.
|
|
272
|
-
langgraph_api-0.19.0.
|
|
273
|
-
langgraph_api-0.19.0.
|
|
274
|
-
langgraph_api-0.19.0.
|
|
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,,
|