renderers 0.1.8.dev49__tar.gz → 0.1.8.dev50__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.
Files changed (71) hide show
  1. renderers-0.1.8.dev50/.github/workflows/publish-dev.yml +67 -0
  2. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/PKG-INFO +1 -1
  3. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/pyproject.toml +16 -0
  4. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/_version.py +2 -2
  5. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/uv.lock +2 -2
  6. renderers-0.1.8.dev49/.github/workflows/publish-dev.yml +0 -104
  7. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/.github/workflows/publish.yml +0 -0
  8. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/.github/workflows/style.yml +0 -0
  9. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/.github/workflows/test.yml +0 -0
  10. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/.gitignore +0 -0
  11. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/.pre-commit-config.yaml +0 -0
  12. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/LICENSE +0 -0
  13. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/README.md +0 -0
  14. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/docs/renderer-config.md +0 -0
  15. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/README.md +0 -0
  16. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/sglang/multiturn_generate_sglang.py +0 -0
  17. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/sglang/online_multiturn_sglang.py +0 -0
  18. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/tinker/multiturn_generate_tinker.py +0 -0
  19. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/transformers/multiturn_generate_transformers.py +0 -0
  20. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/examples/vllm/multiturn_generate_vllm.py +0 -0
  21. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/__init__.py +0 -0
  22. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/base.py +0 -0
  23. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/client.py +0 -0
  24. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/configs.py +0 -0
  25. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/deepseek_r1.py +0 -0
  26. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/deepseek_v3.py +0 -0
  27. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/default.py +0 -0
  28. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/glm45.py +0 -0
  29. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/glm5.py +0 -0
  30. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/gpt_oss.py +0 -0
  31. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/kimi_k2.py +0 -0
  32. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/kimi_k25.py +0 -0
  33. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/laguna_xs2.py +0 -0
  34. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/llama_3.py +0 -0
  35. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/minimax_m2.py +0 -0
  36. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/nemotron3.py +0 -0
  37. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/parsers.py +0 -0
  38. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/parsing.py +0 -0
  39. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/qwen3.py +0 -0
  40. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/qwen35.py +0 -0
  41. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/qwen36.py +0 -0
  42. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/renderers/qwen3_vl.py +0 -0
  43. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/conftest.py +0 -0
  44. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_bridge.py +0 -0
  45. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_build_helpers.py +0 -0
  46. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_client.py +0 -0
  47. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_deepseek_r1.py +0 -0
  48. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_gpt_oss_harmony_parity.py +0 -0
  49. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_incremental.py +0 -0
  50. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_is_content.py +0 -0
  51. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_kimi_k25_tool_schema.py +0 -0
  52. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_llama_3.py +0 -0
  53. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_load_tokenizer.py +0 -0
  54. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_load_tokenizer_fastokens.py +0 -0
  55. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_message_indices.py +0 -0
  56. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_message_tool_names.py +0 -0
  57. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_multimodal.py +0 -0
  58. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_nemotron3_parity.py +0 -0
  59. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_nemotron3_ultra.py +0 -0
  60. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_parse_response.py +0 -0
  61. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_parse_response_robustness.py +0 -0
  62. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_parsers.py +0 -0
  63. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_preserve_thinking.py +0 -0
  64. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_qwen35_size_coverage.py +0 -0
  65. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_render_ids.py +0 -0
  66. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_renderer_config.py +0 -0
  67. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_renderer_config_parity.py +0 -0
  68. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_roundtrip.py +0 -0
  69. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_sampled_mask.py +0 -0
  70. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_tokens_per_message.py +0 -0
  71. {renderers-0.1.8.dev49 → renderers-0.1.8.dev50}/tests/test_tool_arg_type_preservation.py +0 -0
