diff --git a/haystack/agents/base.py b/haystack/agents/base.py index f8b2504128..539fc73eaa 100644 --- a/haystack/agents/base.py +++ b/haystack/agents/base.py @@ -214,7 +214,7 @@ def __init__( memory: Optional[Memory] = None, prompt_parameters_resolver: Optional[Callable] = None, max_steps: int = 8, - final_answer_pattern: str = r"Final Answer\s*:\s*(.*)", + final_answer_pattern: str = r"(?s)Final Answer\s*:\s*(.*)", streaming: bool = True, ): """ diff --git a/releasenotes/notes/improve-agent-final-answer-matching-21f5710035a498d8.yaml b/releasenotes/notes/improve-agent-final-answer-matching-21f5710035a498d8.yaml new file mode 100644 index 0000000000..43e2fe717e --- /dev/null +++ b/releasenotes/notes/improve-agent-final-answer-matching-21f5710035a498d8.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixed the bug that caused the agent to discard part of final answers if they were distributed across multiple lines. diff --git a/test/agents/test_agent.py b/test/agents/test_agent.py index df7511bb6a..73af75d146 100644 --- a/test/agents/test_agent.py +++ b/test/agents/test_agent.py @@ -149,6 +149,7 @@ def test_extract_final_answer(): "Final Answer:42", "Final Answer: ", "Final Answer: The answer is 99 ", + "Final Answer:42 should be the answer\n\nBut it's not the only one\n\n\n\n the answer is 1948", ] expected_answers = [ "Florida", @@ -159,10 +160,11 @@ def test_extract_final_answer(): "42", "", "The answer is 99", + "42 should be the answer\n\nBut it's not the only one\n\n\n\n the answer is 1948", ] for example, expected_answer in zip(match_examples, expected_answers): - agent_step = AgentStep(prompt_node_response=example, final_answer_pattern=r"Final Answer\s*:\s*(.*)") + agent_step = AgentStep(prompt_node_response=example, final_answer_pattern=r"(?s)Final Answer\s*:\s*(.*)") final_answer = agent_step.final_answer(query="irrelevant") assert final_answer["answers"][0].answer == expected_answer