langgraph-api 0.2.46__tar.gz → 0.2.51__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 (100) hide show
  1. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/PKG-INFO +1 -1
  2. langgraph_api-0.2.51/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/meta.py +3 -1
  4. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/asyncio.py +5 -2
  5. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/middleware/http_logger.py +1 -3
  6. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/middleware/request_id.py +3 -0
  7. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/stream.py +2 -0
  8. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/worker.py +11 -6
  9. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/openapi.json +8 -0
  10. langgraph_api-0.2.46/langgraph_api/__init__.py +0 -1
  11. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/.gitignore +0 -0
  12. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/LICENSE +0 -0
  13. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/Makefile +0 -0
  14. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/README.md +0 -0
  15. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/benchmark/weather.js +0 -0
  16. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/constraints.txt +0 -0
  17. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/forbidden.txt +0 -0
  18. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/healthcheck.py +0 -0
  19. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/__init__.py +0 -0
  20. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/assistants.py +0 -0
  21. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/mcp.py +0 -0
  22. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/openapi.py +0 -0
  23. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/runs.py +0 -0
  24. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/store.py +0 -0
  25. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/threads.py +0 -0
  26. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/api/ui.py +0 -0
  27. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/asgi_transport.py +0 -0
  28. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/__init__.py +0 -0
  29. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/custom.py +0 -0
  30. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/langsmith/__init__.py +0 -0
  31. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/langsmith/backend.py +0 -0
  32. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/langsmith/client.py +0 -0
  33. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/middleware.py +0 -0
  34. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/noop.py +0 -0
  35. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/auth/studio_user.py +0 -0
  36. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/cli.py +0 -0
  37. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/command.py +0 -0
  38. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/config.py +0 -0
  39. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/cron_scheduler.py +0 -0
  40. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/errors.py +0 -0
  41. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/graph.py +0 -0
  42. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/http.py +0 -0
  43. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/.gitignore +0 -0
  44. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/.prettierrc +0 -0
  45. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/__init__.py +0 -0
  46. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/base.py +0 -0
  47. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/build.mts +0 -0
  48. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/client.http.mts +0 -0
  49. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/client.mts +0 -0
  50. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/errors.py +0 -0
  51. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/global.d.ts +0 -0
  52. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/package.json +0 -0
  53. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/remote.py +0 -0
  54. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/schema.py +0 -0
  55. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/graph.mts +0 -0
  56. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/load.hooks.mjs +0 -0
  57. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/preload.mjs +0 -0
  58. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/utils/files.mts +0 -0
  59. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/utils/importMap.mts +0 -0
  60. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  61. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/src/utils/serde.mts +0 -0
  62. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/sse.py +0 -0
  63. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/tsconfig.json +0 -0
  64. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/ui.py +0 -0
  65. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/js/yarn.lock +0 -0
  66. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/logging.py +0 -0
  67. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/metadata.py +0 -0
  68. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/middleware/__init__.py +0 -0
  69. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/middleware/private_network.py +0 -0
  70. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/models/__init__.py +0 -0
  71. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/models/run.py +0 -0
  72. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/patch.py +0 -0
  73. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/queue_entrypoint.py +0 -0
  74. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/route.py +0 -0
  75. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/schema.py +0 -0
  76. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/serde.py +0 -0
  77. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/server.py +0 -0
  78. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/sse.py +0 -0
  79. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/state.py +0 -0
  80. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/store.py +0 -0
  81. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/thread_ttl.py +0 -0
  82. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/tunneling/cloudflare.py +0 -0
  83. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/utils.py +0 -0
  84. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/validation.py +0 -0
  85. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_api/webhook.py +0 -0
  86. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_license/__init__.py +0 -0
  87. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_license/validation.py +0 -0
  88. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/__init__.py +0 -0
  89. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/checkpoint.py +0 -0
  90. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/database.py +0 -0
  91. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/lifespan.py +0 -0
  92. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/metrics.py +0 -0
  93. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/ops.py +0 -0
  94. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/queue.py +0 -0
  95. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/retry.py +0 -0
  96. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/langgraph_runtime/store.py +0 -0
  97. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/logging.json +0 -0
  98. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/pyproject.toml +0 -0
  99. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/scripts/create_license.py +0 -0
  100. {langgraph_api-0.2.46 → langgraph_api-0.2.51}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.46
3
+ Version: 0.2.51
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
@@ -0,0 +1 @@
1
+ __version__ = "0.2.51"
@@ -2,7 +2,7 @@ import os
2
2
 
3
3
  from starlette.responses import JSONResponse, PlainTextResponse
4
4
 
5
- from langgraph_api import config, metadata
5
+ from langgraph_api import __version__, config, metadata
6
6
  from langgraph_api.route import ApiRequest
7
7
  from langgraph_license.validation import plus_features_enabled
8
8
  from langgraph_runtime.database import connect, pool_stats
@@ -16,10 +16,12 @@ async def meta_info(request: ApiRequest):
16
16
  plus = plus_features_enabled()
17
17
  return JSONResponse(
18
18
  {
19
+ "version": __version__,
19
20
  "flags": {
20
21
  "assistants": True,
21
22
  "crons": plus and config.FF_CRONS_ENABLED,
22
23
  "langsmith": bool(config.LANGSMITH_API_KEY) and bool(config.TRACING),
24
+ "langsmith_tracing_replicas": True,
23
25
  },
24
26
  "host": {
25
27
  "kind": metadata.HOST,
@@ -78,10 +78,13 @@ async def wait_if_not_done(coro: Coroutine[Any, Any, T], done: ValueEvent) -> T:
78
78
  return await coro_task
79
79
  except asyncio.CancelledError as e:
80
80
  if e.args and asyncio.isfuture(e.args[-1]):
81
+ fut = e.args[-1]
81
82
  await logger.ainfo(
82
- "Awaiting future upon cancellation", task=str(e.args[-1])
83
+ "Awaiting future upon cancellation.",
84
+ task=str(fut),
83
85
  )
84
- await e.args[-1]
86
+ await fut
87
+ await logger.ainfo("Done awaiting.", task=str(fut))
85
88
  if e.args and isinstance(e.args[0], Exception):
86
89
  raise e.args[0] from None
87
90
  raise
@@ -5,8 +5,6 @@ import structlog
5
5
  from starlette.requests import ClientDisconnect
6
6
  from starlette.types import Message, Receive, Scope, Send
7
7
 
8
- from langgraph_api.logging import LOG_JSON
9
-
10
8
  asgi = structlog.stdlib.get_logger("asgi")
11
9
 
12
10
  PATHS_IGNORE = {"/ok", "/metrics"}
@@ -28,7 +26,7 @@ class AccessLoggerMiddleware:
28
26
  self.debug_enabled = False
29
27
 
30
28
  async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
31
- if scope["type"] != "http" or (LOG_JSON and scope.get("path") in PATHS_IGNORE):
29
+ if scope["type"] != "http" or scope.get("path") in PATHS_IGNORE:
32
30
  return await self.app(scope, receive, send) # pragma: no cover
33
31
 
34
32
  loop = asyncio.get_event_loop()
@@ -21,6 +21,8 @@ class RequestIdMiddleware:
21
21
 
22
22
  async def __call__(self, scope: Scope, receive: Receive, send: Send):
23
23
  if scope["type"] == "http" and self.pattern.match(scope["path"]):
24
+ from langgraph_api.logging import set_logging_context
25
+
24
26
  request_id = next(
25
27
  (h[1] for h in scope["headers"] if h[0] == b"x-request-id"),
26
28
  None,
@@ -29,4 +31,5 @@ class RequestIdMiddleware:
29
31
  request_id = str(uuid.uuid4()).encode()
30
32
  scope["headers"].append((b"x-request-id", request_id))
31
33
  scope["request_start_time_ms"] = int(time.time() * 1000)
34
+ set_logging_context({"request_id": request_id.decode()})
32
35
  await self.app(scope, receive, send)
@@ -24,6 +24,7 @@ from langsmith.utils import get_tracer_project
24
24
  from pydantic import ValidationError
25
25
  from pydantic.v1 import ValidationError as ValidationErrorLegacy
26
26
 
27
+ from langgraph_api import __version__
27
28
  from langgraph_api import store as api_store
28
29
  from langgraph_api.asyncio import ValueEvent, wait_if_not_done
29
30
  from langgraph_api.command import map_cmd
@@ -118,6 +119,7 @@ async def astream_state(
118
119
  config["metadata"]["run_attempt"] = attempt
119
120
  # attach langgraph metadata
120
121
  config["metadata"]["langgraph_version"] = langgraph.version.__version__
122
+ config["metadata"]["langgraph_api_version"] = __version__
121
123
  config["metadata"]["langgraph_plan"] = PLAN
122
124
  config["metadata"]["langgraph_host"] = HOST
123
125
  config["metadata"]["langgraph_api_url"] = USER_API_URL
@@ -178,11 +178,16 @@ async def worker(
178
178
  else None
179
179
  ),
180
180
  )
181
- except Exception as ee:
182
- # Note we don't handle asyncio.CancelledError here, as we want to
183
- # let it bubble up and rollback db transaction, thus marking the run
184
- # as available to be picked up by another worker
181
+ except (Exception, asyncio.CancelledError) as ee:
185
182
  exception = ee
183
+ except BaseException as eee:
184
+ await logger.aerror(
185
+ "Bubbling failed background run",
186
+ run_id=str(run_id),
187
+ exception_type=str(type(eee)),
188
+ exception=str(eee),
189
+ )
190
+ raise
186
191
 
187
192
  # handle exceptions and set status
188
193
  async with connect() as conn:
@@ -286,7 +291,7 @@ async def worker(
286
291
  run_ended_at_dt = datetime.now(UTC)
287
292
  run_ended_at = run_ended_at_dt.isoformat()
288
293
  await logger.awarning(
289
- f"Background run failed, will retry. Exception: {exception}",
294
+ f"Background run failed, will retry. Exception: {type(exception)}({exception})",
290
295
  exc_info=True,
291
296
  run_id=str(run_id),
292
297
  run_attempt=attempt,
@@ -301,7 +306,7 @@ async def worker(
301
306
  run_ended_at_dt = datetime.now(UTC)
302
307
  run_ended_at = run_ended_at_dt.isoformat()
303
308
  await logger.aexception(
304
- f"Background run failed. Exception: {exception}",
309
+ f"Background run failed. Exception: {type(exception)}({exception})",
305
310
  exc_info=not isinstance(exception, RemoteException),
306
311
  run_id=str(run_id),
307
312
  run_attempt=attempt,
@@ -4703,6 +4703,14 @@
4703
4703
  "default": 0,
4704
4704
  "title": "Offset",
4705
4705
  "description": "Number of items to skip before returning results (default is 0)."
4706
+ },
4707
+ "query": {
4708
+ "type": [
4709
+ "string",
4710
+ "null"
4711
+ ],
4712
+ "title": "Query",
4713
+ "description": "Query string for semantic/vector search."
4706
4714
  }
4707
4715
  },
4708
4716
  "title": "StoreSearchRequest",
@@ -1 +0,0 @@
1
- __version__ = "0.2.46"
File without changes
File without changes
File without changes
File without changes