mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-03 09:22:01 +00:00 
			
		
		
		
	* extract & return thoughts in reasoning_content field (unless --reasoning-format) for DeepSeek R1 & Command R7B * tool-calls: add deepseek r1 template (models/templates/llama-cpp-deepseek-r1.jinja) + hackommodate broken official template * tool-calls: accommodate variety of wrong tool call opening tags both R1 Qwen 32B and 7B distills like to spit out * server/oai: ensure content is null when there are tool calls, and reasoning_content appears before content for readability * tool-calls: add DeepSeek R1 Qwen distills to server/README.md & server tests Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
{%- if not add_generation_prompt is defined -%}
 | 
						||
    {%- set add_generation_prompt = false -%}
 | 
						||
{%- endif -%}
 | 
						||
{%- set ns = namespace(is_first=false, is_tool_outputs=false, is_output_first=true, system_prompt='') -%}
 | 
						||
{%- for message in messages -%}
 | 
						||
    {%- if message['role'] == 'system' -%}
 | 
						||
        {%- set ns.system_prompt = message['content'] -%}
 | 
						||
    {%- endif -%}
 | 
						||
{%- endfor -%}
 | 
						||
{{bos_token}}
 | 
						||
{%- if tools %}
 | 
						||
You can call any of the following function tools to satisfy the user's requests: {{tools | map(attribute='function') | tojson(indent=2)}}
 | 
						||
 | 
						||
Example function tool call syntax:
 | 
						||
 | 
						||
<|tool▁calls▁begin|><|tool▁call▁begin|>function<|tool▁sep|>example_function_name
 | 
						||
```json
 | 
						||
{
 | 
						||
  "arg1": "some_value"
 | 
						||
  ...
 | 
						||
}
 | 
						||
```
 | 
						||
<|tool▁call▁end|><|tool▁calls▁end|>
 | 
						||
 | 
						||
{% endif -%}
 | 
						||
{{ns.system_prompt}}
 | 
						||
{%- macro flush_tool_outputs() -%}
 | 
						||
    {%- if ns.is_tool_outputs -%}
 | 
						||
        {{- '<|tool▁outputs▁end|><|end▁of▁sentence|>' -}}
 | 
						||
        {%- set ns.is_tool_outputs = false -%}
 | 
						||
    {%- endif -%}
 | 
						||
{%- endmacro -%}
 | 
						||
{{- flush_tool_outputs() -}}
 | 
						||
{%- for message in messages -%}
 | 
						||
    {%- if message['role'] != 'tool' -%}
 | 
						||
        {{- flush_tool_outputs() -}}
 | 
						||
    {%- endif -%}
 | 
						||
    {%- if message['role'] == 'user' -%}
 | 
						||
        {{- '<|User|>' + message['content'] + '<|end▁of▁sentence|>' -}}
 | 
						||
    {%- endif -%}
 | 
						||
    {%- if message['role'] == 'assistant' and message['content'] is none -%}
 | 
						||
        {{- '<|Assistant|><|tool▁calls▁begin|>' -}}
 | 
						||
        {%- set ns.is_first = true -%}
 | 
						||
        {%- for tc in message['tool_calls'] -%}
 | 
						||
            {%- if ns.is_first -%}
 | 
						||
                {%- set ns.is_first = false -%}
 | 
						||
            {%- else -%}
 | 
						||
                {{- '\n' -}}
 | 
						||
            {%- endif -%}
 | 
						||
            {%- set tool_name = tc['function']['name'] -%}
 | 
						||
            {%- set tool_args = tc['function']['arguments'] -%}
 | 
						||
            {{- '<|tool▁call▁begin|>' + tc['type'] + '<|tool▁sep|>' + tool_name + '\n' + '```json' + '\n' + tool_args + '\n' + '```' + '<|tool▁call▁end|>' -}}
 | 
						||
        {%- endfor -%}
 | 
						||
        {{- '<|tool▁calls▁end|><|end▁of▁sentence|>' -}}
 | 
						||
    {%- endif -%}
 | 
						||
    {%- if message['role'] == 'assistant' and message['content'] is  not none -%}
 | 
						||
        {{- flush_tool_outputs() -}}
 | 
						||
        {%- set content = message['content'] -%}
 | 
						||
        {%- if '</think>' in content -%}
 | 
						||
            {%- set content = content.split('</think>')[-1] -%}
 | 
						||
        {%- endif -%}
 | 
						||
        {{- '<|Assistant|>' + content + '<|end▁of▁sentence|>' -}}
 | 
						||
    {%- endif -%}
 | 
						||
    {%- if message['role'] == 'tool' -%}
 | 
						||
        {%- set ns.is_tool_outputs = true -%}
 | 
						||
        {%- if ns.is_output_first -%}
 | 
						||
            {{- '<|tool▁outputs▁begin|>' -}}
 | 
						||
            {%- set ns.is_output_first = false -%}
 | 
						||
        {%- endif -%}
 | 
						||
        {{- '\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>' -}}
 | 
						||
    {%- endif -%}
 | 
						||
{%- endfor -%}
 | 
						||
{{- flush_tool_outputs() -}}
 | 
						||
{%- if add_generation_prompt and not ns.is_tool_outputs -%}
 | 
						||
    {{- '<|Assistant|><think>\n' -}}
 | 
						||
{%- endif -%} |