langgraph-api 0.2.128__py3-none-any.whl → 0.2.130__py3-none-any.whl

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/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.2.128"
1
+ __version__ = "0.2.130"
langgraph_api/config.py CHANGED
@@ -51,6 +51,7 @@ class HttpConfig(TypedDict, total=False):
51
51
  mount_prefix: str
52
52
  """Prefix for mounted routes. E.g., "/my-deployment/api"."""
53
53
  configurable_headers: ConfigurableHeaders | None
54
+ logging_headers: ConfigurableHeaders | None
54
55
 
55
56
 
56
57
  class ThreadTTLConfig(TypedDict, total=False):
@@ -286,6 +287,7 @@ if THREAD_TTL is None and CHECKPOINTER_CONFIG is not None:
286
287
  N_JOBS_PER_WORKER = env("N_JOBS_PER_WORKER", cast=int, default=10)
287
288
  BG_JOB_TIMEOUT_SECS = env("BG_JOB_TIMEOUT_SECS", cast=float, default=3600)
288
289
  FF_CRONS_ENABLED = env("FF_CRONS_ENABLED", cast=bool, default=True)
290
+ FF_RICH_THREADS = env("FF_RICH_THREADS", cast=bool, default=False)
289
291
 
290
292
  # auth
291
293
 
langgraph_api/js/base.py CHANGED
@@ -57,6 +57,3 @@ class BaseRemotePregel(Runnable):
57
57
 
58
58
  # Config passed from get_graph()
59
59
  config: Config
