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