| {%- 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\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'][0]['text'] + eos_token}} | |
| {%- else %} | |
| {{- raise_exception('Only user and assistant roles are supported, with the exception of an initial optional system message!') }} | |
| {%- endif %} | |
| {%- endfor %} |