mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-11 09:08:31 +00:00
fix: resolve lint and type-checker issues in AgentOps integration
- Fix event handler signatures to match expected (source, event) pattern - Change 'arguments' to 'tool_args' for tool usage events - Update TaskEvaluationEvent to use correct attributes (evaluation_type, task) - Fix corrupted tests/__init__.py file - Add explicit re-export in src third_party __init__.py Co-Authored-By: João <joao@crewai.com>
This commit is contained in:
@@ -1 +1 @@
|
||||
from .agentops_listener import agentops_listener
|
||||
from .agentops_listener import agentops_listener as agentops_listener
|
||||
|
||||
@@ -32,23 +32,27 @@ class AgentOpsListener(BaseEventListener):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
crewai_event_bus.register_handler(
|
||||
CrewKickoffStartedEvent, self._handle_crew_kickoff_started
|
||||
)
|
||||
crewai_event_bus.register_handler(
|
||||
CrewKickoffCompletedEvent, self._handle_crew_kickoff_completed
|
||||
)
|
||||
crewai_event_bus.register_handler(
|
||||
ToolUsageStartedEvent, self._handle_tool_usage_started
|
||||
)
|
||||
crewai_event_bus.register_handler(
|
||||
ToolUsageErrorEvent, self._handle_tool_usage_error
|
||||
)
|
||||
crewai_event_bus.register_handler(
|
||||
TaskEvaluationEvent, self._handle_task_evaluation
|
||||
)
|
||||
@crewai_event_bus.on(CrewKickoffStartedEvent)
|
||||
def on_crew_kickoff_started(source, event):
|
||||
self._handle_crew_kickoff_started(source, event)
|
||||
|
||||
def _handle_crew_kickoff_started(self, event: CrewKickoffStartedEvent):
|
||||
@crewai_event_bus.on(CrewKickoffCompletedEvent)
|
||||
def on_crew_kickoff_completed(source, event):
|
||||
self._handle_crew_kickoff_completed(source, event)
|
||||
|
||||
@crewai_event_bus.on(ToolUsageStartedEvent)
|
||||
def on_tool_usage_started(source, event):
|
||||
self._handle_tool_usage_started(source, event)
|
||||
|
||||
@crewai_event_bus.on(ToolUsageErrorEvent)
|
||||
def on_tool_usage_error(source, event):
|
||||
self._handle_tool_usage_error(source, event)
|
||||
|
||||
@crewai_event_bus.on(TaskEvaluationEvent)
|
||||
def on_task_evaluation(source, event):
|
||||
self._handle_task_evaluation(source, event)
|
||||
|
||||
def _handle_crew_kickoff_started(self, source, event: CrewKickoffStartedEvent):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
@@ -64,7 +68,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to start AgentOps session: {e}")
|
||||
|
||||
def _handle_crew_kickoff_completed(self, event: CrewKickoffCompletedEvent):
|
||||
def _handle_crew_kickoff_completed(self, source, event: CrewKickoffCompletedEvent):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
@@ -74,7 +78,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to end AgentOps session: {e}")
|
||||
|
||||
def _handle_tool_usage_started(self, event: ToolUsageStartedEvent):
|
||||
def _handle_tool_usage_started(self, source, event: ToolUsageStartedEvent):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
@@ -84,7 +88,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
action_type="tool_usage",
|
||||
params={
|
||||
"tool_name": event.tool_name,
|
||||
"arguments": event.arguments,
|
||||
"tool_args": event.tool_args,
|
||||
},
|
||||
)
|
||||
)
|
||||
@@ -92,7 +96,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to record tool usage in AgentOps: {e}")
|
||||
|
||||
def _handle_tool_usage_error(self, event: ToolUsageErrorEvent):
|
||||
def _handle_tool_usage_error(self, source, event: ToolUsageErrorEvent):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
@@ -103,7 +107,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
error_type="ToolUsageError",
|
||||
details={
|
||||
"tool_name": event.tool_name,
|
||||
"arguments": event.arguments,
|
||||
"tool_args": event.tool_args,
|
||||
},
|
||||
)
|
||||
)
|
||||
@@ -111,7 +115,7 @@ class AgentOpsListener(BaseEventListener):
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to record tool usage error in AgentOps: {e}")
|
||||
|
||||
def _handle_task_evaluation(self, event: TaskEvaluationEvent):
|
||||
def _handle_task_evaluation(self, source, event: TaskEvaluationEvent):
|
||||
if self.agentops is None:
|
||||
return
|
||||
|
||||
@@ -120,13 +124,12 @@ class AgentOpsListener(BaseEventListener):
|
||||
self.agentops.ActionEvent(
|
||||
action_type="task_evaluation",
|
||||
params={
|
||||
"task_id": str(event.task_id),
|
||||
"score": event.score,
|
||||
"feedback": event.feedback,
|
||||
"evaluation_type": event.evaluation_type,
|
||||
"task": str(event.task) if event.task else None,
|
||||
},
|
||||
)
|
||||
)
|
||||
logger.debug(f"AgentOps recorded task evaluation: {event.task_id}")
|
||||
logger.debug(f"AgentOps recorded task evaluation: {event.evaluation_type}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to record task evaluation in AgentOps: {e}")
|
||||
|
||||
|
||||
198
tests/utilities/events/third_party/__init__.py
vendored
198
tests/utilities/events/third_party/__init__.py
vendored
@@ -1,199 +1 @@
|
||||
|
||||
<create_file path="/home/ubuntu/repos/crewAI/tests/utilities/events/third_party/test_agentops_listener.py">
|
||||
import pytest
|
||||
from unittest.mock import Mock, patch, MagicMock
|
||||
from crewai.utilities.events.third_party.agentops_listener import AgentOpsListener
|
||||
from crewai.utilities.events.crew_events import (
|
||||
CrewKickoffStartedEvent,
|
||||
CrewKickoffCompletedEvent,
|
||||
)
|
||||
from crewai.utilities.events.task_events import TaskEvaluationEvent
|
||||
from crewai.utilities.events.tool_usage_events import (
|
||||
ToolUsageStartedEvent,
|
||||
ToolUsageErrorEvent,
|
||||
)
|
||||
from crewai.utilities.events.crewai_event_bus import CrewAIEventsBus
|
||||
|
||||
|
||||
class TestAgentOpsListener:
|
||||
def test_agentops_listener_initialization_with_agentops_installed(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
assert listener.agentops is not None
|
||||
|
||||
def test_agentops_listener_initialization_without_agentops_installed(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops", side_effect=ImportError):
|
||||
listener = AgentOpsListener()
|
||||
assert listener.agentops is None
|
||||
|
||||
def test_setup_listeners_with_agentops_installed(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
mock_event_bus = Mock(spec=CrewAIEventsBus)
|
||||
|
||||
listener.setup_listeners(mock_event_bus)
|
||||
|
||||
assert mock_event_bus.register_handler.call_count == 5
|
||||
mock_event_bus.register_handler.assert_any_call(
|
||||
CrewKickoffStartedEvent, listener._handle_crew_kickoff_started
|
||||
)
|
||||
mock_event_bus.register_handler.assert_any_call(
|
||||
CrewKickoffCompletedEvent, listener._handle_crew_kickoff_completed
|
||||
)
|
||||
mock_event_bus.register_handler.assert_any_call(
|
||||
ToolUsageStartedEvent, listener._handle_tool_usage_started
|
||||
)
|
||||
mock_event_bus.register_handler.assert_any_call(
|
||||
ToolUsageErrorEvent, listener._handle_tool_usage_error
|
||||
)
|
||||
mock_event_bus.register_handler.assert_any_call(
|
||||
TaskEvaluationEvent, listener._handle_task_evaluation
|
||||
)
|
||||
|
||||
def test_setup_listeners_without_agentops_installed(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops", side_effect=ImportError):
|
||||
listener = AgentOpsListener()
|
||||
mock_event_bus = Mock(spec=CrewAIEventsBus)
|
||||
|
||||
listener.setup_listeners(mock_event_bus)
|
||||
|
||||
mock_event_bus.register_handler.assert_not_called()
|
||||
|
||||
def test_handle_crew_kickoff_started_with_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffStartedEvent(crew_id="test-crew")
|
||||
|
||||
listener._handle_crew_kickoff_started(event)
|
||||
|
||||
mock_agentops.start_session.assert_called_once()
|
||||
call_args = mock_agentops.start_session.call_args
|
||||
assert call_args[1]["tags"] == ["crewai", "crew_kickoff"]
|
||||
|
||||
def test_handle_crew_kickoff_started_without_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops", side_effect=ImportError):
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffStartedEvent(crew_id="test-crew")
|
||||
|
||||
listener._handle_crew_kickoff_started(event)
|
||||
|
||||
def test_handle_crew_kickoff_completed_with_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffCompletedEvent(crew_id="test-crew", crew_output=Mock())
|
||||
|
||||
listener._handle_crew_kickoff_completed(event)
|
||||
|
||||
mock_agentops.end_session.assert_called_once_with("Success")
|
||||
|
||||
def test_handle_crew_kickoff_completed_without_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops", side_effect=ImportError):
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffCompletedEvent(crew_id="test-crew", crew_output=Mock())
|
||||
|
||||
listener._handle_crew_kickoff_completed(event)
|
||||
|
||||
def test_handle_tool_usage_started_with_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
event = ToolUsageStartedEvent(
|
||||
tool_name="test_tool",
|
||||
arguments={"arg1": "value1"},
|
||||
agent_id="test-agent",
|
||||
task_id="test-task"
|
||||
)
|
||||
|
||||
listener._handle_tool_usage_started(event)
|
||||
|
||||
mock_agentops.record.assert_called_once()
|
||||
call_args = mock_agentops.record.call_args[0][0]
|
||||
assert hasattr(call_args, "action_type")
|
||||
|
||||
def test_handle_tool_usage_error_with_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
event = ToolUsageErrorEvent(
|
||||
tool_name="test_tool",
|
||||
arguments={"arg1": "value1"},
|
||||
error="Test error",
|
||||
agent_id="test-agent",
|
||||
task_id="test-task"
|
||||
)
|
||||
|
||||
listener._handle_tool_usage_error(event)
|
||||
|
||||
mock_agentops.record.assert_called_once()
|
||||
|
||||
def test_handle_task_evaluation_with_agentops(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
listener = AgentOpsListener()
|
||||
event = TaskEvaluationEvent(
|
||||
task_id="test-task",
|
||||
score=0.85,
|
||||
feedback="Good performance"
|
||||
)
|
||||
|
||||
listener._handle_task_evaluation(event)
|
||||
|
||||
mock_agentops.record.assert_called_once()
|
||||
|
||||
def test_handle_crew_kickoff_started_with_exception(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
mock_agentops.start_session.side_effect = Exception("Test exception")
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffStartedEvent(crew_id="test-crew")
|
||||
|
||||
listener._handle_crew_kickoff_started(event)
|
||||
|
||||
def test_handle_crew_kickoff_completed_with_exception(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
mock_agentops.end_session.side_effect = Exception("Test exception")
|
||||
listener = AgentOpsListener()
|
||||
event = CrewKickoffCompletedEvent(crew_id="test-crew", crew_output=Mock())
|
||||
|
||||
listener._handle_crew_kickoff_completed(event)
|
||||
|
||||
def test_handle_tool_usage_started_with_exception(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
mock_agentops.record.side_effect = Exception("Test exception")
|
||||
listener = AgentOpsListener()
|
||||
event = ToolUsageStartedEvent(
|
||||
tool_name="test_tool",
|
||||
arguments={"arg1": "value1"},
|
||||
agent_id="test-agent",
|
||||
task_id="test-task"
|
||||
)
|
||||
|
||||
listener._handle_tool_usage_started(event)
|
||||
|
||||
def test_handle_tool_usage_error_with_exception(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
mock_agentops.record.side_effect = Exception("Test exception")
|
||||
listener = AgentOpsListener()
|
||||
event = ToolUsageErrorEvent(
|
||||
tool_name="test_tool",
|
||||
arguments={"arg1": "value1"},
|
||||
error="Test error",
|
||||
agent_id="test-agent",
|
||||
task_id="test-task"
|
||||
)
|
||||
|
||||
listener._handle_tool_usage_error(event)
|
||||
|
||||
def test_handle_task_evaluation_with_exception(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops") as mock_agentops:
|
||||
mock_agentops.record.side_effect = Exception("Test exception")
|
||||
listener = AgentOpsListener()
|
||||
event = TaskEvaluationEvent(
|
||||
task_id="test-task",
|
||||
score=0.85,
|
||||
feedback="Good performance"
|
||||
)
|
||||
|
||||
listener._handle_task_evaluation(event)
|
||||
|
||||
def test_agentops_listener_instance_creation(self):
|
||||
with patch("crewai.utilities.events.third_party.agentops_listener.agentops"):
|
||||
from crewai.utilities.events.third_party.agentops_listener import agentops_listener
|
||||
assert agentops_listener is not None
|
||||
assert isinstance(agentops_listener, AgentOpsListener)
|
||||
|
||||
Reference in New Issue
Block a user