added add_extra_fields method to textsplitters

This commit is contained in:
Alexandre Henrique 2023-05-31 15:40:09 -03:00
commit cd2944bac6
5 changed files with 83 additions and 130 deletions

View file

@ -10,7 +10,6 @@ from langflow.utils.util import build_template_from_class
# Assuming necessary imports for Field, Template, and FrontendNode classes # Assuming necessary imports for Field, Template, and FrontendNode classes
class ChainCreator(LangChainTypeCreator): class ChainCreator(LangChainTypeCreator):
type_name: str = "chains" type_name: str = "chains"

View file

@ -1,30 +1,28 @@
from typing import Dict, List, Optional, Type from typing import Dict, List, Optional, Type
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.template.field.base import TemplateField
from langflow.template.frontend_node.documentloaders import DocumentLoaderFrontNode from langflow.template.frontend_node.documentloaders import DocumentLoaderFrontNode
from langflow.interface.custom_lists import documentloaders_type_to_cls_dict from langflow.interface.custom_lists import documentloaders_type_to_cls_dict
from langflow.settings import settings from langflow.settings import settings
from langflow.utils.logger import logger from langflow.utils.logger import logger
from langflow.utils.util import build_template_from_class from langflow.utils.util import build_template_from_class
class DocumentLoaderCreator(LangChainTypeCreator): class DocumentLoaderCreator(LangChainTypeCreator):
type_name: str = "documentloaders" type_name: str = "documentloaders"
@property @property
def frontend_node_class(self) -> Type[DocumentLoaderFrontNode]: def frontend_node_class(self) -> Type[DocumentLoaderFrontNode]:
return DocumentLoaderFrontNode return DocumentLoaderFrontNode
@property @property
def type_to_loader_dict(self) -> Dict: def type_to_loader_dict(self) -> Dict:
return documentloaders_type_to_cls_dict return documentloaders_type_to_cls_dict
def get_signature(self, name: str) -> Optional[Dict]: def get_signature(self, name: str) -> Optional[Dict]:
"""Get the signature of a document loader.""" """Get the signature of a document loader."""
try: try:
return build_template_from_class( return build_template_from_class(name, documentloaders_type_to_cls_dict)
name, documentloaders_type_to_cls_dict
)
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: except AttributeError as exc:

View file

@ -1,7 +1,7 @@
from typing import Dict, List, Optional, Type from typing import Dict, List, Optional, Type
from langflow.interface.base import LangChainTypeCreator from langflow.interface.base import LangChainTypeCreator
from langflow.template.frontend_node.textsplitters import VectorStoreFrontendNode from langflow.template.frontend_node.textsplitters import TextSplittersFrontendNode
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.logger import logger
@ -12,8 +12,8 @@ class TextSplitterCreator(LangChainTypeCreator):
type_name: str = "textsplitters" type_name: str = "textsplitters"
@property @property
def frontend_node_class(self) -> Type[VectorStoreFrontendNode]: def frontend_node_class(self) -> Type[TextSplittersFrontendNode]:
return VectorStoreFrontendNode return TextSplittersFrontendNode
@property @property
def type_to_loader_dict(self) -> Dict: def type_to_loader_dict(self) -> Dict:

View file

