langgraph-api 0.2.128__tar.gz → 0.2.130__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.

Files changed (114) hide show
  1. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/PKG-INFO +2 -2
  2. langgraph_api-0.2.130/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/config.py +2 -0
  4. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/base.py +0 -3
  5. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/client.mts +3 -9
  6. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/remote.py +5 -0
  7. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/middleware/http_logger.py +2 -2
  8. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/models/run.py +8 -6
  9. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/route.py +7 -1
  10. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/server.py +5 -1
  11. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/stream.py +49 -0
  12. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils/headers.py +22 -5
  13. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/worker.py +28 -5
  14. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/openapi.json +2 -2
  15. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/pyproject.toml +1 -1
  16. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/uv.lock +80 -75
  17. langgraph_api-0.2.128/langgraph_api/__init__.py +0 -1
  18. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/.gitignore +0 -0
  19. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/LICENSE +0 -0
  20. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/Makefile +0 -0
  21. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/README.md +0 -0
  22. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/.gitignore +0 -0
  23. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/Makefile +0 -0
  24. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/README.md +0 -0
  25. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/burst.js +0 -0
  26. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/ramp.js +0 -0
  27. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/benchmark/weather.js +0 -0
  28. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/constraints.txt +0 -0
  29. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/forbidden.txt +0 -0
  30. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/healthcheck.py +0 -0
  31. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/__init__.py +0 -0
  32. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/assistants.py +0 -0
  33. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/mcp.py +0 -0
  34. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/meta.py +0 -0
  35. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/openapi.py +0 -0
  36. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/runs.py +0 -0
  37. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/store.py +0 -0
  38. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/threads.py +0 -0
  39. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/api/ui.py +0 -0
  40. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/asgi_transport.py +0 -0
  41. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/asyncio.py +0 -0
  42. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/__init__.py +0 -0
  43. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/custom.py +0 -0
  44. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/langsmith/__init__.py +0 -0
  45. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/langsmith/backend.py +0 -0
  46. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/langsmith/client.py +0 -0
  47. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/middleware.py +0 -0
  48. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/noop.py +0 -0
  49. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/auth/studio_user.py +0 -0
  50. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/cli.py +0 -0
  51. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/command.py +0 -0
  52. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/cron_scheduler.py +0 -0
  53. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/errors.py +0 -0
  54. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/feature_flags.py +0 -0
  55. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/graph.py +0 -0
  56. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/http.py +0 -0
  57. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/http_metrics.py +0 -0
  58. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/.gitignore +0 -0
  59. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/.prettierrc +0 -0
  60. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/__init__.py +0 -0
  61. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/build.mts +0 -0
  62. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/client.http.mts +0 -0
  63. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/errors.py +0 -0
  64. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/global.d.ts +0 -0
  65. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/package.json +0 -0
  66. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/schema.py +0 -0
  67. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/graph.mts +0 -0
  68. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/load.hooks.mjs +0 -0
  69. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/preload.mjs +0 -0
  70. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/utils/files.mts +0 -0
  71. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/utils/importMap.mts +0 -0
  72. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  73. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/src/utils/serde.mts +0 -0
  74. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/sse.py +0 -0
  75. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/traceblock.mts +0 -0
  76. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/tsconfig.json +0 -0
  77. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/ui.py +0 -0
  78. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/js/yarn.lock +0 -0
  79. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/logging.py +0 -0
  80. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/metadata.py +0 -0
  81. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/middleware/__init__.py +0 -0
  82. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/middleware/private_network.py +0 -0
  83. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/middleware/request_id.py +0 -0
  84. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/models/__init__.py +0 -0
  85. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/patch.py +0 -0
  86. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/queue_entrypoint.py +0 -0
  87. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/schema.py +0 -0
  88. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/serde.py +0 -0
  89. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/sse.py +0 -0
  90. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/state.py +0 -0
  91. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/store.py +0 -0
  92. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/thread_ttl.py +0 -0
  93. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/traceblock.py +0 -0
  94. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/tunneling/cloudflare.py +0 -0
  95. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils/__init__.py +0 -0
  96. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils/cache.py +0 -0
  97. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils/config.py +0 -0
  98. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils/future.py +0 -0
  99. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/utils.py +0 -0
  100. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/validation.py +0 -0
  101. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_api/webhook.py +0 -0
  102. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_license/__init__.py +0 -0
  103. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_license/validation.py +0 -0
  104. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/__init__.py +0 -0
  105. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/checkpoint.py +0 -0
  106. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/database.py +0 -0
  107. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/lifespan.py +0 -0
  108. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/metrics.py +0 -0
  109. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/ops.py +0 -0
  110. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/queue.py +0 -0
  111. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/retry.py +0 -0
  112. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/langgraph_runtime/store.py +0 -0
  113. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/logging.json +0 -0
  114. {langgraph_api-0.2.128 → langgraph_api-0.2.130}/scripts/create_license.py +0 -0
