Shortcuts

Source code for torchtune.models.llama2._prompt_template

# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
from typing import List

from torchtune.data import Message, PromptTemplateInterface


[docs]class Llama2ChatTemplate(PromptTemplateInterface): """ Prompt template that formats chat data of human and system prompts with appropriate tags used in Llama2 pre-training. Taken from Meta's official `Llama inference repository <https://github.com/meta-llama/llama/blob/main/llama/generation.py>`_. .. code-block:: text "[INST] <<SYS>> You are a helpful, respectful and honest assistant. <</SYS>>" I am going to Paris, what should I see? [/INST] Paris, the capital of France, is known for its stunning architecture..." """ template = { "system": ("<<SYS>>\n", "\n<</SYS>>\n\n"), "user": ("[INST] ", " [/INST] "), "assistant": ("", ""), "ipython": ("", ""), } def __call__( self, messages: List[Message], ) -> List[Message]: """ Format user and system messages with appropriate tags. Args: messages (List[Message]): a single conversation, structured as a list of `Message` objects Returns: The formatted list of messages """ system_message = [] formatted_dialogue = [] for message in messages: if message.role == "system": system_message = ( [{"type": "text", "content": self.template["system"][0]}] + message.content + [{"type": "text", "content": self.template["system"][1]}] ) # Incorporate the system message in the user message - Llama2 only # looks for the <<SYS>> tags and not the explicit role so this will # be treated the same as an actual system message. We do this because # of the nesting of the system prompt in the user message. continue elif message.role == "user": content = ( [{"type": "text", "content": self.template["user"][0]}] + system_message + message.content + [{"type": "text", "content": self.template["user"][1]}] ) elif message.role == "assistant": # No special formatting needed for assistant message content = message.content formatted_dialogue.append( Message( role=message.role, content=content, masked=message.masked, ipython=message.ipython, eot=message.eot, ), ) return formatted_dialogue

Docs

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources