diff --git a/src/backend/base/langflow/components/data/APIRequest.py b/src/backend/base/langflow/components/data/APIRequest.py index 4844e8f2d..d6e966494 100644 --- a/src/backend/base/langflow/components/data/APIRequest.py +++ b/src/backend/base/langflow/components/data/APIRequest.py @@ -10,11 +10,11 @@ from langflow.schema import Record class APIRequest(CustomComponent): display_name: str = "API Request" - description: str = "Make an HTTP request to the given URL." + description: str = "Make HTTP requests given one or more URLs." output_types: list[str] = ["Record"] documentation: str = "https://docs.langflow.org/components/utilities#api-request" field_config = { - "urls": {"display_name": "URLs", "info": "The URLs to make the request to."}, + "urls": {"display_name": "URLs", "info": "URLs to make requests to."}, "method": { "display_name": "Method", "info": "The HTTP method to use.", diff --git a/src/backend/base/langflow/components/data/Directory.py b/src/backend/base/langflow/components/data/Directory.py index fdca207a5..fe1944636 100644 --- a/src/backend/base/langflow/components/data/Directory.py +++ b/src/backend/base/langflow/components/data/Directory.py @@ -7,7 +7,7 @@ from langflow.schema import Record class DirectoryComponent(CustomComponent): display_name = "Directory" - description = "Load Text Files from a Directory and Convert Them to Records." + description = "Recursively load files from a directory." def build_config(self) -> Dict[str, Any]: return { diff --git a/src/backend/base/langflow/components/data/File.py b/src/backend/base/langflow/components/data/File.py index a71a8b30d..a130c4c53 100644 --- a/src/backend/base/langflow/components/data/File.py +++ b/src/backend/base/langflow/components/data/File.py @@ -8,7 +8,7 @@ from langflow.schema import Record class FileComponent(CustomComponent): display_name = "Files" - description = "Read Text Files" + description = "A generic file loader." def build_config(self) -> Dict[str, Any]: return { diff --git a/src/backend/base/langflow/components/data/FileLoader.py b/src/backend/base/langflow/components/data/FileLoader.py deleted file mode 100644 index 56432617e..000000000 --- a/src/backend/base/langflow/components/data/FileLoader.py +++ /dev/null @@ -1,117 +0,0 @@ -from typing import List - -from langflow.interface.custom.custom_component import CustomComponent -from langflow.schema import Record -from langflow.utils.constants import LOADERS_INFO - - -class FileLoaderComponent(CustomComponent): - display_name: str = "File Loader" - description: str = "Generic File Loader" - - def build_config(self): - loader_options = ["Automatic"] + [loader_info["name"] for loader_info in LOADERS_INFO] - - file_types = [] - suffixes = [] - - for loader_info in LOADERS_INFO: - if "allowedTypes" in loader_info: - file_types.extend(loader_info["allowedTypes"]) - suffixes.extend([f".{ext}" for ext in loader_info["allowedTypes"]]) - - return { - "file_path": { - "display_name": "File Path", - "required": True, - "field_type": "file", - "file_types": [ - "json", - "txt", - "csv", - "jsonl", - "html", - "htm", - "conllu", - "enex", - "msg", - "pdf", - "srt", - "eml", - "md", - "mdx", - "pptx", - "docx", - ], - "suffixes": [ - ".json", - ".txt", - ".csv", - ".jsonl", - ".html", - ".htm", - ".conllu", - ".enex", - ".msg", - ".pdf", - ".srt", - ".eml", - ".md", - ".mdx", - ".pptx", - ".docx", - ], - # "file_types" : file_types, - # "suffixes": suffixes, - }, - "loader": { - "display_name": "Loader", - "is_list": True, - "required": True, - "options": loader_options, - "value": "Automatic", - }, - "code": {"show": False}, - } - - def build(self, file_path: str, loader: str) -> List[Record]: - file_type = file_path.split(".")[-1] - - # Map the loader to the correct loader class - selected_loader_info = None - for loader_info in LOADERS_INFO: - if loader_info["name"] == loader: - selected_loader_info = loader_info - break - - if selected_loader_info is None and loader != "Automatic": - raise ValueError(f"Loader {loader} not found in the loader info list") - - if loader == "Automatic": - # Determine the loader based on the file type - default_loader_info = None - for info in LOADERS_INFO: - if "defaultFor" in info and file_type in info["defaultFor"]: - default_loader_info = info - break - - if default_loader_info is None: - raise ValueError(f"No default loader found for file type: {file_type}") - - selected_loader_info = default_loader_info - if isinstance(selected_loader_info, dict): - loader_import: str = selected_loader_info["import"] - else: - raise ValueError(f"Loader info for {loader} is not a dict\nLoader info:\n{selected_loader_info}") - module_name, class_name = loader_import.rsplit(".", 1) - - try: - # Import the loader class - loader_module = __import__(module_name, fromlist=[class_name]) - loader_instance = getattr(loader_module, class_name) - except ImportError as e: - raise ValueError(f"Loader {loader} could not be imported\nLoader info:\n{selected_loader_info}") from e - - result = loader_instance(file_path=file_path) - docs = result.load() - return self.to_records(docs) diff --git a/src/backend/base/langflow/components/data/URL.py b/src/backend/base/langflow/components/data/URL.py index a7397051d..c92a90c44 100644 --- a/src/backend/base/langflow/components/data/URL.py +++ b/src/backend/base/langflow/components/data/URL.py @@ -8,7 +8,7 @@ from langflow.schema import Record class URLComponent(CustomComponent): display_name = "URL" - description = "Load URLs and convert them to records." + description = "Fetch text content given one or more URLs." def build_config(self) -> Dict[str, Any]: return { @@ -22,4 +22,5 @@ class URLComponent(CustomComponent): loader = WebBaseLoader(web_paths=urls) docs = loader.load() records = self.to_records(docs) + self.status = records return records diff --git a/src/backend/base/langflow/components/inputs/JSONInput.py b/src/backend/base/langflow/components/inputs/JSONInput.py deleted file mode 100644 index 0306c2c61..000000000 --- a/src/backend/base/langflow/components/inputs/JSONInput.py +++ /dev/null @@ -1,30 +0,0 @@ -import ast -import json - -from langflow.custom import CustomComponent -from langflow.schema import Record - - -class JSONInputComponent(CustomComponent): - display_name = "JSON Input" - description = "Load a JSON object as input." - - def build_config(self): - return { - "json_str": { - "display_name": "JSON String", - "multiline": True, - "info": "The JSON string to load.", - } - } - - def build(self, json_str: str) -> Record: - try: - data = json.loads(json_str) - except json.JSONDecodeError: - try: - data = ast.literal_eval(json_str) - except (SyntaxError, ValueError): - raise ValueError("Invalid JSON string.") - record = Record(data=data) - return record