{%- if messages[0]["role"] == "system" %} {%- set system_message = messages[0]["content"] %} {%- set loop_messages = messages[1:] %} {%- else %} {%- set loop_messages = messages %} {%- endif %} {{- bos_token }} {%- for message in loop_messages %} {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) %} {{- raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant/...') }} {%- endif %} {%- if message["role"] == "user" %} {%- if loop.last and system_message is defined %} {{- "[INST]" + system_message + "\n" }} {%- else %} {{- "[INST]" }} {%- endif %} {%- if message["content"] is not string %} {%- for chunk in message["content"] %} {%- if chunk["type"] == "text" %} {{- chunk["text"] }} {%- elif chunk["type"] == "image" %} {{- "[IMG]" }} {%- else %} {{- raise_exception("Unrecognized content type!") }} {%- endif %} {%- endfor %} {%- else %} {{- message["content"] }} {%- endif %} {{- "[/INST]" }} {%- elif message["role"] == "assistant" %} {{- message["content"] + eos_token}} {%- else %} {{- raise_exception("Only user and assistant roles are supported, with the exception of an initial optional system message!") }} {%- endif %} {%- endfor %}