YongganFu commited on
Commit
0a9534a
·
verified ·
1 Parent(s): 0820ac4

Update chat_template.jinja

Browse files
Files changed (1) hide show
  1. chat_template.jinja +75 -85
chat_template.jinja CHANGED
@@ -1,99 +1,89 @@
1
- {#- Default system message if no system prompt is passed. #}
2
- {%- set default_system_message = '' %}
3
- {#- Begin of sequence token. #}
4
- {{- bos_token }}
5
- {#- Handle system prompt if it exists. #}
6
- {#- System prompt supports text content or text chunks. #}
7
- {%- if messages[0]['role'] == 'system' %}
8
- {{- '[SYSTEM_PROMPT]' -}}
9
- {%- if messages[0]['content'] is string %}
10
- {{- messages[0]['content'] -}}
11
- {%- else %}
12
- {%- for block in messages[0]['content'] %}
13
- {%- if block['type'] == 'text' %}
14
- {{- block['text'] }}
15
- {%- else %}
16
- {{- raise_exception('Only text chunks are supported in system message contents.') }}
17
- {%- endif %}
18
- {%- endfor %}
19
  {%- endif %}
20
- {{- '[/SYSTEM_PROMPT]' -}}
21
- {%- set loop_messages = messages[1:] %}
 
 
 
 
22
  {%- else %}
23
- {%- set loop_messages = messages %}
24
- {%- if default_system_message != '' %}
25
- {{- '[SYSTEM_PROMPT]' + default_system_message + '[/SYSTEM_PROMPT]' }}
26
  {%- endif %}
27
  {%- endif %}
28
- {#- Tools definition #}
29
- {%- set tools_definition = '' %}
30
- {%- set has_tools = false %}
31
- {%- if tools is defined and tools is not none and tools|length > 0 %}
32
- {%- set has_tools = true %}
33
- {%- set tools_definition = '[AVAILABLE_TOOLS]' + (tools| tojson) + '[/AVAILABLE_TOOLS]' %}
34
- {{- tools_definition }}
35
- {%- endif %}
36
- {#- Handle conversation messages. #}
37
- {%- for message in loop_messages %}
38
- {#- User messages supports text content or text and image chunks. #}
39
- {%- if message['role'] == 'user' %}
40
- {%- if message['content'] is string %}
41
- {{- '[INST]' + message['content'] + '[/INST]' }}
42
- {%- elif message['content'] | length > 0 %}
43
- {{- '[INST]' }}
44
- {%- if message['content'] | length == 2 %}
45
- {%- set blocks = message['content'] | sort(attribute='type') %}
 
 
 
 
 
 
 
 
 
 
 
46
  {%- else %}
47
- {%- set blocks = message['content'] %}
48
  {%- endif %}
49
- {%- for block in blocks %}
50
- {%- if block['type'] == 'text' %}
51
- {{- block['text'] }}
52
- {%- elif block['type'] in ['image', 'image_url'] %}
53
- {{- '[IMG]' }}
54
- {%- else %}
55
- {{- raise_exception('Only text, image and image_url chunks are supported in user message content.') }}
56
- {%- endif %}
57
- {%- endfor %}
58
- {{- '[/INST]' }}
59
  {%- else %}
60
- {{- raise_exception('User message must have a string or a list of chunks in content') }}
61
- {%- endif %}
62
- {#- Assistant messages supports text content or text and image chunks. #}
63
- {%- elif message['role'] == 'assistant' %}
64
- {%- if (message['content'] is none or message['content'] == '' or message['content']|length == 0) and (message['tool_calls'] is not defined or message['tool_calls'] is none or message['tool_calls']|length == 0) %}
65
- {{- raise_exception('Assistant message must have a string or a list of chunks in content or a list of tool calls.') }}
66
  {%- endif %}
67
- {%- if message['content'] is string %}
68
- {{- message['content'] }}
69
- {%- elif message['content'] | length > 0 %}
70
- {%- for block in message['content'] %}
71
- {%- if block['type'] == 'text' %}
72
- {{- block['text'] }}
 
 
 
 
 
 
 
73
  {%- else %}
74
- {{- raise_exception('Only text chunks are supported in assistant message contents.') }}
75
  {%- endif %}
 
76
  {%- endfor %}
77
  {%- endif %}
78
-
79
- {%- if message['tool_calls'] is defined and message['tool_calls'] is not none and message['tool_calls']|length > 0 %}
80
- {%- for tool in message['tool_calls'] %}
81
- {%- set arguments = tool['function']['arguments'] %}
82
- {%- if arguments is not string %}
83
- {%- set arguments = arguments|tojson|safe %}
84
- {%- elif arguments == '' %}
85
- {%- set arguments = '{}' %}
86
- {%- endif %}
87
- {{- '[TOOL_CALLS]' + tool['function']['name'] + '[ARGS]' + arguments }}
88
- {%- endfor %}
89
  {%- endif %}
90
- {#- End of sequence token for each assistant messages. #}
91
- {{- eos_token }}
92
- {#- Tool messages only supports text content. #}
93
- {%- elif message['role'] == 'tool' %}
94
- {{- '[TOOL_RESULTS]' + message['content']|string + '[/TOOL_RESULTS]' }}
95
- {#- Raise exception for unsupported roles. #}
96
- {%- else %}
97
- {{- raise_exception('Only user, assistant and tool roles are supported, got ' + message['role'] + '.') }}
98
  {%- endif %}
99
- {%- endfor %}
 
 
 
 
 
 
 
1
+ {%- if tools %}
2
+ {{- '<s>system\n' }}
3
+ {%- if messages[0].role == 'system' %}
4
+ {{- messages[0].content + '\n\n' }}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  {%- endif %}
6
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within [AVAILABLE_TOOLS][/AVAILABLE_TOOLS] XML tags:\n[AVAILABLE_TOOLS]" }}
7
+ {%- for tool in tools %}
8
+ {{- "\n" }}
9
+ {{- tool | tojson }}
10
+ {%- endfor %}
11
+ {{- "\n[/AVAILABLE_TOOLS]\n\nFor each function call, return a json object with function name and arguments within [TOOL_CALLS][SPECIAL_10] XML tags:\n[TOOL_CALLS]\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n[SPECIAL_10]</s>\n" }}
12
  {%- else %}
13
+ {%- if messages[0].role == 'system' %}
14
+ {{- '<s>system\n' + messages[0].content + '</s>\n' }}
 
15
  {%- endif %}
16
  {%- endif %}
17
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
18
+ {%- for message in messages[::-1] %}
19
+ {%- set index = (messages|length - 1) - loop.index0 %}
20
+ {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('[TOOL_RESULTS]') and message.content.endswith('[/TOOL_RESULTS]')) %}
21
+ {%- set ns.multi_step_tool = false %}
22
+ {%- set ns.last_query_index = index %}
23
+ {%- endif %}
24
+ {%- endfor %}
25
+ {%- for message in messages %}
26
+ {%- if message.content is string %}
27
+ {%- set content = message.content %}
28
+ {%- else %}
29
+ {%- set content = '' %}
30
+ {%- endif %}
31
+ {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
32
+ {{- '<s>' + message.role + '\n' + content + '</s>' + '\n' }}
33
+ {%- elif message.role == "assistant" %}
34
+ {%- set reasoning_content = '' %}
35
+ {%- if message.reasoning_content is string %}
36
+ {%- set reasoning_content = message.reasoning_content %}
37
+ {%- else %}
38
+ {%- if '<SPECIAL_12>' in content %}
39
+ {%- set reasoning_content = content.split('<SPECIAL_12>')[0].rstrip('\n').split('<SPECIAL_11>')[-1].lstrip('\n') %}
40
+ {%- set content = content.split('<SPECIAL_12>')[-1].lstrip('\n') %}
41
+ {%- endif %}
42
+ {%- endif %}
43
+ {%- if loop.index0 > ns.last_query_index %}
44
+ {%- if loop.last or (not loop.last and reasoning_content) %}
45
+ {{- '<s>' + message.role + '\n<SPECIAL_11>\n' + reasoning_content.strip('\n') + '\n<SPECIAL_12>\n\n' + content.lstrip('\n') }}
46
  {%- else %}
47
+ {{- '<s>' + message.role + '\n' + content }}
48
  {%- endif %}
 
 
 
 
 
 
 
 
 
 
49
  {%- else %}
50
+ {{- '<s>' + message.role + '\n' + content }}
 
 
 
 
 
51
  {%- endif %}
52
+ {%- if message.tool_calls %}
53
+ {%- for tool_call in message.tool_calls %}
54
+ {%- if (loop.first and content) or (not loop.first) %}
55
+ {{- '\n' }}
56
+ {%- endif %}
57
+ {%- if tool_call.function %}
58
+ {%- set tool_call = tool_call.function %}
59
+ {%- endif %}
60
+ {{- '[TOOL_CALLS]\n{"name": "' }}
61
+ {{- tool_call.name }}
62
+ {{- '", "arguments": ' }}
63
+ {%- if tool_call.arguments is string %}
64
+ {{- tool_call.arguments }}
65
  {%- else %}
66
+ {{- tool_call.arguments | tojson }}
67
  {%- endif %}
68
+ {{- '}\n[SPECIAL_10]' }}
69
  {%- endfor %}
70
  {%- endif %}
71
+ {{- '</s>\n' }}
72
+ {%- elif message.role == "tool" %}
73
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
74
+ {{- '<s>user' }}
75
+ {%- endif %}
76
+ {{- '\n[TOOL_RESULTS]\n' }}
77
+ {{- content }}
78
+ {{- '\n[/TOOL_RESULTS]' }}
79
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
80
+ {{- '</s>\n' }}
 
81
  {%- endif %}
 
 
 
 
 
 
 
 
82
  {%- endif %}
83
+ {%- endfor %}
84
+ {%- if add_generation_prompt %}
85
+ {{- '<s>assistant\n' }}
86
+ {%- if enable_thinking is defined and enable_thinking is false %}
87
+ {{- '<SPECIAL_11>\n\n<SPECIAL_12>\n\n' }}
88
+ {%- endif %}
89
+ {%- endif %}