File size: 6,313 Bytes
96732b0 |
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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
{{- bos_token }}
{%- if custom_tools is defined %}
{%- set tools = custom_tools %}
{%- endif %}
{%- if not documents_in_user_message is defined %}
{%- set documents_in_user_message = true %}
{%- endif %}
{%- if not tools_in_user_message is defined %}
{%- set tools_in_user_message = true %}
{%- endif %}
{%- if not documents is defined %}
{%- set documents = none %}
{%- endif %}
{%- if not tools is defined %}
{%- set tools = none %}
{%- endif %}
{%- if not date_string is defined %}
{%- set date_string = "December 2025" %}
{%- endif %}
{#- This block extracts the system message, so we can slot it into the right place. #}
{%- if messages[0]['role'] == 'system' %}
{%- set system_message = messages[0]['content']|trim %}
{%- set messages = messages[1:] %}
{%- else %}
{%- set system_message = "" %}
{%- endif %}
{#- System message + documents + builtin tools + date #}
{{- "<|start_header_id|>system<|end_header_id|>\n" }}
{%- if documents is not none and not documents_in_user_message %}
{{- "You have access to the following documents. Please use them to answer the user's question." }}
{%- for doc in documents %}
{%- if doc.title is defined %}
{{- "Title: " + doc.title + "\n" }}
{%- endif %}
{{- "Content: " + doc.text + "\n\n" }}
{%- endfor %}
{{- "If the documents don't contain relevant information, rely on your general knowledge but acknowledge when you're doing so.\n\n" }}
{%- endif %}
{%- 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." }}
{%- for t in tools %}
{{- t | tojson(indent=4) }}
{{- "\n\n" }}
{%- endfor %}
{{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. '}}
{{- "Do not use variables.\n\n" }}
{%- endif %}
{{- system_message }}
{{- "<|end_of_text|>\n\n" }}
{#- Custom tools and documents are passed in a user message with some extra guidance #}
{%- if (documents_in_user_message and not documents is none) or (tools_in_user_message and not tools is none) %}
{#- Extract the first user message so we can plug it in here #}
{%- if messages | length != 0 %}
{%- set first_user_message = messages[0]['content']|trim %}
{%- set messages = messages[1:] %}
{%- else %}
{{- raise_exception("Cannot put tools or documents in the first user message when there's no first user message!") }}
{%- endif %}
{{- '<|start_header_id|>user<|end_header_id|>\n' -}}
{#- Add documents to the user message if they are defined #}
{%- if documents_in_user_message and not documents is none %}
{{- "Given the following documents, please use them to answer the user's question.\n\n" }}
{%- for doc in documents %}
{%- if doc.title is defined %}
{{- "Title: " + doc.title + "\n" }}
{%- endif %}
{{- "Content: " + doc.text + "\n\n" }}
{%- endfor %}
{{- "If the documents don't contain relevant information, rely on your general knowledge but acknowledge when you're doing so.\n\n" }}
{%- endif %}
{#- Add tools to the user message if they are defined #}
{%- if tools_in_user_message and not tools is none %}
{{- "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" }}
{%- for t in tools %}
{{- t | tojson(indent=4) }}
{{- "\n\n" }}
{%- endfor %}
{{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. '}}
{{- "Do not use variables.\n\n" }}
{%- endif %}
{#- Add the first user message to the user message #}
{{- 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 %}
{#- This means we're in ipython mode #}
{{- "<|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 %}
|