From aef84454856e2d1b96ae783b8f53873283d65896 Mon Sep 17 00:00:00 2001 From: Mika Senghaas Date: Wed, 10 Jun 2026 22:37:23 +0000 Subject: [PATCH] chore: guard the v0 legacy bridge against non-renderer training clients _v0_client hardcoded a v0 renderer (token-in/out) client. prime-rl trains renderer-only, so that's correct today, but a MITO (chat-completions, type="openai") config would have silently built a renderer client and done the wrong inference mode instead of erroring. Raise on a non-renderer client config, and now that the type is guaranteed, read the renderer fields directly instead of via defensive getattr. Co-Authored-By: Claude Opus 4.8 (1M context) --- verifiers/v1/legacy.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/verifiers/v1/legacy.py b/verifiers/v1/legacy.py index a7feae47f4..f2cf669888 100644 --- a/verifiers/v1/legacy.py +++ b/verifiers/v1/legacy.py @@ -21,7 +21,7 @@ import zmq import zmq.asyncio -from verifiers.v1.clients.config import ClientConfig +from verifiers.v1.clients.config import ClientConfig, RendererClientConfig from verifiers.v1.serve.server import EnvServer from verifiers.v1.serve.types import ( RunGroupRequest, @@ -299,7 +299,13 @@ def _v0_client(self, client_config: ClientConfig, model: str): ``renderer_model_name`` (the base model) so a LoRA adapter name — served only for sampling — never drives tokenizer loading; the per-request ``model`` still selects the sampling target in ``run_rollout``.""" - renderer_model = getattr(client_config, "renderer_model_name", None) or model + if not isinstance(client_config, RendererClientConfig): + raise ValueError( + "the v0 legacy bridge trains through a renderer (token-in/out) client, " + f"got client type {client_config.type!r}; MITO (chat-completions) " + "training of v0 envs is not supported" + ) + renderer_model = client_config.renderer_model_name or model key = (client_config.model_dump_json(), renderer_model) if key not in self._clients: from verifiers.clients import resolve_client @@ -307,9 +313,9 @@ def _v0_client(self, client_config: ClientConfig, model: str): v0_config = V0ClientConfig( client_type="renderer", - renderer_config=getattr(client_config, "renderer", None), + renderer_config=client_config.renderer, renderer_model_name=renderer_model, - renderer_pool_size=getattr(client_config, "pool_size", None), + renderer_pool_size=client_config.pool_size, api_base_url=client_config.base_url, api_key_var=client_config.api_key_var, extra_headers=dict(client_config.headers or {}),