diff --git a/pyproject.toml b/pyproject.toml index d3bdf19bf..79c66e780 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -126,10 +126,9 @@ prime-sandboxes = false renderers = false [tool.uv.sources] -# Pinned to renderers main until the next PyPI release lands; drop after. -# fe67f9f = renderers main: PR #4 squash-merge — construction-time -# preserve_*_thinking flags on create_renderer / create_renderer_pool. -renderers = { git = "https://github.com/PrimeIntellect-ai/renderers.git", rev = "fe67f9f" } +# Pinned to renderers PR #11 until the next PyPI release lands; drop after. +# 1f3de65 = Dynamo chat nvext transport for token-in /chat/completions. +renderers = { git = "https://github.com/PrimeIntellect-ai/renderers.git", rev = "7ca1ab3" } [tool.uv.extra-build-dependencies] flash-attn = [{ requirement = "torch", match-runtime = true }] diff --git a/tests/test_renderer_client.py b/tests/test_renderer_client.py index 3c8133d0a..cd438590e 100644 --- a/tests/test_renderer_client.py +++ b/tests/test_renderer_client.py @@ -155,6 +155,48 @@ async def test_renderer_client_rejects_empty_dict_native_response(): await client.raise_from_native_response({}) +@pytest.mark.asyncio +async def test_get_native_response_passes_renderer_transport_to_generate( + monkeypatch: pytest.MonkeyPatch, +): + client = object.__new__(RendererClient) + client._client = object() + client._config = vf.ClientConfig( + client_type="renderer", + renderer_transport="dynamo_chat_nvext", + ) + renderer = _BridgeRenderer() + calls = [] + + client._get_renderer_or_pool = lambda model: renderer # type: ignore[method-assign] + + async def fake_get_incremental_prompt_ids(**kwargs): + return [10, 20] + + async def fake_generate(**kwargs): + calls.append(kwargs) + return {"content": "ok"} + + monkeypatch.setattr( + "verifiers.clients.renderer_client._get_incremental_prompt_ids", + fake_get_incremental_prompt_ids, + ) + monkeypatch.setattr("verifiers.clients.renderer_client.generate", fake_generate) + + response = await client.get_native_response( + prompt=[{"role": "user", "content": "hi"}], + model="test-model", + sampling_args={"temperature": 0.1}, + tools=None, + state={"trajectory": []}, + ) + + assert response == {"content": "ok"} + assert len(calls) == 1 + assert calls[0]["transport"] == "dynamo_chat_nvext" + assert calls[0]["prompt_ids"] == [10, 20] + + @pytest.mark.asyncio async def test_from_native_response_uses_request_id_and_token_lengths(): """vLLM's /inference/v1/generate returns ``request_id`` (not ``id``) and diff --git a/uv.lock b/uv.lock index 2fbe0a6ab..4ed78a6df 100644 --- a/uv.lock +++ b/uv.lock @@ -4845,8 +4845,8 @@ wheels = [ [[package]] name = "renderers" -version = "0.1.8" -source = { git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=fe67f9f#fe67f9f16412074c3207ce69ba1763b97958a9db" } +version = "0.1.7" +source = { git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=7ca1ab3#7ca1ab357f3ae2262ad10ffe757670739a8ec2c5" } dependencies = [ { name = "jinja2" }, { name = "numpy" }, @@ -6209,7 +6209,7 @@ requires-dist = [ { name = "pyzmq", specifier = ">=27.1.0" }, { name = "reasoning-gym", marker = "extra == 'rg'" }, { name = "regex", specifier = "<2026.4.4" }, - { name = "renderers", marker = "extra == 'renderers'", git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=fe67f9f" }, + { name = "renderers", marker = "extra == 'renderers'", git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=7ca1ab3" }, { name = "requests" }, { name = "requests", marker = "extra == 'rl'" }, { name = "rich" }, @@ -6242,7 +6242,7 @@ dev = [ { name = "pytest-xdist", specifier = ">=3.8.0" }, { name = "python-dotenv", specifier = ">=1.0.0" }, { name = "reasoning-gym" }, - { name = "renderers", git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=fe67f9f" }, + { name = "renderers", git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=7ca1ab3" }, { name = "ruff" }, { name = "stagehand", specifier = ">=3.0.0" }, { name = "textarena" }, diff --git a/verifiers/clients/renderer_client.py b/verifiers/clients/renderer_client.py index e3a930871..45d21416c 100644 --- a/verifiers/clients/renderer_client.py +++ b/verifiers/clients/renderer_client.py @@ -530,6 +530,9 @@ async def get_native_response( or sampling_params.pop("cache_salt", None), priority=args.get("priority") or sampling_params.pop("priority", None), extra_headers=args.get("extra_headers"), + transport=getattr( + self._config, "renderer_transport", "prime_vllm_generate" + ), ) async def raise_from_native_response(self, response: dict[str, Any]) -> None: diff --git a/verifiers/types.py b/verifiers/types.py index f0dc4ac55..43996e7d3 100644 --- a/verifiers/types.py +++ b/verifiers/types.py @@ -45,6 +45,7 @@ "anthropic_messages", "nemorl_chat_completions", ] +RendererTransport = Literal["prime_vllm_generate", "dynamo_chat_nvext"] MessageType = Literal["chat", "completion"] # deprecated @@ -581,6 +582,7 @@ class ClientConfig(BaseModel): renderer: str = "auto" renderer_model_name: str | None = None renderer_pool_size: int | None = None + renderer_transport: RendererTransport = "prime_vllm_generate" tool_parser: str | None = None reasoning_parser: str | None = None preserve_all_thinking: bool = False