langgraph-api 0.2.26__py3-none-any.whl → 0.2.28__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.

Potentially problematic release.


This version of langgraph-api might be problematic. Click here for more details.

Files changed (42) hide show
  1. langgraph_api/__init__.py +1 -1
  2. langgraph_api/api/assistants.py +4 -4
  3. langgraph_api/api/store.py +10 -6
  4. langgraph_api/asgi_transport.py +171 -0
  5. langgraph_api/asyncio.py +17 -0
  6. langgraph_api/config.py +1 -0
  7. langgraph_api/graph.py +28 -5
  8. langgraph_api/js/remote.py +16 -11
  9. langgraph_api/metadata.py +28 -16
  10. langgraph_api/store.py +127 -0
  11. langgraph_api/stream.py +17 -7
  12. langgraph_api/worker.py +1 -1
  13. {langgraph_api-0.2.26.dist-info → langgraph_api-0.2.28.dist-info}/METADATA +24 -30
  14. {langgraph_api-0.2.26.dist-info → langgraph_api-0.2.28.dist-info}/RECORD +42 -64
  15. {langgraph_api-0.2.26.dist-info → langgraph_api-0.2.28.dist-info}/WHEEL +1 -1
  16. langgraph_api-0.2.28.dist-info/entry_points.txt +2 -0
  17. langgraph_api/js/tests/api.test.mts +0 -2194
  18. langgraph_api/js/tests/auth.test.mts +0 -648
  19. langgraph_api/js/tests/compose-postgres.auth.yml +0 -59
  20. langgraph_api/js/tests/compose-postgres.yml +0 -59
  21. langgraph_api/js/tests/graphs/.gitignore +0 -1
  22. langgraph_api/js/tests/graphs/agent.css +0 -1
  23. langgraph_api/js/tests/graphs/agent.mts +0 -187
  24. langgraph_api/js/tests/graphs/agent.ui.tsx +0 -10
  25. langgraph_api/js/tests/graphs/agent_simple.mts +0 -105
  26. langgraph_api/js/tests/graphs/auth.mts +0 -106
  27. langgraph_api/js/tests/graphs/command.mts +0 -48
  28. langgraph_api/js/tests/graphs/delay.mts +0 -30
  29. langgraph_api/js/tests/graphs/dynamic.mts +0 -24
  30. langgraph_api/js/tests/graphs/error.mts +0 -17
  31. langgraph_api/js/tests/graphs/http.mts +0 -76
  32. langgraph_api/js/tests/graphs/langgraph.json +0 -11
  33. langgraph_api/js/tests/graphs/nested.mts +0 -44
  34. langgraph_api/js/tests/graphs/package.json +0 -13
  35. langgraph_api/js/tests/graphs/weather.mts +0 -57
  36. langgraph_api/js/tests/graphs/yarn.lock +0 -242
  37. langgraph_api/js/tests/utils.mts +0 -17
  38. langgraph_api-0.2.26.dist-info/LICENSE +0 -93
  39. langgraph_api-0.2.26.dist-info/entry_points.txt +0 -3
  40. logging.json +0 -22
  41. openapi.json +0 -4562
  42. /LICENSE → /langgraph_api-0.2.28.dist-info/licenses/LICENSE +0 -0
