langgraph-api 0.2.100__tar.gz → 0.2.102__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.100 → langgraph_api-0.2.102}/PKG-INFO +1 -1
  2. langgraph_api-0.2.102/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/runs.py +28 -0
  4. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/client.mts +18 -1
  5. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/metadata.py +5 -0
  6. langgraph_api-0.2.100/langgraph_api/__init__.py +0 -1
  7. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/.gitignore +0 -0
  8. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/LICENSE +0 -0
  9. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/Makefile +0 -0
  10. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/README.md +0 -0
  11. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/.gitignore +0 -0
  12. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/Makefile +0 -0
  13. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/README.md +0 -0
  14. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/burst.js +0 -0
  15. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/ramp.js +0 -0
  16. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/weather.js +0 -0
  17. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/constraints.txt +0 -0
  18. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/forbidden.txt +0 -0
  19. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/healthcheck.py +0 -0
  20. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/__init__.py +0 -0
  21. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/assistants.py +0 -0
  22. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/mcp.py +0 -0
  23. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/meta.py +0 -0
  24. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/openapi.py +0 -0
  25. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/store.py +0 -0
  26. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/threads.py +0 -0
  27. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/ui.py +0 -0
  28. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/asgi_transport.py +0 -0
  29. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/asyncio.py +0 -0
  30. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/__init__.py +0 -0
  31. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/custom.py +0 -0
  32. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/__init__.py +0 -0
  33. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/backend.py +0 -0
  34. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/client.py +0 -0
  35. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/middleware.py +0 -0
  36. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/noop.py +0 -0
  37. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/studio_user.py +0 -0
  38. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/cli.py +0 -0
  39. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/command.py +0 -0
  40. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/config.py +0 -0
  41. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/cron_scheduler.py +0 -0
  42. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/errors.py +0 -0
  43. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/feature_flags.py +0 -0
  44. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/graph.py +0 -0
  45. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/http.py +0 -0
  46. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/http_metrics.py +0 -0
  47. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/.gitignore +0 -0
  48. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/.prettierrc +0 -0
  49. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/__init__.py +0 -0
  50. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/base.py +0 -0
  51. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/build.mts +0 -0
  52. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/client.http.mts +0 -0
  53. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/errors.py +0 -0
  54. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/global.d.ts +0 -0
  55. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/package.json +0 -0
  56. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/remote.py +0 -0
  57. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/schema.py +0 -0
  58. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/graph.mts +0 -0
  59. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/load.hooks.mjs +0 -0
  60. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/preload.mjs +0 -0
  61. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/files.mts +0 -0
  62. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/importMap.mts +0 -0
  63. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  64. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/serde.mts +0 -0
  65. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/sse.py +0 -0
  66. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/traceblock.mts +0 -0
  67. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/tsconfig.json +0 -0
  68. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/ui.py +0 -0
  69. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/yarn.lock +0 -0
  70. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/logging.py +0 -0
  71. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/__init__.py +0 -0
  72. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/http_logger.py +0 -0
  73. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/private_network.py +0 -0
  74. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/request_id.py +0 -0
  75. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/models/__init__.py +0 -0
  76. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/models/run.py +0 -0
  77. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/patch.py +0 -0
  78. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/queue_entrypoint.py +0 -0
  79. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/route.py +0 -0
  80. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/schema.py +0 -0
  81. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/serde.py +0 -0
  82. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/server.py +0 -0
  83. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/sse.py +0 -0
  84. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/state.py +0 -0
  85. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/store.py +0 -0
  86. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/stream.py +0 -0
  87. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/thread_ttl.py +0 -0
  88. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/traceblock.py +0 -0
  89. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/tunneling/cloudflare.py +0 -0
  90. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/__init__.py +0 -0
  91. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/cache.py +0 -0
  92. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/config.py +0 -0
  93. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/future.py +0 -0
  94. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils.py +0 -0
  95. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/validation.py +0 -0
  96. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/webhook.py +0 -0
  97. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/worker.py +0 -0
  98. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_license/__init__.py +0 -0
  99. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_license/validation.py +0 -0
  100. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/__init__.py +0 -0
  101. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/checkpoint.py +0 -0
  102. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/database.py +0 -0
  103. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/lifespan.py +0 -0
  104. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/metrics.py +0 -0
  105. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/ops.py +0 -0
  106. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/queue.py +0 -0
  107. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/retry.py +0 -0
  108. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/store.py +0 -0
  109. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/logging.json +0 -0
  110. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/openapi.json +0 -0
  111. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/pyproject.toml +0 -0
  112. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/scripts/create_license.py +0 -0
  113. {langgraph_api-0.2.100 → langgraph_api-0.2.102}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.100
3
+ Version: 0.2.102
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
@@ -0,0 +1 @@
1
+ __version__ = "0.2.102"
@@ -172,6 +172,17 @@ async def wait_run(request: ApiRequest):
172
172
  """Create a run, wait for the output."""
173
173
  thread_id = request.path_params["thread_id"]
174
174
  payload = await request.json(RunCreateStateful)
175
+
176
+ # Ensure stream_mode always includes "values" and "updates" while respecting other modes
177
+ user_stream_mode = payload.get("stream_mode", ["values"])
178
+ if isinstance(user_stream_mode, str):
179
+ user_stream_mode = [user_stream_mode]
180
+
181
+ # Always include "values" and "updates" if not already present
182
+ required_modes = {"values", "updates"}
183
+ final_stream_mode = list(set(user_stream_mode) | required_modes)
184
+ payload["stream_mode"] = final_stream_mode
185
+
175
186
  on_disconnect = payload.get("on_disconnect", "continue")
