renderers 0.1.13.dev17__tar.gz → 0.1.13.dev21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/PKG-INFO +1 -1
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/_version.py +2 -2
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/glm45.py +4 -2
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/nemotron3.py +5 -5
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/parity.py +34 -3
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.github/workflows/publish-dev.yml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.github/workflows/publish.yml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.github/workflows/style.yml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.github/workflows/test.yml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.gitignore +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/.pre-commit-config.yaml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/LICENSE +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/README.md +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/docs/renderer-config.md +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/README.md +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/sglang/multiturn_generate_sglang.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/sglang/online_multiturn_sglang.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/tinker/multiturn_generate_tinker.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/transformers/multiturn_generate_transformers.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/vllm/multiturn_generate_vllm.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/pyproject.toml +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/__init__.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/base.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/client.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/configs.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/custom.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/deepseek_r1.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/deepseek_v3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/deepseek_v4.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/default.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/gemma4.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/glm5.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/gpt_oss.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/hy3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/inkling.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/kimi_k2.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/kimi_k25.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/laguna_s21.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/laguna_xs2.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/llama_3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/minimax_m2.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/muse_glimmer.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/parsers.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/parsing.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/prime_qwen3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/qwen3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/qwen35.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/qwen36.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/qwen38.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/qwen3_vl.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/reasoning.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/renderers/tagged.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/audit_prefix_stability.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/conftest.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/fixtures/prefix_stability.json +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/reference_continuations.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/reference_rendering.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/replay.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_bridge.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_build_helpers.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_client.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_custom.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_deepseek_r1.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_deepseek_v4.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_disabled_thinking_stability.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_gemma4.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_glm53_flash.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_glm_tool_name_validation.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_hy3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_incremental.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_inkling.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_is_content.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_kimi_k25_tool_schema.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_laguna_m1.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_laguna_xs21.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_llama_3.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_load_tokenizer.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_message_indices.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_message_tool_names.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_multimodal.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_muse_glimmer.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_nemotron35_vlm.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_nemotron3_ultra.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_offsetless_tokenizers.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_parity.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_parse_response.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_parse_response_robustness.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_parsers.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_preserve_thinking.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_qwen35_size_coverage.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_qwen38.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_reasoning_boundaries.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_renderer_config.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_roundtrip.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_sampled_mask.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_tagged_rollout.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_tokens_per_message.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/tests/test_tool_arg_type_preservation.py +0 -0
- {renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/uv.lock +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.13.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, 13, '
|
|
21
|
+
__version__ = version = '0.1.13.dev21'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 13, 'dev21')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -517,12 +517,14 @@ class GLM45Renderer:
|
|
|
517
517
|
elif content.strip():
|
|
518
518
|
emit_text("\n" + content.strip(), msg_idx, is_sampled=True, is_content=True)
|
|
519
519
|
|
|
520
|
-
for tc in tool_calls:
|
|
520
|
+
for tc_idx, tc in enumerate(tool_calls):
|
|
521
521
|
func = tc.get("function") or tc
|
|
522
522
|
name = func.get("name", "")
|
|
523
523
|
arguments = func.get("arguments", {})
|
|
524
524
|
|
|
525
|
-
|
|
525
|
+
# The template opens every call with "\n<tool_call>"; only the
|
|
526
|
+
# first call's "\n" is already carried by the content text above.
|
|
527
|
+
if tc_idx > 0 or not content.strip():
|
|
526
528
|
emit_text("\n", msg_idx, is_sampled=True, is_content=True)
|
|
527
529
|
emit_special(self._tool_call_tok, msg_idx, is_sampled=True, is_content=True)
|
|
528
530
|
emit_text(name + "\n", msg_idx, is_sampled=True, is_content=True)
|
|
@@ -428,16 +428,16 @@ class Nemotron3Renderer:
|
|
|
428
428
|
content = self._render_content(msg.get("content"))
|
|
429
429
|
msg_orig_idx = orig_idx(i)
|
|
430
430
|
|
|
431
|
-
if role == "system":
|
|
432
|
-
if i != 0:
|
|
433
|
-
raise ValueError("System message must be at the beginning.")
|
|
431
|
+
if role == "system" and i == 0:
|
|
434
432
|
continue # Already handled above
|
|
435
433
|
|
|
436
|
-
elif role
|
|
434
|
+
elif role in ("user", "system"):
|
|
435
|
+
# The template renders a later system message through the
|
|
436
|
+
# user branch, under its own role header.
|
|
437
437
|
emit_special(
|
|
438
438
|
self._im_start, msg_orig_idx, is_sampled=False, is_content=False
|
|
439
439
|
)
|
|
440
|
-
user_segments: list[tuple[str, bool]] = [("
|
|
440
|
+
user_segments: list[tuple[str, bool]] = [(f"{role}\n", False)]
|
|
441
441
|
if content:
|
|
442
442
|
user_segments.append((content, True))
|
|
443
443
|
# Reasoning-effort hint rides on the LAST user message only,
|
|
@@ -202,6 +202,7 @@ MODEL_CATALOG = (
|
|
|
202
202
|
"tool-call-content",
|
|
203
203
|
"tool-call-none",
|
|
204
204
|
"multiple-tool-calls",
|
|
205
|
+
"multiple-tool-calls-content",
|
|
205
206
|
"tool-response",
|
|
206
207
|
"named-tool-response",
|
|
207
208
|
"consecutive-tool-responses",
|
|
@@ -217,6 +218,7 @@ MODEL_CATALOG = (
|
|
|
217
218
|
"tool-call-content",
|
|
218
219
|
"tool-call-none",
|
|
219
220
|
"multiple-tool-calls",
|
|
221
|
+
"multiple-tool-calls-content",
|
|
220
222
|
"tool-response",
|
|
221
223
|
"named-tool-response",
|
|
222
224
|
"consecutive-tool-responses",
|
|
@@ -246,7 +248,11 @@ MODEL_CATALOG = (
|
|
|
246
248
|
_model(
|
|
247
249
|
"meta-llama/Llama-3.2-1B-Instruct",
|
|
248
250
|
bridge=True,
|
|
249
|
-
excluded={
|
|
251
|
+
excluded={
|
|
252
|
+
"multiple-tool-calls",
|
|
253
|
+
"multiple-tool-calls-content",
|
|
254
|
+
"consecutive-tool-responses",
|
|
255
|
+
},
|
|
250
256
|
oracle_defaults={"date_string": "26 Jul 2024"},
|
|
251
257
|
extra_suites={"llama-checkpoints"},
|
|
252
258
|
),
|
|
@@ -254,7 +260,11 @@ MODEL_CATALOG = (
|
|
|
254
260
|
"meta-llama/Llama-3.2-3B-Instruct",
|
|
255
261
|
shared=False,
|
|
256
262
|
roundtrip=False,
|
|
257
|
-
excluded={
|
|
263
|
+
excluded={
|
|
264
|
+
"multiple-tool-calls",
|
|
265
|
+
"multiple-tool-calls-content",
|
|
266
|
+
"consecutive-tool-responses",
|
|
267
|
+
},
|
|
258
268
|
oracle_defaults={"date_string": "26 Jul 2024"},
|
|
259
269
|
extra_suites={"llama-checkpoints"},
|
|
260
270
|
),
|
|
@@ -486,6 +496,21 @@ SCENARIOS = (
|
|
|
486
496
|
],
|
|
487
497
|
tools=TOOLS,
|
|
488
498
|
),
|
|
499
|
+
_scenario(
|
|
500
|
+
"multiple-tool-calls-content",
|
|
501
|
+
[
|
|
502
|
+
{"role": "user", "content": "Weather in Paris and London?"},
|
|
503
|
+
{
|
|
504
|
+
"role": "assistant",
|
|
505
|
+
"content": "Let me check both.",
|
|
506
|
+
"tool_calls": [
|
|
507
|
+
_call("Paris", id="call_1"),
|
|
508
|
+
_call("London", id="call_2"),
|
|
509
|
+
],
|
|
510
|
+
},
|
|
511
|
+
],
|
|
512
|
+
tools=TOOLS,
|
|
513
|
+
),
|
|
489
514
|
_scenario(
|
|
490
515
|
"tool-response",
|
|
491
516
|
[
|
|
@@ -660,7 +685,13 @@ SCENARIOS = (
|
|
|
660
685
|
{"role": "system", "content": "Late instruction"},
|
|
661
686
|
{"role": "user", "content": "B"},
|
|
662
687
|
],
|
|
663
|
-
only_renderers={
|
|
688
|
+
only_renderers={
|
|
689
|
+
"laguna-xs-2.1",
|
|
690
|
+
"laguna-s-2.1",
|
|
691
|
+
"nemotron-3",
|
|
692
|
+
"nemotron-3-ultra",
|
|
693
|
+
"nemotron-3.5",
|
|
694
|
+
},
|
|
664
695
|
),
|
|
665
696
|
_scenario(
|
|
666
697
|
"tool-declare-message",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/sglang/multiturn_generate_sglang.py
RENAMED
|
File without changes
|
{renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/sglang/online_multiturn_sglang.py
RENAMED
|
File without changes
|
{renderers-0.1.13.dev17 → renderers-0.1.13.dev21}/examples/tinker/multiturn_generate_tinker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|