import os import unittest from unittest.mock import patch from logicbench.client import LLMClientConfig class ClientConfigTests(unittest.TestCase): def test_roles_have_independent_explicit_configuration(self): values = { "RENDERER_API_KEY": "renderer-key", "RENDERER_BASE_URL": "https://renderer.example/v1", "RENDERER_MODEL": "renderer-model", "SOLVER_API_KEY": "solver-key", "SOLVER_BASE_URL": "https://solver.example/v1", "SOLVER_MODEL": "solver-model", } with patch.dict(os.environ, values, clear=True): renderer = LLMClientConfig.from_env("renderer") solver = LLMClientConfig.from_env("solver") self.assertEqual(renderer.api_key, "renderer-key") self.assertEqual(solver.api_key, "solver-key") self.assertEqual(renderer.base_url, "https://renderer.example/v1") self.assertEqual(solver.base_url, "https://solver.example/v1") self.assertEqual(renderer.timeout_seconds, 240) def test_role_timeout_can_be_overridden(self): values = { "SOLVER_API_KEY": "solver-key", "SOLVER_BASE_URL": "https://solver.example/v1", "SOLVER_MODEL": "solver-model", "SOLVER_TIMEOUT_SECONDS": "360", } with patch.dict(os.environ, values, clear=True): solver = LLMClientConfig.from_env("solver") self.assertEqual(solver.timeout_seconds, 360) def test_missing_role_base_url_is_rejected(self): values = { "RENDERER_API_KEY": "renderer-key", "RENDERER_MODEL": "renderer-model", } with patch.dict(os.environ, values, clear=True): with self.assertRaisesRegex(ValueError, "RENDERER_BASE_URL is required"): LLMClientConfig.from_env("renderer") if __name__ == "__main__": unittest.main()