@@ -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
@@ -0,0 +1 @@
1
+ __version__ = "0.2.130"
@@ -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
 
@@ -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,
@@ -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
 
@@ -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(
@@ -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
@@ -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
@@ -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",
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "cryptography>=42.0.0,<45.0",
32
32
  "langgraph-sdk>=0.2.0",
33
33
  "cloudpickle>=3.0.0",
34
- "langgraph-runtime-inmem>=0.6.9,<0.7",
34
+ "langgraph-runtime-inmem>=0.6.13,<0.7",
35
35
  "truststore>=0.1",
36
36
  ]
37
37
 
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- revision = 2
2
+ revision = 3
3
3
  requires-python = ">=3.11"
4
4
 
5
5
  [[package]]
@@ -105,50 +105,55 @@ wheels = [
105
105
 
106
106
  [[package]]
107
107
  name = "charset-normalizer"
108
- version = "3.4.2"
109
- source = { registry = "https://pypi.org/simple" }
110
- sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" }
111
- wheels = [
112
- { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" },
113
- { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" },
114
- { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" },
115
- { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" },
116
- { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" },
117
- { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" },
118
- { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" },
119
- { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" },
120
- { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" },
121
- { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" },
122
- { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" },
123
- { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" },
124
- { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" },
125
- { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" },
126
- { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" },
127
- { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" },
128
- { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" },
129
- { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" },
130
- { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" },
131
- { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" },
132
- { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" },
133
- { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" },
134
- { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" },
135
- { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" },
136
- { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" },
137
- { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" },
138
- { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" },
139
- { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" },
140
- { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" },
141
- { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" },
142
- { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" },
143
- { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" },
144
- { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" },
145
- { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" },
146
- { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" },
147
- { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" },
148
- { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" },
149
- { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" },
150
- { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" },
151
- { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" },
108
+ version = "3.4.3"
109
+ source = { registry = "https://pypi.org/simple" }
110
+ sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" }
111
+ wheels = [
112
+ { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" },
113
+ { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" },
114
+ { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" },
115
+ { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" },
116
+ { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" },
117
+ { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" },
118
+ { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" },
119
+ { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" },
120
+ { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" },
121
+ { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" },
122
+ { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" },
123
+ { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" },
124
+ { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" },
125
+ { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" },
126
+ { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" },
127
+ { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" },
128
+ { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" },
129
+ { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" },
130
+ { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" },
131
+ { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" },
132
+ { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" },
133
+ { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" },
134
+ { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" },
135
+ { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" },
136
+ { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" },
137
+ { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" },
138
+ { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" },
139
+ { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" },
140
+ { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" },
141
+ { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" },
142
+ { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" },
143
+ { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" },
144
+ { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" },
145
+ { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" },
146
+ { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" },
147
+ { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" },
148
+ { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" },
149
+ { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" },
150
+ { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" },
151
+ { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" },
152
+ { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" },
153
+ { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" },
154
+ { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" },
155
+ { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" },
156
+ { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
152
157
  ]
153
158
 
154
159
  [[package]]
@@ -358,7 +363,7 @@ wheels = [
358
363
 
359
364
  [[package]]
360
365
  name = "langchain-core"
361
- version = "0.3.72"
366
+ version = "0.3.74"
362
367
  source = { registry = "https://pypi.org/simple" }
363
368
  dependencies = [
364
369
  { name = "jsonpatch" },
@@ -369,14 +374,14 @@ dependencies = [
369
374
  { name = "tenacity" },
370
375
  { name = "typing-extensions" },
371
376
  ]
372
- sdist = { url = "https://files.pythonhosted.org/packages/8b/49/7568baeb96a57d3218cb5f1f113b142063679088fd3a0d0cae1feb0b3d36/langchain_core-0.3.72.tar.gz", hash = "sha256:4de3828909b3d7910c313242ab07b241294650f5cb6eac17738dd3638b1cd7de", size = 567227, upload-time = "2025-07-24T00:40:08.5Z" }
377
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/c6/5d755a0f1f4857abbe5ea6f5907ed0e2b5df52bf4dde0a0fd768290e3084/langchain_core-0.3.74.tar.gz", hash = "sha256:ff604441aeade942fbcc0a3860a592daba7671345230c2078ba2eb5f82b6ba76", size = 569553, upload-time = "2025-08-07T20:47:05.094Z" }
373
378
  wheels = [
374
- { url = "https://files.pythonhosted.org/packages/6e/7d/9f75023c478e3b854d67da31d721e39f0eb30ae969ec6e755430cb1c0fb5/langchain_core-0.3.72-py3-none-any.whl", hash = "sha256:9fa15d390600eb6b6544397a7aa84be9564939b6adf7a2b091179ea30405b240", size = 442806, upload-time = "2025-07-24T00:40:06.994Z" },
379
+ { url = "https://files.pythonhosted.org/packages/4d/26/545283681ac0379d31c7ad0bac5f195e1982092d76c65ca048db9e3cec0e/langchain_core-0.3.74-py3-none-any.whl", hash = "sha256:088338b5bc2f6a66892f9afc777992c24ee3188f41cbc603d09181e34a228ce7", size = 443453, upload-time = "2025-08-07T20:47:03.853Z" },
375
380
  ]
376
381
 
377
382
  [[package]]
378
383
  name = "langgraph"
379
- version = "0.6.3"
384
+ version = "0.6.4"
380
385
  source = { registry = "https://pypi.org/simple" }
381
386
  dependencies = [
382
387
  { name = "langchain-core" },
@@ -386,9 +391,9 @@ dependencies = [
386
391
  { name = "pydantic" },
387
392
  { name = "xxhash" },
388
393
  ]
389
- sdist = { url = "https://files.pythonhosted.org/packages/7d/d8/ecedf01b3e90ad288343eeb06d91d8511e049ee0b16d7f3c146baeed2a49/langgraph-0.6.3.tar.gz", hash = "sha256:0d2280d295133dc34ccc12eae1ad4d82ee847b009c59801de418068fa9248e1b", size = 452277, upload-time = "2025-08-03T11:21:35.74Z" }
394
+ sdist = { url = "https://files.pythonhosted.org/packages/9f/a2/632e882b6f8d83fefce7a838695dc4f91eaf7d2adc6c8ac160003754eda3/langgraph-0.6.4.tar.gz", hash = "sha256:5d591646b4c5bfc86d5fb0baf3407ba55b37f6ee1c22613e9ed084090357fccd", size = 454190, upload-time = "2025-08-07T18:30:59.619Z" }
390
395
  wheels = [
391
- { url = "https://files.pythonhosted.org/packages/bb/93/7836486f6c18b0b11e6bde5bc0f318947e610637aa5231081bd4adf79eb9/langgraph-0.6.3-py3-none-any.whl", hash = "sha256:733efd8c59b9915e582619da40f2ab5ebb121319a4d7718adef82d6db07547eb", size = 152463, upload-time = "2025-08-03T11:21:34.002Z" },
396
+ { url = "https://files.pythonhosted.org/packages/09/25/7ccac0a5aee88a882683e09c71fbc3a884e41d092a65304dbab40d633dcb/langgraph-0.6.4-py3-none-any.whl", hash = "sha256:001cb076d204b7e7cdf2dce24b18171bbd184840f236852a256107b2aed105bb", size = 153150, upload-time = "2025-08-07T18:30:58.039Z" },
392
397
  ]
393
398
 
394
399
  [[package]]
@@ -517,15 +522,15 @@ wheels = [
517
522
 
518
523
  [[package]]
519
524
  name = "langgraph-prebuilt"
520
- version = "0.6.3"
525
+ version = "0.6.4"
521
526
  source = { registry = "https://pypi.org/simple" }
522
527
  dependencies = [
523
528
  { name = "langchain-core" },
524
529
  { name = "langgraph-checkpoint" },
525
530
  ]
526
- sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/7f662e24eb89bf74fcf2fd109f350ec023373d196b16d12b54e66961f145/langgraph_prebuilt-0.6.3.tar.gz", hash = "sha256:5e1ca7ba98f53ce98400f34bdb0afe47f71d0167c4108b11d4aeed4c6d4a1d3d", size = 125368, upload-time = "2025-08-03T11:16:24.789Z" }
531
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/21/9b198d11732101ee8cdf30af98d0b4f11254c768de15173e57f5260fd14b/langgraph_prebuilt-0.6.4.tar.gz", hash = "sha256:e9e53b906ee5df46541d1dc5303239e815d3ec551e52bb03dd6463acc79ec28f", size = 125695, upload-time = "2025-08-07T18:17:57.333Z" }
527
532
  wheels = [
528
- { url = "https://files.pythonhosted.org/packages/9c/27/049a9e07d1d75c39e0109445e93c9df8bc4a8c51730655be561ecdf04dee/langgraph_prebuilt-0.6.3-py3-none-any.whl", hash = "sha256:cea830fc73d1a6fb871c5c6739e894bffcb7b7a07343198b56f263d3113ae8d6", size = 28917, upload-time = "2025-08-03T11:16:23.695Z" },
533
+ { url = "https://files.pythonhosted.org/packages/0a/7f/973b0d9729d9693d6e5b4bc5f3ae41138d194cb7b16b0ed230020beeb13a/langgraph_prebuilt-0.6.4-py3-none-any.whl", hash = "sha256:819f31d88b84cb2729ff1b79db2d51e9506b8fb7aaacfc0d359d4fe16e717344", size = 28025, upload-time = "2025-08-07T18:17:56.493Z" },
529
534
  ]
530
535
 
531
536
  [[package]]
@@ -1028,27 +1033,27 @@ wheels = [
1028
1033
 
1029
1034
  [[package]]
1030
1035
  name = "ruff"
1031
- version = "0.12.7"
1032
- source = { registry = "https://pypi.org/simple" }
1033
- sdist = { url = "https://files.pythonhosted.org/packages/a1/81/0bd3594fa0f690466e41bd033bdcdf86cba8288345ac77ad4afbe5ec743a/ruff-0.12.7.tar.gz", hash = "sha256:1fc3193f238bc2d7968772c82831a4ff69252f673be371fb49663f0068b7ec71", size = 5197814, upload-time = "2025-07-29T22:32:35.877Z" }
1034
- wheels = [
1035
- { url = "https://files.pythonhosted.org/packages/e1/d2/6cb35e9c85e7a91e8d22ab32ae07ac39cc34a71f1009a6f9e4a2a019e602/ruff-0.12.7-py3-none-linux_armv6l.whl", hash = "sha256:76e4f31529899b8c434c3c1dede98c4483b89590e15fb49f2d46183801565303", size = 11852189, upload-time = "2025-07-29T22:31:41.281Z" },
1036
- { url = "https://files.pythonhosted.org/packages/63/5b/a4136b9921aa84638f1a6be7fb086f8cad0fde538ba76bda3682f2599a2f/ruff-0.12.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:789b7a03e72507c54fb3ba6209e4bb36517b90f1a3569ea17084e3fd295500fb", size = 12519389, upload-time = "2025-07-29T22:31:54.265Z" },
1037
- { url = "https://files.pythonhosted.org/packages/a8/c9/3e24a8472484269b6b1821794141f879c54645a111ded4b6f58f9ab0705f/ruff-0.12.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2e1c2a3b8626339bb6369116e7030a4cf194ea48f49b64bb505732a7fce4f4e3", size = 11743384, upload-time = "2025-07-29T22:31:59.575Z" },
1038
- { url = "https://files.pythonhosted.org/packages/26/7c/458dd25deeb3452c43eaee853c0b17a1e84169f8021a26d500ead77964fd/ruff-0.12.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32dec41817623d388e645612ec70d5757a6d9c035f3744a52c7b195a57e03860", size = 11943759, upload-time = "2025-07-29T22:32:01.95Z" },
1039
- { url = "https://files.pythonhosted.org/packages/7f/8b/658798472ef260ca050e400ab96ef7e85c366c39cf3dfbef4d0a46a528b6/ruff-0.12.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47ef751f722053a5df5fa48d412dbb54d41ab9b17875c6840a58ec63ff0c247c", size = 11654028, upload-time = "2025-07-29T22:32:04.367Z" },
1040
- { url = "https://files.pythonhosted.org/packages/a8/86/9c2336f13b2a3326d06d39178fd3448dcc7025f82514d1b15816fe42bfe8/ruff-0.12.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a828a5fc25a3efd3e1ff7b241fd392686c9386f20e5ac90aa9234a5faa12c423", size = 13225209, upload-time = "2025-07-29T22:32:06.952Z" },
1041
- { url = "https://files.pythonhosted.org/packages/76/69/df73f65f53d6c463b19b6b312fd2391dc36425d926ec237a7ed028a90fc1/ruff-0.12.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5726f59b171111fa6a69d82aef48f00b56598b03a22f0f4170664ff4d8298efb", size = 14182353, upload-time = "2025-07-29T22:32:10.053Z" },
1042
- { url = "https://files.pythonhosted.org/packages/58/1e/de6cda406d99fea84b66811c189b5ea139814b98125b052424b55d28a41c/ruff-0.12.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74e6f5c04c4dd4aba223f4fe6e7104f79e0eebf7d307e4f9b18c18362124bccd", size = 13631555, upload-time = "2025-07-29T22:32:12.644Z" },
1043
- { url = "https://files.pythonhosted.org/packages/6f/ae/625d46d5164a6cc9261945a5e89df24457dc8262539ace3ac36c40f0b51e/ruff-0.12.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0bfe4e77fba61bf2ccadf8cf005d6133e3ce08793bbe870dd1c734f2699a3e", size = 12667556, upload-time = "2025-07-29T22:32:15.312Z" },
1044
- { url = "https://files.pythonhosted.org/packages/55/bf/9cb1ea5e3066779e42ade8d0cd3d3b0582a5720a814ae1586f85014656b6/ruff-0.12.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06bfb01e1623bf7f59ea749a841da56f8f653d641bfd046edee32ede7ff6c606", size = 12939784, upload-time = "2025-07-29T22:32:17.69Z" },
1045
- { url = "https://files.pythonhosted.org/packages/55/7f/7ead2663be5627c04be83754c4f3096603bf5e99ed856c7cd29618c691bd/ruff-0.12.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e41df94a957d50083fd09b916d6e89e497246698c3f3d5c681c8b3e7b9bb4ac8", size = 11771356, upload-time = "2025-07-29T22:32:20.134Z" },
1046
- { url = "https://files.pythonhosted.org/packages/17/40/a95352ea16edf78cd3a938085dccc55df692a4d8ba1b3af7accbe2c806b0/ruff-0.12.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4000623300563c709458d0ce170c3d0d788c23a058912f28bbadc6f905d67afa", size = 11612124, upload-time = "2025-07-29T22:32:22.645Z" },
1047
- { url = "https://files.pythonhosted.org/packages/4d/74/633b04871c669e23b8917877e812376827c06df866e1677f15abfadc95cb/ruff-0.12.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:69ffe0e5f9b2cf2b8e289a3f8945b402a1b19eff24ec389f45f23c42a3dd6fb5", size = 12479945, upload-time = "2025-07-29T22:32:24.765Z" },
1048
- { url = "https://files.pythonhosted.org/packages/be/34/c3ef2d7799c9778b835a76189c6f53c179d3bdebc8c65288c29032e03613/ruff-0.12.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a07a5c8ffa2611a52732bdc67bf88e243abd84fe2d7f6daef3826b59abbfeda4", size = 12998677, upload-time = "2025-07-29T22:32:27.022Z" },
1049
- { url = "https://files.pythonhosted.org/packages/77/ab/aca2e756ad7b09b3d662a41773f3edcbd262872a4fc81f920dc1ffa44541/ruff-0.12.7-py3-none-win32.whl", hash = "sha256:c928f1b2ec59fb77dfdf70e0419408898b63998789cc98197e15f560b9e77f77", size = 11756687, upload-time = "2025-07-29T22:32:29.381Z" },
1050
- { url = "https://files.pythonhosted.org/packages/b4/71/26d45a5042bc71db22ddd8252ca9d01e9ca454f230e2996bb04f16d72799/ruff-0.12.7-py3-none-win_amd64.whl", hash = "sha256:9c18f3d707ee9edf89da76131956aba1270c6348bfee8f6c647de841eac7194f", size = 12912365, upload-time = "2025-07-29T22:32:31.517Z" },
1051
- { url = "https://files.pythonhosted.org/packages/4c/9b/0b8aa09817b63e78d94b4977f18b1fcaead3165a5ee49251c5d5c245bb2d/ruff-0.12.7-py3-none-win_arm64.whl", hash = "sha256:dfce05101dbd11833a0776716d5d1578641b7fddb537fe7fa956ab85d1769b69", size = 11982083, upload-time = "2025-07-29T22:32:33.881Z" },
1036
+ version = "0.12.8"
1037
+ source = { registry = "https://pypi.org/simple" }
1038
+ sdist = { url = "https://files.pythonhosted.org/packages/4b/da/5bd7565be729e86e1442dad2c9a364ceeff82227c2dece7c29697a9795eb/ruff-0.12.8.tar.gz", hash = "sha256:4cb3a45525176e1009b2b64126acf5f9444ea59066262791febf55e40493a033", size = 5242373, upload-time = "2025-08-07T19:05:47.268Z" }
1039
+ wheels = [
1040
+ { url = "https://files.pythonhosted.org/packages/c9/1e/c843bfa8ad1114fab3eb2b78235dda76acd66384c663a4e0415ecc13aa1e/ruff-0.12.8-py3-none-linux_armv6l.whl", hash = "sha256:63cb5a5e933fc913e5823a0dfdc3c99add73f52d139d6cd5cc8639d0e0465513", size = 11675315, upload-time = "2025-08-07T19:05:06.15Z" },
1041
+ { url = "https://files.pythonhosted.org/packages/24/ee/af6e5c2a8ca3a81676d5480a1025494fd104b8896266502bb4de2a0e8388/ruff-0.12.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a9bbe28f9f551accf84a24c366c1aa8774d6748438b47174f8e8565ab9dedbc", size = 12456653, upload-time = "2025-08-07T19:05:09.759Z" },
1042
+ { url = "https://files.pythonhosted.org/packages/99/9d/e91f84dfe3866fa648c10512904991ecc326fd0b66578b324ee6ecb8f725/ruff-0.12.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2fae54e752a3150f7ee0e09bce2e133caf10ce9d971510a9b925392dc98d2fec", size = 11659690, upload-time = "2025-08-07T19:05:12.551Z" },
1043
+ { url = "https://files.pythonhosted.org/packages/fe/ac/a363d25ec53040408ebdd4efcee929d48547665858ede0505d1d8041b2e5/ruff-0.12.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0acbcf01206df963d9331b5838fb31f3b44fa979ee7fa368b9b9057d89f4a53", size = 11896923, upload-time = "2025-08-07T19:05:14.821Z" },
1044
+ { url = "https://files.pythonhosted.org/packages/58/9f/ea356cd87c395f6ade9bb81365bd909ff60860975ca1bc39f0e59de3da37/ruff-0.12.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae3e7504666ad4c62f9ac8eedb52a93f9ebdeb34742b8b71cd3cccd24912719f", size = 11477612, upload-time = "2025-08-07T19:05:16.712Z" },
1045
+ { url = "https://files.pythonhosted.org/packages/1a/46/92e8fa3c9dcfd49175225c09053916cb97bb7204f9f899c2f2baca69e450/ruff-0.12.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb82efb5d35d07497813a1c5647867390a7d83304562607f3579602fa3d7d46f", size = 13182745, upload-time = "2025-08-07T19:05:18.709Z" },
1046
+ { url = "https://files.pythonhosted.org/packages/5e/c4/f2176a310f26e6160deaf661ef60db6c3bb62b7a35e57ae28f27a09a7d63/ruff-0.12.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dbea798fc0065ad0b84a2947b0aff4233f0cb30f226f00a2c5850ca4393de609", size = 14206885, upload-time = "2025-08-07T19:05:21.025Z" },
1047
+ { url = "https://files.pythonhosted.org/packages/87/9d/98e162f3eeeb6689acbedbae5050b4b3220754554526c50c292b611d3a63/ruff-0.12.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49ebcaccc2bdad86fd51b7864e3d808aad404aab8df33d469b6e65584656263a", size = 13639381, upload-time = "2025-08-07T19:05:23.423Z" },
1048
+ { url = "https://files.pythonhosted.org/packages/81/4e/1b7478b072fcde5161b48f64774d6edd59d6d198e4ba8918d9f4702b8043/ruff-0.12.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ac9c570634b98c71c88cb17badd90f13fc076a472ba6ef1d113d8ed3df109fb", size = 12613271, upload-time = "2025-08-07T19:05:25.507Z" },
1049
+ { url = "https://files.pythonhosted.org/packages/e8/67/0c3c9179a3ad19791ef1b8f7138aa27d4578c78700551c60d9260b2c660d/ruff-0.12.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:560e0cd641e45591a3e42cb50ef61ce07162b9c233786663fdce2d8557d99818", size = 12847783, upload-time = "2025-08-07T19:05:28.14Z" },
1050
+ { url = "https://files.pythonhosted.org/packages/4e/2a/0b6ac3dd045acf8aa229b12c9c17bb35508191b71a14904baf99573a21bd/ruff-0.12.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:71c83121512e7743fba5a8848c261dcc454cafb3ef2934a43f1b7a4eb5a447ea", size = 11702672, upload-time = "2025-08-07T19:05:30.413Z" },
1051
+ { url = "https://files.pythonhosted.org/packages/9d/ee/f9fdc9f341b0430110de8b39a6ee5fa68c5706dc7c0aa940817947d6937e/ruff-0.12.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:de4429ef2ba091ecddedd300f4c3f24bca875d3d8b23340728c3cb0da81072c3", size = 11440626, upload-time = "2025-08-07T19:05:32.492Z" },
1052
+ { url = "https://files.pythonhosted.org/packages/89/fb/b3aa2d482d05f44e4d197d1de5e3863feb13067b22c571b9561085c999dc/ruff-0.12.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a2cab5f60d5b65b50fba39a8950c8746df1627d54ba1197f970763917184b161", size = 12462162, upload-time = "2025-08-07T19:05:34.449Z" },
1053
+ { url = "https://files.pythonhosted.org/packages/18/9f/5c5d93e1d00d854d5013c96e1a92c33b703a0332707a7cdbd0a4880a84fb/ruff-0.12.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:45c32487e14f60b88aad6be9fd5da5093dbefb0e3e1224131cb1d441d7cb7d46", size = 12913212, upload-time = "2025-08-07T19:05:36.541Z" },
1054
+ { url = "https://files.pythonhosted.org/packages/71/13/ab9120add1c0e4604c71bfc2e4ef7d63bebece0cfe617013da289539cef8/ruff-0.12.8-py3-none-win32.whl", hash = "sha256:daf3475060a617fd5bc80638aeaf2f5937f10af3ec44464e280a9d2218e720d3", size = 11694382, upload-time = "2025-08-07T19:05:38.468Z" },
1055
+ { url = "https://files.pythonhosted.org/packages/f6/dc/a2873b7c5001c62f46266685863bee2888caf469d1edac84bf3242074be2/ruff-0.12.8-py3-none-win_amd64.whl", hash = "sha256:7209531f1a1fcfbe8e46bcd7ab30e2f43604d8ba1c49029bb420b103d0b5f76e", size = 12740482, upload-time = "2025-08-07T19:05:40.391Z" },
1056
+ { url = "https://files.pythonhosted.org/packages/cb/5c/799a1efb8b5abab56e8a9f2a0b72d12bd64bb55815e9476c7d0a2887d2f7/ruff-0.12.8-py3-none-win_arm64.whl", hash = "sha256:c90e1a334683ce41b0e7a04f41790c429bf5073b62c1ae701c9dc5b3d14f0749", size = 11884718, upload-time = "2025-08-07T19:05:42.866Z" },
1052
1057
  ]
1053
1058
 
1054
1059
  [[package]]
@@ -1 +0,0 @@
1
- __version__ = "0.2.128"
File without changes