langgraph-api 0.2.95__tar.gz → 0.2.97__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.
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/PKG-INFO +1 -1
- langgraph_api-0.2.97/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/threads.py +9 -5
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/asyncio.py +7 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/models/run.py +2 -2
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/state.py +21 -2
- langgraph_api-0.2.95/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/.gitignore +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/LICENSE +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/Makefile +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/README.md +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/.gitignore +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/Makefile +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/README.md +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/burst.js +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/ramp.js +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/benchmark/weather.js +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/constraints.txt +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/forbidden.txt +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/healthcheck.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/command.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/config.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/http.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/route.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/server.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/store.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/utils.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/logging.json +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/openapi.json +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/pyproject.toml +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/scripts/create_license.py +0 -0
- {langgraph_api-0.2.95 → langgraph_api-0.2.97}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.97"
|
|
@@ -39,11 +39,15 @@ async def create_thread(
|
|
|
39
39
|
)
|
|
40
40
|
|
|
41
41
|
if supersteps := payload.get("supersteps"):
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
try:
|
|
43
|
+
await Threads.State.bulk(
|
|
44
|
+
conn,
|
|
45
|
+
config={"configurable": {"thread_id": thread_id}},
|
|
46
|
+
supersteps=supersteps,
|
|
47
|
+
)
|
|
48
|
+
except HTTPException as e:
|
|
49
|
+
detail = f"Thread {thread_id} was created, but there were problems updating the state: {e.detail}"
|
|
50
|
+
raise HTTPException(status_code=201, detail=detail) from e
|
|
47
51
|
|
|
48
52
|
return ApiResponse(await fetchone(iter, not_found_code=409))
|
|
49
53
|
|
|
@@ -141,6 +141,13 @@ def call_soon_in_main_loop(coro: Coroutine[Any, Any, T]) -> asyncio.Future[T]:
|
|
|
141
141
|
return this_loop_fut
|
|
142
142
|
|
|
143
143
|
|
|
144
|
+
def call_soon_threadsafe(callback, *args) -> asyncio.Handle:
|
|
145
|
+
"""Run a coroutine in the main event loop."""
|
|
146
|
+
if _MAIN_LOOP is None:
|
|
147
|
+
raise RuntimeError("No event loop set")
|
|
148
|
+
return _MAIN_LOOP.call_soon_threadsafe(callback, *args)
|
|
149
|
+
|
|
150
|
+
|
|
144
151
|
class SimpleTaskGroup(AbstractAsyncContextManager["SimpleTaskGroup"]):
|
|
145
152
|
"""An async task group that can be configured to wait and/or cancel tasks on exit.
|
|
146
153
|
|
|
@@ -204,11 +204,11 @@ def get_header_patterns() -> tuple[
|
|
|
204
204
|
configurable = config.HTTP_CONFIG.get("configurable_headers")
|
|
205
205
|
if not configurable:
|
|
206
206
|
return None, None
|
|
207
|
-
header_includes = configurable.get("includes") or []
|
|
207
|
+
header_includes = configurable.get("includes") or configurable.get("include") or []
|
|
208
208
|
include_patterns = []
|
|
209
209
|
for include in header_includes:
|
|
210
210
|
include_patterns.append(translate_pattern(include))
|
|
211
|
-
header_excludes = configurable.get("excludes") or []
|
|
211
|
+
header_excludes = configurable.get("excludes") or configurable.get("exclude") or []
|
|
212
212
|
exclude_patterns = []
|
|
213
213
|
for exclude in header_excludes:
|
|
214
214
|
exclude_patterns.append(translate_pattern(exclude))
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from langgraph.types import StateSnapshot
|
|
5
|
+
from langgraph.types import Interrupt, StateSnapshot
|
|
6
6
|
|
|
7
7
|
from langgraph_api.schema import Checkpoint, ThreadState
|
|
8
8
|
|
|
@@ -38,6 +38,23 @@ def runnable_config_to_checkpoint(
|
|
|
38
38
|
return checkpoint
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
def state_interrupt_to_thread_interrupt(interrupt: Interrupt | dict) -> dict:
|
|
42
|
+
# Sometimes the interrupt received in StateSnapshot is a dict.
|
|
43
|
+
# Let's convert it toan Interrupt object to gain access to dynamic `interrupt_id`.
|
|
44
|
+
if isinstance(interrupt, dict):
|
|
45
|
+
interrupt = Interrupt(**interrupt)
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
"interrupt_id": interrupt.interrupt_id
|
|
49
|
+
if hasattr(interrupt, "interrupt_id")
|
|
50
|
+
else None,
|
|
51
|
+
"value": interrupt.value,
|
|
52
|
+
"resumable": interrupt.resumable,
|
|
53
|
+
"ns": interrupt.ns,
|
|
54
|
+
"when": interrupt.when,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
41
58
|
def state_snapshot_to_thread_state(state: StateSnapshot) -> ThreadState:
|
|
42
59
|
return {
|
|
43
60
|
"values": state.values,
|
|
@@ -48,7 +65,9 @@ def state_snapshot_to_thread_state(state: StateSnapshot) -> ThreadState:
|
|
|
48
65
|
"name": t.name,
|
|
49
66
|
"path": t.path,
|
|
50
67
|
"error": t.error,
|
|
51
|
-
"interrupts":
|
|
68
|
+
"interrupts": [
|
|
69
|
+
state_interrupt_to_thread_interrupt(i) for i in t.interrupts
|
|
70
|
+
],
|
|
52
71
|
"checkpoint": t.state["configurable"]
|
|
53
72
|
if t.state is not None and not isinstance(t.state, StateSnapshot)
|
|
54
73
|
else None,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.95"
|
|
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
|
|
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
|