renderers 0.1.7__tar.gz → 0.1.8.dev0__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.7 → renderers-0.1.8.dev0}/.github/workflows/publish.yml +4 -15
- {renderers-0.1.7 → renderers-0.1.8.dev0}/.gitignore +2 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/PKG-INFO +1 -1
- {renderers-0.1.7 → renderers-0.1.8.dev0}/pyproject.toml +25 -2
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/__init__.py +9 -0
- renderers-0.1.8.dev0/renderers/_version.py +24 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/client.py +9 -2
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/kimi_k25.py +1 -1
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/qwen35.py +1 -1
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/qwen3_vl.py +1 -1
- {renderers-0.1.7 → renderers-0.1.8.dev0}/.github/workflows/style.yml +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/.github/workflows/test.yml +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/.pre-commit-config.yaml +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/README.md +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/examples/README.md +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/examples/sglang/multiturn_generate_sglang.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/examples/tinker/multiturn_generate_tinker.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/examples/transformers/multiturn_generate_transformers.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/examples/vllm/multiturn_generate_vllm.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/base.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/deepseek_v3.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/default.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/glm45.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/glm5.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/gpt_oss.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/kimi_k2.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/minimax_m2.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/nemotron3.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/parsers.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/parsing.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/qwen3.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/renderers/qwen36.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/conftest.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_bridge.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_build_helpers.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_client.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_gpt_oss_harmony_parity.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_incremental.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_load_tokenizer.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_message_indices.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_multimodal.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_parse_response.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_parse_response_robustness.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_parsers.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_preserve_thinking.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_qwen35_size_coverage.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_render_ids.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/tests/test_roundtrip.py +0 -0
- {renderers-0.1.7 → renderers-0.1.8.dev0}/uv.lock +0 -0
|
@@ -41,6 +41,10 @@ jobs:
|
|
|
41
41
|
TAG="$PUSHED_REF"
|
|
42
42
|
fi
|
|
43
43
|
|
|
44
|
+
# The package version is derived from this tag by hatch-vcs
|
|
45
|
+
# at build time (see [tool.hatch.version] in pyproject.toml).
|
|
46
|
+
# We only need to validate the tag shape — there's no
|
|
47
|
+
# ``project.version`` field to cross-check anymore.
|
|
44
48
|
case "$TAG" in
|
|
45
49
|
renderers-v*) ;;
|
|
46
50
|
*)
|
|
@@ -49,21 +53,6 @@ jobs:
|
|
|
49
53
|
;;
|
|
50
54
|
esac
|
|
51
55
|
|
|
52
|
-
VERSION="${TAG#renderers-v}"
|
|
53
|
-
FILE_VERSION=$(python - <<'PY'
|
|
54
|
-
import tomllib
|
|
55
|
-
from pathlib import Path
|
|
56
|
-
with Path('pyproject.toml').open('rb') as f:
|
|
57
|
-
data = tomllib.load(f)
|
|
58
|
-
print(data['project']['version'])
|
|
59
|
-
PY
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
if [ "$FILE_VERSION" != "$VERSION" ]; then
|
|
63
|
-
echo "Version mismatch: tag requests '$VERSION' but pyproject.toml defines '$FILE_VERSION'" >&2
|
|
64
|
-
exit 1
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
56
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
|
68
57
|
|
|
69
58
|
- uses: astral-sh/setup-uv@v7
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["hatchling"]
|
|
2
|
+
requires = ["hatchling", "hatch-vcs"]
|
|
3
3
|
build-backend = "hatchling.build"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "renderers"
|
|
7
|
-
|
|
7
|
+
# Derived from git tags by hatch-vcs (see [tool.hatch.version] below).
|
|
8
|
+
# Untagged commits get PEP 440 dev versions like ``0.1.8.dev3+g4c877be4``
|
|
9
|
+
# so any commit is uniquely installable; tagged commits get clean
|
|
10
|
+
# release versions like ``0.1.8``.
|
|
11
|
+
dynamic = ["version"]
|
|
8
12
|
description = "Chat template renderers — deterministic message-to-token conversion for LLM training"
|
|
9
13
|
readme = "README.md"
|
|
10
14
|
requires-python = ">=3.10,<3.14"
|
|
@@ -20,6 +24,25 @@ dependencies = [
|
|
|
20
24
|
"openai-harmony>=0.0.8",
|
|
21
25
|
]
|
|
22
26
|
|
|
27
|
+
[tool.hatch.version]
|
|
28
|
+
source = "vcs"
|
|
29
|
+
# Tags look like ``renderers-v0.1.8`` (prefix matches the publish.yml
|
|
30
|
+
# release contract); strip the prefix to get a PEP 440 version. The
|
|
31
|
+
# regex accepts any PEP 440-valid suffix after the prefix so we can
|
|
32
|
+
# tag pre-releases like ``renderers-v0.2.0rc1`` later if needed.
|
|
33
|
+
tag-pattern = '^renderers-v(?P<version>.+)$'
|
|
34
|
+
# Used when building from a context without VCS metadata (e.g. an
|
|
35
|
+
# sdist consumed by a downstream that doesn't ship .git). Real
|
|
36
|
+
# builds from a checkout get the resolved version; this fallback
|
|
37
|
+
# only fires when the resolver has nothing to go on.
|
|
38
|
+
fallback-version = "0.0.0"
|
|
39
|
+
|
|
40
|
+
[tool.hatch.build.hooks.vcs]
|
|
41
|
+
# Write the resolved version to a Python file so it can be inspected
|
|
42
|
+
# at runtime via ``renderers.__version__`` without re-parsing the
|
|
43
|
+
# wheel metadata.
|
|
44
|
+
version-file = "renderers/_version.py"
|
|
45
|
+
|
|
23
46
|
[tool.hatch.build.targets.wheel]
|
|
24
47
|
packages = ["renderers"]
|
|
25
48
|
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
try:
|
|
2
|
+
from renderers._version import __version__
|
|
3
|
+
except ImportError:
|
|
4
|
+
# Source checkout without a built artifact (e.g. editable install
|
|
5
|
+
# before the first ``uv build`` populates ``_version.py``). Real
|
|
6
|
+
# installs always have it.
|
|
7
|
+
__version__ = "0+unknown"
|
|
8
|
+
|
|
1
9
|
from renderers.base import (
|
|
2
10
|
Content,
|
|
3
11
|
ContentPart,
|
|
@@ -73,6 +81,7 @@ __all__ = [
|
|
|
73
81
|
"ToolCallFunction",
|
|
74
82
|
"ToolSpec",
|
|
75
83
|
"VideoPart",
|
|
84
|
+
"__version__",
|
|
76
85
|
"build_training_sample",
|
|
77
86
|
"build_trajectory_step",
|
|
78
87
|
"create_renderer",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '0.1.8.dev0'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 8, 'dev0')
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|
|
@@ -263,8 +263,15 @@ def _build_qwen_vl_features(
|
|
|
263
263
|
|
|
264
264
|
image_items = mm_data.mm_items.get("image") or []
|
|
265
265
|
if image_items:
|
|
266
|
-
|
|
267
|
-
|
|
266
|
+
# mm_items now ship numpy arrays (the renderer is torch-free);
|
|
267
|
+
# convert at this vLLM-glue boundary where torch is already a
|
|
268
|
+
# hard dependency.
|
|
269
|
+
pixel_values = torch.cat(
|
|
270
|
+
[torch.as_tensor(it["pixel_values"]) for it in image_items], dim=0
|
|
271
|
+
)
|
|
272
|
+
image_grid_thw = torch.cat(
|
|
273
|
+
[torch.as_tensor(it["image_grid_thw"]) for it in image_items], dim=0
|
|
274
|
+
)
|
|
268
275
|
hf_inputs = BatchFeature(
|
|
269
276
|
data={"pixel_values": pixel_values, "image_grid_thw": image_grid_thw}
|
|
270
277
|
)
|
|
@@ -621,7 +621,7 @@ class KimiK25Renderer:
|
|
|
621
621
|
img_proc = proc.image_processor
|
|
622
622
|
# Kimi's vision processor takes a media-dict shape, not raw PIL.
|
|
623
623
|
media_item = {"type": "image", "image": pil}
|
|
624
|
-
out = img_proc.preprocess([media_item], return_tensors="
|
|
624
|
+
out = img_proc.preprocess([media_item], return_tensors="np")
|
|
625
625
|
# Patch count via the processor's own calculator (matches the
|
|
626
626
|
# model's per-patch attention count); kept for debugging.
|
|
627
627
|
num_patches = int(img_proc.media_tokens_calculator(media_item))
|
|
@@ -182,7 +182,7 @@ class Qwen35Renderer:
|
|
|
182
182
|
out, num_image_tokens = cached
|
|
183
183
|
return pil, out, num_image_tokens, h
|
|
184
184
|
proc = self._get_processor()
|
|
185
|
-
out = proc.image_processor(images=[pil], return_tensors="
|
|
185
|
+
out = proc.image_processor(images=[pil], return_tensors="np")
|
|
186
186
|
grid_thw = out["image_grid_thw"][0]
|
|
187
187
|
merge_size = proc.image_processor.merge_size
|
|
188
188
|
num_image_tokens = int(grid_thw.prod()) // (merge_size * merge_size)
|
|
@@ -357,7 +357,7 @@ class Qwen3VLRenderer:
|
|
|
357
357
|
out, num_image_tokens = cached
|
|
358
358
|
return pil, out, num_image_tokens, h
|
|
359
359
|
proc = self._get_processor()
|
|
360
|
-
out = proc.image_processor(images=[pil], return_tensors="
|
|
360
|
+
out = proc.image_processor(images=[pil], return_tensors="np")
|
|
361
361
|
grid_thw = out["image_grid_thw"][0]
|
|
362
362
|
merge_size = proc.image_processor.merge_size
|
|
363
363
|
num_image_tokens = int(grid_thw.prod()) // (merge_size * merge_size)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{renderers-0.1.7 → renderers-0.1.8.dev0}/examples/transformers/multiturn_generate_transformers.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
|