langgraph-api 0.2.43__tar.gz → 0.2.45__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.43 → langgraph_api-0.2.45}/PKG-INFO +3 -3
  2. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/constraints.txt +2 -2
  3. langgraph_api-0.2.45/langgraph_api/__init__.py +1 -0
  4. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/config.py +3 -0
  5. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/remote.py +22 -15
  6. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/logging.py +16 -3
  7. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/models/run.py +12 -0
  8. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/stream.py +28 -2
  9. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/worker.py +1 -2
  10. langgraph_api-0.2.45/langgraph_runtime/checkpoint.py +4 -0
  11. langgraph_api-0.2.45/langgraph_runtime/database.py +4 -0
  12. langgraph_api-0.2.45/langgraph_runtime/lifespan.py +4 -0
  13. langgraph_api-0.2.45/langgraph_runtime/metrics.py +4 -0
  14. langgraph_api-0.2.45/langgraph_runtime/ops.py +4 -0
  15. langgraph_api-0.2.45/langgraph_runtime/queue.py +4 -0
  16. langgraph_api-0.2.45/langgraph_runtime/retry.py +4 -0
  17. langgraph_api-0.2.45/langgraph_runtime/store.py +4 -0
  18. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/pyproject.toml +2 -2
  19. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/uv.lock +629 -628
  20. langgraph_api-0.2.43/langgraph_api/__init__.py +0 -1
  21. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/.gitignore +0 -0
  22. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/LICENSE +0 -0
  23. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/Makefile +0 -0
  24. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/README.md +0 -0
  25. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/benchmark/weather.js +0 -0
  26. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/forbidden.txt +0 -0
  27. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/healthcheck.py +0 -0
  28. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/__init__.py +0 -0
  29. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/assistants.py +0 -0
  30. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/mcp.py +0 -0
  31. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/meta.py +0 -0
  32. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/openapi.py +0 -0
  33. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/runs.py +0 -0
  34. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/store.py +0 -0
  35. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/threads.py +0 -0
  36. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/api/ui.py +0 -0
  37. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/asgi_transport.py +0 -0
  38. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/asyncio.py +0 -0
  39. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/__init__.py +0 -0
  40. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/custom.py +0 -0
  41. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/langsmith/__init__.py +0 -0
  42. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/langsmith/backend.py +0 -0
  43. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/langsmith/client.py +0 -0
  44. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/middleware.py +0 -0
  45. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/noop.py +0 -0
  46. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/auth/studio_user.py +0 -0
  47. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/cli.py +0 -0
  48. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/command.py +0 -0
  49. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/cron_scheduler.py +0 -0
  50. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/errors.py +0 -0
  51. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/graph.py +0 -0
  52. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/http.py +0 -0
  53. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/.gitignore +0 -0
  54. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/.prettierrc +0 -0
  55. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/__init__.py +0 -0
  56. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/base.py +0 -0
  57. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/build.mts +0 -0
  58. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/client.http.mts +0 -0
  59. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/client.mts +0 -0
  60. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/errors.py +0 -0
  61. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/global.d.ts +0 -0
  62. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/package.json +0 -0
  63. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/schema.py +0 -0
  64. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/graph.mts +0 -0
  65. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/load.hooks.mjs +0 -0
  66. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/preload.mjs +0 -0
  67. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/utils/files.mts +0 -0
  68. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/utils/importMap.mts +0 -0
  69. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  70. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/src/utils/serde.mts +0 -0
  71. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/sse.py +0 -0
  72. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/tsconfig.json +0 -0
  73. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/ui.py +0 -0
  74. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/js/yarn.lock +0 -0
  75. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/metadata.py +0 -0
  76. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/middleware/__init__.py +0 -0
  77. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/middleware/http_logger.py +0 -0
  78. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/middleware/private_network.py +0 -0
  79. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/middleware/request_id.py +0 -0
  80. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/models/__init__.py +0 -0
  81. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/patch.py +0 -0
  82. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/queue_entrypoint.py +0 -0
  83. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/route.py +0 -0
  84. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/schema.py +0 -0
  85. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/serde.py +0 -0
  86. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/server.py +0 -0
  87. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/sse.py +0 -0
  88. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/state.py +0 -0
  89. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/store.py +0 -0
  90. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/thread_ttl.py +0 -0
  91. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/tunneling/cloudflare.py +0 -0
  92. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/utils.py +0 -0
  93. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/validation.py +0 -0
  94. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_api/webhook.py +0 -0
  95. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_license/__init__.py +0 -0
  96. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_license/validation.py +0 -0
  97. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/langgraph_runtime/__init__.py +0 -0
  98. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/logging.json +0 -0
  99. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/openapi.json +0 -0
  100. {langgraph_api-0.2.43 → langgraph_api-0.2.45}/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.43
