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