@@ -172,6 +172,20 @@ def _format_chatml(
172
172
ret += role + "\n "
173
173
return ret
174
174
175
+ def _format_chatglm3 (
176
+ system_message : str , messages : List [Tuple [str , Optional [str ]]], sep : str
177
+ ) -> str :
178
+ """Format the prompt with the chatglm3 style."""
179
+ ret = ""
180
+ if system_message :
181
+ ret += system_message
182
+ for role , message in messages :
183
+ if message :
184
+ ret += role + "\n " + " " + message
185
+ else :
186
+ ret += role
187
+ return ret
188
+
175
189
176
190
@dataclasses .dataclass
177
191
class ChatFormatterResponse :
@@ -685,6 +699,22 @@ def format_chatml(
685
699
_prompt = _format_chatml (system_message , _messages , _sep )
686
700
return ChatFormatterResponse (prompt = _prompt , stop = _sep )
687
701
702
+ @register_chat_format ("chatglm3" )
703
+ def format_chatglm3 (
704
+ messages : List [llama_types .ChatCompletionRequestMessage ],
705
+ ** kwargs : Any ,
706
+ ) -> ChatFormatterResponse :
707
+ system_template = """<|system|>
708
+ {system_message}"""
709
+ system_message = _get_system_message (messages )
710
+ system_message = system_template .format (system_message = system_message )
711
+ _roles = dict (user = "<|user|>" , assistant = "<|assistant|>" )
712
+ _sep = "</s>"
713
+ _messages = _map_roles (messages , _roles )
714
+ _messages .append ((_roles ["assistant" ], None ))
715
+ _prompt = _format_chatglm3 (system_message , _messages , _sep )
716
+ return ChatFormatterResponse (prompt = _prompt , stop = _sep )
717
+
688
718
689
719
@register_chat_format ("openchat" )
690
720
def format_openchat (
0 commit comments