Skip to content

mistral_common.protocol.instruct.normalize

InstructRequestNormalizer(user_message_class, assistant_message_class, tool_message_class, system_message_class, instruct_request_class)

Bases: Generic[UserMessageType, AssistantMessageType, ToolMessageType, SystemMessageType, InstructRequestType]

Takes a ChatCompletionRequest and normalizes it into an InstructRequest.

The normalization process does several things such as: - Aggregate consecutive messages of the same role - Aggregate system prompts - Normalize json content - Normalize tool calls

Examples:

>>> normalizer = InstructRequestNormalizer.normalizer()

Parameters:

Name Type Description Default
user_message_class Type[UserMessageType]

The class for user messages.

required
assistant_message_class Type[AssistantMessageType]

The class for assistant messages.

required
tool_message_class Type[ToolMessageType]

The class for tool messages.

required
system_message_class Type[SystemMessageType]

The class for system messages.

required
instruct_request_class Type[InstructRequestType]

The class for instruct requests.

required
Source code in src/mistral_common/protocol/instruct/normalize.py
def __init__(
    self,
    user_message_class: Type[UserMessageType],
    assistant_message_class: Type[AssistantMessageType],
    tool_message_class: Type[ToolMessageType],
    system_message_class: Type[SystemMessageType],
    instruct_request_class: Type[InstructRequestType],
):
    r"""Initializes the normalizer with the appropriate message classes.

    Args:
       user_message_class: The class for user messages.
       assistant_message_class: The class for assistant messages.
       tool_message_class: The class for tool messages.
       system_message_class: The class for system messages.
       instruct_request_class: The class for instruct requests.
    """
    self._user_message_class = user_message_class
    self._assistant_message_class = assistant_message_class
    self._tool_message_class = tool_message_class
    self._instruct_request_class = instruct_request_class
    # this is unused but makes creation nicer
    self._system_message_class = system_message_class

from_chat_completion_request(request)

Converts a chat completion request to an instruct request.

Parameters:

Name Type Description Default
request ChatCompletionRequest[UATS]

The chat completion request to convert.

required

Returns:

Type Description
InstructRequestType

The converted instruct request.

Examples:

>>> from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
>>> request = ChatCompletionRequest(
...     messages=[
...         UserMessage(content="Hello"),
...         AssistantMessage(content="Hi"),
...     ],
... )
>>> normalizer = InstructRequestNormalizer.normalizer()
>>> instruct_request = normalizer.from_chat_completion_request(request)
Source code in src/mistral_common/protocol/instruct/normalize.py
def from_chat_completion_request(self, request: ChatCompletionRequest[UATS]) -> InstructRequestType:
    r"""Converts a chat completion request to an instruct request.

    Args:
        request: The chat completion request to convert.

    Returns:
        The converted instruct request.

    Examples:
        >>> from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
        >>> request = ChatCompletionRequest(
        ...     messages=[
        ...         UserMessage(content="Hello"),
        ...         AssistantMessage(content="Hi"),
        ...     ],
        ... )
        >>> normalizer = InstructRequestNormalizer.normalizer()
        >>> instruct_request = normalizer.from_chat_completion_request(request)
    """
    system_prompt = self._aggregate_system_prompts(request)
    messages = self._aggregate_messages(request)

    return self._instruct_request_class(
        messages=messages, system_prompt=system_prompt, available_tools=request.tools
    )

normalizer() staticmethod

Returns a normalizer for the default instruct request.

Examples:

>>> normalizer = InstructRequestNormalizer.normalizer()
Source code in src/mistral_common/protocol/instruct/normalize.py
@staticmethod
def normalizer() -> "InstructRequestNormalizer":
    r"""Returns a normalizer for the default instruct request.

    Examples:
        >>> normalizer = InstructRequestNormalizer.normalizer()
    """
    return InstructRequestNormalizer(
        UserMessage,
        AssistantMessage,
        ToolMessage,
        SystemMessage,
        InstructRequest[UATS, Tool],
    )

InstructRequestNormalizerV7(user_message_class, assistant_message_class, tool_message_class, system_message_class, instruct_request_class)

Bases: InstructRequestNormalizer

Normalizer for the v7 tokenizer.

Examples:

