## Imports


```python
from langchain.chat_models import ChatOpenAI
from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from langchain.llms import OpenAI
from langchain.utilities import SerpAPIWrapper
from langchain.agents.tools import Tool
from langchain.chains import LLMMathChain
```

## Tools


```python
search = SerpAPIWrapper()
llm = OpenAI(temperature=0)
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)
tools = [
    Tool(
        name = "Search",
        func=search.run,
        description="useful for when you need to answer questions about current events"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math"
    ),
]
```

## Planner, Executor, and Agent


```python
model = ChatOpenAI(temperature=0)
```


```python
planner = load_chat_planner(model)
```


```python
executor = load_agent_executor(model, tools, verbose=True)
```


```python
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)
```

## Run example


```python
agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")
```

<CodeOutputBlock lang="python">

```
    
    
    > Entering new PlanAndExecute chain...
    steps=[Step(value="Search for Leo DiCaprio's girlfriend on the internet."), Step(value='Find her current age.'), Step(value='Raise her current age to the 0.43 power using a calculator or programming language.'), Step(value='Output the result.'), Step(value="Given the above steps taken, respond to the user's original question.\n\n")]
    
    > Entering new AgentExecutor chain...
    Action:
    ```
    {
      "action": "Search",
      "action_input": "Who is Leo DiCaprio's girlfriend?"
    }
    ``` 
    
    
    Observation: DiCaprio broke up with girlfriend Camila Morrone, 25, in the summer of 2022, after dating for four years. He's since been linked to another famous supermodel – Gigi Hadid. The power couple were first supposedly an item in September after being spotted getting cozy during a party at New York Fashion Week.
    Thought:Based on the previous observation, I can provide the answer to the current objective. 
    Action:
    ```
    {
      "action": "Final Answer",
      "action_input": "Leo DiCaprio is currently linked to Gigi Hadid."
    }
    ```
    
    
    > Finished chain.
    *****
    
    Step: Search for Leo DiCaprio's girlfriend on the internet.
    
    Response: Leo DiCaprio is currently linked to Gigi Hadid.
    
    > Entering new AgentExecutor chain...
    Action:
    ```
    {
      "action": "Search",
      "action_input": "What is Gigi Hadid's current age?"
    }
    ```
    
    Observation: 28 years
    Thought:Previous steps: steps=[(Step(value="Search for Leo DiCaprio's girlfriend on the internet."), StepResponse(response='Leo DiCaprio is currently linked to Gigi Hadid.'))]
    
    Current objective: value='Find her current age.'
    
    Action:
    ```
    {
      "action": "Search",
      "action_input": "What is Gigi Hadid's current age?"
    }
    ```
    
    
    Observation: 28 years
    Thought:Previous steps: steps=[(Step(value="Search for Leo DiCaprio's girlfriend on the internet."), StepResponse(response='Leo DiCaprio is currently linked to Gigi Hadid.')), (Step(value='Find her current age.'), StepResponse(response='28 years'))]
    
    Current objective: None
    
    Action:
    ```
    {
      "action": "Final Answer",
      "action_input": "Gigi Hadid's current age is 28 years."
    }
    ```
    
    
    
    > Finished chain.
    *****
    
    Step: Find her current age.
    
    Response: Gigi Hadid's current age is 28 years.
    
    > Entering new AgentExecutor chain...
    Action:
    ```
    {
      "action": "Calculator",
      "action_input": "28 ** 0.43"
    }
    ```
    
    
    > Entering new LLMMathChain chain...
    28 ** 0.43
    ```text
    28 ** 0.43
    ```
    ...numexpr.evaluate("28 ** 0.43")...
    
    Answer: 4.1906168361987195
    > Finished chain.
    
    Observation: Answer: 4.1906168361987195
    Thought:The next step is to provide the answer to the user's question.
    
    Action:
    ```
    {
      "action": "Final Answer",
      "action_input": "Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."
    }
    ```
    
    
    
    > Finished chain.
    *****
    
    Step: Raise her current age to the 0.43 power using a calculator or programming language.
    
    Response: Gigi Hadid's current age raised to the 0.43 power is approximately 4.19.
    
    > Entering new AgentExecutor chain...
    Action:
    ```
    {
      "action": "Final Answer",
      "action_input": "The result is approximately 4.19."
    }
    ```
    
    
    > Finished chain.
    *****
    
    Step: Output the result.
    
    Response: The result is approximately 4.19.
    
    > Entering new AgentExecutor chain...
    Action:
    ```
    {
      "action": "Final Answer",
      "action_input": "Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."
    }
    ```
    
    
    > Finished chain.
    *****
    
    Step: Given the above steps taken, respond to the user's original question.
    
    
    
    Response: Gigi Hadid's current age raised to the 0.43 power is approximately 4.19.
    > Finished chain.





    "Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."
```

</CodeOutputBlock>