176
187
  run_id = uuid6()
177
188
  sub = asyncio.create_task(Runs.Stream.subscribe(run_id))
@@ -207,6 +218,9 @@ async def wait_run(request: ApiRequest):
207
218
  async for mode, chunk, _ in stream:
208
219
  if mode == b"values":
209
220
  vchunk = chunk
221
+ elif mode == b"updates" and b"__interrupt__" in chunk:
222
+ # Include the interrupt message in the values
223
+ vchunk = chunk
210
224
  elif mode == b"error":
211
225
  vchunk = orjson.dumps({"__error__": orjson.Fragment(chunk)})
212
226
  if vchunk is not None:
@@ -252,6 +266,17 @@ async def wait_run(request: ApiRequest):
252
266
  async def wait_run_stateless(request: ApiRequest):
253
267
  """Create a stateless run, wait for the output."""
254
268
  payload = await request.json(RunCreateStateless)
269
+
270
+ # Ensure stream_mode always includes "values" and "updates" while respecting other modes
271
+ user_stream_mode = payload.get("stream_mode", ["values"])
272
+ if isinstance(user_stream_mode, str):
273
+ user_stream_mode = [user_stream_mode]
274
+
275
+ # Always include "values" and "updates" if not already present
276
+ required_modes = {"values", "updates"}
277
+ final_stream_mode = list(set(user_stream_mode) | required_modes)
278
+ payload["stream_mode"] = final_stream_mode
279
+
255
280
  on_disconnect = payload.get("on_disconnect", "continue")
256
281
  run_id = uuid6()
257
282
  sub = asyncio.create_task(Runs.Stream.subscribe(run_id))
@@ -288,6 +313,9 @@ async def wait_run_stateless(request: ApiRequest):
288
313
  async for mode, chunk, _ in stream:
289
314
  if mode == b"values":
290
315
  vchunk = chunk
316
+ elif mode == b"updates" and b"__interrupt__" in chunk:
317
+ # Include the interrupt message in the values
318
+ vchunk = chunk
291
319
  elif mode == b"error":
292
320
  vchunk = orjson.dumps({"__error__": orjson.Fragment(chunk)})
293
321
  if vchunk is not None:
@@ -9,6 +9,7 @@ import { HTTPException } from "hono/http-exception";
9
9
  import { fetch } from "undici";
10
10
  import pRetry from "p-retry";
11
11
  import {
12
+ getConfig,
12
13
  BaseStore,
13
14
  Item,
14
15
  Operation,
@@ -25,7 +26,6 @@ import {
25
26
  type ChannelVersions,
26
27
  type ChannelProtocol,
27
28
  } from "@langchain/langgraph-checkpoint";
28
- import { createHash } from "node:crypto";
29
29
  import * as fs from "node:fs/promises";
30
30
  import * as path from "node:path";
31
31
  import { serialiseAsDict, serializeError } from "./src/utils/serde.mjs";
@@ -58,9 +58,20 @@ import {
58
58
  import { filterValidExportPath } from "./src/utils/files.mts";
59
59
  import { patchFetch } from "./traceblock.mts";
60
60
 
61
+ const injectConfigFormatter = format((info) => {
62
+ const config = getConfig();
63
+ if (config == null) return info;
64
+
65
+ const node = config.metadata?.["langgraph_node"];
66
+ if (node != null) info.langgraph_node = node;
67
+
68
+ return info;
69
+ });
70
+
61
71
  const logger = createLogger({
62
72
  level: "debug",
63
73
  format: format.combine(
74
+ injectConfigFormatter(),
64
75
  format.errors({ stack: true }),
65
76
  format.timestamp(),
66
77
  format.json(),
@@ -90,6 +101,12 @@ const logger = createLogger({
90
101
  ],
91
102
  });
92
103
 
104
+ const GLOBAL_LOGGER = Symbol.for("langgraph.api.sdk-logger");
105
+ type GLOBAL_LOGGER = typeof GLOBAL_LOGGER;
106
+
107
+ const maybeGlobal = globalThis as unknown as { [GLOBAL_LOGGER]: typeof logger };
108
+ maybeGlobal[GLOBAL_LOGGER] = logger;
109
+
93
110
  let GRAPH_SCHEMA: Record<string, Record<string, GraphSchema> | false> = {};
94
111
  let GRAPH_OPTIONS: {
95
112
  checkpointer?: BaseCheckpointSaver<string | number>;
@@ -61,6 +61,11 @@ BEACON_ENDPOINT = "https://api.smith.langchain.com/v1/metadata/submit"
61
61
  # LangChain auth endpoint for API key submissions
62
62
  LANGCHAIN_METADATA_ENDPOINT = None
63
63
  if LANGSMITH_AUTH_ENDPOINT:
64
+ if "/api/v1" in LANGSMITH_AUTH_ENDPOINT:
65
+ # If the endpoint already has /api/v1 (for self-hosted control plane deployments), we assume it's the correct format
66
+ LANGCHAIN_METADATA_ENDPOINT = (
67
+ LANGSMITH_AUTH_ENDPOINT.rstrip("/") + "/metadata/submit"
68
+ )
64
69
  LANGCHAIN_METADATA_ENDPOINT = (
65
70
  LANGSMITH_AUTH_ENDPOINT.rstrip("/") + "/v1/metadata/submit"
66
71
  )
@@ -1 +0,0 @@
1
- __version__ = "0.2.100"
File without changes
File without changes