import os
import langchain

from langchain.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI

os.environ['OPENAI_API_KEY'] = ""
os.environ['SERPAPI_API_KEY'] = ""

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")

search = SerpAPIWrapper()

# Define a list of tools offered by the agent
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="Useful when you need to answer questions about current events. You should ask targeted questions.",
    ),
]

mrkl = initialize_agent(
    tools, llm, agent=AgentType.OPENAI_MULTI_FUNCTIONS, verbose=True
)

langchain.debug = True

result = mrkl.run("What is the weather in LA and SF?")
print(result)

# Configuring max iteration behavior
mrkl = initialize_agent(
    tools,
    llm,
    agent=AgentType.OPENAI_FUNCTIONS,
    verbose=True,
    max_iterations=2,
    early_stopping_method="generate",
)
result = mrkl.run("What is the weather in NYC today, yesterday, and the day before?")
print(result)

langchain.agents.initialize_agent langchain.utilities.SerpAPIWrapper langchain.agents.Tool langchain.chat_models.ChatOpenAI
[((288, 341), 'langchain.chat_models.ChatOpenAI', 'ChatOpenAI', ([], {'temperature': '(0)', 'model': '"""gpt-3.5-turbo-0613"""'}), "(temperature=0, model='gpt-3.5-turbo-0613')\n", (298, 341), False, 'from langchain.chat_models import ChatOpenAI\n'), ((352, 368), 'langchain.utilities.SerpAPIWrapper', 'SerpAPIWrapper', ([], {}), '()\n', (366, 368), False, 'from langchain.utilities import SerpAPIWrapper\n'), ((622, 708), 'langchain.agents.initialize_agent', 'initialize_agent', (['tools', 'llm'], {'agent': 'AgentType.OPENAI_MULTI_FUNCTIONS', 'verbose': '(True)'}), '(tools, llm, agent=AgentType.OPENAI_MULTI_FUNCTIONS,\n    verbose=True)\n', (638, 708), False, 'from langchain.agents import initialize_agent, Tool\n'), ((850, 982), 'langchain.agents.initialize_agent', 'initialize_agent', (['tools', 'llm'], {'agent': 'AgentType.OPENAI_FUNCTIONS', 'verbose': '(True)', 'max_iterations': '(2)', 'early_stopping_method': '"""generate"""'}), "(tools, llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True,\n    max_iterations=2, early_stopping_method='generate')\n", (866, 982), False, 'from langchain.agents import initialize_agent, Tool\n'), ((430, 589), 'langchain.agents.Tool', 'Tool', ([], {'name': '"""Search"""', 'func': 'search.run', 'description': '"""Useful when you need to answer questions about current events. You should ask targeted questions."""'}), "(name='Search', func=search.run, description=\n    'Useful when you need to answer questions about current events. You should ask targeted questions.'\n    )\n", (434, 589), False, 'from langchain.agents import initialize_agent, Tool\n')]