langgraph-api 0.2.42__tar.gz → 0.2.43__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.42 → langgraph_api-0.2.43}/PKG-INFO +1 -1
- langgraph_api-0.2.43/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/logging.py +0 -18
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/metadata.py +1 -12
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/stream.py +6 -1
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/worker.py +5 -7
- langgraph_api-0.2.42/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/.gitignore +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/LICENSE +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/Makefile +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/README.md +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/benchmark/weather.js +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/constraints.txt +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/forbidden.txt +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/healthcheck.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/command.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/config.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/http.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/route.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/server.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/state.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/store.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/utils.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/logging.json +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/openapi.json +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/pyproject.toml +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/scripts/create_license.py +0 -0
- {langgraph_api-0.2.42 → langgraph_api-0.2.43}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.43"
|
|
@@ -81,23 +81,6 @@ class JSONRenderer:
|
|
|
81
81
|
LEVELS = logging.getLevelNamesMapping()
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
class TapForMetadata:
|
|
85
|
-
def __call__(
|
|
86
|
-
self, logger: logging.Logger, method_name: str, event_dict: EventDict
|
|
87
|
-
) -> str:
|
|
88
|
-
"""
|
|
89
|
-
Tap WARN and above logs for metadata. Exclude user loggers.
|
|
90
|
-
"""
|
|
91
|
-
if (
|
|
92
|
-
event_dict["logger"].startswith("langgraph")
|
|
93
|
-
and LEVELS[event_dict["level"].upper()] > LEVELS["INFO"]
|
|
94
|
-
):
|
|
95
|
-
from langgraph_api.metadata import append_log
|
|
96
|
-
|
|
97
|
-
append_log(event_dict.copy())
|
|
98
|
-
return event_dict
|
|
99
|
-
|
|
100
|
-
|
|
101
84
|
# shared config, for both logging and structlog
|
|
102
85
|
|
|
103
86
|
shared_processors = [
|
|
@@ -136,7 +119,6 @@ class Formatter(structlog.stdlib.ProcessorFormatter):
|
|
|
136
119
|
super().__init__(
|
|
137
120
|
processors=[
|
|
138
121
|
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
|
|
139
|
-
TapForMetadata(),
|
|
140
122
|
renderer,
|
|
141
123
|
],
|
|
142
124
|
foreign_pre_chain=shared_processors,
|
|
@@ -35,7 +35,6 @@ else:
|
|
|
35
35
|
PLAN = "enterprise" if plus_features_enabled() else "developer"
|
|
36
36
|
USER_API_URL = os.getenv("LANGGRAPH_API_URL", None)
|
|
37
37
|
|
|
38
|
-
LOGS: list[dict] = []
|
|
39
38
|
RUN_COUNTER = 0
|
|
40
39
|
NODE_COUNTER = 0
|
|
41
40
|
FROM_TIMESTAMP = datetime.now(UTC).isoformat()
|
|
@@ -59,14 +58,6 @@ def incr_nodes(_, *, incr: int = 1) -> None:
|
|
|
59
58
|
NODE_COUNTER += incr
|
|
60
59
|
|
|
61
60
|
|
|
62
|
-
def append_log(log: dict) -> None:
|
|
63
|
-
if not LANGGRAPH_CLOUD_LICENSE_KEY and not LANGSMITH_API_KEY:
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
global LOGS
|
|
67
|
-
LOGS.append(log)
|
|
68
|
-
|
|
69
|
-
|
|
70
61
|
async def metadata_loop() -> None:
|
|
71
62
|
try:
|
|
72
63
|
from langgraph_api import __version__
|
|
@@ -91,8 +82,6 @@ async def metadata_loop() -> None:
|
|
|
91
82
|
to_timestamp = datetime.now(UTC).isoformat()
|
|
92
83
|
nodes = NODE_COUNTER
|
|
93
84
|
runs = RUN_COUNTER
|
|
94
|
-
logs = LOGS.copy()
|
|
95
|
-
LOGS.clear()
|
|
96
85
|
RUN_COUNTER = 0
|
|
97
86
|
NODE_COUNTER = 0
|
|
98
87
|
FROM_TIMESTAMP = to_timestamp
|
|
@@ -123,7 +112,7 @@ async def metadata_loop() -> None:
|
|
|
123
112
|
"langgraph.platform.runs": runs,
|
|
124
113
|
"langgraph.platform.nodes": nodes,
|
|
125
114
|
},
|
|
126
|
-
"logs":
|
|
115
|
+
"logs": [],
|
|
127
116
|
}
|
|
128
117
|
try:
|
|
129
118
|
await http_request(
|
|
@@ -207,11 +207,16 @@ async def astream_state(
|
|
|
207
207
|
elif "events" in stream_mode:
|
|
208
208
|
yield "events", event
|
|
209
209
|
else:
|
|
210
|
+
output_keys = kwargs.pop("output_keys", graph.output_channels)
|
|
210
211
|
async with (
|
|
211
212
|
stack,
|
|
212
213
|
aclosing(
|
|
213
214
|
graph.astream(
|
|
214
|
-
input,
|
|
215
|
+
input,
|
|
216
|
+
config,
|
|
217
|
+
stream_mode=list(stream_modes_set),
|
|
218
|
+
output_keys=output_keys,
|
|
219
|
+
**kwargs,
|
|
215
220
|
)
|
|
216
221
|
) as stream,
|
|
217
222
|
):
|
|
@@ -155,13 +155,12 @@ async def worker(
|
|
|
155
155
|
)
|
|
156
156
|
|
|
157
157
|
raise RuntimeError(error_message)
|
|
158
|
+
exit_stack = AsyncExitStack()
|
|
158
159
|
if temporary:
|
|
159
|
-
stream = astream_state(
|
|
160
|
-
AsyncExitStack(), conn, cast(Run, run), attempt, done
|
|
161
|
-
)
|
|
160
|
+
stream = astream_state(exit_stack, conn, cast(Run, run), attempt, done)
|
|
162
161
|
else:
|
|
163
162
|
stream = astream_state(
|
|
164
|
-
|
|
163
|
+
exit_stack,
|
|
165
164
|
conn,
|
|
166
165
|
cast(Run, run),
|
|
167
166
|
attempt,
|
|
@@ -216,6 +215,8 @@ async def worker(
|
|
|
216
215
|
run_ended_at_dt = datetime.now(UTC)
|
|
217
216
|
run_ended_at = run_ended_at_dt.isoformat()
|
|
218
217
|
try:
|
|
218
|
+
# Need to close the pipeline to re-use the connection
|
|
219
|
+
await exit_stack.aclose()
|
|
219
220
|
await Runs.delete(conn, run_id, thread_id=run["thread_id"])
|
|
220
221
|
await logger.ainfo(
|
|
221
222
|
"Background run rolled back",
|
|
@@ -240,9 +241,6 @@ async def worker(
|
|
|
240
241
|
run_created_at=run_created_at,
|
|
241
242
|
exc=str(e),
|
|
242
243
|
)
|
|
243
|
-
# We need to clean up the transaction early if we want to
|
|
244
|
-
# update the thread status with the same connection
|
|
245
|
-
await exit.aclose()
|
|
246
244
|
except HTTPException as e:
|
|
247
245
|
if e.status_code == 404:
|
|
248
246
|
await logger.ainfo(
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.42"
|
|
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
|