@@ -0,0 +1,67 @@
1
+ name: Publish Dev
2
+
3
+ # Every push to main publishes a pre-release wheel to PyPI. The version
4
+ # is derived at build time by hatch-vcs from ``git describe`` distance
5
+ # to the latest stable ``renderers-v<MAJOR>.<MINOR>.<PATCH>`` tag (see
6
+ # ``[tool.hatch.version.raw-options]`` in pyproject.toml) — no per-commit
7
+ # tag is created. ``local_scheme = "no-local-version"`` strips the
8
+ # ``+gHASH`` segment so PyPI accepts the wheel directly.
9
+
10
+ on:
11
+ push:
12
+ branches: [main]
13
+
14
+ concurrency:
15
+ group: publish-dev-${{ github.ref }}
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ # Build (no OIDC) → publish (OIDC only). The build job runs ``uv build``
20
+ # with ``contents: read`` only so a poisoned build-time dep cannot mint
21
+ # the OIDC token. The publish job has ``id-token: write`` and the
22
+ # pypi-prod environment but no source checkout — it only downloads the
23
+ # prebuilt artifact and runs the SHA-pinned pypa publish action.
24
+ build:
25
+ runs-on: ubuntu-latest
26
+ permissions:
27
+ contents: read
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ with:
31
+ # hatch-vcs needs the full tag history to resolve the version
32
+ # from the latest stable tag's distance.
33
+ fetch-depth: 0
34
+
35
+ - uses: astral-sh/setup-uv@v7
36
+
37
+ - name: Build renderers
38
+ run: uv build
39
+
40
+ - name: Show derived version
41
+ run: ls -1 dist/
42
+
43
+ - name: Upload dist artifacts
44
+ uses: actions/upload-artifact@v4
45
+ with:
46
+ name: dist-dev
47
+ path: dist/
48
+ if-no-files-found: error
49
+ retention-days: 7
50
+
51
+ publish:
52
+ needs: build
53
+ runs-on: ubuntu-latest
54
+ environment: pypi-prod
55
+ permissions:
56
+ id-token: write
57
+ steps:
58
+ - name: Download dist artifacts
59
+ uses: actions/download-artifact@v4
60
+ with:
61
+ name: dist-dev
62
+ path: dist/
63
+
64
+ - name: Publish to PyPI
65
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
66
+ with:
67
+ skip-existing: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: renderers
3
- Version: 0.1.8.dev49
3
+ Version: 0.1.8.dev50
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
@@ -57,6 +57,22 @@ tag-pattern = '^renderers-v(?P<version>.+)$'
57
57
  # only fires when the resolver has nothing to go on.
58
58
  fallback-version = "0.0.0"
59
59
 
60
+ [tool.hatch.version.raw-options]
61
+ # Only stable ``renderers-v<MAJOR>.<MINOR>.<PATCH>`` tags participate in
62
+ # version resolution; legacy per-commit ``.devN`` tags are excluded.
63
+ # Untagged commits get a clean PEP 440 dev version derived from distance
64
+ # to the latest stable tag (e.g. ``0.1.8.dev46``), with no ``+gHASH``
65
+ # local segment so PyPI accepts the wheel directly. setuptools-scm
66
+ # refuses to bump a pre-existing ``.devN`` tag, so matching only stable
67
+ # tags also unblocks local ``uv lock`` / ``uv build`` on untagged
68
+ # branches. Mirrors verifiers' setup.
69
+ local_scheme = "no-local-version"
70
+ git_describe_command = [
71
+ "git", "describe", "--tags", "--long",
72
+ "--match", "renderers-v[0-9]*.[0-9]*.[0-9]*",
73
+ "--exclude", "*dev*",
74
+ ]
75
+
60
76
  [tool.hatch.build.hooks.vcs]
61
77
  # Write the resolved version to a Python file so it can be inspected
62
78
  # at runtime via ``renderers.__version__`` without re-parsing the
@@ -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.dev49'
22
- __version_tuple__ = version_tuple = (0, 1, 8, 'dev49')
21
+ __version__ = version = '0.1.8.dev50'
22
+ __version_tuple__ = version_tuple = (0, 1, 8, 'dev50')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -9,7 +9,7 @@ resolution-markers = [
9
9
  ]
10
10
 
11
11
  [options]
12
- exclude-newer = "2026-05-18T21:42:54.18041997Z"
12
+ exclude-newer = "2026-06-19T02:55:59.889910839Z"
13
13
  exclude-newer-span = "P7D"
14
14
 
15
15
  [options.exclude-newer-package]
