File size: 3,660 Bytes
8f3a46d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{%- if not add_generation_prompt is defined -%}
	{%- set add_generation_prompt = false -%}
{%- endif -%}
{%- if not thinking is defined -%}
	{%- set thinking = false -%}
{%- endif -%}
{%- set ns = namespace(is_first=false, is_tool=false, system_prompt="", is_first_sp=true, is_last_user=false, is_only_sys=false, is_prefix=false) -%}
{%- for message in messages -%}
	{%- if message["role"] == "system" -%}
		{%- if ns.is_first_sp -%}
			{%- set ns.system_prompt = ns.system_prompt + message["content"] -%}
			{%- set ns.is_first_sp = false -%}
		{%- else -%}
			{%- set ns.system_prompt = ns.system_prompt + "\n\n" + message["content"] -%}
		{%- endif -%}
		{%- set ns.is_only_sys = true -%}
	{%- endif -%}
{%- endfor -%}
{{- bos_token -}}
{{- ns.system_prompt -}}
{%- for message in messages -%}
	{%- if message["role"] == "user" -%}
		{%- set ns.is_tool = false -%}
		{%- set ns.is_first = false -%}
		{%- set ns.is_last_user = true -%}
		{{- "<|User|>" + message["content"] -}}
	{%- endif -%}
	{%- if message["role"] == "assistant" and message["tool_calls"] is defined and message["tool_calls"] is not none -%}
		{%- if ns.is_last_user or ns.is_only_sys -%}
			{{- "<|Assistant|></think>" -}}
		{%- endif -%}
		{%- set ns.is_last_user = false -%}
		{%- set ns.is_first = false -%}
		{%- set ns.is_tool = false -%}
		{%- for tool in message["tool_calls"] -%}
			{%- if not ns.is_first -%}
				{%- if message["content"] is none -%}
					{{- "<|tool▁calls▁begin|><|tool▁call▁begin|>" + tool["function"]["name"] + "<|tool▁sep|>" + tool["function"]["arguments"] + "<|tool▁call▁end|>" -}}
				{%- else -%}
					{{- message["content"] + "<|tool▁calls▁begin|><|tool▁call▁begin|>" + tool["function"]["name"] + "<|tool▁sep|>" + tool["function"]["arguments"] + "<|tool▁call▁end|>" -}}
				{%- endif -%}
				{%- set ns.is_first = true -%}
			{%- else -%}
				{{- "<|tool▁call▁begin|>" + tool["function"]["name"] + "<|tool▁sep|>" + tool["function"]["arguments"] + "<|tool▁call▁end|>" -}}
			{%- endif -%}
		{%- endfor -%}
		{{- "<|tool▁calls▁end|><|end▁of▁sentence|>" -}}
	{%- endif -%}
	{%- if message["role"] == "assistant" and (message["tool_calls"] is not defined or message["tool_calls"] is none) -%}
		{%- if ns.is_last_user -%}
			{{- "<|Assistant|>" -}}
			{%- if message["prefix"] is defined and message["prefix"] and thinking -%}
				{{- "<think>" -}}
			{%- else -%}
				{{- "</think>" -}}
			{%- endif -%}
		{%- endif -%}
		{%- if message["prefix"] is defined and message["prefix"] -%}
			{%- set ns.is_prefix = true -%}
		{%- endif -%}
		{%- set ns.is_last_user = false -%}
		{%- if ns.is_tool -%}
			{{- message["content"] + "<|end▁of▁sentence|>" -}}
			{%- set ns.is_tool = false -%}
		{%- else -%}
			{%- set content = message["content"] -%}
			{%- if "</think>" in content -%}
				{%- set content = content.split("</think>", 1)[1] -%}
			{%- endif -%}
			{{- content + "<|end▁of▁sentence|>" -}}
		{%- endif -%}
	{%- endif -%}
	{%- if message["role"] == "tool" -%}
		{%- set ns.is_last_user = false -%}
		{%- set ns.is_tool = true -%}
		{{- "<|tool▁output▁begin|>" + message["content"] + "<|tool▁output▁end|>" -}}
	{%- endif -%}
	{%- if message["role"] != "system" -%}
		{%- set ns.is_only_sys = false -%}
	{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt and not ns.is_tool -%}
	{%- if ns.is_last_user or ns.is_only_sys or not ns.is_prefix -%}
		{{- "<|Assistant|>" -}}
		{%- if not thinking -%}
			{{- "</think>" -}}
		{%- else -%}
			{{- "<think>" -}}
		{%- endif -%}
	{%- endif -%}
{%- endif -%}