From 0e0db90b6cf4e097515b4100d7854a343638d564 Mon Sep 17 00:00:00 2001 From: Goldloli <39011904+Goldloli@users.noreply.github.com> Date: Wed, 4 Nov 2026 11:04:53 +0800 Subject: [PATCH 1/2] BUG: include ordered parameters in TemplateSegmentConverter identity --- pyrit/converter/template_segment_converter.py | 2 +- .../test_template_segment_converter.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pyrit/converter/template_segment_converter.py b/pyrit/converter/template_segment_converter.py index 7140c51e09..2607cf9333 100644 --- a/pyrit/converter/template_segment_converter.py +++ b/pyrit/converter/template_segment_converter.py @@ -82,7 +82,7 @@ def _build_identifier(self) -> ComponentIdentifier: return self._create_identifier( params={ "template_hash": template_hash, - "number_parameters": self._number_parameters, + "parameters": self.prompt_template.parameters, "seed": self._seed, } ) diff --git a/tests/unit/converter/test_template_segment_converter.py b/tests/unit/converter/test_template_segment_converter.py index 73b85b5b9b..d048b40d51 100644 --- a/tests/unit/converter/test_template_segment_converter.py +++ b/tests/unit/converter/test_template_segment_converter.py @@ -168,3 +168,21 @@ async def test_template_segment_converter_invalid_input_type(): converter = TemplateSegmentConverter() with pytest.raises(ValueError, match="Input type not supported"): await converter.convert_async(prompt="test", input_type="image_path") + + +def test_template_segment_converter_identity_includes_parameter_order(): + """Test that reversing the ordered parameters produces a different identifier hash. + + The ordered parameter list controls which prompt segment fills which template + parameter, so two converters that differ only in that order are behaviorally + distinct and must not collide in the registry. + """ + template = "LEFT[{{left}}] RIGHT[{{right}}]" + first = TemplateSegmentConverter( + prompt_template=SeedPrompt(value=template, parameters=["left", "right"]), seed=7 + ) + second = TemplateSegmentConverter( + prompt_template=SeedPrompt(value=template, parameters=["right", "left"]), seed=7 + ) + + assert first.get_identifier().hash != second.get_identifier().hash From 75ab75c88e7a25449461e60cf8eb56ccaaeb1b7f Mon Sep 17 00:00:00 2001 From: Roman Lutz Date: Thu, 5 Nov 2026 00:23:50 -0800 Subject: [PATCH 2/2] FMT: format template segment identity regression test Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- tests/unit/converter/test_template_segment_converter.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/unit/converter/test_template_segment_converter.py b/tests/unit/converter/test_template_segment_converter.py index d048b40d51..b898e79d05 100644 --- a/tests/unit/converter/test_template_segment_converter.py +++ b/tests/unit/converter/test_template_segment_converter.py @@ -178,11 +178,7 @@ def test_template_segment_converter_identity_includes_parameter_order(): distinct and must not collide in the registry. """ template = "LEFT[{{left}}] RIGHT[{{right}}]" - first = TemplateSegmentConverter( - prompt_template=SeedPrompt(value=template, parameters=["left", "right"]), seed=7 - ) - second = TemplateSegmentConverter( - prompt_template=SeedPrompt(value=template, parameters=["right", "left"]), seed=7 - ) + first = TemplateSegmentConverter(prompt_template=SeedPrompt(value=template, parameters=["left", "right"]), seed=7) + second = TemplateSegmentConverter(prompt_template=SeedPrompt(value=template, parameters=["right", "left"]), seed=7) assert first.get_identifier().hash != second.get_identifier().hash