From 4ec0707df77ba7a115b31bf30134cefa4235da82 Mon Sep 17 00:00:00 2001 From: "Slai.life" Date: Fri, 30 Oct 2026 02:47:26 +0800 Subject: [PATCH 1/2] fix(converter): make repeat token dispatch exhaustive --- pyrit/converter/repeat_token_converter.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyrit/converter/repeat_token_converter.py b/pyrit/converter/repeat_token_converter.py index fba48b1fd2..d9b82cd308 100644 --- a/pyrit/converter/repeat_token_converter.py +++ b/pyrit/converter/repeat_token_converter.py @@ -2,11 +2,13 @@ # Licensed under the MIT license. import re -from typing import Literal +from typing import Literal, assert_never from pyrit.converter.converter import Converter, ConverterResult from pyrit.models import ComponentIdentifier, PromptDataType +TokenInsertMode = Literal["split", "prepend", "append", "repeat"] + class RepeatTokenConverter(Converter): """ @@ -35,7 +37,7 @@ def __init__( *, token_to_repeat: str, times_to_repeat: int, - token_insert_mode: Literal["split", "prepend", "append", "repeat"] | None = None, + token_insert_mode: TokenInsertMode | None = None, ) -> None: """ Initialize the converter with the specified token, number of repetitions, and insertion mode. @@ -92,6 +94,8 @@ def insert(text: str) -> list[str]: return ["", ""] self.insert = insert + case _: + assert_never(mode) def _build_identifier(self) -> ComponentIdentifier: """ From 0a05cb353de699549fc01cdc48cd1e625d83a4fa Mon Sep 17 00:00:00 2001 From: "Slai.life" Date: Sat, 31 Oct 2026 07:44:15 +0800 Subject: [PATCH 2/2] test: exclude unreachable repeat token fallback from coverage --- pyrit/converter/repeat_token_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrit/converter/repeat_token_converter.py b/pyrit/converter/repeat_token_converter.py index d9b82cd308..61b74d39ae 100644 --- a/pyrit/converter/repeat_token_converter.py +++ b/pyrit/converter/repeat_token_converter.py @@ -94,7 +94,7 @@ def insert(text: str) -> list[str]: return ["", ""] self.insert = insert - case _: + case _: # pragma: no cover - mode validation above narrows this to TokenInsertMode. assert_never(mode) def _build_identifier(self) -> ComponentIdentifier: