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.
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/PKG-INFO +1 -1
- langgraph_api-0.2.102/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/runs.py +28 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/client.mts +18 -1
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/metadata.py +5 -0
- langgraph_api-0.2.100/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/.gitignore +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/LICENSE +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/Makefile +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/README.md +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/.gitignore +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/Makefile +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/README.md +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/burst.js +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/ramp.js +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/benchmark/weather.js +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/constraints.txt +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/forbidden.txt +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/healthcheck.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/command.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/config.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/http.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/route.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/server.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/state.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/store.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/utils.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/logging.json +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/openapi.json +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/pyproject.toml +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/scripts/create_license.py +0 -0
- {langgraph_api-0.2.100 → langgraph_api-0.2.102}/uv.lock +0 -0
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.2.100 → langgraph_api-0.2.102}/langgraph_api/js/src/utils/pythonSchemas.mts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|