39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
"""Unit coverage for ENV-21 (tools + reasoning_effort, found live on ggg)."""
|
|
|
|
import unittest
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
|
|
from fjerkroa_bot.openai_responder import OpenAIResponder
|
|
|
|
from .test_bdd_envelope import envelope
|
|
|
|
|
|
def ok_result():
|
|
message = Mock(content=envelope(answer="x", answer_needed=True), role="assistant", tool_calls=None, refusal=None)
|
|
return Mock(choices=[Mock(message=message)], usage="usage")
|
|
|
|
|
|
class TestToolsReasoningEffort(unittest.IsolatedAsyncioTestCase):
|
|
async def chat_kwargs(self, with_tools):
|
|
config = {"openai-token": "t", "model": "gpt-5.6-luna", "system": "s", "history-limit": 5, "enable-game-info": with_tools}
|
|
responder = OpenAIResponder(config, "chat")
|
|
if with_tools:
|
|
responder.igdb = Mock()
|
|
responder.igdb.get_openai_functions = Mock(return_value=[{"name": "search_games", "parameters": {}}])
|
|
with patch("fjerkroa_bot.openai_responder.openai_chat", new_callable=AsyncMock) as chat_mock:
|
|
chat_mock.return_value = ok_result()
|
|
await responder.chat([{"role": "user", "content": "hi"}], 10)
|
|
return chat_mock.await_args.kwargs
|
|
|
|
async def test_tools_carry_reasoning_effort_none(self):
|
|
"""ENV-21: tools attached -> reasoning_effort 'none' rides along."""
|
|
kwargs = await self.chat_kwargs(with_tools=True)
|
|
self.assertIn("tools", kwargs)
|
|
self.assertEqual(kwargs["reasoning_effort"], "none")
|
|
|
|
async def test_toolless_calls_untouched(self):
|
|
"""ENV-21: without tools no reasoning_effort is sent."""
|
|
kwargs = await self.chat_kwargs(with_tools=False)
|
|
self.assertNotIn("tools", kwargs)
|
|
self.assertNotIn("reasoning_effort", kwargs)
|