| {{ bos_token }} | |
| {%- if messages and messages[0]['role'] == 'system' -%} | |
| {%- set first_user_prefix = messages[0]['content'] ~ '\n\n' -%} | |
| {%- set loop_messages = messages[1:] -%} | |
| {%- else -%} | |
| {%- set first_user_prefix = '' -%} | |
| {%- set loop_messages = messages -%} | |
| {%- endif -%} | |
| {%- for message in loop_messages -%} | |
| {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%} | |
| {{ '<start_of_turn>' ~ role ~ '\n' ~ (first_user_prefix if loop.first else '') }} | |
| {%- 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 }} | |
| {%- elif item['type'] == 'tool_call' -%} | |
| ```tool_code | |
| {{ item['code'] | trim }} | |
| ``` | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- else -%} | |
| {{ raise_exception('Invalid content type') }} | |
| {%- endif -%} | |
| {{ '<end_of_turn>\n' }} | |
| {%- endfor -%} | |
| {%- if add_generation_prompt and (loop_messages | length == 0 or loop_messages[-1]['role'] == 'user') -%} | |
| {{ '<start_of_turn>model\n' }} | |
| {%- endif -%} |