diff --git a/libs/langgraph/langgraph/graph/state.py b/libs/langgraph/langgraph/graph/state.py index f2c8643f9..b207daa89 100644 --- a/libs/langgraph/langgraph/graph/state.py +++ b/libs/langgraph/langgraph/graph/state.py @@ -9,7 +9,7 @@ from collections.abc import Awaitable, Callable, Hashable, Mapping, Sequence from dataclasses import dataclass, is_dataclass from datetime import timedelta from functools import partial -from importlib import import_module +from importlib import metadata from inspect import isclass, isfunction, ismethod, signature from types import FunctionType from types import NoneType as NoneType @@ -133,8 +133,8 @@ def _check_delta_channel_api_support(channels: Mapping[str, Any]) -> None: if not any(isinstance(c, DeltaChannel) for c in channels.values()): return try: - api_version = import_module("langgraph_api").__version__ - except ImportError: + api_version = metadata.version("langgraph-api") + except metadata.PackageNotFoundError: return if Version(api_version) < Version("0.10.0"): raise RuntimeError( diff --git a/libs/langgraph/tests/test_delta_channel_api_support.py b/libs/langgraph/tests/test_delta_channel_api_support.py index be0f73bc1..2034e4104 100644 --- a/libs/langgraph/tests/test_delta_channel_api_support.py +++ b/libs/langgraph/tests/test_delta_channel_api_support.py @@ -8,9 +8,7 @@ is skipped when `langgraph-api` is not installed (local execution). from __future__ import annotations -import sys import warnings -from types import ModuleType from typing import Annotated import pytest @@ -19,6 +17,7 @@ from typing_extensions import TypedDict from langgraph.channels.delta import DeltaChannel from langgraph.constants import START from langgraph.graph import StateGraph +from langgraph.graph import state as state_module from langgraph.graph.message import _messages_delta_reducer @@ -42,15 +41,17 @@ def _delta_graph() -> StateGraph: @pytest.fixture def api_version(monkeypatch: pytest.MonkeyPatch): - """Override the imported `langgraph_api.__version__` (or simulate absence).""" + """Override the reported `langgraph-api` package version (or simulate absence).""" def _set(version: str | None) -> None: - if version is None: - monkeypatch.setitem(sys.modules, "langgraph_api", None) - return - module = ModuleType("langgraph_api") - setattr(module, "__version__", version) - monkeypatch.setitem(sys.modules, "langgraph_api", module) + def fake_version(name: str) -> str: + if name == "langgraph-api": + if version is None: + raise state_module.metadata.PackageNotFoundError(name) + return version + return state_module.metadata.version(name) + + monkeypatch.setattr(state_module.metadata, "version", fake_version) return _set