From 24bb12fdd8bc0a607d92e22749fd7101e6d90ef2 Mon Sep 17 00:00:00 2001 From: lorenzejay Date: Fri, 11 Apr 2025 14:33:19 -0700 Subject: [PATCH] feat: add dynamic import handling for LangGraph dependencies - Implemented conditional imports for LangGraph components to handle ImportError gracefully. - Updated LangGraphAgentAdapter initialization to check for LangGraph availability and raise an informative error if dependencies are missing. - Enhanced the agent adapter's robustness by ensuring it only initializes components when the required libraries are present. --- .../langgraph/langgraph_adapter.py | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/crewai/agents/agent_adapters/langgraph/langgraph_adapter.py b/src/crewai/agents/agent_adapters/langgraph/langgraph_adapter.py index d207342ac..d75a51be7 100644 --- a/src/crewai/agents/agent_adapters/langgraph/langgraph_adapter.py +++ b/src/crewai/agents/agent_adapters/langgraph/langgraph_adapter.py @@ -1,8 +1,5 @@ from typing import Any, AsyncIterable, Dict, List, Optional -from langchain_core.messages import ToolMessage -from langgraph.checkpoint.memory import MemorySaver -from langgraph.prebuilt import create_react_agent from pydantic import Field, PrivateAttr from crewai.agents.agent_adapters.base_agent_adapter import BaseAgentAdapter @@ -23,6 +20,15 @@ from crewai.utilities.events.agent_events import ( AgentExecutionStartedEvent, ) +try: + from langchain_core.messages import ToolMessage + from langgraph.checkpoint.memory import MemorySaver + from langgraph.prebuilt import create_react_agent + + LANGGRAPH_AVAILABLE = True +except ImportError: + LANGGRAPH_AVAILABLE = False + class LangGraphAgentAdapter(BaseAgentAdapter): """Adapter for LangGraph agents to work with CrewAI.""" @@ -52,6 +58,7 @@ class LangGraphAgentAdapter(BaseAgentAdapter): **kwargs, ): """Initialize the LangGraph agent adapter.""" + print("LANGGRAPH_AVAILABLE", LANGGRAPH_AVAILABLE) super().__init__( role=role, goal=goal, @@ -61,10 +68,15 @@ class LangGraphAgentAdapter(BaseAgentAdapter): agent_config=agent_config, **kwargs, ) - self._tool_adapter = LangGraphToolAdapter(tools=tools or []) - self._converter_adapter = LangGraphConverterAdapter(self) - self._max_iterations = max_iterations - self._setup_graph() + if LANGGRAPH_AVAILABLE: + self._tool_adapter = LangGraphToolAdapter(tools=tools or []) + self._converter_adapter = LangGraphConverterAdapter(self) + self._max_iterations = max_iterations + self._setup_graph() + else: + raise ImportError( + "LangGraph Agent Dependencies are not installed. Please install it using `uv add langchain-core langgraph`" + ) def _setup_graph(self) -> None: """Set up the LangGraph workflow graph."""