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.
This commit is contained in:
lorenzejay
2025-04-11 14:33:19 -07:00
parent 7c4a824b4f
commit 24bb12fdd8

View File

@@ -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."""