diff --git a/Dockerfile b/Dockerfile index 22490ae6..2ecb32d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ FROM builder AS dependencies COPY pyproject.toml poetry.lock poetry.toml ./ # Install the Poetry dependencies (this layer will be cached as long as the dependencies don't change) -RUN $POETRY_HOME/bin/poetry install --no-interaction --no-ansi +RUN $POETRY_HOME/bin/poetry install --no-interaction --no-ansi --with test # Use a multi-stage build to run tests FROM dependencies AS tests @@ -35,7 +35,7 @@ FROM dependencies AS tests # Copy the rest of the app source code (this layer will be invalidated and rebuilt whenever the source code changes) COPY . . -RUN /opt/poetry/bin/poetry install --no-interaction --no-ansi +RUN /opt/poetry/bin/poetry install --no-interaction --no-ansi --with test # Set the entrypoint to run tests using Poetry ENTRYPOINT ["/opt/poetry/bin/poetry", "run", "pytest"] diff --git a/langchain/vectorstores/elastic_vector_search.py b/langchain/vectorstores/elastic_vector_search.py index e0eb7b15..cb238563 100644 --- a/langchain/vectorstores/elastic_vector_search.py +++ b/langchain/vectorstores/elastic_vector_search.py @@ -146,6 +146,7 @@ class ElasticVectorSearch(VectorStore, ABC): List of ids from adding the texts into the vectorstore. """ try: + from elasticsearch.exceptions import NotFoundError from elasticsearch.helpers import bulk except ImportError: raise ValueError( @@ -155,6 +156,17 @@ class ElasticVectorSearch(VectorStore, ABC): requests = [] ids = [] embeddings = self.embedding.embed_documents(list(texts)) + dim = len(embeddings[0]) + mapping = _default_text_mapping(dim) + + # check to see if the index already exists + try: + self.client.indices.get(index=self.index_name) + except NotFoundError: + # TODO would be nice to create index before embedding, + # just to save expensive steps for last + self.client.indices.create(index=self.index_name, mappings=mapping) + for i, text in enumerate(texts): metadata = metadatas[i] if metadatas else {} _id = str(uuid.uuid4()) @@ -229,6 +241,7 @@ class ElasticVectorSearch(VectorStore, ABC): ) try: import elasticsearch + from elasticsearch.exceptions import NotFoundError from elasticsearch.helpers import bulk except ImportError: raise ValueError( @@ -245,9 +258,15 @@ class ElasticVectorSearch(VectorStore, ABC): embeddings = embedding.embed_documents(texts) dim = len(embeddings[0]) mapping = _default_text_mapping(dim) - # TODO would be nice to create index before embedding, - # just to save expensive steps for last - client.indices.create(index=index_name, mappings=mapping) + + # check to see if the index already exists + try: + client.indices.get(index=index_name) + except NotFoundError: + # TODO would be nice to create index before embedding, + # just to save expensive steps for last + client.indices.create(index=index_name, mappings=mapping) + requests = [] for i, text in enumerate(texts): metadata = metadatas[i] if metadatas else {} diff --git a/poetry.lock b/poetry.lock index 8d8bc0a6..92704c2b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "absl-py" @@ -5516,6 +5516,22 @@ files = [ pytest = ">=5.0.0" python-dotenv = ">=0.9.1" +[[package]] +name = "pytest-vcr" +version = "1.0.2" +description = "Plugin for managing VCR.py cassettes" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pytest-vcr-1.0.2.tar.gz", hash = "sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896"}, + {file = "pytest_vcr-1.0.2-py2.py3-none-any.whl", hash = "sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c"}, +] + +[package.dependencies] +pytest = ">=3.6.0" +vcrpy = "*" + [[package]] name = "pytest-watcher" version = "0.2.6" @@ -6828,7 +6844,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} [package.extras] aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] @@ -7930,6 +7946,24 @@ decorator = ">=3.4.0" [package.extras] test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] +[[package]] +name = "vcrpy" +version = "4.2.1" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vcrpy-4.2.1-py2.py3-none-any.whl", hash = "sha256:efac3e2e0b2af7686f83a266518180af7a048619b2f696e7bad9520f5e2eac09"}, + {file = "vcrpy-4.2.1.tar.gz", hash = "sha256:7cd3e81a2c492e01c281f180bcc2a86b520b173d2b656cb5d89d99475423e013"}, +] + +[package.dependencies] +PyYAML = "*" +six = ">=1.5" +wrapt = "*" +yarl = "*" + [[package]] name = "wasabi" version = "1.1.1" @@ -8291,7 +8325,7 @@ name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." category = "main" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, @@ -8488,13 +8522,13 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [extras] -all = ["anthropic", "cohere", "openai", "nlpcloud", "huggingface_hub", "jina", "manifest-ml", "elasticsearch", "opensearch-py", "google-search-results", "faiss-cpu", "sentence-transformers", "transformers", "spacy", "nltk", "wikipedia", "beautifulsoup4", "tiktoken", "torch", "jinja2", "pinecone-client", "weaviate-client", "redis", "google-api-python-client", "wolframalpha", "qdrant-client", "tensorflow-text", "pypdf", "networkx", "nomic", "aleph-alpha-client", "deeplake", "pgvector", "psycopg2-binary", "boto3", "pyowm"] +all = ["aleph-alpha-client", "anthropic", "beautifulsoup4", "boto3", "cohere", "deeplake", "elasticsearch", "faiss-cpu", "google-api-python-client", "google-search-results", "huggingface_hub", "jina", "jinja2", "manifest-ml", "networkx", "nlpcloud", "nltk", "nomic", "openai", "opensearch-py", "pgvector", "pinecone-client", "psycopg2-binary", "pyowm", "pypdf", "qdrant-client", "redis", "sentence-transformers", "spacy", "tensorflow-text", "tiktoken", "torch", "transformers", "weaviate-client", "wikipedia", "wolframalpha"] cohere = ["cohere"] -llms = ["anthropic", "cohere", "openai", "nlpcloud", "huggingface_hub", "manifest-ml", "torch", "transformers"] +llms = ["anthropic", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "torch", "transformers"] openai = ["openai"] qdrant = ["qdrant-client"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "6dc5842fe2ea7b5e284a1593ee69fdc3bf5589b698153df196d50dad6fd5d5f4" +content-hash = "5327202e7caf3f6be668049d15cbe117b7d23bfcb4877fa40e24f795a0354ed3" diff --git a/pyproject.toml b/pyproject.toml index 665963b4..caa190c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,6 +90,8 @@ optional = true [tool.poetry.group.test_integration.dependencies] openai = "^0.27.4" elasticsearch = {extras = ["async"], version = "^8.6.2"} +pytest-vcr = "^1.0.2" +wrapt = "^1.15.0" [tool.poetry.group.lint.dependencies] ruff = "^0.0.249" diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 00000000..d3bfe3b4 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,57 @@ +# Readme tests(draft) + +## Integrations Tests + +### Prepare + +This repository contains functional tests for several search engines and databases. The +tests aim to verify the correct behavior of the engines and databases according to their +specifications and requirements. + +To run some integration tests, such as tests located in +`tests/integration_tests/vectorstores/`, you will need to install the following +software: + +- Docker +- Python 3.8.1 or later + +We have optional group `test_integration` in the `pyproject.toml` file. This group +should contain dependencies for the integration tests and can be installed using the +command: + +```bash +poetry install --with test_integration +``` + +Any new dependencies should be added by running: + +```bash +poetry add some_new_deps --group "test_integration" +``` + +Before running any tests, you should start a specific Docker container that has all the +necessary dependencies installed. For instance, we use the `elasticsearch.yml` container +for `test_elasticsearch.py`: + +```bash +cd tests/integration_tests/vectorstores/docker-compose +docker-compose -f elasticsearch.yml up +``` + +Additionally, it's important to note that some integration tests may require certain +environment variables to be set, such as `OPENAI_API_KEY`. Be sure to set any required +environment variables before running the tests to ensure they run correctly. + +### Recording HTTP interactions with pytest-vcr + +Some of the integration tests in this repository involve making HTTP requests to +external services. To prevent these requests from being made every time the tests are +run, we use pytest-vcr to record and replay HTTP interactions. + +When running tests in a CI/CD pipeline, you may not want to modify the existing +cassettes. You can use the --vcr-record=none command-line option to disable recording +new cassettes. Here's an example: + +```bash +pytest tests/integration_tests/vectorstores/test_elasticsearch.py --vcr-record=none +``` \ No newline at end of file diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py new file mode 100644 index 00000000..cdddb4ea --- /dev/null +++ b/tests/integration_tests/conftest.py @@ -0,0 +1,32 @@ +import os + +import pytest + +# Getting the absolute path of the current file's directory +ABS_PATH = os.path.dirname(os.path.abspath(__file__)) + + +# This fixture returns a string containing the path to the cassette directory for the +# current module +@pytest.fixture(scope="module") +def vcr_cassette_dir(request: pytest.FixtureRequest) -> str: + return os.path.join( + os.path.dirname(request.module.__file__), + "cassettes", + os.path.basename(request.module.__file__).replace(".py", ""), + ) + + +# This fixture returns a dictionary containing filter_headers options +# for replacing certain headers with dummy values during cassette playback +# Specifically, it replaces the authorization header with a dummy value to +# prevent sensitive data from being recorded in the cassette. +@pytest.fixture(scope="module") +def vcr_config() -> dict: + return { + "filter_headers": [ + ("authorization", "authorization-DUMMY"), + ("X-OpenAI-Client-User-Agent", "X-OpenAI-Client-User-Agent-DUMMY"), + ("User-Agent", "User-Agent-DUMMY"), + ], + } diff --git a/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_add_documents.yaml b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_add_documents.yaml new file mode 100644 index 00000000..50ea00c2 --- /dev/null +++ b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_add_documents.yaml @@ -0,0 +1,582 @@ +interactions: +- request: + body: '{"input": ["Sharks are a group of elasmobranch fish characterized by a + cartilaginous skeleton, five to seven gill slits on the sides of the head, and + pectoral fins that are not fused to the head. Modern sharks are classified within + the clade Selachimorpha (or Selachii) and are the sister group to the Batoidea + (rays and kin). Some sources extend the term \"shark\" as an informal category + including extinct members of Chondrichthyes (cartilaginous fish) with a shark-like + morphology, such as hybodonts and xenacanths. Shark-like chondrichthyans such + as Cladoselache and Doliodus first appeared in the Devonian Period (419-359 + Ma), though some fossilized chondrichthyan-like scales are as old as the Late + Ordovician (458-444 Ma). The oldest modern sharks (selachians) are known from + the Early Jurassic, about 200 Ma.", "Sharks range in size from the small dwarf + lanternshark (Etmopterus perryi), a deep sea species that is only 17 centimetres + (6.7 in) in length, to the whale shark (Rhincodon typus), the largest fish in + the world, which reaches approximately 12 metres (40 ft) in length. They are + found in all seas and are common to depths up to 2,000 metres (6,600 ft). They + generally do not live in freshwater, although there are a few known exceptions, + such as the bull shark and the river shark, which can be found in both seawater + and freshwater.[3] Sharks have a covering of dermal denticles that protects + their skin from damage and parasites in addition to improving their fluid dynamics. + They have numerous sets of replaceable teeth.\n\nSeveral species are apex predators, + which are organisms that are at the top of their food chain. Select examples + include the tiger shark, blue shark, great white shark, mako shark, thresher + shark, and hammerhead shark.", "Sharks are caught by humans for shark meat or + shark fin soup. Many shark populations are threatened by human activities. Since + 1970, shark populations have been reduced by 71%, mostly from overfishing."], + "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2001' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + rf/vv/7tfwMAAP//AwAqDwRBiWEAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba19cfce39235-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:10 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '247' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - ddfb63c63597d48ade18afb82091b9f5 + status: + code: 200 + message: OK +- request: + body: '{"input": ["sharks"], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '50' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + H9bhIAAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba1a41cc19235-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:12 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '737' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - f2f02f88b1097ce728e4b79198958fde + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_from_documents.yaml b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_from_documents.yaml new file mode 100644 index 00000000..0b7e6c91 --- /dev/null +++ b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_custom_index_from_documents.yaml @@ -0,0 +1,582 @@ +interactions: +- request: + body: '{"input": ["Sharks are a group of elasmobranch fish characterized by a + cartilaginous skeleton, five to seven gill slits on the sides of the head, and + pectoral fins that are not fused to the head. Modern sharks are classified within + the clade Selachimorpha (or Selachii) and are the sister group to the Batoidea + (rays and kin). Some sources extend the term \"shark\" as an informal category + including extinct members of Chondrichthyes (cartilaginous fish) with a shark-like + morphology, such as hybodonts and xenacanths. Shark-like chondrichthyans such + as Cladoselache and Doliodus first appeared in the Devonian Period (419-359 + Ma), though some fossilized chondrichthyan-like scales are as old as the Late + Ordovician (458-444 Ma). The oldest modern sharks (selachians) are known from + the Early Jurassic, about 200 Ma.", "Sharks range in size from the small dwarf + lanternshark (Etmopterus perryi), a deep sea species that is only 17 centimetres + (6.7 in) in length, to the whale shark (Rhincodon typus), the largest fish in + the world, which reaches approximately 12 metres (40 ft) in length. They are + found in all seas and are common to depths up to 2,000 metres (6,600 ft). They + generally do not live in freshwater, although there are a few known exceptions, + such as the bull shark and the river shark, which can be found in both seawater + and freshwater.[3] Sharks have a covering of dermal denticles that protects + their skin from damage and parasites in addition to improving their fluid dynamics. + They have numerous sets of replaceable teeth.\n\nSeveral species are apex predators, + which are organisms that are at the top of their food chain. Select examples + include the tiger shark, blue shark, great white shark, mako shark, thresher + shark, and hammerhead shark.", "Sharks are caught by humans for shark meat or + shark fin soup. Many shark populations are threatened by human activities. Since + 1970, shark populations have been reduced by 71%, mostly from overfishing."], + "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2001' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + 39b/91//9r8BAAD//wMAKg8EQYlhAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba16d5d0f36dd-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:04 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '1460' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - 30e07233378822f34dc05079acb3fdd0 + status: + code: 200 + message: OK +- request: + body: '{"input": ["sharks"], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '50' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + H9bhIAAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba1890f5c36dd-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:10 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '2771' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - 793631cd04d7eb0ba0e044194f2ab253 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_default_index_from_documents.yaml b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_default_index_from_documents.yaml new file mode 100644 index 00000000..cbf50735 --- /dev/null +++ b/tests/integration_tests/vectorstores/cassettes/test_elasticsearch/TestElasticsearch.test_default_index_from_documents.yaml @@ -0,0 +1,583 @@ +interactions: +- request: + body: '{"input": ["Sharks are a group of elasmobranch fish characterized by a + cartilaginous skeleton, five to seven gill slits on the sides of the head, and + pectoral fins that are not fused to the head. Modern sharks are classified within + the clade Selachimorpha (or Selachii) and are the sister group to the Batoidea + (rays and kin). Some sources extend the term \"shark\" as an informal category + including extinct members of Chondrichthyes (cartilaginous fish) with a shark-like + morphology, such as hybodonts and xenacanths. Shark-like chondrichthyans such + as Cladoselache and Doliodus first appeared in the Devonian Period (419-359 + Ma), though some fossilized chondrichthyan-like scales are as old as the Late + Ordovician (458-444 Ma). The oldest modern sharks (selachians) are known from + the Early Jurassic, about 200 Ma.", "Sharks range in size from the small dwarf + lanternshark (Etmopterus perryi), a deep sea species that is only 17 centimetres + (6.7 in) in length, to the whale shark (Rhincodon typus), the largest fish in + the world, which reaches approximately 12 metres (40 ft) in length. They are + found in all seas and are common to depths up to 2,000 metres (6,600 ft). They + generally do not live in freshwater, although there are a few known exceptions, + such as the bull shark and the river shark, which can be found in both seawater + and freshwater.[3] Sharks have a covering of dermal denticles that protects + their skin from damage and parasites in addition to improving their fluid dynamics. + They have numerous sets of replaceable teeth.\n\nSeveral species are apex predators, + which are organisms that are at the top of their food chain. Select examples + include the tiger shark, blue shark, great white shark, mako shark, thresher + shark, and hammerhead shark.", "Sharks are caught by humans for shark meat or + shark fin soup. Many shark populations are threatened by human activities. Since + 1970, shark populations have been reduced by 71%, mostly from overfishing."], + "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2001' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + QYlhAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba14c2fb89a1b-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:00 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '2691' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - ac8a685d51289f34fb0f9ec06a76422a + status: + code: 200 + message: OK +- request: + body: '{"input": ["sharks"], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '50' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + H9bhIAAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7b3ba1631ffd9a1b-FRA + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Thu, 06 Apr 2023 17:08:01 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - own-45h3iv + openai-processing-ms: + - '544' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - dffc2a7329677f16a012ef37d5c3e09e + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration_tests/vectorstores/conftest.py b/tests/integration_tests/vectorstores/conftest.py new file mode 100644 index 00000000..f7171a1a --- /dev/null +++ b/tests/integration_tests/vectorstores/conftest.py @@ -0,0 +1,25 @@ +import os +from typing import Generator, List + +import pytest + +from langchain.document_loaders import TextLoader +from langchain.schema import Document +from langchain.text_splitter import CharacterTextSplitter + + +# Define a fixture that yields a generator object returning a list of documents +@pytest.fixture(scope="module") +def documents() -> Generator[List[Document], None, None]: + """Return a generator that yields a list of documents.""" + + # Create a CharacterTextSplitter object for splitting the documents into chunks + text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) + + # Load the documents from a file located in the fixtures directory + documents = TextLoader( + os.path.join(os.path.dirname(__file__), "fixtures", "sharks.txt") + ).load() + + # Yield the documents split into chunks + yield text_splitter.split_documents(documents) diff --git a/tests/integration_tests/vectorstores/test_elasticsearch.py b/tests/integration_tests/vectorstores/test_elasticsearch.py index c5222565..b97f2035 100644 --- a/tests/integration_tests/vectorstores/test_elasticsearch.py +++ b/tests/integration_tests/vectorstores/test_elasticsearch.py @@ -1,6 +1,7 @@ """Test ElasticSearch functionality.""" import logging import os +import uuid from typing import Generator, List, Union import pytest @@ -76,6 +77,7 @@ class TestElasticsearch: output = docsearch.similarity_search("foo", k=1) assert output == [Document(page_content="foo", metadata={"page": 0})] + @pytest.mark.vcr(ignore_localhost=True) def test_default_index_from_documents( self, documents: List[Document], openai_api_key: str, elasticsearch_url: str ) -> None: @@ -94,44 +96,55 @@ class TestElasticsearch: print(search_result) assert len(search_result) != 0 + @pytest.mark.vcr(ignore_localhost=True) def test_custom_index_from_documents( self, documents: List[Document], openai_api_key: str, elasticsearch_url: str ) -> None: """This test checks the construction of a custom ElasticSearch index using the 'from_documents'.""" + + index_name = f"custom_index_{uuid.uuid4().hex}" embedding = OpenAIEmbeddings(openai_api_key=openai_api_key) elastic_vector_search = ElasticVectorSearch.from_documents( documents=documents, embedding=embedding, elasticsearch_url=elasticsearch_url, - index_name="custom_index", + index_name=index_name, ) es = Elasticsearch(hosts=elasticsearch_url) index_names = es.indices.get(index="_all").keys() - assert "custom_index" in index_names + assert index_name in index_names search_result = elastic_vector_search.similarity_search("sharks") print(search_result) assert len(search_result) != 0 + @pytest.mark.vcr(ignore_localhost=True) def test_custom_index_add_documents( self, documents: List[Document], openai_api_key: str, elasticsearch_url: str ) -> None: """This test checks the construction of a custom ElasticSearch index using the 'add_documents'.""" + + index_name = f"custom_index_{uuid.uuid4().hex}" embedding = OpenAIEmbeddings(openai_api_key=openai_api_key) elastic_vector_search = ElasticVectorSearch( embedding=embedding, elasticsearch_url=elasticsearch_url, - index_name="custom_index", + index_name=index_name, ) es = Elasticsearch(hosts=elasticsearch_url) + elastic_vector_search.add_documents(documents) + index_names = es.indices.get(index="_all").keys() - assert "custom_index" in index_names + assert index_name in index_names - elastic_vector_search.add_documents(documents) search_result = elastic_vector_search.similarity_search("sharks") print(search_result) assert len(search_result) != 0 + + def test_custom_index_add_documents_to_exists_store(self) -> None: + # TODO: implement it + pass