ChatOpenAI needs usage field that Google PaLM 2 Bison doesn't provide
Labels: name: area: embeddings, name: auto:bug

### System Info

Langhain v0.0.235
Python v3.11

### Who can help?

@agola11 @hw

### 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

I'm using OpenRouter which uses OpenAI SDK to provide different models. I encounter the problem when I use the model 'google/palm-2-chat-bison'
Here is the [gist](https://gist.github.com/alonsosilvaallende/6788eaa388bfa7e60ce84e7e155a86b5) reproducing the error.
Otherwise, here is the code:
```python
import os
import openai
from langchain.chat_models import ChatOpenAI

openai.api_base = "https://openrouter.ai/api/v1"
openai.api_key = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_REFERRER = "https://github.com/alexanderatallah/openrouter-streamlit"
chat = ChatOpenAI(model_name="google/palm-2-chat-bison",
                  temperature=2,
                  headers={"HTTP-Referer": OPENROUTER_REFERRER})
chat.predict("Tell me a joke")
```

Error message:
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[3], line 13
      7 OPENROUTER_REFERRER = "https://github.com/alexanderatallah/openrouter-streamlit"
      8 chat = ChatOpenAI(
      9         model_name="google/palm-2-chat-bison",
     10         temperature=2,
     11         headers={"HTTP-Referer": OPENROUTER_REFERRER}
     12     )
---> 13 chat.predict("Tell me a joke")

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/base.py:385, in BaseChatModel.predict(self, text, stop, **kwargs)
    383 else:
    384     _stop = list(stop)
--> 385 result = self([HumanMessage(content=text)], stop=_stop, **kwargs)
    386 return result.content

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/base.py:349, in BaseChatModel.__call__(self, messages, stop, callbacks, **kwargs)
    342 def __call__(
    343     self,
    344     messages: List[BaseMessage],
   (...)
    347     **kwargs: Any,
    348 ) -> BaseMessage:
--> 349     generation = self.generate(
    350         [messages], stop=stop, callbacks=callbacks, **kwargs
    351     ).generations[0][0]
    352     if isinstance(generation, ChatGeneration):
    353         return generation.message

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/base.py:125, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, **kwargs)
    123         if run_managers:
    124             run_managers[i].on_llm_error(e)
--> 125         raise e
    126 flattened_outputs = [
    127     LLMResult(generations=[res.generations], llm_output=res.llm_output)
    128     for res in results
    129 ]
    130 llm_output = self._combine_llm_outputs([res.llm_output for res in results])

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/base.py:115, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, **kwargs)
    112 for i, m in enumerate(messages):
    113     try:
    114         results.append(
--> 115             self._generate_with_cache(
    116                 m,
    117                 stop=stop,
    118                 run_manager=run_managers[i] if run_managers else None,
    119                 **kwargs,
    120             )
    121         )
    122     except (KeyboardInterrupt, Exception) as e:
    123         if run_managers:

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/base.py:262, in BaseChatModel._generate_with_cache(self, messages, stop, run_manager, **kwargs)
    258     raise ValueError(
    259         "Asked to cache, but no cache found at `langchain.cache`."
    260     )
    261 if new_arg_supported:
--> 262     return self._generate(
    263         messages, stop=stop, run_manager=run_manager, **kwargs
    264     )
    265 else:
    266     return self._generate(messages, stop=stop, **kwargs)

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/openai.py:372, in ChatOpenAI._generate(self, messages, stop, run_manager, **kwargs)
    370     return ChatResult(generations=[ChatGeneration(message=message)])
    371 response = self.completion_with_retry(messages=message_dicts, **params)
--> 372 return self._create_chat_result(response)

File ~/miniconda3/envs/langchain/lib/python3.11/site-packages/langchain/chat_models/openai.py:394, in ChatOpenAI._create_chat_result(self, response)
    389     gen = ChatGeneration(
    390         message=message,
    391         generation_info=dict(finish_reason=res.get("finish_reason")),
    392     )
    393     generations.append(gen)
--> 394 llm_output = {"token_usage": response["usage"], "model_name": self.model_name}
    395 return ChatResult(generations=generations, llm_output=llm_output)

KeyError: 'usage'

### Expected behavior

I expect that it doesn't give me an error since exactly the same code works when I use the model 'openai/gpt-3.5-turbo' instead of the model 'google/palm-2-chat-bison'.