diff --git a/docs/docs/integrations/providers/vectara/index.mdx b/docs/docs/integrations/providers/vectara/index.mdx index d7ff70fef3ea2..10de5f001f112 100644 --- a/docs/docs/integrations/providers/vectara/index.mdx +++ b/docs/docs/integrations/providers/vectara/index.mdx @@ -4,15 +4,14 @@ > which is grounded in the data, documents, and knowledge that they have (technically, it is Retrieval-Augmented-Generation-as-a-service). **Vectara Overview:** -`Vectara` is RAG-as-a-service, providing all the components of RAG behind an easy-to-use API, including: +[Vectara](https://vectara.com/) is the trusted AI Assistant and Agent platform which focuses on enterprise readiness for mission-critical applications. +Vectara serverless RAG-as-a-service provides all the components of RAG behind an easy-to-use API, including: 1. A way to extract text from files (PDF, PPT, DOCX, etc) 2. ML-based chunking that provides state of the art performance. 3. The [Boomerang](https://vectara.com/how-boomerang-takes-retrieval-augmented-generation-to-the-next-level-via-grounded-generation/) embeddings model. 4. Its own internal vector database where text chunks and embedding vectors are stored. -5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments -(including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) and -[MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/)) -7. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations. +5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments, including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) as well as multiple reranking options such as the [multi-lingual relevance reranker](https://www.vectara.com/blog/deep-dive-into-vectara-multilingual-reranker-v1-state-of-the-art-reranker-across-100-languages), [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/), [UDF reranker](https://www.vectara.com/blog/rag-with-user-defined-functions-based-reranking). +6. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations. For more information: - [Documentation](https://docs.vectara.com/docs/) @@ -22,7 +21,7 @@ For more information: ## Installation and Setup To use `Vectara` with LangChain no special installation steps are required. -To get started, [sign up](https://vectara.com/integrations/langchain) for a free Vectara account (if you don't already have one), +To get started, [sign up](https://vectara.com/integrations/langchain) for a free Vectara trial, and follow the [quickstart](https://docs.vectara.com/docs/quickstart) guide to create a corpus and an API key. Once you have these, you can provide them as arguments to the Vectara `vectorstore`, or you can set them as environment variables. diff --git a/docs/docs/integrations/providers/vectara/vectara_chat.ipynb b/docs/docs/integrations/providers/vectara/vectara_chat.ipynb index f31f7599a2800..652f58919086e 100644 --- a/docs/docs/integrations/providers/vectara/vectara_chat.ipynb +++ b/docs/docs/integrations/providers/vectara/vectara_chat.ipynb @@ -7,19 +7,19 @@ "source": [ "# Vectara Chat\n", "\n", - "[Vectara](https://vectara.com/) provides a Trusted Generative AI platform, allowing organizations to rapidly create a ChatGPT-like experience (an AI assistant) which is grounded in the data, documents, and knowledge that they have (technically, it is Retrieval-Augmented-Generation-as-a-service). \n", + "[Vectara](https://vectara.com/) is the trusted AI Assistant and Agent platform which focuses on enterprise readiness for mission-critical applications.\n", "\n", "Vectara serverless RAG-as-a-service provides all the components of RAG behind an easy-to-use API, including:\n", "1. A way to extract text from files (PDF, PPT, DOCX, etc)\n", "2. ML-based chunking that provides state of the art performance.\n", "3. The [Boomerang](https://vectara.com/how-boomerang-takes-retrieval-augmented-generation-to-the-next-level-via-grounded-generation/) embeddings model.\n", "4. Its own internal vector database where text chunks and embedding vectors are stored.\n", - "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments (including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) and [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/))\n", - "7. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", + "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments (including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) as well as multiple reranking options such as the [multi-lingual relevance reranker](https://www.vectara.com/blog/deep-dive-into-vectara-multilingual-reranker-v1-state-of-the-art-reranker-across-100-languages), [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/), [UDF reranker](https://www.vectara.com/blog/rag-with-user-defined-functions-based-reranking). \n", + "6. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", "\n", "See the [Vectara API documentation](https://docs.vectara.com/docs/) for more information on how to use the API.\n", "\n", - "This notebook shows how to use Vectara's [Chat](https://docs.vectara.com/docs/api-reference/chat-apis/chat-apis-overview) functionality." + "This notebook shows how to use Vectara's [Chat](https://docs.vectara.com/docs/api-reference/chat-apis/chat-apis-overview) functionality, which provides automatic storage of conversation history and ensures follow up questions consider that history." ] }, { @@ -30,7 +30,7 @@ "# Getting Started\n", "\n", "To get started, use the following steps:\n", - "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara account. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", + "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara trial. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", "2. Within your account you can create one or more corpora. Each corpus represents an area that stores text data upon ingest from input documents. To create a corpus, use the **\"Create Corpus\"** button. You then provide a name to your corpus as well as a description. Optionally you can define filtering attributes and apply some advanced options. If you click on your created corpus, you can see its name and corpus ID right on the top.\n", "3. Next you'll need to create API keys to access the corpus. Click on the **\"Access Control\"** tab in the corpus view and then the **\"Create API Key\"** button. Give your key a name, and choose whether you want query-only or query+index for your key. Click \"Create\" and you now have an active API key. Keep this key confidential. \n", "\n", diff --git a/docs/docs/integrations/retrievers/self_query/vectara_self_query.ipynb b/docs/docs/integrations/retrievers/self_query/vectara_self_query.ipynb index 72e242b16d75c..fe98c8f12a624 100644 --- a/docs/docs/integrations/retrievers/self_query/vectara_self_query.ipynb +++ b/docs/docs/integrations/retrievers/self_query/vectara_self_query.ipynb @@ -7,15 +7,15 @@ "source": [ "# Vectara self-querying \n", "\n", - "[Vectara](https://vectara.com/) provides a Trusted Generative AI platform, allowing organizations to rapidly create a ChatGPT-like experience (an AI assistant) which is grounded in the data, documents, and knowledge that they have (technically, it is Retrieval-Augmented-Generation-as-a-service). \n", + "[Vectara](https://vectara.com/) is the trusted AI Assistant and Agent platform which focuses on enterprise readiness for mission-critical applications.\n", "\n", "Vectara serverless RAG-as-a-service provides all the components of RAG behind an easy-to-use API, including:\n", "1. A way to extract text from files (PDF, PPT, DOCX, etc)\n", "2. ML-based chunking that provides state of the art performance.\n", "3. The [Boomerang](https://vectara.com/how-boomerang-takes-retrieval-augmented-generation-to-the-next-level-via-grounded-generation/) embeddings model.\n", "4. Its own internal vector database where text chunks and embedding vectors are stored.\n", - "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments (including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) and [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/))\n", - "7. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", + "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments, including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) as well as multiple reranking options such as the [multi-lingual relevance reranker](https://www.vectara.com/blog/deep-dive-into-vectara-multilingual-reranker-v1-state-of-the-art-reranker-across-100-languages), [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/), [UDF reranker](https://www.vectara.com/blog/rag-with-user-defined-functions-based-reranking). \n", + "6. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", "\n", "See the [Vectara API documentation](https://docs.vectara.com/docs/) for more information on how to use the API.\n", "\n", @@ -30,7 +30,7 @@ "# Getting Started\n", "\n", "To get started, use the following steps:\n", - "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara account. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", + "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara trial. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", "2. Within your account you can create one or more corpora. Each corpus represents an area that stores text data upon ingest from input documents. To create a corpus, use the **\"Create Corpus\"** button. You then provide a name to your corpus as well as a description. Optionally you can define filtering attributes and apply some advanced options. If you click on your created corpus, you can see its name and corpus ID right on the top.\n", "3. Next you'll need to create API keys to access the corpus. Click on the **\"Access Control\"** tab in the corpus view and then the **\"Create API Key\"** button. Give your key a name, and choose whether you want query-only or query+index for your key. Click \"Create\" and you now have an active API key. Keep this key confidential. \n", "\n", diff --git a/docs/docs/integrations/vectorstores/vectara.ipynb b/docs/docs/integrations/vectorstores/vectara.ipynb index d041d8b669a01..758ea4be83edd 100644 --- a/docs/docs/integrations/vectorstores/vectara.ipynb +++ b/docs/docs/integrations/vectorstores/vectara.ipynb @@ -7,15 +7,15 @@ "source": [ "# Vectara\n", "\n", - "[Vectara](https://vectara.com/) provides a Trusted Generative AI platform, allowing organizations to rapidly create a ChatGPT-like experience (an AI assistant) which is grounded in the data, documents, and knowledge that they have (technically, it is Retrieval-Augmented-Generation-as-a-service). \n", + "[Vectara](https://vectara.com/) is the trusted AI Assistant and Agent platform which focuses on enterprise readiness for mission-critical applications.\n", "\n", "Vectara serverless RAG-as-a-service provides all the components of RAG behind an easy-to-use API, including:\n", "1. A way to extract text from files (PDF, PPT, DOCX, etc)\n", "2. ML-based chunking that provides state of the art performance.\n", "3. The [Boomerang](https://vectara.com/how-boomerang-takes-retrieval-augmented-generation-to-the-next-level-via-grounded-generation/) embeddings model.\n", "4. Its own internal vector database where text chunks and embedding vectors are stored.\n", - "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments (including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) and [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/))\n", - "7. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", + "5. A query service that automatically encodes the query into embedding, and retrieves the most relevant text segments (including support for [Hybrid Search](https://docs.vectara.com/docs/api-reference/search-apis/lexical-matching) as well as multiple reranking options such as the [multi-lingual relevance reranker](https://www.vectara.com/blog/deep-dive-into-vectara-multilingual-reranker-v1-state-of-the-art-reranker-across-100-languages), [MMR](https://vectara.com/get-diverse-results-and-comprehensive-summaries-with-vectaras-mmr-reranker/), [UDF reranker](https://www.vectara.com/blog/rag-with-user-defined-functions-based-reranking). \n", + "6. An LLM to for creating a [generative summary](https://docs.vectara.com/docs/learn/grounded-generation/grounded-generation-overview), based on the retrieved documents (context), including citations.\n", "\n", "See the [Vectara API documentation](https://docs.vectara.com/docs/) for more information on how to use the API.\n", "\n", @@ -32,7 +32,7 @@ "# Getting Started\n", "\n", "To get started, use the following steps:\n", - "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara account. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", + "1. If you don't already have one, [Sign up](https://www.vectara.com/integrations/langchain) for your free Vectara trial. Once you have completed your sign up you will have a Vectara customer ID. You can find your customer ID by clicking on your name, on the top-right of the Vectara console window.\n", "2. Within your account you can create one or more corpora. Each corpus represents an area that stores text data upon ingest from input documents. To create a corpus, use the **\"Create Corpus\"** button. You then provide a name to your corpus as well as a description. Optionally you can define filtering attributes and apply some advanced options. If you click on your created corpus, you can see its name and corpus ID right on the top.\n", "3. Next you'll need to create API keys to access the corpus. Click on the **\"Access Control\"** tab in the corpus view and then the **\"Create API Key\"** button. Give your key a name, and choose whether you want query-only or query+index for your key. Click \"Create\" and you now have an active API key. Keep this key confidential. \n", "\n", diff --git a/libs/community/langchain_community/vectorstores/vectara.py b/libs/community/langchain_community/vectorstores/vectara.py index b71e7d12cff8b..7e77c6e69052c 100644 --- a/libs/community/langchain_community/vectorstores/vectara.py +++ b/libs/community/langchain_community/vectorstores/vectara.py @@ -22,6 +22,7 @@ MMR_RERANKER_ID = 272725718 RERANKER_MULTILINGUAL_V1_ID = 272725719 +UDF_RERANKER_ID = 272725722 @dataclass @@ -38,7 +39,7 @@ class SummaryConfig: is_enabled: bool = False max_results: int = 7 response_lang: str = "eng" - prompt_name: str = "vectara-summary-ext-v1.2.0" + prompt_name: str = "vectara-summary-ext-24-05-med-omni" stream: bool = False @@ -67,7 +68,7 @@ class MMRConfig: class RerankConfig: """Configuration for Reranker. - reranker: "mmr", "rerank_multilingual_v1" or "none" + reranker: "mmr", "rerank_multilingual_v1", "udf" or "none" rerank_k: number of results to fetch before reranking, defaults to 50 mmr_diversity_bias: for MMR only - a number between 0 and 1 that determines the degree of diversity among the results with 0 corresponding @@ -76,11 +77,13 @@ class RerankConfig: Note: mmr_diversity_bias is equivalent 1-lambda_mult where lambda_mult is the value often used in max_marginal_relevance_search() We chose to use that since we believe it's more intuitive to the user. + user_function: for UDF only - the user function to use for reranking. """ reranker: str = "none" rerank_k: int = 50 mmr_diversity_bias: float = 0.3 + user_function: str = "" @dataclass @@ -445,7 +448,7 @@ def _get_query_body( config.rerank_config.rerank_k if ( config.rerank_config.reranker - in ["mmr", "rerank_multilingual_v1"] + in ["mmr", "udf", "rerank_multilingual_v1"] ) else config.k ), @@ -473,6 +476,11 @@ def _get_query_body( "rerankerId": MMR_RERANKER_ID, "mmrConfig": {"diversityBias": config.rerank_config.mmr_diversity_bias}, } + elif config.rerank_config.reranker == "udf": + body["query"][0]["rerankingConfig"] = { + "rerankerId": UDF_RERANKER_ID, + "userFunction": config.rerank_config.user_function, + } elif config.rerank_config.reranker == "rerank_multilingual_v1": body["query"][0]["rerankingConfig"] = { "rerankerId": RERANKER_MULTILINGUAL_V1_ID, diff --git a/libs/community/tests/integration_tests/vectorstores/test_vectara.py b/libs/community/tests/integration_tests/vectorstores/test_vectara.py index d8f557bc6d1cb..958fda1087c84 100644 --- a/libs/community/tests/integration_tests/vectorstores/test_vectara.py +++ b/libs/community/tests/integration_tests/vectorstores/test_vectara.py @@ -22,7 +22,7 @@ # VECTARA_API_KEY, VECTARA_CORPUS_ID and VECTARA_CUSTOMER_ID # -test_prompt_name = "vectara-experimental-summary-ext-2023-12-11-sml" +test_prompt_name = "vectara-summary-ext-24-05-med-omni" def get_abbr(s: str) -> str: @@ -299,8 +299,36 @@ def test_vectara_with_langchain_mmr(vectara3: Vectara) -> None: # type: ignore[ ) -def test_vectara_mmr(vectara3: Vectara) -> None: # type: ignore[no-untyped-def] - # test MMR directly with rerank_config +def test_vectara_rerankers(vectara3: Vectara) -> None: # type: ignore[no-untyped-def] + # test Vectara multi-lingual reranker + summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang="eng") + rerank_config = RerankConfig(reranker="rerank_multilingual_v1", rerank_k=50) + config = VectaraQueryConfig( + k=10, + lambda_val=0.005, + rerank_config=rerank_config, + summary_config=summary_config, + ) + rag = vectara3.as_rag(config) + output1 = rag.invoke("what is generative AI?")["answer"] + assert len(output1) > 0 + + # test Vectara udf reranker + summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang="eng") + rerank_config = RerankConfig( + reranker="udf", rerank_k=50, user_function="get('$.score')" + ) + config = VectaraQueryConfig( + k=10, + lambda_val=0.005, + rerank_config=rerank_config, + summary_config=summary_config, + ) + rag = vectara3.as_rag(config) + output1 = rag.invoke("what is generative AI?")["answer"] + assert len(output1) > 0 + + # test Vectara MMR reranker summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang="eng") rerank_config = RerankConfig(reranker="mmr", rerank_k=50, mmr_diversity_bias=0.2) config = VectaraQueryConfig(