From 65cb4ebdd643bc4178026e0e64fa84d4aedaca1e Mon Sep 17 00:00:00 2001 From: jinliyl <6469360+jinliyl@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:24:41 +0800 Subject: [PATCH] fix: skip dependency bindings in status memory walk (#510) * fix: skip dependency bindings in status memory walk * chore: bump version to 0.4.1.11 --- reme/__init__.py | 2 +- reme/steps/common/status.py | 3 +++ tests/unit/test_status_step.py | 14 +++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/reme/__init__.py b/reme/__init__.py index c4bd9bf8..6ece0f6e 100644 --- a/reme/__init__.py +++ b/reme/__init__.py @@ -1,6 +1,6 @@ """ReMe CLI package.""" -__version__ = "0.4.1.10" +__version__ = "0.4.1.11" from . import config from . import constants diff --git a/reme/steps/common/status.py b/reme/steps/common/status.py index 2b04f1ad..b2cdcc3e 100644 --- a/reme/steps/common/status.py +++ b/reme/steps/common/status.py @@ -9,6 +9,7 @@ import psutil from ..base_step import BaseStep from ...components import BaseComponent, R +from ...components.base_component import Dependency from ...enumeration import ComponentEnum _SKIPPED_COMPONENT_ATTRIBUTES = {"app_context", "logger"} @@ -48,6 +49,8 @@ def _component_size(obj: object) -> int: if isinstance(value, BaseComponent) and value_id != root_id: return 0 + if isinstance(value, Dependency): + return 0 if isinstance(value, (type, ModuleType)): return 0 if isinstance(value, np.ndarray): diff --git a/tests/unit/test_status_step.py b/tests/unit/test_status_step.py index 1ff97e8d..1951259e 100644 --- a/tests/unit/test_status_step.py +++ b/tests/unit/test_status_step.py @@ -3,7 +3,7 @@ import asyncio from reme.components.application_context import ApplicationContext -from reme.components.base_component import BaseComponent +from reme.components.base_component import BaseComponent, Dependency from reme.enumeration import ComponentEnum from reme.steps.common.status import ( StatusStep, @@ -35,6 +35,18 @@ def test_component_size_does_not_charge_referenced_components_twice(): assert dependency_size > owner_size +def test_component_size_ignores_preserved_dependency_bindings(): + """Resolved components retain dependency specs for live replacement.""" + component = _SizedComponent(b"payload") + component._binding_specs["as_embedding"] = Dependency( # pylint: disable=protected-access + ComponentEnum.AS_EMBEDDING, + "default", + ) + component._is_started = True # pylint: disable=protected-access + + assert _component_size(component) > 0 + + def test_collect_memory_reports_only_stateful_data_components_and_sum(tmp_path): """Status includes only the data components whose state can grow.""" context = ApplicationContext(workspace_dir=str(tmp_path))