diff --git a/src/crewai/task.py b/src/crewai/task.py index ddc8ad754..96e52cad5 100644 --- a/src/crewai/task.py +++ b/src/crewai/task.py @@ -526,10 +526,14 @@ class Task(BaseModel): return guardrail_result def prompt(self) -> str: - """Prompt the task. - + """Generates the task prompt with optional markdown formatting. + + When the markdown attribute is True, instructions for formatting the + response in Markdown syntax will be added to the prompt. + Returns: - Prompt of the task. + str: The formatted prompt string containing the task description, + expected output, and optional markdown formatting instructions. """ tasks_slices = [self.description] @@ -539,9 +543,15 @@ class Task(BaseModel): tasks_slices = [self.description, output] if self.markdown: - markdown_instruction = "Your final answer MUST be formatted in Markdown syntax." + markdown_instruction = """Your final answer MUST be formatted in Markdown syntax. +Follow these guidelines: +- Use # for headers +- Use ** for bold text +- Use * for italic text +- Use - or * for bullet points +- Use `code` for inline code +- Use ```language for code blocks""" tasks_slices.append(markdown_instruction) - return "\n".join(tasks_slices) def interpolate_inputs_and_add_conversation_history( diff --git a/tests/test_markdown_task.py b/tests/test_markdown_task.py index 706dc624b..e8678f874 100644 --- a/tests/test_markdown_task.py +++ b/tests/test_markdown_task.py @@ -6,8 +6,15 @@ from unittest.mock import patch from crewai import Agent, Task -def test_markdown_option_in_task_prompt(): - """Test that when markdown=True, the task prompt includes markdown formatting instructions.""" +@pytest.mark.parametrize( + "markdown_enabled,should_contain_instructions", + [ + (True, True), + (False, False), + ], +) +def test_markdown_option_in_task_prompt(markdown_enabled, should_contain_instructions): + """Test that markdown flag correctly controls the inclusion of markdown formatting instructions.""" researcher = Agent( role="Researcher", @@ -19,35 +26,67 @@ def test_markdown_option_in_task_prompt(): task = Task( description="Research advances in AI in 2023", expected_output="A summary of key AI advances in 2023", + markdown=markdown_enabled, + agent=researcher, + ) + + prompt = task.prompt() + + assert "Research advances in AI in 2023" in prompt + assert "A summary of key AI advances in 2023" in prompt + + if should_contain_instructions: + assert "Your final answer MUST be formatted in Markdown syntax." in prompt + assert "Use # for headers" in prompt + assert "Use ** for bold text" in prompt + else: + assert "Your final answer MUST be formatted in Markdown syntax." not in prompt + + +def test_markdown_with_empty_description(): + """Test markdown formatting with empty description.""" + + researcher = Agent( + role="Researcher", + goal="Research a topic", + backstory="You're a researcher.", + allow_delegation=False, + ) + + task = Task( + description="", + expected_output="A summary", markdown=True, agent=researcher, ) prompt = task.prompt() - assert "Research advances in AI in 2023" in prompt - assert "A summary of key AI advances in 2023" in prompt + assert prompt.strip() != "" + assert "A summary" in prompt assert "Your final answer MUST be formatted in Markdown syntax." in prompt -def test_markdown_option_not_in_task_prompt_by_default(): - """Test that by default (markdown=False), the task prompt does not include markdown formatting instructions.""" +def test_markdown_with_complex_output_format(): + """Test markdown with JSON output format to ensure compatibility.""" researcher = Agent( role="Researcher", goal="Research a topic", - backstory="You're a researcher specialized in providing well-formatted content.", + backstory="You're a researcher.", allow_delegation=False, ) task = Task( - description="Research advances in AI in 2023", - expected_output="A summary of key AI advances in 2023", + description="Research topic", + expected_output="Research results", + markdown=True, + output_json=True, agent=researcher, ) prompt = task.prompt() - assert "Research advances in AI in 2023" in prompt - assert "A summary of key AI advances in 2023" in prompt - assert "Your final answer MUST be formatted in Markdown syntax." not in prompt + assert "Your final answer MUST be formatted in Markdown syntax." in prompt + assert "Research topic" in prompt + assert "Research results" in prompt