feat: Refactor langflow Components - Consolidate Imports, Remove Unused Components, and Update Astra Assistant Icons (#4460)

* fix lint

* fix lint

* [autofix.ci] apply automated fixes

* 📝 (message_to_data.py): refactor convert_message_to_data method to simplify code and improve readability
🔧 (conftest.py): update imports to organize them alphabetically for better code maintenance
🔧 (test_starter_projects.py): organize imports alphabetically for better code maintenance
🔧 (test_astra_component.py): organize imports alphabetically for better code maintenance
🔧 (test_parse_json_data.py): remove unnecessary whitespace for cleaner code
🔧 (test_chat_input.py): remove unnecessary whitespace for cleaner code
🔧 (test_text_input.py): remove unnecessary whitespace for cleaner code
🔧 (test_output_parser.py): remove unnecessary whitespace for cleaner code
🔧 (test_chat_output.py): remove unnecessary whitespace for cleaner code
🔧 (test_text_output.py): remove unnecessary whitespace for cleaner code
🔧 (test_prompt.py): remove unnecessary whitespace for cleaner code
🔧 (test_basic_prompting.py): remove unnecessary whitespace for cleaner code
🔧 (test_misc.py): remove unnecessary whitespace for cleaner code
🔧 (utils.py): remove unnecessary whitespace for cleaner code
🔧 (test_server_init.py): remove unnecessary whitespace for cleaner code
🔧 (test_endpoints.py): remove unnecessary whitespace for cleaner code
🔧 (test_component_toolkit.py): remove unnecessary whitespace for cleaner code
🔧 (test_agent_component.py): remove unnecessary whitespace for cleaner code
🔧 (test_agent_events.py): remove unnecessary whitespace for cleaner code
🔧 (test_tool_calling_agent.py): remove unnecessary whitespace for cleaner code
🔧 (test_structured_output_component.py): remove unnecessary whitespace for cleaner code
🔧 (test_chatollama_component.py): remove unnecessary whitespace for cleaner code

📝 (test_huggingface.py): Remove unnecessary import statement
📝 (test_create_data_component.py): Remove unnecessary import statement
📝 (test_update_data_component.py): Remove unnecessary import statement
📝 (test_componet_set_functionality.py): Remove unnecessary import statement
📝 (test_component.py): Remove unnecessary import statement
📝 (test_event_manager.py): Remove unnecessary import statement
📝 (test_edge_base.py): Remove unnecessary import statement
📝 (test_state_model.py): Remove unnecessary import statement
📝 (test_base.py): Remove unnecessary import statement
📝 (test_callback_graph.py): Remove unnecessary import statement
📝 (test_cycles.py): Remove unnecessary import statement
📝 (test_graph_state_model.py): Remove unnecessary import statement
📝 (test_runnable_vertices_manager.py): Remove unnecessary import statement
📝 (test_utils.py): Remove unnecessary import statement
📝 (test_graph.py): Remove unnecessary import statement
📝 (test_base_model_from_schema.py): Reorder import statements
📝 (test_memory_chatbot.py): Remove unnecessary import statement
📝 (test_vector_store_rag.py): Remove unnecessary import statement
📝 (test_inputs.py): Reorder import statements
📝 (test_io_schema.py): Remove unnecessary import statement
📝 (test_table_schema.py): Remove unnecessary import statement
📝 (test_schema_message.py): Remove unnecessary import statement
📝 (test_service.py): Reorder import statements
📝 (test_api_key.py): Remove unnecessary import statement
📝 (test_chat_endpoint.py): Remove unnecessary import statement
📝 (test_cli.py): Remove unnecessary import statement

📝 (test_custom_component.py): Add missing import statement in test_custom_component.py
📝 (test_custom_component_with_client.py): Add missing import statement in test_custom_component_with_client.py
📝 (test_data_class.py): Add missing import statement in test_data_class.py
📝 (test_data_components.py): Add missing import statement in test_data_components.py
📝 (test_database.py): Add missing import statement in test_database.py
📝 (test_endpoints.py): Add missing import statement in test_endpoints.py
📝 (test_files.py): Add missing import statement in test_files.py
📝 (test_frontend_nodes.py): Add missing import statement in test_frontend_nodes.py
📝 (test_initial_setup.py): Add missing import statement in test_initial_setup.py
📝 (test_kubernetes_secrets.py): Add missing import statement in test_kubernetes_secrets.py
📝 (test_logger.py): Add missing import statement in test_logger.py
📝 (test_login.py): Add missing import statement in test_login.py
📝 (test_messages.py): Add missing import statement in test_messages.py
📝 (test_messages_endpoints.py): Add missing import statement in test_messages_endpoints.py
📝 (test_schema.py): Add missing import statement in test_schema.py
📝 (test_telemetry.py): Add missing import statement in test_telemetry.py
📝 (test_template.py): Add missing import statement in test_template.py
📝 (test_user.py): Add missing import statement in test_user.py
📝 (test_validate_code.py): Add missing import statement in test_validate_code.py
📝 (test_connection_string_parser.py): Add missing import statement in test_connection_string_parser.py
📝 (test_format_directory_path.py): Add missing import statement in test_format_directory_path.py
📝 (test_rewrite_file_path.py): Add missing import statement in test_rewrite_file_path.py
📝 (test_truncate_long_strings.py): Add missing import statement in test_truncate_long_strings.py
📝 (test_truncate_long_strings_on_objects.py): Add missing import statement in test_truncate_long_strings_on_objects.py

* [autofix.ci] apply automated fixes

* formatting

* Update import paths for MemoryComponent and HuggingFaceEndpointsComponent

* fix tests

*  (decisionFlow.spec.ts): update test selectors to match changes in the application's UI for better test accuracy and reliability

* [autofix.ci] apply automated fixes

* ♻️ (test_output_parser.py): refactor import statements to improve code readability and maintainability

* fix tests

*  (Simple Agent.spec.ts): enable test for "Simple Agent" by removing the skip flag to ensure it runs properly

* [autofix.ci] apply automated fixes

* Remove optional type from 'num_news' field in YahooFinanceSchema

* Refactor JSON formatting for improved readability and maintainability across starter projects.

* adding icon to flows

* [autofix.ci] apply automated fixes

*  (similarity.spec.ts): update test selectors for filtering and connection nodes to match changes in the frontend implementation

* [autofix.ci] apply automated fixes

* removing init uncessary

* ⬆️ (pyproject.toml): upgrade crewai dependency to version 0.76.9 to include the latest features and bug fixes

*  (Simple Agent.spec.ts): update test assertion to check if the count of "print(" is greater than or equal to 1 for better test coverage.

* [autofix.ci] apply automated fixes

* proposed changes

* [autofix.ci] apply automated fixes

* add zep icon

* [autofix.ci] apply automated fixes

* 🔧 (model.py): remove unused import and method 'cast_vector_store' from LCVectorStoreComponent
🔧 (openai_tools.py): remove beta flag from OpenAIToolsAgentComponent
🔧 (tool_calling.py): remove beta flag from ToolCallingAgentComponent
🔧 (Vector Store RAG.json): remove 'cast_vector_store' method from starter projects
🔧 (styleUtils.ts): add missing icon 'WolframAlphaAPI' to nodeIconsLucide in styleUtils module

* add langwatch and mem0 icon

* change mem0 name to mem0ai

*  (filterSidebar.spec.ts): update test to use first() method to select the first element with the specified test ID
♻️ (filterSidebar.spec.ts): remove unnecessary code related to checking the checkbox state in the test
🔧 (generalBugs-shard-2.spec.ts): update test to select the correct element with the test ID "dataWebhook" instead of "dataWebhook Input"

* ♻️ (test_vector_store_rag.py): remove redundant code setting "vector_store" value in both ingestion_graph and rag_graph functions to improve code readability and maintainability

* [autofix.ci] apply automated fixes

* updating json test

* [autofix.ci] apply automated fixes

* ⬆️ (pyproject.toml): downgrade crewai dependency version from 0.76.9 to 0.74.2 to resolve compatibility issues

* 🐛 (generalBugs-shard-5.spec.ts): fix typo in test case for component name
🐛 (generalBugs-shard-9.spec.ts): update endX calculation to move 600 pixels to the right instead of 300
🐛 (generalBugs-shard-9.spec.ts): fix typo in test case for component name and update test steps to click "fit_view" button twice

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
This commit is contained in:
Cristhian Zanforlin Lousa 2024-11-11 16:30:05 -03:00 committed by GitHub
commit 29e484465c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
182 changed files with 7279 additions and 516 deletions

View file

@ -1,6 +1,6 @@
from abc import abstractmethod
from functools import wraps
from typing import TYPE_CHECKING, cast
from typing import TYPE_CHECKING
from loguru import logger
@ -64,11 +64,6 @@ class LCVectorStoreComponent(Component):
name="search_results",
method="search_documents",
),
Output(
display_name="Vector Store",
name="vector_store",
method="cast_vector_store",
),
]
def _validate_outputs(self) -> None:
@ -120,9 +115,6 @@ class LCVectorStoreComponent(Component):
self.status = data
return data
def cast_vector_store(self) -> VectorStore:
return cast(VectorStore, self.build_vector_store())
def build_base_retriever(self) -> Retriever: # type: ignore[type-var]
"""Builds the BaseRetriever object."""
if self._cached_vector_store is not None:

