diff --git a/src/lerobot/processor/__init__.py b/src/lerobot/processor/__init__.py index 5cac04faa..fe35af4b4 100644 --- a/src/lerobot/processor/__init__.py +++ b/src/lerobot/processor/__init__.py @@ -93,9 +93,15 @@ from .relative_action_processor import ( to_relative_actions, ) from .rename_processor import RenameObservationsProcessorStep, rename_stats -from .render_messages_processor import RenderMessagesStep from .tokenizer_processor import ActionTokenizerProcessorStep, TokenizerProcessorStep +# RenderMessagesStep is intentionally NOT re-exported here: it pulls in +# `lerobot.datasets.language`, which requires the `[dataset]` extra +# (`datasets`, `pyarrow`). Importing it from the processor package would +# break every base-install consumer of `lerobot.processor`. Users that +# need it import directly: +# from lerobot.processor.render_messages_processor import RenderMessagesStep + __all__ = [ "ActionProcessorStep", "AddTeleopActionAsComplimentaryDataStep", @@ -129,7 +135,6 @@ __all__ = [ "make_default_robot_observation_processor", "AbsoluteActionsProcessorStep", "RelativeActionsProcessorStep", - "RenderMessagesStep", "MapDeltaActionToRobotActionStep", "MapTensorToDeltaActionDictStep", "NewLineTaskProcessorStep", diff --git a/tests/datasets/test_language.py b/tests/datasets/test_language.py index 5d1cac80f..f108f86c9 100644 --- a/tests/datasets/test_language.py +++ b/tests/datasets/test_language.py @@ -1,13 +1,17 @@ #!/usr/bin/env python -import numpy as np -import pandas as pd -import pyarrow as pa import pytest -from lerobot.datasets import LeRobotDataset -from lerobot.datasets.io_utils import write_info -from lerobot.datasets.language import ( +pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])") +pytest.importorskip("pandas", reason="pandas is required (install lerobot[dataset])") + +import numpy as np # noqa: E402 +import pandas as pd # noqa: E402 +import pyarrow as pa # noqa: E402 + +from lerobot.datasets import LeRobotDataset # noqa: E402 +from lerobot.datasets.io_utils import write_info # noqa: E402 +from lerobot.datasets.language import ( # noqa: E402 EVENT_ONLY_STYLES, LANGUAGE_EVENTS, LANGUAGE_PERSISTENT, @@ -21,7 +25,7 @@ from lerobot.datasets.language import ( language_persistent_arrow_type, validate_camera_field, ) -from lerobot.datasets.utils import DEFAULT_DATA_PATH +from lerobot.datasets.utils import DEFAULT_DATA_PATH # noqa: E402 def test_language_arrow_schema_has_expected_fields(): diff --git a/tests/datasets/test_language_render.py b/tests/datasets/test_language_render.py index 5aefea733..4fccaadfb 100644 --- a/tests/datasets/test_language_render.py +++ b/tests/datasets/test_language_render.py @@ -2,8 +2,16 @@ import pytest -from lerobot.configs.recipe import MessageTurn, TrainingRecipe -from lerobot.datasets.language_render import active_at, emitted_at, nth_next, nth_prev, render_sample +pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])") + +from lerobot.configs.recipe import MessageTurn, TrainingRecipe # noqa: E402 +from lerobot.datasets.language_render import ( # noqa: E402 + active_at, + emitted_at, + nth_next, + nth_prev, + render_sample, +) def persistent_row(role, content, style, timestamp, tool_calls=None, camera=None): diff --git a/tests/processor/test_render_messages_processor.py b/tests/processor/test_render_messages_processor.py index ff808f38f..f96e3c0ab 100644 --- a/tests/processor/test_render_messages_processor.py +++ b/tests/processor/test_render_messages_processor.py @@ -1,11 +1,15 @@ #!/usr/bin/env python -import torch +import pytest -from lerobot.configs.recipe import MessageTurn, TrainingRecipe -from lerobot.processor.converters import create_transition -from lerobot.processor.render_messages_processor import RenderMessagesStep -from lerobot.types import TransitionKey +pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])") + +import torch # noqa: E402 + +from lerobot.configs.recipe import MessageTurn, TrainingRecipe # noqa: E402 +from lerobot.processor.converters import create_transition # noqa: E402 +from lerobot.processor.render_messages_processor import RenderMessagesStep # noqa: E402 +from lerobot.types import TransitionKey # noqa: E402 def test_render_messages_step_noops_without_language_columns(): diff --git a/tests/utils/test_collate.py b/tests/utils/test_collate.py index d53858079..b37c71b2d 100644 --- a/tests/utils/test_collate.py +++ b/tests/utils/test_collate.py @@ -1,8 +1,12 @@ #!/usr/bin/env python -import torch +import pytest -from lerobot.utils.collate import lerobot_collate_fn +pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])") + +import torch # noqa: E402 + +from lerobot.utils.collate import lerobot_collate_fn # noqa: E402 def test_lerobot_collate_preserves_messages_and_drops_raw_language():