renderers 0.1.8.dev56__tar.gz → 0.1.8.dev57__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.8.dev56 → renderers-0.1.8.dev57}/PKG-INFO +2 -2
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/README.md +1 -1
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/docs/renderer-config.md +2 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/__init__.py +4 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/_version.py +2 -2
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/base.py +6 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/configs.py +9 -0
- renderers-0.1.8.dev57/renderers/prime_qwen3.py +694 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/conftest.py +1 -1
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_bridge.py +1 -1
- renderers-0.1.8.dev57/tests/test_prime_qwen3_parity.py +196 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_roundtrip.py +1 -1
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_tool_arg_type_preservation.py +1 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.github/workflows/publish-dev.yml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.github/workflows/publish.yml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.github/workflows/style.yml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.github/workflows/test.yml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.gitignore +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/.pre-commit-config.yaml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/LICENSE +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/README.md +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/sglang/multiturn_generate_sglang.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/sglang/online_multiturn_sglang.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/tinker/multiturn_generate_tinker.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/transformers/multiturn_generate_transformers.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/examples/vllm/multiturn_generate_vllm.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/pyproject.toml +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/client.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/deepseek_r1.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/deepseek_v3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/default.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/glm45.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/glm5.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/gpt_oss.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/hy3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/kimi_k2.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/kimi_k25.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/laguna_xs2.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/llama_3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/minimax_m2.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/nemotron3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/parsers.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/parsing.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/qwen3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/qwen35.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/qwen36.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/renderers/qwen3_vl.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_build_helpers.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_client.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_deepseek_r1.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_gpt_oss_harmony_parity.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_hy3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_incremental.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_is_content.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_kimi_k25_tool_schema.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_laguna_xs21.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_llama_3.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_load_tokenizer.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_message_indices.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_message_tool_names.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_multimodal.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_nemotron3_parity.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_nemotron3_ultra.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_parse_response.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_parse_response_robustness.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_parsers.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_preserve_thinking.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_qwen35_size_coverage.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_render_ids.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_renderer_config.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_renderer_config_parity.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_sampled_mask.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/tests/test_tokens_per_message.py +0 -0
- {renderers-0.1.8.dev56 → renderers-0.1.8.dev57}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: renderers
|
|
3
|
-
Version: 0.1.8.
|
|
3
|
+
Version: 0.1.8.dev57
|
|
4
4
|
Summary: Chat template renderers — deterministic message-to-token conversion for LLM training
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -56,7 +56,7 @@ next_prompt_ids = r.bridge_to_next_turn(
|
|
|
56
56
|
)
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Hand-coded renderers ship for `qwen3`, `qwen3-vl`, `qwen3.5`, `qwen3.6`, `glm-5`, `glm-5.1`, `glm-4.5`, `minimax-m2`, `deepseek-v3`, `deepseek-r1`, `kimi-k2`, `kimi-k2.5` / `kimi-k2.6`, `nemotron-3`, `nemotron-3-ultra`, `llama-3`, `gpt-oss`, and `
|
|
59
|
+
Hand-coded renderers ship for `qwen3`, `qwen3-vl`, `qwen3.5`, `qwen3.6`, `glm-5`, `glm-5.1`, `glm-4.5`, `minimax-m2`, `deepseek-v3`, `deepseek-r1`, `kimi-k2`, `kimi-k2.5` / `kimi-k2.6`, `nemotron-3`, `nemotron-3-ultra`, `llama-3`, `gpt-oss`, `hy3`, and `prime-qwen3`. Anything else falls back to `DefaultRenderer`, a generic `apply_chat_template` wrapper.
|
|
60
60
|
|
|
61
61
|
## API
|
|
62
62
|
|
|
@@ -40,7 +40,7 @@ next_prompt_ids = r.bridge_to_next_turn(
|
|
|
40
40
|
)
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
Hand-coded renderers ship for `qwen3`, `qwen3-vl`, `qwen3.5`, `qwen3.6`, `glm-5`, `glm-5.1`, `glm-4.5`, `minimax-m2`, `deepseek-v3`, `deepseek-r1`, `kimi-k2`, `kimi-k2.5` / `kimi-k2.6`, `nemotron-3`, `nemotron-3-ultra`, `llama-3`, `gpt-oss`, and `
|
|
43
|
+
Hand-coded renderers ship for `qwen3`, `qwen3-vl`, `qwen3.5`, `qwen3.6`, `glm-5`, `glm-5.1`, `glm-4.5`, `minimax-m2`, `deepseek-v3`, `deepseek-r1`, `kimi-k2`, `kimi-k2.5` / `kimi-k2.6`, `nemotron-3`, `nemotron-3-ultra`, `llama-3`, `gpt-oss`, `hy3`, and `prime-qwen3`. Anything else falls back to `DefaultRenderer`, a generic `apply_chat_template` wrapper.
|
|
44
44
|
|
|
45
45
|
## API
|
|
46
46
|
|
|
@@ -26,6 +26,7 @@ chat-template kwargs. Those fields are covered by parity tests against
|
|
|
26
26
|
| Renderer | Config class | Template fields | Renderer-only fields |
|
|
27
27
|
| --- | --- | --- | --- |
|
|
28
28
|
| Qwen3 | `Qwen3RendererConfig` | `enable_thinking` | - |
|
|
29
|
+
| PrimeIntellect Qwen3 | `PrimeQwen3RendererConfig` | - | - |
|
|
29
30
|
| Qwen3.5 | `Qwen35RendererConfig` | `enable_thinking`, `add_vision_id` | `image_cache_max` |
|
|
30
31
|
| Qwen3.6 | `Qwen36RendererConfig` | `enable_thinking`, `add_vision_id`, `preserve_thinking` | `image_cache_max` |
|
|
31
32
|
| Qwen3-VL | `Qwen3VLRendererConfig` | `add_vision_id` | `image_cache_max` |
|
|
@@ -136,6 +137,7 @@ the knobs its template actually exposes:
|
|
|
136
137
|
| DeepSeek R1 | `template` |
|
|
137
138
|
| MiniMax M2 | `tool_cycle` |
|
|
138
139
|
| DeepSeek V3, Qwen3-VL, Kimi K2, Laguna XS.2 / XS-2.1, Llama 3 | `all` |
|
|
140
|
+
| PrimeIntellect Qwen3 | `all` |
|
|
139
141
|
|
|
140
142
|
Config construction raises when an explicit template knob directly contradicts
|
|
141
143
|
an explicit generic bridge policy. For example:
|
|
@@ -60,6 +60,7 @@ from renderers.configs import (
|
|
|
60
60
|
MiniMaxM2RendererConfig,
|
|
61
61
|
Nemotron3RendererConfig,
|
|
62
62
|
Nemotron3UltraRendererConfig,
|
|
63
|
+
PrimeQwen3RendererConfig,
|
|
63
64
|
Qwen35RendererConfig,
|
|
64
65
|
Qwen36RendererConfig,
|
|
65
66
|
Qwen3RendererConfig,
|
|
@@ -95,6 +96,7 @@ _LAZY_RENDERERS: dict[str, str] = {
|
|
|
95
96
|
"MiniMaxM2Renderer": "renderers.minimax_m2",
|
|
96
97
|
"Nemotron3Renderer": "renderers.nemotron3",
|
|
97
98
|
"Nemotron3UltraRenderer": "renderers.nemotron3",
|
|
99
|
+
"PrimeQwen3Renderer": "renderers.prime_qwen3",
|
|
98
100
|
"Qwen35Renderer": "renderers.qwen35",
|
|
99
101
|
"Qwen36Renderer": "renderers.qwen36",
|
|
100
102
|
"Qwen3Renderer": "renderers.qwen3",
|
|
@@ -163,6 +165,8 @@ __all__ = [
|
|
|
163
165
|
"ParsedResponse",
|
|
164
166
|
"ParsedToolCall",
|
|
165
167
|
"PlaceholderRange",
|
|
168
|
+
"PrimeQwen3Renderer",
|
|
169
|
+
"PrimeQwen3RendererConfig",
|
|
166
170
|
"Qwen35Renderer",
|
|
167
171
|
"Qwen35RendererConfig",
|
|
168
172
|
"Qwen36Renderer",
|
|
@@ -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.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, 8, '
|
|
21
|
+
__version__ = version = '0.1.8.dev57'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 8, 'dev57')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -999,6 +999,10 @@ MODEL_RENDERER_MAP: dict[str, str] = {
|
|
|
999
999
|
"Qwen/Qwen3-30B-A3B-Instruct-2507": "qwen3",
|
|
1000
1000
|
"Qwen/Qwen3-30B-A3B-Thinking-2507": "qwen3",
|
|
1001
1001
|
"Qwen/Qwen3-235B-A22B": "qwen3",
|
|
1002
|
+
# PrimeIntellect Qwen3 — both sizes share the same Qwen3-Coder-style
|
|
1003
|
+
# template with XML tool definitions and calls.
|
|
1004
|
+
"PrimeIntellect/Qwen3-0.6B": "prime-qwen3",
|
|
1005
|
+
"PrimeIntellect/Qwen3-1.7B": "prime-qwen3",
|
|
1002
1006
|
# Qwen3.5. All seven sizes share the same renderer. The 4B / 9B /
|
|
1003
1007
|
# 35B-A3B / 122B-A10B / 397B-A17B chat template defaults
|
|
1004
1008
|
# ``enable_thinking=true`` (open ``<think>\n`` at the gen prompt);
|
|
@@ -1315,6 +1319,7 @@ def _populate_registry():
|
|
|
1315
1319
|
from renderers.llama_3 import Llama3Renderer
|
|
1316
1320
|
from renderers.minimax_m2 import MiniMaxM2Renderer
|
|
1317
1321
|
from renderers.nemotron3 import Nemotron3Renderer, Nemotron3UltraRenderer
|
|
1322
|
+
from renderers.prime_qwen3 import PrimeQwen3Renderer
|
|
1318
1323
|
from renderers.qwen3 import Qwen3Renderer
|
|
1319
1324
|
from renderers.qwen3_vl import Qwen3VLRenderer
|
|
1320
1325
|
from renderers.qwen35 import Qwen35Renderer
|
|
@@ -1324,6 +1329,7 @@ def _populate_registry():
|
|
|
1324
1329
|
{
|
|
1325
1330
|
"default": DefaultRenderer,
|
|
1326
1331
|
"qwen3": Qwen3Renderer,
|
|
1332
|
+
"prime-qwen3": PrimeQwen3Renderer,
|
|
1327
1333
|
"qwen3-vl": Qwen3VLRenderer,
|
|
1328
1334
|
"qwen3.5": Qwen35Renderer,
|
|
1329
1335
|
"qwen3.6": Qwen36Renderer,
|
|
@@ -181,6 +181,12 @@ class Qwen3RendererConfig(BaseRendererConfig):
|
|
|
181
181
|
``enable_thinking`` kwarg."""
|
|
182
182
|
|
|
183
183
|
|
|
184
|
+
class PrimeQwen3RendererConfig(BaseRendererConfig):
|
|
185
|
+
"""PrimeIntellect Qwen3 renderer config."""
|
|
186
|
+
|
|
187
|
+
name: Literal["prime-qwen3"] = "prime-qwen3"
|
|
188
|
+
|
|
189
|
+
|
|
184
190
|
class Qwen35RendererConfig(BaseRendererConfig):
|
|
185
191
|
"""Qwen3.5 renderer config."""
|
|
186
192
|
|
|
@@ -649,6 +655,7 @@ RendererConfig = Annotated[
|
|
|
649
655
|
AutoRendererConfig,
|
|
650
656
|
DefaultRendererConfig,
|
|
651
657
|
Qwen3RendererConfig,
|
|
658
|
+
PrimeQwen3RendererConfig,
|
|
652
659
|
Qwen35RendererConfig,
|
|
653
660
|
Qwen36RendererConfig,
|
|
654
661
|
Qwen3VLRendererConfig,
|
|
@@ -688,6 +695,7 @@ _CONFIG_BY_NAME: dict[str, type[BaseRendererConfig]] = {
|
|
|
688
695
|
"auto": AutoRendererConfig,
|
|
689
696
|
"default": DefaultRendererConfig,
|
|
690
697
|
"qwen3": Qwen3RendererConfig,
|
|
698
|
+
"prime-qwen3": PrimeQwen3RendererConfig,
|
|
691
699
|
"qwen3.5": Qwen35RendererConfig,
|
|
692
700
|
"qwen3.6": Qwen36RendererConfig,
|
|
693
701
|
"qwen3-vl": Qwen3VLRendererConfig,
|
|
@@ -752,6 +760,7 @@ __all__ = [
|
|
|
752
760
|
"MiniMaxM2RendererConfig",
|
|
753
761
|
"Nemotron3RendererConfig",
|
|
754
762
|
"Nemotron3UltraRendererConfig",
|
|
763
|
+
"PrimeQwen3RendererConfig",
|
|
755
764
|
"Qwen35RendererConfig",
|
|
756
765
|
"Qwen36RendererConfig",
|
|
757
766
|
"Qwen3RendererConfig",
|