From 52d95ec47dbb06a1bcc3f0ff30cadc50135351db Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Tue, 25 Apr 2023 16:11:14 -0700 Subject: [PATCH] anthropic docs: deprecated LLM, add chat model (#3549) --- .../models/chat/integrations/anthropic.ipynb | 179 ++++++++++++++++++ .../llms/integrations/anthropic_example.ipynb | 146 -------------- langchain/llms/anthropic.py | 10 + 3 files changed, 189 insertions(+), 146 deletions(-) create mode 100644 docs/modules/models/chat/integrations/anthropic.ipynb delete mode 100644 docs/modules/models/llms/integrations/anthropic_example.ipynb diff --git a/docs/modules/models/chat/integrations/anthropic.ipynb b/docs/modules/models/chat/integrations/anthropic.ipynb new file mode 100644 index 00000000..a8181703 --- /dev/null +++ b/docs/modules/models/chat/integrations/anthropic.ipynb @@ -0,0 +1,179 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bf733a38-db84-4363-89e2-de6735c37230", + "metadata": {}, + "source": [ + "# Anthropic\n", + "\n", + "This notebook covers how to get started with Anthropic chat models." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "d4a7c55d-b235-4ca4-a579-c90cc9570da9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatAnthropic\n", + "from langchain.prompts.chat import (\n", + " ChatPromptTemplate,\n", + " SystemMessagePromptTemplate,\n", + " AIMessagePromptTemplate,\n", + " HumanMessagePromptTemplate,\n", + ")\n", + "from langchain.schema import (\n", + " AIMessage,\n", + " HumanMessage,\n", + " SystemMessage\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "70cf04e8-423a-4ff6-8b09-f11fb711c817", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "chat = ChatAnthropic()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8199ef8f-eb8b-4253-9ea0-6c24a013ca4c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content=\" J'aime programmer. \", additional_kwargs={})" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "messages = [\n", + " HumanMessage(content=\"Translate this sentence from English to French. I love programming.\")\n", + "]\n", + "chat(messages)" + ] + }, + { + "cell_type": "markdown", + "id": "c361ab1e-8c0c-4206-9e3c-9d1424a12b9c", + "metadata": {}, + "source": [ + "## `ChatAnthropic` also supports async and streaming functionality:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "93a21c5c-6ef9-4688-be60-b2e1f94842fb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.callbacks.base import CallbackManager\n", + "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c5fac0e9-05a4-4fc1-a3b3-e5bbb24b971b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LLMResult(generations=[[ChatGeneration(text=\" J'aime la programmation.\", generation_info=None, message=AIMessage(content=\" J'aime la programmation.\", additional_kwargs={}))]], llm_output={})" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "await chat.agenerate([messages])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "025be980-e50d-4a68-93dc-c9c7b500ce34", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " J'adore programmer." + ] + }, + { + "data": { + "text/plain": [ + "AIMessage(content=\" J'adore programmer.\", additional_kwargs={})" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chat = ChatAnthropic(streaming=True, verbose=True, callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))\n", + "chat(messages)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "df45f59f", + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/modules/models/llms/integrations/anthropic_example.ipynb b/docs/modules/models/llms/integrations/anthropic_example.ipynb deleted file mode 100644 index 902b7012..00000000 --- a/docs/modules/models/llms/integrations/anthropic_example.ipynb +++ /dev/null @@ -1,146 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9597802c", - "metadata": {}, - "source": [ - "# Anthropic\n", - "\n", - "[Anthropic](https://console.anthropic.com/docs) is creator of the `Claude` LLM.\n", - "\n", - "This example goes over how to use LangChain to interact with Anthropic models." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e55c0f2e-63e1-4e83-ac44-ffcc1dfeacc8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Install the package\n", - "!pip install anthropic" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cec62d45-afa2-422a-95ef-57f8ab41a6f9", - "metadata": {}, - "outputs": [], - "source": [ - "# get a new token: https://www.anthropic.com/earlyaccess\n", - "\n", - "from getpass import getpass\n", - "\n", - "ANTHROPIC_API_KEY = getpass()" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6fb585dd", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from langchain.llms import Anthropic\n", - "from langchain import PromptTemplate, LLMChain" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "035dea0f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "template = \"\"\"Question: {question}\n", - "\n", - "Answer: Let's think step by step.\"\"\"\n", - "\n", - "prompt = PromptTemplate(template=template, input_variables=[\"question\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3f3458d9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "llm = Anthropic(anthropic_api_key=ANTHROPIC_API_KEY)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "a641dbd9", - "metadata": {}, - "outputs": [], - "source": [ - "llm_chain = LLMChain(prompt=prompt, llm=llm)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "9f844993", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\" Step 1: Justin Beiber was born on March 1, 1994\\nStep 2: The NFL season ends with the Super Bowl in January/February\\nStep 3: Therefore, the Super Bowl that occurred closest to Justin Beiber's birth would be Super Bowl XXIX in 1995\\nStep 4: The San Francisco 49ers won Super Bowl XXIX in 1995\\n\\nTherefore, the answer is the San Francisco 49ers won the Super Bowl in the year Justin Beiber was born.\"" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "question = \"What NFL team won the Super Bowl in the year Justin Beiber was born?\"\n", - "\n", - "llm_chain.run(question)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4797d719", - "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.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/langchain/llms/anthropic.py b/langchain/llms/anthropic.py index 1301b3d7..04dc5850 100644 --- a/langchain/llms/anthropic.py +++ b/langchain/llms/anthropic.py @@ -1,5 +1,6 @@ """Wrapper around Anthropic APIs.""" import re +import warnings from typing import Any, Callable, Dict, Generator, List, Mapping, Optional, Tuple, Union from pydantic import BaseModel, Extra, root_validator @@ -123,6 +124,15 @@ class Anthropic(LLM, _AnthropicCommon): response = model(prompt) """ + @root_validator() + def raise_warning(cls, values: Dict) -> Dict: + """Raise warning that this class is deprecated.""" + warnings.warn( + "This Anthropic LLM is deprecated. " + "Please use `from langchain.chat_models import ChatAnthropic` instead" + ) + return values + class Config: """Configuration for this pydantic object."""