| {{ bos_token }} | |
| {%- set loop_messages = messages -%} | |
| {%- for message in loop_messages -%} | |
| {%- if message['role'] == 'system' -%} | |
| {%- set role = 'user' -%} | |
| {%- elif message['role'] == 'assistant' -%} | |
| {%- set role = 'model' -%} | |
| {%- else -%} | |
| {%- set role = message['role'] -%} | |
| {%- endif -%} | |
| {%- if (role == 'user') != (loop.index0 % 2 == 0) -%} | |
| {{ raise_exception("Conversation roles must alternate user/assistant/user/assistant/...") }} | |
| {%- endif -%} | |
| {{ '<start_of_turn>' + role + '\n' }} | |
| {%- if message['content'] is string -%} | |
| {{ message['content'] | trim }} | |
| {%- elif message['content'] is iterable -%} | |
| {%- for item in message['content'] -%} | |
| {%- if item['type'] == 'image' -%} | |
| {{ '<start_of_image>' }} | |
| {%- elif item['type'] == 'text' -%} | |
| {{ item['text'] | trim }} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- else -%} | |
| {{ raise_exception("Invalid content type") }} | |
| {%- endif -%} | |
| {{ '<end_of_turn>\n' }} | |
| {%- endfor -%} | |
| {%- if add_generation_prompt -%} | |
| {{'<start_of_turn>model\n'}} | |
| {%- endif -%} | |