Fix issues with system_message rendering
Browse filesWhen trying to pass a system_message in chat history, the template rendering fails with 'TypeError: can only concatenate str (not "list") to str'.
The underlying issue being the format of passed messages with "type" and "content" inside the contents of the message.
This case is handled correctly in user/assistant messages, inside the main loop, so I've adapted the template code from that part, assuming the system_message can be just a single text message.
- chat_template.json +1 -1
chat_template.json
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
{
|
2 |
-
"chat_template": "{%- if messages[0][\"role\"] == \"system\" %}\n {%- set system_message = messages[0][\"content\"] %}\n {%- set loop_messages = messages[1:] %}\n{%- else %}\n {%- set loop_messages = messages %}\n{%- endif %}\n\n{{- bos_token }}\n{%- for message in loop_messages %}\n {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}\n {{- raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant
|
3 |
}
|
|
|
1 |
{
|
2 |
+
"chat_template": "{%- if messages[0][\"role\"] == \"system\" %}\n {%- if messages[0][\"content\"] is not string %}\n {%- if messages[0][\"content\"]|length != 1 %}\n {{- raise_exception(\"Multiple messages in system prompt are not supported!\") }}\n {%- endif %}\n {%- if messages[0][\"content\"][0][\"type\"] == \"text\" %}\n {%- set system_message = messages[0][\"content\"][0][\"content\"] %}\n {%- else %}\n {{- raise_exception(\"Unrecognized content type for system message!\") }}\n {%- endif %}\n {%- else %}\n {%- set system_message = messages[0][\"content\"] %}\n {%- endif %}\n {%- set loop_messages = messages[1:] %}\n {%- else %}\n {%- set loop_messages = messages %}\n{%- endif %}\n\n{{- bos_token }}\n{%- for message in loop_messages %}\n {%- if (message[\'role\'] == \'user\') != (loop.index0 % 2 == 0) %}\n {{- raise_exception(\'After the optional system message, conversation roles must alternate user/assistant/user/assistant/...\') }}\n {%- endif %}\n {%- if message[\"role\"] == \"user\" %}\n {%- if loop.last and system_message is defined %}\n {{- \"[INST]\" + system_message + \"\n\n \" }}\n {%- else %}\n {{- \"[INST]\" }}\n {%- endif %}\n {%- if message[\"content\"] is not string %}\n {%- for chunk in message[\"content\"] %}\n {%- if chunk[\"type\"] == \"text\" %}\n {{- chunk[\"content\"] }}\n {%- elif chunk[\"type\"] == \"image\" %}\n {{- \"[IMG]\" }}\n {%- else %}\n {{- raise_exception(\"Unrecognized content type!\") }}\n {%- endif %}\n {%- endfor %}\n {%- else %}\n {{- message[\"content\"] }}\n {%- endif %}\n {{- \"[/INST]\" }}\n {%- elif message[\"role\"] == \"assistant\" %}\n {{- message[\"content\"] + eos_token}}\n {%- else %}\n {{- raise_exception(\"Only user and assistant roles are supported, with the exception of an initial optional system message!\") }}\n {%- endif %}\n{%- endfor %}"
|
3 |
}
|