{% if messages[0]['role'] == 'system' %}
{% set loop_messages = messages[1:] %}
{% set system_message = messages[0]['content'] %}
{% else %}
{% set loop_messages = messages %}
{% set system_message = false %}
{% endif %}
{% if system_message != false and (loop_messages|length == 0 or loop_messages|length == 1 and loop_messages[0]['role'] != 'user') %}
{{ raise_exception('The system prompt must be passed along with a user prompt.') }}
{% endif %}
{% for message in loop_messages %}
{% if loop_messages|length > 1 and (message['role'] == 'user') != (loop.index0 % 2 == 0) %}
{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}
{% endif %}
{% if loop.index0 == 0 and system_message != false %}
{% set content = '<>\n' + system_message + '\n<>\n\n' + message['content'] %}
{% else %}
{% set content = message['content'] %}
{% endif %}
{% if message['role'] == 'user' %}
{{- bos_token + '[INST] ' + content.strip() + ' [/INST]' -}}
{% elif message['role'] == 'system' %}
{{- '<>\n' + content.strip() + '\n<>\n\n' -}}
{% elif message['role'] == 'assistant' %}
{{- ' ' + content.strip() + ' ' + eos_token -}}
{% endif %}
{% endfor %}