View file

@ -0,0 +1,19 @@
from .add_content_to_page import AddContentToPage
from .create_page import NotionPageCreator
from .list_database_properties import NotionDatabaseProperties
from .list_pages import NotionListPages
from .list_users import NotionUserList
from .page_content_viewer import NotionPageContent
from .search import NotionSearch
from .update_page_property import NotionPageUpdate
__all__ = [
"AddContentToPage",
"NotionPageCreator",
"NotionDatabaseProperties",
"NotionListPages",
"NotionUserList",
"NotionPageContent",
"NotionSearch",
"NotionPageUpdate",
]

View file

@ -1,42 +0,0 @@
from . import (
agents,
chains,
custom_component,
documentloaders,
embeddings,
helpers,
inputs,
link_extractors,
memories,
models,
outputs,
prompts,
prototypes,
retrievers,
textsplitters,
toolkits,
tools,
vectorstores,
)
__all__ = [
"agents",
"chains",
"documentloaders",
"embeddings",
"helpers",
"inputs",
"link_extractors",
"custom_component",
"memories",
"models",
"output_parsers",
"outputs",
"prompts",
"prototypes",
"retrievers",
"textsplitters",
"toolkits",
"tools",
"vectorstores",
]

View file

@ -1,29 +1,3 @@
from .crewai import CrewAIAgentComponent
from .csv import CSVAgentComponent
from .hierarchical_crew import HierarchicalCrewComponent
from .json import JsonAgentComponent
from .openai_tools import OpenAIToolsAgentComponent
from .openapi import OpenAPIAgentComponent
from .sequential_crew import SequentialCrewComponent
from .sequential_task import SequentialTaskAgentComponent
from .sql import SQLAgentComponent
from .tool_calling import ToolCallingAgentComponent
from .vector_store import VectorStoreAgentComponent
from .vector_store_router import VectorStoreRouterAgentComponent
from .xml import XMLAgentComponent
from .agent import AgentComponent
__all__ = [
"CSVAgentComponent",
"CrewAIAgentComponent",
"HierarchicalCrewComponent",
"JsonAgentComponent",
"OpenAIToolsAgentComponent",
"OpenAPIAgentComponent",
"SQLAgentComponent",
"SequentialCrewComponent",
"SequentialTaskAgentComponent",
"ToolCallingAgentComponent",
"VectorStoreAgentComponent",
"VectorStoreRouterAgentComponent",
"XMLAgentComponent",
]
__all__ = ["AgentComponent"]

