feat: OpenLLM
Labels: name: enhancement, name: llms

<!--
Thank you for contributing to LangChain! Your PR will appear in our release under the title you set. Please make sure it highlights your valuable contribution.

Replace this with a description of the change, the issue it fixes (if applicable), and relevant context. List any dependencies required for this change.

After you're done, someone will review your PR. They may suggest improvements. If no one reviews your PR within a few days, feel free to @-mention the same people again, as notifications can get lost.

Finally, we'd love to show appreciation for your contribution - if you'd like us to shout you out on Twitter, please also include your handle!
-->

<!-- Remove if not applicable -->

🎉 OpenLLM 🤝 LangChain

[OpenLLM](https://github.com/bentoml/OpenLLM) is a new open platform for operating large language models(LLMs) in
production. Serve, deploy, and monitor any LLMs with ease.

OpenLLM lets developers and researchers to easily run inference with any
open-source LLMs, deploy to the cloud or on-premises, build powerful AI apps,
and fine tune your own LLM (coming soon...)

It currently supports ChatGLM, Dolly-v2, Flan-T5, Falcon, Starcoder, and more to
come. One can also easily start either a REST/gRPC server, which is powered by
BentoML.

Now that's out of the way, lets dive in!

The current depenedencies for this integration: `openllm`

This integrations brings a `OpenLLM` llms to LangChain, that can be used for
both running LLMs locally as well as interacting with a remote OpenLLM server.

To quickly start a local LLM, simply do the following:

```python
from langchain.llms import OpenLLM

llm = OpenLLM(model_name="dolly-v2", model_id='databricks/dolly-v2-7b', device_map='auto')

llm("What is the difference between a duck and a goose? And why there are so many Goose in Canada?")
```

`langchain.llms.OpenLLM`, as mentioned above also have the capabilities to
interact with remote OpenLLM Server. Given there is a running OpenLLM server at
http://44.23.123.1, you can do the following:

```python
from langchain.llms import OpenLLM

llm = OpenLLM(server_url='http://44.23.123.1:3000', server_type='grpc')

llm("What is the difference between a duck and a goose? And why there are so many Goose in Canada?")
```

Features soon to be open-sourced:

- OpenAI compatible API, allowing users to easily use LangChain's OpenAI llm.
- SSE support for OpenLLM server, allowing users to stream inference results.
- Last but not least, easily fine-tune your own LLMs with `LLM.tuning()`

Last but not least, I would love to hear feedback and response from the
community about the project, and feel free to reach out to me via Twitter
@aarnphm_. 

Feel free to join our [Discord](https://l.bentoml.com/join-openllm-discord) to get the latest updates and developments.

Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>

#### Before submitting

<!-- If you're adding a new integration, please include:

1. a test for the integration - favor unit tests that does not rely on network access.
2. an example notebook showing its use

See contribution guidelines for more information on how to write tests, lint
etc:

https://github.com/hwchase17/langchain/blob/master/.github/CONTRIBUTING.md
-->

I have added tests for this integration.

#### Who can review?

Tag maintainers/contributors who might be interested:

<!-- For a quicker response, figure out the right person to tag with @

  @hwchase17 - project lead

  Tracing / Callbacks
  - @agola11

  Async
  - @agola11

  DataLoaders
  - @eyurtsev

  Models
  - @hwchase17
  - @agola11

  Agents / Tools / Toolkits
  - @hwchase17

  VectorStores / Retrievers / Memory
  - @dev2049

 -->

cc @hwchase17 @agola11