Files
agentic-kvc/third_party/vllm/examples/tool_chat_template_phi4_mini.jinja
Gahow Wang 445e491123 Add vLLM v0.18.1 source tree with KV transfer abort fix
third_party/vllm/ now tracked in git for direct patch management.
Based on vLLM v0.18.1 release with one patch applied:

  vllm/v1/core/sched/scheduler.py:
    Replace fatal assert with graceful skip when KV transfer callback
    arrives for an already-aborted request during PD disaggregated serving.

Future vLLM modifications should be made directly in third_party/vllm/
and committed normally. The patches/ directory is kept as documentation
of what changed from upstream.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 00:30:38 +08:00

62 lines
2.3 KiB
Django/Jinja

{%- if messages and messages[0]['role'] == 'system' %}
{%- set system_message = messages[0]['content']|trim %}
{%- set messages = messages[1:] %}
{%- else %}
{%- set system_message = "You are a helpful assistant." %}
{%- endif %}
{%- if messages %}
<|system|>
{{ system_message }}
{%- if tools %}
In addition to plain text responses, you can choose to call one or more of the provided functions.
Use the following rule to decide when to call a function:
* if the response can be generated from your internal knowledge (e.g., as in the case of queries like "What is the capital of Poland?"), do so
* if you need external information that can be obtained by calling one or more of the provided functions, generate a function calls
If you decide to call functions:
* prefix function calls with functools marker (no closing marker required)
* all function calls should be generated in a single JSON list formatted as functools[{"name": [function name], "arguments": [function arguments as JSON]}, ...]
* follow the provided JSON schema. Do not hallucinate arguments or values. Do to blindly copy values from the provided samples
* respect the argument type formatting. E.g., if the type is number and format is float, write value 7 as 7.0
* make sure you pick the right functions that match the user intent
{%- for t in tools %}
{{- t | tojson(indent=4) }}
{{- "\n\n" }}
{%- endfor %}
{%- endif %}<|end|>
{%- for message in messages %}
{%- if message.role != "system" %}
<|{{ message.role }}|>
{%- if message.content and message.role == "tools" %}
{"result": {{ message.content }}}
{%- elif message.content %}
{{ message.content }}
{%- elif message.tool_calls %}
{%- for call in message.tool_calls %}
{"name": "{{ call.function.name }}", "arguments": {{ call.function.arguments }}}
{%- if not loop.last %},{% endif %}
{%- endfor %}
{%- endif %}<|end|>
{%- endif %}
{%- endfor %}<|assistant|>
{%- else %}
{%- if system_message %}
<|system|>
{{ system_message }}<|end|>
{%- endif %}
{%- if prompt %}
<|user|>
{{ prompt }}<|end|>
{%- endif %}<|assistant|>
{%- endif %}
{{ response }}
{%- if response %}<|user|>{% endif %}