| | {{- bos_token }}
|
| | {%- if custom_tools is defined %}
|
| | {%- set tools = custom_tools %}
|
| | {%- endif %}
|
| | {%- if not tools_in_user_message is defined %}
|
| | {%- set tools_in_user_message = true %}
|
| | {%- endif %}
|
| | {%- if not date_string is defined %}
|
| | {%- set date_string = "December 2024" %}
|
| | {%- endif %}
|
| | {%- if not tools is defined %}
|
| | {%- set tools = none %}
|
| | {%- endif %}
|
| |
|
| |
|
| | {%- if messages[0]['role'] == 'system' %}
|
| | {%- set system_message = messages[0]['content']|trim %}
|
| | {%- set messages = messages[1:] %}
|
| | {%- else %}
|
| | {%- set system_message = "" %}
|
| | {%- endif %}
|
| |
|
| |
|
| | {{- "<|start_header_id|>system<|end_header_id|>\n" }}
|
| | {%- if builtin_tools is defined or tools is not none %}
|
| | {{- "Environment: ipython\n" }}
|
| | {%- endif %}
|
| | {%- if builtin_tools is defined %}
|
| | {{- "Tools: " + builtin_tools | reject('equalto', 'code_interpreter') | join(", ") + "\n\n"}}
|
| | {%- endif %}
|
| | {{- "Cutting Knowledge Date: December 2024\n" }}
|
| | {{- "Today Date: " + date_string + "\n" }}
|
| | {%- if tools is not none and not tools_in_user_message %}
|
| | {{- "You have access to the following functions. To call a function, please respond with JSON for a function call." }}
|
| | {{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}.' }}
|
| | {{- "Do not use variables.\n\n" }}
|
| | {%- for t in tools %}
|
| | {{- t | tojson(indent=4) }}
|
| | {{- "\n\n" }}
|
| | {%- endfor %}
|
| | {%- endif %}
|
| | {{- system_message }}
|
| | {{- "<|end_of_text|>\n\n" }}
|
| |
|
| |
|
| | {%- if tools_in_user_message and not tools is none %}
|
| |
|
| | {%- if messages | length != 0 %}
|
| | {%- set first_user_message = messages[0]['content']|trim %}
|
| | {%- set messages = messages[1:] %}
|
| | {%- else %}
|
| | {{- raise_exception("Cannot put tools in the first user message when there's no first user message!") }}
|
| | {%- endif %}
|
| | {{- '<|start_header_id|>user<|end_header_id|>\n' -}}
|
| | {{- "Given the following functions, please respond with a JSON for a function call " }}
|
| | {{- "with its proper arguments that best answers the given prompt.\n\n" }}
|
| | {{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}.' }}
|
| | {{- "Do not use variables.\n\n" }}
|
| | {%- for t in tools %}
|
| | {{- t | tojson(indent=4) }}
|
| | {{- "\n\n" }}
|
| | {%- endfor %}
|
| | {{- first_user_message + "<|end_of_text|>\n\n"}}
|
| | {%- endif %}
|
| |
|
| | {%- for message in messages %}
|
| | {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}
|
| | {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n'+ message['content'] | trim + '<|end_of_text|>\n\n' }}
|
| | {%- elif 'tool_calls' in message %}
|
| | {%- if not message.tool_calls|length == 1 %}
|
| | {{- raise_exception("This model only supports single tool-calls at once!") }}
|
| | {%- endif %}
|
| | {%- set tool_call = message.tool_calls[0].function %}
|
| | {%- if builtin_tools is defined and tool_call.name in builtin_tools %}
|
| | {{- '<|start_header_id|>assistant<|end_header_id|>\n' -}}
|
| | {{- "<|python_tag|>" + tool_call.name + ".call(" }}
|
| | {%- for arg_name, arg_val in tool_call.arguments | items %}
|
| | {{- arg_name + '="' + arg_val + '"' }}
|
| | {%- if not loop.last %}
|
| | {{- ", " }}
|
| | {%- endif %}
|
| | {%- endfor %}
|
| | {{- ")" }}
|
| | {%- else %}
|
| | {{- '<|start_header_id|>assistant<|end_header_id|>\n' -}}
|
| | {{- '{"name": "' + tool_call.name + '", ' }}
|
| | {{- '"parameters": ' }}
|
| | {{- tool_call.arguments | tojson }}
|
| | {{- "}" }}
|
| | {%- endif %}
|
| | {%- if builtin_tools is defined %}
|
| |
|
| | {{- "<|end_of_text|>\n\n" }}
|
| | {%- else %}
|
| | {{- "<|end_of_text|>\n\n" }}
|
| | {%- endif %}
|
| | {%- elif message.role == "tool" or message.role == "ipython" %}
|
| | {{- "<|start_header_id|>ipython<|end_header_id|>\n" }}
|
| | {%- if message.content is mapping or message.content is iterable %}
|
| | {{- message.content | tojson }}
|
| | {%- else %}
|
| | {{- message.content }}
|
| | {%- endif %}
|
| | {{- "<|end_of_text|>\n\n" }}
|
| | {%- endif %}
|
| | {%- endfor %}
|
| | {%- if add_generation_prompt %}
|
| | {{- '<|start_header_id|>assistant<|end_header_id|>\n' }}
|
| | {%- endif %}
|
| | |