View file

@ -2,9 +2,9 @@ from langchain_core.tools import StructuredTool
from langflow.base.agents.agent import LCToolsAgentComponent
from langflow.base.models.model_input_constants import ALL_PROVIDER_FIELDS, MODEL_PROVIDERS_DICT
from langflow.components.agents.tool_calling import ToolCallingAgentComponent
from langflow.components.helpers import CurrentDateComponent
from langflow.components.helpers.memory import MemoryComponent
from langflow.components.langchain_utilities.tool_calling import ToolCallingAgentComponent
from langflow.components.memories.memory import MemoryComponent
from langflow.io import BoolInput, DropdownInput, MultilineInput, Output
from langflow.schema.dotdict import dotdict
from langflow.schema.message import Message

View file

@ -1,32 +0,0 @@
from langchain.agents import AgentExecutor, create_vectorstore_agent
from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit
from langflow.base.agents.agent import LCAgentComponent
from langflow.inputs import HandleInput
class VectorStoreAgentComponent(LCAgentComponent):
display_name = "VectorStoreAgent"
description = "Construct an agent from a Vector Store."
name = "VectorStoreAgent"
legacy: bool = True
inputs = [
*LCAgentComponent._base_inputs,
HandleInput(
name="llm",
display_name="Language Model",
input_types=["LanguageModel"],
required=True,
),
HandleInput(
name="vectorstore",
display_name="Vector Store",
input_types=["VectorStoreInfo"],
required=True,
),
]
def build_agent(self) -> AgentExecutor:
toolkit = VectorStoreToolkit(vectorstore_info=self.vectorstore, llm=self.llm)
return create_vectorstore_agent(llm=self.llm, toolkit=toolkit, **self.get_agent_kwargs())

View file

@ -0,0 +1,13 @@
from .assemblyai_get_subtitles import AssemblyAIGetSubtitles
from .assemblyai_lemur import AssemblyAILeMUR
from .assemblyai_list_transcripts import AssemblyAIListTranscripts
from .assemblyai_poll_transcript import AssemblyAITranscriptionJobPoller
from .assemblyai_start_transcript import AssemblyAITranscriptionJobCreator
__all__ = [
"AssemblyAIGetSubtitles",
"AssemblyAILeMUR",
"AssemblyAIListTranscripts",
"AssemblyAITranscriptionJobPoller",
"AssemblyAITranscriptionJobCreator",
]

View file