@ -1,49 +1,32 @@
from typing import Dict, List, Optional, Type
from langflow.template.field.base import TemplateField from langflow.template.field.base import TemplateField
from langflow.template.frontend_node.base import FrontendNode from langflow.template.frontend_node.base import FrontendNode
class DocumentLoaderFrontNode(FrontendNode):
class DocumentLoaderFrontNode(FrontendNode):
@staticmethod @staticmethod
def build_template(suffixes: list, fileTypes: list, name: str = "file_path" def build_template(
) -> TemplateField: suffixes: list, fileTypes: list, name: str = "file_path"
"""Build a template field for a document loader.""" ) -> TemplateField:
return TemplateField( """Build a template field for a document loader."""
field_type="file", return TemplateField(
required=True, field_type="file",
show=True, required=True,
name=name, show=True,
value="", name=name,
suffixes=suffixes, value="",
fileTypes=fileTypes, suffixes=suffixes,
) fileTypes=fileTypes,
)
file_path_templates = { file_path_templates = {
"AirbyteJSONLoader": build_template( "AirbyteJSONLoader": build_template(suffixes=[".json"], fileTypes=["json"]),
suffixes=[".json"], fileTypes=["json"] "CoNLLULoader": build_template(suffixes=[".csv"], fileTypes=["csv"]),
), "CSVLoader": build_template(suffixes=[".csv"], fileTypes=["csv"]),
"CoNLLULoader": build_template( "UnstructuredEmailLoader": build_template(suffixes=[".eml"], fileTypes=["eml"]),
suffixes=[".csv"], fileTypes=["csv"] "EverNoteLoader": build_template(suffixes=[".xml"], fileTypes=["xml"]),
), "FacebookChatLoader": build_template(suffixes=[".json"], fileTypes=["json"]),
"CSVLoader": build_template( "GutenbergLoader": build_template(suffixes=[".txt"], fileTypes=["txt"]),
suffixes=[".csv"], fileTypes=["csv"] "BSHTMLLoader": build_template(suffixes=[".html"], fileTypes=["html"]),
),
"UnstructuredEmailLoader": build_template(
suffixes=[".eml"], fileTypes=["eml"]
),
"EverNoteLoader": build_template(
suffixes=[".xml"], fileTypes=["xml"]
),
"FacebookChatLoader": build_template(
suffixes=[".json"], fileTypes=["json"]
),
"GutenbergLoader": build_template(
suffixes=[".txt"], fileTypes=["txt"]
),
"BSHTMLLoader": build_template(
suffixes=[".html"], fileTypes=["html"]
),
"UnstructuredHTMLLoader": build_template( "UnstructuredHTMLLoader": build_template(
suffixes=[".html"], fileTypes=["html"] suffixes=[".html"], fileTypes=["html"]
), ),
@ -54,28 +37,21 @@ class DocumentLoaderFrontNode(FrontendNode):
"UnstructuredMarkdownLoader": build_template( "UnstructuredMarkdownLoader": build_template(
suffixes=[".md"], fileTypes=["md"] suffixes=[".md"], fileTypes=["md"]
), ),
"PyPDFLoader": build_template( "PyPDFLoader": build_template(suffixes=[".pdf"], fileTypes=["pdf"]),
suffixes=[".pdf"], fileTypes=["pdf"]
),
"UnstructuredPowerPointLoader": build_template( "UnstructuredPowerPointLoader": build_template(
suffixes=[".pptx", ".ppt"], fileTypes=["pptx", "ppt"] suffixes=[".pptx", ".ppt"], fileTypes=["pptx", "ppt"]
), ),
"SRTLoader": build_template( "SRTLoader": build_template(suffixes=[".srt"], fileTypes=["srt"]),
suffixes=[".srt"], fileTypes=["srt"] "TelegramChatLoader": build_template(suffixes=[".json"], fileTypes=["json"]),
), "TextLoader": build_template(suffixes=[".txt"], fileTypes=["txt"]),
"TelegramChatLoader": build_template(
suffixes=[".json"], fileTypes=["json"]
),
"TextLoader": build_template(
suffixes=[".txt"], fileTypes=["txt"]
),
"UnstructuredWordDocumentLoader": build_template( "UnstructuredWordDocumentLoader": build_template(
suffixes=[".docx", ".doc"], fileTypes=["docx", "doc"] suffixes=[".docx", ".doc"], fileTypes=["docx", "doc"]
), ),
} }
def add_extra_fields(self) -> None: def add_extra_fields(self) -> None:
if self.template.type_name in self.file_path_templates: name = None
if self.template.type_name in self.file_path_templates:
self.template.add_field(self.file_path_templates[self.template.type_name]) self.template.add_field(self.file_path_templates[self.template.type_name])
elif self.template.type_name in { elif self.template.type_name in {
"WebBaseLoader", "WebBaseLoader",
@ -85,37 +61,19 @@ class DocumentLoaderFrontNode(FrontendNode):
"IFixitLoader", "IFixitLoader",
"IMSDbLoader", "IMSDbLoader",
}: }:
self.template.add_field( name = "web_path"
TemplateField(
field_type="str",
required=True,
show=True,
name="web_path",
value="",
display_name="Web Page",
)
)
elif self.template.type_name in {"GitbookLoader"}: elif self.template.type_name in {"GitbookLoader"}:
self.template.add_field( name = "web_page"
TemplateField(
field_type="str",
required=True,
show=True,
name="web_page",
value="",
display_name="Web Page",
)
)
elif self.template.type_name in {"ReadTheDocsLoader"}: elif self.template.type_name in {"ReadTheDocsLoader"}:
name = "path"
if name:
self.template.add_field( self.template.add_field(
TemplateField( TemplateField(
field_type="str", field_type="str",
required=True, required=True,
show=True, show=True,
name="path", name=name,
value="", value="",
display_name="Web Page", display_name="Web Page",
) )
) )

View file

@ -1,46 +1,44 @@
from typing import Dict, List, Optional, Type
from langflow.template.field.base import TemplateField from langflow.template.field.base import TemplateField
from langflow.template.frontend_node.base import FrontendNode from langflow.template.frontend_node.base import FrontendNode
class VectorStoreFrontendNode(FrontendNode):
class TextSplittersFrontendNode(FrontendNode):
def add_extra_fields(self) -> None: def add_extra_fields(self) -> None:
pass self.template.add_field(
TemplateField(
""" field_type="BaseLoader",
signature["template"]["documents"] = { required=True,
"type": "BaseLoader", show=True,
"required": True, name="documents",
"show": True, )
"name": "documents", )
} self.template.add_field(
TemplateField(
signature["template"]["separator"] = { field_type="str",
"type": "str", required=True,
"required": True, show=True,
"show": True, value=".",
"value": ".", name="separator",
"name": "separator", display_name="Separator",
"display_name": "Separator", )
} )
self.template.add_field(
signature["template"]["chunk_size"] = { TemplateField(
"type": "int", field_type="int",
"required": True, required=True,
"show": True, show=True,
"value": 4000, value=1000,
"name": "chunk_size", name="chunk_size",
"display_name": "Chunk Size", display_name="Chunk Size",
} )
)
signature["template"]["chunk_overlap"] = { self.template.add_field(
"type": "int", TemplateField(
"required": True, field_type="int",
"show": True, required=True,
"value": 200, show=True,
"name": "chunk_overlap", value=200,
"display_name": "Chunk Overlap", name="chunk_overlap",
} display_name="Chunk Overlap",
""" )
)