feat: Add support for metadata filtering and namespaces for the Upstash Vector component (#3254)

* feat: add metadata filtering and namespace support for the upstash vector component

* docs: add upstash vector to the vectorstores doc

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
ytkimirti 2024-08-14 17:18:45 +03:00 committed by GitHub
commit ce17bd4e71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 53 additions and 3 deletions

View file

@ -472,6 +472,27 @@ Ensure the Supabase service key, URL, and table name are properly configured.
---
### Upstash Vector
`UpstashVector` searches a Upstash Vector Store for documents similar to the input. It has it's own embedding
model which can be used to search documents without needing an external embedding model.
**Parameters:**
- **Index URL:** The URL of the Upstash index.
- **Index Token:** The token for the Upstash index.
- **Text Key:** The key in the record to use as text.
- **Namespace:** The namespace name. A new namespace is created if not found. Leave empty for default namespace.
- **Search Query:** The search query.
- **Metadata Filter:** The metadata filter. Filters documents by metadata. Look at the [docs](https://upstash.com/docs/vector/features/filtering) for more information.
- **Embedding:** The embedding model used. To use Upstash's embeddings, don't provide an embedding.
- **Number of Results:** The number of results to return.
---
### Vectara {#b4e05230b62a47c792a89c5511af97ac}

View file

@ -4,7 +4,14 @@ from langchain_community.vectorstores import UpstashVectorStore
from langflow.base.vectorstores.model import LCVectorStoreComponent
from langflow.helpers.data import docs_to_data
from langflow.io import HandleInput, IntInput, StrInput, SecretStrInput, DataInput, MultilineInput
from langflow.io import (
HandleInput,
IntInput,
StrInput,
SecretStrInput,
DataInput,
MultilineInput,
)
from langflow.schema import Data
@ -16,9 +23,17 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
icon = "Upstash"
inputs = [
StrInput(name="index_url", display_name="Index URL", info="The URL of the Upstash index.", required=True),
StrInput(
name="index_url",
display_name="Index URL",
info="The URL of the Upstash index.",
required=True,
),
SecretStrInput(
name="index_token", display_name="Index Token", info="The token for the Upstash index.", required=True
name="index_token",
display_name="Index Token",
info="The token for the Upstash index.",
required=True,
),
StrInput(
name="text_key",
@ -27,7 +42,17 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
value="text",
advanced=True,
),
StrInput(
name="namespace",
display_name="Namespace",
info="Leave empty for default namespace.",
),
MultilineInput(name="search_query", display_name="Search Query"),
MultilineInput(
name="metadata_filter",
display_name="Metadata Filter",
info="Filters documents by metadata. Look at the documentation for more information.",
),
DataInput(
name="ingest_data",
display_name="Ingest Data",
@ -68,6 +93,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
text_key=self.text_key,
index_url=self.index_url,
index_token=self.index_token,
namespace=self.namespace,
)
upstash_vs.add_documents(documents)
else:
@ -77,6 +103,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
text_key=self.text_key,
index_url=self.index_url,
index_token=self.index_token,
namespace=self.namespace,
)
else:
upstash_vs = UpstashVectorStore(
@ -84,6 +111,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
text_key=self.text_key,
index_url=self.index_url,
index_token=self.index_token,
namespace=self.namespace,
)
return upstash_vs
@ -95,6 +123,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent):
docs = vector_store.similarity_search(
query=self.search_query,
k=self.number_of_results,
filter=self.metadata_filter,
)
data = docs_to_data(docs)