langgraph-api 0.2.117__tar.gz → 0.2.123__tar.gz

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 (113) hide show
  1. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/Makefile +1 -1
  2. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/PKG-INFO +2 -2
  3. langgraph_api-0.2.123/langgraph_api/__init__.py +1 -0
  4. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/runs.py +0 -6
  5. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/ui.py +3 -1
  6. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/client.mts +9 -1
  7. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/package.json +5 -5
  8. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/yarn.lock +28 -45
  9. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/queue_entrypoint.py +17 -1
  10. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/schema.py +3 -1
  11. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/stream.py +24 -6
  12. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/thread_ttl.py +3 -0
  13. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/openapi.json +163 -0
  14. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/pyproject.toml +1 -1
  15. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/uv.lock +15 -15
  16. langgraph_api-0.2.117/langgraph_api/__init__.py +0 -1
  17. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/.gitignore +0 -0
  18. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/LICENSE +0 -0
  19. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/README.md +0 -0
  20. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/.gitignore +0 -0
  21. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/Makefile +0 -0
  22. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/README.md +0 -0
  23. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/burst.js +0 -0
  24. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/ramp.js +0 -0
  25. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/benchmark/weather.js +0 -0
  26. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/constraints.txt +0 -0
  27. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/forbidden.txt +0 -0
  28. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/healthcheck.py +0 -0
  29. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/__init__.py +0 -0
  30. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/assistants.py +0 -0
  31. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/mcp.py +0 -0
  32. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/meta.py +0 -0
  33. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/openapi.py +0 -0
  34. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/store.py +0 -0
  35. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/api/threads.py +0 -0
  36. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/asgi_transport.py +0 -0
  37. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/asyncio.py +0 -0
  38. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/__init__.py +0 -0
  39. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/custom.py +0 -0
  40. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/langsmith/__init__.py +0 -0
  41. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/langsmith/backend.py +0 -0
  42. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/langsmith/client.py +0 -0
  43. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/middleware.py +0 -0
  44. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/noop.py +0 -0
  45. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/auth/studio_user.py +0 -0
  46. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/cli.py +0 -0
  47. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/command.py +0 -0
  48. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/config.py +0 -0
  49. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/cron_scheduler.py +0 -0
  50. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/errors.py +0 -0
  51. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/feature_flags.py +0 -0
  52. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/graph.py +0 -0
  53. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/http.py +0 -0
  54. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/http_metrics.py +0 -0
  55. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/.gitignore +0 -0
  56. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/.prettierrc +0 -0
  57. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/__init__.py +0 -0
  58. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/base.py +0 -0
  59. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/build.mts +0 -0
  60. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/client.http.mts +0 -0
  61. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/errors.py +0 -0
  62. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/global.d.ts +0 -0
  63. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/remote.py +0 -0
  64. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/schema.py +0 -0
  65. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/graph.mts +0 -0
  66. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/load.hooks.mjs +0 -0
  67. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/preload.mjs +0 -0
  68. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/utils/files.mts +0 -0
  69. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/utils/importMap.mts +0 -0
  70. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  71. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/src/utils/serde.mts +0 -0
  72. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/sse.py +0 -0
  73. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/traceblock.mts +0 -0
  74. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/tsconfig.json +0 -0
  75. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/js/ui.py +0 -0
  76. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/logging.py +0 -0
  77. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/metadata.py +0 -0
  78. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/middleware/__init__.py +0 -0
  79. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/middleware/http_logger.py +0 -0
  80. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/middleware/private_network.py +0 -0
  81. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/middleware/request_id.py +0 -0
  82. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/models/__init__.py +0 -0
  83. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/models/run.py +0 -0
  84. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/patch.py +0 -0
  85. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/route.py +0 -0
  86. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/serde.py +0 -0
  87. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/server.py +0 -0
  88. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/sse.py +0 -0
  89. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/state.py +0 -0
  90. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/store.py +0 -0
  91. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/traceblock.py +0 -0
  92. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/tunneling/cloudflare.py +0 -0
  93. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/utils/__init__.py +0 -0
  94. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/utils/cache.py +0 -0
  95. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/utils/config.py +0 -0
  96. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/utils/future.py +0 -0
  97. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/utils.py +0 -0
  98. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/validation.py +0 -0
  99. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/webhook.py +0 -0
  100. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_api/worker.py +0 -0
  101. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_license/__init__.py +0 -0
  102. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_license/validation.py +0 -0
  103. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/__init__.py +0 -0
  104. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/checkpoint.py +0 -0
  105. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/database.py +0 -0
  106. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/lifespan.py +0 -0
  107. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/metrics.py +0 -0
  108. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/ops.py +0 -0
  109. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/queue.py +0 -0
  110. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/retry.py +0 -0
  111. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/langgraph_runtime/store.py +0 -0
  112. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/logging.json +0 -0
  113. {langgraph_api-0.2.117 → langgraph_api-0.2.123}/scripts/create_license.py +0 -0
@@ -54,7 +54,7 @@ start:
54
54
  LANGGRAPH_RUNTIME_EDITION=inmem \
55
55
  LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
56
56
  N_JOBS_PER_WORKER=2 \
