Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
7 changes: 3 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }]
Expand Down
42 changes: 42 additions & 0 deletions tests/test_renderer_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions verifiers/clients/renderer_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions verifiers/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"anthropic_messages",
"nemorl_chat_completions",
]
RendererTransport = Literal["prime_vllm_generate", "dynamo_chat_nvext"]
MessageType = Literal["chat", "completion"] # deprecated


Expand Down Expand Up @@ -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
Expand Down
Loading