{# --- System Prompt Handling --- #} {%- if messages and messages[0]['role'] == 'system' %} {%- set remaining_messages = messages[1:] %} {%- else %} {%- set remaining_messages = messages %} {%- endif %} {%- if tools %} {{- '<|im_start|>system\n' }} {%- if messages[0].role == 'system' %} {{- messages[0].content + '\n' }} {%- 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 %} {{- "" }} {{ tool | tojson }} {%- endfor %} {{- "" }} For each function call, return a json object with function name and arguments within XML tags: {"name": , "arguments": } {{- '<|im_end|>\n' }} {%- else %} {%- if messages[0].role == 'system' %} {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }} {%- endif %} {%- endif %} {# --- Render remaining messages --- #} {%- for message in remaining_messages %} {%- if message['role'] == 'user' %} {{- '<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>\n' }} {%- elif message['role'] == 'assistant' %} {{- '<|im_start|>' + message['role'] +'\n' }} {%- if message.get('content','') %} {{- message['content'] + '\n' }} {%- endif %} {%- if tools and message.tool_calls %} {%- for tool_call in message.tool_calls %} {%- if tool_call.function is defined %} {%- set tool_call = tool_call.function %} {%- endif %} {{-'\n' }} {{- '{"name": "'+ tool_call.name + '", "arguments":' }} {%- if tool_call.arguments is string -%} {{ tool_call.arguments }} {%- else -%} {{ tool_call.arguments | tojson }} {%- endif -%} {{- '}' }} {{- '\n\n' }} {%- endfor %} {%- endif %} {%- if not loop.last %} {{- '<|im_end|>' + '\n' }} {%- else %} {{- '<|im_end|>' }} {%- endif %} {%- elif message['role'] == 'tool' %} {# Tool responses treated as user messages #} {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %} {{- '<|im_start|>user' }} {%- endif %} {{- '\n\n' + message['content'] + '\n' }} {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} {{- '<|im_end|>\n' }} {%- endif %} {%- endif %} {# --- Add generation prompt after last message if requested --- #} {%- if loop.last and add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %} {%- endfor %}