renderers 0.1.10.dev15__tar.gz → 0.1.11.dev1__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.10.dev15 → renderers-0.1.11.dev1}/PKG-INFO +1 -1
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/_version.py +2 -2
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/base.py +2 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/qwen35.py +1 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/conftest.py +1 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_bridge.py +1 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_client.py +2 -1
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_disabled_thinking_stability.py +4 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_qwen38.py +18 -12
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_renderer_config_parity.py +1 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_roundtrip.py +1 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.github/workflows/publish-dev.yml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.github/workflows/publish.yml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.github/workflows/style.yml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.github/workflows/test.yml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.gitignore +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/.pre-commit-config.yaml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/LICENSE +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/README.md +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/docs/renderer-config.md +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/README.md +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/sglang/multiturn_generate_sglang.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/sglang/online_multiturn_sglang.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/tinker/multiturn_generate_tinker.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/transformers/multiturn_generate_transformers.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/examples/vllm/multiturn_generate_vllm.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/pyproject.toml +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/__init__.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/client.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/configs.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/deepseek_r1.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/deepseek_v3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/default.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/gemma4.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/glm45.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/glm5.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/gpt_oss.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/hy3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/inkling.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/kimi_k2.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/kimi_k25.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/laguna_s21.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/laguna_xs2.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/llama_3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/minimax_m2.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/nemotron3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/parsers.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/parsing.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/prime_qwen3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/qwen3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/qwen36.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/qwen38.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/renderers/qwen3_vl.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_build_helpers.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_deepseek_r1.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_gemma4.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_glm_tool_name_validation.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_gpt_oss_harmony_parity.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_hy3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_incremental.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_inkling.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_is_content.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_kimi_k25_tool_schema.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_laguna_m1.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_laguna_s21.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_laguna_xs21.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_llama_3.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_load_tokenizer.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_message_indices.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_message_tool_names.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_multimodal.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_nemotron3_parity.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_nemotron3_ultra.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_parse_response.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_parse_response_robustness.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_parsers.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_preserve_thinking.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_prime_qwen3_parity.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_qwen35_size_coverage.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_render_ids.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_renderer_config.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_sampled_mask.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_tokens_per_message.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/tests/test_tool_arg_type_preservation.py +0 -0
- {renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
21
|
+
__version__ = version = '0.1.11.dev1'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 11, 'dev1')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1033,6 +1033,7 @@ MODEL_RENDERER_MAP: dict[str, str] = {
|
|
|
1033
1033
|
"Qwen/Qwen3.6-35B-A3B": "qwen3.6",
|
|
1034
1034
|
# Qwen3.8.
|
|
1035
1035
|
"Qwen/Qwen3.8-27B": "qwen3.8",
|
|
1036
|
+
"Qwen/Qwen3.8-Flash-Next": "qwen3.8",
|
|
1036
1037
|
# Qwen3-VL.
|
|
1037
1038
|
"Qwen/Qwen3-VL-4B-Instruct": "qwen3-vl",
|
|
1038
1039
|
"Qwen/Qwen3-VL-8B-Instruct": "qwen3-vl",
|
|
@@ -1140,6 +1141,7 @@ MULTIMODAL_MODELS: dict[str, set[str]] = {
|
|
|
1140
1141
|
"Qwen/Qwen3.6-35B-A3B": {"image"},
|
|
1141
1142
|
# Qwen3.8 adds reasoning-effort control and preserves thinking by default.
|
|
1142
1143
|
"Qwen/Qwen3.8-27B": {"image"},
|
|
1144
|
+
"Qwen/Qwen3.8-Flash-Next": {"image"},
|
|
1143
1145
|
# Kimi K2.5 / K2.6 are unified VLMs (HF tag ``image-text-to-text``)
|
|
1144
1146
|
# with custom processor (``KimiK25Processor`` + ``KimiK25VisionProcessor``).
|
|
1145
1147
|
# Vision wrap is different from Qwen-VL:
|
|
@@ -23,6 +23,7 @@ RENDERER_MODELS = [
|
|
|
23
23
|
("Qwen/Qwen3.5-9B", "auto"),
|
|
24
24
|
("Qwen/Qwen3.6-35B-A3B", "auto"),
|
|
25
25
|
("Qwen/Qwen3.8-27B", "auto"),
|
|
26
|
+
("Qwen/Qwen3.8-Flash-Next", "auto"),
|
|
26
27
|
("Qwen/Qwen3-VL-4B-Instruct", "auto"),
|
|
27
28
|
("google/gemma-4-31B-it", "auto"),
|
|
28
29
|
("zai-org/GLM-5", "auto"),
|
|
@@ -27,6 +27,7 @@ _BRIDGE_MODELS = [
|
|
|
27
27
|
("Qwen/Qwen3.5-9B", "auto"),
|
|
28
28
|
("Qwen/Qwen3.6-35B-A3B", "auto"),
|
|
29
29
|
("Qwen/Qwen3.8-27B", "auto"),
|
|
30
|
+
("Qwen/Qwen3.8-Flash-Next", "auto"),
|
|
30
31
|
("google/gemma-4-31B-it", "auto"),
|
|
31
32
|
("thinkingmachines/Inkling", "auto"),
|
|
32
33
|
("thinkingmachines/Inkling-Small", "auto"),
|
|
@@ -385,8 +385,9 @@ def test_generate_threads_prompt_attribution_through_prebuilt_prompt_path():
|
|
|
385
385
|
("Qwen/Qwen3-VL-4B-Instruct", "renderers.qwen3_vl:Qwen3VLRenderer"),
|
|
386
386
|
("Qwen/Qwen3.5-2B", "renderers.qwen35:Qwen35Renderer"),
|
|
387
387
|
("Qwen/Qwen3.8-27B", "renderers.qwen38:Qwen38Renderer"),
|
|
388
|
+
("Qwen/Qwen3.8-Flash-Next", "renderers.qwen38:Qwen38Renderer"),
|
|
388
389
|
],
|
|
389
|
-
ids=["qwen3_vl", "qwen35", "qwen38"],
|
|
390
|
+
ids=["qwen3_vl", "qwen35", "qwen38", "qwen38_flash_next"],
|
|
390
391
|
)
|
|
391
392
|
def test_generate_serializes_multimodal_features_for_qwen_vl_family(
|
|
392
393
|
model_id, renderer_class_path
|
|
@@ -45,6 +45,10 @@ _MODELS = [
|
|
|
45
45
|
"Qwen/Qwen3.8-27B",
|
|
46
46
|
Qwen38RendererConfig(enable_thinking=False),
|
|
47
47
|
),
|
|
48
|
+
(
|
|
49
|
+
"Qwen/Qwen3.8-Flash-Next",
|
|
50
|
+
Qwen38RendererConfig(enable_thinking=False),
|
|
51
|
+
),
|
|
48
52
|
(
|
|
49
53
|
"google/gemma-4-26B-A4B-it",
|
|
50
54
|
Gemma4RendererConfig(enable_thinking=False),
|
|
@@ -31,10 +31,12 @@ TOOLS = [
|
|
|
31
31
|
}
|
|
32
32
|
]
|
|
33
33
|
|
|
34
|
+
QWEN38_MODELS = ["Qwen/Qwen3.8-27B", "Qwen/Qwen3.8-Flash-Next"]
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
|
|
37
|
+
@lru_cache(maxsize=None)
|
|
38
|
+
def _qwen38(model_name):
|
|
39
|
+
tokenizer = load_tokenizer(model_name)
|
|
38
40
|
return tokenizer, create_renderer(tokenizer)
|
|
39
41
|
|
|
40
42
|
|
|
@@ -48,10 +50,11 @@ def _expected(tokenizer, messages, **kwargs):
|
|
|
48
50
|
return list(result)
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
@pytest.mark.parametrize("qwen38_model", QWEN38_MODELS)
|
|
54
|
+
def test_qwen38_is_registered_with_native_defaults(qwen38_model):
|
|
55
|
+
tokenizer, renderer = _qwen38(qwen38_model)
|
|
53
56
|
|
|
54
|
-
assert tokenizer.name_or_path ==
|
|
57
|
+
assert tokenizer.name_or_path == qwen38_model
|
|
55
58
|
assert MODEL_RENDERER_MAP[tokenizer.name_or_path] == "qwen3.8"
|
|
56
59
|
assert MULTIMODAL_MODELS[tokenizer.name_or_path] == {"image"}
|
|
57
60
|
assert isinstance(renderer, Qwen38Renderer)
|
|
@@ -86,8 +89,9 @@ def test_qwen38_config_discriminator():
|
|
|
86
89
|
pytest.param({"preserve_thinking": False}, id="drop-history-thinking"),
|
|
87
90
|
],
|
|
88
91
|
)
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
@pytest.mark.parametrize("qwen38_model", QWEN38_MODELS)
|
|
93
|
+
def test_qwen38_text_and_tool_parity(config_kwargs, qwen38_model):
|
|
94
|
+
tokenizer, _ = _qwen38(qwen38_model)
|
|
91
95
|
renderer = Qwen38Renderer(tokenizer, Qwen38RendererConfig(**config_kwargs))
|
|
92
96
|
cases = [
|
|
93
97
|
(
|
|
@@ -152,8 +156,9 @@ def test_qwen38_text_and_tool_parity(config_kwargs):
|
|
|
152
156
|
assert renderer.render_ids(messages, **render_kwargs) == expected
|
|
153
157
|
|
|
154
158
|
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
@pytest.mark.parametrize("qwen38_model", QWEN38_MODELS)
|
|
160
|
+
def test_qwen38_keeps_inline_think_markup_in_visible_content(qwen38_model):
|
|
161
|
+
tokenizer, renderer = _qwen38(qwen38_model)
|
|
157
162
|
messages = [
|
|
158
163
|
{"role": "user", "content": "Echo this."},
|
|
159
164
|
{
|
|
@@ -165,8 +170,9 @@ def test_qwen38_keeps_inline_think_markup_in_visible_content():
|
|
|
165
170
|
assert renderer.render_ids(messages) == _expected(tokenizer, messages)
|
|
166
171
|
|
|
167
172
|
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
@pytest.mark.parametrize("qwen38_model", QWEN38_MODELS)
|
|
174
|
+
def test_qwen38_requires_a_real_user_query(qwen38_model):
|
|
175
|
+
_, renderer = _qwen38(qwen38_model)
|
|
170
176
|
|
|
171
177
|
with pytest.raises(ValueError, match="No user query found"):
|
|
172
178
|
renderer.render_ids([{"role": "system", "content": "System only."}])
|
|
@@ -48,6 +48,7 @@ _RENDERER_MODELS = [
|
|
|
48
48
|
("Qwen/Qwen3.5-9B", "auto"),
|
|
49
49
|
("Qwen/Qwen3.6-35B-A3B", "auto"),
|
|
50
50
|
("Qwen/Qwen3.8-27B", "auto"),
|
|
51
|
+
("Qwen/Qwen3.8-Flash-Next", "auto"),
|
|
51
52
|
("google/gemma-4-31B-it", "auto"),
|
|
52
53
|
("zai-org/GLM-5", "auto"),
|
|
53
54
|
("zai-org/GLM-5.1", "auto"),
|
|
@@ -33,6 +33,7 @@ _ROUNDTRIP_MODELS = [
|
|
|
33
33
|
("Qwen/Qwen3.5-9B", "auto"),
|
|
34
34
|
("Qwen/Qwen3.6-35B-A3B", "auto"),
|
|
35
35
|
("Qwen/Qwen3.8-27B", "auto"),
|
|
36
|
+
("Qwen/Qwen3.8-Flash-Next", "auto"),
|
|
36
37
|
("Qwen/Qwen3-VL-4B-Instruct", "auto"),
|
|
37
38
|
("google/gemma-4-31B-it", "auto"),
|
|
38
39
|
("thinkingmachines/Inkling", "auto"),
|
|
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.10.dev15 → renderers-0.1.11.dev1}/examples/sglang/multiturn_generate_sglang.py
RENAMED
|
File without changes
|
|
File without changes
|
{renderers-0.1.10.dev15 → renderers-0.1.11.dev1}/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
|