import importlib.util import unittest from pathlib import Path MODULE_PATH = Path(__file__).resolve().parent.parent / "tools" / "lmstudio" / "openai_reasoning_proxy.py" if MODULE_PATH.exists(): spec = importlib.util.spec_from_file_location("openai_reasoning_proxy", MODULE_PATH) module = importlib.util.module_from_spec(spec) assert spec is not None and spec.loader is not None spec.loader.exec_module(module) proxy = module else: # pragma: no cover proxy = None class OpenAIReasoningProxyTests(unittest.TestCase): def setUp(self): if proxy is None: self.fail("tools.lmstudio.openai_reasoning_proxy is not available") def test_build_native_payload_prefers_reasoning_field(self): request_payload = { "model": "qwen/qwen3.6-35b-a3b", "messages": [ {"role": "system", "content": "be precise"}, {"role": "user", "content": "hello"}, {"role": "assistant", "content": "hi"}, {"role": "user", "content": "continue"}, ], "max_tokens": 64, "temperature": 0.1, "reasoning": "off", "enable_thinking": True, } native_payload = proxy.build_native_payload(request_payload) self.assertEqual(native_payload["model"], "qwen/qwen3.6-35b-a3b") self.assertEqual( native_payload["input"], "User: hello\n\nAssistant: hi\n\nUser: continue", ) self.assertEqual(native_payload["max_output_tokens"], 64) self.assertEqual(native_payload["temperature"], 0.1) self.assertEqual(native_payload["reasoning"], "off") self.assertEqual(native_payload["system_prompt"], "be precise") self.assertFalse(native_payload["store"]) def test_build_native_payload_maps_enable_thinking_false_to_reasoning_off(self): request_payload = { "model": "qwen/qwen3.6-35b-a3b", "messages": [{"role": "user", "content": "hello"}], "enable_thinking": False, } native_payload = proxy.build_native_payload(request_payload) self.assertEqual(native_payload["reasoning"], "off") def test_translate_native_response_keeps_reasoning_content(self): native_response = { "id": "chatcmpl-native", "model": "qwen/qwen3.6-35b-a3b", "output": [ {"type": "reasoning", "content": "reasoning text"}, {"type": "message", "content": "final answer"}, ], "stats": { "input_tokens": 11, "total_output_tokens": 19, "reasoning_output_tokens": 7, }, } translated = proxy.translate_native_response(native_response) self.assertEqual(translated["object"], "chat.completion") self.assertEqual(translated["model"], "qwen/qwen3.6-35b-a3b") self.assertEqual(translated["choices"][0]["message"]["content"], "final answer") self.assertEqual( translated["choices"][0]["message"]["reasoning_content"], "reasoning text", ) self.assertEqual(translated["usage"]["prompt_tokens"], 11) self.assertEqual(translated["usage"]["completion_tokens"], 19) self.assertEqual( translated["usage"]["completion_tokens_details"]["reasoning_tokens"], 7, ) if __name__ == "__main__": unittest.main()