From eddf75616ead9a63f882fbddec4a131787361389 Mon Sep 17 00:00:00 2001 From: Pepijn Date: Wed, 15 Jul 2026 16:04:26 +0200 Subject: [PATCH] fix(processor): serialize FAST token mapping --- src/lerobot/processor/tokenizer_processor.py | 2 ++ tests/processor/test_tokenizer_processor.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lerobot/processor/tokenizer_processor.py b/src/lerobot/processor/tokenizer_processor.py index f11f9f87a..f45cd2cb4 100644 --- a/src/lerobot/processor/tokenizer_processor.py +++ b/src/lerobot/processor/tokenizer_processor.py @@ -565,6 +565,8 @@ class ActionTokenizerProcessorStep(ActionProcessorStep): config = { "trust_remote_code": self.trust_remote_code, "max_action_tokens": self.max_action_tokens, + "fast_skip_tokens": self.fast_skip_tokens, + "paligemma_tokenizer_name": self.paligemma_tokenizer_name, } # Only save tokenizer_name if it was used to create the tokenizer diff --git a/tests/processor/test_tokenizer_processor.py b/tests/processor/test_tokenizer_processor.py index 5708e6e81..0290ae78a 100644 --- a/tests/processor/test_tokenizer_processor.py +++ b/tests/processor/test_tokenizer_processor.py @@ -25,7 +25,7 @@ import pytest import torch from lerobot.configs.types import FeatureType, PipelineFeatureType, PolicyFeature -from lerobot.processor import DataProcessorPipeline, TokenizerProcessorStep +from lerobot.processor import ActionTokenizerProcessorStep, DataProcessorPipeline, TokenizerProcessorStep from lerobot.processor.converters import create_transition, identity_transition from lerobot.types import TransitionKey from lerobot.utils.constants import ( @@ -88,6 +88,24 @@ class MockTokenizer: return result +def test_action_tokenizer_config_preserves_token_mapping(): + processor = object.__new__(ActionTokenizerProcessorStep) + processor.trust_remote_code = True + processor.max_action_tokens = 384 + processor.fast_skip_tokens = 64 + processor.paligemma_tokenizer_name = "custom/paligemma" + processor.action_tokenizer_name = "custom/fast" + processor.action_tokenizer_input_object = None + + assert processor.get_config() == { + "trust_remote_code": True, + "max_action_tokens": 384, + "fast_skip_tokens": 64, + "paligemma_tokenizer_name": "custom/paligemma", + "action_tokenizer_name": "custom/fast", + } + + @pytest.fixture def mock_tokenizer(): """Provide a mock tokenizer for testing."""