langgraph_api/store.py ADDED
@@ -0,0 +1,127 @@
1
+ import asyncio
2
+ import importlib.util
3
+ import sys
4
+ import threading
5
+ from collections.abc import Callable
6
+ from contextlib import AsyncExitStack, asynccontextmanager
7
+ from random import choice
8
+ from typing import Any
9
+
10
+ import structlog
11
+ from langchain_core.runnables.config import run_in_executor
12
+ from langgraph.graph import Graph
13
+ from langgraph.pregel import Pregel
14
+ from langgraph.store.base import BaseStore
15
+
16
+ from langgraph_api import config
17
+
18
+ logger = structlog.stdlib.get_logger(__name__)
19
+
20
+ CUSTOM_STORE: BaseStore | Callable[[], BaseStore] | None = None
21
+ STORE_STACK = threading.local()
22
+
23
+
24
+ async def get_store() -> BaseStore:
25
+ if CUSTOM_STORE:
26
+ if not hasattr(STORE_STACK, "stack"):
27
+ stack = AsyncExitStack()
28
+ STORE_STACK.stack = stack
29
+ store = await stack.enter_async_context(_yield_store(CUSTOM_STORE))
30
+ STORE_STACK.store = store
31
+ await logger.ainfo(f"Using custom store: {store}", kind=str(type(store)))
32
+ return store
33
+ return STORE_STACK.store
34
+ else:
35
+ from langgraph_runtime.store import Store
36
+
37
+ return Store()
38
+
39
+
40
+ async def exit_store():
41
+ if not CUSTOM_STORE:
42
+ return
43
+ if not hasattr(STORE_STACK, "stack"):
44
+ return
45
+ await STORE_STACK.stack.aclose()
46
+
47
+
48
+ @asynccontextmanager
49
+ async def _yield_store(value: Any):
50
+ if isinstance(value, BaseStore):
51
+ yield value
52
+ elif hasattr(value, "__aenter__") and hasattr(value, "__aexit__"):
53
+ async with value as ctx_value:
54
+ yield ctx_value
55
+ elif hasattr(value, "__enter__") and hasattr(value, "__exit__"):
56
+ with value as ctx_value:
57
+ yield ctx_value
58
+ elif asyncio.iscoroutine(value):
59
+ yield await value
60
+ elif callable(value):
61
+ async with _yield_store(value()) as ctx_value:
62
+ yield ctx_value
63
+ else:
64
+ raise ValueError(
65
+ f"Unsupported store type: {type(value)}. Expected an instance of BaseStore "
66
+ "or a function or async generator that returns one."
67
+ )
68
+
69
+
70
+ async def collect_store_from_env() -> None:
71
+ global CUSTOM_STORE
72
+ if not config.STORE_CONFIG or not (store_path := config.STORE_CONFIG.get("path")):
73
+ return
74
+ await logger.ainfo(
75
+ f"Heads up! You are configuring a custom long-term memory store at {store_path}\n\n"
76
+ "This store will be used IN STEAD OF the default postgres + pgvector store."
77
+ "Some functionality, such as TTLs and vector search, may not be available."
78
+ "Search performance & other capabilities will depend on the quality of your implementation."
79
+ )
80
+ # Try to load. The loaded object can either be a BaseStore instance, a function that generates it, etc.
81
+ value = await run_in_executor(None, _load_store, store_path)
82
+ CUSTOM_STORE = value
83
+
84
+
85
+ def _load_store(store_path: str) -> Any:
86
+ if "/" in store_path or ".py:" in store_path:
87
+ modname = "".join(choice("abcdefghijklmnopqrstuvwxyz") for _ in range(24))
88
+ path_name, function = store_path.rsplit(":", 1)
89
+ module_name = path_name.rstrip(":")
90
+ # Load from file path
91
+ modspec = importlib.util.spec_from_file_location(modname, module_name)
92
+ if modspec is None:
93
+ raise ValueError(f"Could not find store file: {path_name}")
94
+ module = importlib.util.module_from_spec(modspec)
95
+ sys.modules[module_name] = module
96
+ modspec.loader.exec_module(module)
97
+
98
+ else:
99
+ path_name, function = store_path.rsplit(".", 1)
100
+ module = importlib.import_module(path_name)
101
+
102
+ try:
103
+ store: BaseStore | Callable[[config.StoreConfig], BaseStore] = module.__dict__[
104
+ function
105
+ ]
106
+ except KeyError as e:
107
+ available = [k for k in module.__dict__ if not k.startswith("__")]
108
+ suggestion = ""
109
+ if available:
110
+ likely = [
111
+ k for k in available if isinstance(module.__dict__[k], Graph | Pregel)
112
+ ]
113
+ if likely:
114
+ likely_ = "\n".join(
115
+ [f"\t- {path_name}:{k}" if path_name else k for k in likely]
116
+ )
117
+ suggestion = f"\nDid you mean to use one of the following?\n{likely_}"
118
+ elif available:
119
+ suggestion = f"\nFound the following exports: {', '.join(available)}"
120
+
121
+ raise ValueError(
122
+ f"Could not find store '{store_path}'. "
123
+ f"Please check that:\n"
124
+ f"1. The file exports a variable named '{store_path}'\n"
125
+ f"2. The variable name in your config matches the export name{suggestion}"
126
+ ) from e
127
+ return store
langgraph_api/stream.py CHANGED
@@ -1,6 +1,6 @@
1
+ import functools
1
2
  from collections.abc import AsyncIterator, Callable
2
3
  from contextlib import AsyncExitStack, aclosing
3
- from functools import lru_cache
4
4
  from typing import Any, cast
5
5
 
6
6
  import langgraph.version
@@ -23,6 +23,7 @@ from langgraph.pregel.debug import CheckpointPayload, TaskResultPayload
23
23
  from pydantic import ValidationError
24
24
  from pydantic.v1 import ValidationError as ValidationErrorLegacy
25
25
 
26
+ from langgraph_api import store as api_store
26
27
  from langgraph_api.asyncio import ValueEvent, wait_if_not_done
27
28
  from langgraph_api.command import map_cmd
28
29
  from langgraph_api.graph import get_graph
@@ -33,7 +34,6 @@ from langgraph_api.serde import json_dumpb
33
34
  from langgraph_api.utils import AsyncConnectionProto
34
35
  from langgraph_runtime.checkpoint import Checkpointer
35
36
  from langgraph_runtime.ops import Runs
36
- from langgraph_runtime.store import Store
37
37
 
38
38
  logger = structlog.stdlib.get_logger(__name__)
39
39
 
