{#- Iteration on laguna_glm_thinking_v8/chat_template.jinja -#} {#- No formatting instructions -#} {{- "〈|EOS|〉" -}} {%- set enable_thinking = enable_thinking | default(true) -%} {%- set add_generation_prompt = add_generation_prompt | default(false) -%} {%- set preserve_thinking = preserve_thinking | default(false) -%} {#- ───── header (system message) ───── -#} {#- A caller-supplied system message with empty content opts out of the default below, producing no block — used to train without a system message. -#} {%- set system_message = "You are a helpful, conversationally-fluent assistant made by Poolside. You are here to be helpful to users through natural language conversations." -%} {%- if messages and messages[0].role == "system" -%} {%- set system_message = messages[0].content -%} {%- set messages = messages[1:] -%} {%- endif -%} {%- set has_sys = system_message and system_message.strip() -%} {%- if has_sys or tools or enable_thinking -%} {{- "" -}} {%- if has_sys -%} {{- system_message.rstrip() -}} {%- if tools -%}{{- "\n\n" -}}{%- endif -%} {%- endif -%} {%- if tools -%} {{- "### Tools\n\n" -}} {{- "You may call functions to assist with the user query.\n" -}} {{- "All available function signatures are listed below:\n" -}} {{- "\n" -}} {%- for tool in tools -%} {{- (tool | tojson) ~ "\n" -}} {%- endfor -%} {{- "" -}} {%- endif -%} {{- "\n" -}} {%- endif -%} {#- ───── main loop ───── -#} {%- for message in messages -%} {%- set content = message.content if message.content is string else "" -%} {%- if message.role == "user" -%} {{- "" + content + "\n" -}} {%- elif message.role == "assistant" -%} {%- generation -%} {{- "" -}} {#- Extract reasoning content from message.reasoning (vLLM field name) or message.reasoning_content -#} {%- set reasoning_content = '' -%} {%- if message.reasoning is string -%} {%- set reasoning_content = message.reasoning -%} {%- elif message.reasoning_content is string -%} {%- set reasoning_content = message.reasoning_content -%} {%- endif -%} {#- Display reasoning content for all messages if enable_thinking -#} {%- if enable_thinking or preserve_thinking -%} {{- '' + reasoning_content + '' -}} {%- else -%} {{- '' -}} {%- endif -%} {#- Display main content (trailing newline only when no tool_calls follow) -#} {%- if content -%} {{- content -}} {%- endif -%} {%- if message.tool_calls -%} {%- for tool_call in message.tool_calls -%} {%- set function_data = tool_call.function -%} {{- '' + function_data.name -}} {%- set _args = function_data.arguments -%} {%- for k, v in _args.items() -%} {{- "" ~ k ~ "" -}} {{- "" -}}{{- v | tojson(ensure_ascii=False) if v is not string else v -}}{{- "" -}} {%- endfor -%} {{- "" -}} {%- endfor -%} {%- endif -%} {{- "\n" -}} {%- endgeneration -%} {%- elif message.role == "tool" -%} {{- "" + content + "\n" -}} {%- elif message.role == "system" -%} {#- Render additional system messages (the first one, if any, is handled separately in the header and was sliced off above) -#} {{- "" + content + "\n" -}} {%- endif -%} {%- endfor -%} {#- ───── generation prompt ───── -#} {%- if add_generation_prompt -%} {{- "" -}} {#- ───── Include reasoning mode directive ───── -#} {%- if enable_thinking -%} {{- '' -}} {%- else -%} {{- '' -}} {%- endif -%} {%- endif -%}