57
- LANGSERVE_GRAPHS='{"agent": "./tests/graphs/agent.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph"}' \
57
+ LANGSERVE_GRAPHS='{"agent": "./tests/graphs/agent.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph"}' \
58
58
  LANGGRAPH_STORE='$(STORE_CONFIG)' \
59
59
  LANGGRAPH_CONFIG='{"agent": {"configurable": {"model_name": "openai"}}}' \
60
60
  LANGSMITH_LANGGRAPH_API_VARIANT=test \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.117
3
+ Version: 0.2.123
4
4
  Author-email: Nuno Campos <nuno@langchain.dev>, Will Fu-Hinthorn <will@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: httpx>=0.25.0
11
11
  Requires-Dist: jsonschema-rs<0.30,>=0.20.0
12
12
  Requires-Dist: langchain-core>=0.3.64
13
13
  Requires-Dist: langgraph-checkpoint>=2.0.23
14
- Requires-Dist: langgraph-runtime-inmem<0.7,>=0.6.8
14
+ Requires-Dist: langgraph-runtime-inmem<0.7,>=0.6.9
15
15
  Requires-Dist: langgraph-sdk>=0.2.0
16
16
  Requires-Dist: langgraph>=0.4.0
17
17
  Requires-Dist: langsmith>=0.3.45
@@ -0,0 +1 @@
1
+ __version__ = "0.2.123"
@@ -117,7 +117,6 @@ async def stream_run(
117
117
  thread_id=thread_id,
118
118
  cancel_on_disconnect=on_disconnect == "cancel",
119
119
  stream_channel=await sub,
120
- stream_mode=payload.get("stream_mode", []),
121
120
  last_event_id=None,
122
121
  ),
123
122
  headers={
@@ -159,7 +158,6 @@ async def stream_run_stateless(
159
158
  ignore_404=True,
160
159
  cancel_on_disconnect=on_disconnect == "cancel",
161
160
  stream_channel=await sub,
162
- stream_mode=payload.get("stream_mode", []),
163
161
  last_event_id=None,
164
162
  ),
165
163
  headers={
@@ -203,7 +201,6 @@ async def wait_run(request: ApiRequest):
203
201
  run["run_id"],
204
202
  thread_id=run["thread_id"],
205
203
  stream_channel=await sub,
206
- stream_mode=["updates", "values", "error"],
207
204
  cancel_on_disconnect=on_disconnect == "cancel",
208
205
  )
209
206
  ) as stream:
@@ -211,7 +208,6 @@ async def wait_run(request: ApiRequest):
211
208
  if mode == b"values":
212
209
  vchunk = chunk
213
210
  elif mode == b"updates" and b"__interrupt__" in chunk:
214
- # Include the interrupt message in the values
215
211
  vchunk = chunk
216
212
  elif mode == b"error":
217
213
  vchunk = orjson.dumps({"__error__": orjson.Fragment(chunk)})
@@ -287,7 +283,6 @@ async def wait_run_stateless(request: ApiRequest):
287
283
  run["run_id"],
288
284
  thread_id=run["thread_id"],
289
285
  stream_channel=await sub,
290
- stream_mode=["updates", "values", "error"],
291
286
  ignore_404=True,
292
287
  cancel_on_disconnect=on_disconnect == "cancel",
293
288
  )
@@ -296,7 +291,6 @@ async def wait_run_stateless(request: ApiRequest):
296
291
  if mode == b"values":
297
292
  vchunk = chunk
298
293
  elif mode == b"updates" and b"__interrupt__" in chunk:
299
- # Include the interrupt message in the values
300
294
  vchunk = chunk
301
295
  elif mode == b"error":
302
296
  vchunk = orjson.dumps({"__error__": orjson.Fragment(chunk)})
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import os
3
+ import re
3
4
 
4
5
  from anyio import open_file
5
6
  from orjson import loads
@@ -58,6 +59,7 @@ async def handle_ui(request: ApiRequest) -> Response:
58
59
  return host.startswith(needle + ":") or host == needle
59
60
 
60
61
  protocol = "http:" if is_host("localhost") or is_host("127.0.0.1") else ""
62
+ valid_js_name = re.sub(r"[^a-zA-Z0-9]", "_", graph_id)
61
63
 
62
64
  if ext == ".css":
