langgraph-api 0.0.36__tar.gz → 0.0.37__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 (101) hide show
  1. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/PKG-INFO +2 -1
  2. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/cli.py +2 -0
  3. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/serde.py +12 -3
  4. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/checkpoint.py +4 -1
  5. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/store.py +11 -2
  6. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/pyproject.toml +2 -1
  7. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/LICENSE +0 -0
  8. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/README.md +0 -0
  9. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/__init__.py +0 -0
  10. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/__init__.py +0 -0
  11. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/assistants.py +0 -0
  12. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/mcp.py +0 -0
  13. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/meta.py +0 -0
  14. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/openapi.py +0 -0
  15. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/runs.py +0 -0
  16. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/store.py +0 -0
  17. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/threads.py +0 -0
  18. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/api/ui.py +0 -0
  19. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/asyncio.py +0 -0
  20. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/__init__.py +0 -0
  21. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/custom.py +0 -0
  22. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/langsmith/__init__.py +0 -0
  23. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/langsmith/backend.py +0 -0
  24. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/langsmith/client.py +0 -0
  25. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/middleware.py +0 -0
  26. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/noop.py +0 -0
  27. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/auth/studio_user.py +0 -0
  28. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/command.py +0 -0
  29. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/config.py +0 -0
  30. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/cron_scheduler.py +0 -0
  31. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/errors.py +0 -0
  32. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/graph.py +0 -0
  33. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/http.py +0 -0
  34. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/.gitignore +0 -0
  35. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/base.py +0 -0
  36. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/build.mts +0 -0
  37. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/client.mts +0 -0
  38. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/errors.py +0 -0
  39. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/global.d.ts +0 -0
  40. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/package.json +0 -0
  41. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/remote.py +0 -0
  42. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/schema.py +0 -0
  43. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/graph.mts +0 -0
  44. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/hooks.mjs +0 -0
  45. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/parser/parser.mts +0 -0
  46. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/parser/parser.worker.mjs +0 -0
  47. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/schema/types.mts +0 -0
  48. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/schema/types.template.mts +0 -0
  49. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/utils/importMap.mts +0 -0
  50. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  51. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/src/utils/serde.mts +0 -0
  52. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/sse.py +0 -0
  53. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/api.test.mts +0 -0
  54. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/compose-postgres.yml +0 -0
  55. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/.gitignore +0 -0
  56. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/agent.css +0 -0
  57. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/agent.mts +0 -0
  58. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/agent.ui.tsx +0 -0
  59. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/delay.mts +0 -0
  60. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/error.mts +0 -0
  61. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/langgraph.json +0 -0
  62. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/nested.mts +0 -0
  63. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/package.json +0 -0
  64. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/weather.mts +0 -0
  65. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/graphs/yarn.lock +0 -0
  66. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/parser.test.mts +0 -0
  67. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/tests/utils.mts +0 -0
  68. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/js/yarn.lock +0 -0
  69. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/lifespan.py +0 -0
  70. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/logging.py +0 -0
  71. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/metadata.py +0 -0
  72. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/middleware/__init__.py +0 -0
  73. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/middleware/http_logger.py +0 -0
  74. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/middleware/private_network.py +0 -0
  75. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/models/__init__.py +0 -0
  76. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/models/run.py +0 -0
  77. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/patch.py +0 -0
  78. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/queue_entrypoint.py +0 -0
  79. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/route.py +0 -0
  80. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/schema.py +0 -0
  81. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/server.py +0 -0
  82. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/sse.py +0 -0
  83. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/state.py +0 -0
  84. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/stream.py +0 -0
  85. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/thread_ttl.py +0 -0
  86. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/utils.py +0 -0
  87. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/validation.py +0 -0
  88. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/webhook.py +0 -0
  89. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_api/worker.py +0 -0
  90. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_license/__init__.py +0 -0
  91. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_license/middleware.py +0 -0
  92. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_license/validation.py +0 -0
  93. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/__init__.py +0 -0
  94. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/database.py +0 -0
  95. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/inmem_stream.py +0 -0
  96. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/ops.py +0 -0
  97. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/queue.py +0 -0
  98. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/retry.py +0 -0
  99. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/langgraph_storage/ttl_dict.py +0 -0
  100. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/logging.json +0 -0
  101. {langgraph_api-0.0.36 → langgraph_api-0.0.37}/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: langgraph-api
3
- Version: 0.0.36
3
+ Version: 0.0.37
4
4
  Summary:
5
5
  License: Elastic-2.0
6
6
  Author: Nuno Campos
@@ -10,6 +10,7 @@ Classifier: License :: Other/Proprietary License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
+ Requires-Dist: cloudpickle (>=3.0.0,<4.0.0)
13
14
  Requires-Dist: cryptography (>=43.0.3,<44.0.0)
14
15
  Requires-Dist: httpx (>=0.25.0)
15
16
  Requires-Dist: jsonschema-rs (>=0.20.0,<0.30)
