fix: fix import paths for several modules

feat: add logging for missing nodes in LangChainTypeCreator classes
feat: add support for custom TextLoader document loader
fix: fix typo in document loaders base module name
fix: fix typo in text_splitters package name and add __init__.py file

refactor(interface): rename textSplitters to text_splitters
refactor(interface): rename documentLoaders to document_loaders
refactor(interface): rename vectorStore to vectorstore
refactor(interface): rename toolkits to toolkit
refactor(interface): rename tools to tool
refactor(interface): rename prompts to prompt
refactor(interface): rename memories to memory
refactor(interface): rename embeddings to embedding
refactor(interface): rename wrappers to wrapper
fix(interface): fix typo in text_splitters/base.py
fix(interface): fix typo in toolkits/base.py
fix(interface): fix typo in vectorstore/base.py
fix(interface): fix typo in wrappers/base.py
feat(interface): add logging for when a type is not loaded
This commit is contained in:
Gabriel Almeida 2023-04-13 11:57:10 -03:00
commit c28e6ad62d
20 changed files with 59 additions and 18 deletions

View file

@ -18,16 +18,16 @@ from langflow.graph.nodes import (
) )
from langflow.interface.agents.base import agent_creator from langflow.interface.agents.base import agent_creator
from langflow.interface.chains.base import chain_creator from langflow.interface.chains.base import chain_creator
from langflow.interface.documentLoaders.base import documentloader_creator from langflow.interface.document_loaders.base import documentloader_creator
from langflow.interface.embeddings.base import embedding_creator from langflow.interface.embeddings.base import embedding_creator
from langflow.interface.llms.base import llm_creator from langflow.interface.llms.base import llm_creator
from langflow.interface.memories.base import memory_creator from langflow.interface.memories.base import memory_creator
from langflow.interface.prompts.base import prompt_creator from langflow.interface.prompts.base import prompt_creator
from langflow.interface.textSplitters.base import textsplitter_creator from langflow.interface.text_splitters.base import textsplitter_creator
from langflow.interface.toolkits.base import toolkits_creator from langflow.interface.toolkits.base import toolkits_creator
from langflow.interface.tools.base import tool_creator from langflow.interface.tools.base import tool_creator
from langflow.interface.tools.constants import FILE_TOOLS from langflow.interface.tools.constants import FILE_TOOLS
from langflow.interface.vectorStore.base import vectorstore_creator from langflow.interface.vectorstore.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator from langflow.interface.wrappers.base import wrapper_creator
from langflow.utils import payload from langflow.utils import payload

View file

@ -6,6 +6,7 @@ from langflow.custom.customs import get_custom_nodes
from langflow.interface.agents.custom import CUSTOM_AGENTS from langflow.interface.agents.custom import CUSTOM_AGENTS
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.logger import logger
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
@ -31,6 +32,8 @@ class AgentCreator(LangChainTypeCreator):
) )
except ValueError as exc: except ValueError as exc:
raise ValueError("Agent not found") from exc raise ValueError("Agent not found") from exc
except AttributeError as exc:
logger.error(f"Agent {name} not loaded: {exc}")
# Now this is a generator # Now this is a generator
def to_list(self) -> List[str]: def to_list(self) -> List[str]:

View file

