diff --git a/poetry.lock b/poetry.lock index f4e4ea748..d96a6ec36 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5008,6 +5008,19 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" +[[package]] +name = "pgvector" +version = "0.2.3" +description = "pgvector support for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pgvector-0.2.3-py2.py3-none-any.whl", hash = "sha256:9d53dc01138ecc7c9aca64e4680cfa9edf4c38f9cb8ed7098317871fdd211824"}, +] + +[package.dependencies] +numpy = "*" + [[package]] name = "pillow" version = "10.1.0" @@ -8909,4 +8922,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.11" -content-hash = "856876d1b3d9e11c74e0d68207e4a31634e83e8d6d1daf629fc5f29c9804f1a6" +content-hash = "b547f3825111dda53ecdd226cf6ddece5e7df1e06e77d65a258b21eb88629c27" diff --git a/pyproject.toml b/pyproject.toml index 0f36144c6..aec28f14c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -100,6 +100,7 @@ jq = "^1.6.0" boto3 = "^1.28.63" numexpr = "^2.8.6" qianfan = "0.0.5" +pgvector = "^0.2.3" [tool.poetry.group.dev.dependencies] types-redis = "^4.6.0.5" diff --git a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py index 364abf962..2df026b59 100644 --- a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py +++ b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py @@ -20,10 +20,11 @@ class ConversationalAgent(CustomComponent): def build_config(self): openai_function_models = [ - "gpt-3.5-turbo-0613", - "gpt-3.5-turbo-16k-0613", - "gpt-4-0613", - "gpt-4-32k-0613", + "gpt-4-1106-preview", + "gpt-3.5-turbo", + "gpt-3.5-turbo-16k", + "gpt-4", + "gpt-4-32k", ] return { "tools": {"is_list": True, "display_name": "Tools"}, diff --git a/src/backend/langflow/components/vectorstores/Redis.py b/src/backend/langflow/components/vectorstores/Redis.py new file mode 100644 index 000000000..f13428829 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/Redis.py @@ -0,0 +1,64 @@ +from typing import Optional +from langflow import CustomComponent + +from langchain.vectorstores.redis import Redis +from langchain.schema import Document +from langchain.vectorstores.base import VectorStore +from langchain.embeddings.base import Embeddings + + +class RedisComponent(CustomComponent): + """ + A custom component for implementing a Vector Store using Redis. + """ + + display_name: str = "Redis" + description: str = "Implementation of Vector Store using Redis" + documentation = "https://python.langchain.com/docs/integrations/vectorstores/redis" + beta = True + + def build_config(self): + """ + Builds the configuration for the component. + + Returns: + - dict: A dictionary containing the configuration options for the component. + """ + return { + "index_name": {"display_name": "Index Name", "value": "your_index"}, + "code": {"show": False, "display_name": "Code"}, + "documents": {"display_name": "Documents", "is_list": True}, + "embedding": {"display_name": "Embedding"}, + "redis_server_url": { + "display_name": "Redis Server Connection String", + "advanced": False, + }, + "redis_index_name": {"display_name": "Redis Index", "advanced": False}, + } + + def build( + self, + embedding: Embeddings, + redis_server_url: str, + redis_index_name: str, + documents: Optional[Document] = None, + ) -> VectorStore: + """ + Builds the Vector Store or BaseRetriever object. + + Args: + - embedding (Embeddings): The embeddings to use for the Vector Store. + - documents (Optional[Document]): The documents to use for the Vector Store. + - redis_index_name (str): The name of the Redis index. + - redis_server_url (str): The URL for the Redis server. + + Returns: + - VectorStore: The Vector Store object. + """ + + return Redis.from_documents( + documents=documents, # type: ignore + embedding=embedding, + redis_url=redis_server_url, + index_name=redis_index_name, + ) diff --git a/src/backend/langflow/components/vectorstores/pgvector.py b/src/backend/langflow/components/vectorstores/pgvector.py new file mode 100644 index 000000000..e57b31a79 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/pgvector.py @@ -0,0 +1,69 @@ +from typing import Optional +from langflow import CustomComponent + +from langchain.vectorstores.pgvector import PGVector +from langchain.schema import Document +from langchain.vectorstores.base import VectorStore +from langchain.embeddings.base import Embeddings + + +class PostgresqlVectorComponent(CustomComponent): + """ + A custom component for implementing a Vector Store using PostgreSQL. + """ + + display_name: str = "PGVector" + description: str = "Implementation of Vector Store using PostgreSQL" + documentation = ( + "https://python.langchain.com/docs/integrations/vectorstores/pgvector" + ) + beta = True + + def build_config(self): + """ + Builds the configuration for the component. + + Returns: + - dict: A dictionary containing the configuration options for the component. + """ + return { + "index_name": {"display_name": "Index Name", "value": "your_index"}, + "code": {"show": True, "display_name": "Code"}, + "documents": {"display_name": "Documents", "is_list": True}, + "embedding": {"display_name": "Embedding"}, + "pg_server_url": { + "display_name": "PostgreSQL Server Connection String", + "advanced": False, + }, + "collection_name": {"display_name": "Table", "advanced": False}, + } + + def build( + self, + embedding: Embeddings, + pg_server_url: str, + collection_name: str, + documents: Optional[Document] = None, + ) -> VectorStore: + """ + Builds the Vector Store or BaseRetriever object. + + Args: + - embedding (Embeddings): The embeddings to use for the Vector Store. + - documents (Optional[Document]): The documents to use for the Vector Store. + - collection_name (str): The name of the PG table. + - pg_server_url (str): The URL for the PG server. + + Returns: + - VectorStore: The Vector Store object. + """ + + try: + return PGVector.from_documents( + embedding=embedding, + documents=documents, + collection_name=collection_name, + connection_string=pg_server_url, + ) + except Exception as e: + raise RuntimeError(f"Failed to build PGVector: {e}") diff --git a/src/backend/langflow/utils/constants.py b/src/backend/langflow/utils/constants.py index f3671425c..283f44406 100644 --- a/src/backend/langflow/utils/constants.py +++ b/src/backend/langflow/utils/constants.py @@ -13,6 +13,7 @@ CHAT_OPENAI_MODELS = [ "gpt-3.5-turbo-16k", ] + ANTHROPIC_MODELS = [ # largest model, ideal for a wide range of more complex tasks. "claude-v1",