from pathlib import Path from jinja2 import Environment, StrictUndefined def raise_exception(message: str): raise RuntimeError(message) def main() -> None: template = Path("Qwen3-Coder-Next.jinja").read_text() env = Environment(undefined=StrictUndefined) env.globals.update(raise_exception=raise_exception) compiled = env.from_string(template) cases = [ ( "plain_developer", [ {"role": "developer", "content": "dev rules"}, {"role": "user", "content": "hello"}, ], [], ), ( "typed_user_and_developer", [ { "role": "developer", "content": [{"type": "input_text", "text": "dev typed"}], }, { "role": "user", "content": [ {"type": "text", "text": "hello"}, {"type": "image_url", "image_url": {"url": "x"}}, ], }, ], [], ), ( "tool_mapping_args_and_typed_tool_response", [ {"role": "user", "content": "run"}, { "role": "assistant", "content": "", "tool_calls": [ { "function": { "name": "bash", "arguments": {"cmd": "ls", "limit": 3}, } } ], }, {"role": "tool", "content": [{"type": "text", "text": "ok"}]}, ], [ { "type": "function", "function": { "name": "bash", "description": "run shell", "parameters": { "type": "object", "properties": {"cmd": {"type": "string"}}, }, }, } ], ), ( "tool_string_args_and_typed_assistant_content", [ {"role": "user", "content": "run"}, { "role": "assistant", "content": [{"type": "output_text", "text": "I will run it."}], "tool_calls": [ {"function": {"name": "bash", "arguments": '{"cmd":"ls"}'}} ], }, ], [], ), ( "none_content", [ {"role": "developer", "content": None}, {"role": "user", "content": None}, ], [], ), ] for name, messages, tools in cases: rendered = compiled.render( messages=messages, tools=tools, add_generation_prompt=True, ) assert "<|im_start|>assistant\n" in rendered, name print(f"CASE {name}: OK len={len(rendered)}") print("ALL_OK") if __name__ == "__main__": main()