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)