mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 15:48:29 +00:00
* fix(manager_llm): handle coworker role name case/whitespace properly - Add .strip() to agent name and role comparisons in base_agent_tools.py - Add test case for varied role name cases and whitespace - Fix issue #1503 with manager LLM delegation Co-Authored-By: Joe Moura <joao@crewai.com> * fix(manager_llm): improve error handling and add debug logging - Add debug logging for better observability - Add sanitize_agent_name helper method - Enhance error messages with more context - Add parameterized tests for edge cases: - Embedded quotes - Trailing newlines - Multiple whitespace - Case variations - None values - Improve error handling with specific exceptions Co-Authored-By: Joe Moura <joao@crewai.com> * style: fix import sorting in base_agent_tools and test_manager_llm_delegation Co-Authored-By: Joe Moura <joao@crewai.com> * fix(manager_llm): improve whitespace normalization in role name matching Co-Authored-By: Joe Moura <joao@crewai.com> * style: fix import sorting in base_agent_tools and test_manager_llm_delegation Co-Authored-By: Joe Moura <joao@crewai.com> * fix(manager_llm): add error message template for agent tool execution errors Co-Authored-By: Joe Moura <joao@crewai.com> * style: fix import sorting in test_manager_llm_delegation.py Co-Authored-By: Joe Moura <joao@crewai.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com>
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from crewai import Agent, Task
|
|
from crewai.tools.agent_tools.base_agent_tools import BaseAgentTool
|
|
|
|
|
|
class TestAgentTool(BaseAgentTool):
|
|
"""Concrete implementation of BaseAgentTool for testing."""
|
|
def _run(self, *args, **kwargs):
|
|
"""Implement required _run method."""
|
|
return "Test response"
|
|
|
|
@pytest.mark.parametrize("role_name,should_match", [
|
|
('Futel Official Infopoint', True), # exact match
|
|
(' "Futel Official Infopoint" ', True), # extra quotes and spaces
|
|
('Futel Official Infopoint\n', True), # trailing newline
|
|
('"Futel Official Infopoint"', True), # embedded quotes
|
|
(' FUTEL\nOFFICIAL INFOPOINT ', True), # multiple whitespace and newline
|
|
('futel official infopoint', True), # lowercase
|
|
('FUTEL OFFICIAL INFOPOINT', True), # uppercase
|
|
('Non Existent Agent', False), # non-existent agent
|
|
(None, False), # None agent name
|
|
])
|
|
def test_agent_tool_role_matching(role_name, should_match):
|
|
"""Test that agent tools can match roles regardless of case, whitespace, and special characters."""
|
|
# Create test agent
|
|
test_agent = Agent(
|
|
role='Futel Official Infopoint',
|
|
goal='Answer questions about Futel',
|
|
backstory='Futel Football Club info',
|
|
allow_delegation=False
|
|
)
|
|
|
|
# Create test agent tool
|
|
agent_tool = TestAgentTool(
|
|
name="test_tool",
|
|
description="Test tool",
|
|
agents=[test_agent]
|
|
)
|
|
|
|
# Test role matching
|
|
result = agent_tool._execute(
|
|
agent_name=role_name,
|
|
task='Test task',
|
|
context=None
|
|
)
|
|
|
|
if should_match:
|
|
assert "coworker mentioned not found" not in result.lower(), \
|
|
f"Should find agent with role name: {role_name}"
|
|
else:
|
|
assert "coworker mentioned not found" in result.lower(), \
|
|
f"Should not find agent with role name: {role_name}"
|