3
+ Version: 0.2.45
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
@@ -9,12 +9,12 @@ Requires-Dist: cloudpickle>=3.0.0
9
9
  Requires-Dist: cryptography<45.0,>=42.0.0
10
10
  Requires-Dist: httpx>=0.25.0
11
11
  Requires-Dist: jsonschema-rs<0.30,>=0.20.0
12
- Requires-Dist: langchain-core>=0.2.38
12
+ Requires-Dist: langchain-core>=0.3.64
13
13
  Requires-Dist: langgraph-checkpoint>=2.0.23
14
14
  Requires-Dist: langgraph-runtime-inmem<0.3,>=0.2.0
15
15
  Requires-Dist: langgraph-sdk>=0.1.66
16
16
  Requires-Dist: langgraph>=0.3.27
17
- Requires-Dist: langsmith>=0.1.112
17
+ Requires-Dist: langsmith>=0.3.45
18
18
  Requires-Dist: orjson>=3.9.7
19
19
  Requires-Dist: pyjwt>=2.9.0
20
20
  Requires-Dist: sse-starlette<2.2.0,>=2.1.0
@@ -4,8 +4,8 @@
4
4
  langgraph>=0.3.27
5
5
  langgraph-sdk>=0.1.66
6
6
  langgraph-checkpoint>=2.0.23
7
- langchain-core>=0.2.43
8
- langsmith>=0.1.112
7
+ langchain-core>=0.3.64
8
+ langsmith>=0.3.45
9
9
  orjson>=3.9.7,<3.10.17
10
10
  httpx>=0.25.0
11
11
  tenacity>=8.0.0
@@ -0,0 +1 @@
1
+ __version__ = "0.2.45"
@@ -241,6 +241,9 @@ BG_JOB_ISOLATED_LOOPS = env("BG_JOB_ISOLATED_LOOPS", cast=bool, default=False)
241
241
  BG_JOB_SHUTDOWN_GRACE_PERIOD_SECS = env(
242
242
  "BG_JOB_SHUTDOWN_GRACE_PERIOD_SECS", cast=int, default=3600
243
243
  )
244
+ MAX_STREAM_CHUNK_SIZE_BYTES = env(
245
+ "MAX_STREAM_CHUNK_SIZE_BYTES", cast=int, default=1024 * 1024 * 128
246
+ )
244
247
 
245
248
 
246
249
  def _parse_thread_ttl(value: str | None) -> ThreadTTLConfig | None:
@@ -452,27 +452,27 @@ async def run_js_http_process(paths_str: str, http_config: dict, watch: bool = F
452
452
  attempt += 1
453
453
 
454
454
 
455
- def _get_passthrough_checkpointer(conn: AsyncConnectionProto):
456
- from langgraph_runtime.checkpoint import Checkpointer
455
+ class PassthroughSerialiser(SerializerProtocol):
456
+ def dumps(self, obj: Any) -> bytes:
457
+ return json_dumpb(obj)
457
458
 
458
- class PassthroughSerialiser(SerializerProtocol):
459
- def dumps(self, obj: Any) -> bytes:
460
- return json_dumpb(obj)
459
+ def dumps_typed(self, obj: Any) -> tuple[str, bytes]:
460
+ return "json", json_dumpb(obj)
461
461
 
462
- def dumps_typed(self, obj: Any) -> tuple[str, bytes]:
463
- return "json", json_dumpb(obj)
462
+ def loads(self, data: bytes) -> Any:
463
+ return orjson.loads(data)
464
464
 
465
- def loads(self, data: bytes) -> Any:
466
- return orjson.loads(data)
465
+ def loads_typed(self, data: tuple[str, bytes]) -> Any:
466
+ type, payload = data
467
+ if type != "json":
468
+ raise ValueError(f"Unsupported type {type}")
469
+ return orjson.loads(payload)
467
470
 
468
- def loads_typed(self, data: tuple[str, bytes]) -> Any:
469
- type, payload = data
470
- if type != "json":
471
- raise ValueError(f"Unsupported type {type}")
472
- return orjson.loads(payload)
473
471
 
474
- checkpointer = Checkpointer(conn)
472
+ def _get_passthrough_checkpointer(conn: AsyncConnectionProto):
473
+ from langgraph_runtime.checkpoint import Checkpointer
475
474
 
475
+ checkpointer = Checkpointer(conn)
476
476
  # This checkpointer does not attempt to revive LC-objects.
477
477
  # Instead, it will pass through the JSON values as-is.
478
478
  checkpointer.serde = PassthroughSerialiser()
@@ -687,7 +687,11 @@ async def run_remote_checkpointer():
687
687
  payload = orjson.loads(await request.body())
688
688
  return ApiResponse(await cb(payload))
689
689
  except ValueError as exc:
690
+ await logger.error(exc)
690
691
  return ApiResponse({"error": str(exc)}, status_code=400)
692
+ except Exception as exc:
693
+ await logger.error(exc)
694
+ return ApiResponse({"error": str(exc)}, status_code=500)
691
695
 
692
696
  return wrapped
693
697
 
@@ -800,15 +804,18 @@ async def js_healthcheck():
800
804
  transport=httpx.AsyncHTTPTransport(verify=SSL),
801
805
  ) as checkpointer_client,
