langgraph-api 0.3.4__tar.gz → 0.4.1__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.3.4 → langgraph_api-0.4.1}/PKG-INFO +2 -2
- langgraph_api-0.4.1/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/runs.py +13 -8
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/threads.py +24 -0
- langgraph_api-0.4.1/langgraph_api/js/isolate-0x130008000-46649-46649-v8.log +4430 -0
- langgraph_api-0.4.1/langgraph_api/js/isolate-0x138008000-44681-44681-v8.log +4430 -0
- langgraph_api-0.4.1/langgraph_api/js/package-lock.json +3308 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/models/run.py +5 -4
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/stream.py +6 -2
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/__init__.py +19 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/worker.py +4 -2
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/openapi.json +67 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/pyproject.toml +1 -1
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/uv.lock +40 -40
- langgraph_api-0.3.4/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/.gitignore +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/LICENSE +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/Makefile +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/README.md +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/.gitignore +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/Makefile +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/README.md +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/burst.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/clean.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/graphs.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/package.json +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/ramp.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/benchmark/weather.js +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/constraints.txt +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/forbidden.txt +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/healthcheck.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/command.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/config.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/http.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/route.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/server.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/state.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/store.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/utils.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/logging.json +0 -0
- {langgraph_api-0.3.4 → langgraph_api-0.4.1}/scripts/create_license.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
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.
|
|
14
|
+
Requires-Dist: langgraph-runtime-inmem<0.10.0,>=0.9.0
|
|
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.4.1"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from collections.abc import AsyncIterator
|
|
3
3
|
from typing import Literal, cast
|
|
4
|
+
from uuid import uuid4
|
|
4
5
|
|
|
5
6
|
import orjson
|
|
6
7
|
from starlette.exceptions import HTTPException
|
|
@@ -100,7 +101,7 @@ async def stream_run(
|
|
|
100
101
|
payload = await request.json(RunCreateStateful)
|
|
101
102
|
on_disconnect = payload.get("on_disconnect", "continue")
|
|
102
103
|
run_id = uuid7()
|
|
103
|
-
sub = asyncio.create_task(Runs.Stream.subscribe(run_id))
|
|
104
|
+
sub = asyncio.create_task(Runs.Stream.subscribe(run_id, thread_id))
|
|
104
105
|
|
|
105
106
|
try:
|
|
106
107
|
async with connect() as conn:
|
|
@@ -138,19 +139,21 @@ async def stream_run_stateless(
|
|
|
138
139
|
):
|
|
139
140
|
"""Create a stateless run."""
|
|
140
141
|
payload = await request.json(RunCreateStateless)
|
|
142
|
+
payload["if_not_exists"] = "create"
|
|
141
143
|
on_disconnect = payload.get("on_disconnect", "continue")
|
|
142
144
|
run_id = uuid7()
|
|
143
|
-
|
|
144
|
-
|
|
145
|
+
thread_id = uuid4()
|
|
146
|
+
sub = asyncio.create_task(Runs.Stream.subscribe(run_id, thread_id))
|
|
145
147
|
try:
|
|
146
148
|
async with connect() as conn:
|
|
147
149
|
run = await create_valid_run(
|
|
148
150
|
conn,
|
|
149
|
-
|
|
151
|
+
str(thread_id),
|
|
150
152
|
payload,
|
|
151
153
|
request.headers,
|
|
152
154
|
run_id=run_id,
|
|
153
155
|
request_start_time=request.scope.get("request_start_time_ms"),
|
|
156
|
+
temporary=True,
|
|
154
157
|
)
|
|
155
158
|
except Exception:
|
|
156
159
|
if not sub.cancelled():
|
|
@@ -181,7 +184,7 @@ async def wait_run(request: ApiRequest):
|
|
|
181
184
|
payload = await request.json(RunCreateStateful)
|
|
182
185
|
on_disconnect = payload.get("on_disconnect", "continue")
|
|
183
186
|
run_id = uuid7()
|
|
184
|
-
sub = asyncio.create_task(Runs.Stream.subscribe(run_id))
|
|
187
|
+
sub = asyncio.create_task(Runs.Stream.subscribe(run_id, thread_id))
|
|
185
188
|
|
|
186
189
|
try:
|
|
187
190
|
async with connect() as conn:
|
|
@@ -263,26 +266,28 @@ async def wait_run(request: ApiRequest):
|
|
|
263
266
|
async def wait_run_stateless(request: ApiRequest):
|
|
264
267
|
"""Create a stateless run, wait for the output."""
|
|
265
268
|
payload = await request.json(RunCreateStateless)
|
|
269
|
+
payload["if_not_exists"] = "create"
|
|
266
270
|
on_disconnect = payload.get("on_disconnect", "continue")
|
|
267
271
|
run_id = uuid7()
|
|
268
|
-
|
|
272
|
+
thread_id = uuid4()
|
|
273
|
+
sub = asyncio.create_task(Runs.Stream.subscribe(run_id, thread_id))
|
|
269
274
|
|
|
270
275
|
try:
|
|
271
276
|
async with connect() as conn:
|
|
272
277
|
run = await create_valid_run(
|
|
273
278
|
conn,
|
|
274
|
-
|
|
279
|
+
str(thread_id),
|
|
275
280
|
payload,
|
|
276
281
|
request.headers,
|
|
277
282
|
run_id=run_id,
|
|
278
283
|
request_start_time=request.scope.get("request_start_time_ms"),
|
|
284
|
+
temporary=True,
|
|
279
285
|
)
|
|
280
286
|
except Exception:
|
|
281
287
|
if not sub.cancelled():
|
|
282
288
|
handle = await sub
|
|
283
289
|
await handle.__aexit__(None, None, None)
|
|
284
290
|
raise
|
|
285
|
-
|
|
286
291
|
last_chunk = ValueEvent()
|
|
287
292
|
|
|
288
293
|
async def consume():
|
|
@@ -6,11 +6,13 @@ from starlette.routing import BaseRoute
|
|
|
6
6
|
|
|
7
7
|
from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
|
|
8
8
|
from langgraph_api.schema import THREAD_FIELDS
|
|
9
|
+
from langgraph_api.sse import EventSourceResponse
|
|
9
10
|
from langgraph_api.state import state_snapshot_to_thread_state
|
|
10
11
|
from langgraph_api.utils import (
|
|
11
12
|
fetchone,
|
|
12
13
|
get_pagination_headers,
|
|
13
14
|
validate_select_columns,
|
|
15
|
+
validate_stream_id,
|
|
14
16
|
validate_uuid,
|
|
15
17
|
)
|
|
16
18
|
from langgraph_api.validation import (
|
|
@@ -282,6 +284,23 @@ async def copy_thread(request: ApiRequest):
|
|
|
282
284
|
return ApiResponse(await fetchone(iter, not_found_code=409))
|
|
283
285
|
|
|
284
286
|
|
|
287
|
+
@retry_db
|
|
288
|
+
async def join_thread_stream(request: ApiRequest):
|
|
289
|
+
"""Join a thread stream."""
|
|
290
|
+
thread_id = request.path_params["thread_id"]
|
|
291
|
+
validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
|
|
292
|
+
last_event_id = request.headers.get("last-event-id") or None
|
|
293
|
+
validate_stream_id(
|
|
294
|
+
last_event_id, "Invalid last-event-id: must be a valid Redis stream ID"
|
|
295
|
+
)
|
|
296
|
+
return EventSourceResponse(
|
|
297
|
+
Threads.Stream.join(
|
|
298
|
+
thread_id,
|
|
299
|
+
last_event_id=last_event_id,
|
|
300
|
+
),
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
|
|
285
304
|
threads_routes: list[BaseRoute] = [
|
|
286
305
|
ApiRoute("/threads", endpoint=create_thread, methods=["POST"]),
|
|
287
306
|
ApiRoute("/threads/search", endpoint=search_threads, methods=["POST"]),
|
|
@@ -312,4 +331,9 @@ threads_routes: list[BaseRoute] = [
|
|
|
312
331
|
endpoint=get_thread_state_at_checkpoint_post,
|
|
313
332
|
methods=["POST"],
|
|
314
333
|
),
|
|
334
|
+
ApiRoute(
|
|
335
|
+
"/threads/{thread_id}/stream",
|
|
336
|
+
endpoint=join_thread_stream,
|
|
337
|
+
methods=["GET"],
|
|
338
|
+
),
|
|
315
339
|
]
|