From fcd1cdd63e245576c9b40fd5666f408169ca5168 Mon Sep 17 00:00:00 2001 From: Zaksans Date: Thu, 27 Aug 2026 01:01:28 +0200 Subject: [PATCH] fix: parse last XML answer in message completions --- tests/test_xml_parser.py | 11 +++++++++++ verifiers/legacy/parsers/xml_parser.py | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/test_xml_parser.py b/tests/test_xml_parser.py index beb811807e..c03b00eb8b 100644 --- a/tests/test_xml_parser.py +++ b/tests/test_xml_parser.py @@ -101,6 +101,17 @@ def test_parse_answer_from_string_completion(self, xml_parser): result == "45" ) # Should return just the last answer, not a full parse() namespace + def test_parse_answer_from_message_completion_uses_last_answer(self, xml_parser): + """Test extracting the last answer from a message completion.""" + completion = [ + { + "role": "assistant", + "content": "44Actually, that's not right either.45", + } + ] + result = xml_parser.parse_answer(completion) + assert result == "45" + def test_parse_answer_no_answer_field(self, xml_parser): """Test parse_answer when no answer field is found.""" completion = [ diff --git a/verifiers/legacy/parsers/xml_parser.py b/verifiers/legacy/parsers/xml_parser.py index 1cd14861b5..7d353e9e41 100644 --- a/verifiers/legacy/parsers/xml_parser.py +++ b/verifiers/legacy/parsers/xml_parser.py @@ -105,7 +105,7 @@ def parse_answer(self, completion: Messages) -> str | None: if isinstance(msg, dict) else (msg.content or "") ) - parsed = self.parse(content) + parsed = self.parse(content, last=True) if ( parsed and hasattr(parsed, self.answer_field)