@ -1,5 +1,6 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Type, Union from typing import Any, Dict, List, Optional, Type, Union
from langflow.utils.logger import logger
from pydantic import BaseModel from pydantic import BaseModel
@ -39,14 +40,18 @@ class LangChainTypeCreator(BaseModel, ABC):
# frontend_node.to_dict() returns a dict with the following structure: # frontend_node.to_dict() returns a dict with the following structure:
# {name: {template: {fields}, description: str}} # {name: {template: {fields}, description: str}}
# so we should update the result dict # so we should update the result dict
result[self.type_name].update(self.frontend_node(name).to_dict()) node = self.frontend_node(name)
if node is not None:
node = node.to_dict()
result[self.type_name].update(node)
return result return result
def frontend_node(self, name) -> FrontendNode: def frontend_node(self, name) -> Union[FrontendNode, None]:
signature = self.get_signature(name) signature = self.get_signature(name)
if signature is None: if signature is None:
raise ValueError(f"{name} not found") logger.error(f"Node {name} not loaded")
return
if isinstance(signature, FrontendNode): if isinstance(signature, FrontendNode):
return signature return signature
fields = [ fields = [

View file

@ -6,6 +6,7 @@ from langflow.interface.custom_lists import chain_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.template.nodes import ChainFrontendNode from langflow.template.nodes import ChainFrontendNode
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
# Assuming necessary imports for Field, Template, and FrontendNode classes # Assuming necessary imports for Field, Template, and FrontendNode classes
@ -39,6 +40,8 @@ class ChainCreator(LangChainTypeCreator):
return build_template_from_class(name, self.type_to_loader_dict) return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc: except ValueError as exc:
raise ValueError("Chain not found") from exc raise ValueError("Chain not found") from exc
except AttributeError as exc:
logger.error(f"Chain {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
custom_chains = list(get_custom_nodes("chains").keys()) custom_chains = list(get_custom_nodes("chains").keys())

View file

@ -2,9 +2,10 @@ from typing import Dict, List, Optional
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.interface.custom_lists import documentloaders_type_to_cls_dict from langflow.interface.custom_lists import documentloaders_type_to_cls_dict
from langflow.interface.documentLoaders.custom import CUSTOM_DOCUMENTLOADERS from langflow.interface.document_loaders.custom import CUSTOM_DOCUMENTLOADERS
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class DocumentLoaderCreator(LangChainTypeCreator): class DocumentLoaderCreator(LangChainTypeCreator):
@ -52,6 +53,8 @@ class DocumentLoaderCreator(LangChainTypeCreator):
return signature return signature
except ValueError as exc: except ValueError as exc:
raise ValueError(f"Documment Loader {name} not found") from exc raise ValueError(f"Documment Loader {name} not found") from exc
except AttributeError as exc:
logger.error(f"Documment Loader {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [

View file

@ -4,6 +4,7 @@ from langflow.interface.base import LangChainTypeCreator
from langflow.interface.custom_lists import embedding_type_to_cls_dict from langflow.interface.custom_lists import embedding_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class EmbeddingCreator(LangChainTypeCreator): class EmbeddingCreator(LangChainTypeCreator):
@ -20,6 +21,9 @@ class EmbeddingCreator(LangChainTypeCreator):
except ValueError as exc: except ValueError as exc:
raise ValueError(f"Embedding {name} not found") from exc raise ValueError(f"Embedding {name} not found") from exc
except AttributeError as exc:
logger.error(f"Embedding {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [
embedding.__name__ embedding.__name__

View file

@ -10,7 +10,7 @@ from langchain.chat_models.base import BaseChatModel
from langchain.llms.base import BaseLLM from langchain.llms.base import BaseLLM
from langchain.tools import BaseTool from langchain.tools import BaseTool
from langflow.interface.documentLoaders.custom import CUSTOM_DOCUMENTLOADERS from langflow.interface.document_loaders.custom import CUSTOM_DOCUMENTLOADERS
from langflow.interface.tools.util import get_tool_by_name from langflow.interface.tools.util import get_tool_by_name

View file

@ -1,14 +1,14 @@
from langflow.interface.agents.base import agent_creator from langflow.interface.agents.base import agent_creator
from langflow.interface.chains.base import chain_creator from langflow.interface.chains.base import chain_creator
from langflow.interface.documentLoaders.base import documentloader_creator from langflow.interface.document_loaders.base import documentloader_creator
from langflow.interface.embeddings.base import embedding_creator from langflow.interface.embeddings.base import embedding_creator
from langflow.interface.llms.base import llm_creator from langflow.interface.llms.base import llm_creator
from langflow.interface.memories.base import memory_creator from langflow.interface.memories.base import memory_creator
from langflow.interface.prompts.base import prompt_creator from langflow.interface.prompts.base import prompt_creator
from langflow.interface.textSplitters.base import textsplitter_creator from langflow.interface.text_splitters.base import textsplitter_creator
from langflow.interface.toolkits.base import toolkits_creator from langflow.interface.toolkits.base import toolkits_creator
from langflow.interface.tools.base import tool_creator from langflow.interface.tools.base import tool_creator
from langflow.interface.vectorStore.base import vectorstore_creator from langflow.interface.vectorstore.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator from langflow.interface.wrappers.base import wrapper_creator

View file

@ -5,6 +5,7 @@ from langflow.interface.custom_lists import llm_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.template.nodes import LLMFrontendNode from langflow.template.nodes import LLMFrontendNode
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class LLMCreator(LangChainTypeCreator): class LLMCreator(LangChainTypeCreator):
@ -27,6 +28,9 @@ class LLMCreator(LangChainTypeCreator):
except ValueError as exc: except ValueError as exc:
raise ValueError("LLM not found") from exc raise ValueError("LLM not found") from exc
except AttributeError as exc:
logger.error(f"LLM {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [
llm.__name__ llm.__name__

View file

@ -5,6 +5,7 @@ from langflow.interface.custom_lists import memory_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.template.base import FrontendNode from langflow.template.base import FrontendNode
from langflow.template.nodes import MemoryFrontendNode from langflow.template.nodes import MemoryFrontendNode
from langflow.utils.logger import logger
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
@ -28,6 +29,8 @@ class MemoryCreator(LangChainTypeCreator):
return build_template_from_class(name, memory_type_to_cls_dict) return build_template_from_class(name, memory_type_to_cls_dict)
except ValueError as exc: except ValueError as exc:
raise ValueError("Memory not found") from exc raise ValueError("Memory not found") from exc
except AttributeError as exc:
logger.error(f"Memory {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [

View file

@ -8,6 +8,7 @@ from langflow.interface.importing.utils import import_class
from langflow.settings import settings from langflow.settings import settings
from langflow.template.nodes import PromptFrontendNode from langflow.template.nodes import PromptFrontendNode
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class PromptCreator(LangChainTypeCreator): class PromptCreator(LangChainTypeCreator):
@ -43,7 +44,10 @@ class PromptCreator(LangChainTypeCreator):
return get_custom_nodes(self.type_name)[name] return get_custom_nodes(self.type_name)[name]
return build_template_from_class(name, self.type_to_loader_dict) return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc: except ValueError as exc:
raise ValueError("Prompt not found") from exc # raise ValueError("Prompt not found") from exc
logger.error(f"Prompt {name} not found: {exc}")
except AttributeError as exc:
logger.error(f"Prompt {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
custom_prompts = get_custom_nodes("prompts") custom_prompts = get_custom_nodes("prompts")

View file

@ -1,3 +0,0 @@
from langflow.interface.textSplitters.base import TextSplitterCreator
__all__ = ["TextSplitterCreator"]

View file

@ -0,0 +1,3 @@
from langflow.interface.text_splitters.base import TextSplitterCreator
__all__ = ["TextSplitterCreator"]

View file

@ -3,6 +3,7 @@ from typing import Dict, List, Optional
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.interface.custom_lists import textsplitter_type_to_cls_dict from langflow.interface.custom_lists import textsplitter_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.logger import logger
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
@ -28,6 +29,8 @@ class TextSplitterCreator(LangChainTypeCreator):
return signature return signature
except ValueError as exc: except ValueError as exc:
raise ValueError(f"Text Splitter {name} not found") from exc raise ValueError(f"Text Splitter {name} not found") from exc
except AttributeError as exc:
logger.error(f"Text Splitter {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [

View file

@ -6,6 +6,7 @@ from langflow.interface.base import LangChainTypeCreator
from langflow.interface.importing.utils import import_class, import_module from langflow.interface.importing.utils import import_class, import_module
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class ToolkitCreator(LangChainTypeCreator): class ToolkitCreator(LangChainTypeCreator):
@ -44,6 +45,8 @@ class ToolkitCreator(LangChainTypeCreator):
return build_template_from_class(name, self.type_to_loader_dict) return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc: except ValueError as exc:
raise ValueError("Prompt not found") from exc raise ValueError("Prompt not found") from exc
except AttributeError as exc:
logger.error(f"Prompt {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys()) return list(self.type_to_loader_dict.keys())

View file

@ -1,14 +1,14 @@
from langflow.interface.agents.base import agent_creator from langflow.interface.agents.base import agent_creator
from langflow.interface.chains.base import chain_creator from langflow.interface.chains.base import chain_creator
from langflow.interface.documentLoaders.base import documentloader_creator from langflow.interface.document_loaders.base import documentloader_creator
from langflow.interface.embeddings.base import embedding_creator from langflow.interface.embeddings.base import embedding_creator
from langflow.interface.llms.base import llm_creator from langflow.interface.llms.base import llm_creator
from langflow.interface.memories.base import memory_creator from langflow.interface.memories.base import memory_creator
from langflow.interface.prompts.base import prompt_creator from langflow.interface.prompts.base import prompt_creator
from langflow.interface.textSplitters.base import textsplitter_creator from langflow.interface.text_splitters.base import textsplitter_creator
from langflow.interface.toolkits.base import toolkits_creator from langflow.interface.toolkits.base import toolkits_creator
from langflow.interface.tools.base import tool_creator from langflow.interface.tools.base import tool_creator
from langflow.interface.vectorStore.base import vectorstore_creator from langflow.interface.vectorstore.base import vectorstore_creator
from langflow.interface.wrappers.base import wrapper_creator from langflow.interface.wrappers.base import wrapper_creator

View file

@ -4,6 +4,7 @@ from langflow.interface.base import LangChainTypeCreator
from langflow.interface.custom_lists import vectorstores_type_to_cls_dict from langflow.interface.custom_lists import vectorstores_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class VectorstoreCreator(LangChainTypeCreator): class VectorstoreCreator(LangChainTypeCreator):
@ -39,6 +40,8 @@ class VectorstoreCreator(LangChainTypeCreator):
except ValueError as exc: except ValueError as exc:
raise ValueError(f"Vector Store {name} not found") from exc raise ValueError(f"Vector Store {name} not found") from exc
except AttributeError as exc:
logger.error(f"Vector Store {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return [ return [

View file

@ -4,6 +4,7 @@ from langchain import requests
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
from langflow.utils.logger import logger
class WrapperCreator(LangChainTypeCreator): class WrapperCreator(LangChainTypeCreator):
@ -22,6 +23,8 @@ class WrapperCreator(LangChainTypeCreator):
return build_template_from_class(name, self.type_to_loader_dict) return build_template_from_class(name, self.type_to_loader_dict)
except ValueError as exc: except ValueError as exc:
raise ValueError("Wrapper not found") from exc raise ValueError("Wrapper not found") from exc
except AttributeError as exc:
logger.error(f"Wrapper {name} not loaded: {exc}")
def to_list(self) -> List[str]: def to_list(self) -> List[str]:
return list(self.type_to_loader_dict.keys()) return list(self.type_to_loader_dict.keys())