@ -18,7 +18,7 @@ from langflow.template import Output
class AstraAssistantManager(ComponentWithCache):
display_name = "Astra Assistant Manager"
description = "Manages Assistant Interactions"
icon = "bot"
icon = "AstraDB"
inputs = [
StrInput(

View file

@ -8,7 +8,7 @@ from langflow.template import Output
class AssistantsCreateAssistant(ComponentWithCache):
icon = "bot"
icon = "AstraDB"
display_name = "Create Assistant"
description = "Creates an Assistant and returns it's id"

View file

@ -8,7 +8,7 @@ from langflow.template import Output
class AssistantsCreateThread(ComponentWithCache):
display_name = "Create Assistant Thread"
description = "Creates a thread and returns the thread id"
icon = "AstraDB"
inputs = [
MultilineInput(
name="env_set",

View file

@ -11,7 +11,7 @@ from langflow.template import Output
class Dotenv(Component):
display_name = "Dotenv"
description = "Load .env file into env vars"
icon = "AstraDB"
inputs = [
MultilineSecretInput(
name="dotenv_file_content",

View file

@ -8,7 +8,7 @@ from langflow.template import Output
class AssistantsGetAssistantName(ComponentWithCache):
display_name = "Get Assistant name"
description = "Assistant by id"
icon = "AstraDB"
inputs = [
StrInput(
name="assistant_id",

View file

@ -9,7 +9,7 @@ from langflow.template import Output
class GetEnvVar(Component):
display_name = "Get env var"
description = "Get env var"
icon = "code"
icon = "AstraDB"
inputs = [
StrInput(

View file

@ -7,7 +7,7 @@ from langflow.template.field.base import Output
class AssistantsListAssistants(ComponentWithCache):
display_name = "List Assistants"
description = "Returns a list of assistant id's"
icon = "AstraDB"
outputs = [
Output(display_name="Assistants", name="assistants", method="process_inputs"),
]

View file

@ -13,6 +13,7 @@ from langflow.template import Output
class AssistantsRun(ComponentWithCache):
display_name = "Run Assistant"
description = "Executes an Assistant Run against a thread"
icon = "AstraDB"
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)

View file

@ -1,13 +0,0 @@
from .conversation import ConversationChainComponent
from .llm_checker import LLMCheckerChainComponent
from .llm_math import LLMMathChainComponent
from .retrieval_qa import RetrievalQAComponent
from .sql_generator import SQLGeneratorComponent
__all__ = [
"ConversationChainComponent",
"LLMCheckerChainComponent",
"LLMMathChainComponent",
"RetrievalQAComponent",
"SQLGeneratorComponent",
]

View file

@ -0,0 +1,3 @@
from .cohere_rerank import CohereRerankComponent
__all__ = ["CohereRerankComponent"]

View file

@ -0,0 +1,3 @@
from .composio_api import ComposioAPIComponent
__all__ = ["ComposioAPIComponent"]

View file

@ -0,0 +1,3 @@
from .confluence import ConfluenceComponent
__all__ = ["ConfluenceComponent"]

View file

@ -0,0 +1,15 @@
from .crewai import CrewAIAgentComponent
from .hierarchical_crew import HierarchicalCrewComponent
from .hierarchical_task import HierarchicalTaskComponent
from .sequential_crew import SequentialCrewComponent
from .sequential_task import SequentialTaskComponent
from .sequential_task_agent import SequentialTaskAgentComponent
__all__ = [
"CrewAIAgentComponent",
"HierarchicalCrewComponent",
"HierarchicalTaskComponent",
"SequentialCrewComponent",
"SequentialTaskComponent",
"SequentialTaskAgentComponent",
]

View file

@ -1,7 +1,19 @@
from .api_request import APIRequestComponent
from .csv_to_data import CSVToDataComponent
from .directory import DirectoryComponent
from .file import FileComponent
from .json_to_data import JSONToDataComponent
from .sql_executor import SQLExecutorComponent
from .url import URLComponent
from .webhook import WebhookComponent
__all__ = ["APIRequestComponent", "DirectoryComponent", "FileComponent", "URLComponent", "WebhookComponent"]
__all__ = [
"APIRequestComponent",
"CSVToDataComponent",
"DirectoryComponent",
"FileComponent",
"SQLExecutorComponent",
"URLComponent",
"WebhookComponent",
"JSONToDataComponent",
]

View file

@ -9,7 +9,7 @@ from langflow.schema import Data
class JSONToDataComponent(Component):
display_name = "JSON to Data"
display_name = "Load JSON"
description = (
"Convert a JSON file, JSON from a file path, or a JSON string to a Data object or a list of Data objects"
)

View file

@ -6,14 +6,14 @@ from langflow.schema import Data
class WebhookComponent(Component):
display_name = "Webhook Input"
display_name = "Webhook"
description = "Defines a webhook input for the flow."
name = "Webhook"
inputs = [
MultilineInput(
name="data",
display_name="Data",
display_name="JSON Payload",
info="Use this field to quickly test the webhook component by providing a JSON payload.",
)
]

View file

@ -6,7 +6,6 @@ from .split_text import SplitTextComponent
from .sub_flow import SubFlowComponent
__all__ = [
"ConditionalRouterComponent",
"ExtractKeyFromDataComponent",
"FlowToolComponent",
"ListFlowsComponent",

View file

@ -1,5 +0,0 @@
from .confluence import ConfluenceComponent
from .git import GitLoaderComponent
from .unstructured import UnstructuredComponent
__all__ = ["ConfluenceComponent", "GitLoaderComponent", "UnstructuredComponent"]

View file

@ -5,8 +5,13 @@ from .azure_openai import AzureOpenAIEmbeddingsComponent
from .cohere import CohereEmbeddingsComponent
from .google_generative_ai import GoogleGenerativeAIEmbeddingsComponent
from .huggingface_inference_api import HuggingFaceInferenceAPIEmbeddingsComponent
from .lmstudioembeddings import LMStudioEmbeddingsComponent
from .mistral import MistralAIEmbeddingsComponent
from .nvidia import NVIDIAEmbeddingsComponent
from .ollama import OllamaEmbeddingsComponent
from .openai import OpenAIEmbeddingsComponent
from .similarity import EmbeddingSimilarityComponent
from .text_embedder import TextEmbedderComponent
from .vertexai import VertexAIEmbeddingsComponent
__all__ = [
@ -17,7 +22,12 @@ __all__ = [
"CohereEmbeddingsComponent",
"GoogleGenerativeAIEmbeddingsComponent",
"HuggingFaceInferenceAPIEmbeddingsComponent",
"LMStudioEmbeddingsComponent",
"MistralAIEmbeddingsComponent",
"NVIDIAEmbeddingsComponent",
"OllamaEmbeddingsComponent",
"OpenAIEmbeddingsComponent",
"EmbeddingSimilarityComponent",
"TextEmbedderComponent",
"VertexAIEmbeddingsComponent",
]

View file

@ -0,0 +1,4 @@
from .firecrawl_crawl_api import FirecrawlCrawlApi
from .firecrawl_scrape_api import FirecrawlScrapeApi
__all__ = ["FirecrawlCrawlApi", "FirecrawlScrapeApi"]

View file

@ -0,0 +1,3 @@
from .git import GitLoaderComponent
__all__ = ["GitLoaderComponent"]

View file

@ -0,0 +1,5 @@
from .gmail import GmailLoaderComponent
from .google_drive import GoogleDriveComponent
from .google_drive_search import GoogleDriveSearchComponent
__all__ = ["GmailLoaderComponent", "GoogleDriveComponent", "GoogleDriveSearchComponent"]

View file

@ -1,45 +1,15 @@
from .combine_text import CombineTextComponent
from .create_list import CreateListComponent
from .csv_to_data import CSVToDataComponent
from .current_date import CurrentDateComponent
from .data_conditional_router import DataConditionalRouterComponent
from .extract_key import ExtractDataKeyComponent
from .filter_data import FilterDataComponent
from .filter_data_values import DataFilterComponent
from .hierarchical_task import HierarchicalTaskComponent
from .id_generator import IDGeneratorComponent
from .json_to_data import JSONToDataComponent
from .memory import MemoryComponent
from .merge_data import MergeDataComponent
from .message_to_data import MessageToDataComponent
from .parse_data import ParseDataComponent
from .parse_json_data import ParseJSONDataComponent
from .sequential_task import SequentialTaskComponent
from .output_parser import OutputParserComponent
from .split_text import SplitTextComponent
from .store_message import StoreMessageComponent
from .structured_output import StructuredOutputComponent
__all__ = [
"CSVToDataComponent",
"CombineTextComponent",
"CreateListComponent",
"CurrentDateComponent",
"DataConditionalRouterComponent",
"DataFilterComponent",
"ExtractDataKeyComponent",
"FilterDataComponent",
"FilterDataComponent",
"HierarchicalTaskComponent",
"IDGeneratorComponent",
"IDGeneratorComponent",
"JSONToDataComponent",
"MemoryComponent",
"MergeDataComponent",
"MessageToDataComponent",
"ParseDataComponent",
"ParseJSONDataComponent",
"SequentialTaskComponent",
"OutputParserComponent",
"SplitTextComponent",
"StoreMessageComponent",
"StructuredOutputComponent",
]

View file

@ -9,6 +9,7 @@ class CreateListComponent(Component):
description = "Creates a list of texts."
icon = "list"
name = "CreateList"
legacy = True
inputs = [
StrInput(

View file

@ -16,6 +16,8 @@ class StructuredOutputComponent(Component):
"Transforms LLM responses into **structured data formats**. Ideal for extracting specific information "
"or creating consistent outputs."
)
icon = "braces"
inputs = [
HandleInput(
name="llm",

View file

@ -0,0 +1,57 @@
from .character import CharacterTextSplitterComponent
from .conversation import ConversationChainComponent
from .csv import CSVAgentComponent
from .html_link_extractor import HtmlLinkExtractorComponent
from .json import JsonAgentComponent
from .json_document_builder import JSONDocumentBuilder
from .langchain_hub import LangChainHubPromptComponent
from .language_recursive import LanguageRecursiveTextSplitterComponent
from .language_semantic import SemanticTextSplitterComponent
from .llm_checker import LLMCheckerChainComponent
from .llm_math import LLMMathChainComponent
from .natural_language import NaturalLanguageTextSplitterComponent
from .openai_tools import OpenAIToolsAgentComponent
from .openapi import OpenAPIAgentComponent
from .recursive_character import RecursiveCharacterTextSplitterComponent
from .retrieval_qa import RetrievalQAComponent
from .runnable_executor import RunnableExecComponent
from .self_query import SelfQueryRetrieverComponent
from .spider import SpiderTool
from .sql import SQLAgentComponent
from .sql_database import SQLDatabaseComponent
from .sql_generator import SQLGeneratorComponent
from .tool_calling import ToolCallingAgentComponent
from .vector_store import VectoStoreRetrieverComponent
from .vector_store_info import VectorStoreInfoComponent
from .vector_store_router import VectorStoreRouterAgentComponent
from .xml import XMLAgentComponent
__all__ = [
"CharacterTextSplitterComponent",
"ConversationChainComponent",
"CSVAgentComponent",
"HtmlLinkExtractorComponent",
"JSONDocumentBuilder",
"JsonAgentComponent",
"LangChainHubPromptComponent",
"LanguageRecursiveTextSplitterComponent",
"LLMCheckerChainComponent",
"LLMMathChainComponent",
"NaturalLanguageTextSplitterComponent",
"OpenAIToolsAgentComponent",
"OpenAPIAgentComponent",
"RecursiveCharacterTextSplitterComponent",
"RetrievalQAComponent",
"RunnableExecComponent",
"SelfQueryRetrieverComponent",
"SpiderTool",
"SQLAgentComponent",
"SQLDatabaseComponent",
"SQLGeneratorComponent",
"ToolCallingAgentComponent",
"VectoStoreRetrieverComponent",
"VectorStoreInfoComponent",
"VectorStoreRouterAgentComponent",
"XMLAgentComponent",
"SemanticTextSplitterComponent",
]

View file

@ -12,6 +12,7 @@ class CharacterTextSplitterComponent(LCTextSplitterComponent):
description = "Split text by number of characters."
documentation = "https://docs.langflow.org/components/text-splitters#charactertextsplitter"
name = "CharacterTextSplitter"
icon = "LangChain"
inputs = [
IntInput(

View file

@ -10,6 +10,7 @@ class ConversationChainComponent(LCChainComponent):
description = "Chain to have a conversation and load context from memory."
name = "ConversationChain"
legacy: bool = True
icon = "LangChain"
inputs = [
MultilineInput(

View file

@ -13,6 +13,7 @@ class CSVAgentComponent(LCAgentComponent):
description = "Construct a CSV agent from a CSV and tools."
documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv"
name = "CSVAgent"
icon = "LangChain"
inputs = [
*LCAgentComponent._base_inputs,

View file

@ -12,6 +12,7 @@ class HtmlLinkExtractorComponent(LCDocumentTransformerComponent):
description = "Extract hyperlinks from HTML content."
documentation = "https://python.langchain.com/v0.2/api_reference/community/graph_vectorstores/langchain_community.graph_vectorstores.extractors.html_link_extractor.HtmlLinkExtractor.html"
name = "HtmlLinkExtractor"
icon = "LangChain"
inputs = [
StrInput(name="kind", display_name="Kind of edge", value="hyperlink", required=False),

View file

@ -12,7 +12,7 @@ class LangChainHubPromptComponent(Component):
display_name: str = "LangChain Hub"
description: str = "Prompt Component that uses LangChain Hub prompts"
beta = True
icon = "prompts"
icon = "LangChain"
trace_type = "prompt"
name = "LangChain Hub Prompt"

View file

@ -11,6 +11,7 @@ class LanguageRecursiveTextSplitterComponent(LCTextSplitterComponent):
description: str = "Split text into chunks of a specified length based on language."
documentation: str = "https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter"
name = "LanguageRecursiveTextSplitter"
icon = "LangChain"
inputs = [
IntInput(

View file

@ -21,6 +21,7 @@ class SemanticTextSplitterComponent(LCTextSplitterComponent):
description: str = "Split text into semantically meaningful chunks using semantic similarity."
documentation = "https://python.langchain.com/docs/how_to/semantic-chunker/"
beta = True # this component is beta because it is imported from langchain_experimental
icon = "LangChain"
inputs = [
HandleInput(

View file

@ -11,7 +11,7 @@ class LLMCheckerChainComponent(LCChainComponent):
documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_checker"
name = "LLMCheckerChain"
legacy: bool = True
icon = "LangChain"
inputs = [
MultilineInput(
name="input_value",

View file

@ -12,7 +12,7 @@ class LLMMathChainComponent(LCChainComponent):
documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_math"
name = "LLMMathChain"
legacy: bool = True
icon = "LangChain"
inputs = [
MultilineInput(
name="input_value",

View file

@ -14,7 +14,7 @@ class NaturalLanguageTextSplitterComponent(LCTextSplitterComponent):
"https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/split_by_token/#nltk"
)
name = "NaturalLanguageTextSplitter"
icon = "LangChain"
inputs = [
IntInput(
name="chunk_size",

View file

@ -11,7 +11,6 @@ class OpenAIToolsAgentComponent(LCToolsAgentComponent):
display_name: str = "OpenAI Tools Agent"
description: str = "Agent that uses tools via openai-tools."
icon = "LangChain"
beta = True
name = "OpenAIToolsAgent"
inputs = [

View file

@ -15,7 +15,7 @@ class OpenAPIAgentComponent(LCAgentComponent):
display_name = "OpenAPI Agent"
description = "Agent to interact with OpenAPI API."
name = "OpenAPIAgent"
icon = "LangChain"
inputs = [
*LCAgentComponent._base_inputs,
HandleInput(name="llm", display_name="Language Model", input_types=["LanguageModel"], required=True),

View file

@ -12,6 +12,7 @@ class RecursiveCharacterTextSplitterComponent(LCTextSplitterComponent):
description: str = "Split text trying to keep all related text together."
documentation: str = "https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter"
name = "RecursiveCharacterTextSplitter"
icon = "LangChain"
inputs = [
IntInput(

View file

@ -10,7 +10,7 @@ class RetrievalQAComponent(LCChainComponent):
description = "Chain for question-answering querying sources from a retriever."
name = "RetrievalQA"
legacy: bool = True
icon = "LangChain"
inputs = [
MultilineInput(
name="input_value",

View file

@ -11,6 +11,7 @@ class RunnableExecComponent(Component):
display_name = "Runnable Executor"
name = "RunnableExecutor"
beta: bool = True
icon = "LangChain"
inputs = [
MessageTextInput(name="input_value", display_name="Input", required=True),

View file

@ -11,7 +11,7 @@ class SQLAgentComponent(LCAgentComponent):
display_name = "SQLAgent"
description = "Construct an SQL agent from an LLM and tools."
name = "SQLAgent"
icon = "LangChain"
inputs = [
*LCAgentComponent._base_inputs,
HandleInput(name="llm", display_name="Language Model", input_types=["LanguageModel"], required=True),

View file

@ -17,6 +17,7 @@ class SQLGeneratorComponent(LCChainComponent):
description = "Generate SQL from natural language."
name = "SQLGenerator"
legacy: bool = True
icon = "LangChain"
inputs = [
MultilineInput(

View file

@ -11,7 +11,6 @@ class ToolCallingAgentComponent(LCToolsAgentComponent):
display_name: str = "Tool Calling Agent"
description: str = "An agent designed to utilize various tools seamlessly within workflows."
icon = "LangChain"
beta = True
name = "ToolCallingAgent"
inputs = [

View file

@ -9,6 +9,7 @@ class VectoStoreRetrieverComponent(CustomComponent):
description = "A vector store retriever"
name = "VectorStoreRetriever"
legacy: bool = True
icon = "LangChain"
def build_config(self):
return {

View file

@ -10,6 +10,7 @@ class VectorStoreInfoComponent(Component):
description = "Information about a VectorStore"
name = "VectorStoreInfo"
legacy: bool = True
icon = "LangChain"
inputs = [
MessageTextInput(

View file

@ -1,5 +0,0 @@
from .html_link_extractor import HtmlLinkExtractorComponent
__all__ = [
"HtmlLinkExtractorComponent",
]

View file

@ -0,0 +1,19 @@
from .conditional_router import ConditionalRouterComponent
from .data_conditional_router import DataConditionalRouterComponent
from .flow_tool import FlowToolComponent
from .listen import ListenComponent
from .notify import NotifyComponent
from .pass_message import PassMessageComponent
from .run_flow import RunFlowComponent
from .sub_flow import SubFlowComponent
__all__ = [
"DataConditionalRouterComponent",
"FlowToolComponent",
"ListenComponent",
"NotifyComponent",
"RunFlowComponent",
"SubFlowComponent",
"ConditionalRouterComponent",
"PassMessageComponent",
]

View file

@ -4,10 +4,11 @@ from langflow.schema.message import Message
class ConditionalRouterComponent(Component):
display_name = "Conditional Router"
display_name = "If-Else"
description = "Routes an input message to a corresponding output based on text comparison."
icon = "equal"
icon = "split"
name = "ConditionalRouter"
legacy = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@ -16,7 +17,7 @@ class ConditionalRouterComponent(Component):
inputs = [
MessageTextInput(
name="input_text",
display_name="Input Text",
display_name="Text Input",
info="The primary text input for the operation.",
),
MessageTextInput(
@ -30,7 +31,6 @@ class ConditionalRouterComponent(Component):
options=["equals", "not equals", "contains", "starts with", "ends with"],
info="The operator to apply for comparing the texts.",
value="equals",
advanced=True,
),
BoolInput(
name="case_sensitive",
@ -43,6 +43,7 @@ class ConditionalRouterComponent(Component):
name="message",
display_name="Message",
info="The message to pass through either route.",
advanced=True,
),
IntInput(
name="max_iterations",
@ -61,8 +62,8 @@ class ConditionalRouterComponent(Component):
]
outputs = [
Output(display_name="True Route", name="true_result", method="true_response"),
Output(display_name="False Route", name="false_result", method="false_response"),
Output(display_name="True", name="true_result", method="true_response"),
Output(display_name="False", name="false_result", method="false_response"),
]
def _pre_run_setup(self):

View file

@ -6,11 +6,12 @@ from langflow.schema import Data, dotdict
class DataConditionalRouterComponent(Component):
display_name = "Data Conditional Router"
display_name = "Condition"
description = "Route Data object(s) based on a condition applied to a specified key, including boolean validation."
icon = "split"
beta = True
name = "DataConditionalRouter"
legacy = True
inputs = [
DataInput(
@ -26,14 +27,14 @@ class DataConditionalRouterComponent(Component):
),
DropdownInput(
name="operator",
display_name="Comparison Operator",
display_name="Operator",
options=["equals", "not equals", "contains", "starts with", "ends with", "boolean validator"],
info="The operator to apply for comparing the values. 'boolean validator' treats the value as a boolean.",
value="equals",
),
MessageTextInput(
name="compare_value",
display_name="Compare Value",
display_name="Match Text",
info="The value to compare against (not used for boolean validator)",
),
]

View file

@ -20,6 +20,7 @@ class FlowToolComponent(LCToolComponent):
trace_type = "tool"
name = "FlowTool"
beta = True
icon = "hammer"
def get_flow_names(self) -> list[str]:
flow_datas = self.list_flows()

View file

@ -7,6 +7,7 @@ class ListenComponent(CustomComponent):
description = "A component to listen for a notification."
name = "Listen"
beta: bool = True
icon = "Radio"
def build_config(self):
return {

View file

@ -16,6 +16,8 @@ class RunFlowComponent(Component):
description = "A component to run a flow."
name = "RunFlow"
beta: bool = True
legacy: bool = True
icon = "workflow"
def get_flow_names(self) -> list[str]:
flow_data = self.list_flows()

View file

@ -16,6 +16,7 @@ class SubFlowComponent(Component):
description = "Generates a Component from a Flow, with all of its inputs, and "
name = "SubFlow"
beta: bool = True
icon = "Workflow"
def get_flow_names(self) -> list[str]:
flow_data = self.list_flows()

View file

@ -0,0 +1,5 @@
from .mem0_chat_memory import Mem0MemoryComponent
__all__ = [
"Mem0MemoryComponent",
]

View file

@ -0,0 +1,15 @@
from .astra_db import AstraDBChatMemory
from .cassandra import CassandraChatMemory
from .memory import MemoryComponent
from .redis import RedisIndexChatMemory
from .store_message import StoreMessageComponent
from .zep import ZepChatMemory
__all__ = [
"AstraDBChatMemory",
"CassandraChatMemory",
"MemoryComponent",
"RedisIndexChatMemory",
"ZepChatMemory",
"StoreMessageComponent",
]

View file

@ -70,9 +70,8 @@ class MemoryComponent(Component):
]
outputs = [
Output(display_name="Messages (Data)", name="messages", method="retrieve_messages"),
Output(display_name="Messages (Text)", name="messages_text", method="retrieve_messages_as_text"),
Output(display_name="Memory", name="lc_memory", method="build_lc_memory"),
Output(display_name="Data", name="messages", method="retrieve_messages"),
Output(display_name="Text", name="messages_text", method="retrieve_messages_as_text"),
]
def retrieve_messages(self) -> Data:

View file

@ -7,6 +7,7 @@ class ZepChatMemory(LCChatMemoryComponent):
display_name = "Zep Chat Memory"
description = "Retrieves and store chat messages from Zep."
name = "ZepChatMemory"
icon = "ZepMemory"
inputs = [
MessageTextInput(name="url", display_name="Zep URL", info="URL of the Zep instance."),

View file

@ -5,7 +5,12 @@ from .azure_openai import AzureChatOpenAIComponent
from .baidu_qianfan_chat import QianfanChatEndpointComponent
from .cohere import CohereComponent
from .google_generative_ai import GoogleGenerativeAIComponent
from .groq import GroqModel
from .huggingface import HuggingFaceEndpointsComponent
from .lmstudiomodel import LMStudioModelComponent
from .maritalk import MaritalkModelComponent
from .mistral import MistralAIModelComponent
from .nvidia import NVIDIAModelComponent
from .ollama import ChatOllamaComponent
from .openai import OpenAIModelComponent
from .perplexity import PerplexityComponent
@ -20,9 +25,13 @@ __all__ = [
"ChatVertexAIComponent",
"CohereComponent",
"GoogleGenerativeAIComponent",
"GroqModel",
"HuggingFaceEndpointsComponent",
"LMStudioModelComponent",
"MaritalkModelComponent",
"MistralAIModelComponent",
"NVIDIAModelComponent",
"OpenAIModelComponent",
"PerplexityComponent",
"QianfanChatEndpointComponent",
"base",
]

View file

@ -0,0 +1,3 @@
from .nvidia_rerank import NvidiaRerankComponent
__all__ = ["NvidiaRerankComponent"]

View file

@ -1,3 +0,0 @@
from .output_parser import OutputParserComponent
__all__ = ["OutputParserComponent"]

View file

@ -0,0 +1,25 @@
from .combine_text import CombineTextComponent
from .create_data import CreateDataComponent
from .extract_key import ExtractDataKeyComponent
from .filter_data_values import DataFilterComponent
from .json_cleaner import JSONCleaner
from .merge_data import MergeDataComponent
from .message_to_data import MessageToDataComponent
from .parse_data import ParseDataComponent
from .parse_json_data import ParseJSONDataComponent
from .select_data import SelectDataComponent
from .update_data import UpdateDataComponent
__all__ = [
"CreateDataComponent",
"ExtractDataKeyComponent",
"DataFilterComponent",
"MergeDataComponent",
"MessageToDataComponent",
"ParseDataComponent",
"SelectDataComponent",
"UpdateDataComponent",
"ParseJSONDataComponent",
"JSONCleaner",
"CombineTextComponent",
]

Some files were not shown because too many files have changed in this diff Show more