Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions renderers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
KimiK25RendererConfig,
KimiK2RendererConfig,
LagunaXS2RendererConfig,
Llama3RendererConfig,
MiniMaxM2RendererConfig,
Nemotron3RendererConfig,
Qwen35RendererConfig,
Expand Down Expand Up @@ -82,6 +83,7 @@
"KimiK25Renderer": "renderers.kimi_k25",
"KimiK2Renderer": "renderers.kimi_k2",
"LagunaXS2Renderer": "renderers.laguna_xs2",
"Llama3Renderer": "renderers.llama_3",
"MiniMaxM2Renderer": "renderers.minimax_m2",
"Nemotron3Renderer": "renderers.nemotron3",
"Qwen35Renderer": "renderers.qwen35",
Expand Down Expand Up @@ -130,6 +132,8 @@ def __dir__() -> list[str]:
"KimiK2RendererConfig",
"LagunaXS2Renderer",
"LagunaXS2RendererConfig",
"Llama3Renderer",
"Llama3RendererConfig",
"MULTIMODAL_MODELS",
"Message",
"MiniMaxM2Renderer",
Expand Down
10 changes: 10 additions & 0 deletions renderers/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1040,6 +1040,14 @@ def bridge_to_next_turn(self, *args: Any, **kwargs: Any) -> "RenderedTokens | No
# Nemotron 3.
"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16": "nemotron-3",
"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16": "nemotron-3",
# Llama 3.2 (Instruct). Tested against the gated meta-llama repos and
# the unrestricted unsloth/... mirror, which ships a byte-identical
# chat template. ``Llama3Renderer`` defaults ``date_string`` to
# "26 Jul 2024" — matching the chat template's strftime fallback —
# so the renderer is reproducible. Pass ``date_string=...`` at
# construction to pin a different date.
"meta-llama/Llama-3.2-1B-Instruct": "llama-3",
"meta-llama/Llama-3.2-3B-Instruct": "llama-3",
# Poolside Laguna.
"poolside/Laguna-XS.2": "laguna-xs.2",
# GPT-OSS.
Expand Down Expand Up @@ -1329,6 +1337,7 @@ def _populate_registry():
from renderers.kimi_k2 import KimiK2Renderer
from renderers.kimi_k25 import KimiK25Renderer
from renderers.laguna_xs2 import LagunaXS2Renderer
from renderers.llama_3 import Llama3Renderer
from renderers.minimax_m2 import MiniMaxM2Renderer
from renderers.nemotron3 import Nemotron3Renderer
from renderers.qwen3 import Qwen3Renderer
Expand All @@ -1351,6 +1360,7 @@ def _populate_registry():
"kimi-k2": KimiK2Renderer,
"kimi-k2.5": KimiK25Renderer,
"laguna-xs.2": LagunaXS2Renderer,
"llama-3": Llama3Renderer,
"nemotron-3": Nemotron3Renderer,
"gpt-oss": GptOssRenderer,
}
Expand Down
28 changes: 28 additions & 0 deletions renderers/configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,31 @@ class LagunaXS2RendererConfig(BaseRendererConfig):
chat template's ``render_assistant_messages_raw`` gate."""


class Llama3RendererConfig(BaseRendererConfig):
"""Llama-3.x Instruct renderer config.

Llama-3 ships no reasoning channel, so the base ``preserve_*_thinking``
flags don't apply: ``Llama3Renderer`` raises ``NotImplementedError``
if either is set (matching ``DefaultRenderer``'s contract for the
same case). Both fields below mirror real ``apply_chat_template``
kwargs.
"""

name: Literal["llama-3"] = "llama-3"

date_string: str = "26 Jul 2024"
"""``Today Date`` value injected into the system preamble. Pinned to
the chat template's ``strftime`` fallback by default so output stays
deterministic; override per instance for production runs that want
today's date. Mirrors the chat template's ``date_string`` kwarg."""

tools_in_user_message: bool = True
"""When ``True`` (default), tool descriptions + JSON signatures inject
into the first user message; ``False`` routes them into the system
block instead. Mirrors the chat template's ``tools_in_user_message``
kwarg."""


class MiniMaxM2RendererConfig(BaseRendererConfig):
"""MiniMax M2 / M2.5 renderer config."""

Expand Down Expand Up @@ -381,6 +406,7 @@ class DeepSeekV3RendererConfig(BaseRendererConfig):
KimiK2RendererConfig,
KimiK25RendererConfig,
LagunaXS2RendererConfig,
Llama3RendererConfig,
MiniMaxM2RendererConfig,
Nemotron3RendererConfig,
DeepSeekV3RendererConfig,
Expand Down Expand Up @@ -415,6 +441,7 @@ class DeepSeekV3RendererConfig(BaseRendererConfig):
"kimi-k2": KimiK2RendererConfig,
"kimi-k2.5": KimiK25RendererConfig,
"laguna-xs.2": LagunaXS2RendererConfig,
"llama-3": Llama3RendererConfig,
"minimax-m2": MiniMaxM2RendererConfig,
"nemotron-3": Nemotron3RendererConfig,
"deepseek-v3": DeepSeekV3RendererConfig,
Expand Down Expand Up @@ -457,6 +484,7 @@ def config_from_name(name: str) -> BaseRendererConfig | None:
"KimiK25RendererConfig",
"KimiK2RendererConfig",
"LagunaXS2RendererConfig",
"Llama3RendererConfig",
"MiniMaxM2RendererConfig",
"Nemotron3RendererConfig",
"Qwen35RendererConfig",
Expand Down
Loading
Loading