fix: improve type safety and error handling

Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
Devin AI
2025-02-09 21:23:34 +00:00
parent 257780ff6a
commit 639e5342de
4 changed files with 191 additions and 45 deletions

View File

@@ -10,13 +10,12 @@ import instructor
import pydantic_core
import pytest
from crewai.llm import LLM
from crewai.utilities.evaluators.crew_evaluator_handler import TaskEvaluationPydanticOutput
from crewai.agent import Agent
from crewai.agents.cache import CacheHandler
from crewai.crew import Crew
from crewai.crews.crew_output import CrewOutput
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
from crewai.llm import LLM
from crewai.memory.contextual.contextual_memory import ContextualMemory
from crewai.process import Process
from crewai.project import crew
@@ -26,6 +25,9 @@ from crewai.tasks.output_format import OutputFormat
from crewai.tasks.task_output import TaskOutput
from crewai.types.usage_metrics import UsageMetrics
from crewai.utilities import Logger
from crewai.utilities.evaluators.crew_evaluator_handler import (
TaskEvaluationPydanticOutput,
)
from crewai.utilities.rpm_controller import RPMController
from crewai.utilities.task_output_storage_handler import TaskOutputStorageHandler
@@ -3341,6 +3343,38 @@ def test_crew_test_backward_compatibility(mock_kickoff, mock_copy, mock_evaluato
args = mock_evaluator.call_args[0]
assert args[1] == "gpt-4"
@mock.patch("crewai.crew.CrewEvaluator")
@mock.patch.object(Crew, "copy")
@mock.patch.object(Crew, "kickoff")
def test_crew_test_with_invalid_inputs(mock_kickoff, mock_copy, mock_evaluator):
"""Test that Crew.test() validates inputs properly."""
task = Task(description="Test task", expected_output="Test output", agent=researcher)
crew = Crew(agents=[researcher], tasks=[task])
mock_copy.return_value = crew
with pytest.raises(TypeError):
crew.test(n_iterations=0) # Invalid iterations
with pytest.raises(ValueError):
crew.test(n_iterations=1, inputs="invalid") # Invalid inputs type
with pytest.raises(ValueError):
crew.test(n_iterations=1, llm="") # Empty LLM name
@mock.patch("crewai.crew.CrewEvaluator")
@mock.patch.object(Crew, "copy")
@mock.patch.object(Crew, "kickoff")
def test_crew_test_concurrent_execution(mock_kickoff, mock_copy, mock_evaluator):
"""Test that Crew.test() handles concurrent execution properly."""
task = Task(description="Test task", expected_output="Test output", agent=researcher)
crew = Crew(agents=[researcher], tasks=[task])
mock_copy.return_value = crew
mock_evaluator.return_value = mock.MagicMock()
n_iterations = 3
crew.test(n_iterations=n_iterations)
assert mock_evaluator.return_value.set_iteration.call_count == n_iterations
@mock.patch("crewai.crew.CrewEvaluator")
@mock.patch.object(Crew, "copy")
@mock.patch.object(Crew, "kickoff")

View File

@@ -2,9 +2,9 @@ from unittest import mock
import pytest
from crewai.llm import LLM
from crewai.agent import Agent
from crewai.crew import Crew
from crewai.llm import LLM
from crewai.task import Task
from crewai.tasks.task_output import TaskOutput
from crewai.utilities.evaluators.crew_evaluator_handler import (