diff --git a/src/crewai/agents/parser.py b/src/crewai/agents/parser.py index b4629a8d2..71444a20a 100644 --- a/src/crewai/agents/parser.py +++ b/src/crewai/agents/parser.py @@ -94,6 +94,13 @@ class CrewAgentParser: elif includes_answer: final_answer = text.split(FINAL_ANSWER_ACTION)[-1].strip() + # Check whether the final answer ends with triple backticks. + if final_answer.endswith("```"): + # Count occurrences of triple backticks in the final answer. + count = final_answer.count("```") + # If count is odd then it's an unmatched trailing set; remove it. + if count % 2 != 0: + final_answer = final_answer[:-3].rstrip() return AgentFinish(thought, final_answer, text) if not re.search(r"Action\s*\d*\s*:[\s]*(.*?)", text, re.DOTALL): @@ -120,7 +127,10 @@ class CrewAgentParser: regex = r"(.*?)(?:\n\nAction|\n\nFinal Answer)" thought_match = re.search(regex, text, re.DOTALL) if thought_match: - return thought_match.group(1).strip() + thought = thought_match.group(1).strip() + # Remove any triple backticks from the thought string + thought = thought.replace("```", "").strip() + return thought return "" def _clean_action(self, text: str) -> str: