diff --git a/cookbook/self_query_hotel_search.ipynb b/cookbook/self_query_hotel_search.ipynb index 6b93b196279..958c78fd5ef 100644 --- a/cookbook/self_query_hotel_search.ipynb +++ b/cookbook/self_query_hotel_search.ipynb @@ -31,7 +31,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install langchain lark openai elasticsearch pandas" + "!pip install langchain langchain-elasticsearch lark openai elasticsearch pandas" ] }, { diff --git a/docs/docs/integrations/retrievers/self_query/elasticsearch_self_query.ipynb b/docs/docs/integrations/retrievers/self_query/elasticsearch_self_query.ipynb index 165cd16f3c6..3c9798b0f01 100644 --- a/docs/docs/integrations/retrievers/self_query/elasticsearch_self_query.ipynb +++ b/docs/docs/integrations/retrievers/self_query/elasticsearch_self_query.ipynb @@ -45,7 +45,7 @@ } ], "source": [ - "%pip install --upgrade --quiet U lark elasticsearch" + "%pip install --upgrade --quiet U lark langchain langchain-elasticsearch" ] }, { diff --git a/libs/community/langchain_community/chat_message_histories/elasticsearch.py b/libs/community/langchain_community/chat_message_histories/elasticsearch.py index bbd621b98d9..40002410638 100644 --- a/libs/community/langchain_community/chat_message_histories/elasticsearch.py +++ b/libs/community/langchain_community/chat_message_histories/elasticsearch.py @@ -3,6 +3,7 @@ import logging from time import time from typing import TYPE_CHECKING, Any, Dict, List, Optional +from langchain_core._api import deprecated from langchain_core.chat_history import BaseChatMessageHistory from langchain_core.messages import ( BaseMessage, @@ -16,6 +17,7 @@ if TYPE_CHECKING: logger = logging.getLogger(__name__) +@deprecated("0.0.27", alternative="Use langchain-elasticsearch package", pending=True) class ElasticsearchChatMessageHistory(BaseChatMessageHistory): """Chat message history that stores history in Elasticsearch. diff --git a/libs/community/langchain_community/embeddings/elasticsearch.py b/libs/community/langchain_community/embeddings/elasticsearch.py index 9145a948ad7..80596b6fd92 100644 --- a/libs/community/langchain_community/embeddings/elasticsearch.py +++ b/libs/community/langchain_community/embeddings/elasticsearch.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, List, Optional +from langchain_core._api import deprecated from langchain_core.utils import get_from_env if TYPE_CHECKING: @@ -11,6 +12,9 @@ if TYPE_CHECKING: from langchain_core.embeddings import Embeddings +@deprecated( + "0.1.11", alternative="Use class in langchain-elasticsearch package", pending=True +) class ElasticsearchEmbeddings(Embeddings): """Elasticsearch embedding models. diff --git a/libs/community/langchain_community/vectorstores/elastic_vector_search.py b/libs/community/langchain_community/vectorstores/elastic_vector_search.py index a72ccc55e9b..32252008c2c 100644 --- a/libs/community/langchain_community/vectorstores/elastic_vector_search.py +++ b/libs/community/langchain_community/vectorstores/elastic_vector_search.py @@ -50,6 +50,11 @@ def _default_script_query(query_vector: List[float], filter: Optional[dict]) -> } +@deprecated( + "0.0.27", + alternative="Use ElasticsearchStore class in langchain-elasticsearch package", + pending=True, +) class ElasticVectorSearch(VectorStore): """ @@ -358,7 +363,11 @@ class ElasticVectorSearch(VectorStore): self.client.delete(index=self.index_name, id=id) -@deprecated("0.0.1", alternative="ElasticsearchStore class.", pending=True) +@deprecated( + "0.0.1", + alternative="Use ElasticsearchStore class in langchain-elasticsearch package", + pending=True, +) class ElasticKnnSearch(VectorStore): """[DEPRECATED] `Elasticsearch` with k-nearest neighbor search (`k-NN`) vector store. diff --git a/libs/community/langchain_community/vectorstores/elasticsearch.py b/libs/community/langchain_community/vectorstores/elasticsearch.py index 2f6aa4df697..09f818ff05e 100644 --- a/libs/community/langchain_community/vectorstores/elasticsearch.py +++ b/libs/community/langchain_community/vectorstores/elasticsearch.py @@ -15,6 +15,7 @@ from typing import ( ) import numpy as np +from langchain_core._api import deprecated from langchain_core.documents import Document from langchain_core.embeddings import Embeddings from langchain_core.vectorstores import VectorStore @@ -113,6 +114,9 @@ class BaseRetrievalStrategy(ABC): return True +@deprecated( + "0.0.27", alternative="Use class in langchain-elasticsearch package", pending=True +) class ApproxRetrievalStrategy(BaseRetrievalStrategy): """Approximate retrieval strategy using the `HNSW` algorithm.""" @@ -233,6 +237,9 @@ class ApproxRetrievalStrategy(BaseRetrievalStrategy): } +@deprecated( + "0.0.27", alternative="Use class in langchain-elasticsearch package", pending=True +) class ExactRetrievalStrategy(BaseRetrievalStrategy): """Exact retrieval strategy using the `script_score` query.""" @@ -300,6 +307,9 @@ class ExactRetrievalStrategy(BaseRetrievalStrategy): } +@deprecated( + "0.0.27", alternative="Use class in langchain-elasticsearch package", pending=True +) class SparseRetrievalStrategy(BaseRetrievalStrategy): """Sparse retrieval strategy using the `text_expansion` processor.""" @@ -381,6 +391,9 @@ class SparseRetrievalStrategy(BaseRetrievalStrategy): return False +@deprecated( + "0.0.27", alternative="Use class in langchain-elasticsearch package", pending=True +) class ElasticsearchStore(VectorStore): """`Elasticsearch` vector store. diff --git a/templates/rag-elasticsearch/README.md b/templates/rag-elasticsearch/README.md index f2103f28a86..976ef2a1437 100644 --- a/templates/rag-elasticsearch/README.md +++ b/templates/rag-elasticsearch/README.md @@ -1,7 +1,7 @@ # rag-elasticsearch -This template performs RAG using [ElasticSearch](https://python.langchain.com/docs/integrations/vectorstores/elasticsearch). +This template performs RAG using [Elasticsearch](https://python.langchain.com/docs/integrations/vectorstores/elasticsearch). It relies on sentence transformer `MiniLM-L6-v2` for embedding passages and questions. diff --git a/templates/rag-elasticsearch/ingest.py b/templates/rag-elasticsearch/ingest.py index ad5b2ae54d6..9a570951495 100644 --- a/templates/rag-elasticsearch/ingest.py +++ b/templates/rag-elasticsearch/ingest.py @@ -2,7 +2,7 @@ import os from langchain_community.document_loaders import JSONLoader from langchain_community.embeddings import HuggingFaceEmbeddings -from langchain_community.vectorstores.elasticsearch import ElasticsearchStore +from langchain_elasticsearch import ElasticsearchStore from langchain_text_splitters import RecursiveCharacterTextSplitter ELASTIC_CLOUD_ID = os.getenv("ELASTIC_CLOUD_ID") diff --git a/templates/rag-elasticsearch/poetry.lock b/templates/rag-elasticsearch/poetry.lock index ba3224a993d..225ef70b6f9 100644 --- a/templates/rag-elasticsearch/poetry.lock +++ b/templates/rag-elasticsearch/poetry.lock @@ -995,6 +995,22 @@ tenacity = ">=8.1.0,<9.0.0" [package.extras] extended-testing = ["jinja2 (>=3,<4)"] +[[package]] +name = "langchain-elasticsearch" +version = "0.1.0" +description = "An integration package connecting Elasticsearch and LangChain" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_elasticsearch-0.1.0-py3-none-any.whl", hash = "sha256:734b3600c2a94167a20adbde853ddd420d9e7aba09d60050de24c657096a0cba"}, + {file = "langchain_elasticsearch-0.1.0.tar.gz", hash = "sha256:348343d2dcc34460180328c2775301839cfb8ccfd4931f1daf27d9753bfeb1e7"}, +] + +[package.dependencies] +elasticsearch = ">=8.12.0,<9.0.0" +langchain-core = ">=0.1,<0.2" +numpy = ">=1,<2" + [[package]] name = "langchain-text-splitters" version = "0.0.1" @@ -1860,7 +1876,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -2176,26 +2191,6 @@ optional = false python-versions = ">=3.9" files = [ {file = "scikit-learn-1.4.0.tar.gz", hash = "sha256:d4373c984eba20e393216edd51a3e3eede56cbe93d4247516d205643c3b93121"}, - {file = "scikit_learn-1.4.0-1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fce93a7473e2f4ee4cc280210968288d6a7d7ad8dc6fa7bb7892145e407085f9"}, - {file = "scikit_learn-1.4.0-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d77df3d1e15fc37a9329999979fa7868ba8655dbab21fe97fc7ddabac9e08cc7"}, - {file = "scikit_learn-1.4.0-1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2404659fedec40eeafa310cd14d613e564d13dbf8f3c752d31c095195ec05de6"}, - {file = "scikit_learn-1.4.0-1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e98632da8f6410e6fb6bf66937712c949b4010600ccd3f22a5388a83e610cc3c"}, - {file = "scikit_learn-1.4.0-1-cp310-cp310-win_amd64.whl", hash = "sha256:11b3b140f70fbc9f6a08884631ae8dd60a4bb2d7d6d1de92738ea42b740d8992"}, - {file = "scikit_learn-1.4.0-1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8341eabdc754d5ab91641a7763243845e96b6d68e03e472531e88a4f1b09f21"}, - {file = "scikit_learn-1.4.0-1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d1f6bce875ac2bb6b52514f67c185c564ccd299a05b65b7bab091a4c13dde12d"}, - {file = "scikit_learn-1.4.0-1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c408b46b2fd61952d519ea1af2f8f0a7a703e1433923ab1704c4131520b2083b"}, - {file = "scikit_learn-1.4.0-1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b465dd1dcd237b7b1dcd1a9048ccbf70a98c659474324fa708464c3a2533fad"}, - {file = "scikit_learn-1.4.0-1-cp311-cp311-win_amd64.whl", hash = "sha256:0db8e22c42f7980fe5eb22069b1f84c48966f3e0d23a01afde5999e3987a2501"}, - {file = "scikit_learn-1.4.0-1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7eef6ea2ed289af40e88c0be9f7704ca8b5de18508a06897c3fe21e0905efdf"}, - {file = "scikit_learn-1.4.0-1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:349669b01435bc4dbf25c6410b0892073befdaec52637d1a1d1ff53865dc8db3"}, - {file = "scikit_learn-1.4.0-1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d439c584e58434d0350701bd33f6c10b309e851fccaf41c121aed55f6851d8cf"}, - {file = "scikit_learn-1.4.0-1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e2427d9ef46477625ab9b55c1882844fe6fc500f418c3f8e650200182457bc"}, - {file = "scikit_learn-1.4.0-1-cp312-cp312-win_amd64.whl", hash = "sha256:d3d75343940e7bf9b85c830c93d34039fa015eeb341c5c0b4cd7a90dadfe00d4"}, - {file = "scikit_learn-1.4.0-1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:76986d22e884ab062b1beecdd92379656e9d3789ecc1f9870923c178de55f9fe"}, - {file = "scikit_learn-1.4.0-1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e22446ad89f1cb7657f0d849dcdc345b48e2d10afa3daf2925fdb740f85b714c"}, - {file = "scikit_learn-1.4.0-1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74812c9eabb265be69d738a8ea8d4884917a59637fcbf88a5f0e9020498bc6b3"}, - {file = "scikit_learn-1.4.0-1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad2a63e0dd386b92da3270887a29b308af4d7c750d8c4995dfd9a4798691bcc"}, - {file = "scikit_learn-1.4.0-1-cp39-cp39-win_amd64.whl", hash = "sha256:53b9e29177897c37e2ff9d4ba6ca12fdb156e22523e463db05def303f5c72b5c"}, {file = "scikit_learn-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb8f044a8f5962613ce1feb4351d66f8d784bd072d36393582f351859b065f7d"}, {file = "scikit_learn-1.4.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:a6372c90bbf302387792108379f1ec77719c1618d88496d0df30cb8e370b4661"}, {file = "scikit_learn-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:785ce3c352bf697adfda357c3922c94517a9376002971bc5ea50896144bc8916"}, @@ -3094,4 +3089,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "85c8101c09e1698ea0432f283790521648383710b653771e59fb4c380edb2616" +content-hash = "0d316d2e7f026984599b8a093f031c8af00fcef89a8ab618e8cb5c8ab3964cdd" diff --git a/templates/rag-elasticsearch/pyproject.toml b/templates/rag-elasticsearch/pyproject.toml index 17bbb052156..306d224c9f2 100644 --- a/templates/rag-elasticsearch/pyproject.toml +++ b/templates/rag-elasticsearch/pyproject.toml @@ -10,8 +10,8 @@ readme = "README.md" [tool.poetry.dependencies] python = ">=3.9,<3.13" langchain = "^0.1" +langchain-elasticsearch = "^0.1.0" openai = "<2" -elasticsearch = "^8.10.0" sentence-transformers = "^2.2.2" jq = "^1.6.0" tiktoken = "^0.5.1" diff --git a/templates/rag-elasticsearch/rag_elasticsearch/chain.py b/templates/rag-elasticsearch/rag_elasticsearch/chain.py index 778003e7883..abbb79796e0 100644 --- a/templates/rag-elasticsearch/rag_elasticsearch/chain.py +++ b/templates/rag-elasticsearch/rag_elasticsearch/chain.py @@ -3,12 +3,12 @@ from typing import List, Optional, Tuple from langchain_community.chat_models import ChatOpenAI from langchain_community.embeddings import HuggingFaceEmbeddings -from langchain_community.vectorstores.elasticsearch import ElasticsearchStore from langchain_core.messages import BaseMessage from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import format_document from langchain_core.pydantic_v1 import BaseModel, Field from langchain_core.runnables import RunnableParallel, RunnablePassthrough +from langchain_elasticsearch import ElasticsearchStore from .connection import es_connection_details from .prompts import CONDENSE_QUESTION_PROMPT, DOCUMENT_PROMPT, LLM_CONTEXT_PROMPT diff --git a/templates/rag-self-query/ingest.py b/templates/rag-self-query/ingest.py index 7edfed66df9..be43fe97de0 100644 --- a/templates/rag-self-query/ingest.py +++ b/templates/rag-self-query/ingest.py @@ -2,7 +2,7 @@ import os from langchain_community.document_loaders import JSONLoader from langchain_community.embeddings import OpenAIEmbeddings -from langchain_community.vectorstores import ElasticsearchStore +from langchain_elasticsearch import ElasticsearchStore from langchain_text_splitters import RecursiveCharacterTextSplitter ELASTIC_CLOUD_ID = os.getenv("ELASTIC_CLOUD_ID") diff --git a/templates/rag-self-query/poetry.lock b/templates/rag-self-query/poetry.lock index ae72c1cdab4..e21ec730eda 100644 --- a/templates/rag-self-query/poetry.lock +++ b/templates/rag-self-query/poetry.lock @@ -998,6 +998,22 @@ tenacity = ">=8.1.0,<9.0.0" [package.extras] extended-testing = ["jinja2 (>=3,<4)"] +[[package]] +name = "langchain-elasticsearch" +version = "0.1.0" +description = "An integration package connecting Elasticsearch and LangChain" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_elasticsearch-0.1.0-py3-none-any.whl", hash = "sha256:734b3600c2a94167a20adbde853ddd420d9e7aba09d60050de24c657096a0cba"}, + {file = "langchain_elasticsearch-0.1.0.tar.gz", hash = "sha256:348343d2dcc34460180328c2775301839cfb8ccfd4931f1daf27d9753bfeb1e7"}, +] + +[package.dependencies] +elasticsearch = ">=8.12.0,<9.0.0" +langchain-core = ">=0.1,<0.2" +numpy = ">=1,<2" + [[package]] name = "langchain-text-splitters" version = "0.0.1" @@ -1872,7 +1888,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -3088,4 +3103,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "f6b9d389d68bd7bf89deec5fe34724bdb32cad352dc560c4873b1b80f16d1332" +content-hash = "35c900daced9ab0fcc8f10218eb3fda6355c13f878fa4734f53c1e58c45df3b2" diff --git a/templates/rag-self-query/pyproject.toml b/templates/rag-self-query/pyproject.toml index 586ba26e814..cb34a8da277 100644 --- a/templates/rag-self-query/pyproject.toml +++ b/templates/rag-self-query/pyproject.toml @@ -8,8 +8,8 @@ readme = "README.md" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" langchain = "^0.1" +langchain-elasticsearch = "^0.1.0" openai = "<2" -elasticsearch = "^8.10.0" sentence-transformers = "^2.2.2" jq = "^1.6.0" tiktoken = "^0.5.1" diff --git a/templates/rag-self-query/rag_self_query/chain.py b/templates/rag-self-query/rag_self_query/chain.py index b0526ef8900..5ba002a0e0f 100644 --- a/templates/rag-self-query/rag_self_query/chain.py +++ b/templates/rag-self-query/rag_self_query/chain.py @@ -5,11 +5,11 @@ from typing import List, Tuple from langchain.retrievers import SelfQueryRetriever from langchain_community.chat_models import ChatOpenAI from langchain_community.embeddings import OpenAIEmbeddings -from langchain_community.vectorstores.elasticsearch import ElasticsearchStore from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import format_document from langchain_core.pydantic_v1 import BaseModel, Field from langchain_core.runnables import RunnableParallel, RunnablePassthrough +from langchain_elasticsearch.vectorstores import ElasticsearchStore from .prompts import CONDENSE_QUESTION_PROMPT, DOCUMENT_PROMPT, LLM_CONTEXT_PROMPT