{{- bos_token }} {#- This block extracts the system message, so we can slot it into the right place. #} {%- if messages[0]['role'] == 'system' %} {%- if messages[0]['content'] is string %} {%- set system_message = messages[0]['content']|trim %} {%- elif messages[0]['content'] is iterable and messages[0]['content'][0]['type'] == 'text' %} {%- set system_message = messages[0]['content'][0]['text']|trim %} {%- else %} {{- raise_exception("System message content must be a string or contain text type!") }} {%- endif %} {%- set messages = messages[1:] %} {%- else %} {{- raise_exception("A system message is required but not provided!") }} {%- endif %} {#- System message #} {{- "<|start_header_id|>system<|end_header_id|>\n\n" }} {{- system_message }} {#- Check for scene message and handle it specially #} {%- if messages and messages[0]['role'] == 'scene' %} {{- "\n\n<|scene_desc_start|>\n" }} {%- if messages[0]['content'] is string %} {{- messages[0]['content'] | trim }} {%- elif messages[0]['content'] is iterable %} {%- for content_item in messages[0]['content'] %} {%- if content_item['type'] == 'text' %} {%- set text_content = content_item['text'] | trim %} {{- text_content }} {%- if loop.first and not loop.last %} {{- "\n\n" }} {%- endif %} {%- if not loop.first and not loop.last and messages[0]['content'][loop.index]['type'] != 'audio' %} {{- "\n" }} {%- endif %} {%- elif content_item['type'] == 'audio' %} {{- ' <|audio_out_bos|><|AUDIO_OUT|><|audio_eos|>' }} {%- if not loop.last %} {{- "\n" }} {%- endif %} {%- endif %} {%- endfor %} {%- endif %} {{- "\n<|scene_desc_end|>" }} {%- set messages = messages[1:] %} {%- endif %} {{- "<|eot_id|>" }} {#- Loop through all messages #} {%- for message in messages %} {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n' }} {%- if message['role'] == 'assistant' %} {%- if message['content'] is not iterable or message['content'][0]['type'] != 'audio' %} {{- raise_exception("Assistant messages must contain audio content only!") }} {%- endif %} {{- '<|audio_out_bos|><|AUDIO_OUT|><|audio_eos|>' }} {%- else %} {%- if message['content'] is string %} {{- message['content'] | trim }} {%- elif message['content'] is iterable %} {%- for content_item in message['content'] %} {%- if content_item['type'] == 'text' %} {{- content_item['text'] | trim }} {%- endif %} {%- endfor %} {%- endif %} {%- endif %} {{- '<|eot_id|>' }} {%- endfor %} {%- if add_generation_prompt %} {{- '<|start_header_id|>assistant<|end_header_id|>\n\n<|audio_out_bos|>' }} {%- endif %}