from typing import List def format_as_chat(message: str, history: List[List[str]]) -> str: """ Given a message and a history of previous messages, returns a string that formats the conversation as a chat. Uses the format expected by Meta Llama 3 Instruct. :param message: A string containing the user's most recent message :param history: A list of lists of previous messages, where each sublist is a conversation turn: [[user_message1, assistant_reply1], [user_message2, assistant_reply2], ...] """ formatted_prompt = "<|begin_of_text|>" if len(history) == 0: return formatted_prompt + f"<|start_header_id|>user<|end_header_id|>\n\n{message}<|eot_id|>" for conv_turn in history: prompt = f"<|start_header_id|>user<|end_header_id|>\n\n{ conv_turn[0]}<|eot_id|>" reply = f"<|start_header_id|>assistant<|end_header_id|>\n\n{ conv_turn[1]}<|eot_id|>" # Add conversation turn to full prompt formatted_prompt += prompt + reply # Add last message formatted_prompt += \ f"<|start_header_id|>user<|end_header_id|>\n\n{message}<|eot_id|>" return formatted_prompt def generate_payload(prompt: str): """ Given a formatted prompt, returns an object to be used when posting to the API :param prompt: A formatted prompt following Llama 3's multi-turn conversation structure """ payload = { "inputs": prompt, "parameters": { "do_sample": False } } return payload def format_for_translator(sentence: str, trg_lang: str): # Wrap sentence with translation instruction instruction = ( f'Translate the following sentence into { trg_lang} using the native script: "{sentence}". ' "Only output the translated sentence in the native script." ) # Create the prompt structure formatted_prompt = "<|begin_of_text|>" return formatted_prompt + f"<|start_header_id|>user<|end_header_id|>\n\n{instruction}<|eot_id|>"