@@ -130,6 +130,7 @@ def run_server(
130
130
  auth: AuthConfig | None = None,
131
131
  http: typing.Optional["HttpConfig"] = None,
132
132
  studio_url: str | None = None,
133
+ disable_persistence: bool = False,
133
134
  **kwargs: typing.Any,
134
135
  ):
135
136
  """Run the LangGraph API server."""
@@ -189,6 +190,7 @@ def run_server(
189
190
  LANGGRAPH_AUTH=json.dumps(auth) if auth else None,
190
191
  LANGGRAPH_HTTP=json.dumps(http) if http else None,
191
192
  LANGGRAPH_API_URL=local_url,
193
+ LANGGRAPH_DISABLE_FILE_PERSISTENCE=str(disable_persistence).lower(),
192
194
  # See https://developer.chrome.com/blog/private-network-access-update-2024-03
193
195
  ALLOW_PRIVATE_NETWORK="true",
194
196
  )
@@ -1,5 +1,4 @@
1
1
  import asyncio
2
- import pickle
3
2
  import uuid
4
3
  from base64 import b64encode
5
4
  from collections import deque
@@ -18,9 +17,13 @@ from re import Pattern
18
17
  from typing import Any, NamedTuple
19
18
  from zoneinfo import ZoneInfo
20
19
 
20
+ import cloudpickle
21
21
  import orjson
22
+ import structlog
22
23
  from langgraph.checkpoint.serde.jsonplus import JsonPlusSerializer
23
24
 
25
+ logger = structlog.stdlib.get_logger(__name__)
26
+
24
27
 
25
28
  class Fragment(NamedTuple):
26
29
  buf: bytes
@@ -122,9 +125,15 @@ class Serializer(JsonPlusSerializer):
122
125
  try:
123
126
  return super().dumps_typed(obj)
124
127
  except TypeError:
125
- return "pickle", pickle.dumps(obj)
128
+ return "pickle", cloudpickle.dumps(obj)
126
129
 
127
130
  def loads_typed(self, data: tuple[str, bytes]) -> Any:
128
131
  if data[0] == "pickle":
129
- return pickle.loads(data[1])
132
+ try:
133
+ return cloudpickle.loads(data[1])
134
+ except Exception as e:
135
+ logger.warning(
136
+ "Failed to unpickle object, replacing w None", exc_info=e
137
+ )
138
+ return None
130
139
  return super().loads_typed(data)
@@ -16,6 +16,9 @@ from langgraph_api.serde import Serializer
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
18
  _EXCLUDED_KEYS = {"checkpoint_ns", "checkpoint_id", "run_id", "thread_id"}
19
+ DISABLE_FILE_PERSISTENCE = (
20
+ os.getenv("LANGGRAPH_DISABLE_FILE_PERSISTENCE", "false").lower() == "true"
21
+ )
19
22
 
20
23
 
21
24
  class InMemorySaver(MemorySaver):
@@ -56,7 +59,7 @@ class InMemorySaver(MemorySaver):
56
59
 
57
60
  super().__init__(
58
61
  serde=serde if serde is not None else Serializer(),
59
- factory=factory,
62
+ factory=factory if not DISABLE_FILE_PERSISTENCE else None,
60
63
  )
61
64
 
62
65
  def put(
@@ -13,13 +13,22 @@ from langgraph.store.memory import InMemoryStore
13
13
  from langgraph_api.graph import resolve_embeddings
14
14
 
15
15
  _STORE_CONFIG = None
16
+ DISABLE_FILE_PERSISTENCE = (
17
+ os.getenv("LANGGRAPH_DISABLE_FILE_PERSISTENCE", "false").lower() == "true"
18
+ )
16
19
 
17
20
 
18
21
  class DiskBackedInMemStore(InMemoryStore):
19
22
  def __init__(self, *args: Any, **kwargs: Any) -> None:
20
23
  super().__init__(*args, **kwargs)
21
- self._data = PersistentDict(dict, filename=_STORE_FILE)
22
- self._vectors = PersistentDict(lambda: defaultdict(dict), filename=_VECTOR_FILE)
24
+ if not DISABLE_FILE_PERSISTENCE:
25
+ self._data = PersistentDict(dict, filename=_STORE_FILE)
26
+ self._vectors = PersistentDict(
27
+ lambda: defaultdict(dict), filename=_VECTOR_FILE
28
+ )
29
+ else:
30
+ self._data = InMemoryStore._data
31
+ self._vectors = InMemoryStore._vectors
23
32
  self._load_data(self._data, which="data")
24
33
  self._load_data(self._vectors, which="vectors")
25
34
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "langgraph-api"
3
- version = "0.0.36"
3
+ version = "0.0.37"
4
4
  description = ""
5
5
  authors = [
6
6
  "Nuno Campos <nuno@langchain.dev>",
@@ -36,6 +36,7 @@ structlog = ">=24.1.0,<26"
36
36
  pyjwt = "^2.9.0"
37
37
  cryptography = "^43.0.3"
38
38
  langgraph-sdk = "^0.1.58"
39
+ cloudpickle = "^3.0.0"
39
40
 
40
41
  [tool.poetry.group.dev.dependencies]
41
42
  ruff = "^0.6.2"
File without changes
File without changes