mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-05-03 00:02:36 +00:00
fix: hash callback args correctly to ensure caching works
Some checks failed
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Notify Downstream / notify-downstream (push) Has been cancelled
Build uv cache / build-cache (3.10) (push) Has been cancelled
Build uv cache / build-cache (3.11) (push) Has been cancelled
Build uv cache / build-cache (3.12) (push) Has been cancelled
Build uv cache / build-cache (3.13) (push) Has been cancelled
Some checks failed
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Notify Downstream / notify-downstream (push) Has been cancelled
Build uv cache / build-cache (3.10) (push) Has been cancelled
Build uv cache / build-cache (3.11) (push) Has been cancelled
Build uv cache / build-cache (3.12) (push) Has been cancelled
Build uv cache / build-cache (3.13) (push) Has been cancelled
This commit is contained in:
94
lib/crewai/tests/project/test_callback_with_taskoutput.py
Normal file
94
lib/crewai/tests/project/test_callback_with_taskoutput.py
Normal file
@@ -0,0 +1,94 @@
|
||||
"""Test callback decorator with TaskOutput arguments."""
|
||||
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from crewai import Agent, Crew, Task
|
||||
from crewai.project import CrewBase, callback, task
|
||||
from crewai.tasks.output_format import OutputFormat
|
||||
from crewai.tasks.task_output import TaskOutput
|
||||
|
||||
|
||||
def test_callback_decorator_with_taskoutput() -> None:
|
||||
"""Test that @callback decorator works with TaskOutput arguments."""
|
||||
|
||||
@CrewBase
|
||||
class TestCrew:
|
||||
"""Test crew with callback."""
|
||||
|
||||
callback_called = False
|
||||
callback_output = None
|
||||
|
||||
@callback
|
||||
def task_callback(self, output: TaskOutput) -> None:
|
||||
"""Test callback that receives TaskOutput."""
|
||||
self.callback_called = True
|
||||
self.callback_output = output
|
||||
|
||||
@task
|
||||
def test_task(self) -> Task:
|
||||
"""Test task with callback."""
|
||||
return Task(
|
||||
description="Test task",
|
||||
expected_output="Test output",
|
||||
callback=self.task_callback,
|
||||
)
|
||||
|
||||
test_crew = TestCrew()
|
||||
task_instance = test_crew.test_task()
|
||||
|
||||
test_output = TaskOutput(
|
||||
description="Test task",
|
||||
agent="Test Agent",
|
||||
raw="test result",
|
||||
output_format=OutputFormat.RAW,
|
||||
)
|
||||
|
||||
task_instance.callback(test_output)
|
||||
|
||||
assert test_crew.callback_called
|
||||
assert test_crew.callback_output == test_output
|
||||
|
||||
|
||||
def test_callback_decorator_with_taskoutput_integration() -> None:
|
||||
"""Integration test for callback with actual task execution."""
|
||||
|
||||
@CrewBase
|
||||
class TestCrew:
|
||||
"""Test crew with callback integration."""
|
||||
|
||||
callback_called = False
|
||||
received_output: TaskOutput | None = None
|
||||
|
||||
@callback
|
||||
def task_callback(self, output: TaskOutput) -> None:
|
||||
"""Callback executed after task completion."""
|
||||
self.callback_called = True
|
||||
self.received_output = output
|
||||
|
||||
@task
|
||||
def test_task(self) -> Task:
|
||||
"""Test task."""
|
||||
return Task(
|
||||
description="Test task",
|
||||
expected_output="Test output",
|
||||
callback=self.task_callback,
|
||||
)
|
||||
|
||||
test_crew = TestCrew()
|
||||
|
||||
agent = Agent(
|
||||
role="Test Agent",
|
||||
goal="Test goal",
|
||||
backstory="Test backstory",
|
||||
)
|
||||
|
||||
task_instance = test_crew.test_task()
|
||||
task_instance.agent = agent
|
||||
|
||||
with patch.object(Agent, "execute_task") as mock_execute:
|
||||
mock_execute.return_value = "test result"
|
||||
task_instance.execute_sync()
|
||||
|
||||
assert test_crew.callback_called
|
||||
assert test_crew.received_output is not None
|
||||
assert test_crew.received_output.raw == "test result"
|
||||
Reference in New Issue
Block a user