@@ -91,6 +91,19 @@ def _format_add_colon_space_single(
91
91
return ret
92
92
93
93
94
+ def _format_chatml (
95
+ system_message : str , messages : List [Tuple [str , Optional [str ]]], sep : str
96
+ ) -> str :
97
+ """Format the prompt with the chatml style."""
98
+ ret = "" if system_message == "" else system_message + sep + "\n "
99
+ for role , message in messages :
100
+ if message :
101
+ ret += role + "\n " + message + sep + "\n "
102
+ else :
103
+ ret += role + "\n "
104
+ return ret
105
+
106
+
94
107
@dataclasses .dataclass
95
108
class ChatFormatterResponse :
96
109
prompt : str
@@ -290,3 +303,20 @@ def format_open_orca(
290
303
_messages .append ((roles [1 ], None ))
291
304
_prompt = _format_add_colon_space_single (system_message , _messages , sep )
292
305
return ChatFormatterResponse (prompt = _prompt , stop = stop_str )
306
+
307
+
308
+ @register_chat_format ("chatml" )
309
+ def format_chatml (
310
+ messages : List [llama_types .ChatCompletionRequestMessage ],
311
+ ** kwargs : Any ,
312
+ ) -> ChatFormatterResponse :
313
+ system_template = """<|im_start|>system
314
+ {system_message}"""
315
+ system_message = _get_system_message (messages )
316
+ system_message = system_template .format (system_message = system_message )
317
+ _roles = dict (user = "<|im_start|>user" , assistant = "<|im_start|>assistant" )
318
+ _sep = "<|im_end|>"
319
+ _messages = _map_roles (messages , _roles )
320
+ _messages .append ((_roles ["assistant" ], None ))
321
+ _prompt = _format_chatml (system_message , _messages , _sep )
322
+ return ChatFormatterResponse (prompt = _prompt )
0 commit comments