diff --git a/docs/concepts/agents.mdx b/docs/concepts/agents.mdx
index af565a0c0..9803a5c6d 100644
--- a/docs/concepts/agents.mdx
+++ b/docs/concepts/agents.mdx
@@ -55,11 +55,14 @@ The Visual Agent Builder enables:
| **Max Retry Limit** _(optional)_ | `max_retry_limit` | `int` | Maximum number of retries when an error occurs. Default is 2. |
| **Respect Context Window** _(optional)_ | `respect_context_window` | `bool` | Keep messages under context window size by summarizing. Default is True. |
| **Code Execution Mode** _(optional)_ | `code_execution_mode` | `Literal["safe", "unsafe"]` | Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct). Default is 'safe'. |
+| **Multimodal** _(optional)_ | `multimodal` | `bool` | Whether the agent supports multimodal capabilities. Default is False. |
+| **Inject Date** _(optional)_ | `inject_date` | `bool` | Whether to automatically inject the current date into tasks. Default is False. |
+| **Date Format** _(optional)_ | `date_format` | `str` | Format string for date when inject_date is enabled. Default is "%Y-%m-%d" (ISO format). |
+| **Reasoning** _(optional)_ | `reasoning` | `bool` | Whether the agent should reflect and create a plan before executing a task. Default is False. |
+| **Max Reasoning Attempts** _(optional)_ | `max_reasoning_attempts` | `Optional[int]` | Maximum number of reasoning attempts before executing the task. If None, will try until ready. |
| **Embedder** _(optional)_ | `embedder` | `Optional[Dict[str, Any]]` | Configuration for the embedder used by the agent. |
| **Knowledge Sources** _(optional)_ | `knowledge_sources` | `Optional[List[BaseKnowledgeSource]]` | Knowledge sources available to the agent. |
| **Use System Prompt** _(optional)_ | `use_system_prompt` | `Optional[bool]` | Whether to use system prompt (for o1 model support). Default is True. |
-| **Inject Date** _(optional)_ | `inject_date` | `bool` | Whether to automatically inject the current date into tasks. Default is False. |
-| **Date Format** _(optional)_ | `date_format` | `str` | Format string for date when inject_date is enabled. Default is "%Y-%m-%d" (ISO format). |
## Creating Agents
@@ -164,6 +167,11 @@ agent = Agent(
code_execution_mode="safe", # Default: "safe" (options: "safe", "unsafe")
respect_context_window=True, # Default: True
use_system_prompt=True, # Default: True
+ multimodal=False, # Default: False
+ inject_date=False, # Default: False
+ date_format="%Y-%m-%d", # Default: ISO format
+ reasoning=False, # Default: False
+ max_reasoning_attempts=None, # Default: None
tools=[SerperDevTool()], # Optional: List of tools
knowledge_sources=None, # Optional: List of knowledge sources
embedder=None, # Optional: Custom embedder configuration
@@ -228,14 +236,40 @@ custom_agent = Agent(
)
```
-#### Date-Aware Agent
+#### Date-Aware Agent with Reasoning
```python Code
-date_aware_agent = Agent(
+strategic_agent = Agent(
role="Market Analyst",
- goal="Track market movements with precise date references",
- backstory="Expert in time-sensitive financial analysis and reporting",
+ goal="Track market movements with precise date references and strategic planning",
+ backstory="Expert in time-sensitive financial analysis and strategic reporting",
inject_date=True, # Automatically inject current date into tasks
date_format="%B %d, %Y", # Format as "May 21, 2025"
+ reasoning=True, # Enable strategic planning
+ max_reasoning_attempts=2, # Limit planning iterations
+ verbose=True
+)
+```
+
+#### Reasoning Agent
+```python Code
+reasoning_agent = Agent(
+ role="Strategic Planner",
+ goal="Analyze complex problems and create detailed execution plans",
+ backstory="Expert strategic planner who methodically breaks down complex challenges",
+ reasoning=True, # Enable reasoning and planning
+ max_reasoning_attempts=3, # Limit reasoning attempts
+ max_iter=30, # Allow more iterations for complex planning
+ verbose=True
+)
+```
+
+#### Multimodal Agent
+```python Code
+multimodal_agent = Agent(
+ role="Visual Content Analyst",
+ goal="Analyze and process both text and visual content",
+ backstory="Specialized in multimodal analysis combining text and image understanding",
+ multimodal=True, # Enable multimodal capabilities
verbose=True
)
```
@@ -263,6 +297,11 @@ date_aware_agent = Agent(
- `"safe"`: Uses Docker (recommended for production)
- `"unsafe"`: Direct execution (use only in trusted environments)
+#### Advanced Features
+- `multimodal`: Enable multimodal capabilities for processing text and visual content
+- `reasoning`: Enable agent to reflect and create plans before executing tasks
+- `inject_date`: Automatically inject current date into task descriptions
+
#### Templates
- `system_template`: Defines agent's core behavior
- `prompt_template`: Structures input format
@@ -320,6 +359,170 @@ analyst = Agent(
When `memory` is enabled, the agent will maintain context across multiple interactions, improving its ability to handle complex, multi-step tasks.
+## Context Window Management
+
+CrewAI includes sophisticated automatic context window management to handle situations where conversations exceed the language model's token limits. This powerful feature is controlled by the `respect_context_window` parameter.
+
+### How Context Window Management Works
+
+When an agent's conversation history grows too large for the LLM's context window, CrewAI automatically detects this situation and can either:
+
+1. **Automatically summarize content** (when `respect_context_window=True`)
+2. **Stop execution with an error** (when `respect_context_window=False`)
+
+### Automatic Context Handling (`respect_context_window=True`)
+
+This is the **default and recommended setting** for most use cases. When enabled, CrewAI will:
+
+```python Code
+# Agent with automatic context management (default)
+smart_agent = Agent(
+ role="Research Analyst",
+ goal="Analyze large documents and datasets",
+ backstory="Expert at processing extensive information",
+ respect_context_window=True, # 🔑 Default: auto-handle context limits
+ verbose=True
+)
+```
+
+**What happens when context limits are exceeded:**
+- ⚠️ **Warning message**: `"Context length exceeded. Summarizing content to fit the model context window."`
+- 🔄 **Automatic summarization**: CrewAI intelligently summarizes the conversation history
+- ✅ **Continued execution**: Task execution continues seamlessly with the summarized context
+- 📝 **Preserved information**: Key information is retained while reducing token count
+
+### Strict Context Limits (`respect_context_window=False`)
+
+When you need precise control and prefer execution to stop rather than lose any information:
+
+```python Code
+# Agent with strict context limits
+strict_agent = Agent(
+ role="Legal Document Reviewer",
+ goal="Provide precise legal analysis without information loss",
+ backstory="Legal expert requiring complete context for accurate analysis",
+ respect_context_window=False, # ❌ Stop execution on context limit
+ verbose=True
+)
+```
+
+**What happens when context limits are exceeded:**
+- ❌ **Error message**: `"Context length exceeded. Consider using smaller text or RAG tools from crewai_tools."`
+- 🛑 **Execution stops**: Task execution halts immediately
+- 🔧 **Manual intervention required**: You need to modify your approach
+
+### Choosing the Right Setting
+
+#### Use `respect_context_window=True` (Default) when:
+- **Processing large documents** that might exceed context limits
+- **Long-running conversations** where some summarization is acceptable
+- **Research tasks** where general context is more important than exact details
+- **Prototyping and development** where you want robust execution
+
+```python Code
+# Perfect for document processing
+document_processor = Agent(
+ role="Document Analyst",
+ goal="Extract insights from large research papers",
+ backstory="Expert at analyzing extensive documentation",
+ respect_context_window=True, # Handle large documents gracefully
+ max_iter=50, # Allow more iterations for complex analysis
+ verbose=True
+)
+```
+
+#### Use `respect_context_window=False` when:
+- **Precision is critical** and information loss is unacceptable
+- **Legal or medical tasks** requiring complete context
+- **Code review** where missing details could introduce bugs
+- **Financial analysis** where accuracy is paramount
+
+```python Code
+# Perfect for precision tasks
+precision_agent = Agent(
+ role="Code Security Auditor",
+ goal="Identify security vulnerabilities in code",
+ backstory="Security expert requiring complete code context",
+ respect_context_window=False, # Prefer failure over incomplete analysis
+ max_retry_limit=1, # Fail fast on context issues
+ verbose=True
+)
+```
+
+### Alternative Approaches for Large Data
+
+When dealing with very large datasets, consider these strategies:
+
+#### 1. Use RAG Tools
+```python Code
+from crewai_tools import RagTool
+
+# Create RAG tool for large document processing
+rag_tool = RagTool()
+
+rag_agent = Agent(
+ role="Research Assistant",
+ goal="Query large knowledge bases efficiently",
+ backstory="Expert at using RAG tools for information retrieval",
+ tools=[rag_tool], # Use RAG instead of large context windows
+ respect_context_window=True,
+ verbose=True
+)
+```
+
+#### 2. Use Knowledge Sources
+```python Code
+# Use knowledge sources instead of large prompts
+knowledge_agent = Agent(
+ role="Knowledge Expert",
+ goal="Answer questions using curated knowledge",
+ backstory="Expert at leveraging structured knowledge sources",
+ knowledge_sources=[your_knowledge_sources], # Pre-processed knowledge
+ respect_context_window=True,
+ verbose=True
+)
+```
+
+### Context Window Best Practices
+
+1. **Monitor Context Usage**: Enable `verbose=True` to see context management in action
+2. **Design for Efficiency**: Structure tasks to minimize context accumulation
+3. **Use Appropriate Models**: Choose LLMs with context windows suitable for your tasks
+4. **Test Both Settings**: Try both `True` and `False` to see which works better for your use case
+5. **Combine with RAG**: Use RAG tools for very large datasets instead of relying solely on context windows
+
+### Troubleshooting Context Issues
+
+**If you're getting context limit errors:**
+```python Code
+# Quick fix: Enable automatic handling
+agent.respect_context_window = True
+
+# Better solution: Use RAG tools for large data
+from crewai_tools import RagTool
+agent.tools = [RagTool()]
+
+# Alternative: Break tasks into smaller pieces
+# Or use knowledge sources instead of large prompts
+```
+
+**If automatic summarization loses important information:**
+```python Code
+# Disable auto-summarization and use RAG instead
+agent = Agent(
+ role="Detailed Analyst",
+ goal="Maintain complete information accuracy",
+ backstory="Expert requiring full context",
+ respect_context_window=False, # No summarization
+ tools=[RagTool()], # Use RAG for large data
+ verbose=True
+)
+```
+
+
+The context window management feature works automatically in the background. You don't need to call any special functions - just set `respect_context_window` to your preferred behavior and CrewAI handles the rest!
+
+
## Important Considerations and Best Practices
### Security and Code Execution
@@ -336,9 +539,16 @@ When `memory` is enabled, the agent will maintain context across multiple intera
### Memory and Context Management
- Use `memory: true` for tasks requiring historical context
- Leverage `knowledge_sources` for domain-specific information
-- Configure `embedder_config` when using custom embedding models
+- Configure `embedder` when using custom embedding models
- Use custom templates (`system_template`, `prompt_template`, `response_template`) for fine-grained control over agent behavior
+### Advanced Features
+- Enable `reasoning: true` for agents that need to plan and reflect before executing complex tasks
+- Set appropriate `max_reasoning_attempts` to control planning iterations (None for unlimited attempts)
+- Use `inject_date: true` to provide agents with current date awareness for time-sensitive tasks
+- Customize the date format with `date_format` using standard Python datetime format codes
+- Enable `multimodal: true` for agents that need to process both text and visual content
+
### Agent Collaboration
- Enable `allow_delegation: true` when agents need to work together
- Use `step_callback` to monitor and log agent interactions
@@ -346,11 +556,12 @@ When `memory` is enabled, the agent will maintain context across multiple intera
- Main `llm` for complex reasoning
- `function_calling_llm` for efficient tool usage
-### Date Awareness
-- Use `inject_date: true` to provide agents with current date awareness
+### Date Awareness and Reasoning
+- Use `inject_date: true` to provide agents with current date awareness for time-sensitive tasks
- Customize the date format with `date_format` using standard Python datetime format codes
- Valid format codes include: %Y (year), %m (month), %d (day), %B (full month name), etc.
- Invalid date formats will be logged as warnings and will not modify the task description
+- Enable `reasoning: true` for complex tasks that benefit from upfront planning and reflection
### Model Compatibility
- Set `use_system_prompt: false` for older models that don't support system messages
diff --git a/docs/concepts/tasks.mdx b/docs/concepts/tasks.mdx
index 89e290b30..63b95fecb 100644
--- a/docs/concepts/tasks.mdx
+++ b/docs/concepts/tasks.mdx
@@ -51,6 +51,7 @@ crew = Crew(
| **Context** _(optional)_ | `context` | `Optional[List["Task"]]` | Other tasks whose outputs will be used as context for this task. |
| **Async Execution** _(optional)_ | `async_execution` | `Optional[bool]` | Whether the task should be executed asynchronously. Defaults to False. |
| **Human Input** _(optional)_ | `human_input` | `Optional[bool]` | Whether the task should have a human review the final answer of the agent. Defaults to False. |
+| **Markdown** _(optional)_ | `markdown` | `Optional[bool]` | Whether the task should instruct the agent to return the final answer formatted in Markdown. Defaults to False. |
| **Config** _(optional)_ | `config` | `Optional[Dict[str, Any]]` | Task-specific configuration parameters. |
| **Output File** _(optional)_ | `output_file` | `Optional[str]` | File path for storing the task output. |
| **Output JSON** _(optional)_ | `output_json` | `Optional[Type[BaseModel]]` | A Pydantic model to structure the JSON output. |
@@ -94,6 +95,7 @@ reporting_task:
A fully fledge reports with the mains topics, each with a full section of information.
Formatted as markdown without '```'
agent: reporting_analyst
+ markdown: true
output_file: report.md
```
@@ -182,9 +184,9 @@ reporting_task = Task(
""",
expected_output="""
A fully fledge reports with the mains topics, each with a full section of information.
- Formatted as markdown without '```'
""",
agent=reporting_analyst,
+ markdown=True, # Enable markdown formatting for the final output
output_file="report.md"
)
```
@@ -257,6 +259,54 @@ if task_output.pydantic:
print(f"Pydantic Output: {task_output.pydantic}")
```
+## Markdown Output Formatting
+
+The `markdown` parameter enables automatic markdown formatting for task outputs. When set to `True`, the task will instruct the agent to format the final answer using proper Markdown syntax.
+
+### Using Markdown Formatting
+
+```python Code
+# Example task with markdown formatting enabled
+formatted_task = Task(
+ description="Create a comprehensive report on AI trends",
+ expected_output="A well-structured report with headers, sections, and bullet points",
+ agent=reporter_agent,
+ markdown=True # Enable automatic markdown formatting
+)
+```
+
+When `markdown=True`, the agent will receive additional instructions to format the output using:
+- `#` for headers
+- `**text**` for bold text
+- `*text*` for italic text
+- `-` or `*` for bullet points
+- `` `code` `` for inline code
+- ``` ```language ``` for code blocks
+
+### YAML Configuration with Markdown
+
+```yaml tasks.yaml
+analysis_task:
+ description: >
+ Analyze the market data and create a detailed report
+ expected_output: >
+ A comprehensive analysis with charts and key findings
+ agent: analyst
+ markdown: true # Enable markdown formatting
+ output_file: analysis.md
+```
+
+### Benefits of Markdown Output
+
+- **Consistent Formatting**: Ensures all outputs follow proper markdown conventions
+- **Better Readability**: Structured content with headers, lists, and emphasis
+- **Documentation Ready**: Output can be directly used in documentation systems
+- **Cross-Platform Compatibility**: Markdown is universally supported
+
+
+The markdown formatting instructions are automatically added to the task prompt when `markdown=True`, so you don't need to specify formatting requirements in your task description.
+
+
## Task Dependencies and Context
Tasks can depend on the output of other tasks using the `context` attribute. For example: