From fb41b68ea1a82cb08f8997050d093aa087c7b4d7 Mon Sep 17 00:00:00 2001 From: KhoPhi Date: Tue, 23 Jan 2024 06:05:59 +0000 Subject: [PATCH] docs: Update with LCEL examples to Ollama & ChatOllama Integration notebook (#16194) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - **Description:** Updated the Chat/Ollama docs notebook with LCEL chain examples - **Issue:** #15664 I'm a new contributor 😊 - **Dependencies:** No dependencies - **Twitter handle:** Comments: - How do I truncate the output of the stream in the notebook if and or when it goes on and on and on for even the basic of prompts? Edit: Looking forward to feedback @baskaryan --------- Co-authored-by: Bagatur --- docs/docs/integrations/chat/ollama.ipynb | 391 +++++++++++++++-------- docs/docs/integrations/llms/ollama.ipynb | 200 ++++++++---- docs/static/img/ollama_example_img.jpg | Bin 0 -> 65920 bytes 3 files changed, 402 insertions(+), 189 deletions(-) create mode 100644 docs/static/img/ollama_example_img.jpg diff --git a/docs/docs/integrations/chat/ollama.ipynb b/docs/docs/integrations/chat/ollama.ipynb index 054666d8076..d0df5b4b99d 100644 --- a/docs/docs/integrations/chat/ollama.ipynb +++ b/docs/docs/integrations/chat/ollama.ipynb @@ -15,45 +15,32 @@ "source": [ "# ChatOllama\n", "\n", - "[Ollama](https://ollama.ai/) allows you to run open-source large language models, such as LLaMA2, locally.\n", + "[Ollama](https://ollama.ai/) allows you to run open-source large language models, such as Llama 2, locally.\n", "\n", "Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. \n", "\n", "It optimizes setup and configuration details, including GPU usage.\n", "\n", - "For a complete list of supported models and model variants, see the [Ollama model library](https://ollama.ai/library).\n", + "For a complete list of supported models and model variants, see the [Ollama model library](https://github.com/jmorganca/ollama#model-library).\n", "\n", "## Setup\n", "\n", "First, follow [these instructions](https://github.com/jmorganca/ollama) to set up and run a local Ollama instance:\n", "\n", - "* [Download](https://ollama.ai/download)\n", - "* Fetch a model via `ollama pull `\n", - "* e.g., for `Llama-7b`: `ollama pull llama2`\n", - "* This will download the most basic version of the model (e.g., minimum # parameters and 4-bit quantization)\n", - "* On Mac, it will download to:\n", + "* [Download](https://ollama.ai/download) and install Ollama onto the available supported platforms (including Windows Subsystem for Linux)\n", + "* Fetch available LLM model via `ollama pull `\n", + " * View a list of available models via the [model library](https://ollama.ai/library)\n", + " * e.g., for `Llama-7b`: `ollama pull llama2`\n", + "* This will download the default tagged version of the model. Typically, the default points to the latest, smallest sized-parameter model.\n", "\n", - "`~/.ollama/models/manifests/registry.ollama.ai/library//latest`\n", - "\n", - "* And we can specify a particular version, e.g., for `ollama pull vicuna:13b-v1.5-16k-q4_0`\n", - "* The file is here with the model version in place of `latest`\n", - "\n", - "`~/.ollama/models/manifests/registry.ollama.ai/library/vicuna/13b-v1.5-16k-q4_0`\n", - "\n", - "You can easily access models in a few ways:\n", - "\n", - "1/ if the app is running:\n", - "\n", - "* All of your local models are automatically served on `localhost:11434`\n", - "* Select your model when setting `llm = Ollama(..., model=\":\")`\n", - "* If you set `llm = Ollama(..., model=\" On Mac, the models will be download to `~/.ollama/models`\n", + "> \n", + "> On Linux (or WSL), the models will be stored at `/usr/share/ollama/.ollama/models`\n", "\n", + "* Specify the exact version of the model of interest as such `ollama pull vicuna:13b-v1.5-16k-q4_0` (View the [various tags for the `Vicuna`](https://ollama.ai/library/vicuna/tags) model in this instance)\n", + "* To view all pulled models, use `ollama list`\n", + "* To chat directly with a model from the command line, use `ollama run `\n", + "* View the [Ollama documentation](https://github.com/jmorganca/ollama) for more commands. Run `ollama help` in the terminal to see available commands too.\n", "\n", "## Usage\n", "\n", @@ -61,59 +48,198 @@ "\n", "If you are using a LLaMA `chat` model (e.g., `ollama pull llama2:7b-chat`) then you can use the `ChatOllama` interface.\n", "\n", - "This includes [special tokens](https://huggingface.co/blog/llama2#how-to-prompt-llama-2) for system message and user input." + "This includes [special tokens](https://huggingface.co/blog/llama2#how-to-prompt-llama-2) for system message and user input.\n", + "\n", + "## Interacting with Models \n", + "\n", + "Here are a few ways to interact with pulled local models\n", + "\n", + "#### directly in the terminal:\n", + "\n", + "* All of your local models are automatically served on `localhost:11434`\n", + "* Run `ollama run ` to start interacting via the command line directly\n", + "\n", + "### via an API\n", + "\n", + "Send an `application/json` request to the API endpoint of Ollama to interact.\n", + "\n", + "```bash\n", + "curl http://localhost:11434/api/generate -d '{\n", + " \"model\": \"llama2\",\n", + " \"prompt\":\"Why is the sky blue?\"\n", + "}'\n", + "```\n", + "\n", + "See the Ollama [API documentation](https://github.com/jmorganca/ollama/blob/main/docs/api.md) for all endpoints.\n", + "\n", + "#### via LangChain\n", + "\n", + "See a typical basic example of using Ollama via the `ChatOllama` chat model in your LangChain application." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Sure, here's a fun space-themed joke for you:\n", + "\n", + "Why don't astronauts like broccoli? \n", + "Because it has too many \"crisps\" in it!\n", + "\n" + ] + } + ], "source": [ - "from langchain.callbacks.manager import CallbackManager\n", - "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n", + "# LangChain supports many other chat models. Here, we're using Ollama\n", "from langchain_community.chat_models import ChatOllama\n", + "from langchain_core.output_parsers import StrOutputParser\n", + "from langchain_core.prompts import ChatPromptTemplate\n", "\n", - "chat_model = ChatOllama(\n", - " model=\"llama2:7b-chat\",\n", - ")" + "# supports many more optional parameters. Hover on your `ChatOllama(...)`\n", + "# class to view the latest available supported parameters\n", + "llm = ChatOllama(model=\"llama2\")\n", + "prompt = ChatPromptTemplate.from_template(\"Tell me a short joke about {topic}\")\n", + "\n", + "# using LangChain Expressive Language chain syntax\n", + "# learn more about the LCEL on\n", + "# https://python.langchain.com/docs/expression_language/why\n", + "chain = prompt | llm | StrOutputParser()\n", + "\n", + "# for brevity, response is printed in terminal\n", + "# You can use LangServe to deploy your application for\n", + "# production\n", + "print(chain.invoke({\"topic\": \"Space travel\"}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Optionally, pass `StreamingStdOutCallbackHandler` to stream tokens:\n", - "\n", - "```\n", - "chat_model = ChatOllama(\n", - " model=\"llama2:7b-chat\",\n", - " callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),\n", - ")\n", - "```" + "LCEL chains, out of the box, provide extra functionalities, such as streaming of responses, and async support" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 12, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "AIMessage(content='\\nArtificial intelligence (AI) has a rich and diverse history that spans several decades. Here is a brief overview of the major milestones and events in the development of AI:\\n\\n1. 1950s: The Dartmouth Conference: The field of AI was officially launched at a conference held at Dartmouth College in 1956. Attendees included computer scientists, mathematicians, and cognitive scientists who were interested in exploring the possibilities of creating machines that could simulate human intelligence.\\n2. 1951: The Turing Test: British mathematician Alan Turing proposed a test to measure a machine\\'s ability to exhibit intelligent behavior equivalent to, or indistinguishable from, that of a human. The Turing Test has since become a benchmark for measuring the success of AI systems.\\n3. 1956: The First AI Program: Computer scientist John McCarthy created the first AI program, called the Logical Theorist, which was designed to reason and solve problems using logical deduction.\\n4. 1960s: Rule-Based Expert Systems: The development of rule-based expert systems, which used a set of rules to reason and make decisions, marked a significant milestone in the history of AI. These systems were widely used in industries such as banking, healthcare, and transportation.\\n5. 1970s: Machine Learning: Machine learning, which enables machines to learn from data without being explicitly programmed, emerged as a major area of research in AI. This led to the development of algorithms such as decision trees and neural networks.\\n6. 1980s: Expert Systems: The development of expert systems, which were designed to mimic the decision-making abilities of human experts, reached its peak in the 1980s. These systems were widely used in industries such as banking and healthcare.\\n7. 1990s: AI Winter: Despite the progress that had been made in AI research, the field experienced a decline in funding and interest in the 1990s, which became known as the \"AI winter.\"\\n8. 2000s: Machine Learning Resurgence: The resurgence of machine learning, driven by advances in computational power and data storage, led to a new wave of AI research and applications.\\n9. 2010s: Deep Learning: The development of deep learning algorithms, which are capable of learning complex patterns in large datasets, marked a significant breakthrough in AI research. These algorithms have been used in applications such as image and speech recognition, natural language processing, and autonomous vehicles.\\n10. Present Day: AI is now being applied to a wide range of industries and domains, including healthcare, finance, transportation, and education. The field is continuing to evolve, with new technologies and applications emerging all the time.\\n\\nOverall, the history of AI reflects a long-standing interest in creating machines that can simulate human intelligence. While the field has experienced periods of progress and setbacks, it continues to evolve and expand into new areas of research and application.')" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + " Sure\n", + ",\n", + " here\n", + "'s\n", + " a\n", + " joke\n", + ":\n", + " Why\n", + " did\n", + " the\n", + " astronaut\n", + " break\n", + " up\n", + " with\n", + " his\n", + " girlfriend\n", + "?\n", + " Because\n", + " he\n", + " needed\n", + " more\n", + " space\n", + " to\n", + " explore\n", + ".\n", + "\n", + "\n", + "\n" + ] } ], "source": [ - "from langchain.schema import HumanMessage\n", + "topic = {\"topic\": \"Space travel\"}\n", "\n", - "messages = [HumanMessage(content=\"Tell me about the history of AI\")]\n", - "chat_model(messages)" + "for chunks in chain.stream(topic):\n", + " print(chunks)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For streaming async support, here's an example - all possible via the single chain created above." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Sure\n", + ",\n", + " here\n", + "'s\n", + " a\n", + " little\n", + " one\n", + ":\n", + " Why\n", + " did\n", + " the\n", + " rocket\n", + " scientist\n", + " break\n", + " up\n", + " with\n", + " her\n", + " partner\n", + "?\n", + " Because\n", + " he\n", + " couldn\n", + "'t\n", + " handle\n", + " all\n", + " her\n", + " \"\n", + "space\n", + "y\n", + "\"\n", + " jokes\n", + ".\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "topic = {\"topic\": \"Space travel\"}\n", + "\n", + "async for chunks in chain.astream(topic):\n", + " print(chunks)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Take a look at the [LangChain Expressive Language (LCEL) Interface](https://python.langchain.com/docs/expression_language/interface) for the other available interfaces for use when a chain is created.\n", + "\n", + "## Building from source\n", + "\n", + "For up to date instructions on building from source, check the Ollama documentation on [Building from Source](https://github.com/jmorganca/ollama?tab=readme-ov-file#building)" ] }, { @@ -122,42 +248,32 @@ "source": [ "## Extraction\n", " \n", - "Update your version of Ollama and supply the [`format`](https://github.com/jmorganca/ollama/blob/main/docs/api.md#json-mode) flag.\n", + "Use the latest version of Ollama and supply the [`format`](https://github.com/jmorganca/ollama/blob/main/docs/api.md#json-mode) flag. The `format` flag will force the model to produce the response in JSON.\n", "\n", - "We can enforce the model to produce JSON.\n", - "\n", - "**Note:** You can also try out the experimental [OllamaFunctions](https://python.langchain.com/docs/integrations/chat/ollama_functions) wrapper for convenience." + "> **Note:** You can also try out the experimental [OllamaFunctions](https://python.langchain.com/docs/integrations/chat/ollama_functions) wrapper for convenience." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "from langchain.callbacks.manager import CallbackManager\n", - "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n", "from langchain_community.chat_models import ChatOllama\n", "\n", - "chat_model = ChatOllama(\n", - " model=\"llama2\",\n", - " format=\"json\",\n", - " callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),\n", - ")" + "llm = ChatOllama(model=\"llama2\", format=\"json\", temperature=0)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\"morning\": {\"sky\": \"pink\", \"sun\": \"rise\"}, \"daytime\": {\"sky\": \"blue\", \"sun\": \"high\"}, \"afternoon\": {\"sky\": \"gray\", \"sun\": \"peak\"}, \"evening\": {\"sky\": \"orange\", \"sun\": \"set\"}}\n", - " \t\n", - "\n" + "content='{\\n\"morning\": {\\n\"color\": \"light blue\"\\n},\\n\"noon\": {\\n\"color\": \"blue\"\\n},\\n\"afternoon\": {\\n\"color\": \"grayish-blue\"\\n},\\n\"evening\": {\\n\"color\": \"pinkish-orange\"\\n}\\n}'\n" ] } ], @@ -170,37 +286,27 @@ " )\n", "]\n", "\n", - "chat_model_response = chat_model(messages)" + "chat_model_response = llm.invoke(messages)\n", + "print(chat_model_response)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "\n", "{\n", - " \"name\": \"John\",\n", - " \"age\": 35,\n", - " \"fav_food\": \"pizza\"\n", - "}\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\"name\": \"John\",\n", + "\"age\": 35,\n", + "\"interests\": [\n", + "\"pizza\"\n", + "]\n", + "}\n" ] } ], @@ -208,6 +314,9 @@ "import json\n", "\n", "from langchain.schema import HumanMessage\n", + "from langchain_community.chat_models import ChatOllama\n", + "from langchain_core.output_parsers import StrOutputParser\n", + "from langchain_core.prompts import ChatPromptTemplate\n", "\n", "json_schema = {\n", " \"title\": \"Person\",\n", @@ -225,17 +334,24 @@ " \"required\": [\"name\", \"age\"],\n", "}\n", "\n", + "llm = ChatOllama(model=\"llama2\")\n", + "\n", "messages = [\n", " HumanMessage(\n", " content=\"Please tell me about a person using the following JSON schema:\"\n", " ),\n", - " HumanMessage(content=json.dumps(json_schema, indent=2)),\n", + " HumanMessage(content=\"{dumps}\"),\n", " HumanMessage(\n", " content=\"Now, considering the schema, tell me about a person named John who is 35 years old and loves pizza.\"\n", " ),\n", "]\n", "\n", - "chat_model_response = chat_model(messages)" + "prompt = ChatPromptTemplate.from_messages(messages)\n", + "dumps = json.dumps(json_schema, indent=2)\n", + "\n", + "chain = prompt | llm | StrOutputParser()\n", + "\n", + "print(chain.invoke({\"dumps\": dumps}))" ] }, { @@ -246,25 +362,32 @@ "\n", "Ollama has support for multi-modal LLMs, such as [bakllava](https://ollama.ai/library/bakllava) and [llava](https://ollama.ai/library/llava).\n", "\n", - "Browse the full set of versions for models with `tags`, such as [here](https://ollama.ai/library/llava/tags).\n", + "Browse the full set of versions for models with `tags`, such as [Llava](https://ollama.ai/library/llava/tags).\n", "\n", - "Download the desired LLM:\n", - "```\n", - "ollama pull bakllava\n", - "```\n", + "Download the desired LLM via `ollama pull bakllava`\n", "\n", - "Be sure to update Ollama so that you have the most recent version to support multi-modal." + "Be sure to update Ollama so that you have the most recent version to support multi-modal.\n", + "\n", + "Check out the typical example of how to use ChatOllama multi-modal support below:" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ - "%pip install --upgrade --quiet pillow" + "pip install --upgrade --quiet pillow" ] }, { @@ -275,7 +398,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -319,7 +442,7 @@ " display(HTML(image_html))\n", "\n", "\n", - "file_path = \"/Users/rlm/Desktop/Eval_Sets/multi_modal_presentations/DDOG/img_23.jpg\"\n", + "file_path = \"../../../static/img/ollama_example_img.jpg\"\n", "pil_image = Image.open(file_path)\n", "\n", "image_b64 = convert_to_base64(pil_image)\n", @@ -328,40 +451,52 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "AIMessage(content='90%')" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "90%\n" + ] } ], "source": [ + "from langchain.schema import HumanMessage\n", "from langchain_community.chat_models import ChatOllama\n", - "from langchain_core.messages import HumanMessage\n", "\n", - "chat_model = ChatOllama(\n", - " model=\"bakllava\",\n", + "llm = ChatOllama(model=\"bakllava\", temperature=0)\n", + "\n", + "\n", + "def prompt_func(data):\n", + " text = data[\"text\"]\n", + " image = data[\"image\"]\n", + "\n", + " image_part = {\n", + " \"type\": \"image_url\",\n", + " \"image_url\": f\"data:image/jpeg;base64,{image}\",\n", + " }\n", + "\n", + " content_parts = []\n", + "\n", + " text_part = {\"type\": \"text\", \"text\": text}\n", + "\n", + " content_parts.append(image_part)\n", + " content_parts.append(text_part)\n", + "\n", + " return [HumanMessage(content=content_parts)]\n", + "\n", + "\n", + "from langchain_core.output_parsers import StrOutputParser\n", + "\n", + "chain = prompt_func | llm | StrOutputParser()\n", + "\n", + "query_chain = chain.invoke(\n", + " {\"text\": \"What is the Dollar-based gross retention rate?\", \"image\": image_b64}\n", ")\n", "\n", - "# Call the chat model with both messages and images\n", - "content_parts = []\n", - "image_part = {\n", - " \"type\": \"image_url\",\n", - " \"image_url\": f\"data:image/jpeg;base64,{image_b64}\",\n", - "}\n", - "text_part = {\"type\": \"text\", \"text\": \"What is the Daollar-based gross retention rate?\"}\n", - "\n", - "content_parts.append(image_part)\n", - "content_parts.append(text_part)\n", - "prompt = [HumanMessage(content=content_parts)]\n", - "chat_model(prompt)" + "print(query_chain)" ] } ], @@ -381,7 +516,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/docs/integrations/llms/ollama.ipynb b/docs/docs/integrations/llms/ollama.ipynb index 9637c965ccd..79ea7589878 100644 --- a/docs/docs/integrations/llms/ollama.ipynb +++ b/docs/docs/integrations/llms/ollama.ipynb @@ -18,64 +18,54 @@ "\n", "First, follow [these instructions](https://github.com/jmorganca/ollama) to set up and run a local Ollama instance:\n", "\n", - "* [Download](https://ollama.ai/download)\n", - "* Fetch a model via `ollama pull `\n", - "* e.g., for `Llama-7b`: `ollama pull llama2` (see full list [here](https://ollama.ai/library)\n", - "* This will download the most basic version of the model typically (e.g., smallest # parameters)\n", - "* On Mac, it will download to \n", + "* [Download](https://ollama.ai/download) and install Ollama onto the available supported platforms (including Windows Subsystem for Linux)\n", + "* Fetch available LLM model via `ollama pull `\n", + " * View a list of available models via the [model library](https://ollama.ai/library)\n", + " * e.g., for `Llama-7b`: `ollama pull llama2`\n", + "* This will download the default tagged version of the model. Typically, the default points to the latest, smallest sized-parameter model.\n", "\n", - "`~/.ollama/models/manifests/registry.ollama.ai/library//latest`\n", - "\n", - "* And we specify a particular version, e.g., for `ollama pull vicuna:13b-v1.5-16k-q4_0`\n", - "* The file is here with the model version in place of `latest`\n", - "\n", - "`~/.ollama/models/manifests/registry.ollama.ai/library/vicuna/13b-v1.5-16k-q4_0`\n", - "\n", - "You can easily access models in a few ways:\n", - "\n", - "1/ if the app is running:\n", - "\n", - "* All of your local models are automatically served on `localhost:11434`\n", - "* Select your model when setting `llm = Ollama(..., model=\":\")`\n", - "* If you set `llm = Ollama(..., model=\" On Mac, the models will be download to `~/.ollama/models`\n", + "> \n", + "> On Linux (or WSL), the models will be stored at `/usr/share/ollama/.ollama/models`\n", "\n", + "* Specify the exact version of the model of interest as such `ollama pull vicuna:13b-v1.5-16k-q4_0` (View the [various tags for the `Vicuna`](https://ollama.ai/library/vicuna/tags) model in this instance)\n", + "* To view all pulled models, use `ollama list`\n", + "* To chat directly with a model from the command line, use `ollama run `\n", + "* View the [Ollama documentation](https://github.com/jmorganca/ollama) for more commands. Run `ollama help` in the terminal to see available commands too.\n", "\n", "## Usage\n", "\n", - "You can see a full list of supported parameters on the [API reference page](https://api.python.langchain.com/en/latest/llms/langchain.llms.ollama.Ollama.html)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.callbacks.manager import CallbackManager\n", - "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n", - "from langchain_community.llms import Ollama\n", + "You can see a full list of supported parameters on the [API reference page](https://api.python.langchain.com/en/latest/llms/langchain.llms.ollama.Ollama.html).\n", "\n", - "llm = Ollama(model=\"llama2\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Optionally, pass `StreamingStdOutCallbackHandler` to stream tokens:\n", + "If you are using a LLaMA `chat` model (e.g., `ollama pull llama2:7b-chat`) then you can use the `ChatOllama` interface.\n", "\n", + "This includes [special tokens](https://huggingface.co/blog/llama2#how-to-prompt-llama-2) for system message and user input.\n", + "\n", + "## Interacting with Models \n", + "\n", + "Here are a few ways to interact with pulled local models\n", + "\n", + "#### directly in the terminal:\n", + "\n", + "* All of your local models are automatically served on `localhost:11434`\n", + "* Run `ollama run ` to start interacting via the command line directly\n", + "\n", + "### via an API\n", + "\n", + "Send an `application/json` request to the API endpoint of Ollama to interact.\n", + "\n", + "```bash\n", + "curl http://localhost:11434/api/generate -d '{\n", + " \"model\": \"llama2\",\n", + " \"prompt\":\"Why is the sky blue?\"\n", + "}'\n", "```\n", - "llm = Ollama(\n", - " model=\"llama2\",\n", - " callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),\n", - ")\n", - "```" + "\n", + "See the Ollama [API documentation](https://github.com/jmorganca/ollama/blob/main/docs/api.md) for all endpoints.\n", + "\n", + "#### via LangChain\n", + "\n", + "See a typical basic example of using Ollama chat model in your LangChain application." ] }, { @@ -86,7 +76,7 @@ { "data": { "text/plain": [ - "' Artificial intelligence (AI) has a rich and varied history that spans several decades. październik 1950s and has evolved significantly over time. Here is a brief overview of the major milestones in the history of AI:\\n\\n1. 1950s: The Dartmouth Conference - Considered the birthplace of AI, this conference brought together computer scientists, mathematicians, and cognitive scientists to discuss the possibilities of creating machines that could simulate human intelligence. Attendees included John McCarthy, Marvin Minsky, Nathaniel Rochester, and Claude Shannon.\\n2. 1951: The Turing Test - Alan Turing proposed a test to measure a machine\\'s ability to exhibit intelligent behavior equivalent to, or indistinguishable from, that of a human. The Turing Test has since become a benchmark for measuring the success of AI systems.\\n3. 1956: The First AI Program - John McCarthy created the first AI program, called the Logical Theorist, which was designed to reason and solve problems using logical deduction.\\n4. 1960s: Rule-Based Expert Systems - Researchers developed rule-based expert systems, which used a set of rules to reason and make decisions. These systems were widely used in industries such as banking and healthcare.\\n5. 1970s: Machine Learning -Machine learning, a subfield of AI, emerged as a way for machines to learn from data without being explicitly programmed. This led to the development of algorithms such as decision trees and neural networks.\\n6. 1980s: Expert Systems - The development of expert systems, which were designed to mimic the decision-making abilities of human experts, reached its peak in the 1980s. These systems were widely used in industries such as banking and healthcare.\\n7. 1990s: AI Winter - Despite the progress made in AI research, the field experienced a decline in funding and interest in the 1990s, known as the \"AI winter.\"\\n8. 2000s: AI Resurgence - The resurgence of AI began in the early 2000s with the development of new algorithms and techniques, such as support vector machines and deep learning. This led to a renewed interest in AI research and applications.\\n9. 2010s: Rise of Deep Learning - The development of deep learning algorithms, which are capable of learning and improving on their own by analyzing large amounts of data, has been a major factor in the recent progress made in AI. These algorithms have been used in applications such as image recognition, natural language processing, and autonomous vehicles.\\n10. Present Day: AI Continues to Advance - AI is continuing to advance at a rapid pace, with new techniques and applications emerging all the time. Areas of research include natural language processing, computer vision, robotics, and more.\\n\\nSome notable people who have made significant contributions to the field of AI include:\\n\\n1. Alan Turing - Considered one of the pioneers of AI, Turing proposed the Turing Test and developed the concept of a universal machine.\\n2. John McCarthy - McCarthy is known as the \"father of AI\" for his work in developing the field of AI. He coined the term \"Artificial Intelligence\" and was instrumental in organizing the Dartmouth Conference.\\n3. Marvin Minsky - Minsky was a pioneer in the field of neural networks and co-founder of the MIT AI Laboratory.\\n4. Nathaniel Rochester - Rochester was a computer scientist and cognitive scientist who worked on early AI projects, including the development of the Logical Theorist.\\n5. Claude Shannon - Shannon was a mathematician and electrical engineer who is known for his work on information theory, which has had a significant impact on the field of AI.\\n6. Yann LeCun - LeCun is a computer scientist and the director of AI Research at Facebook. He is also the Silver Professor of Computer Science at New York University, and a professor at the Courant Institute of Mathematical Sciences.\\n7. Geoffrey Hinton - Hinton is a computer scientist and cognitive psychologist who is known for his work on artificial neural networks. He is a pioneer in the field of deep learning and has made significant contributions to the development of convolutional neural networks (CNNs).\\n8. Yoshua Bengio - Bengio is a computer scientist and a pioneer in the field of deep learning. He is known for his work on recurrent neural networks (RNNs) and has made significant contributions to the development of CNNs and RNNs.\\n9. Andrew Ng - Ng is a computer scientist and entrepreneur who has made significant contributions to the field of AI. He is known for his work on deep learning and has worked at Google, where he founded the Google Brain deep learning project, and at Baidu, where he led the company\\'s AI group.\\n10. Demis Hassabis - Hassabis is a computer scientist and entrepreneur who is known for his work on deep learning and artificial intelligence. He is the co-founder of DeepMind, which was acquired by Alphabet in 2014, and has made significant contributions to the field of AI.\\n\\nThese are just a few examples of notable people who have made significant contributions to the field of AI. There are many other researchers and scientists who have also made important advancements in the field.'" + "\"Sure! Here's a quick one:\\n\\nWhy don't scientists trust atoms?\\nBecause they make up everything!\\n\\nI hope that brought a smile to your face!\"" ] }, "execution_count": 2, @@ -95,7 +85,97 @@ } ], "source": [ - "llm(\"Tell me about the history of AI\")" + "from langchain_community.llms import Ollama\n", + "\n", + "llm = Ollama(model=\"llama2\")\n", + "\n", + "llm.invoke(\"Tell me a joke\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To stream tokens, use the `.stream(...)` method:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "S\n", + "ure\n", + ",\n", + " here\n", + "'\n", + "s\n", + " one\n", + ":\n", + "\n", + "\n", + "\n", + "\n", + "Why\n", + " don\n", + "'\n", + "t\n", + " scient\n", + "ists\n", + " trust\n", + " atoms\n", + "?\n", + "\n", + "\n", + "B\n", + "ecause\n", + " they\n", + " make\n", + " up\n", + " everything\n", + "!\n", + "\n", + "\n", + "\n", + "\n", + "I\n", + " hope\n", + " you\n", + " found\n", + " that\n", + " am\n", + "using\n", + "!\n", + " Do\n", + " you\n", + " want\n", + " to\n", + " hear\n", + " another\n", + " one\n", + "?\n", + "\n" + ] + } + ], + "source": [ + "query = \"Tell me a joke\"\n", + "\n", + "for chunks in llm.stream(query):\n", + " print(chunks)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To learn more about the LangChain Expressive Language and the available methods on an LLM, see the [LCEL Interface](https://python.langchain.com/docs/expression_language/interface)" ] }, { @@ -106,16 +186,14 @@ "\n", "Ollama has support for multi-modal LLMs, such as [bakllava](https://ollama.ai/library/bakllava) and [llava](https://ollama.ai/library/llava).\n", "\n", - "```\n", - "ollama pull bakllava\n", - "```\n", + "`ollama pull bakllava`\n", "\n", "Be sure to update Ollama so that you have the most recent version to support multi-modal." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +210,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -176,7 +254,7 @@ " display(HTML(image_html))\n", "\n", "\n", - "file_path = \"/Users/rlm/Desktop/Eval_Sets/multi_modal_presentations/DDOG/img_23.jpg\"\n", + "file_path = \"../../../static/img/ollama_example_img.jpg\"\n", "pil_image = Image.open(file_path)\n", "image_b64 = convert_to_base64(pil_image)\n", "plt_img_base64(image_b64)" @@ -184,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -193,7 +271,7 @@ "'90%'" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +298,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.1" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/static/img/ollama_example_img.jpg b/docs/static/img/ollama_example_img.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86149b798443bec4ef8ef9a0852d92809658a77e GIT binary patch literal 65920 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