fix: guard against tools=None crash and string arguments in chat_template.jinja

#22
Files changed (1) hide show
  1. chat_template.jinja +11 -9
chat_template.jinja CHANGED
@@ -86,7 +86,7 @@ For each function call, output the function name and arguments within the follow
86
  {%- set tc = tc.function %}
87
  {%- endif %}
88
  {{- '<tool_call>' + tc.name -}}
89
- {% set _args = tc.arguments %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}</tool_call>{% endfor %}
90
  {% endif %}
91
  {%- elif m.role == 'tool' -%}
92
  {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
@@ -97,14 +97,16 @@ For each function call, output the function name and arguments within the follow
97
  {%- else -%}
98
  {{- '<tool_response><tools>\n' -}}
99
  {% for tr in m.content %}
100
- {%- for tool in tools -%}
101
- {%- if 'function' in tool -%}
102
- {%- set tool = tool['function'] -%}
103
- {%- endif -%}
104
- {%- if tool.name == tr.name -%}
105
- {{- tool_to_json(tool) + '\n' -}}
106
- {%- endif -%}
107
- {%- endfor -%}
 
 
108
  {%- endfor -%}
109
  {{- '</tools></tool_response>' -}}
110
  {% endif -%}
 
86
  {%- set tc = tc.function %}
87
  {%- endif %}
88
  {{- '<tool_call>' + tc.name -}}
89
+ {% set _args = tc.arguments if tc.arguments is mapping else tc.arguments | from_json %}{% for k, v in _args.items() %}<arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>{% endfor %}</tool_call>{% endfor %}
90
  {% endif %}
91
  {%- elif m.role == 'tool' -%}
92
  {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
 
97
  {%- else -%}
98
  {{- '<tool_response><tools>\n' -}}
99
  {% for tr in m.content %}
100
+ {%- if tools -%}
101
+ {%- for tool in tools -%}
102
+ {%- if 'function' in tool -%}
103
+ {%- set tool = tool['function'] -%}
104
+ {%- endif -%}
105
+ {%- if tool.name == tr.name -%}
106
+ {{- tool_to_json(tool) + '\n' -}}
107
+ {%- endif -%}
108
+ {%- endfor -%}
109
+ {%- endif -%}
110
  {%- endfor -%}
111
  {{- '</tools></tool_response>' -}}
112
  {% endif -%}