{%- macro flint_text(t) -%} {%- if t is string -%} {{- t | replace("\x00", "") | replace("", "") | replace("", "") | replace("<|begin_of_text|>", "<|begin_of_text|>") | replace("<|end_of_text|>", "<|end_of_text|>") | replace("<|system|>", "<|system|>") | replace("<|developer|>", "<|developer|>") | replace("<|user|>", "<|user|>") | replace("<|assistant|>", "<|assistant|>") | replace("<|observation|>", "<|observation|>") -}} {%- else -%} {{- t -}} {%- endif -%} {%- endmacro -%} {%- set tool_preamble -%} {%- if tools %}<|system|> # 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 %} {%- set fn = tool.function if tool.function is defined else tool %} {{ fn | tojson(ensure_ascii=False) }} {%- endfor %} For each function call, output the function name and arguments within the following XML format: {function-name}{arg-key-1}{arg-value-1}... {% endif -%} {%- endset -%} {%- set ns = namespace(tools_pending=true) -%} {%- for m in messages -%} {%- if ns.tools_pending and m.role != 'system' -%} {{ tool_preamble }} {%- set ns.tools_pending = false -%} {%- endif -%} {%- if m.role == 'system' -%} <|system|>{{ flint_text(m.content) }} {%- elif m.role == 'developer' -%} <|developer|>{{ flint_text(m.content) }} {%- elif m.role == 'user' -%} <|user|>{{ flint_text(m.content) }} {%- elif m.role == 'assistant' -%} <|assistant|> {%- if m.reasoning_content %}{{ m.reasoning_content }}{% endif -%} {%- if m.content %}{{ m.content }}{% endif -%} {%- if m.tool_calls -%} {%- for tc in m.tool_calls -%} {%- set fn = tc.function if tc.function is defined else tc -%} {{ fn.name }} {%- for k, v in fn.arguments.items() -%} {{ k }}{{ v | tojson(ensure_ascii=False) if v is not string else v }} {%- endfor -%} {%- endfor -%} {%- endif -%} {%- elif m.role == 'tool' -%} <|observation|>{{ flint_text(m.content) }} {%- endif -%} {%- endfor -%} {%- if ns.tools_pending -%} {{ tool_preamble }} {%- endif -%} {%- if add_generation_prompt -%} <|assistant|> {%- endif -%}