63
65
  result.append(
@@ -66,7 +68,7 @@ async def handle_ui(request: ApiRequest) -> Response:
66
68
  elif ext == ".js":
67
69
  result.append(
68
70
  f'<script src="{protocol}//{host}/ui/{graph_id}/{basename}" '
69
- f"onload='__LGUI_{graph_id}.render({json.dumps(message['name'])}, \"{{{{shadowRootId}}}}\")'>"
71
+ f"onload='__LGUI_{valid_js_name}.render({json.dumps(message['name'])}, \"{{{{shadowRootId}}}}\")'>"
70
72
  "</script>"
71
73
  )
72
74
 
@@ -576,6 +576,8 @@ export class RemoteStore extends BaseStore {
576
576
  const StreamModeSchema = z.union([
577
577
  z.literal("updates"),
578
578
  z.literal("debug"),
579
+ z.literal("tasks"),
580
+ z.literal("checkpoints"),
579
581
  z.literal("values"),
580
582
  z.literal("custom"),
581
583
  ]);
@@ -654,7 +656,13 @@ async function* streamEventsRequest(
654
656
  : [payload.stream_mode];
655
657
 
656
658
  const graphStreamMode: Set<
657
- "updates" | "debug" | "values" | "messages" | "custom"
659
+ | "updates"
660
+ | "debug"
661
+ | "values"
662
+ | "tasks"
663
+ | "checkpoints"
664
+ | "messages"
665
+ | "custom"
658
666
  > = new Set();
659
667
  if (payload.stream_mode) {
660
668
  for (const mode of userStreamMode) {
@@ -9,11 +9,11 @@
9
9
  "dependencies": {
10
10
  "@hono/node-server": "^1.12.0",
11
11
  "@hono/zod-validator": "^0.2.2",
12
- "@langchain/core": "^0.3.44",
12
+ "@langchain/core": "^0.3.59",
13
13
  "@langchain/langgraph": "^0.2.65",
14
- "@langchain/langgraph-api": "~0.0.38",
14
+ "@langchain/langgraph-api": "~0.0.56",
15
+ "@langchain/langgraph-ui": "~0.0.56",
15
16
  "@langchain/langgraph-checkpoint": "~0.0.18",
16
- "@langchain/langgraph-ui": "~0.0.38",
17
17
  "@types/json-schema": "^7.0.15",
18
18
  "@typescript/vfs": "^1.6.0",
19
19
  "dedent": "^1.5.3",
@@ -27,14 +27,14 @@
27
27
  "uuid": "^10.0.0",
28
28
  "vite": "^6.1.6",
29
29
  "winston": "^3.17.0",
30
- "zod": "^3.23.8"
30
+ "zod": "^3.25.32"
31
31
  },
32
32
  "resolutions": {
33
33
  "esbuild": "^0.25.0",
34
34
  "vite": "^6.1.6"
35
35
  },
36
36
  "devDependencies": {
37
- "@langchain/langgraph-sdk": "^0.0.84",
37
+ "@langchain/langgraph-sdk": "^0.0.104",
38
38
  "@types/node": "^22.2.0",
39
39
  "@types/react": "^19.0.8",
40
40
  "@types/react-dom": "^19.0.3",
@@ -185,40 +185,40 @@
185
185
  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
186
186
  integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
187
187
 
188
- "@langchain/core@^0.3.44":
189
- version "0.3.44"
190
- resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.44.tgz#b449646ab31d0cefd3e9fa3ec02a0fb6a78f7ef6"
191
- integrity sha512-3BsSFf7STvPPZyl2kMANgtVnCUvDdyP4k+koP+nY2Tczd5V+RFkuazIn/JOj/xxy/neZjr4PxFU4BFyF1aKXOA==
188
+ "@langchain/core@^0.3.59":
189
+ version "0.3.66"
190
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.66.tgz#cd20687f29a07148436cd8b72b88c66d076c500c"
191
+ integrity sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw==
192
192
  dependencies:
193
193
  "@cfworker/json-schema" "^4.0.2"
194
194
  ansi-styles "^5.0.0"
195
195
  camelcase "6"
196
196
  decamelize "1.2.0"
197
197
  js-tiktoken "^1.0.12"
198
- langsmith ">=0.2.8 <0.4.0"
198
+ langsmith "^0.3.46"
199
199
  mustache "^4.2.0"
200
200
  p-queue "^6.6.2"
201
201
  p-retry "4"
202
202
  uuid "^10.0.0"
203
- zod "^3.22.4"
203
+ zod "^3.25.32"
204
204
  zod-to-json-schema "^3.22.3"
205
205
 
206
- "@langchain/langgraph-api@~0.0.38":
207
- version "0.0.38"
208
- resolved "https://registry.yarnpkg.com/@langchain/langgraph-api/-/langgraph-api-0.0.38.tgz#dc456473c1538c2204cd1b6aa23308fa4a9b905f"
209
- integrity sha512-pyWejPoCWbB8oT8yAcodUjzTQPgx1dUBbaDAX4hVBtODNaS9K+xKginQUTv9KAGBOF8DDlBoX9fBrhSNgvoKyA==
206
+ "@langchain/langgraph-api@~0.0.56":
207
+ version "0.0.56"
208
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph-api/-/langgraph-api-0.0.56.tgz#9e0a6e5dd9af2f6ec259a32ca9081b19457a0825"
209
+ integrity sha512-BhrbMKSc3f4CXXDXgvHR8mE2bsgD/G6dDzr+yDkEC7a9eeFI7C8bPhkGmegFJ+q7i6GWtqlQOYSCWHqQFZxynQ==
210
210
  dependencies:
211
211
  "@babel/code-frame" "^7.26.2"
212
212
  "@hono/node-server" "^1.12.0"
213
213
  "@hono/zod-validator" "^0.2.2"
214
- "@langchain/langgraph-ui" "0.0.38"
214
+ "@langchain/langgraph-ui" "0.0.56"
215
215
  "@types/json-schema" "^7.0.15"
216
216
  "@typescript/vfs" "^1.6.0"
217
217
  dedent "^1.5.3"
218
218
  dotenv "^16.4.7"
219
219
  exit-hook "^4.0.0"
220
220
  hono "^4.5.4"
221
- langsmith "^0.2.15"
221
+ langsmith "^0.3.33"
222
222
  open "^10.1.0"
223
223
  semver "^7.7.1"
224
224
  stacktrace-parser "^0.1.10"
@@ -236,10 +236,10 @@
236
236
  dependencies:
237
237
  uuid "^10.0.0"
238
238
 
239
- "@langchain/langgraph-sdk@^0.0.84":
240
- version "0.0.84"
241
- resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.84.tgz#91f1bb431838c0f945326755681dcf3465ca4962"
242
- integrity sha512-l0PFQyJ+6m6aclORNPPWlcRwgKcXVXsPaJCbCUYFABR3yf4cOpsjhUNR0cJ7+2cS400oieHjGRdGGyO/hbSjhg==
239
+ "@langchain/langgraph-sdk@^0.0.104":
240
+ version "0.0.104"
241
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.104.tgz#1a7c4a56442f13094e288b068de1767de8f99d06"
242
+ integrity sha512-wUO6GMy65Y7DsWtjTJ3dA59enrZy2wN4o48AMYN7dF7u/PMXXYyBjBCKSzgVWqO6uWH2yNpyGDrcMwKuk5kQLA==
243
243
  dependencies:
244
244
  "@types/json-schema" "^7.0.15"
245
245
  p-queue "^6.6.2"
@@ -256,10 +256,10 @@
256
256
  p-retry "4"
257
257
  uuid "^9.0.0"
258
258
 
259
- "@langchain/langgraph-ui@0.0.38", "@langchain/langgraph-ui@~0.0.38":
260
- version "0.0.38"
261
- resolved "https://registry.yarnpkg.com/@langchain/langgraph-ui/-/langgraph-ui-0.0.38.tgz#52ba614af4093614855af84e6b847f32325e852b"
262
- integrity sha512-0FwkMeoKFIMLaqhIjkDvs31+vDnauD94bgtK2d9hzC0Ze7khC5oar2s2+xwibScu2dFd7udafZ4Cxsk7Q+9mVw==
259
+ "@langchain/langgraph-ui@0.0.56", "@langchain/langgraph-ui@~0.0.56":
260
+ version "0.0.56"
261
+ resolved "https://registry.yarnpkg.com/@langchain/langgraph-ui/-/langgraph-ui-0.0.56.tgz#b566afa4ad940fc6bd942205a00b3afac7fd7363"
262
+ integrity sha512-cRU+fMCz1NAOjRLcreNa64Gap89yio0p8baRigehtL1SNsXJEaZ2xdGjbnjaWIl8rTrriDak4oisx07whwcBjQ==
263
263
  dependencies:
264
264
  "@commander-js/extra-typings" "^13.0.0"
265
265
  commander "^13.0.0"
@@ -738,11 +738,6 @@ colorspace@1.1.x:
738
738
  color "^3.1.3"
739
739
  text-hex "1.0.x"
740
740
 
741
- commander@^10.0.1:
742
- version "10.0.1"
743
- resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
744
- integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
745
-
746
741
  commander@^13.0.0:
747
742
  version "13.1.0"
748
743
  resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46"
@@ -1060,10 +1055,10 @@ kuler@^2.0.0:
1060
1055
  resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
1061
1056
  integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
1062
1057
 
1063
- "langsmith@>=0.2.8 <0.4.0":
1064
- version "0.3.3"
1065
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.3.tgz#fcb61454842cf2f85c937f536fa0729544c7c467"
1066
- integrity sha512-B9B0ThaPYwNdTg9ck6bWF2Mjd1TJvVKLfLedufIudmO8aPDslcc2uVlyPEtskZFEdmfjfVHEqDnhnuAhyifrZQ==
1058
+ langsmith@^0.3.33, langsmith@^0.3.46:
1059
+ version "0.3.48"
1060
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.48.tgz#32cdbe5e7e5ca73866ed3a38a654468bac034155"
1061
+ integrity sha512-oEsj0Z8S2Chgb3vJzRX2vplLu4RWR1cpraIaVwv2PsNZ57VbHgZEdXdeh5kh16iP8PAv04JkBncP+KLRoKBFEw==
1067
1062
  dependencies:
1068
1063
  "@types/uuid" "^10.0.0"
1069
1064
  chalk "^4.1.2"
@@ -1073,18 +1068,6 @@ kuler@^2.0.0:
1073
1068
  semver "^7.6.3"
1074
1069
  uuid "^10.0.0"
1075
1070
 
1076
- langsmith@^0.2.15:
1077
- version "0.2.15"
1078
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.15.tgz#0692a00fc310817cb9b5939488468c93d4ba2c9d"
1079
- integrity sha512-homtJU41iitqIZVuuLW7iarCzD4f39KcfP9RTBWav9jifhrsDa1Ez89Ejr+4qi72iuBu8Y5xykchsGVgiEZ93w==
1080
- dependencies:
1081
- "@types/uuid" "^10.0.0"
1082
- commander "^10.0.1"
1083
- p-queue "^6.6.2"
1084
- p-retry "4"
1085
- semver "^7.6.3"
1086
- uuid "^10.0.0"
1087
-
1088
1071
  lightningcss-darwin-arm64@1.29.2:
1089
1072
  version "1.29.2"
1090
1073
  resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz#6ceff38b01134af48e859394e1ca21e5d49faae6"
@@ -1743,7 +1726,7 @@ zod-to-json-schema@^3.22.3:
1743
1726
  resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.5.tgz#ec23def47dcafe3a4d640eba6a346b34f9a693a5"
1744
1727
  integrity sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==
1745
1728
 
1746
- zod@^3.22.4, zod@^3.23.8:
1747
- version "3.23.8"
1748
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
1749
- integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==
1729
+ zod@^3.23.8, zod@^3.25.32:
1730
+ version "3.25.76"
1731
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34"
1732
+ integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==
@@ -17,6 +17,7 @@ import logging.config
17
17
  import os
18
18
  import pathlib
19
19
  import signal
20
+ from contextlib import asynccontextmanager
20
21
 
21
22
  import structlog
22
23
  import uvloop
@@ -94,11 +95,26 @@ async def health_and_metrics_server():
94
95
 
95
96
  async def entrypoint():
96
97
  from langgraph_api import logging as lg_logging
98
+ from langgraph_api.api import user_router
97
99
 
98
100
  lg_logging.set_logging_context({"entrypoint": "python-queue"})
99
101
  tasks: set[asyncio.Task] = set()
100
102
  tasks.add(asyncio.create_task(health_and_metrics_server()))
101
- async with lifespan(None, with_cron_scheduler=False, taskset=tasks):
103
+
104
+ original_lifespan = user_router.router.lifespan_context if user_router else None
105
+
106
+ @asynccontextmanager
107
+ async def combined_lifespan(app, with_cron_scheduler=False, taskset=None):
108
+ async with lifespan(
109
+ app, with_cron_scheduler=with_cron_scheduler, taskset=taskset
110
+ ):
111
+ if original_lifespan:
112
+ async with original_lifespan(app):
113
+ yield
114
+ else:
115
+ yield
116
+
117
+ async with combined_lifespan(None, with_cron_scheduler=False, taskset=tasks):
102
118
  await asyncio.gather(*tasks)
103
119
 
104
120
 
@@ -14,7 +14,9 @@ RunStatus = Literal["pending", "running", "error", "success", "timeout", "interr
14
14
 
15
15
  ThreadStatus = Literal["idle", "busy", "interrupted", "error"]
16
16
 
17
- StreamMode = Literal["values", "messages", "updates", "events", "debug", "custom"]
17
+ StreamMode = Literal[
18
+ "values", "messages", "updates", "events", "debug", "tasks", "checkpoints", "custom"
19
+ ]
18
20
 
19
21
  MultitaskStrategy = Literal["reject", "rollback", "interrupt", "enqueue"]
20
22
 
@@ -229,16 +229,25 @@ async def astream_state(
229
229
  ),
230
230
  [message_chunk_to_message(messages[msg.id])],
231
231
  )
232
- elif mode in stream_mode or (
232
+ elif mode in stream_mode:
233
+ if subgraphs and ns:
234
+ yield f"{mode}|{'|'.join(ns)}", chunk
235
+ else:
236
+ yield mode, chunk
237
+ elif (
233
238
  mode == "updates"
234
239
  and isinstance(chunk, dict)
235
240
  and "__interrupt__" in chunk
241
+ and len(chunk["__interrupt__"]) > 0
236
242
  and only_interrupt_updates
237
243
  ):
244
+ # We always want to return interrupt events by default.
245
+ # If updates aren't specified as a stream mode, we return these as values events.
246
+ # If the interrupt doesn't have any actions (e.g. interrupt before or after a node is specified), we don't return the interrupt at all today.
238
247
  if subgraphs and ns:
239
- yield f"{mode}|{'|'.join(ns)}", chunk
248
+ yield f"values|{'|'.join(ns)}", chunk
240
249
  else:
241
- yield mode, chunk
250
+ yield "values", chunk
242
251
  # --- end shared logic with astream ---
243
252
  elif "events" in stream_mode:
244
253
  yield "events", event
@@ -300,16 +309,25 @@ async def astream_state(
300
309
  ),
301
310
  [message_chunk_to_message(messages[msg.id])],
302
311
  )
303
- elif mode in stream_mode or (
312
+ elif mode in stream_mode:
313
+ if subgraphs and ns:
314
+ yield f"{mode}|{'|'.join(ns)}", chunk
315
+ else:
316
+ yield mode, chunk
317
+ elif (
304
318
  mode == "updates"
305
319
  and isinstance(chunk, dict)
306
320
  and "__interrupt__" in chunk
321
+ and len(chunk["__interrupt__"]) > 0
307
322
  and only_interrupt_updates
308
323
  ):
324
+ # We always want to return interrupt events by default.
325
+ # If updates aren't specified as a stream mode, we return these as values events.
326
+ # If the interrupt doesn't have any actions (e.g. interrupt before or after a node is specified), we don't return the interrupt at all today.
309
327
  if subgraphs and ns:
310
- yield f"{mode}|{'|'.join(ns)}", chunk
328
+ yield "values|{'|'.join(ns)}", chunk
311
329
  else:
312
- yield mode, chunk
330
+ yield "values", chunk
313
331
  # --- end shared logic with astream_events ---
314
332
  if is_remote_pregel:
315
333
  # increment the remote runs
@@ -29,6 +29,7 @@ async def thread_ttl_sweep_loop():
29
29
  strategy=strategy,
30
30
  interval_minutes=sweep_interval_minutes,
31
31
  )
32
+ loop = asyncio.get_running_loop()
32
33
 
33
34
  from langgraph_runtime.ops import Threads
34
35
 
@@ -36,12 +37,14 @@ async def thread_ttl_sweep_loop():
36
37
  await asyncio.sleep(sweep_interval_minutes * 60)
37
38
  try:
38
39
  async with connect() as conn:
40
+ sweep_start = loop.time()
39
41
  threads_processed, threads_deleted = await Threads.sweep_ttl(conn)
40
42
  if threads_processed > 0:
41
43
  await logger.ainfo(
42
44
  f"Thread TTL sweep completed. Processed {threads_processed}",
43
45
  threads_processed=threads_processed,
44
46
  threads_deleted=threads_deleted,
47
+ duration=loop.time() - sweep_start,
45
48
  )
46
49
  except Exception as exc:
47
50
  logger.exception("Thread TTL sweep iteration failed", exc_info=exc)
@@ -28,6 +28,14 @@
28
28
  {
29
29
  "name": "Store",
30
30
  "description": "Store is an API for managing persistent key-value store (long-term memory) that is available from any thread."
31
+ },
32
+ {
33
+ "name": "MCP",
34
+ "description": "Model Context Protocol related endpoints for exposing an agent as an MCP server."
35
+ },
36
+ {
37
+ "name": "System",
38
+ "description": "System endpoints for health checks, metrics, and server information."
31
39
  }
32
40
  ],
33
41
  "paths": {
@@ -2996,6 +3004,153 @@
2996
3004
  "MCP"
2997
3005
  ]
2998
3006
  }
3007
+ },
3008
+ "/info": {
3009
+ "get": {
3010
+ "tags": [
3011
+ "System"
3012
+ ],
3013
+ "summary": "Server Information",
3014
+ "description": "Get server version information, feature flags, and metadata.",
3015
+ "operationId": "server_info_info_get",
3016
+ "responses": {
3017
+ "200": {
3018
+ "description": "Success",
3019
+ "content": {
3020
+ "application/json": {
3021
+ "schema": {
3022
+ "type": "object",
3023
+ "properties": {
3024
+ "version": {
3025
+ "type": "string",
3026
+ "title": "Version",
3027
+ "description": "LangGraph API version"
3028
+ },
3029
+ "langgraph_py_version": {
3030
+ "type": "string",
3031
+ "title": "LangGraph Python Version",
3032
+ "description": "LangGraph Python library version"
3033
+ },
3034
+ "flags": {
3035
+ "type": "object",
3036
+ "title": "Feature Flags",
3037
+ "description": "Enabled features and capabilities"
3038
+ },
3039
+ "metadata": {
3040
+ "type": "object",
3041
+ "title": "Metadata",
3042
+ "description": "Server deployment metadata"
3043
+ }
3044
+ },
3045
+ "required": ["version", "langgraph_py_version", "flags", "metadata"],
3046
+ "title": "ServerInfo"
3047
+ }
3048
+ }
3049
+ }
3050
+ }
3051
+ }
3052
+ }
3053
+ },
3054
+ "/metrics": {
3055
+ "get": {
3056
+ "tags": [
3057
+ "System"
3058
+ ],
3059
+ "summary": "System Metrics",
3060
+ "description": "Get system metrics in Prometheus or JSON format for monitoring and observability.",
3061
+ "operationId": "system_metrics_metrics_get",
3062
+ "parameters": [
3063
+ {
3064
+ "name": "format",
3065
+ "in": "query",
3066
+ "required": false,
3067
+ "schema": {
3068
+ "type": "string",
3069
+ "enum": ["prometheus", "json"],
3070
+ "default": "prometheus",
3071
+ "title": "Output Format",
3072
+ "description": "Response format: prometheus (default) or json"
3073
+ }
3074
+ }
3075
+ ],
3076
+ "responses": {
3077
+ "200": {
3078
+ "description": "Success",
3079
+ "content": {
3080
+ "text/plain": {
3081
+ "schema": {
3082
+ "type": "string",
3083
+ "title": "Prometheus Metrics",
3084
+ "description": "Metrics in Prometheus exposition format"
3085
+ }
3086
+ },
3087
+ "application/json": {
3088
+ "schema": {
3089
+ "type": "object",
3090
+ "title": "JSON Metrics",
3091
+ "description": "Metrics in JSON format including queue stats, worker stats, and HTTP metrics"
3092
+ }
3093
+ }
3094
+ }
3095
+ }
3096
+ }
3097
+ }
3098
+ },
3099
+ "/ok": {
3100
+ "get": {
3101
+ "tags": [
3102
+ "System"
3103
+ ],
3104
+ "summary": "Health Check",
3105
+ "description": "Check the health status of the server. Optionally check database connectivity.",
3106
+ "operationId": "health_check_ok_get",
3107
+ "parameters": [
3108
+ {
3109
+ "name": "check_db",
3110
+ "in": "query",
3111
+ "required": false,
3112
+ "schema": {
3113
+ "type": "integer",
3114
+ "enum": [0, 1],
3115
+ "default": 0,
3116
+ "title": "Check Database",
3117
+ "description": "Whether to check database connectivity (0=false, 1=true)"
3118
+ }
3119
+ }
3120
+ ],
3121
+ "responses": {
3122
+ "200": {
3123
+ "description": "Success",
3124
+ "content": {
3125
+ "application/json": {
3126
+ "schema": {
3127
+ "type": "object",
3128
+ "properties": {
3129
+ "ok": {
3130
+ "type": "boolean",
3131
+ "const": true,
3132
+ "title": "OK",
3133
+ "description": "Indicates the server is healthy"
3134
+ }
3135
+ },
3136
+ "required": ["ok"],
3137
+ "title": "HealthResponse"
3138
+ }
3139
+ }
3140
+ }
3141
+ },
3142
+ "500": {
3143
+ "description": "Internal Server Error",
3144
+ "content": {
3145
+ "application/json": {
3146
+ "schema": {
3147
+ "$ref": "#/components/schemas/ErrorResponse"
3148
+ }
3149
+ }
3150
+ }
3151
+ }
3152
+ }
3153
+ }
2999
3154
  }
3000
3155
  },
3001
3156
  "components": {
@@ -3852,6 +4007,8 @@
3852
4007
  "values",
3853
4008
  "messages",
3854
4009
  "messages-tuple",
4010
+ "tasks",
4011
+ "checkpoints",
3855
4012
  "updates",
3856
4013
  "events",
3857
4014
  "debug",
@@ -3866,6 +4023,8 @@
3866
4023
  "values",
3867
4024
  "messages",
3868
4025
  "messages-tuple",
4026
+ "tasks",
4027
+ "checkpoints",
3869
4028
  "updates",
3870
4029
  "events",
3871
4030
  "debug",
@@ -4096,6 +4255,8 @@
4096
4255
  "values",
4097
4256
  "messages",
4098
4257
  "messages-tuple",
4258
+ "tasks",
4259
+ "checkpoints",
4099
4260
  "updates",
4100
4261
  "events",
4101
4262
  "debug",
@@ -4110,6 +4271,8 @@
4110
4271
  "values",
4111
4272
  "messages",
4112
4273
  "messages-tuple",
4274
+ "tasks",
4275
+ "checkpoints",
4113
4276
  "updates",
4114
4277
  "events",
4115
4278
  "debug",
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "cryptography>=42.0.0,<45.0",
32
32
  "langgraph-sdk>=0.2.0",
33
33
  "cloudpickle>=3.0.0",
34
- "langgraph-runtime-inmem>=0.6.8,<0.7",
34
+ "langgraph-runtime-inmem>=0.6.9,<0.7",
35
35
  "truststore>=0.1",
36
36
  ]
37
37
 
@@ -25,16 +25,16 @@ wheels = [
25
25
 
26
26
  [[package]]
27
27
  name = "anyio"
28
- version = "4.9.0"
28
+ version = "4.10.0"
29
29
  source = { registry = "https://pypi.org/simple" }
30
30
  dependencies = [
31
31
  { name = "idna" },
32
32
  { name = "sniffio" },
33
33
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
34
34
  ]
35
- sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" }
35
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" }
36
36
  wheels = [
37
- { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" },
37
+ { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" },
38
38
  ]
39
39
 
40
40
  [[package]]
@@ -51,11 +51,11 @@ wheels = [
51
51
 
52
52
  [[package]]
53
53
  name = "certifi"
54
- version = "2025.7.14"
54
+ version = "2025.8.3"
55
55
  source = { registry = "https://pypi.org/simple" }
56
- sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" }
56
+ sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" }
57
57
  wheels = [
58
- { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" },
58
+ { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" },
59
59
  ]
60
60
 
61
61
  [[package]]
@@ -376,7 +376,7 @@ wheels = [
376
376
 
377
377
  [[package]]
378
378
  name = "langgraph"
379
- version = "0.6.2"
379
+ version = "0.6.3"
380
380
  source = { registry = "https://pypi.org/simple" }
381
381
  dependencies = [
382
382
  { name = "langchain-core" },
@@ -386,9 +386,9 @@ dependencies = [
386
386
  { name = "pydantic" },
387
387
  { name = "xxhash" },
388
388
  ]
389
- sdist = { url = "https://files.pythonhosted.org/packages/67/4a/09a7732620f1b04a22069730a07eec8db8aa78f482a759534f3a72302073/langgraph-0.6.2.tar.gz", hash = "sha256:ac8784ac21224b3fa6d55061c28748fb2341cbfb509b0b16cbb28208a2ffea93", size = 451164, upload-time = "2025-07-30T20:41:03.787Z" }
389
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/d8/ecedf01b3e90ad288343eeb06d91d8511e049ee0b16d7f3c146baeed2a49/langgraph-0.6.3.tar.gz", hash = "sha256:0d2280d295133dc34ccc12eae1ad4d82ee847b009c59801de418068fa9248e1b", size = 452277, upload-time = "2025-08-03T11:21:35.74Z" }
390
390
  wheels = [
391
- { url = "https://files.pythonhosted.org/packages/5c/3e/42e8fbf430fb321465bd6dddbcfe31b1d0cfd76afb45b5e11298006ff2b3/langgraph-0.6.2-py3-none-any.whl", hash = "sha256:b838dd9e56d8cf9d3f5124cad527cec6e03414aaf1a3c284003eaae89d21f32e", size = 152188, upload-time = "2025-07-30T20:41:02.203Z" },
391
+ { url = "https://files.pythonhosted.org/packages/bb/93/7836486f6c18b0b11e6bde5bc0f318947e610637aa5231081bd4adf79eb9/langgraph-0.6.3-py3-none-any.whl", hash = "sha256:733efd8c59b9915e582619da40f2ab5ebb121319a4d7718adef82d6db07547eb", size = 152463, upload-time = "2025-08-03T11:21:34.002Z" },
392
392
  ]
393
393
 
394
394
  [[package]]
@@ -517,15 +517,15 @@ wheels = [
517
517
 
518
518
  [[package]]
519
519
  name = "langgraph-prebuilt"
520
- version = "0.6.2"
520
+ version = "0.6.3"
521
521
  source = { registry = "https://pypi.org/simple" }
522
522
  dependencies = [
523
523
  { name = "langchain-core" },
524
524
  { name = "langgraph-checkpoint" },
525
525
  ]
526
- sdist = { url = "https://files.pythonhosted.org/packages/d6/9f/f0b611e7da5331018fb85dac34c060d1007b73aa69a4e7e10835022c0aaa/langgraph_prebuilt-0.6.2.tar.gz", hash = "sha256:fb9f4f96d8f26f88bbf997b5b2122ba366d0edf7f3160c653ffa649dff2ec062", size = 125316, upload-time = "2025-07-30T20:32:10.703Z" }
526
+ sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/7f662e24eb89bf74fcf2fd109f350ec023373d196b16d12b54e66961f145/langgraph_prebuilt-0.6.3.tar.gz", hash = "sha256:5e1ca7ba98f53ce98400f34bdb0afe47f71d0167c4108b11d4aeed4c6d4a1d3d", size = 125368, upload-time = "2025-08-03T11:16:24.789Z" }
527
527
  wheels = [
528
- { url = "https://files.pythonhosted.org/packages/04/48/f1996f8b37cb8e2bc44e3668f2bdfaa441cfb1bd418a32097372aab6b17b/langgraph_prebuilt-0.6.2-py3-none-any.whl", hash = "sha256:0c7bb1cc36da8ee3b1dd7cdd20c4023ed1f57b61e70e425bea4b16cac030117d", size = 28858, upload-time = "2025-07-30T20:32:09.712Z" },
528
+ { url = "https://files.pythonhosted.org/packages/9c/27/049a9e07d1d75c39e0109445e93c9df8bc4a8c51730655be561ecdf04dee/langgraph_prebuilt-0.6.3-py3-none-any.whl", hash = "sha256:cea830fc73d1a6fb871c5c6739e894bffcb7b7a07343198b56f263d3113ae8d6", size = 28917, upload-time = "2025-08-03T11:16:23.695Z" },
529
529
  ]
530
530
 
531
531
  [[package]]
@@ -576,7 +576,7 @@ wheels = [
576
576
 
577
577
  [[package]]
578
578
  name = "langsmith"
579
- version = "0.4.8"
579
+ version = "0.4.13"
580
580
  source = { registry = "https://pypi.org/simple" }
581
581
  dependencies = [
582
582
  { name = "httpx" },
@@ -587,9 +587,9 @@ dependencies = [
587
587
  { name = "requests-toolbelt" },
588
588
  { name = "zstandard" },
589
589
  ]
590
- sdist = { url = "https://files.pythonhosted.org/packages/46/38/0da897697ce29fb78cdaacae2d0fa3a4bc2a0abf23f84f6ecd1947f79245/langsmith-0.4.8.tar.gz", hash = "sha256:50eccb744473dd6bd3e0fe024786e2196b1f8598f8defffce7ac31113d6c140f", size = 352414, upload-time = "2025-07-18T19:36:06.082Z" }
590
+ sdist = { url = "https://files.pythonhosted.org/packages/be/7a/a4265a1ae549cb2480dae97867dd6841edaf2b419755d307ef998fa87854/langsmith-0.4.13.tar.gz", hash = "sha256:1ae7dbb5d8150647406f49885a2dd16ab12bd990254b5dc23718838b3d086fde", size = 920911, upload-time = "2025-08-06T20:09:53.041Z" }
591
591
  wheels = [
592
- { url = "https://files.pythonhosted.org/packages/19/4f/481324462c44ce21443b833ad73ee51117031d41c16fec06cddbb7495b26/langsmith-0.4.8-py3-none-any.whl", hash = "sha256:ca2f6024ab9d2cd4d091b2e5b58a5d2cb0c354a0c84fe214145a89ad450abae0", size = 367975, upload-time = "2025-07-18T19:36:04.025Z" },
592
+ { url = "https://files.pythonhosted.org/packages/b2/04/171205d95baa3e5e8867416ffeb90510c3f17036a96e6aa9948ba4920db0/langsmith-0.4.13-py3-none-any.whl", hash = "sha256:dab7b16ee16986995007bf5a777f45c18f8bf7453f67ae2ebcb46ce43c214297", size = 372682, upload-time = "2025-08-06T20:09:51.026Z" },
593
593
  ]
594
594
 
595
595
  [[package]]
@@ -1 +0,0 @@
1
- __version__ = "0.2.117"
File without changes