openai tools don't work with streaming=True
Labels: name: auto:bug, name: area: models

### System Info

langchain: latest (0.0.336)

### Who can help?

@hwchase17 (from git blame and from #13110)

### Information

- [ ] The official example notebooks/scripts
- [X] My own modified scripts

### Related Components

- [X] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [ ] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

Code to reproduce (based on [code from docs](https://python.langchain.com/docs/modules/agents/agent_types/openai_tools))
```python
from langchain.agents import AgentExecutor
from langchain.agents.format_scratchpad.openai_tools import (
    format_to_openai_tool_messages,
)
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.tools import BearlyInterpreterTool, DuckDuckGoSearchRun
from langchain.tools.render import format_tool_to_openai_tool


lc_tools = [DuckDuckGoSearchRun()]
oai_tools = [format_tool_to_openai_tool(tool) for tool in lc_tools]

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant"),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-1106",
                 streaming=True)

agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(
            x["intermediate_steps"]
        ),
    }
    | prompt
    | llm.bind(tools=oai_tools)
    | OpenAIToolsAgentOutputParser()
)

agent_executor = AgentExecutor(agent=agent, tools=lc_tools, verbose=True)

agent_executor.invoke(
    {"input": "What's the average of the temperatures in LA, NYC, and SF today?"}
)
```

Logs:
```
> Entering new AgentExecutor chain...
Traceback (most recent call last):
  File "./test-functions.py", line 42, in <module>
    agent_executor.invoke(
  File "./venv/lib/python3.11/site-packages/langchain/chains/base.py", line 87, in invoke
    return self(
           ^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/chains/base.py", line 310, in __call__
    raise e
  File "./venv/lib/python3.11/site-packages/langchain/chains/base.py", line 304, in __call__
    self._call(inputs, run_manager=run_manager)
  File "./venv/lib/python3.11/site-packages/langchain/agents/agent.py", line 1245, in _call
    next_step_output = self._take_next_step(
                       ^^^^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/agents/agent.py", line 1032, in _take_next_step
    output = self.agent.plan(
             ^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/agents/agent.py", line 461, in plan
    output = self.runnable.invoke(inputs, config={"callbacks": callbacks})
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/schema/runnable/base.py", line 1427, in invoke
    input = step.invoke(
            ^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/schema/runnable/base.py", line 2787, in invoke
    return self.bound.invoke(
           ^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 142, in invoke
    self.generate_prompt(
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 459, in generate_prompt
    return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 349, in generate
    raise e
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 339, in generate
    self._generate_with_cache(
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 492, in _generate_with_cache
    return self._generate(
           ^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/openai.py", line 422, in _generate
    return _generate_from_stream(stream_iter)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/chat_models/base.py", line 61, in _generate_from_stream
    generation += chunk
  File "./venv/lib/python3.11/site-packages/langchain/schema/output.py", line 94, in __add__
    message=self.message + other.message,
            ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
  File "./venv/lib/python3.11/site-packages/langchain/schema/messages.py", line 225, in __add__
    additional_kwargs=self._merge_kwargs_dict(
                      ^^^^^^^^^^^^^^^^^^^^^^^^
  File "./venv/lib/python3.11/site-packages/langchain/schema/messages.py", line 138, in _merge_kwargs_dict
    raise ValueError(
ValueError: Additional kwargs key tool_calls already exists in this message.
```

`left` and `right` from inside`_merge_kwargs_dict`:
```python
left = {'tool_calls': [{'index': 0, 'id': 'call_xhpbRSsUKkzsvtFgnkTXEFtAtHc', 'function': {'arguments': '', 'name': 'duckduckgo_search'}, 'type': 'function'}]}
right = {'tool_calls': [{'index': 0, 'id': None, 'function': {'arguments': '{"qu', 'name': None}, 'type': None}]}
```

### Expected behavior

No errors and same result as without `streaming=True`.