import os import unittest from types import SimpleNamespace os.environ.setdefault("DEBUG", "false") from app.services.ai.llm_service import LLMService class LLMServiceResponseParsingTests(unittest.TestCase): def test_extract_response_payload_supports_text_and_function_call_in_same_candidate(self): service = LLMService.__new__(LLMService) response = SimpleNamespace( candidates=[ SimpleNamespace( content=SimpleNamespace( parts=[ SimpleNamespace(text="Legal! Buscando carros de ate 70 mil para voce.", function_call=None), SimpleNamespace( text=None, function_call=SimpleNamespace( name="consultar_estoque", args={"preco_max": 70000.0}, ), ), ] ) ) ] ) payload = service._extract_response_payload(response) self.assertEqual(payload["response"], "Legal! Buscando carros de ate 70 mil para voce.") self.assertEqual( payload["tool_call"], { "name": "consultar_estoque", "arguments": {"preco_max": 70000.0}, }, ) def test_extract_response_payload_handles_text_only_candidate_without_response_text_accessor(self): service = LLMService.__new__(LLMService) response = SimpleNamespace( candidates=[ SimpleNamespace( content=SimpleNamespace( parts=[ SimpleNamespace(text="Resposta simples", function_call=None), ] ) ) ] ) payload = service._extract_response_payload(response) self.assertEqual(payload, {"response": "Resposta simples", "tool_call": None})