802
806
  ):
807
+ graph_passed = False
803
808
  try:
804
809
  res = await graph_client.get("/ok")
805
810
  res.raise_for_status()
811
+ graph_passed = True
806
812
  res = await checkpointer_client.get("/ok")
807
813
  res.raise_for_status()
808
814
  return True
809
815
  except httpx.HTTPError as exc:
810
816
  logger.warning(
811
817
  "JS healthcheck failed. Either the JS server is not running or the event loop is blocked by a CPU-intensive task.",
818
+ graph_passed=graph_passed,
812
819
  error=exc,
813
820
  )
814
821
  raise HTTPException(
@@ -57,6 +57,16 @@ class AddPrefixedEnvVars:
57
57
  return event_dict
58
58
 
59
59
 
60
+ class AddApiVersion:
61
+ def __call__(
62
+ self, logger: logging.Logger, method_name: str, event_dict: EventDict
63
+ ) -> EventDict:
64
+ from langgraph_api import __version__
65
+
66
+ event_dict["langgraph_api_version"] = __version__
67
+ return event_dict
68
+
69
+
60
70
  class AddLoggingContext:
61
71
  def __call__(
62
72
  self, logger: logging.Logger, method_name: str, event_dict: EventDict
@@ -90,11 +100,14 @@ shared_processors = [
90
100
  structlog.stdlib.PositionalArgumentsFormatter(),
91
101
  structlog.stdlib.ExtraAdder(),
92
102
  AddPrefixedEnvVars("LANGSMITH_LANGGRAPH_"), # injected by docker build
103
+ AddApiVersion(),
93
104
  structlog.processors.TimeStamper(fmt="iso", utc=True),
94
105
  structlog.processors.StackInfoRenderer(),
95
- structlog.processors.dict_tracebacks
96
- if LOG_JSON
97
- else structlog.processors.format_exc_info,
106
+ (
107
+ structlog.processors.dict_tracebacks
108
+ if LOG_JSON
109
+ else structlog.processors.format_exc_info
110
+ ),
98
111
  structlog.processors.UnicodeDecoder(),
99
112
  AddLoggingContext(),
100
113
  ]
@@ -29,6 +29,13 @@ from langgraph_api.utils import AsyncConnectionProto, get_auth_ctx
29
29
  from langgraph_runtime.ops import Runs, logger
30
30
 
31
31
 
32
+ class LangSmithTracer(TypedDict, total=False):
33
+ """Configuration for LangSmith tracing."""
34
+
35
+ example_id: str | None
36
+ project_name: str | None
37
+
38
+
32
39
  class RunCreateDict(TypedDict):
33
40
  """Payload for creating a run."""
34
41
 
@@ -87,6 +94,8 @@ class RunCreateDict(TypedDict):
87
94
  """Start the run after this many seconds. Defaults to 0."""
88
95
  if_not_exists: IfNotExists
89
96
  """Create the thread if it doesn't exist. If False, reply with 404."""
97
+ langsmith_tracer: LangSmithTracer | None
98
+ """Configuration for additional tracing with LangSmith."""
90
99
 
91
100
 
92
101
  def ensure_ids(
@@ -295,6 +304,9 @@ async def create_valid_run(
295
304
  user_id = None
296
305
  if not configurable.get("langgraph_request_id"):
297
306
  configurable["langgraph_request_id"] = request_id
307
+ if ls_tracing := payload.get("langsmith_tracer"):
308
+ configurable["__langsmith_project__"] = ls_tracing.get("project_name")
309
+ configurable["__langsmith_example_id__"] = ls_tracing.get("example_id")
298
310
  if request_start_time:
299
311
  configurable["__request_start_time_ms__"] = request_start_time
300
312
  after_seconds = payload.get("after_seconds", 0)
@@ -1,5 +1,5 @@
1
1
  from collections.abc import AsyncIterator, Callable
2
- from contextlib import AsyncExitStack, aclosing
2
+ from contextlib import AsyncExitStack, aclosing, asynccontextmanager
3
3
  from functools import lru_cache
4
4
  from typing import Any, cast
5
5
 
@@ -20,6 +20,7 @@ from langgraph.errors import (
20
20
  InvalidUpdateError,
21
21
  )
22
22
  from langgraph.pregel.debug import CheckpointPayload, TaskResultPayload
23
+ from langsmith.utils import get_tracer_project
23
24
  from pydantic import ValidationError
24
25
  from pydantic.v1 import ValidationError as ValidationErrorLegacy
25
26
 
@@ -71,6 +72,12 @@ def _preprocess_debug_checkpoint(payload: CheckpointPayload | None) -> dict[str,
71
72
  return payload
72
73
 
73
74
 
75
+ @asynccontextmanager
76
+ async def async_tracing_context(*args, **kwargs):
77
+ with langsmith.tracing_context(*args, **kwargs):
78
+ yield
79
+
80
+
74
81
  async def astream_state(
75
82
  stack: AsyncExitStack,
76
83
  conn: AsyncConnectionProto,
@@ -131,6 +138,25 @@ async def astream_state(
131
138
  use_astream_events = "events" in stream_mode or isinstance(graph, BaseRemotePregel)
132
139
  # yield metadata chunk
133
140
  yield "metadata", {"run_id": run_id, "attempt": attempt}
141
+
142
+ # is a langsmith tracing project is specified, additionally pass that in to tracing context
143
+ if ls_project := config["configurable"].get("__langsmith_project__"):
144
+ updates = None
145
+ if example_id := config["configurable"].get("__langsmith_example_id__"):
146
+ updates = {"reference_example_id": example_id}
147
+
148
+ await stack.enter_async_context(
149
+ async_tracing_context(
150
+ replicas=[
151
+ (
152
+ ls_project,
153
+ updates,
154
+ ),
155
+ (get_tracer_project(), None),
156
+ ]
157
+ )
158
+ )
159
+
134
160
  # stream run
135
161
  if use_astream_events:
136
162
  async with (
@@ -269,7 +295,7 @@ async def astream_state(
269
295
  yield mode, chunk
270
296
  # --- end shared logic with astream_events ---
271
297
  if is_remote_pregel:
272
- # increament the remote runs
298
+ # increment the remote runs
273
299
  try:
274
300
  nodes_executed = await graph.fetch_nodes_executed()
275
301
  incr_nodes(None, incr=nodes_executed)
@@ -90,11 +90,11 @@ async def worker(
90
90
  if request_created_at is not None
91
91
  else None
92
92
  )
93
-
94
93
  async with (
95
94
  connect() as conn,
96
95
  set_auth_ctx_for_run(run["kwargs"]),
97
96
  Runs.enter(run_id, main_loop) as done,
97
+ AsyncExitStack() as exit_stack,
98
98
  ):
99
99
  temporary = run["kwargs"].get("temporary", False)
100
100
  resumable = run["kwargs"].get("resumable", False)
@@ -155,7 +155,6 @@ async def worker(
155
155
  )
156
156
 
157
157
  raise RuntimeError(error_message)
158
- exit_stack = AsyncExitStack()
159
158
  if temporary:
160
159
  stream = astream_state(exit_stack, conn, cast(Run, run), attempt, done)
161
160
  else:
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.checkpoint import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.database import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.lifespan import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.metrics import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.ops import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.queue import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.retry import * # noqa: F403
@@ -0,0 +1,4 @@
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from langgraph_runtime_inmem.store import * # noqa: F403
@@ -21,9 +21,9 @@ dependencies = [
21
21
  "langgraph-checkpoint>=2.0.23",
22
22
  "orjson>=3.9.7",
23
23
  "uvicorn>=0.26.0",
24
- "langsmith>=0.1.112",
24
+ "langsmith>=0.3.45",
25
25
  "httpx>=0.25.0",
26
- "langchain-core>=0.2.38",
26
+ "langchain-core>=0.3.64",
27
27
  "tenacity>=8.0.0",
28
28
  "jsonschema-rs>=0.20.0,<0.30",
29
29
  "structlog>=24.1.0,<26",