mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 00:28:31 +00:00
fix: Resolve type errors identified by mypy
Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
@@ -7,6 +7,19 @@ from crewai.utilities import I18N
|
|||||||
|
|
||||||
i18n = I18N()
|
i18n = I18N()
|
||||||
|
|
||||||
|
def _get_add_image_tool_name() -> str:
|
||||||
|
"""Safely get the tool name from i18n."""
|
||||||
|
tool_info = i18n.tools("add_image")
|
||||||
|
if isinstance(tool_info, dict):
|
||||||
|
return tool_info.get("name", "Add Image")
|
||||||
|
return "Add Image" # Default name if not a dict
|
||||||
|
|
||||||
|
def _get_add_image_tool_description() -> str:
|
||||||
|
"""Safely get the tool description from i18n."""
|
||||||
|
tool_info = i18n.tools("add_image")
|
||||||
|
if isinstance(tool_info, dict):
|
||||||
|
return tool_info.get("description", "Tool for adding images to the content")
|
||||||
|
return "Tool for adding images to the content" # Default description if not a dict
|
||||||
|
|
||||||
class AddImageToolSchema(BaseModel):
|
class AddImageToolSchema(BaseModel):
|
||||||
image_url: str = Field(..., description="The URL or path of the image to add")
|
image_url: str = Field(..., description="The URL or path of the image to add")
|
||||||
@@ -18,10 +31,8 @@ class AddImageToolSchema(BaseModel):
|
|||||||
class AddImageTool(BaseTool):
|
class AddImageTool(BaseTool):
|
||||||
"""Tool for adding images to the content"""
|
"""Tool for adding images to the content"""
|
||||||
|
|
||||||
name: str = Field(default_factory=lambda: i18n.tools("add_image")["name"]) # type: ignore
|
name: str = Field(default_factory=_get_add_image_tool_name)
|
||||||
description: str = Field(
|
description: str = Field(default_factory=_get_add_image_tool_description)
|
||||||
default_factory=lambda: i18n.tools("add_image")["description"]
|
|
||||||
) # type: ignore
|
|
||||||
args_schema: type[BaseModel] = AddImageToolSchema
|
args_schema: type[BaseModel] = AddImageToolSchema
|
||||||
|
|
||||||
def _run(
|
def _run(
|
||||||
|
|||||||
@@ -81,13 +81,13 @@ class BaseAgentTool(BaseTool):
|
|||||||
available_agents = [agent.role for agent in self.agents]
|
available_agents = [agent.role for agent in self.agents]
|
||||||
logger.debug(f"Available agents: {available_agents}")
|
logger.debug(f"Available agents: {available_agents}")
|
||||||
|
|
||||||
agent = [ # type: ignore # Incompatible types in assignment (expression has type "list[BaseAgent]", variable has type "str | None")
|
matching_agents = [
|
||||||
available_agent
|
available_agent
|
||||||
for available_agent in self.agents
|
for available_agent in self.agents
|
||||||
if self.sanitize_agent_name(available_agent.role) == sanitized_name
|
if self.sanitize_agent_name(available_agent.role) == sanitized_name
|
||||||
]
|
]
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Found {len(agent)} matching agents for role '{sanitized_name}'"
|
f"Found {len(matching_agents)} matching agents for role '{sanitized_name}'"
|
||||||
)
|
)
|
||||||
except (AttributeError, ValueError) as e:
|
except (AttributeError, ValueError) as e:
|
||||||
# Handle specific exceptions that might occur during role name processing
|
# Handle specific exceptions that might occur during role name processing
|
||||||
@@ -101,7 +101,7 @@ class BaseAgentTool(BaseTool):
|
|||||||
error=str(e),
|
error=str(e),
|
||||||
)
|
)
|
||||||
|
|
||||||
if not agent:
|
if not matching_agents:
|
||||||
# No matching agent found after sanitization
|
# No matching agent found after sanitization
|
||||||
return self.i18n.errors("agent_tool_unexisting_coworker").format(
|
return self.i18n.errors("agent_tool_unexisting_coworker").format(
|
||||||
coworkers="\n".join(
|
coworkers="\n".join(
|
||||||
@@ -113,7 +113,7 @@ class BaseAgentTool(BaseTool):
|
|||||||
error=f"No agent found with role '{sanitized_name}'",
|
error=f"No agent found with role '{sanitized_name}'",
|
||||||
)
|
)
|
||||||
|
|
||||||
agent = agent[0]
|
agent: BaseAgent = matching_agents[0]
|
||||||
try:
|
try:
|
||||||
task_with_assigned_agent = Task(
|
task_with_assigned_agent = Task(
|
||||||
description=task,
|
description=task,
|
||||||
|
|||||||
@@ -380,6 +380,7 @@ class ToolUsage:
|
|||||||
else ToolCalling
|
else ToolCalling
|
||||||
)
|
)
|
||||||
converter = Converter(
|
converter = Converter(
|
||||||
|
agent=None, # Agent not needed here as function calling is supported/used
|
||||||
text=f"Only tools available:\n###\n{self._render()}\n\nReturn a valid schema for the tool, the tool name must be exactly equal one of the options, use this text to inform the valid output schema:\n\n### TEXT \n{tool_string}",
|
text=f"Only tools available:\n###\n{self._render()}\n\nReturn a valid schema for the tool, the tool name must be exactly equal one of the options, use this text to inform the valid output schema:\n\n### TEXT \n{tool_string}",
|
||||||
llm=self.function_calling_llm,
|
llm=self.function_calling_llm,
|
||||||
model=model,
|
model=model,
|
||||||
|
|||||||
@@ -65,13 +65,18 @@ class TaskEvaluator:
|
|||||||
instructions = f"{instructions}\n\nReturn only valid JSON with the following schema:\n```json\n{model_schema}\n```"
|
instructions = f"{instructions}\n\nReturn only valid JSON with the following schema:\n```json\n{model_schema}\n```"
|
||||||
|
|
||||||
converter = Converter(
|
converter = Converter(
|
||||||
|
agent=self.original_agent, # Pass agent
|
||||||
llm=self.llm,
|
llm=self.llm,
|
||||||
text=evaluation_query,
|
text=evaluation_query,
|
||||||
model=TaskEvaluation,
|
model=TaskEvaluation,
|
||||||
instructions=instructions,
|
instructions=instructions,
|
||||||
)
|
)
|
||||||
|
|
||||||
return converter.to_pydantic()
|
result = converter.to_pydantic()
|
||||||
|
if isinstance(result, TaskEvaluation):
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
raise TypeError(f"Expected TaskEvaluation, got {type(result)}")
|
||||||
|
|
||||||
def evaluate_training_data(
|
def evaluate_training_data(
|
||||||
self, training_data: dict, agent_id: str
|
self, training_data: dict, agent_id: str
|
||||||
@@ -134,6 +139,7 @@ class TaskEvaluator:
|
|||||||
instructions = f"{instructions}\n\nThe json should have the following structure, with the following keys:\n{model_schema}"
|
instructions = f"{instructions}\n\nThe json should have the following structure, with the following keys:\n{model_schema}"
|
||||||
|
|
||||||
converter = Converter(
|
converter = Converter(
|
||||||
|
agent=self.original_agent, # Pass agent
|
||||||
llm=self.llm,
|
llm=self.llm,
|
||||||
text=evaluation_query,
|
text=evaluation_query,
|
||||||
model=TrainingTaskEvaluation,
|
model=TrainingTaskEvaluation,
|
||||||
@@ -141,4 +147,7 @@ class TaskEvaluator:
|
|||||||
)
|
)
|
||||||
|
|
||||||
pydantic_result = converter.to_pydantic()
|
pydantic_result = converter.to_pydantic()
|
||||||
return pydantic_result
|
if isinstance(pydantic_result, TrainingTaskEvaluation):
|
||||||
|
return pydantic_result
|
||||||
|
else:
|
||||||
|
raise TypeError(f"Expected TrainingTaskEvaluation, got {type(pydantic_result)}")
|
||||||
|
|||||||
Reference in New Issue
Block a user