@@ -94,7 +94,7 @@ async def astream_state(
94
94
  get_graph(
95
95
  config["configurable"]["graph_id"],
96
96
  config,
97
- store=Store(),
97
+ store=(await api_store.get_store()),
98
98
  checkpointer=None if temporary else Checkpointer(conn),
99
99
  )
100
100
  )
@@ -119,7 +119,9 @@ async def astream_state(
119
119
  # attach node counter
120
120
  is_remote_pregel = isinstance(graph, BaseRemotePregel)
121
121
  if not is_remote_pregel:
122
- config["configurable"]["__pregel_node_finished"] = incr_nodes
122
+ config["configurable"]["__pregel_node_finished"] = functools.partial(
123
+ incr_nodes, graph_id=_get_graph_id(run)
124
+ )
123
125
 
124
126
  # attach run_id to config
125
127
  # for attempts beyond the first, use a fresh, unique run_id
@@ -263,10 +265,10 @@ async def astream_state(
263
265
  yield mode, chunk
264
266
  # --- end shared logic with astream_events ---
265
267
  if is_remote_pregel:
266
- # increament the remote runs
268
+ # increment the remote runs
267
269
  try:
268
270
  nodes_executed = await graph.fetch_nodes_executed()
269
- incr_nodes(None, incr=nodes_executed)
271
+ incr_nodes(graph_id=graph.graph_id, incr=nodes_executed)
270
272
  except Exception as e:
271
273
  logger.warning(f"Failed to fetch nodes executed for {graph.graph_id}: {e}")
272
274
 
@@ -301,7 +303,7 @@ def get_feedback_urls(run_id: str, feedback_keys: list[str]) -> dict[str, str]:
301
303
  return {key: token.url for key, token in zip(feedback_keys, tokens, strict=False)}
302
304
 
303
305
 
304
- @lru_cache(maxsize=1)
306
+ @functools.lru_cache(maxsize=1)
305
307
  def get_langsmith_client() -> langsmith.Client:
306
308
  return langsmith.Client()
307
309
 
@@ -315,3 +317,11 @@ EXPECTED_ERRORS = (
315
317
  ValidationError,
316
318
  ValidationErrorLegacy,
317
319
  )
320
+
321
+
322
+ def _get_graph_id(run: Run) -> str | None:
323
+ try:
324
+ return run["kwargs"]["config"]["configurable"]["graph_id"]
325
+ except Exception:
326
+ logger.info(f"Failed to get graph_id from run {run['run_id']}")
327
+ return "Unknown"
langgraph_api/worker.py CHANGED
@@ -69,7 +69,7 @@ async def worker(
69
69
  ) -> WorkerResult:
70
70
  run_id = run["run_id"]
71
71
  if attempt == 1:
72
- incr_runs()
72
+ incr_runs(graph_id=_get_graph_id(run))
73
73
  checkpoint: CheckpointPayload | None = None
74
74
  exception: Exception | None = None
75
75
  status: str | None = None
@@ -1,35 +1,29 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.26
4
- Summary:
3
+ Version: 0.2.28
4
+ Author-email: Nuno Campos <nuno@langchain.dev>, Will Fu-Hinthorn <will@langchain.dev>
5
5
  License: Elastic-2.0
6
- Author: Nuno Campos
7
- Author-email: nuno@langchain.dev
6
+ License-File: LICENSE
8
7
  Requires-Python: >=3.11
9
- Classifier: License :: Other/Proprietary License
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.11
12
- Classifier: Programming Language :: Python :: 3.12
13
- Classifier: Programming Language :: Python :: 3.13
14
- Requires-Dist: cloudpickle (>=3.0.0,<4.0.0)
15
- Requires-Dist: cryptography (>=42.0.0,<45.0)
16
- Requires-Dist: httpx (>=0.25.0)
17
- Requires-Dist: jsonschema-rs (>=0.20.0,<0.30)
18
- Requires-Dist: langchain-core (>=0.2.38) ; python_version < "4.0"
19
- Requires-Dist: langgraph (>=0.3.27) ; python_version < "4.0"
20
- Requires-Dist: langgraph-checkpoint (>=2.0.23) ; python_version < "4.0"
21
- Requires-Dist: langgraph-runtime-inmem (>=0.0.9,<0.1)
22
- Requires-Dist: langgraph-sdk (>=0.1.66,<0.2.0) ; python_version < "4.0"
23
- Requires-Dist: langsmith (>=0.1.63)
24
- Requires-Dist: orjson (>=3.9.7)
25
- Requires-Dist: pyjwt (>=2.9.0,<3.0.0)
26
- Requires-Dist: sse-starlette (>=2.1.0,<2.2.0)
27
- Requires-Dist: starlette (>=0.38.6)
28
- Requires-Dist: structlog (>=24.1.0,<26)
29
- Requires-Dist: tenacity (>=8.0.0)
30
- Requires-Dist: truststore (>=0.1)
31
- Requires-Dist: uvicorn (>=0.26.0)
32
- Requires-Dist: watchfiles (>=0.13)
8
+ Requires-Dist: cloudpickle>=3.0.0
9
+ Requires-Dist: cryptography<45.0,>=42.0.0
10
+ Requires-Dist: httpx>=0.25.0
11
+ Requires-Dist: jsonschema-rs<0.30,>=0.20.0
12
+ Requires-Dist: langchain-core>=0.2.38
13
+ Requires-Dist: langgraph-checkpoint>=2.0.23
14
+ Requires-Dist: langgraph-runtime-inmem<0.2,>=0.1.0
15
+ Requires-Dist: langgraph-sdk>=0.1.66
16
+ Requires-Dist: langgraph>=0.3.27
17
+ Requires-Dist: langsmith>=0.1.112
18
+ Requires-Dist: orjson>=3.9.7
19
+ Requires-Dist: pyjwt>=2.9.0
20
+ Requires-Dist: sse-starlette<2.2.0,>=2.1.0
21
+ Requires-Dist: starlette>=0.38.6
22
+ Requires-Dist: structlog<26,>=24.1.0
23
+ Requires-Dist: tenacity>=8.0.0
24
+ Requires-Dist: truststore>=0.1
25
+ Requires-Dist: uvicorn>=0.26.0
26
+ Requires-Dist: watchfiles>=0.13
33
27
  Description-Content-Type: text/markdown
34
28
 
35
29
  # LangGraph API
@@ -132,4 +126,4 @@ Options:
132
126
 
133
127
  ## License
134
128
 
135
- This project is licensed under the Elastic License 2.0 - see the [LICENSE](./LICENSE) file for details.
129
+ This project is licensed under the Elastic License 2.0 - see the [LICENSE](./LICENSE) file for details.
@@ -1,30 +1,47 @@
1
- LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
2
- langgraph_api/__init__.py,sha256=d4vvnQjTf3nZeJvMOie0EHTHbjNFC-xqHs5rOv3P7oQ,23
1
+ langgraph_api/__init__.py,sha256=KP-rlT7kt2ra8vABrHAwk3sAxXx9YgGE14_P5mGaLL4,23
2
+ langgraph_api/asgi_transport.py,sha256=eqifhHxNnxvI7jJqrY1_8RjL4Fp9NdN4prEub2FWBt8,5091
3
+ langgraph_api/asyncio.py,sha256=nelZwKL7iOjM5GHj1rVjiPE7igUIKLNKtc-3urxmlfo,9250
4
+ langgraph_api/cli.py,sha256=9Ou3tGDDY_VVLt5DFle8UviJdpI4ZigC5hElYvq2-To,14519
5
+ langgraph_api/command.py,sha256=3O9v3i0OPa96ARyJ_oJbLXkfO8rPgDhLCswgO9koTFA,768
6
+ langgraph_api/config.py,sha256=j1e1D9h1cTny3Q_8N3Tbbvq179rEjzPGjMKJnS6yFNE,10982
7
+ langgraph_api/cron_scheduler.py,sha256=i87j4pJrcsmsqMKeKUs69gaAjrGaSM3pM3jnXdN5JDQ,2630
8
+ langgraph_api/errors.py,sha256=Bu_i5drgNTyJcLiyrwVE_6-XrSU50BHf9TDpttki9wQ,1690
9
+ langgraph_api/graph.py,sha256=uc4YFMwzC8husHC0lySPm7KUaYh1L5Y9sZREE-FIekE,23205
10
+ langgraph_api/http.py,sha256=gYbxxjY8aLnsXeJymcJ7G7Nj_yToOGpPYQqmZ1_ggfA,5240
11
+ langgraph_api/logging.py,sha256=3GSbvmXi8yWxWxJ558RE81xUEdklrPHJ4PpkxAb-35w,4428
12
+ langgraph_api/metadata.py,sha256=YZ2O9BpMSgDyPUc4hcw5ab6e6VMZETpoc-ml2RWgpIU,5140
13
+ langgraph_api/patch.py,sha256=Dgs0PXHytekX4SUL6KsjjN0hHcOtGLvv1GRGbh6PswU,1408
14
+ langgraph_api/queue_entrypoint.py,sha256=Hw6W66EEY_V7GHvnRzijsbvoNy4TM7IQVoZJ-DRbSfU,2173
15
+ langgraph_api/route.py,sha256=uN311KjIugyNHG3rmVw_ms61QO1W1l16jJx03rf0R_s,4630
16
+ langgraph_api/schema.py,sha256=2711t4PIBk5dky4gmMndrTRC9CVvAgH47C9FKDxhkBo,5444
17
+ langgraph_api/serde.py,sha256=8fQXg7T7RVUqj_jgOoSOJrWVpQDW0qJKjAjSsEhPHo4,4803
18
+ langgraph_api/server.py,sha256=4P7GpXbE9m-sAV7rBQ4Gd3oFk6htNbL-tRQfICAFc2k,6837
19
+ langgraph_api/sse.py,sha256=3jG_FZj8FI9r7xGWTqaAyDkmqf6P1NOu0EzGrcSOGYc,4033
20
+ langgraph_api/state.py,sha256=8jx4IoTCOjTJuwzuXJKKFwo1VseHjNnw_CCq4x1SW14,2284
21
+ langgraph_api/store.py,sha256=UWVpopgVjAYM2U9Ra6ZY_BmwPPlq6wfqOw7zdWnQjBU,4598
22
+ langgraph_api/stream.py,sha256=UAc_bOlXadE4nK2Bf0iNyzQkMgRegDszk5AMoLR3NGI,12781
23
+ langgraph_api/thread_ttl.py,sha256=-Ox8NFHqUH3wGNdEKMIfAXUubY5WGifIgCaJ7npqLgw,1762
24
+ langgraph_api/utils.py,sha256=92mSti9GfGdMRRWyESKQW5yV-75Z9icGHnIrBYvdypU,3619
25
+ langgraph_api/validation.py,sha256=zMuKmwUEBjBgFMwAaeLZmatwGVijKv2sOYtYg7gfRtc,4950
26
+ langgraph_api/webhook.py,sha256=1ncwO0rIZcj-Df9sxSnFEzd1gP1bfS4okeZQS8NSRoE,1382
27
+ langgraph_api/worker.py,sha256=X1btoYoAhCGLgC8zi34zeF512ZjzXzozOyeb4eLzElY,12418
3
28
  langgraph_api/api/__init__.py,sha256=YVzpbn5IQotvuuLG9fhS9QMrxXfP4s4EpEMG0n4q3Nw,5625
4
- langgraph_api/api/assistants.py,sha256=4_tZCXlOmFg-YwgtsCZPc1wr-3fexqJ6A3_2a5giF90,15811
29
+ langgraph_api/api/assistants.py,sha256=x_V1rnSGFYjNZFJkZKFN9yNFOqXhqkOSqMDSv3I8VeE,15880
5
30
  langgraph_api/api/mcp.py,sha256=RvRYgANqRzNQzSmgjNkq4RlKTtoEJYil04ot9lsmEtE,14352
6
31
  langgraph_api/api/meta.py,sha256=sTgkhE-DaFWpERG6F7KelZfDsmJAiVc4j5dg50tDkSo,2950
7
32
  langgraph_api/api/openapi.py,sha256=362m6Ny8wOwZ6HrDK9JAVUzPkyLYWKeV1E71hPOaA0U,11278
8
33
  langgraph_api/api/runs.py,sha256=ys8X3g2EGbuF_OF1htM4jcLu4Mqztd8v7ttosmIbdsw,17972
9
- langgraph_api/api/store.py,sha256=G4Fm8hgFLlJUW5_ekLS_IOgCfpFy-TK9uq5r9QTOELQ,5447
34
+ langgraph_api/api/store.py,sha256=TSeMiuMfrifmEnEbL0aObC2DPeseLlmZvAMaMzPgG3Y,5535
10
35
  langgraph_api/api/threads.py,sha256=ogMKmEoiycuaV3fa5kpupDohJ7fwUOfVczt6-WSK4FE,9322
11
36
  langgraph_api/api/ui.py,sha256=2nlipYV2nUGR4T9pceaAbgN1lS3-T2zPBh7Nv3j9eZQ,2479
12
- langgraph_api/asyncio.py,sha256=h0eZ7aoDGnJpoxnHLZABVlj1jQ78UxjgiHntTmAEWek,8613
13
37
  langgraph_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
38
  langgraph_api/auth/custom.py,sha256=f_gKqtz1BlPQcwDBlG91k78nxAWKLcxU3wF1tvbZByg,22120
15
- langgraph_api/auth/langsmith/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- langgraph_api/auth/langsmith/backend.py,sha256=UNsXa1rXuUJy8fdnasdILIWoxWIlHafY03YJChV0USk,2764
17
- langgraph_api/auth/langsmith/client.py,sha256=eKchvAom7hdkUXauD8vHNceBDDUijrFgdTV8bKd7x4Q,3998
18
39
  langgraph_api/auth/middleware.py,sha256=jDA4t41DUoAArEY_PNoXesIUBJ0nGhh85QzRdn5EPD0,1916
19
40
  langgraph_api/auth/noop.py,sha256=Bk6Nf3p8D_iMVy_OyfPlyiJp_aEwzL-sHrbxoXpCbac,586
20
41
  langgraph_api/auth/studio_user.py,sha256=FzFQRROKDlA9JjtBuwyZvk6Mbwno5M9RVYjDO6FU3F8,186
21
- langgraph_api/cli.py,sha256=9Ou3tGDDY_VVLt5DFle8UviJdpI4ZigC5hElYvq2-To,14519
22
- langgraph_api/command.py,sha256=3O9v3i0OPa96ARyJ_oJbLXkfO8rPgDhLCswgO9koTFA,768
23
- langgraph_api/config.py,sha256=AsEyWCZXl_x-NvFhbhM7wagspA7DRyoL-IY6f2dBpUo,10968
24
- langgraph_api/cron_scheduler.py,sha256=i87j4pJrcsmsqMKeKUs69gaAjrGaSM3pM3jnXdN5JDQ,2630
25
- langgraph_api/errors.py,sha256=Bu_i5drgNTyJcLiyrwVE_6-XrSU50BHf9TDpttki9wQ,1690
26
- langgraph_api/graph.py,sha256=sn3rH_D51CZ9Ghd6pIb8LO0nc0oIc8H9RXGRWbiamQU,22256
27
- langgraph_api/http.py,sha256=gYbxxjY8aLnsXeJymcJ7G7Nj_yToOGpPYQqmZ1_ggfA,5240
42
+ langgraph_api/auth/langsmith/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ langgraph_api/auth/langsmith/backend.py,sha256=UNsXa1rXuUJy8fdnasdILIWoxWIlHafY03YJChV0USk,2764
44
+ langgraph_api/auth/langsmith/client.py,sha256=eKchvAom7hdkUXauD8vHNceBDDUijrFgdTV8bKd7x4Q,3998
28
45
  langgraph_api/js/.gitignore,sha256=l5yI6G_V6F1600I1IjiUKn87f4uYIrBAYU1MOyBBhg4,59
29
46
  langgraph_api/js/.prettierrc,sha256=0es3ovvyNIqIw81rPQsdt1zCQcOdBqyR_DMbFE4Ifms,19
30
47
  langgraph_api/js/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,8 +52,12 @@ langgraph_api/js/client.mts,sha256=N9CTH7mbXGSD-gpv-XyruYsHI-rgrObL8cQoAp5s3_U,3
35
52
  langgraph_api/js/errors.py,sha256=Cm1TKWlUCwZReDC5AQ6SgNIVGD27Qov2xcgHyf8-GXo,361
36
53
  langgraph_api/js/global.d.ts,sha256=j4GhgtQSZ5_cHzjSPcHgMJ8tfBThxrH-pUOrrJGteOU,196
37
54
  langgraph_api/js/package.json,sha256=craKzuSIEnt-WQpKZDaACwdm75lPqpRQde6l9LfS-eI,1289
38
- langgraph_api/js/remote.py,sha256=ipAITSDyh-kNau37nfRg-PSB-6Lbtax3UJap8-lLZdw,35729
55
+ langgraph_api/js/remote.py,sha256=utq7tjSFUf0zPLDFgC9lnsGKrtX3EVEX6IcNCc9Q1yM,35934
39
56
  langgraph_api/js/schema.py,sha256=7idnv7URlYUdSNMBXQcw7E4SxaPxCq_Oxwnlml8q5ik,408
57
+ langgraph_api/js/sse.py,sha256=lsfp4nyJyA1COmlKG9e2gJnTttf_HGCB5wyH8OZBER8,4105
58
+ langgraph_api/js/tsconfig.json,sha256=imCYqVnqFpaBoZPx8k1nO4slHIWBFsSlmCYhO73cpBs,341
59
+ langgraph_api/js/ui.py,sha256=XNT8iBcyT8XmbIqSQUWd-j_00HsaWB2vRTVabwFBkik,2439
60
+ langgraph_api/js/yarn.lock,sha256=qtnJQjwX8OUQVzsh51N1imtjYGg5RCI9xkg5n5VZMKI,84019
40
61
  langgraph_api/js/src/graph.mts,sha256=9zTQNdtanI_CFnOwNRoamoCVHHQHGbNlbm91aRxDeOc,2675
41
62
  langgraph_api/js/src/load.hooks.mjs,sha256=xNVHq75W0Lk6MUKl1pQYrx-wtQ8_neiUyI6SO-k0ecM,2235
42
63
  langgraph_api/js/src/preload.mjs,sha256=ORV7xwMuZcXWL6jQxNAcCYp8GZVYIvVJbUhmle8jbno,759
@@ -44,61 +65,18 @@ langgraph_api/js/src/utils/files.mts,sha256=MXC-3gy0pkS82AjPBoUN83jY_qg37WSAPHOA
44
65
  langgraph_api/js/src/utils/importMap.mts,sha256=pX4TGOyUpuuWF82kXcxcv3-8mgusRezOGe6Uklm2O5A,1644
45
66
  langgraph_api/js/src/utils/pythonSchemas.mts,sha256=98IW7Z_VP7L_CHNRMb3_MsiV3BgLE2JsWQY_PQcRR3o,685
46
67
  langgraph_api/js/src/utils/serde.mts,sha256=D9o6MwTgwPezC_DEmsWS5NnLPnjPMVWIb1I1D4QPEPo,743
47
- langgraph_api/js/sse.py,sha256=lsfp4nyJyA1COmlKG9e2gJnTttf_HGCB5wyH8OZBER8,4105
48
- langgraph_api/js/tests/api.test.mts,sha256=UT5UotPULGYUMQ5ZQ5yLBhRP-0cfPmQ3-4-a5GQ9p58,69458
49
- langgraph_api/js/tests/auth.test.mts,sha256=mMhKe9ggJw4BgUqzSVwqYY3HLMXXEBZ23iiKK8Yq1mM,21678
50
- langgraph_api/js/tests/compose-postgres.auth.yml,sha256=iPfJbCeYZdV6GiRLiDn_f7qgpG4TyyGaQ4lV-ZXr6Qk,1768
51
- langgraph_api/js/tests/compose-postgres.yml,sha256=w4B3YRS0QEnTcZH2-MY0DYvR_c5GcER0uDa1Ga_knf8,1960
52
- langgraph_api/js/tests/graphs/.gitignore,sha256=26J8MarZNXh7snXD5eTpV3CPFTht5Znv8dtHYCLNfkw,12
53
- langgraph_api/js/tests/graphs/agent.css,sha256=QgcOC0W7IBsrg4pSqqpull-WTgtULZfx_lF_5ZxLdag,23
54
- langgraph_api/js/tests/graphs/agent.mts,sha256=0CizKahPnDg5JB9_zGyZRQc7RCM19SV4FiWxscLAWY0,5402
55
- langgraph_api/js/tests/graphs/agent.ui.tsx,sha256=JDFJdpdIS6rglkXTaROSb1Is0j1kt5wN9ML8W4cuht8,175
56
- langgraph_api/js/tests/graphs/agent_simple.mts,sha256=EDaQXM5x73HhcHoujezOX5C27uZdGdtfMVBE9o4hleE,2998
57
- langgraph_api/js/tests/graphs/auth.mts,sha256=MS7pyla1bHRT5Ll-6-vxqcr6-kjbMorn4wG7LlMiOzg,3196
58
- langgraph_api/js/tests/graphs/command.mts,sha256=HAliqio19XXSe4nTxKMCCIm7uUc0jPvvs6KUW16Cqhc,1164
59
- langgraph_api/js/tests/graphs/delay.mts,sha256=LPZSex0AJO_Bcp1qtS6P92VRVN9rBZQQLBSsPUd6gOc,704
60
- langgraph_api/js/tests/graphs/dynamic.mts,sha256=Wf_-keF7lkEfp_iyI45nlFGCeU8ARLQ8axc0LXh7TyE,659
61
- langgraph_api/js/tests/graphs/error.mts,sha256=l4tk89449dj1BnEF_0ZcfPt0Ikk1gl8L1RaSnRfr3xo,487
62
- langgraph_api/js/tests/graphs/http.mts,sha256=64xbMlLA58323zOX68Zh57zIB5Zl8ZCqEWRPNdJ-oJs,2171
63
- langgraph_api/js/tests/graphs/langgraph.json,sha256=h6hV1wkNEUIpLBX9JOUKqtIBvbhvzyLEuWtBIHteseg,265
64
- langgraph_api/js/tests/graphs/nested.mts,sha256=e06kFzcX2zEJlb7e5B6kMnuZn6sfvsO7PCcYGkkV-8U,1248
65
- langgraph_api/js/tests/graphs/package.json,sha256=8kgqWdZJCwekCqjsSrhbLrAPZ2vEy1DmcC8EQnwJMDU,262
66
- langgraph_api/js/tests/graphs/weather.mts,sha256=Gef9dCXxoVgNa4Ba0AcoptodYV85Ed2CGcleUB9BRMk,1656
67
- langgraph_api/js/tests/graphs/yarn.lock,sha256=HDLJKx47Y-csPzA5eYUMVHWE8fMKrZgrc4SEkQAYYCE,11201
68
- langgraph_api/js/tests/utils.mts,sha256=Jk1ZZmllNgSS6FJlSs9VaQxHqCEUzkqB5rRQwTSAOP4,441
69
- langgraph_api/js/tsconfig.json,sha256=imCYqVnqFpaBoZPx8k1nO4slHIWBFsSlmCYhO73cpBs,341
70
- langgraph_api/js/ui.py,sha256=XNT8iBcyT8XmbIqSQUWd-j_00HsaWB2vRTVabwFBkik,2439
71
- langgraph_api/js/yarn.lock,sha256=qtnJQjwX8OUQVzsh51N1imtjYGg5RCI9xkg5n5VZMKI,84019
72
- langgraph_api/logging.py,sha256=3GSbvmXi8yWxWxJ558RE81xUEdklrPHJ4PpkxAb-35w,4428
73
- langgraph_api/metadata.py,sha256=ptaxwmzdx2bUBSc1KRhqgF-Xnm-Zh2gqwSiHpl8LD9c,4482
74
68
  langgraph_api/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
69
  langgraph_api/middleware/http_logger.py,sha256=aj4mdisRobFePkD3Iy6-w_Mujwx4TQRaEhPvSd6HgLk,3284
76
70
  langgraph_api/middleware/private_network.py,sha256=eYgdyU8AzU2XJu362i1L8aSFoQRiV7_aLBPw7_EgeqI,2111
77
71
  langgraph_api/middleware/request_id.py,sha256=jBaL-zRLIYuGkYBz1poSH35ld_GDRuiMR5CyIpzKJt8,1025
78
72
  langgraph_api/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
73
  langgraph_api/models/run.py,sha256=kVdxF239sVmdvXUZNBL-GV0-euZO-Ca2Jz8qseNycKM,13362
80
- langgraph_api/patch.py,sha256=Dgs0PXHytekX4SUL6KsjjN0hHcOtGLvv1GRGbh6PswU,1408
81
- langgraph_api/queue_entrypoint.py,sha256=Hw6W66EEY_V7GHvnRzijsbvoNy4TM7IQVoZJ-DRbSfU,2173
82
- langgraph_api/route.py,sha256=uN311KjIugyNHG3rmVw_ms61QO1W1l16jJx03rf0R_s,4630
83
- langgraph_api/schema.py,sha256=2711t4PIBk5dky4gmMndrTRC9CVvAgH47C9FKDxhkBo,5444
84
- langgraph_api/serde.py,sha256=8fQXg7T7RVUqj_jgOoSOJrWVpQDW0qJKjAjSsEhPHo4,4803
85
- langgraph_api/server.py,sha256=4P7GpXbE9m-sAV7rBQ4Gd3oFk6htNbL-tRQfICAFc2k,6837
86
- langgraph_api/sse.py,sha256=3jG_FZj8FI9r7xGWTqaAyDkmqf6P1NOu0EzGrcSOGYc,4033
87
- langgraph_api/state.py,sha256=8jx4IoTCOjTJuwzuXJKKFwo1VseHjNnw_CCq4x1SW14,2284
88
- langgraph_api/stream.py,sha256=vQXHb2f8g-VvTRjPcgq4MEQ2mR4tYdQ8nxr4V3ogQkQ,12433
89
- langgraph_api/thread_ttl.py,sha256=-Ox8NFHqUH3wGNdEKMIfAXUubY5WGifIgCaJ7npqLgw,1762
90
74
  langgraph_api/tunneling/cloudflare.py,sha256=iKb6tj-VWPlDchHFjuQyep2Dpb-w2NGfJKt-WJG9LH0,3650
91
- langgraph_api/utils.py,sha256=92mSti9GfGdMRRWyESKQW5yV-75Z9icGHnIrBYvdypU,3619
92
- langgraph_api/validation.py,sha256=zMuKmwUEBjBgFMwAaeLZmatwGVijKv2sOYtYg7gfRtc,4950
93
- langgraph_api/webhook.py,sha256=1ncwO0rIZcj-Df9sxSnFEzd1gP1bfS4okeZQS8NSRoE,1382
94
- langgraph_api/worker.py,sha256=uuQ6i9iKvSeF4CD_w1nGgpQ4FXLZ2wpn3IvHOLfphTY,12391
95
75
  langgraph_license/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
76
  langgraph_license/validation.py,sha256=ZKraAVJArAABKqrmHN-EN18ncoNUmRm500Yt1Sc7tUA,537
97
77
  langgraph_runtime/__init__.py,sha256=O4GgSmu33c-Pr8Xzxj_brcK5vkm70iNTcyxEjICFZxA,1075
98
- logging.json,sha256=3RNjSADZmDq38eHePMm1CbP6qZ71AmpBtLwCmKU9Zgo,379
99
- openapi.json,sha256=ZMY9UXZJYiFK59z8QmDxVZ7LV6KonQbHzG-D5h-ZTYE,135412
100
- langgraph_api-0.2.26.dist-info/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
101
- langgraph_api-0.2.26.dist-info/METADATA,sha256=rufG48q5XwNj15-eMSn0ObNMtA3PmzYLRrFwLME4q7w,4275
102
- langgraph_api-0.2.26.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
103
- langgraph_api-0.2.26.dist-info/entry_points.txt,sha256=3EYLgj89DfzqJHHYGxPH4A_fEtClvlRbWRUHaXO7hj4,77
104
- langgraph_api-0.2.26.dist-info/RECORD,,
78
+ langgraph_api-0.2.28.dist-info/METADATA,sha256=DetFDsETpSVApUMNUJpV8mCknIsw06H-0n4HkcvxI7Q,3892
79
+ langgraph_api-0.2.28.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
80
+ langgraph_api-0.2.28.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
81
+ langgraph_api-0.2.28.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
82
+ langgraph_api-0.2.28.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.2
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ langgraph-verify-graphs = langgraph_api.graph:verify_graphs