| {{ 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 -%} |
| |