diff --git a/pyproject.toml b/pyproject.toml index 9a74443797..3549b103ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ dependencies = [ "uvloop>=0.21.0", "torchtitan", "verifiers", + "renderers", "dion", "tilelang>=0.1.8", "flash-linear-attention", @@ -150,6 +151,7 @@ prime-tunnel = false prime-evals = false # Trusted git/URL sources pinned by rev or wheel URL (defensive: belt-and-suspenders) verifiers = false +renderers = false vllm-router = false dion = false pydantic-config = false @@ -160,7 +162,8 @@ nixl-cu12 = false [tool.uv.sources] prime-rl-configs = { workspace = true } torch = { index = "pytorch-cu128" } -verifiers = { git = "https://github.com/PrimeIntellect-ai/verifiers.git", rev = "3b77145" } +verifiers = { git = "https://github.com/PrimeIntellect-ai/verifiers.git", rev = "1c7c35f0" } +renderers = { git = "https://github.com/PrimeIntellect-ai/renderers.git", rev = "7ca1ab3" } torchtitan = { git = "https://github.com/pytorch/torchtitan", rev = "a1fdd7e" } dion = { git = "https://github.com/samsja/dion.git", rev = "d891eeb" } transformers = { git = "https://github.com/huggingface/transformers.git", rev = "c1c3424" } diff --git a/src/prime_rl/utils/client.py b/src/prime_rl/utils/client.py index c175b79e60..5235f96158 100644 --- a/src/prime_rl/utils/client.py +++ b/src/prime_rl/utils/client.py @@ -310,6 +310,11 @@ def setup_clients( ) -> list[vf.ClientConfig]: clients = [] client_idx = 0 + renderer_transport = ( + "dynamo_chat_nvext" + if client_type == "renderer" and client_config.backend == "dynamo" + else "prime_vllm_generate" + ) for base_url in client_config.base_url: for dp_rank in range(client_config.dp_rank_count): headers = client_config.headers.copy() @@ -321,6 +326,7 @@ def setup_clients( client_type=client_type, renderer=renderer_name, renderer_model_name=renderer_model_name, + renderer_transport=renderer_transport, renderer_pool_size=renderer_pool_size, tool_parser=tool_parser, reasoning_parser=reasoning_parser, diff --git a/src/prime_rl/utils/elastic.py b/src/prime_rl/utils/elastic.py index 8c438f1e64..d5a0afca74 100644 --- a/src/prime_rl/utils/elastic.py +++ b/src/prime_rl/utils/elastic.py @@ -203,6 +203,7 @@ def _rebuild_clients(self) -> None: base_url=urls, api_key_var=self.client_config.api_key_var, headers=self.client_config.headers, + backend=self.client_config.backend, dp_rank_count=self.client_config.dp_rank_count, extra_headers_from_state=self.client_config.extra_headers_from_state, ) diff --git a/tests/unit/utils/test_client.py b/tests/unit/utils/test_client.py index 6b48790ef3..6c50ec7027 100644 --- a/tests/unit/utils/test_client.py +++ b/tests/unit/utils/test_client.py @@ -89,6 +89,18 @@ def test_setup_clients_assigns_renderer_model_name(): assert clients[0].renderer_model_name == "Qwen/Qwen3-VL-4B-Instruct" +def test_setup_clients_uses_dynamo_transport_for_dynamo_renderer(): + client_config = ClientConfig( + base_url=["http://worker-a:8000/v1"], + api_key_var="PRIME_API_KEY", + backend="dynamo", + ) + + clients = setup_clients(client_config, client_type="renderer") + + assert clients[0].renderer_transport == "dynamo_chat_nvext" + + def test_setup_clients_preserves_chat_client_defaults(): client_config = ClientConfig( base_url=["http://worker-a:8000/v1"], diff --git a/tests/unit/utils/test_elastic.py b/tests/unit/utils/test_elastic.py index a2cd40d1d1..247f63385e 100644 --- a/tests/unit/utils/test_elastic.py +++ b/tests/unit/utils/test_elastic.py @@ -417,6 +417,7 @@ def test_elastic_clients_preserve_renderer_model_name_when_model_name_updates(): client_config.headers = {} client_config.extra_headers_from_state = {} client_config.dp_rank_count = 1 + client_config.backend = "vllm" pool = ElasticInferencePool( client_config=client_config, diff --git a/uv.lock b/uv.lock index 48f54c65c0..1ed38e218b 100644 --- a/uv.lock +++ b/uv.lock @@ -30,18 +30,19 @@ deep-gemm = false aime2024 = false prime-evals = false deepdive = false +prime-sandboxes = false reverse-text = false code-env = false mini-swe-agent-plus = false deep-ep = false pydantic-config = false +renderers = false math-env = false logic-env = false wiki-search = false math-python = false math500 = false aime2025 = false -prime-sandboxes = false [manifest] members = [ @@ -2697,6 +2698,7 @@ dependencies = [ { name = "prime-rl-configs", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "pyarrow", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "pyzmq", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "renderers", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "rich", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "ring-flash-attn", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "setproctitle", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -2817,6 +2819,7 @@ requires-dist = [ { name = "pyarrow", specifier = ">=21.0.0" }, { name = "pyzmq", specifier = ">=27.1.0" }, { name = "quack-kernels", marker = "extra == 'quack'", specifier = ">=0.3.3" }, + { name = "renderers", git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=7ca1ab3" }, { name = "reverse-text", marker = "extra == 'envs'", index = "https://hub.primeintellect.ai/primeintellect/simple/" }, { name = "rich", specifier = ">=14.0.0" }, { name = "ring-flash-attn", specifier = ">=0.1.8" }, @@ -2829,7 +2832,7 @@ requires-dist = [ { name = "torchtitan", git = "https://github.com/pytorch/torchtitan?rev=a1fdd7e" }, { name = "transformers", git = "https://github.com/huggingface/transformers.git?rev=c1c3424" }, { name = "uvloop", specifier = ">=0.21.0" }, - { name = "verifiers", git = "https://github.com/PrimeIntellect-ai/verifiers.git?rev=3b77145" }, + { name = "verifiers", git = "https://github.com/PrimeIntellect-ai/verifiers.git?rev=1c7c35f0" }, { name = "vllm", specifier = ">=0.19.0" }, { name = "vllm-router", marker = "platform_machine == 'x86_64' and extra == 'disagg'", url = "https://github.com/PrimeIntellect-ai/router/releases/download/v0.1.22/vllm_router-0.1.22-cp38-abi3-manylinux_2_28_x86_64.whl" }, { name = "wandb", specifier = ">=0.26.1" }, @@ -3298,10 +3301,14 @@ wheels = [ [[package]] name = "renderers" -version = "0.1.0" -source = { git = "https://github.com/PrimeIntellect-ai/verifiers.git?subdirectory=packages%2Frenderers&rev=3b77145#3b77145e14a9bcdaf180a49e7df97dbf2d7bb150" } +version = "0.1.7" +source = { git = "https://github.com/PrimeIntellect-ai/renderers.git?rev=7ca1ab3#7ca1ab357f3ae2262ad10ffe757670739a8ec2c5" } dependencies = [ + { name = "jinja2", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "numpy", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "openai", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "openai-harmony", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "tiktoken", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "transformers", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] @@ -4094,8 +4101,8 @@ wheels = [ [[package]] name = "verifiers" -version = "0.1.13.dev8" -source = { git = "https://github.com/PrimeIntellect-ai/verifiers.git?rev=3b77145#3b77145e14a9bcdaf180a49e7df97dbf2d7bb150" } +version = "0.1.14" +source = { git = "https://github.com/PrimeIntellect-ai/verifiers.git?rev=1c7c35f0#1c7c35f059b814b01072158ecf683448fe7fffd1" } dependencies = [ { name = "aiolimiter", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "anthropic", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -4115,7 +4122,6 @@ dependencies = [ { name = "pydantic", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "pyzmq", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "regex", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "renderers", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "requests", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "rich", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "setproctitle", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },