mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-07 15:18:29 +00:00
fix: Resolve final type-checker errors for hosted tools implementation
- Add cast imports and proper type casting in agent.py - Fix Liskov substitution principle violations in langgraph_adapter.py - Add type ignore for lite_agent.py tool parameter mismatch - Filter tools properly in tool_utils.py for ToolUsage constructor All type-checker issues verified locally before pushing. Co-Authored-By: João <joao@crewai.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import shutil
|
||||
import subprocess
|
||||
import time
|
||||
from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple, Type, Union
|
||||
from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple, Type, Union, cast
|
||||
|
||||
from pydantic import Field, InstanceOf, PrivateAttr, model_validator
|
||||
|
||||
@@ -399,8 +399,13 @@ class Agent(BaseAgent):
|
||||
),
|
||||
)
|
||||
|
||||
tools = tools or self.tools or []
|
||||
self.create_agent_executor(tools=tools, task=task)
|
||||
if tools is not None:
|
||||
agent_tools: List[Union[BaseTool, dict]] = cast(List[Union[BaseTool, dict]], tools)
|
||||
elif self.tools is not None:
|
||||
agent_tools = cast(List[Union[BaseTool, dict]], self.tools)
|
||||
else:
|
||||
agent_tools = []
|
||||
self.create_agent_executor(tools=agent_tools, task=task)
|
||||
|
||||
if self.crew and self.crew._train:
|
||||
task_prompt = self._training_handler(task_prompt=task_prompt)
|
||||
@@ -803,7 +808,7 @@ class Agent(BaseAgent):
|
||||
goal=self.goal,
|
||||
backstory=self.backstory,
|
||||
llm=self.llm,
|
||||
tools=self.tools or [],
|
||||
tools=[tool for tool in (self.tools or []) if isinstance(tool, BaseTool)],
|
||||
max_iterations=self.max_iter,
|
||||
max_execution_time=self.max_execution_time,
|
||||
respect_context_window=self.respect_context_window,
|
||||
@@ -841,7 +846,7 @@ class Agent(BaseAgent):
|
||||
goal=self.goal,
|
||||
backstory=self.backstory,
|
||||
llm=self.llm,
|
||||
tools=self.tools or [],
|
||||
tools=[tool for tool in (self.tools or []) if isinstance(tool, BaseTool)],
|
||||
max_iterations=self.max_iter,
|
||||
max_execution_time=self.max_execution_time,
|
||||
respect_context_window=self.respect_context_window,
|
||||
|
||||
@@ -127,7 +127,8 @@ class LangGraphAgentAdapter(BaseAgentAdapter):
|
||||
tools: Optional[List[BaseTool]] = None,
|
||||
) -> str:
|
||||
"""Execute a task using the LangGraph workflow."""
|
||||
self.create_agent_executor(tools)
|
||||
mixed_tools: Optional[List[Union[BaseTool, dict]]] = tools # type: ignore[assignment]
|
||||
self.create_agent_executor(mixed_tools)
|
||||
|
||||
self.configure_structured_output(task)
|
||||
|
||||
@@ -209,8 +210,8 @@ class LangGraphAgentAdapter(BaseAgentAdapter):
|
||||
all_tools = existing_base_tools + base_tools
|
||||
if all_tools:
|
||||
self._tool_adapter.configure_tools(all_tools)
|
||||
available_tools = self._tool_adapter.tools()
|
||||
self._graph.tools = available_tools
|
||||
available_tools = self._tool_adapter.tools()
|
||||
self._graph.tools = available_tools
|
||||
|
||||
def get_delegation_tools(self, agents: List[BaseAgent]) -> List[BaseTool]:
|
||||
"""Implement delegation tools support for LangGraph."""
|
||||
|
||||
@@ -566,7 +566,7 @@ class LiteAgent(FlowTrackable, BaseModel):
|
||||
try:
|
||||
tool_result = execute_tool_and_check_finality(
|
||||
agent_action=formatted_answer,
|
||||
tools=self._parsed_tools,
|
||||
tools=self._parsed_tools, # type: ignore[arg-type]
|
||||
i18n=self.i18n,
|
||||
agent_key=self.key,
|
||||
agent_role=self.role,
|
||||
|
||||
@@ -53,11 +53,11 @@ def execute_tool_and_check_finality(
|
||||
except Exception as e:
|
||||
raise ValueError(f"Failed to set fingerprint: {e}")
|
||||
|
||||
# Create tool usage instance - filter to only executable tools for ToolUsage
|
||||
executable_tools_for_usage = [tool for tool in tools if hasattr(tool, 'name') and hasattr(tool, 'result_as_answer')]
|
||||
# Create tool usage instance - filter to only CrewStructuredTool instances for ToolUsage
|
||||
crew_structured_tools = [tool for tool in tools if hasattr(tool, 'name') and hasattr(tool, 'result_as_answer') and not isinstance(tool, dict)]
|
||||
tool_usage = ToolUsage(
|
||||
tools_handler=tools_handler,
|
||||
tools=executable_tools_for_usage,
|
||||
tools=crew_structured_tools,
|
||||
function_calling_llm=function_calling_llm,
|
||||
task=task,
|
||||
agent=agent,
|
||||
|
||||
Reference in New Issue
Block a user