@@ -1409,7 +1409,7 @@ requires-dist = [
1409
1409
  { name = "jinja2" },
1410
1410
  { name = "numpy" },
1411
1411
  { name = "openai", specifier = ">=1.108.1" },
1412
- { name = "openai-harmony", specifier = ">=0.0.8" },
1412
+ { name = "openai-harmony", specifier = ">=0.0.4" },
1413
1413
  { name = "prime-pydantic-config", specifier = ">=0.3.0.dev83" },
1414
1414
  { name = "tiktoken" },
1415
1415
  { name = "transformers", specifier = ">=4.50.0" },
@@ -1,104 +0,0 @@
1
- name: Publish Dev
2
-
3
- # Tag every commit on main as ``renderers-v<next>.dev<N>`` and publish the
4
- # wheel to PyPI as a pre-release. ``<next>`` is the latest release tag with
5
- # its patch bumped; ``<N>`` is the number of commits since that release so
6
- # each main commit maps to a unique PEP 440 dev version.
7
- #
8
- # Building from the freshly-created tag means hatch-vcs resolves the version
9
- # cleanly (no ``+gHASH`` local segment), which PyPI requires.
10
-
11
- on:
12
- push:
13
- branches: [main]
14
-
15
- concurrency:
16
- group: publish-dev-${{ github.ref }}
17
- cancel-in-progress: false
18
-
19
- jobs:
20
- tag:
21
- runs-on: ubuntu-latest
22
- permissions:
23
- contents: write
24
- outputs:
25
- tag: ${{ steps.compute.outputs.tag }}
26
- steps:
27
- - uses: actions/checkout@v4
28
- with:
29
- fetch-depth: 0
30
-
31
- - name: Compute next dev tag
32
- id: compute
33
- run: |
34
- set -euo pipefail
35
- LATEST_RELEASE=$(git tag --list 'renderers-v*' --sort=-v:refname \
36
- | grep -Ev '(dev|rc|a[0-9]|b[0-9])' \
37
- | head -1)
38
- if [ -z "$LATEST_RELEASE" ]; then
39
- echo "No release tag matching 'renderers-v<MAJOR.MINOR.PATCH>' found" >&2
40
- exit 1
41
- fi
42
- BASE=${LATEST_RELEASE#renderers-v}
43
- MAJOR=$(echo "$BASE" | cut -d. -f1)
44
- MINOR=$(echo "$BASE" | cut -d. -f2)
45
- PATCH=$(echo "$BASE" | cut -d. -f3)
46
- NEXT="${MAJOR}.${MINOR}.$((PATCH + 1))"
47
- N=$(git rev-list --count "${LATEST_RELEASE}..HEAD")
48
- TAG="renderers-v${NEXT}.dev${N}"
49
- echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
50
- echo "Computed tag: ${TAG} (base=${LATEST_RELEASE}, commits=${N})"
51
-
52
- - name: Create and push tag
53
- env:
54
- TAG: ${{ steps.compute.outputs.tag }}
55
- run: |
56
- set -euo pipefail
57
- if git ls-remote --exit-code --tags origin "refs/tags/${TAG}" >/dev/null 2>&1; then
58
- echo "Tag ${TAG} already exists on origin — nothing to do" >&2
59
- exit 0
60
- fi
61
- git config user.name 'github-actions[bot]'
62
- git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
63
- git tag -a "$TAG" -m "Automated dev release ${TAG}"
64
- git push origin "$TAG"
65
-
66
- build:
67
- needs: tag
68
- runs-on: ubuntu-latest
69
- permissions:
70
- contents: read
71
- steps:
72
- - uses: actions/checkout@v4
73
- with:
74
- fetch-depth: 0
75
- ref: refs/tags/${{ needs.tag.outputs.tag }}
76
-
77
- - uses: astral-sh/setup-uv@v7
78
-
79
- - name: Build renderers
80
- run: uv build
81
-
82
- - name: Upload dist artifacts
83
- uses: actions/upload-artifact@v4
84
- with:
85
- name: dist-dev
86
- path: dist/
87
- if-no-files-found: error
88
- retention-days: 7
89
-
90
- publish:
91
- needs: build
92
- runs-on: ubuntu-latest
93
- environment: pypi-prod
94
- permissions:
95
- id-token: write
96
- steps:
97
- - name: Download dist artifacts
98
- uses: actions/download-artifact@v4
99
- with:
100
- name: dist-dev
101
- path: dist/
102
-
103
- - name: Publish to PyPI
104
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
File without changes