Source code for pyrit.chat_message_normalizer.chat_message_normalizer_tokenizer
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
from pyrit.models import ChatMessage
from pyrit.chat_message_normalizer import ChatMessageNormalizer
from transformers import PreTrainedTokenizer, PreTrainedTokenizerFast
[docs]
class ChatMessageNormalizerTokenizerTemplate(ChatMessageNormalizer[str]):
"""
This class enables you to apply the chat template stored in a Hugging Face tokenizer
to a list of chat messages. For more details, see
https://huggingface.co/docs/transformers/main/en/chat_templating
"""
[docs]
def __init__(self, tokenizer: PreTrainedTokenizer | PreTrainedTokenizerFast):
"""
Initializes an instance of the ChatMessageNormalizerTokenizerTemplate class.
Args:
tokenizer (PreTrainedTokenizer | PreTrainedTokenizerFast): A Hugging Face tokenizer.
"""
self.tokenizer = tokenizer
[docs]
def normalize(self, messages: list[ChatMessage]) -> str:
"""
Applies the chat template stored in the tokenizer to a list of chat messages.
Args:
messages (list[ChatMessage]): A list of ChatMessage objects.
Returns:
str: The formatted chat messages.
"""
messages_list = []
formatted_messages: str = ""
for m in messages:
messages_list.append({"role": m.role, "content": m.content})
formatted_messages = self.tokenizer.apply_chat_template(
messages_list,
tokenize=False,
add_generation_prompt=True,
)
return formatted_messages