From 901a971a044d518cb18a122427eca9d6ff8ef9d8 Mon Sep 17 00:00:00 2001 From: Manohar Paturi <186662190+ManoharPaturi@users.noreply.github.com> Date: Tue, 20 Oct 2026 09:26:07 +0530 Subject: [PATCH] FIX: Include word selection strategy in RandomTranslationConverter identifier Signed-off-by: Manohar Paturi <186662190+ManoharPaturi@users.noreply.github.com> --- .../converter/random_translation_converter.py | 6 ++-- .../test_random_translation_converter.py | 28 ++++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/pyrit/converter/random_translation_converter.py b/pyrit/converter/random_translation_converter.py index e7f6878262..3ef2260696 100644 --- a/pyrit/converter/random_translation_converter.py +++ b/pyrit/converter/random_translation_converter.py @@ -89,10 +89,12 @@ def _build_identifier(self) -> ComponentIdentifier: Returns: ComponentIdentifier: The converter identifier. """ - base_identifier = super()._build_identifier() + llm_identifier = LLMGenericTextConverter._build_identifier(self) + word_level_identifier = WordLevelConverter._build_identifier(self) return self._create_identifier( params={ - **base_identifier.params, + **llm_identifier.params, + **word_level_identifier.params, "languages": sorted(self.languages, key=str.casefold), }, converter_target=self._converter_target.get_identifier(), diff --git a/tests/unit/converter/test_random_translation_converter.py b/tests/unit/converter/test_random_translation_converter.py index 4d3041e4f4..ee8729ab0e 100644 --- a/tests/unit/converter/test_random_translation_converter.py +++ b/tests/unit/converter/test_random_translation_converter.py @@ -6,7 +6,11 @@ import pytest from unit.mocks import get_mock_target_identifier -from pyrit.converter import RandomTranslationConverter +from pyrit.converter import ( + RandomTranslationConverter, + WordPositionSelectionStrategy, + WordProportionSelectionStrategy, +) from pyrit.models import Message, MessagePiece from pyrit.prompt_target.common.prompt_target import PromptTarget @@ -70,3 +74,25 @@ def test_random_translation_converter_identifier_distinguishes_language_pools(mo different = RandomTranslationConverter(converter_target=mock_target, languages=["German", "Japanese"]) assert first.get_identifier().hash != different.get_identifier().hash + + +def test_random_translation_converter_identifier_includes_word_selection_strategy(mock_target) -> None: + strategy = WordPositionSelectionStrategy(start_proportion=0.0, end_proportion=0.5) + converter = RandomTranslationConverter(converter_target=mock_target, word_selection_strategy=strategy) + identifier = converter.get_identifier() + + assert identifier.params["word_selection_strategy"] == "WordPositionSelectionStrategy" + assert identifier.params["word_selection_strategy_params"] == {"start_proportion": 0.0, "end_proportion": 0.5} + + +def test_random_translation_converter_identifier_distinguishes_word_selection_strategies(mock_target) -> None: + first = RandomTranslationConverter( + converter_target=mock_target, + word_selection_strategy=WordPositionSelectionStrategy(start_proportion=0.0, end_proportion=0.5), + ) + second = RandomTranslationConverter( + converter_target=mock_target, + word_selection_strategy=WordProportionSelectionStrategy(proportion=0.5), + ) + + assert first.get_identifier().hash != second.get_identifier().hash