60
-
61
- async def get_nodes_executed(self) -> int:
62
- return 0
@@ -116,6 +116,7 @@ let GRAPH_OPTIONS: {
116
116
  let nodesExecuted = 0;
117
117
  function incrementNodes() {
118
118
  nodesExecuted++;
119
+ logger.debug(`Incremented nodes executed to ${nodesExecuted}`);
119
120
  }
120
121
 
121
122
  const version = await (async () => {
@@ -1029,15 +1030,7 @@ async function main() {
1029
1030
  getStateHistoryRequest,
1030
1031
  ),
1031
1032
  );
1032
- app.post(
1033
- "/:graphId/getNodesExecuted",
1034
- zValidator("json", GetNodesExecutedPayload),
1035
- handleInvoke(
1036
- "getNodesExecuted",
1037
- GetNodesExecutedPayload,
1038
- getNodesExecutedRequest,
1039
- ),
1040
- );
1033
+
1041
1034
  app.post(
1042
1035
  "/:graphId/getNodesExecuted",
1043
1036
  zValidator("json", GetNodesExecutedPayload),
@@ -1147,6 +1140,7 @@ async function getNodesExecutedRequest(
1147
1140
  ) {
1148
1141
  const value = nodesExecuted;
1149
1142
  nodesExecuted = 0;
1143
+ logger.debug(`Returning ${value} nodes executed. Reset nodes executed to ${nodesExecuted}.`);
1150
1144
  return { nodesExecuted: value };
1151
1145
  }
1152
1146
  patchFetch();
@@ -344,6 +344,11 @@ class RemotePregel(BaseRemotePregel):
344
344
 
345
345
  async def fetch_nodes_executed(self):
346
346
  result = await _client_invoke("getNodesExecuted", {"graph_id": self.graph_id})
347
+ await logger.adebug(
348
+ f"Fetched {result['nodesExecuted']} nodes executed",
349
+ nodes_executed=result["nodesExecuted"],
350
+ graph_id=self.graph_id,
351
+ )
347
352
  return result["nodesExecuted"]
348
353
 
349
354
 
@@ -6,7 +6,7 @@ from starlette.requests import ClientDisconnect
6
6
  from starlette.types import Message, Receive, Scope, Send
7
7
 
8
8
  from langgraph_api.http_metrics import HTTP_METRICS_COLLECTOR
9
- from langgraph_api.utils.headers import should_include_header
9
+ from langgraph_api.utils.headers import should_include_header_in_logs
10
10
 
11
11
  asgi = structlog.stdlib.get_logger("asgi")
12
12
 
@@ -117,7 +117,7 @@ def _headers_to_dict(headers: list[tuple[bytes, bytes]] | None) -> dict[str, str
117
117
  if k in IGNORE_HEADERS:
118
118
  continue
119
119
  key = k.decode()
120
- if should_include_header(key):
120
+ if should_include_header_in_logs(key):
121
121
  result[key] = v.decode()
122
122
 
123
123
  return result
@@ -157,7 +157,7 @@ def assign_defaults(
157
157
  )
158
158
  else:
159
159
  stream_mode = ["values"]
160
- multitask_strategy = payload.get("multitask_strategy") or "reject"
160
+ multitask_strategy = payload.get("multitask_strategy") or "enqueue"
161
161
  prevent_insert_if_inflight = multitask_strategy == "reject"
162
162
  return stream_mode, multitask_strategy, prevent_insert_if_inflight
163
163
 
@@ -282,6 +282,13 @@ async def create_valid_run(
282
282
  detail="Cannot specify both configurable and context. Prefer setting context alone. Context was introduced in LangGraph 0.6.0 and is the long term planned replacement for configurable.",
283
283
  )
284
284
 
285
+ # Keep config and context in sync for user provided params
286
+ if context:
287
+ configurable = context.copy()
288
+ config["configurable"] = configurable
289
+ else:
290
+ context = configurable.copy()
291
+
285
292
  if checkpoint_id:
286
293
  configurable["checkpoint_id"] = str(checkpoint_id)
287
294
  if checkpoint := payload.get("checkpoint"):
@@ -308,11 +315,6 @@ async def create_valid_run(
308
315
  put_time_start = time.time()
309
316
  if_not_exists = payload.get("if_not_exists", "reject")
310
317
 
311
- # Keep config and context in sync
312
- # Configurable is either A) just internal config or B) internal config + user config (and context is empty). Either way, configurable is the default.
313
- context = {**context, **configurable}
314
- config["configurable"] = context
315
-
316
318
  run_coro = Runs.put(
317
319
  conn,
318
320
  assistant_id,
langgraph_api/route.py CHANGED
@@ -7,6 +7,7 @@ import orjson
7
7
  from starlette._exception_handler import wrap_app_handling_exceptions
8
8
  from starlette._utils import is_async_callable
9
9
  from starlette.concurrency import run_in_threadpool
10
+ from starlette.exceptions import HTTPException
10
11
  from starlette.middleware import Middleware
11
12
  from starlette.requests import Request
12
13
  from starlette.responses import JSONResponse
@@ -75,7 +76,12 @@ class ApiRequest(Request):
75
76
  async def json(self, schema: SchemaType = None) -> typing.Any:
76
77
  if not hasattr(self, "_json"):
77
78
  body = await self.body()
78
- self._json = await run_in_threadpool(_json_loads, body, schema)
79
+ try:
80
+ self._json = await run_in_threadpool(_json_loads, body, schema)
81
+ except orjson.JSONDecodeError as e:
82
+ raise HTTPException(
83
+ status_code=422, detail="Invalid JSON in request body"
84
+ ) from e
79
85
  return self._json
80
86
 
81
87
 
langgraph_api/server.py CHANGED
@@ -71,7 +71,11 @@ middleware.extend(
71
71
  allow_credentials=True,
72
72
  allow_methods=["*"],
73
73
  allow_headers=["*"],
74
- expose_headers=["x-pagination-total", "x-pagination-next"],
74
+ expose_headers=[
75
+ "x-pagination-total",
76
+ "x-pagination-next",
77
+ "content-location",
78
+ ],
75
79
  )
76
80
  if config.CORS_CONFIG is None
77
81
  else Middleware(
langgraph_api/stream.py CHANGED
@@ -40,6 +40,42 @@ from langgraph_runtime.ops import Runs
40
40
 
41
41
  logger = structlog.stdlib.get_logger(__name__)
42
42
 
43
+
44
+ async def _filter_context_by_schema(
45
+ context: dict[str, Any], context_schema: dict | None
46
+ ) -> dict[str, Any]:
47
+ """Filter context parameters based on the context schema.
48
+
49
+ Args:
50
+ context: The context dictionary to filter
51
+ context_schema: The JSON schema for valid context parameters
52
+
53
+ Returns:
54
+ Filtered context dictionary containing only valid parameters
55
+ """
56
+ if not context_schema or not context:
57
+ return context
58
+
59
+ # Extract valid properties from the schema
60
+ properties = context_schema.get("properties", {})
61
+ if not properties:
62
+ return context
63
+
64
+ # Filter context to only include parameters defined in the schema
65
+ filtered_context = {}
66
+ for key, value in context.items():
67
+ if key in properties:
68
+ filtered_context[key] = value
69
+ else:
70
+ await logger.adebug(
71
+ f"Filtering out context parameter '{key}' not found in context schema",
72
+ context_key=key,
73
+ available_keys=list(properties.keys()),
74
+ )
75
+
76
+ return filtered_context
77
+
78
+
43
79
  AnyStream = AsyncIterator[tuple[str, Any]]
44
80
 
45
81
 
@@ -107,6 +143,17 @@ async def astream_state(
107
143
  checkpointer=None if temporary else Checkpointer(),
108
144
  )
109
145
  )
146
+
147
+ # Filter context parameters based on context schema if available
148
+ if context and USE_RUNTIME_CONTEXT_API and not isinstance(graph, BaseRemotePregel):
149
+ try:
150
+ context_schema = graph.get_context_jsonschema()
151
+ context = await _filter_context_by_schema(context, context_schema)
152
+ except Exception as e:
153
+ await logger.adebug(
154
+ f"Failed to get context schema for filtering: {e}", exc_info=e
155
+ )
156
+
110
157
  input = kwargs.pop("input")
111
158
  if cmd := kwargs.pop("command"):
112
159
  input = map_cmd(cmd)
@@ -339,6 +386,8 @@ async def astream_state(
339
386
  incr_nodes(None, incr=nodes_executed)
340
387
  except Exception as e:
341
388
  logger.warning(f"Failed to fetch nodes executed for {graph.graph_id}: {e}")
389
+ else:
390
+ await logger.adebug("Graph is not an instance of BaseRemotePregel")
342
391
 
343
392
  # Get feedback URLs
344
393
  if feedback_keys:
@@ -24,15 +24,15 @@ def translate_pattern(pat: str) -> re.Pattern[str]:
24
24
 
25
25
 
26
26
  @functools.lru_cache(maxsize=1)
27
- def get_header_patterns() -> tuple[
28
- list[re.Pattern[str]] | None, list[re.Pattern[str]] | None
29
- ]:
27
+ def get_header_patterns(
28
+ key: str,
29
+ ) -> tuple[list[re.Pattern[str]] | None, list[re.Pattern[str]] | None]:
30
30
  """Get the configured header include/exclude patterns."""
31
31
  from langgraph_api import config
32
32
 
33
33
  if not config.HTTP_CONFIG:
34
34
  return None, None
35
- configurable = config.HTTP_CONFIG.get("configurable_headers")
35
+ configurable = config.HTTP_CONFIG.get(key)
36
36
  if not configurable:
37
37
  return None, None
38
38
  header_includes = configurable.get("includes") or configurable.get("include") or []
@@ -59,8 +59,25 @@ def should_include_header(key: str) -> bool:
59
59
  Returns:
60
60
  True if the header should be included, False otherwise
61
61
  """
62
- include_patterns, exclude_patterns = get_header_patterns()
62
+ include_patterns, exclude_patterns = get_header_patterns("configurable_headers")
63
63
 
64
+ return pattern_matches(key, include_patterns, exclude_patterns)
65
+
66
+
67
+ @functools.lru_cache(maxsize=512)
68
+ def should_include_header_in_logs(key: str) -> bool:
69
+ """Check if header should be included in logs specifically."""
70
+
71
+ include_patterns, exclude_patterns = get_header_patterns("logging_headers")
72
+
73
+ return pattern_matches(key, include_patterns, exclude_patterns)
74
+
75
+
76
+ def pattern_matches(
77
+ key: str,
78
+ include_patterns: list[re.Pattern[str]] | None,
79
+ exclude_patterns: list[re.Pattern[str]] | None,
80
+ ) -> bool:
64
81
  # Handle configurable behavior
65
82
  if exclude_patterns and any(pattern.match(key) for pattern in exclude_patterns):
66
83
  return False
langgraph_api/worker.py CHANGED
@@ -54,7 +54,6 @@ async def set_auth_ctx_for_run(
54
54
  user = normalize_user(user)
55
55
  # Reapply normalization to the kwargs
56
56
  run_kwargs["config"]["configurable"]["langgraph_auth_user"] = user
57
- run_kwargs["context"]["langgraph_auth_user"] = user
58
57
  except Exception:
59
58
  user = SimpleUser(user_id) if user_id is not None else None
60
59
  permissions = None
@@ -210,6 +209,7 @@ async def worker(
210
209
 
211
210
  # handle exceptions and set status
212
211
  async with connect() as conn:
212
+ graph_id = run["kwargs"]["config"]["configurable"]["graph_id"]
213
213
  log_info = {
214
214
  "run_id": str(run_id),
215
215
  "run_attempt": attempt,
@@ -253,7 +253,12 @@ async def worker(
253
253
  )
254
254
  if not temporary:
255
255
  await Threads.set_joint_status(
256
- conn, run["thread_id"], run_id, status, checkpoint=checkpoint
256
+ conn,
257
+ run["thread_id"],
258
+ run_id,
259
+ status,
260
+ graph_id=graph_id,
261
+ checkpoint=checkpoint,
257
262
  )
258
263
  elif isinstance(exception, TimeoutError):
259
264
  status = "timeout"
@@ -263,7 +268,12 @@ async def worker(
263
268
  )
264
269
  if not temporary:
265
270
  await Threads.set_joint_status(
266
- conn, run["thread_id"], run_id, status, checkpoint=checkpoint
271
+ conn,
272
+ run["thread_id"],
273
+ run_id,
274
+ status,
275
+ graph_id=graph_id,
276
+ checkpoint=checkpoint,
267
277
  )
268
278
  elif isinstance(exception, UserRollback):
269
279
  status = "rollback"
@@ -274,6 +284,7 @@ async def worker(
274
284
  run["thread_id"],
275
285
  run_id,
276
286
  status,
287
+ graph_id=graph_id,
277
288
  checkpoint=checkpoint,
278
289
  )
279
290
  await logger.ainfo(
@@ -298,7 +309,13 @@ async def worker(
298
309
  )
299
310
  if not temporary:
300
311
  await Threads.set_joint_status(
301
- conn, run["thread_id"], run_id, status, checkpoint, exception
312
+ conn,
313
+ run["thread_id"],
314
+ run_id,
315
+ status,
316
+ graph_id,
317
+ checkpoint,
318
+ exception,
302
319
  )
303
320
  elif isinstance(exception, ALL_RETRIABLE_EXCEPTIONS):
304
321
  status = "retry"
@@ -323,7 +340,13 @@ async def worker(
323
340
  )
324
341
  if not temporary:
325
342
  await Threads.set_joint_status(
326
- conn, run["thread_id"], run_id, status, checkpoint, exception
343
+ conn,
344
+ run["thread_id"],
345
+ run_id,
346
+ status,
347
+ graph_id,
348
+ checkpoint,
349
+ exception,
327
350
  )
328
351
 
329
352
  # delete thread if it's temporary and we don't want to retry
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.128
3
+ Version: 0.2.130
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.7,>=0.6.9
14
+ Requires-Dist: langgraph-runtime-inmem<0.7,>=0.6.13
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
@@ -1,9 +1,9 @@
1
- langgraph_api/__init__.py,sha256=mxT2nps5QgA-B4fLdRmfWEWc4sx0YKxh3Dl4H6yEbUQ,24
1
+ langgraph_api/__init__.py,sha256=hjIS6bolukh3yLZ2XyKHseHoPY8F8ialJ2zwImBGoL8,24
2
2
  langgraph_api/asgi_transport.py,sha256=eqifhHxNnxvI7jJqrY1_8RjL4Fp9NdN4prEub2FWBt8,5091
3
3
  langgraph_api/asyncio.py,sha256=Wv4Rwm-a-Cf6JpfgJmVuVlXQ7SlwrjbTn0eq1ux8I2Q,9652
4
4
  langgraph_api/cli.py,sha256=xQojITwmmKSJw48Lr2regcnRPRq2FJqWlPpeyr5TgbU,16158
5
5
  langgraph_api/command.py,sha256=3O9v3i0OPa96ARyJ_oJbLXkfO8rPgDhLCswgO9koTFA,768
6
- langgraph_api/config.py,sha256=P89uB2IOycXW0qD0bb3stiaN2xAv7ixw_vqBWHM94Bw,11997
6
+ langgraph_api/config.py,sha256=Cr2o0wh_xIdbArlJs4gU9kOThwVQuMU8UdX-xKZjDAQ,12112
7
7
  langgraph_api/cron_scheduler.py,sha256=CiwZ-U4gDOdG9zl9dlr7mH50USUgNB2Fvb8YTKVRBN4,2625
8
8
  langgraph_api/errors.py,sha256=zlnl3xXIwVG0oGNKKpXf1an9Rn_SBDHSyhe53hU6aLw,1858
9
9
  langgraph_api/feature_flags.py,sha256=GjwmNjfg0Jhs3OzR2VbK2WgrRy3o5l8ibIYiUtQkDPA,363
@@ -14,20 +14,20 @@ langgraph_api/logging.py,sha256=4K1Fnq8rrGC9CqJubZtP34Y9P2zh7VXf_41q7bH3OXU,4849
14
14
  langgraph_api/metadata.py,sha256=fVsbwxVitAj4LGVYpCcadYeIFANEaNtcx6LBxQLcTqg,6949
15
15
  langgraph_api/patch.py,sha256=Dgs0PXHytekX4SUL6KsjjN0hHcOtGLvv1GRGbh6PswU,1408
16
16
  langgraph_api/queue_entrypoint.py,sha256=JzJCB3iYvep-GoAHQ_-H2ZxXVgmzYfvjQsmdBRxgdwM,5444
17
- langgraph_api/route.py,sha256=4VBkJMeusfiZtLzyUaKm1HwLHTq0g15y2CRiRhM6xyA,4773
17
+ langgraph_api/route.py,sha256=PEM5sZk-wtoH6dA9jI5M4z9lL0ZFybWllDQGOapMG8k,5026
18
18
  langgraph_api/schema.py,sha256=1L7g4TUJjmsaBUCSThycH11-hrdPLxB6mtc3tIHmpbM,6371
19
19
  langgraph_api/serde.py,sha256=0ALETUn582vNF-m0l_WOZGF_scL1VPA39fDkwMJQPrg,5187
20
- langgraph_api/server.py,sha256=KBnMFt3f9RVLVu_NqyeRc13D_Lq62Rk_2czZKEUMU5E,6994
20
+ langgraph_api/server.py,sha256=9Y3qPixq2MuTs2tTB3CCW4cT5ueFJK7yce3GwHyi_L0,7093
21
21
  langgraph_api/sse.py,sha256=SLdtZmTdh5D8fbWrQjuY9HYLd2dg8Rmi6ZMmFMVc2iE,4204
22
22
  langgraph_api/state.py,sha256=P2mCo-0bqPu2v9FSFGJtUCjPPNvv6wLUKQh8SdxAtc8,4387
23
23
  langgraph_api/store.py,sha256=srRI0fQXNFo_RSUs4apucr4BEp_KrIseJksZXs32MlQ,4635
24
- langgraph_api/stream.py,sha256=tZfwOvG-wQNURdfQ_chfUO93JGZYc8iShlkbgukrQhY,15960
24
+ langgraph_api/stream.py,sha256=52M_Yfrfm8EVxt3nVygYUqrL9AVz1PHaqdrz-VZMsoM,17603
25
25
  langgraph_api/thread_ttl.py,sha256=7H3gFlWcUiODPoaEzcwB0LR61uvcuyjD0ew_4BztB7k,1902
26
26
  langgraph_api/traceblock.py,sha256=2aWS6TKGTcQ0G1fOtnjVrzkpeGvDsR0spDbfddEqgRU,594
27
27
  langgraph_api/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  langgraph_api/validation.py,sha256=zMuKmwUEBjBgFMwAaeLZmatwGVijKv2sOYtYg7gfRtc,4950
29
29
  langgraph_api/webhook.py,sha256=VCJp4dI5E1oSJ15XP34cnPiOi8Ya8Q1BnBwVGadOpLI,1636
30
- langgraph_api/worker.py,sha256=psxipp6bFlJrN5erGKV7D1wm2olrfggPvMqKoWk7SE4,14518
30
+ langgraph_api/worker.py,sha256=D01mDbRFvAG6Blanq3QQsM1ovlQ87qal9zo4v0En3ss,15170
31
31
  langgraph_api/api/__init__.py,sha256=WHy6oNLWtH1K7AxmmsU9RD-Vm6WP-Ov16xS8Ey9YCmQ,6090
32
32
  langgraph_api/api/assistants.py,sha256=ecHaID71ReTAZF4qsJzDe5L-2T5iOL2v8p6kQVHLKFk,16009
33
33
  langgraph_api/api/mcp.py,sha256=qe10ZRMN3f-Hli-9TI8nbQyWvMeBb72YB1PZVbyqBQw,14418
@@ -48,14 +48,14 @@ langgraph_api/auth/langsmith/client.py,sha256=eKchvAom7hdkUXauD8vHNceBDDUijrFgdT
48
48
  langgraph_api/js/.gitignore,sha256=l5yI6G_V6F1600I1IjiUKn87f4uYIrBAYU1MOyBBhg4,59
49
49
  langgraph_api/js/.prettierrc,sha256=0es3ovvyNIqIw81rPQsdt1zCQcOdBqyR_DMbFE4Ifms,19
50
50
  langgraph_api/js/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- langgraph_api/js/base.py,sha256=GORqRDbGAOQX2ygT6dMcqBDCA9tdAp8EpG4bfqUPMg4,1198
51
+ langgraph_api/js/base.py,sha256=CJihwc51MwOVkis80f8zudRa1fQz_5jrom4rY8trww8,1133
52
52
  langgraph_api/js/build.mts,sha256=bRQo11cglDFXlLN7Y48CQPTSMLenp7MqIWuP1DkSIo0,3139
53
53
  langgraph_api/js/client.http.mts,sha256=AGA-p8J85IcNh2oXZjDxHQ4PnQdJmt-LPcpZp6j0Cws,4687
54
- langgraph_api/js/client.mts,sha256=egwta8-jqZRPInAlkphsQGGAObF3R8zKChaKoSTqKYk,32102
54
+ langgraph_api/js/client.mts,sha256=gXyDKX9yiEx1DOmmx005i90Qh_9zgFc-ot0l7v2_xUM,32053
55
55
  langgraph_api/js/errors.py,sha256=Cm1TKWlUCwZReDC5AQ6SgNIVGD27Qov2xcgHyf8-GXo,361
56
56
  langgraph_api/js/global.d.ts,sha256=j4GhgtQSZ5_cHzjSPcHgMJ8tfBThxrH-pUOrrJGteOU,196
57
57
  langgraph_api/js/package.json,sha256=93_RZHDEggtEUJ-DburVd5D9Y9ceD_5mSc23go1BfPw,1335
58
- langgraph_api/js/remote.py,sha256=iMsdDsixqWDCASMkaxVTK4S1XB9cXgwAIF9XaNYl9EY,38000
58
+ langgraph_api/js/remote.py,sha256=ipUB8MTfTt5V_3P8-ffQ3OqGkRqYomBSPiZkYv3gA6s,38192
59
59
  langgraph_api/js/schema.py,sha256=M4fLtr50O1jck8H1hm_0W4cZOGYGdkrB7riLyCes4oY,438
60
60
  langgraph_api/js/sse.py,sha256=lsfp4nyJyA1COmlKG9e2gJnTttf_HGCB5wyH8OZBER8,4105
61
61
  langgraph_api/js/traceblock.mts,sha256=QtGSN5VpzmGqDfbArrGXkMiONY94pMQ5CgzetT_bKYg,761
@@ -70,17 +70,17 @@ langgraph_api/js/src/utils/importMap.mts,sha256=pX4TGOyUpuuWF82kXcxcv3-8mgusRezO
70
70
  langgraph_api/js/src/utils/pythonSchemas.mts,sha256=98IW7Z_VP7L_CHNRMb3_MsiV3BgLE2JsWQY_PQcRR3o,685
71
71
  langgraph_api/js/src/utils/serde.mts,sha256=D9o6MwTgwPezC_DEmsWS5NnLPnjPMVWIb1I1D4QPEPo,743
72
72
  langgraph_api/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- langgraph_api/middleware/http_logger.py,sha256=tUdWuIKtDa2EkFtG_kCjw1Wkgv7gbGH3hZSgWM5Pta4,3892
73
+ langgraph_api/middleware/http_logger.py,sha256=JvMh22UpbMFO-kX195gVGHIPrN4JauL7dXC2X5tW9GA,3908
74
74
  langgraph_api/middleware/private_network.py,sha256=eYgdyU8AzU2XJu362i1L8aSFoQRiV7_aLBPw7_EgeqI,2111
75
75
  langgraph_api/middleware/request_id.py,sha256=SDj3Yi3WvTbFQ2ewrPQBjAV8sYReOJGeIiuoHeZpR9g,1242
76
76
  langgraph_api/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- langgraph_api/models/run.py,sha256=UmkZm9IL_ET3QNA8xVPFHTAcXXZ4htQDMQuPKzaWKPA,15383
77
+ langgraph_api/models/run.py,sha256=fQyWIrNFSr0LQyLBAaQTl8R7jd3UhqTrzAwR54y5h4s,15324
78
78
  langgraph_api/tunneling/cloudflare.py,sha256=iKb6tj-VWPlDchHFjuQyep2Dpb-w2NGfJKt-WJG9LH0,3650
79
79
  langgraph_api/utils/__init__.py,sha256=EQu0PShwHhxUI_9mDFgqlAf5_y5bX8TEk723P5iby24,4161
80
80
  langgraph_api/utils/cache.py,sha256=SrtIWYibbrNeZzLXLUGBFhJPkMVNQnVxR5giiYGHEfI,1810
81
81
  langgraph_api/utils/config.py,sha256=gONI0UsoSpuR72D9lSGAmpr-_iSMDFdD4M_tiXXjmNk,3936
82
82
  langgraph_api/utils/future.py,sha256=CGhUb_Ht4_CnTuXc2kI8evEn1gnMKYN0ce9ZyUkW5G4,7251
83
- langgraph_api/utils/headers.py,sha256=fRZWsR279KOlbfbdcoajguVDDgVdN7V2OYkWxnHeXCE,2239
83
+ langgraph_api/utils/headers.py,sha256=Mfh8NEbb0leaTDQPZNUwQBlBmG8snKFftvPzJ5qSgC4,2777
84
84
  langgraph_license/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  langgraph_license/validation.py,sha256=CU38RUZ5xhP1S8F_y8TNeV6OmtO-tIGjCXbXTwJjJO4,612
86
86
  langgraph_runtime/__init__.py,sha256=O4GgSmu33c-Pr8Xzxj_brcK5vkm70iNTcyxEjICFZxA,1075
@@ -94,9 +94,9 @@ langgraph_runtime/retry.py,sha256=V0duD01fO7GUQ_btQkp1aoXcEOFhXooGVP6q4yMfuyY,11
94
94
  langgraph_runtime/store.py,sha256=7mowndlsIroGHv3NpTSOZDJR0lCuaYMBoTnTrewjslw,114
95
95
  LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
96
96
  logging.json,sha256=3RNjSADZmDq38eHePMm1CbP6qZ71AmpBtLwCmKU9Zgo,379
97
- openapi.json,sha256=SPCrzYpta2xTl-WE2W6qwosYdQqLeB8qpzaYEbcK44k,150725
98
- langgraph_api-0.2.128.dist-info/METADATA,sha256=1gOWC24pl8KN1ymA6h8ONc4DhnTkFWH-fLf5ILi6Oo4,3890
99
- langgraph_api-0.2.128.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
- langgraph_api-0.2.128.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
101
- langgraph_api-0.2.128.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
102
- langgraph_api-0.2.128.dist-info/RECORD,,
97
+ openapi.json,sha256=vPWB-A1eCJZL5i7VjwAMuIn0E2oEF2hD0UeYnftK_LM,150727
98
+ langgraph_api-0.2.130.dist-info/METADATA,sha256=si_hOiu73CD_2DOzRVSUIaIs-Srr2HSevppWARQFroQ,3891
99
+ langgraph_api-0.2.130.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
+ langgraph_api-0.2.130.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
101
+ langgraph_api-0.2.130.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
102
+ langgraph_api-0.2.130.dist-info/RECORD,,
openapi.json CHANGED
@@ -3555,7 +3555,7 @@
3555
3555
  ],
3556
3556
  "title": "Multitask Strategy",
3557
3557
  "description": "Multitask strategy to use. Must be one of 'reject', 'interrupt', 'rollback', or 'enqueue'.",
3558
- "default": "reject"
3558
+ "default": "enqueue"
3559
3559
  }
3560
3560
  },
3561
3561
  "type": "object",
@@ -4078,7 +4078,7 @@
4078
4078
  ],
4079
4079
  "title": "Multitask Strategy",
4080
4080
  "description": "Multitask strategy to use. Must be one of 'reject', 'interrupt', 'rollback', or 'enqueue'.",
4081
- "default": "reject"
4081
+ "default": "enqueue"
4082
4082
  },
4083
4083
  "if_not_exists": {
4084
4084
  "type": "string",