>>> normalizer = InstructRequestNormalizerV7.normalizer()
Source code in src/mistral_common/protocol/instruct/normalize.py
def __init__(
    self,
    user_message_class: Type[UserMessageType],
    assistant_message_class: Type[AssistantMessageType],
    tool_message_class: Type[ToolMessageType],
    system_message_class: Type[SystemMessageType],
    instruct_request_class: Type[InstructRequestType],
):
    r"""Initializes the normalizer with the appropriate message classes.

    Args:
       user_message_class: The class for user messages.
       assistant_message_class: The class for assistant messages.
       tool_message_class: The class for tool messages.
       system_message_class: The class for system messages.
       instruct_request_class: The class for instruct requests.
    """
    self._user_message_class = user_message_class
    self._assistant_message_class = assistant_message_class
    self._tool_message_class = tool_message_class
    self._instruct_request_class = instruct_request_class
    # this is unused but makes creation nicer
    self._system_message_class = system_message_class

from_chat_completion_request(request)

Converts a chat completion request to an instruct request.

Parameters:

Name Type Description Default
request ChatCompletionRequest[UATS]

The chat completion request to convert.

required

Returns:

Type Description
InstructRequestType

The converted instruct request.

Examples:

>>> from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
>>> request = ChatCompletionRequest(
...     messages=[
...         UserMessage(content="Hello"),
...         AssistantMessage(content="Hi"),
...     ],
... )
>>> normalizer = InstructRequestNormalizerV7.normalizer()
>>> instruct_request = normalizer.from_chat_completion_request(request)
Source code in src/mistral_common/protocol/instruct/normalize.py
def from_chat_completion_request(self, request: ChatCompletionRequest[UATS]) -> InstructRequestType:  # type: ignore[type-var]
    r"""Converts a chat completion request to an instruct request.

    Args:
        request: The chat completion request to convert.

    Returns:
        The converted instruct request.

    Examples:
        >>> from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
        >>> request = ChatCompletionRequest(
        ...     messages=[
        ...         UserMessage(content="Hello"),
        ...         AssistantMessage(content="Hi"),
        ...     ],
        ... )
        >>> normalizer = InstructRequestNormalizerV7.normalizer()
        >>> instruct_request = normalizer.from_chat_completion_request(request)
    """
    messages = self._aggregate_messages(request)
    return self._instruct_request_class(messages=messages, system_prompt=None, available_tools=request.tools)  # type: ignore[no-any-return]

normalizer() staticmethod

Returns a normalizer for the default instruct request

Examples:

>>> normalizer = InstructRequestNormalizerV7.normalizer()
Source code in src/mistral_common/protocol/instruct/normalize.py
@staticmethod
def normalizer() -> "InstructRequestNormalizerV7":
    r"""Returns a normalizer for the default instruct request

    Examples:
        >>> normalizer = InstructRequestNormalizerV7.normalizer()
    """
    return InstructRequestNormalizerV7(
        UserMessage,
        AssistantMessage,
        ToolMessage,
        SystemMessage,
        InstructRequest[UATS, Tool],
    )

normalizer_for_tokenizer_version(version)

Gets the appropriate normalizer for the given tokenizer version.

Parameters:

Name Type Description Default
version TokenizerVersion

The tokenizer version to get the normalizer for.

required

Returns:

Type Description
InstructRequestNormalizer

The appropriate normalizer for the given tokenizer version.

Examples:

>>> normalizer = normalizer_for_tokenizer_version(TokenizerVersion.v1)
Source code in src/mistral_common/protocol/instruct/normalize.py
def normalizer_for_tokenizer_version(version: TokenizerVersion) -> InstructRequestNormalizer:
    """Gets the appropriate normalizer for the given tokenizer version.

    Args:
        version: The tokenizer version to get the normalizer for.

    Returns:
        The appropriate normalizer for the given tokenizer version.

    Examples:
        >>> normalizer = normalizer_for_tokenizer_version(TokenizerVersion.v1)
    """
    if version in {TokenizerVersion.v1, TokenizerVersion.v2, TokenizerVersion.v3}:
        return InstructRequestNormalizer.normalizer()
    elif version == TokenizerVersion.v7:
        return InstructRequestNormalizerV7.normalizer()
    raise ValueError(f"Unknown tokenizer version {version}")