File size: 3,921 Bytes
66cb7e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
{%- set image_count = namespace(value=0) %}
    {%- set video_count = namespace(value=0) %}
    {%- if tools %}
        {{- '<|im_start|>system
' }}
        {%- if messages[0]['role'] in ['system', 'developer'] %}
            {%- if messages[0]['content'] is string %}
                {{- messages[0]['content'] }}
            {%- else %}
                {{- messages[0]['content'][0]['text'] }}
            {%- endif %}
            {%- set messages = messages[1:] %}
        {%- else %}
            {{- 'You are a helpful assistant.' }}
        {%- endif %}
        {{- "

# Tools

You may call one or more functions to assist with the user query.

You are provided with function signatures within <tools></tools> XML tags:
<tools>" }}
        {%- for tool in tools %}
            {{- "
" }}
            {{- tool | tojson }}
        {%- endfor %}
        {{- "
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags.<|im_end|>
" }}
    {%- else %}
        {%- if messages[0]['role'] in ['system', 'developer'] %}
            {%- if messages[0]['content'] is string %}
                {{- '<|im_start|>system
' + messages[0]['content'] + '<|im_end|>
' }}
            {%- else %}
                {{- '<|im_start|>system
' + messages[0]['content'][0]['text'] + '<|im_end|>
' }}
            {%- endif %}
            {%- set messages = messages[1:] %}
        {%- else %}
            {{- '<|im_start|>system
You are a helpful assistant.<|im_end|>
' }}
        {%- endif %}
    {%- endif %}
    {%- for message in messages %}
        {%- if not (message.role == 'tool' or 'tool_calls' in message) %}
            {{- '<|im_start|>' + message.role }}
            {%- if message['content'] is string %}
                {{- '
' + message['content'] }}
            {%- else %}
                {%- for content in message['content'] %}
                    {%- if content['type'] == 'image' or content['type'] == 'image_url' %}
                        {%- set image_count.value = image_count.value + 1 %}
                        {{- '
Picture ' + image_count.value|string + ': ' }}
                        {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
                    {%- elif content['type'] == 'video' or content['type'] == 'video_url' %}
                        {%- set video_count.value = video_count.value + 1 %}
                        {{- '
Video ' + video_count.value|string + ': ' }}
                        {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
                    {%- elif 'text' in content %}
                        {{- '
' + content['text'] }}
                    {%- endif %}
                {%- endfor %}
            {%- endif %}
            {{- '<|im_end|>
' }}
        {%- elif 'tool_calls' in message %}
            {{- '<|im_start|>' + message.role }}
            {%- for tool_call in message.tool_calls %}
                {%- if tool_call.function is defined %}
                    {%- set tool_call = tool_call.function %}
                {%- endif %}
                {{- '
<tool_call>
{"name": "' }}
                {{- tool_call.name }}
                {{- '", "arguments": ' }}
                {{- tool_call.arguments | tojson }}
                {{- '}
</tool_call>' }}
            {%- endfor %}
            {{- '<|im_end|>
' }}
        {%- elif message.role == "tool" %}
            {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
                {{- '<|im_start|>user' }}
            {%- endif %}
            {{- '
<tool_response>
' }}
            {{- message.content }}
            {{- '
</tool_response>' }}
            {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
                {{- '<|im_end|>
' }}
            {%- endif %}
        {%- endif %}
    {%- endfor %}
    {%- if add_generation_prompt %}
        {{- '<|im_start|>assistant
' }}
    {%- endif %}