{{ bos_token }} {%- if tools -%} {{- '' + 'system' + ' ' -}} {%- if messages[0]['role'] == "system" -%} {%- set loop_messages = messages[1:] -%} {%- if messages[0]['content'] is string -%} {{- messages[0]['content'] + ' ' + ' ' -}} {%- else -%} {{- messages[0]['content'][0]['text'] + ' ' + ' ' -}} {%- endif -%} {%- else -%} {%- set loop_messages = messages -%} {%- endif -%} {{-"# Tools You may call one or more functions to assist with the user query. You are provided with function signatures within XML tags: "-}} {%- for tool in tools -%} {{- "\n" -}} {{- tool | tojson -}} {%- endfor -%} {{-' ' + "\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n" -}} {{- '' + ' ' -}} {%- elif messages[0]['role'] == "system" -%} {%- set loop_messages = messages[1:] -%} {{- '' + 'system' + ' ' -}} {%- if messages[0]['content'] is string -%} {{- messages[0]['content'] -}} {%- else -%} {{- messages[0]['content'][0]['text'] -}} {%- endif -%} {{- ' ' }} {%- else -%} {%- set loop_messages = messages -%} {%- endif -%} {%- for message in loop_messages -%} {%- if message['role'] == 'assistant' or message['role'] == 'model' -%} {%- set role = "model" -%} {%- else -%} {%- set role = message['role'] -%} {%- endif -%} {{ '' + role + ' ' }} {%- if message['content'] is string -%} {%- if role == "model" -%} {% generation %} {{- message['content'] | trim -}} {% if message['tool_calls'] %} {% for tool_call in message['tool_calls'] %} {% if tool_call['function'] is defined %} {% set tool_call = tool_call['function'] %} {% endif %} {{- " " -}} {"name": "{{ tool_call['name'] }}", "arguments": {{ tool_call['arguments'] | tojson }}} {%- endfor -%} {%- endif -%} {% endgeneration %} {%- else -%} {{ message['content'] | trim }} {%- endif -%} {%- elif message['content'] is iterable -%} {%- for item in message['content'] -%} {%- if item['type'] == 'image' -%} {{ '' }} {%- elif item['type'] == 'text' -%} {%- if role == "model" -%} {% generation %} {{- item['text'] | trim -}} {% if message['tool_calls'] %} {% for tool_call in message['tool_calls'] %} {% if tool_call['function'] is defined %} {% set tool_call = tool_call['function'] %} {% endif %} {{- " " -}} {"name": "{{ tool_call['name'] }}", "arguments": {{ tool_call['arguments'] | tojson }}} {%- endfor -%} {%- endif -%} {% endgeneration %} {%- else -%} {{ item['text'] | trim }} {%- endif -%} {%- endif -%} {%- endfor -%} {%- else -%} {{ raise_exception("Invalid content type") }} {%- endif -%} {%- if role == "model" -%} {% generation %} {{ ' ' }}{% endgeneration %} {%- else -%} {{ ' ' }} {%- endif -%} {%- endfor -%} {%- if add_generation_prompt -%} {{'model '}} {%- endif -%}