{{bos_token}} {%- if tools %} {%- set tool_message = 'List of tools: <|tool_list_start|>' + tools|selectattr('type','eq','function')|map(attribute='function')|list|tojson + '<|tool_list_end|>' %} {%- endif %} {%- if messages[0]['role'] == 'system' %} {%- set system_message = messages[0]['content'] + ('\n' + tool_message if tool_message else '') %} {%- set loop_messages = messages[1:] %} {%- else %} {%- set system_message = tool_message if tool_message else none %} {%- set loop_messages = messages %} {%- endif %} {{- '<|im_start|>system\n' + system_message + '<|im_end|>\n' if system_message }} {%- for message in loop_messages %} {%- set message_content = message['content'] if message['content'] else '' %} {{- '<|im_start|>' + message['role'] + '\n' }} {%- if message['role'] == 'assistant' and message['tool_calls'] %} {{- '<|tool_call_start|>[' }} {%- for tool_call_function in message['tool_calls']|selectattr('type','eq','function')|map(attribute='function')|list %} {{- tool_call_function['name'] + '(' }} {%- for k, v in tool_call_function['arguments'].items() %} {{- k + '=' + v|tojson }} {%- if not loop.last %} {{- ', ' }} {%- endif %} {%- endfor %} {%- if not loop.last %} {{- '), ' }} {%- else %} {{- ')' }} {%- endif %} {%- endfor %} {{- ']<|tool_call_end|>' }} {%- endif %} {{- message_content + '<|im_end|>\n' }} {%- endfor %} {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}