From bca9b7e1c8ea085b8db53d33ba55e72add32078b Mon Sep 17 00:00:00 2001 From: cgycorey <4724788+cgycorey@users.noreply.github.com> Date: Sun, 2 Aug 2026 17:52:57 +0100 Subject: [PATCH] test(llm): cover reasoning effort overrides --- config/llm_config.yaml | 2 + tests/test_llm_provider_reasoning_effort.py | 44 +++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/config/llm_config.yaml b/config/llm_config.yaml index 880fc3b..bfab65a 100644 --- a/config/llm_config.yaml +++ b/config/llm_config.yaml @@ -7,6 +7,8 @@ llm: temperature: 1 max_tokens: 32768 + # reasoning_effort: "high" # optional; use a provider-supported level + # such as low, medium, or high routing: {} fallback: {} diff --git a/tests/test_llm_provider_reasoning_effort.py b/tests/test_llm_provider_reasoning_effort.py index 66c96c3..30de361 100644 --- a/tests/test_llm_provider_reasoning_effort.py +++ b/tests/test_llm_provider_reasoning_effort.py @@ -64,6 +64,26 @@ class TestLLMProviderReasoningEffort(unittest.IsolatedAsyncioTestCase): assert completion.await_args.kwargs["reasoning_effort"] == "max" + async def test_chat_allows_per_call_reasoning_effort_override(self) -> None: + provider = LLMProvider(LLMConfig( + default_model="openai/gpt-5.6-luna", + reasoning_effort="high", + )) + + with ( + patch("opc.llm.provider._clamp_max_tokens", return_value=128), + patch( + "opc.llm.provider.litellm.acompletion", + new=AsyncMock(return_value=_completion_response()), + ) as completion, + ): + await provider.chat( + [{"role": "user", "content": "hello"}], + reasoning_effort="low", + ) + + assert completion.await_args.kwargs["reasoning_effort"] == "low" + async def test_chat_stream_forwards_configured_reasoning_effort(self) -> None: provider = LLMProvider(LLMConfig( default_model="openai/gpt-5.6-luna", @@ -88,6 +108,30 @@ class TestLLMProviderReasoningEffort(unittest.IsolatedAsyncioTestCase): assert completion.await_args.kwargs["reasoning_effort"] == "max" assert completion.await_args.kwargs["stream"] is True + async def test_chat_stream_allows_per_call_reasoning_effort_override(self) -> None: + provider = LLMProvider(LLMConfig( + default_model="openai/gpt-5.6-luna", + reasoning_effort="high", + )) + + with ( + patch("opc.llm.provider._clamp_max_tokens", return_value=128), + patch( + "opc.llm.provider.litellm.acompletion", + new=AsyncMock(return_value=_completion_stream()), + ) as completion, + ): + events = [ + event + async for event in provider.chat_stream( + [{"role": "user", "content": "hello"}], + reasoning_effort="low", + ) + ] + + assert events + assert completion.await_args.kwargs["reasoning_effort"] == "low" + async def test_unset_reasoning_effort_is_not_added_to_requests(self) -> None: provider = LLMProvider(LLMConfig(default_model="openai/gpt-5.6-luna"))