Spaces:
Sleeping
Sleeping
| """Tests for providers/nvidia_nim/request.py.""" | |
| from unittest.mock import MagicMock | |
| import pytest | |
| from config.nim import NimSettings | |
| from providers.common.utils import set_if_not_none | |
| from providers.nvidia_nim.request import ( | |
| _set_extra, | |
| build_request_body, | |
| ) | |
| def req(): | |
| r = MagicMock() | |
| r.model = "test" | |
| r.messages = [MagicMock(role="user", content="hi")] | |
| r.max_tokens = 100 | |
| r.system = None | |
| r.temperature = None | |
| r.top_p = None | |
| r.stop_sequences = None | |
| r.tools = None | |
| r.tool_choice = None | |
| r.extra_body = None | |
| r.top_k = None | |
| return r | |
| class TestSetIfNotNone: | |
| def test_value_not_none_sets(self): | |
| body = {} | |
| set_if_not_none(body, "key", "value") | |
| assert body["key"] == "value" | |
| def test_value_none_skips(self): | |
| body = {} | |
| set_if_not_none(body, "key", None) | |
| assert "key" not in body | |
| class TestSetExtra: | |
| def test_key_in_extra_body_skips(self): | |
| extra = {"top_k": 42} | |
| _set_extra(extra, "top_k", 10) | |
| assert extra["top_k"] == 42 | |
| def test_value_none_skips(self): | |
| extra = {} | |
| _set_extra(extra, "top_k", None) | |
| assert "top_k" not in extra | |
| def test_value_equals_ignore_value_skips(self): | |
| extra = {} | |
| _set_extra(extra, "top_k", -1, ignore_value=-1) | |
| assert "top_k" not in extra | |
| def test_value_set_when_valid(self): | |
| extra = {} | |
| _set_extra(extra, "top_k", 10, ignore_value=-1) | |
| assert extra["top_k"] == 10 | |
| class TestBuildRequestBody: | |
| def test_max_tokens_capped_by_nim(self, req): | |
| req.max_tokens = 100000 | |
| nim = NimSettings(max_tokens=4096) | |
| body = build_request_body(req, nim) | |
| assert body["max_tokens"] == 4096 | |
| def test_presence_penalty_included_when_nonzero(self, req): | |
| nim = NimSettings(presence_penalty=0.5) | |
| body = build_request_body(req, nim) | |
| assert body["presence_penalty"] == 0.5 | |
| def test_include_stop_str_in_output_not_sent(self, req): | |
| body = build_request_body(req, NimSettings()) | |
| assert "include_stop_str_in_output" not in body.get("extra_body", {}) | |
| def test_parallel_tool_calls_included(self, req): | |
| nim = NimSettings(parallel_tool_calls=False) | |
| body = build_request_body(req, nim) | |
| assert body["parallel_tool_calls"] is False | |
| def test_reasoning_params_in_extra_body(self): | |
| req = MagicMock() | |
| req.model = "test" | |
| req.messages = [MagicMock(role="user", content="hi")] | |
| req.max_tokens = 100 | |
| req.system = None | |
| req.temperature = None | |
| req.top_p = None | |
| req.stop_sequences = None | |
| req.tools = None | |
| req.tool_choice = None | |
| req.extra_body = None | |
| req.top_k = None | |
| nim = NimSettings(enable_thinking=True) | |
| body = build_request_body(req, nim) | |
| extra = body["extra_body"] | |
| assert extra["chat_template_kwargs"] == { | |
| "thinking": True, | |
| "enable_thinking": True, | |
| } | |
| assert extra["reasoning_budget"] == body["max_tokens"] | |
| def test_no_chat_template_kwargs_when_thinking_disabled(self): | |
| req = MagicMock() | |
| req.model = "test" | |
| req.messages = [MagicMock(role="user", content="hi")] | |
| req.max_tokens = 100 | |
| req.system = None | |
| req.temperature = None | |
| req.top_p = None | |
| req.stop_sequences = None | |
| req.tools = None | |
| req.tool_choice = None | |
| req.extra_body = None | |
| req.top_k = None | |
| nim = NimSettings(enable_thinking=False) | |
| body = build_request_body(req, nim) | |
| extra = body.get("extra_body", {}) | |
| assert "chat_template_kwargs" not in extra | |
| assert "reasoning_budget" not in extra | |
| def test_no_reasoning_params_in_extra_body(self): | |
| req = MagicMock() | |
| req.model = "test" | |
| req.messages = [MagicMock(role="user", content="hi")] | |
| req.max_tokens = 100 | |
| req.system = None | |
| req.temperature = None | |
| req.top_p = None | |
| req.stop_sequences = None | |
| req.tools = None | |
| req.tool_choice = None | |
| req.extra_body = None | |
| req.top_k = None | |
| nim = NimSettings() | |
| body = build_request_body(req, nim) | |
| extra = body.get("extra_body", {}) | |
| for param in ( | |
| "thinking", | |
| "reasoning_split", | |
| "return_tokens_as_token_ids", | |
| "include_reasoning", | |
| "reasoning_effort", | |
| ): | |
| assert param not in extra | |