import unittest from ai_planner import AIPlanner class TestAIPlannerLMStudioCompat(unittest.TestCase): def test_build_chat_payload_has_legacy_chat_keys(self): payload = AIPlanner._build_chat_payload("hello") self.assertIn("messages", payload) self.assertIn("options", payload) self.assertEqual(payload["messages"][1]["content"], "hello") def test_build_input_only_payload_has_minimal_keys(self): payload = AIPlanner._build_input_only_payload("hello") self.assertIn("input", payload) self.assertNotIn("messages", payload) self.assertEqual(payload["stream"], False) self.assertIn("hello", payload["input"]) def test_payload_candidates_order(self): payloads = AIPlanner._build_payload_candidates("hello") self.assertEqual(len(payloads), 2) self.assertIn("messages", payloads[0]) self.assertIn("input", payloads[1]) self.assertNotIn("messages", payloads[1]) def test_extract_response_content_supports_message_content(self): data = { "message": { "content": ( '{"thinking":"t","current_goal":"g","actions":[],"after_this":"a"}' ) } } content = AIPlanner._extract_response_content(data) self.assertIn('"current_goal":"g"', content) def test_extract_response_content_supports_output_text(self): data = { "output_text": ( '{"thinking":"t","current_goal":"g","actions":[],"after_this":"a"}' ) } content = AIPlanner._extract_response_content(data) self.assertIn('"after_this":"a"', content) if __name__ == "__main__": unittest.main()