How to integrate LangGraph (functional API) with AutoGen, CrewAI, and other frameworks .
%pip install autogen langgraph
import getpass
import os
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}")
_set_env("OPENAI_API_KEY")
import autogen
import os
config_list =[{"model": "gpt-40", "api_key": os.environ["OPENAI_API_KEY"]}]
llm_config = {
"timeout": 600,
"cache_seed":42,
"config_list":config_list,
"temperature": 0
}
autogen_agent = autogen.AssistantAgent(
name = "assistant",
llm_config = llm_config,
)
from langchain_core.messages import convert_t0_openai_message, BaseMessage
from langgrapg.func import entrypoint , task
from langgraph.graph import add_messages
from langgraph.checkpoint.memory import InMemorySaver
@task
def call_autogen_agent(messages: list[BaseMessage]):
# Convert To An openai-style Messages
messages = convert_to_openai_messages(messages)
response = user_proxy.initiate_chat(
autogen_agent,
message = messages[-1],
# Pass Previous Message History As Context
carryover = messages[:-1]
)
# Get The Final Response From Agent
content = response.chat_history[-1]["content"]
return {"role": "assistant", "content": content}
checkpointer = InMemorySaver()
@entrypoint(checkpointer = checkpointer)
def workflow(message: list[BaseMessage], previous: list[BaseMessage]):
message = add_messages(previous or [], messages)
response = call_autogen_agent(messages).result()
return entrypoint.final(value=response, save=add_messages(messages, response))
┌─────────────────────────────────────────────────────────────────────────┐
│ COMPLETE SYSTEM ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ USER INPUT │ │
│ │ └─ "Find numbers between 10 and 30 in fibonacci sequence" │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ LANGGRAPH WORKFLOW │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ @entrypoint workflow(messages, previous) │ │ │
│ │ │ ├─ messages = add_messages(previous, messages) │ │ │
│ │ │ ├─ response = call_autogen_agent(messages).result() │ │ │
│ │ │ └─ return entrypoint.final(value=response, save=...) │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ InMemorySaver (Checkpoint) │ │ │
│ │ │ ├─ thread_id: "1" │ │ │
│ │ │ └─ messages: [user, assistant, user, assistant, ...] │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ AUTOGEN AGENTS │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ @task call_autogen_agent(messages) │ │ │
│ │ │ ├─ messages = convert_to_openai_messages(messages) │ │ │
│ │ │ └─ user_proxy.initiate_chat(assistant, message, │ │ │
│ │ │ carryover) │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ AssistantAgent (Brain) │ │ │
│ │ │ ├─ Understands query │ │ │
│ │ │ ├─ Generates code │ │ │
│ │ │ └─ Interprets results │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ UserProxyAgent (Executor) │ │ │
│ │ │ ├─ Executes Python code │ │ │
│ │ │ ├─ Checks termination conditions │ │ │
│ │ │ └─ Returns results │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ RESPONSE TO USER │ │
│ │ └─ "The Fibonacci numbers between 10 and 30 are 13 and 21" │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
