diff --git a/src/crewai/knowledge/utils/knowledge_utils.py b/src/crewai/knowledge/utils/knowledge_utils.py index bdd8b9a4e..db0ca302a 100644 --- a/src/crewai/knowledge/utils/knowledge_utils.py +++ b/src/crewai/knowledge/utils/knowledge_utils.py @@ -2,11 +2,19 @@ from typing import Any, Dict, List def extract_knowledge_context(knowledge_snippets: List[Dict[str, Any]]) -> str: - """Extract knowledge from the task prompt.""" + """Extract knowledge from the task prompt and format it for effective LLM usage.""" valid_snippets = [ result["context"] for result in knowledge_snippets if result and result.get("context") ] + if not valid_snippets: + return "" + snippet = "\n".join(valid_snippets) - return f"Additional Information: {snippet}" if valid_snippets else "" + return ( + "Important Context (You MUST use this information to complete your task " + "accurately and effectively):\n" + f"{snippet}\n\n" + "Make sure to incorporate the above context into your response." + ) diff --git a/tests/knowledge/test_knowledge_utils.py b/tests/knowledge/test_knowledge_utils.py new file mode 100644 index 000000000..fcd532129 --- /dev/null +++ b/tests/knowledge/test_knowledge_utils.py @@ -0,0 +1,39 @@ +"""Test knowledge utils functionality.""" + +from typing import Dict, List, Any + +import pytest + +from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context + + +def test_extract_knowledge_context_with_valid_snippets(): + """Test extracting knowledge context with valid snippets.""" + snippets = [ + {"context": "Fact 1: The sky is blue", "score": 0.9}, + {"context": "Fact 2: Water is wet", "score": 0.8}, + ] + result = extract_knowledge_context(snippets) + expected = "Additional Information: Fact 1: The sky is blue\nFact 2: Water is wet" + assert result == expected + + +def test_extract_knowledge_context_with_empty_snippets(): + """Test extracting knowledge context with empty snippets.""" + snippets: List[Dict[str, Any]] = [] + result = extract_knowledge_context(snippets) + assert result == "" + + +def test_extract_knowledge_context_with_none_snippets(): + """Test extracting knowledge context with None snippets.""" + snippets = [None, {"context": "Valid context"}] # type: ignore + result = extract_knowledge_context(snippets) + assert result == "Additional Information: Valid context" + + +def test_extract_knowledge_context_with_missing_context(): + """Test extracting knowledge context with missing context.""" + snippets = [{"score": 0.9}, {"context": "Valid context"}] + result = extract_knowledge_context(snippets) + assert result == "Additional Information: Valid context"