31 files had Windows line endings (\r\n) from merge commit. This causes patch_ops.sh replace_once() to fail: anchor strings use \n but file content has \r\n, so no match → patch fails → docker build fails. Also added .gitattributes to force LF for all text files going forward.
58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""
|
|
Patches vLLM 0.6.3 to register Qwen3CoderToolParser under the name "qwen3_coder".
|
|
|
|
Deploy steps on the remote machine (already called by patch_ops.sh):
|
|
1. patch_ops.sh locates vLLM with importlib.util.find_spec.
|
|
2. cp qwen3coder_tool_parser.py into the detected vllm tool_parsers.
|
|
2. python3 patch_vllm_tool_parser.py
|
|
|
|
Usage after patching:
|
|
--tool-call-parser qwen3_coder --enable-auto-tool-choice
|
|
"""
|
|
|
|
from patch_utils import ensure_dir, package_root, replace_once
|
|
|
|
VLLM_ROOT = package_root("vllm")
|
|
TOOL_PARSERS_DIR = VLLM_ROOT / "entrypoints" / "openai" / "tool_parsers"
|
|
INIT_FILE = TOOL_PARSERS_DIR / "__init__.py"
|
|
|
|
|
|
def main():
|
|
ensure_dir(TOOL_PARSERS_DIR)
|
|
|
|
print(f"=== Patching {INIT_FILE} ===")
|
|
replace_once(
|
|
INIT_FILE,
|
|
"from .mistral_tool_parser import MistralToolParser",
|
|
"from .mistral_tool_parser import MistralToolParser\n"
|
|
"from .qwen3coder_tool_parser import Qwen3CoderToolParser",
|
|
required=True,
|
|
already_contains="from .qwen3coder_tool_parser import Qwen3CoderToolParser")
|
|
replace_once(
|
|
INIT_FILE,
|
|
'"MistralToolParser", "Internlm2ToolParser", "Llama3JsonToolParser"\n]',
|
|
'"MistralToolParser", "Internlm2ToolParser", "Llama3JsonToolParser",\n'
|
|
' "Qwen3CoderToolParser"\n]',
|
|
required=True,
|
|
already_contains='"Qwen3CoderToolParser"')
|
|
|
|
print("\n=== Verification ===")
|
|
try:
|
|
import importlib.util
|
|
spec = importlib.util.spec_from_file_location(
|
|
"qwen3coder_tool_parser",
|
|
str(TOOL_PARSERS_DIR / "qwen3coder_tool_parser.py"),
|
|
)
|
|
mod = importlib.util.module_from_spec(spec)
|
|
print(f" Module spec loaded: {spec.name}")
|
|
print(" (full import requires torch/vllm runtime — skipping exec)")
|
|
except Exception as e:
|
|
print(f" [optional] spec check failed: {e}")
|
|
|
|
print("\nDone. Start vLLM server with:")
|
|
print(" --tool-call-parser qwen3_coder --enable-auto-tool-choice")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|