From 06804d1c0b6edeba01a72650e75f4671d93ff954 Mon Sep 17 00:00:00 2001 From: Anthony DePasquale Date: Tue, 14 Jan 2025 09:24:29 +0100 Subject: [PATCH] Remove Python --- .github/workflows/jupyter.yml | 26 ------ Python/test-chat-template.ipynb | 146 -------------------------------- 2 files changed, 172 deletions(-) delete mode 100644 .github/workflows/jupyter.yml delete mode 100644 Python/test-chat-template.ipynb diff --git a/.github/workflows/jupyter.yml b/.github/workflows/jupyter.yml deleted file mode 100644 index 0975405..0000000 --- a/.github/workflows/jupyter.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Jupyter Notebooks - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - check-notebooks: - name: Check Jupyter notebooks - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - - name: Install pre-commit - run: pip install pre-commit - - - name: Run pre-commit - run: pre-commit run nbstripout --all-files diff --git a/Python/test-chat-template.ipynb b/Python/test-chat-template.ipynb deleted file mode 100644 index 09563bd..0000000 --- a/Python/test-chat-template.ipynb +++ /dev/null @@ -1,146 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook can be used to generate output with Jinja2 in Python to compare against the output from Swift Jinja. Note that Jinja2 doesn't preserve the insertion order of keys in dictionaries, which may result in differences with Swift Jinja.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# %pip install jinja2 --upgrade" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from jinja2 import Environment, BaseLoader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "templates = {\n", - " \"llama_3_1\": \"\"\"\n", - "{{- bos_token }}\\n{%- if custom_tools is defined %}\\n {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n {%- set date_string = \\\"26 Jul 2024\\\" %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n {%- set system_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n{%- else %}\\n {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message + builtin tools #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if builtin_tools is defined or tools is not none %}\\n {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{%- if builtin_tools is defined %}\\n {{- \\\"Tools: \\\" + builtin_tools | reject('equalto', 'code_interpreter') | join(\\\", \\\") + \\\"\\\\n\\\\n\\\"}}\\n{%- endif %}\\n{{- \\\"Cutting Knowledge Date: December 2023\\\\n\\\" }}\\n{{- \\\"Today Date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n {{- \\\"You have access to the following functions. To call a function, please respond with JSON for a function call.\\\" }}\\n {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n {#- Extract the first user message so we can plug it in here #}\\n {%- if messages | length != 0 %}\\n {%- set first_user_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n {%- else %}\\n {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n {%- elif 'tool_calls' in message %}\\n {%- if not message.tool_calls|length == 1 %}\\n {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n {%- endif %}\\n {%- set tool_call = message.tool_calls[0].function %}\\n {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n {{- \\\"<|python_tag|>\\\" + tool_call.name + \\\".call(\\\" }}\\n {%- for arg_name, arg_val in tool_call.arguments | items %}\\n {{- arg_name + '=\\\"' + arg_val + '\\\"' }}\\n {%- if not loop.last %}\\n {{- \\\", \\\" }}\\n {%- endif %}\\n {%- endfor %}\\n {{- \\\")\\\" }}\\n {%- else %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n {{- '\\\"parameters\\\": ' }}\\n {{- tool_call.arguments | tojson }}\\n {{- \\\"}\\\" }}\\n {%- endif %}\\n {%- if builtin_tools is defined %}\\n {#- This means we're in ipython mode #}\\n {{- \\\"<|eom_id|>\\\" }}\\n {%- else %}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- endif %}\\n {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n {%- if message.content is mapping or message.content is iterable %}\\n {{- message.content | tojson }}\\n {%- else %}\\n {{- message.content }}\\n {%- endif %}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\n", - "\"\"\",\n", - " \"llama_3_1_improved\": \"\"\"\n", - "{{- bos_token }}\\n{%- if custom_tools is defined %}\\n {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n {%- set date_string = \\\"26 Jul 2024\\\" %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n {%- set system_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n{%- else %}\\n {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message + builtin tools #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if builtin_tools is defined or tools is not none %}\\n {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{%- if builtin_tools is defined %}\\n {{- \\\"Tools: \\\" + builtin_tools | reject('equalto', 'code_interpreter') | join(\\\", \\\") + \\\"\\\\n\\\\n\\\"}}\\n{%- endif %}\\n{{- \\\"Knowledge cutoff date: December 2023\\\\n\\\" }}\\n{{- \\\"Today's date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n {{- \\\"In most cases, you should respond in natural language, but you also have access to the following functions, which can be called in order to take actions in response to the user's input. They should ONLY be used when appropriate, judging from the user's input. DO NOT try to call any functions that are not specified here, since they WILL NOT WORK. You ONLY have access to the specified functions, and should ONLY call them in the appropriate situation. To call a function, respond with JSON like this: {\\\\\\\"name\\\\\\\": , \\\\\\\"parameters\\\\\\\": }. Do not use variables. REMEMBER: If the user's input doesn't require calling a function, don't call a function, and don't call non-existent functions.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n {#- Extract the first user message so we can plug it in here #}\\n {%- if messages | length != 0 %}\\n {%- set first_user_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n {%- else %}\\n {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n {%- elif 'tool_calls' in message %}\\n {%- if not message.tool_calls|length == 1 %}\\n {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n {%- endif %}\\n {%- set tool_call = message.tool_calls[0].function %}\\n {%- if builtin_tools is defined and tool_call.name in builtin_tools %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n {{- \\\"<|python_tag|>\\\" + tool_call.name + \\\".call(\\\" }}\\n {%- for arg_name, arg_val in tool_call.arguments | items %}\\n {{- arg_name + '=\\\"' + arg_val + '\\\"' }}\\n {%- if not loop.last %}\\n {{- \\\", \\\" }}\\n {%- endif %}\\n {%- endfor %}\\n {{- \\\")\\\" }}\\n {%- else %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n {{- '\\\"parameters\\\": ' }}\\n {{- tool_call.arguments | tojson }}\\n {{- \\\"}\\\" }}\\n {%- endif %}\\n {%- if builtin_tools is defined %}\\n {#- This means we're in ipython mode #}\\n {{- \\\"<|eom_id|>\\\" }}\\n {%- else %}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- endif %}\\n {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n {%- if message.content is mapping or message.content is iterable %}\\n {{- message.content | tojson }}\\n {%- else %}\\n {{- message.content }}\\n {%- endif %}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\n", - "\"\"\",\n", - " \"llama_3_2\": \"\"\"\n", - "{{- bos_token }}\\n{%- if custom_tools is defined %}\\n {%- set tools = custom_tools %}\\n{%- endif %}\\n{%- if not tools_in_user_message is defined %}\\n {%- set tools_in_user_message = true %}\\n{%- endif %}\\n{%- if not date_string is defined %}\\n {%- if strftime_now is defined %}\\n {%- set date_string = strftime_now(\\\"%d %b %Y\\\") %}\\n {%- else %}\\n {%- set date_string = \\\"26 Jul 2024\\\" %}\\n {%- endif %}\\n{%- endif %}\\n{%- if not tools is defined %}\\n {%- set tools = none %}\\n{%- endif %}\\n\\n{#- This block extracts the system message, so we can slot it into the right place. #}\\n{%- if messages[0]['role'] == 'system' %}\\n {%- set system_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n{%- else %}\\n {%- set system_message = \\\"\\\" %}\\n{%- endif %}\\n\\n{#- System message #}\\n{{- \\\"<|start_header_id|>system<|end_header_id|>\\\\n\\\\n\\\" }}\\n{%- if tools is not none %}\\n {{- \\\"Environment: ipython\\\\n\\\" }}\\n{%- endif %}\\n{{- \\\"Cutting Knowledge Date: December 2023\\\\n\\\" }}\\n{{- \\\"Today Date: \\\" + date_string + \\\"\\\\n\\\\n\\\" }}\\n{%- if tools is not none and not tools_in_user_message %}\\n {{- \\\"You have access to the following functions. To call a function, please respond with JSON for a function call.\\\" }}\\n {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n{%- endif %}\\n{{- system_message }}\\n{{- \\\"<|eot_id|>\\\" }}\\n\\n{#- Custom tools are passed in a user message with some extra guidance #}\\n{%- if tools_in_user_message and not tools is none %}\\n {#- Extract the first user message so we can plug it in here #}\\n {%- if messages | length != 0 %}\\n {%- set first_user_message = messages[0]['content']|trim %}\\n {%- set messages = messages[1:] %}\\n {%- else %}\\n {{- raise_exception(\\\"Cannot put tools in the first user message when there's no first user message!\\\") }}\\n{%- endif %}\\n {{- '<|start_header_id|>user<|end_header_id|>\\\\n\\\\n' -}}\\n {{- \\\"Given the following functions, please respond with a JSON for a function call \\\" }}\\n {{- \\\"with its proper arguments that best answers the given prompt.\\\\n\\\\n\\\" }}\\n {{- 'Respond in the format {\\\"name\\\": function name, \\\"parameters\\\": dictionary of argument name and its value}.' }}\\n {{- \\\"Do not use variables.\\\\n\\\\n\\\" }}\\n {%- for t in tools %}\\n {{- t | tojson(indent=4) }}\\n {{- \\\"\\\\n\\\\n\\\" }}\\n {%- endfor %}\\n {{- first_user_message + \\\"<|eot_id|>\\\"}}\\n{%- endif %}\\n\\n{%- for message in messages %}\\n {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}\\n {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\\\\n\\\\n'+ message['content'] | trim + '<|eot_id|>' }}\\n {%- elif 'tool_calls' in message %}\\n {%- if not message.tool_calls|length == 1 %}\\n {{- raise_exception(\\\"This model only supports single tool-calls at once!\\\") }}\\n {%- endif %}\\n {%- set tool_call = message.tool_calls[0].function %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' -}}\\n {{- '{\\\"name\\\": \\\"' + tool_call.name + '\\\", ' }}\\n {{- '\\\"parameters\\\": ' }}\\n {{- tool_call.arguments | tojson }}\\n {{- \\\"}\\\" }}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- elif message.role == \\\"tool\\\" or message.role == \\\"ipython\\\" %}\\n {{- \\\"<|start_header_id|>ipython<|end_header_id|>\\\\n\\\\n\\\" }}\\n {%- if message.content is mapping or message.content is iterable %}\\n {{- message.content | tojson }}\\n {%- else %}\\n {{- message.content }}\\n {%- endif %}\\n {{- \\\"<|eot_id|>\\\" }}\\n {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n {{- '<|start_header_id|>assistant<|end_header_id|>\\\\n\\\\n' }}\\n{%- endif %}\\n\n", - "\"\"\",\n", - " \"qwen_2_5\": \"\"\"\n", - "{%- if tools %}\\n {{- '<|im_start|>system\\\\n' }}\\n {%- if messages[0]['role'] == 'system' %}\\n {{- messages[0]['content'] }}\\n {%- else %}\\n {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\\n {%- endif %}\\n {{- \\\"\\\\n\\\\n# Tools\\\\n\\\\nYou may call one or more functions to assist with the user query.\\\\n\\\\nYou are provided with function signatures within XML tags:\\\\n\\\" }}\\n {%- for tool in tools %}\\n {{- \\\"\\\\n\\\" }}\\n {{- tool | tojson }}\\n {%- endfor %}\\n {{- \\\"\\\\n\\\\n\\\\nFor each function call, return a json object with function name and arguments within XML tags:\\\\n\\\\n{\\\\\\\"name\\\\\\\": , \\\\\\\"arguments\\\\\\\": }\\\\n<|im_end|>\\\\n\\\" }}\\n{%- else %}\\n {%- if messages[0]['role'] == 'system' %}\\n {{- '<|im_start|>system\\\\n' + messages[0]['content'] + '<|im_end|>\\\\n' }}\\n {%- else %}\\n {{- '<|im_start|>system\\\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\\\n' }}\\n {%- endif %}\\n{%- endif %}\\n{%- for message in messages %}\\n {%- if (message.role == \\\"user\\\") or (message.role == \\\"system\\\" and not loop.first) or (message.role == \\\"assistant\\\" and not message.tool_calls) %}\\n {{- '<|im_start|>' + message.role + '\\\\n' + message.content + '<|im_end|>' + '\\\\n' }}\\n {%- elif message.role == \\\"assistant\\\" %}\\n {{- '<|im_start|>' + message.role }}\\n {%- if message.content %}\\n {{- '\\\\n' + message.content }}\\n {%- endif %}\\n {%- for tool_call in message.tool_calls %}\\n {%- if tool_call.function is defined %}\\n {%- set tool_call = tool_call.function %}\\n {%- endif %}\\n {{- '\\\\n\\\\n{\\\"name\\\": \\\"' }}\\n {{- tool_call.name }}\\n {{- '\\\", \\\"arguments\\\": ' }}\\n {{- tool_call.arguments | tojson }}\\n {{- '}\\\\n' }}\\n {%- endfor %}\\n {{- '<|im_end|>\\\\n' }}\\n {%- elif message.role == \\\"tool\\\" %}\\n {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \\\"tool\\\") %}\\n {{- '<|im_start|>user' }}\\n {%- endif %}\\n {{- '\\\\n\\\\n' }}\\n {{- message.content }}\\n {{- '\\\\n' }}\\n {%- if loop.last or (messages[loop.index0 + 1].role != \\\"tool\\\") %}\\n {{- '<|im_end|>\\\\n' }}\\n {%- endif %}\\n {%- endif %}\\n{%- endfor %}\\n{%- if add_generation_prompt %}\\n {{- '<|im_start|>assistant\\\\n' }}\\n{%- endif %}\\n\n", - "\"\"\",\n", - " \"mistral_7b\": \"\"\"\n", - "{{bos_token}}{% set user_messages = messages | selectattr('role', 'equalto', 'user') | list %}{% for message in messages %}{% if message['role'] == 'user' %}{% if message == user_messages[-1] %}{% if tools %}{{'[AVAILABLE_TOOLS]'+ tools|string + '[/AVAILABLE_TOOLS]'}}{% endif %}{{ '[INST]' + message['content'] + '[/INST]' }}{% else %}{{ '[INST]' + message['content'] + '[/INST]' }}{% endif %}{% elif message['role'] == 'assistant' %}{{ ' ' + message['content'] + ' ' + eos_token}}{% elif message['role'] == 'tool_results' %}{{'[TOOL_RESULTS]' + message['content']|string + '[/TOOL_RESULTS]'}}{% elif message['role'] == 'tool_calls' %}{{'[TOOL_CALLS]' + message['content']|string + eos_token}}{% endif %}{% endfor %}\n", - "\"\"\",\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "weather_tool_spec = {\n", - " \"type\": \"function\",\n", - " \"function\": {\n", - " \"description\": \"Get the current weather in a given location\",\n", - " \"name\": \"get_current_weather\",\n", - " \"parameters\": {\n", - " \"type\": \"object\",\n", - " \"properties\": {\n", - " \"unit\": {\"type\": \"string\", \"enum\": [\"celsius\", \"fahrenheit\"]},\n", - " \"location\": {\"type\": \"string\", \"description\": \"The city and state, e.g. San Francisco, CA\"}\n", - " },\n", - " \"required\": [\"location\"],\n", - " }\n", - " }\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "user_message = {\n", - " \"role\": \"user\",\n", - " \"content\": \"What is the weather in Paris today?\"\n", - "}\n", - "\n", - "system_prompt = {\n", - " \"role\": \"system\",\n", - " \"content\": \"You are a helpful assistant.\"\n", - "}\n", - "\n", - "messages = [user_message]\n", - "\n", - "messages_with_system_prompt = [system_prompt, user_message]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "context = {\n", - " \"messages\": messages_with_system_prompt,\n", - " \"tools\": [weather_tool_spec],\n", - " \"bos_token\": \"<|begin_of_text|>\",\n", - " \"add_generation_prompt\": True,\n", - " \"tools_in_user_message\": False,\n", - "}\n", - "\n", - "env = Environment(loader=BaseLoader())\n", - "template = env.from_string(templates[\"qwen_2_5\"])\n", - "result = template.render(context)\n", - "print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}