diff --git a/src/backend/langflow/config.yaml b/src/backend/langflow/config.yaml index 3922ed254..970e160be 100644 --- a/src/backend/langflow/config.yaml +++ b/src/backend/langflow/config.yaml @@ -37,10 +37,13 @@ toolkits: memories: - ConversationBufferMemory -embeddings: [] +embeddings: + - OpenAIEmbeddings -vectorstores: [] +vectorstores: + - Chroma -documentloaders: [] +documentloaders: + - TextLoader dev: false diff --git a/src/backend/langflow/graph/nodes.py b/src/backend/langflow/graph/nodes.py index b465e3817..4c7fa50a2 100644 --- a/src/backend/langflow/graph/nodes.py +++ b/src/backend/langflow/graph/nodes.py @@ -142,3 +142,33 @@ class WrapperNode(Node): self.params["headers"] = eval(self.params["headers"]) self._build() return deepcopy(self._built_object) + + +class DocumentLoaderNode(Node): + def __init__(self, data: Dict): + super().__init__(data, base_type="documentloaders") + + def build(self, force: bool = False) -> Any: + if not self._built or force: + self._build() + return deepcopy(self._built_object) + + +class EmbeddingNode(Node): + def __init__(self, data: Dict): + super().__init__(data, base_type="embeddings") + + def build(self, force: bool = False) -> Any: + if not self._built or force: + self._build() + return deepcopy(self._built_object) + + +class VectorStoreNode(Node): + def __init__(self, data: Dict): + super().__init__(data, base_type="vectorstores") + + def build(self, force: bool = False) -> Any: + if not self._built or force: + self._build() + return deepcopy(self._built_object) diff --git a/src/backend/langflow/interface/documentLoaders/__init__.py b/src/backend/langflow/interface/documentLoaders/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/interface/documentLoaders/base.py b/src/backend/langflow/interface/documentLoaders/base.py index 844820d7b..b16f31e9f 100644 --- a/src/backend/langflow/interface/documentLoaders/base.py +++ b/src/backend/langflow/interface/documentLoaders/base.py @@ -7,7 +7,7 @@ from langflow.utils.util import build_template_from_class class DocumentLoaderCreator(LangChainTypeCreator): - type_name: str = "documentloader" + type_name: str = "documentloaders" @property def type_to_loader_dict(self) -> Dict: @@ -16,7 +16,21 @@ class DocumentLoaderCreator(LangChainTypeCreator): def get_signature(self, name: str) -> Optional[Dict]: """Get the signature of a document loader.""" try: - return build_template_from_class(name, documentloaders_type_to_cls_dict) + signature = build_template_from_class( + name, documentloaders_type_to_cls_dict + ) + + signature["template"]["file"] = { + "type": "file", + "required": True, + "show": True, + "name": "path", + "value": "", + "suffixes": [".txt"], + "fileTypes": ["txt"], + } + + return signature except ValueError as exc: raise ValueError(f"Documment Loader {name} not found") from exc diff --git a/src/backend/langflow/interface/embeddings/__init__.py b/src/backend/langflow/interface/embeddings/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/interface/vectorStore/__init__.py b/src/backend/langflow/interface/vectorStore/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/interface/vectorStore/base.py b/src/backend/langflow/interface/vectorStore/base.py index 6c2baa86d..c8b42677f 100644 --- a/src/backend/langflow/interface/vectorStore/base.py +++ b/src/backend/langflow/interface/vectorStore/base.py @@ -7,7 +7,7 @@ from langflow.utils.util import build_template_from_class class VectorstoreCreator(LangChainTypeCreator): - type_name: str = "vectorstore" + type_name: str = "vectorstores" @property def type_to_loader_dict(self) -> Dict: @@ -16,7 +16,26 @@ class VectorstoreCreator(LangChainTypeCreator): def get_signature(self, name: str) -> Optional[Dict]: """Get the signature of an embedding.""" try: - return build_template_from_class(name, vectorstores_type_to_cls_dict) + signature = build_template_from_class(name, vectorstores_type_to_cls_dict) + + signature["template"] = { + "Document Loader": { + "type": "BaseLoader", + "required": True, + "show": True, + "name": "Document Loader", + "value": "", + }, + "Embedding": { + "type": "Embeddings", + "required": True, + "show": True, + "name": "Embedding", + "value": "", + }, + } + return signature + except ValueError as exc: raise ValueError(f"Vector Store {name} not found") from exc diff --git a/src/frontend/src/utils.ts b/src/frontend/src/utils.ts index dc59c6640..dcbbdf833 100644 --- a/src/frontend/src/utils.ts +++ b/src/frontend/src/utils.ts @@ -76,7 +76,9 @@ export const nodeColors: {[char: string]: string} = { advanced: "#000000", chat: "#454173", thought:"#272541", - docloaders:"#FF9135", + embeddings:"#FF9135", + documentloader:"#FF9135", + vectorstore: "#FF9135", unknown:"#9CA3AF" }; @@ -89,7 +91,9 @@ export const nodeNames:{[char: string]: string} = { memories: "Memories", advanced: "Advanced", chat: "Chat", - docloaders:"Document Loader", + embeddings: "Embeddings", + documentloader: "Document Loaders", + vectorstore: "Vector Stores", toolkits:"Toolkits", wrappers:"Wrappers", unknown:"Unknown" @@ -104,7 +108,9 @@ export const nodeIcons:{[char: string]: React.ForwardRefExoticComponent