mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-11 00:58:30 +00:00
fix: resolve mypy type errors across agent adapters and core modules
This commit is contained in:
@@ -22,8 +22,10 @@ from crewai.utilities import Logger
|
|||||||
from crewai.utilities.converter import Converter
|
from crewai.utilities.converter import Converter
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from langgraph.checkpoint.memory import MemorySaver
|
from langgraph.checkpoint.memory import (
|
||||||
from langgraph.prebuilt import create_react_agent
|
MemorySaver, # type: ignore[import-not-found]
|
||||||
|
)
|
||||||
|
from langgraph.prebuilt import create_react_agent # type: ignore[import-not-found]
|
||||||
|
|
||||||
LANGGRAPH_AVAILABLE = True
|
LANGGRAPH_AVAILABLE = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@@ -55,7 +57,7 @@ class LangGraphAgentAdapter(BaseAgentAdapter):
|
|||||||
llm: Any = None,
|
llm: Any = None,
|
||||||
max_iterations: int = 10,
|
max_iterations: int = 10,
|
||||||
agent_config: Optional[dict[str, Any]] = None,
|
agent_config: Optional[dict[str, Any]] = None,
|
||||||
**kwargs,
|
**kwargs: Any,
|
||||||
):
|
):
|
||||||
"""Initialize the LangGraph agent adapter."""
|
"""Initialize the LangGraph agent adapter."""
|
||||||
if not LANGGRAPH_AVAILABLE:
|
if not LANGGRAPH_AVAILABLE:
|
||||||
@@ -198,7 +200,7 @@ class LangGraphAgentAdapter(BaseAgentAdapter):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def create_agent_executor(
|
def create_agent_executor(
|
||||||
self, task=None, tools: Optional[list[BaseTool]] = None
|
self, task: Any = None, tools: Optional[list[BaseTool]] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Configure the LangGraph agent for execution."""
|
"""Configure the LangGraph agent for execution."""
|
||||||
self.configure_tools(tools)
|
self.configure_tools(tools)
|
||||||
@@ -222,6 +224,6 @@ class LangGraphAgentAdapter(BaseAgentAdapter):
|
|||||||
"""Convert output format if needed."""
|
"""Convert output format if needed."""
|
||||||
return Converter(llm=llm, text=text, model=model, instructions=instructions)
|
return Converter(llm=llm, text=text, model=model, instructions=instructions)
|
||||||
|
|
||||||
def configure_structured_output(self, task) -> None:
|
def configure_structured_output(self, task: Any) -> None:
|
||||||
"""Configure the structured output for LangGraph."""
|
"""Configure the structured output for LangGraph."""
|
||||||
self._converter_adapter.configure_structured_output(task)
|
self._converter_adapter.configure_structured_output(task)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from crewai.agents.agent_adapters.base_converter_adapter import BaseConverterAdapter
|
from crewai.agents.agent_adapters.base_converter_adapter import BaseConverterAdapter
|
||||||
from crewai.utilities.converter import generate_model_description
|
from crewai.utilities.converter import generate_model_description
|
||||||
@@ -7,14 +8,14 @@ from crewai.utilities.converter import generate_model_description
|
|||||||
class LangGraphConverterAdapter(BaseConverterAdapter):
|
class LangGraphConverterAdapter(BaseConverterAdapter):
|
||||||
"""Adapter for handling structured output conversion in LangGraph agents"""
|
"""Adapter for handling structured output conversion in LangGraph agents"""
|
||||||
|
|
||||||
def __init__(self, agent_adapter):
|
def __init__(self, agent_adapter: Any) -> None:
|
||||||
"""Initialize the converter adapter with a reference to the agent adapter"""
|
"""Initialize the converter adapter with a reference to the agent adapter"""
|
||||||
self.agent_adapter = agent_adapter
|
self.agent_adapter = agent_adapter
|
||||||
self._output_format = None
|
self._output_format: str | None = None
|
||||||
self._schema = None
|
self._schema = None
|
||||||
self._system_prompt_appendix = None
|
self._system_prompt_appendix = None
|
||||||
|
|
||||||
def configure_structured_output(self, task) -> None:
|
def configure_structured_output(self, task: Any) -> None:
|
||||||
"""Configure the structured output for LangGraph."""
|
"""Configure the structured output for LangGraph."""
|
||||||
if not (task.output_json or task.output_pydantic):
|
if not (task.output_json or task.output_pydantic):
|
||||||
self._output_format = None
|
self._output_format = None
|
||||||
@@ -41,7 +42,7 @@ Important: Your final answer MUST be provided in the following structured format
|
|||||||
|
|
||||||
{self._schema}
|
{self._schema}
|
||||||
|
|
||||||
DO NOT include any markdown code blocks, backticks, or other formatting around your response.
|
DO NOT include any markdown code blocks, backticks, or other formatting around your response.
|
||||||
The output should be raw JSON that exactly matches the specified schema.
|
The output should be raw JSON that exactly matches the specified schema.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ from crewai.tools.agent_tools.agent_tools import AgentTools
|
|||||||
from crewai.utilities import Logger
|
from crewai.utilities import Logger
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from agents import Agent as OpenAIAgent # type: ignore
|
from agents import Agent as OpenAIAgent # type: ignore[import-not-found]
|
||||||
from agents import Runner, enable_verbose_stdout_logging # type: ignore
|
from agents import Runner, enable_verbose_stdout_logging
|
||||||
|
|
||||||
from .openai_agent_tool_adapter import OpenAIAgentToolAdapter
|
from .openai_agent_tool_adapter import OpenAIAgentToolAdapter
|
||||||
|
|
||||||
@@ -40,13 +40,14 @@ class OpenAIAgentAdapter(BaseAgentAdapter):
|
|||||||
step_callback: Any = Field(default=None)
|
step_callback: Any = Field(default=None)
|
||||||
_tool_adapter: "OpenAIAgentToolAdapter" = PrivateAttr()
|
_tool_adapter: "OpenAIAgentToolAdapter" = PrivateAttr()
|
||||||
_converter_adapter: OpenAIConverterAdapter = PrivateAttr()
|
_converter_adapter: OpenAIConverterAdapter = PrivateAttr()
|
||||||
|
agent_executor: Any = Field(default=None)
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model: str = "gpt-4o-mini",
|
model: str = "gpt-4o-mini",
|
||||||
tools: Optional[list[BaseTool]] = None,
|
tools: Optional[list[BaseTool]] = None,
|
||||||
agent_config: Optional[dict] = None,
|
agent_config: Optional[dict[str, Any]] = None,
|
||||||
**kwargs,
|
**kwargs: Any,
|
||||||
):
|
):
|
||||||
if not OPENAI_AVAILABLE:
|
if not OPENAI_AVAILABLE:
|
||||||
raise ImportError(
|
raise ImportError(
|
||||||
@@ -109,6 +110,7 @@ class OpenAIAgentAdapter(BaseAgentAdapter):
|
|||||||
task=task,
|
task=task,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
assert hasattr(self, "agent_executor"), "agent_executor not initialized"
|
||||||
result = self.agent_executor.run_sync(self._openai_agent, task_prompt)
|
result = self.agent_executor.run_sync(self._openai_agent, task_prompt)
|
||||||
final_answer = self.handle_execution_result(result)
|
final_answer = self.handle_execution_result(result)
|
||||||
crewai_event_bus.emit(
|
crewai_event_bus.emit(
|
||||||
@@ -132,7 +134,7 @@ class OpenAIAgentAdapter(BaseAgentAdapter):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def create_agent_executor(
|
def create_agent_executor(
|
||||||
self, task=None, tools: Optional[list[BaseTool]] = None
|
self, task: Any = None, tools: Optional[list[BaseTool]] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Configure the OpenAI agent for execution.
|
Configure the OpenAI agent for execution.
|
||||||
@@ -171,7 +173,7 @@ class OpenAIAgentAdapter(BaseAgentAdapter):
|
|||||||
tools = agent_tools.tools()
|
tools = agent_tools.tools()
|
||||||
return tools
|
return tools
|
||||||
|
|
||||||
def configure_structured_output(self, task) -> None:
|
def configure_structured_output(self, task: Any) -> None:
|
||||||
"""Configure the structured output for the specific agent implementation.
|
"""Configure the structured output for the specific agent implementation.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from crewai.agents.agent_adapters.base_converter_adapter import BaseConverterAdapter
|
from crewai.agents.agent_adapters.base_converter_adapter import BaseConverterAdapter
|
||||||
from crewai.utilities.converter import generate_model_description
|
from crewai.utilities.converter import generate_model_description
|
||||||
@@ -19,14 +20,14 @@ class OpenAIConverterAdapter(BaseConverterAdapter):
|
|||||||
_output_model: The Pydantic model for the output
|
_output_model: The Pydantic model for the output
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, agent_adapter):
|
def __init__(self, agent_adapter: Any) -> None:
|
||||||
"""Initialize the converter adapter with a reference to the agent adapter"""
|
"""Initialize the converter adapter with a reference to the agent adapter"""
|
||||||
self.agent_adapter = agent_adapter
|
self.agent_adapter = agent_adapter
|
||||||
self._output_format = None
|
self._output_format = None
|
||||||
self._schema = None
|
self._schema = None
|
||||||
self._output_model = None
|
self._output_model = None
|
||||||
|
|
||||||
def configure_structured_output(self, task) -> None:
|
def configure_structured_output(self, task: Any) -> None:
|
||||||
"""
|
"""
|
||||||
Configure the structured output for OpenAI agent based on task requirements.
|
Configure the structured output for OpenAI agent based on task requirements.
|
||||||
|
|
||||||
|
|||||||
@@ -791,7 +791,12 @@ class Crew(FlowTrackable, BaseModel):
|
|||||||
manager.tools = []
|
manager.tools = []
|
||||||
raise Exception("Manager agent should not have tools")
|
raise Exception("Manager agent should not have tools")
|
||||||
else:
|
else:
|
||||||
self.manager_llm = create_llm(self.manager_llm)
|
if self.manager_llm is None:
|
||||||
|
from crewai.utilities.llm_utils import create_default_llm
|
||||||
|
|
||||||
|
self.manager_llm = create_default_llm()
|
||||||
|
else:
|
||||||
|
self.manager_llm = create_llm(self.manager_llm)
|
||||||
manager = Agent(
|
manager = Agent(
|
||||||
role=i18n.retrieve("hierarchical_manager_agent", "role"),
|
role=i18n.retrieve("hierarchical_manager_agent", "role"),
|
||||||
goal=i18n.retrieve("hierarchical_manager_agent", "goal"),
|
goal=i18n.retrieve("hierarchical_manager_agent", "goal"),
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ from crewai.utilities.agent_utils import (
|
|||||||
)
|
)
|
||||||
from crewai.utilities.converter import generate_model_description
|
from crewai.utilities.converter import generate_model_description
|
||||||
from crewai.utilities.guardrail import process_guardrail
|
from crewai.utilities.guardrail import process_guardrail
|
||||||
from crewai.utilities.llm_utils import create_llm
|
from crewai.utilities.llm_utils import create_default_llm, create_llm
|
||||||
from crewai.utilities.printer import Printer
|
from crewai.utilities.printer import Printer
|
||||||
from crewai.utilities.token_counter_callback import TokenCalcHandler
|
from crewai.utilities.token_counter_callback import TokenCalcHandler
|
||||||
from crewai.utilities.tool_utils import execute_tool_and_check_finality
|
from crewai.utilities.tool_utils import execute_tool_and_check_finality
|
||||||
@@ -195,7 +195,10 @@ class LiteAgent(FlowTrackable, BaseModel):
|
|||||||
@model_validator(mode="after")
|
@model_validator(mode="after")
|
||||||
def setup_llm(self) -> Self:
|
def setup_llm(self) -> Self:
|
||||||
"""Set up the LLM and other components after initialization."""
|
"""Set up the LLM and other components after initialization."""
|
||||||
self.llm = create_llm(self.llm)
|
if self.llm is None:
|
||||||
|
self.llm = create_default_llm()
|
||||||
|
else:
|
||||||
|
self.llm = create_llm(self.llm)
|
||||||
if not isinstance(self.llm, BaseLLM):
|
if not isinstance(self.llm, BaseLLM):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Expected LLM instance of type BaseLLM, got {type(self.llm).__name__}"
|
f"Expected LLM instance of type BaseLLM, got {type(self.llm).__name__}"
|
||||||
|
|||||||
Reference in New Issue
Block a user