forked from langchain-ai/langchain
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add OpenLLM wrapper(langchain-ai#6578)
LLM wrapper for models served with OpenLLM --------- Signed-off-by: Aaron <[email protected]> Authored-by: Aaron Pham <[email protected]> Co-authored-by: Chaoyu <[email protected]>
- Loading branch information
Showing
9 changed files
with
1,227 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# OpenLLM | ||
|
||
This page demonstrates how to use [OpenLLM](https://github.com/bentoml/OpenLLM) | ||
with LangChain. | ||
|
||
`OpenLLM` is an open platform for operating large language models (LLMs) in | ||
production. It enables developers to easily run inference with any open-source | ||
LLMs, deploy to the cloud or on-premises, and build powerful AI apps. | ||
|
||
## Installation and Setup | ||
|
||
Install the OpenLLM package via PyPI: | ||
|
||
```bash | ||
pip install openllm | ||
``` | ||
|
||
## LLM | ||
|
||
OpenLLM supports a wide range of open-source LLMs as well as serving users' own | ||
fine-tuned LLMs. Use `openllm model` command to see all available models that | ||
are pre-optimized for OpenLLM. | ||
|
||
## Wrappers | ||
|
||
There is a OpenLLM Wrapper which supports loading LLM in-process or accessing a | ||
remote OpenLLM server: | ||
|
||
```python | ||
from langchain.llms import OpenLLM | ||
``` | ||
|
||
### Wrapper for OpenLLM server | ||
|
||
This wrapper supports connecting to an OpenLLM server via HTTP or gRPC. The | ||
OpenLLM server can run either locally or on the cloud. | ||
|
||
To try it out locally, start an OpenLLM server: | ||
|
||
```bash | ||
openllm start flan-t5 | ||
``` | ||
|
||
Wrapper usage: | ||
|
||
```python | ||
from langchain.llms import OpenLLM | ||
|
||
llm = OpenLLM(server_url='http://localhost:3000') | ||
|
||
llm("What is the difference between a duck and a goose? And why there are so many Goose in Canada?") | ||
``` | ||
|
||
### Wrapper for Local Inference | ||
|
||
You can also use the OpenLLM wrapper to load LLM in current Python process for | ||
running inference. | ||
|
||
```python | ||
from langchain.llms import OpenLLM | ||
|
||
llm = OpenLLM(model_name="dolly-v2", model_id='databricks/dolly-v2-7b') | ||
|
||
llm("What is the difference between a duck and a goose? And why there are so many Goose in Canada?") | ||
``` | ||
|
||
### Usage | ||
|
||
For a more detailed walkthrough of the OpenLLM Wrapper, see the | ||
[example notebook](../modules/models/llms/integrations/openllm.ipynb) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
159 changes: 159 additions & 0 deletions
159
docs/extras/modules/model_io/models/llms/integrations/openllm.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"id": "026cc336", | ||
"metadata": {}, | ||
"source": [ | ||
"# OpenLLM\n", | ||
"\n", | ||
"[🦾 OpenLLM](https://github.com/bentoml/OpenLLM) is an open platform for operating large language models (LLMs) in production. It enables developers to easily run inference with any open-source LLMs, deploy to the cloud or on-premises, and build powerful AI apps." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "da0ddca1", | ||
"metadata": {}, | ||
"source": [ | ||
"## Installation\n", | ||
"\n", | ||
"Install `openllm` through [PyPI](https://pypi.org/project/openllm/)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "6601c03b", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"!pip install openllm" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "90174fe3", | ||
"metadata": {}, | ||
"source": [ | ||
"## Launch OpenLLM server locally\n", | ||
"\n", | ||
"To start an LLM server, use `openllm start` command. For example, to start a dolly-v2 server, run the following command from a terminal:\n", | ||
"\n", | ||
"```bash\n", | ||
"openllm start dolly-v2\n", | ||
"```\n", | ||
"\n", | ||
"\n", | ||
"## Wrapper" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "35b6bf60", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from langchain.llms import OpenLLM\n", | ||
"\n", | ||
"server_url = \"http://localhost:3000\" # Replace with remote host if you are running on a remote server \n", | ||
"llm = OpenLLM(server_url=server_url)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "4f830f9d", | ||
"metadata": {}, | ||
"source": [ | ||
"### Optional: Local LLM Inference\n", | ||
"\n", | ||
"You may also choose to initialize an LLM managed by OpenLLM locally from current process. This is useful for development purpose and allows developers to quickly try out different types of LLMs.\n", | ||
"\n", | ||
"When moving LLM applications to production, we recommend deploying the OpenLLM server separately and access via the `server_url` option demonstrated above.\n", | ||
"\n", | ||
"To load an LLM locally via the LangChain wrapper:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "82c392b6", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from langchain.llms import OpenLLM\n", | ||
"\n", | ||
"llm = OpenLLM(\n", | ||
" model_name=\"dolly-v2\",\n", | ||
" model_id=\"databricks/dolly-v2-3b\",\n", | ||
" temperature=0.94,\n", | ||
" repetition_penalty=1.2,\n", | ||
")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "f15ebe0d", | ||
"metadata": {}, | ||
"source": [ | ||
"### Integrate with a LLMChain" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 11, | ||
"id": "8b02a97a", | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"iLkb\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"from langchain import PromptTemplate, LLMChain\n", | ||
"\n", | ||
"template = \"What is a good name for a company that makes {product}?\"\n", | ||
"\n", | ||
"prompt = PromptTemplate(template=template, input_variables=[\"product\"])\n", | ||
"\n", | ||
"llm_chain = LLMChain(prompt=prompt, llm=llm)\n", | ||
"\n", | ||
"generated = llm_chain.run(product=\"mechanical keyboard\")\n", | ||
"print(generated)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "56cb4bc0", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3 (ipykernel)", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.10.10" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 5 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.