From 17b730b6cfd9130b444bf126153e89792152a54c Mon Sep 17 00:00:00 2001 From: Lucas Oliveira <62335616+lucaseduoli@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:55:01 -0300 Subject: [PATCH] fix: update node logic (#2515) * Fixed bug where updating the node does not remove edited status * Fixed order of edited override * Made all node-changing functions to alter type the right way * Update StoreMessageComponent for enhanced message handling - Changed base class from CustomComponent to Component - Added multiple input fields: message, sender, sender_name, session_id - Included output field for stored messages - Improved logic to handle both string and Message types - Enhanced error handling and validation for message storage * Apply Ruff formatting * Update StoreMessageComponent for enhanced message handling * Apply Ruff formatting * Feat: add more types * Format code * feat: Add CreateListComponent for creating a list of texts This commit adds a new component called CreateListComponent, which is responsible for creating a list of texts. The component takes in one or more texts as input and outputs a list of Data objects. This component is useful for scenarios where a list of texts needs to be processed or manipulated. The CreateListComponent class is added to the helpers module in the langflow.components package. It includes the necessary inputs and outputs, as well as a create_list method that generates the list of Data objects based on the input texts. This commit also includes some minor changes to other files, such as renaming the UUIDGeneratorComponent to IDGeneratorComponent and updating import statements. * [autofix.ci] apply automated fixes * Changed native categories to use the keys of the style utils categories, which is updated * change component name * chore: add the name attribute to the CustomComponent * chore: assign the value of name to the components * chore: change the logic of the type value returned * chore: extract code to new func * chore: change component_name value * [autofix.ci] apply automated fixes * Formatted files --------- Co-authored-by: Rodrigo Co-authored-by: rodrigosnader Co-authored-by: igorrCarvalho Co-authored-by: anovazzi1 Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: italojohnny --- src/backend/base/langflow/api/v1/endpoints.py | 6 +++-- .../langflow/components/agents/CSVAgent.py | 1 + .../langflow/components/agents/JsonAgent.py | 1 + .../langflow/components/agents/SQLAgent.py | 1 + .../components/agents/ToolCallingAgent.py | 1 + .../components/agents/VectorStoreAgent.py | 1 + .../agents/VectorStoreRouterAgent.py | 1 + .../langflow/components/agents/XMLAgent.py | 1 + .../components/chains/ConversationChain.py | 1 + .../langflow/components/chains/LLMChain.py | 1 + .../components/chains/LLMCheckerChain.py | 1 + .../components/chains/LLMMathChain.py | 1 + .../langflow/components/chains/RetrievalQA.py | 1 + .../chains/RetrievalQAWithSourcesChain.py | 1 + .../components/chains/SQLGenerator.py | 1 + .../langflow/components/data/APIRequest.py | 1 + .../langflow/components/data/Directory.py | 1 + .../base/langflow/components/data/File.py | 1 + .../base/langflow/components/data/URL.py | 1 + .../base/langflow/components/data/Webhook.py | 1 + .../components/deactivated/AgentComponent.py | 1 + .../deactivated/CodeBlockExtractor.py | 1 + .../components/deactivated/DocumentsToData.py | 1 + .../langflow/components/deactivated/Embed.py | 1 + .../deactivated/ExtractKeyFromData.py | 1 + .../components/deactivated/ListFlows.py | 1 + .../components/deactivated/MergeData.py | 1 + .../components/deactivated/Message.py | 1 + .../deactivated/SelectivePassThrough.py | 1 + .../components/deactivated/ShouldRunNext.py | 1 + .../components/deactivated/SplitText.py | 1 + .../components/deactivated/StoreMessage.py | 1 + .../components/deactivated/SubFlow.py | 1 + .../embeddings/AmazonBedrockEmbeddings.py | 1 + .../components/embeddings/AstraVectorize.py | 1 + .../embeddings/AzureOpenAIEmbeddings.py | 1 + .../components/embeddings/CohereEmbeddings.py | 2 ++ .../embeddings/HuggingFaceEmbeddings.py | 1 + .../HuggingFaceInferenceAPIEmbeddings.py | 1 + .../embeddings/MistalAIEmbeddings.py | 1 + .../components/embeddings/OllamaEmbeddings.py | 1 + .../components/embeddings/OpenAIEmbeddings.py | 2 ++ .../embeddings/VertexAIEmbeddings.py | 1 + .../components/helpers/CombineText.py | 1 + .../langflow/components/helpers/CreateList.py | 1 + .../components/helpers/CustomComponent.py | 1 + .../langflow/components/helpers/FilterData.py | 1 + .../components/helpers/IDGenerator.py | 1 + .../langflow/components/helpers/Memory.py | 1 + .../langflow/components/helpers/MergeData.py | 1 + .../langflow/components/helpers/ParseData.py | 1 + .../langflow/components/helpers/SplitText.py | 1 + .../components/helpers/StoreMessage.py | 1 + .../langflow/components/inputs/ChatInput.py | 1 + .../langflow/components/inputs/TextInput.py | 1 + .../BingSearchAPIWrapper.py | 1 + .../langchain_utilities/FirecrawlCrawlApi.py | 2 ++ .../langchain_utilities/FirecrawlScrapeApi.py | 2 ++ .../GoogleSearchAPIWrapper.py | 1 + .../GoogleSerperAPIWrapper.py | 1 + .../JSONDocumentBuilder.py | 2 ++ .../langchain_utilities/SQLDatabase.py | 1 + .../langchain_utilities/SearchApi.py | 2 ++ .../langchain_utilities/SearxSearchWrapper.py | 1 + .../langchain_utilities/SerpAPIWrapper.py | 1 + .../WikipediaAPIWrapper.py | 1 + .../WolframAlphaAPIWrapper.py | 1 + .../memories/AstraDBMessageReader.py | 1 + .../memories/AstraDBMessageWriter.py | 1 + .../memories/CassandraMessageReader.py | 1 + .../memories/CassandraMessageWriter.py | 1 + .../components/memories/ZepMessageReader.py | 1 + .../components/memories/ZepMessageWriter.py | 1 + .../components/models/AmazonBedrockModel.py | 1 + .../components/models/AnthropicModel.py | 1 + .../components/models/AzureOpenAIModel.py | 1 + .../models/BaiduQianfanChatModel.py | 1 + .../langflow/components/models/CohereModel.py | 1 + .../models/GoogleGenerativeAIModel.py | 1 + .../langflow/components/models/GroqModel.py | 1 + .../components/models/HuggingFaceModel.py | 1 + .../components/models/MistralModel.py | 1 + .../langflow/components/models/OllamaModel.py | 1 + .../langflow/components/models/OpenAIModel.py | 1 + .../components/models/VertexAiModel.py | 1 + .../langflow/components/outputs/ChatOutput.py | 1 + .../langflow/components/outputs/TextOutput.py | 1 + .../langflow/components/prompts/Prompt.py | 1 + .../prototypes/ConditionalRouter.py | 1 + .../components/prototypes/CreateData.py | 1 + .../components/prototypes/FlowTool.py | 1 + .../langflow/components/prototypes/Listen.py | 1 + .../langflow/components/prototypes/Notify.py | 1 + .../langflow/components/prototypes/Pass.py | 1 + .../components/prototypes/PythonFunction.py | 1 + .../langflow/components/prototypes/RunFlow.py | 1 + .../components/prototypes/RunnableExecutor.py | 1 + .../components/prototypes/SQLExecutor.py | 1 + .../langflow/components/prototypes/SubFlow.py | 1 + .../components/prototypes/UpdateData.py | 1 + .../components/retrievers/AmazonKendra.py | 1 + .../components/retrievers/CohereRerank.py | 1 + .../components/retrievers/MetalRetriever.py | 1 + .../retrievers/MultiQueryRetriever.py | 1 + .../retrievers/SelfQueryRetriever.py | 1 + .../retrievers/VectaraSelfQueryRetriver.py | 1 + .../retrievers/VectorStoreRetriever.py | 1 + .../textsplitters/CharacterTextSplitter.py | 1 + .../LanguageRecursiveTextSplitter.py | 1 + .../RecursiveCharacterTextSplitter.py | 1 + .../components/toolkits/JsonToolkit.py | 1 + .../langflow/components/toolkits/Metaphor.py | 1 + .../components/toolkits/OpenAPIToolkit.py | 1 + .../components/toolkits/VectorStoreInfo.py | 1 + .../toolkits/VectorStoreRouterToolkit.py | 1 + .../components/toolkits/VectorStoreToolkit.py | 1 + .../tools/PythonCodeStructuredTool.py | 1 + .../components/tools/PythonREPLTool.py | 1 + .../components/tools/RetrieverTool.py | 1 + .../components/tools/SearchAPITool.py | 1 + .../langflow/components/tools/SearchApi.py | 2 ++ .../components/vectorstores/AstraDB.py | 1 + .../components/vectorstores/Cassandra.py | 1 + .../components/vectorstores/Chroma.py | 1 + .../components/vectorstores/Couchbase.py | 1 + .../langflow/components/vectorstores/FAISS.py | 1 + .../vectorstores/MongoDBAtlasVector.py | 1 + .../components/vectorstores/Pinecone.py | 1 + .../components/vectorstores/Qdrant.py | 1 + .../langflow/components/vectorstores/Redis.py | 1 + .../vectorstores/SupabaseVectorStore.py | 1 + .../components/vectorstores/Upstash.py | 1 + .../components/vectorstores/Vectara.py | 1 + .../components/vectorstores/Weaviate.py | 1 + .../components/vectorstores/pgvector.py | 1 + .../custom_component/custom_component.py | 3 +++ src/backend/base/langflow/custom/utils.py | 17 +++++++++----- .../components/parameterComponent/index.tsx | 8 +++++-- .../hooks/use-check-code-validity.tsx | 4 ++-- .../hooks/use-handle-node-class.tsx | 2 +- .../hooks/use-update-node-code.tsx | 3 +-- src/frontend/src/constants/constants.ts | 22 +------------------ .../components/nodeToolbarComponent/index.tsx | 10 ++++++++- 143 files changed, 179 insertions(+), 37 deletions(-) diff --git a/src/backend/base/langflow/api/v1/endpoints.py b/src/backend/base/langflow/api/v1/endpoints.py index 35a8f6637..05b637060 100644 --- a/src/backend/base/langflow/api/v1/endpoints.py +++ b/src/backend/base/langflow/api/v1/endpoints.py @@ -22,7 +22,7 @@ from langflow.api.v1.schemas import ( UploadFileResponse, ) from langflow.custom.custom_component.component import Component -from langflow.custom.utils import build_custom_component_template +from langflow.custom.utils import build_custom_component_template, get_instance_name from langflow.graph.graph.base import Graph from langflow.graph.schema import RunOutputs from langflow.helpers.flow import get_flow_by_id_or_endpoint_name @@ -519,7 +519,9 @@ async def custom_component( built_frontend_node, component_instance = build_custom_component_template(component, user_id=user.id) if raw_code.frontend_node is not None: built_frontend_node = component_instance.post_code_processing(built_frontend_node, raw_code.frontend_node) - return CustomComponentResponse(data=built_frontend_node, type=component_instance.__class__.__name__) + + _type = get_instance_name(component_instance) + return CustomComponentResponse(data=built_frontend_node, type=_type) @router.post("/custom_component/update", status_code=HTTPStatus.OK) diff --git a/src/backend/base/langflow/components/agents/CSVAgent.py b/src/backend/base/langflow/components/agents/CSVAgent.py index 21b285de2..b33604570 100644 --- a/src/backend/base/langflow/components/agents/CSVAgent.py +++ b/src/backend/base/langflow/components/agents/CSVAgent.py @@ -8,6 +8,7 @@ class CSVAgentComponent(CustomComponent): display_name = "CSVAgent" description = "Construct a CSV agent from a CSV and tools." documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv" + name = "CSVAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/agents/JsonAgent.py b/src/backend/base/langflow/components/agents/JsonAgent.py index cadc684f8..3746e989d 100644 --- a/src/backend/base/langflow/components/agents/JsonAgent.py +++ b/src/backend/base/langflow/components/agents/JsonAgent.py @@ -9,6 +9,7 @@ from langflow.field_typing import LanguageModel class JsonAgentComponent(CustomComponent): display_name = "JsonAgent" description = "Construct a json agent from an LLM and tools." + name = "JsonAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/agents/SQLAgent.py b/src/backend/base/langflow/components/agents/SQLAgent.py index 4f2a8e89e..ddc6f49c6 100644 --- a/src/backend/base/langflow/components/agents/SQLAgent.py +++ b/src/backend/base/langflow/components/agents/SQLAgent.py @@ -12,6 +12,7 @@ from langflow.field_typing import LanguageModel class SQLAgentComponent(CustomComponent): display_name = "SQLAgent" description = "Construct an SQL agent from an LLM and tools." + name = "SQLAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/agents/ToolCallingAgent.py b/src/backend/base/langflow/components/agents/ToolCallingAgent.py index 7f390e8be..c08c97ca5 100644 --- a/src/backend/base/langflow/components/agents/ToolCallingAgent.py +++ b/src/backend/base/langflow/components/agents/ToolCallingAgent.py @@ -15,6 +15,7 @@ class ToolCallingAgentComponent(Component): description: str = "Agent that uses tools. Only models that are compatible with function calling are supported." icon = "LangChain" beta = True + name = "ToolCallingAgent" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/agents/VectorStoreAgent.py b/src/backend/base/langflow/components/agents/VectorStoreAgent.py index 2bb324e50..1d3a5e890 100644 --- a/src/backend/base/langflow/components/agents/VectorStoreAgent.py +++ b/src/backend/base/langflow/components/agents/VectorStoreAgent.py @@ -10,6 +10,7 @@ from langflow.field_typing import LanguageModel class VectorStoreAgentComponent(CustomComponent): display_name = "VectorStoreAgent" description = "Construct an agent from a Vector Store." + name = "VectorStoreAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/agents/VectorStoreRouterAgent.py b/src/backend/base/langflow/components/agents/VectorStoreRouterAgent.py index a696a19c2..7750b2e01 100644 --- a/src/backend/base/langflow/components/agents/VectorStoreRouterAgent.py +++ b/src/backend/base/langflow/components/agents/VectorStoreRouterAgent.py @@ -10,6 +10,7 @@ from langflow.custom import CustomComponent class VectorStoreRouterAgentComponent(CustomComponent): display_name = "VectorStoreRouterAgent" description = "Construct an agent from a Vector Store Router." + name = "VectorStoreRouterAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/agents/XMLAgent.py b/src/backend/base/langflow/components/agents/XMLAgent.py index b0a9b1873..7972f8dfb 100644 --- a/src/backend/base/langflow/components/agents/XMLAgent.py +++ b/src/backend/base/langflow/components/agents/XMLAgent.py @@ -11,6 +11,7 @@ from langflow.schema import Data class XMLAgentComponent(LCAgentComponent): display_name = "XMLAgent" description = "Construct an XML agent from an LLM and tools." + name = "XMLAgent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/ConversationChain.py b/src/backend/base/langflow/components/chains/ConversationChain.py index a400d4993..f4a6e1b39 100644 --- a/src/backend/base/langflow/components/chains/ConversationChain.py +++ b/src/backend/base/langflow/components/chains/ConversationChain.py @@ -9,6 +9,7 @@ from langflow.field_typing import BaseMemory, LanguageModel, Text class ConversationChainComponent(CustomComponent): display_name = "ConversationChain" description = "Chain to have a conversation and load context from memory." + name = "ConversationChain" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/LLMChain.py b/src/backend/base/langflow/components/chains/LLMChain.py index b0f6913bf..d0f0c0975 100644 --- a/src/backend/base/langflow/components/chains/LLMChain.py +++ b/src/backend/base/langflow/components/chains/LLMChain.py @@ -10,6 +10,7 @@ from langflow.field_typing import BaseMemory, LanguageModel, Text class LLMChainComponent(CustomComponent): display_name = "LLMChain" description = "Chain to run queries against LLMs" + name = "LLMChain" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/LLMCheckerChain.py b/src/backend/base/langflow/components/chains/LLMCheckerChain.py index 63bf5613c..080a8d7dd 100644 --- a/src/backend/base/langflow/components/chains/LLMCheckerChain.py +++ b/src/backend/base/langflow/components/chains/LLMCheckerChain.py @@ -8,6 +8,7 @@ class LLMCheckerChainComponent(CustomComponent): display_name = "LLMCheckerChain" description = "" documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_checker" + name = "LLMCheckerChain" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/LLMMathChain.py b/src/backend/base/langflow/components/chains/LLMMathChain.py index 795b8ee08..b23ad6350 100644 --- a/src/backend/base/langflow/components/chains/LLMMathChain.py +++ b/src/backend/base/langflow/components/chains/LLMMathChain.py @@ -10,6 +10,7 @@ class LLMMathChainComponent(CustomComponent): display_name = "LLMMathChain" description = "Chain that interprets a prompt and executes python code to do math." documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_math" + name = "LLMMathChain" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/RetrievalQA.py b/src/backend/base/langflow/components/chains/RetrievalQA.py index 295a03bfb..a15b35853 100644 --- a/src/backend/base/langflow/components/chains/RetrievalQA.py +++ b/src/backend/base/langflow/components/chains/RetrievalQA.py @@ -11,6 +11,7 @@ from langflow.schema import Data class RetrievalQAComponent(CustomComponent): display_name = "Retrieval QA" description = "Chain for question-answering against an index." + name = "RetrievalQA" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/RetrievalQAWithSourcesChain.py b/src/backend/base/langflow/components/chains/RetrievalQAWithSourcesChain.py index fee16beae..41efb1cc9 100644 --- a/src/backend/base/langflow/components/chains/RetrievalQAWithSourcesChain.py +++ b/src/backend/base/langflow/components/chains/RetrievalQAWithSourcesChain.py @@ -10,6 +10,7 @@ from langflow.field_typing import BaseMemory, BaseRetriever, LanguageModel, Text class RetrievalQAWithSourcesChainComponent(CustomComponent): display_name = "RetrievalQAWithSourcesChain" description = "Question-answering with sources over an index." + name = "RetrievalQAWithSourcesChain" def build_config(self): return { diff --git a/src/backend/base/langflow/components/chains/SQLGenerator.py b/src/backend/base/langflow/components/chains/SQLGenerator.py index dc085c46e..b81b59470 100644 --- a/src/backend/base/langflow/components/chains/SQLGenerator.py +++ b/src/backend/base/langflow/components/chains/SQLGenerator.py @@ -12,6 +12,7 @@ from langflow.field_typing import LanguageModel, Text class SQLGeneratorComponent(CustomComponent): display_name = "Natural Language to SQL" description = "Generate SQL from natural language." + name = "SQLGenerator" def build_config(self): return { diff --git a/src/backend/base/langflow/components/data/APIRequest.py b/src/backend/base/langflow/components/data/APIRequest.py index e92dc210e..a7908ae21 100644 --- a/src/backend/base/langflow/components/data/APIRequest.py +++ b/src/backend/base/langflow/components/data/APIRequest.py @@ -22,6 +22,7 @@ class APIRequestComponent(Component): "**Note:** Check advanced options for more settings." ) icon = "Globe" + name = "APIRequest" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/data/Directory.py b/src/backend/base/langflow/components/data/Directory.py index 267869ebb..1c1e82890 100644 --- a/src/backend/base/langflow/components/data/Directory.py +++ b/src/backend/base/langflow/components/data/Directory.py @@ -11,6 +11,7 @@ class DirectoryComponent(Component): display_name = "Directory" description = "Recursively load files from a directory." icon = "folder" + name = "Directory" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/data/File.py b/src/backend/base/langflow/components/data/File.py index a0a4385e6..f36c1846e 100644 --- a/src/backend/base/langflow/components/data/File.py +++ b/src/backend/base/langflow/components/data/File.py @@ -10,6 +10,7 @@ class FileComponent(Component): display_name = "File" description = "A generic file loader." icon = "file-text" + name = "File" inputs = [ FileInput( diff --git a/src/backend/base/langflow/components/data/URL.py b/src/backend/base/langflow/components/data/URL.py index c475cc635..f4e3c0643 100644 --- a/src/backend/base/langflow/components/data/URL.py +++ b/src/backend/base/langflow/components/data/URL.py @@ -11,6 +11,7 @@ class URLComponent(Component): display_name = "URL" description = "Fetch content from one or more URLs." icon = "layout-template" + name = "URL" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/data/Webhook.py b/src/backend/base/langflow/components/data/Webhook.py index 67e188f6e..e02367332 100644 --- a/src/backend/base/langflow/components/data/Webhook.py +++ b/src/backend/base/langflow/components/data/Webhook.py @@ -8,6 +8,7 @@ from langflow.schema import Data class WebhookComponent(Component): display_name = "Webhook Input" description = "Defines a webhook input for the flow." + name = "Webhook" inputs = [ MultilineInput( diff --git a/src/backend/base/langflow/components/deactivated/AgentComponent.py b/src/backend/base/langflow/components/deactivated/AgentComponent.py index 117b9e676..a89213fea 100644 --- a/src/backend/base/langflow/components/deactivated/AgentComponent.py +++ b/src/backend/base/langflow/components/deactivated/AgentComponent.py @@ -23,6 +23,7 @@ class AgentComponent(LCAgentComponent): "memory", "input_value", ] + name = "AgentComponent" def build_config(self): return { diff --git a/src/backend/base/langflow/components/deactivated/CodeBlockExtractor.py b/src/backend/base/langflow/components/deactivated/CodeBlockExtractor.py index 316ed8a95..f1383fc8a 100644 --- a/src/backend/base/langflow/components/deactivated/CodeBlockExtractor.py +++ b/src/backend/base/langflow/components/deactivated/CodeBlockExtractor.py @@ -7,6 +7,7 @@ from langflow.field_typing import Input, Output, Text class CodeBlockExtractor(Component): display_name = "Code Block Extractor" description = "Extracts code block from text." + name = "CodeBlockExtractor" inputs = [Input(name="text", field_type=Text, description="Text to extract code blocks from.")] diff --git a/src/backend/base/langflow/components/deactivated/DocumentsToData.py b/src/backend/base/langflow/components/deactivated/DocumentsToData.py index 13111db59..3d0f65970 100644 --- a/src/backend/base/langflow/components/deactivated/DocumentsToData.py +++ b/src/backend/base/langflow/components/deactivated/DocumentsToData.py @@ -10,6 +10,7 @@ class DocumentsToDataComponent(CustomComponent): display_name = "Documents ⇢ Data" description = "Convert LangChain Documents into Data." icon = "LangChain" + name = "DocumentsToData" field_config = { "documents": {"display_name": "Documents"}, diff --git a/src/backend/base/langflow/components/deactivated/Embed.py b/src/backend/base/langflow/components/deactivated/Embed.py index a67c6c4cf..dee38e234 100644 --- a/src/backend/base/langflow/components/deactivated/Embed.py +++ b/src/backend/base/langflow/components/deactivated/Embed.py @@ -5,6 +5,7 @@ from langflow.schema import Data class EmbedComponent(CustomComponent): display_name = "Embed Texts" + name = "Embed" def build_config(self): return {"texts": {"display_name": "Texts"}, "embbedings": {"display_name": "Embeddings"}} diff --git a/src/backend/base/langflow/components/deactivated/ExtractKeyFromData.py b/src/backend/base/langflow/components/deactivated/ExtractKeyFromData.py index a8ca78262..01f7abd00 100644 --- a/src/backend/base/langflow/components/deactivated/ExtractKeyFromData.py +++ b/src/backend/base/langflow/components/deactivated/ExtractKeyFromData.py @@ -6,6 +6,7 @@ class ExtractKeyFromDataComponent(CustomComponent): display_name = "Extract Key From Data" description = "Extracts a key from a data." beta: bool = True + name = "ExtractKeyFromData" field_config = { "data": {"display_name": "Data"}, diff --git a/src/backend/base/langflow/components/deactivated/ListFlows.py b/src/backend/base/langflow/components/deactivated/ListFlows.py index 38fb2b967..fa46839a2 100644 --- a/src/backend/base/langflow/components/deactivated/ListFlows.py +++ b/src/backend/base/langflow/components/deactivated/ListFlows.py @@ -9,6 +9,7 @@ class ListFlowsComponent(CustomComponent): description = "A component to list all available flows." icon = "ListFlows" beta: bool = True + name = "ListFlows" def build_config(self): return {} diff --git a/src/backend/base/langflow/components/deactivated/MergeData.py b/src/backend/base/langflow/components/deactivated/MergeData.py index 51dfc4a6a..3d2ac582c 100644 --- a/src/backend/base/langflow/components/deactivated/MergeData.py +++ b/src/backend/base/langflow/components/deactivated/MergeData.py @@ -6,6 +6,7 @@ class MergeDataComponent(CustomComponent): display_name = "Merge Data" description = "Merges data." beta: bool = True + name = "MergeData" field_config = { "data": {"display_name": "Data"}, diff --git a/src/backend/base/langflow/components/deactivated/Message.py b/src/backend/base/langflow/components/deactivated/Message.py index 9fdd8a0da..b5eecf19d 100644 --- a/src/backend/base/langflow/components/deactivated/Message.py +++ b/src/backend/base/langflow/components/deactivated/Message.py @@ -7,6 +7,7 @@ from langflow.schema.message import Message class MessageComponent(CustomComponent): display_name = "Message" description = "Creates a Message object given a Session ID." + name = "Message" def build_config(self): return { diff --git a/src/backend/base/langflow/components/deactivated/SelectivePassThrough.py b/src/backend/base/langflow/components/deactivated/SelectivePassThrough.py index 605b54dfe..4a3341895 100644 --- a/src/backend/base/langflow/components/deactivated/SelectivePassThrough.py +++ b/src/backend/base/langflow/components/deactivated/SelectivePassThrough.py @@ -7,6 +7,7 @@ class SelectivePassThroughComponent(Component): display_name = "Selective Pass Through" description = "Passes the specified value if a specified condition is met." icon = "filter" + name = "SelectivePassThrough" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/deactivated/ShouldRunNext.py b/src/backend/base/langflow/components/deactivated/ShouldRunNext.py index 7ca5651a7..5723c1486 100644 --- a/src/backend/base/langflow/components/deactivated/ShouldRunNext.py +++ b/src/backend/base/langflow/components/deactivated/ShouldRunNext.py @@ -8,6 +8,7 @@ from langflow.field_typing import LanguageModel, Text class ShouldRunNextComponent(CustomComponent): display_name = "Should Run Next" description = "Determines if a vertex is runnable." + name = "ShouldRunNext" def build(self, llm: LanguageModel, question: str, context: str, retries: int = 3) -> Text: template = "Given the following question and the context below, answer with a yes or no.\n\n{error_message}\n\nQuestion: {question}\n\nContext: {context}\n\nAnswer:" diff --git a/src/backend/base/langflow/components/deactivated/SplitText.py b/src/backend/base/langflow/components/deactivated/SplitText.py index f3529baf3..88f911057 100644 --- a/src/backend/base/langflow/components/deactivated/SplitText.py +++ b/src/backend/base/langflow/components/deactivated/SplitText.py @@ -12,6 +12,7 @@ class SplitTextComponent(Component): display_name: str = "Split Text" description: str = "Split text into chunks based on specified criteria." icon = "scissors-line-dashed" + name = "SplitText" inputs = [ HandleInput( diff --git a/src/backend/base/langflow/components/deactivated/StoreMessage.py b/src/backend/base/langflow/components/deactivated/StoreMessage.py index 5d0abfbb9..64a770aea 100644 --- a/src/backend/base/langflow/components/deactivated/StoreMessage.py +++ b/src/backend/base/langflow/components/deactivated/StoreMessage.py @@ -6,6 +6,7 @@ from langflow.schema.message import Message class StoreMessageComponent(CustomComponent): display_name = "Store Message" description = "Stores a chat message." + name = "StoreMessage" def build_config(self): return { diff --git a/src/backend/base/langflow/components/deactivated/SubFlow.py b/src/backend/base/langflow/components/deactivated/SubFlow.py index b0631ee99..6207e85f0 100644 --- a/src/backend/base/langflow/components/deactivated/SubFlow.py +++ b/src/backend/base/langflow/components/deactivated/SubFlow.py @@ -19,6 +19,7 @@ class SubFlowComponent(CustomComponent): ) beta: bool = True field_order = ["flow_name"] + name = "SubFlow" def get_flow_names(self) -> List[str]: flow_datas = self.list_flows() diff --git a/src/backend/base/langflow/components/embeddings/AmazonBedrockEmbeddings.py b/src/backend/base/langflow/components/embeddings/AmazonBedrockEmbeddings.py index 9578bedc5..5e91e801a 100644 --- a/src/backend/base/langflow/components/embeddings/AmazonBedrockEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/AmazonBedrockEmbeddings.py @@ -10,6 +10,7 @@ class AmazonBedrockEmbeddingsComponent(LCModelComponent): description: str = "Generate embeddings using Amazon Bedrock models." documentation = "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock" icon = "Amazon" + name = "AmazonBedrockEmbeddings" inputs = [ DropdownInput( diff --git a/src/backend/base/langflow/components/embeddings/AstraVectorize.py b/src/backend/base/langflow/components/embeddings/AstraVectorize.py index cd618f346..7b3feab31 100644 --- a/src/backend/base/langflow/components/embeddings/AstraVectorize.py +++ b/src/backend/base/langflow/components/embeddings/AstraVectorize.py @@ -9,6 +9,7 @@ class AstraVectorize(Component): description: str = "Configuration options for Astra Vectorize server-side embeddings." documentation: str = "https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html" icon = "AstraDB" + name = "AstraVectorize" VECTORIZE_PROVIDERS_MAPPING = { "Azure OpenAI": ["azureOpenAI", ["text-embedding-3-small", "text-embedding-3-large", "text-embedding-ada-002"]], diff --git a/src/backend/base/langflow/components/embeddings/AzureOpenAIEmbeddings.py b/src/backend/base/langflow/components/embeddings/AzureOpenAIEmbeddings.py index c838b328e..e206074a6 100644 --- a/src/backend/base/langflow/components/embeddings/AzureOpenAIEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/AzureOpenAIEmbeddings.py @@ -11,6 +11,7 @@ class AzureOpenAIEmbeddingsComponent(LCModelComponent): description: str = "Generate embeddings using Azure OpenAI models." documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/azureopenai" icon = "Azure" + name = "AzureOpenAIEmbeddings" API_VERSION_OPTIONS = [ "2022-12-01", diff --git a/src/backend/base/langflow/components/embeddings/CohereEmbeddings.py b/src/backend/base/langflow/components/embeddings/CohereEmbeddings.py index 80967becf..6c7256338 100644 --- a/src/backend/base/langflow/components/embeddings/CohereEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/CohereEmbeddings.py @@ -9,6 +9,8 @@ class CohereEmbeddingsComponent(LCModelComponent): display_name = "Cohere Embeddings" description = "Generate embeddings using Cohere models." icon = "Cohere" + name = "CohereEmbeddings" + inputs = [ SecretStrInput(name="cohere_api_key", display_name="Cohere API Key"), DropdownInput( diff --git a/src/backend/base/langflow/components/embeddings/HuggingFaceEmbeddings.py b/src/backend/base/langflow/components/embeddings/HuggingFaceEmbeddings.py index fda48b2a3..bf2bdfd0f 100644 --- a/src/backend/base/langflow/components/embeddings/HuggingFaceEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/HuggingFaceEmbeddings.py @@ -12,6 +12,7 @@ class HuggingFaceEmbeddingsComponent(LCModelComponent): "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers" ) icon = "HuggingFace" + name = "HuggingFaceEmbeddings" inputs = [ MessageTextInput(name="cache_folder", display_name="Cache Folder", advanced=True), diff --git a/src/backend/base/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py b/src/backend/base/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py index 215ba9442..54b6c312c 100644 --- a/src/backend/base/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py @@ -11,6 +11,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(LCModelComponent): description = "Generate embeddings using Hugging Face Inference API models." documentation = "https://github.com/huggingface/text-embeddings-inference" icon = "HuggingFace" + name = "HuggingFaceInferenceAPIEmbeddings" inputs = [ SecretStrInput(name="api_key", display_name="API Key", advanced=True), diff --git a/src/backend/base/langflow/components/embeddings/MistalAIEmbeddings.py b/src/backend/base/langflow/components/embeddings/MistalAIEmbeddings.py index 39e63c53c..f46a81f96 100644 --- a/src/backend/base/langflow/components/embeddings/MistalAIEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/MistalAIEmbeddings.py @@ -10,6 +10,7 @@ class MistralAIEmbeddingsComponent(LCModelComponent): display_name = "MistralAI Embeddings" description = "Generate embeddings using MistralAI models." icon = "MistralAI" + name = "MistalAIEmbeddings" inputs = [ DropdownInput( diff --git a/src/backend/base/langflow/components/embeddings/OllamaEmbeddings.py b/src/backend/base/langflow/components/embeddings/OllamaEmbeddings.py index 103ca3f1b..5a17c0ed4 100644 --- a/src/backend/base/langflow/components/embeddings/OllamaEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/OllamaEmbeddings.py @@ -10,6 +10,7 @@ class OllamaEmbeddingsComponent(LCModelComponent): description: str = "Generate embeddings using Ollama models." documentation = "https://python.langchain.com/docs/integrations/text_embedding/ollama" icon = "Ollama" + name = "OllamaEmbeddings" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/embeddings/OpenAIEmbeddings.py b/src/backend/base/langflow/components/embeddings/OpenAIEmbeddings.py index 7f56874be..7fde4c326 100644 --- a/src/backend/base/langflow/components/embeddings/OpenAIEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/OpenAIEmbeddings.py @@ -9,6 +9,8 @@ class OpenAIEmbeddingsComponent(LCEmbeddingsModel): display_name = "OpenAI Embeddings" description = "Generate embeddings using OpenAI models." icon = "OpenAI" + name = "OpenAIEmbeddings" + inputs = [ DictInput( name="default_headers", diff --git a/src/backend/base/langflow/components/embeddings/VertexAIEmbeddings.py b/src/backend/base/langflow/components/embeddings/VertexAIEmbeddings.py index 31c1ae528..7b2374482 100644 --- a/src/backend/base/langflow/components/embeddings/VertexAIEmbeddings.py +++ b/src/backend/base/langflow/components/embeddings/VertexAIEmbeddings.py @@ -7,6 +7,7 @@ class VertexAIEmbeddingsComponent(LCModelComponent): display_name = "VertexAI Embeddings" description = "Generate embeddings using Google Cloud VertexAI models." icon = "VertexAI" + name = "VertexAIEmbeddings" inputs = [ FileInput( diff --git a/src/backend/base/langflow/components/helpers/CombineText.py b/src/backend/base/langflow/components/helpers/CombineText.py index 6bb3246c0..251d337cc 100644 --- a/src/backend/base/langflow/components/helpers/CombineText.py +++ b/src/backend/base/langflow/components/helpers/CombineText.py @@ -7,6 +7,7 @@ class CombineTextComponent(Component): display_name = "Combine Text" description = "Concatenate two text sources into a single text chunk using a specified delimiter." icon = "merge" + name = "CombineText" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/helpers/CreateList.py b/src/backend/base/langflow/components/helpers/CreateList.py index ea0130ecc..678500b23 100644 --- a/src/backend/base/langflow/components/helpers/CreateList.py +++ b/src/backend/base/langflow/components/helpers/CreateList.py @@ -8,6 +8,7 @@ class CreateListComponent(Component): display_name = "Create List" description = "Creates a list of texts." icon = "list" + name = "CreateList" inputs = [ StrInput( diff --git a/src/backend/base/langflow/components/helpers/CustomComponent.py b/src/backend/base/langflow/components/helpers/CustomComponent.py index 1ff54fe80..df5db7dc0 100644 --- a/src/backend/base/langflow/components/helpers/CustomComponent.py +++ b/src/backend/base/langflow/components/helpers/CustomComponent.py @@ -9,6 +9,7 @@ class CustomComponent(Component): description = "Use as a template to create your own component." documentation: str = "http://docs.langflow.org/components/custom" icon = "custom_components" + name = "CustomComponent" inputs = [ MessageTextInput(name="input_value", display_name="Input Value", value="Hello, World!"), diff --git a/src/backend/base/langflow/components/helpers/FilterData.py b/src/backend/base/langflow/components/helpers/FilterData.py index 94551854d..3832e4e84 100644 --- a/src/backend/base/langflow/components/helpers/FilterData.py +++ b/src/backend/base/langflow/components/helpers/FilterData.py @@ -10,6 +10,7 @@ class FilterDataComponent(Component): description = "Filters a Data object based on a list of keys." icon = "filter" beta = True + name = "FilterData" inputs = [ DataInput( diff --git a/src/backend/base/langflow/components/helpers/IDGenerator.py b/src/backend/base/langflow/components/helpers/IDGenerator.py index 7e63f870b..5dd5ebe90 100644 --- a/src/backend/base/langflow/components/helpers/IDGenerator.py +++ b/src/backend/base/langflow/components/helpers/IDGenerator.py @@ -8,6 +8,7 @@ from langflow.schema.dotdict import dotdict class IDGeneratorComponent(CustomComponent): display_name = "ID Generator" description = "Generates a unique ID." + name = "IDGenerator" def update_build_config( # type: ignore self, build_config: dotdict, field_value: Any, field_name: Optional[str] = None diff --git a/src/backend/base/langflow/components/helpers/Memory.py b/src/backend/base/langflow/components/helpers/Memory.py index 757526bba..db5fe6acc 100644 --- a/src/backend/base/langflow/components/helpers/Memory.py +++ b/src/backend/base/langflow/components/helpers/Memory.py @@ -10,6 +10,7 @@ class MemoryComponent(Component): display_name = "Chat Memory" description = "Retrieves stored chat messages." icon = "message-square-more" + name = "Memory" inputs = [ DropdownInput( diff --git a/src/backend/base/langflow/components/helpers/MergeData.py b/src/backend/base/langflow/components/helpers/MergeData.py index 5d434d3cf..9d4847f08 100644 --- a/src/backend/base/langflow/components/helpers/MergeData.py +++ b/src/backend/base/langflow/components/helpers/MergeData.py @@ -6,6 +6,7 @@ class MergeDataComponent(CustomComponent): display_name = "Merge Data" description = "Combines multiple data sources into a single unified Data object." beta: bool = True + name = "MergeData" field_config = { "data": {"display_name": "Data"}, diff --git a/src/backend/base/langflow/components/helpers/ParseData.py b/src/backend/base/langflow/components/helpers/ParseData.py index 32482bcdb..62f757d49 100644 --- a/src/backend/base/langflow/components/helpers/ParseData.py +++ b/src/backend/base/langflow/components/helpers/ParseData.py @@ -8,6 +8,7 @@ class ParseDataComponent(Component): display_name = "Parse Data" description = "Convert Data into plain text following a specified template." icon = "braces" + name = "ParseData" inputs = [ DataInput(name="data", display_name="Data", info="The data to convert to text."), diff --git a/src/backend/base/langflow/components/helpers/SplitText.py b/src/backend/base/langflow/components/helpers/SplitText.py index f3529baf3..88f911057 100644 --- a/src/backend/base/langflow/components/helpers/SplitText.py +++ b/src/backend/base/langflow/components/helpers/SplitText.py @@ -12,6 +12,7 @@ class SplitTextComponent(Component): display_name: str = "Split Text" description: str = "Split text into chunks based on specified criteria." icon = "scissors-line-dashed" + name = "SplitText" inputs = [ HandleInput( diff --git a/src/backend/base/langflow/components/helpers/StoreMessage.py b/src/backend/base/langflow/components/helpers/StoreMessage.py index ce1abbe29..ce138bb9c 100644 --- a/src/backend/base/langflow/components/helpers/StoreMessage.py +++ b/src/backend/base/langflow/components/helpers/StoreMessage.py @@ -9,6 +9,7 @@ class StoreMessageComponent(Component): display_name = "Store Message" description = "Stores a chat message or text." icon = "save" + name = "StoreMessage" inputs = [ MessageInput(name="message", display_name="Message", info="The chat message to be stored.", required=True), diff --git a/src/backend/base/langflow/components/inputs/ChatInput.py b/src/backend/base/langflow/components/inputs/ChatInput.py index 4d42dece4..b921b1673 100644 --- a/src/backend/base/langflow/components/inputs/ChatInput.py +++ b/src/backend/base/langflow/components/inputs/ChatInput.py @@ -8,6 +8,7 @@ class ChatInput(ChatComponent): display_name = "Chat Input" description = "Get chat inputs from the Playground." icon = "ChatInput" + name = "ChatInput" inputs = [ MultilineInput( diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py index f05398369..6495f9ab6 100644 --- a/src/backend/base/langflow/components/inputs/TextInput.py +++ b/src/backend/base/langflow/components/inputs/TextInput.py @@ -7,6 +7,7 @@ class TextInputComponent(TextComponent): display_name = "Text Input" description = "Get text inputs from the Playground." icon = "type" + name = "TextInput" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/langchain_utilities/BingSearchAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/BingSearchAPIWrapper.py index 848d10985..04520dd33 100644 --- a/src/backend/base/langflow/components/langchain_utilities/BingSearchAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/BingSearchAPIWrapper.py @@ -9,6 +9,7 @@ from langflow.custom import CustomComponent class BingSearchAPIWrapperComponent(CustomComponent): display_name = "BingSearchAPIWrapper" description = "Wrapper for Bing Search API." + name = "BingSearchAPIWrapper" def build_config(self): return { diff --git a/src/backend/base/langflow/components/langchain_utilities/FirecrawlCrawlApi.py b/src/backend/base/langflow/components/langchain_utilities/FirecrawlCrawlApi.py index 7b48677b0..e152b797e 100644 --- a/src/backend/base/langflow/components/langchain_utilities/FirecrawlCrawlApi.py +++ b/src/backend/base/langflow/components/langchain_utilities/FirecrawlCrawlApi.py @@ -8,6 +8,8 @@ from langflow.schema import Data class FirecrawlCrawlApi(CustomComponent): display_name: str = "FirecrawlCrawlApi" description: str = "Firecrawl Crawl API." + name = "FirecrawlCrawlApi" + output_types: list[str] = ["Document"] documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/crawl" field_config = { diff --git a/src/backend/base/langflow/components/langchain_utilities/FirecrawlScrapeApi.py b/src/backend/base/langflow/components/langchain_utilities/FirecrawlScrapeApi.py index ae5fbe784..9ed720a67 100644 --- a/src/backend/base/langflow/components/langchain_utilities/FirecrawlScrapeApi.py +++ b/src/backend/base/langflow/components/langchain_utilities/FirecrawlScrapeApi.py @@ -7,6 +7,8 @@ from langflow.schema import Data class FirecrawlScrapeApi(CustomComponent): display_name: str = "FirecrawlScrapeApi" description: str = "Firecrawl Scrape API." + name = "FirecrawlScrapeApi" + output_types: list[str] = ["Document"] documentation: str = "https://docs.firecrawl.dev/api-reference/endpoint/scrape" field_config = { diff --git a/src/backend/base/langflow/components/langchain_utilities/GoogleSearchAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/GoogleSearchAPIWrapper.py index 5e45219cc..fe804961e 100644 --- a/src/backend/base/langflow/components/langchain_utilities/GoogleSearchAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/GoogleSearchAPIWrapper.py @@ -8,6 +8,7 @@ from langflow.custom import CustomComponent class GoogleSearchAPIWrapperComponent(CustomComponent): display_name = "GoogleSearchAPIWrapper" description = "Wrapper for Google Search API." + name = "GoogleSearchAPIWrapper" def build_config(self): return { diff --git a/src/backend/base/langflow/components/langchain_utilities/GoogleSerperAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/GoogleSerperAPIWrapper.py index 2b9a49458..2f5261411 100644 --- a/src/backend/base/langflow/components/langchain_utilities/GoogleSerperAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/GoogleSerperAPIWrapper.py @@ -10,6 +10,7 @@ from langflow.custom import CustomComponent class GoogleSerperAPIWrapperComponent(CustomComponent): display_name = "GoogleSerperAPIWrapper" description = "Wrapper around the Serper.dev Google Search API." + name = "GoogleSerperAPIWrapper" def build_config(self) -> Dict[str, Dict]: return { diff --git a/src/backend/base/langflow/components/langchain_utilities/JSONDocumentBuilder.py b/src/backend/base/langflow/components/langchain_utilities/JSONDocumentBuilder.py index c0300cff0..e4d330064 100644 --- a/src/backend/base/langflow/components/langchain_utilities/JSONDocumentBuilder.py +++ b/src/backend/base/langflow/components/langchain_utilities/JSONDocumentBuilder.py @@ -20,6 +20,8 @@ from langflow.services.database.models.base import orjson_dumps class JSONDocumentBuilder(CustomComponent): display_name: str = "JSON Document Builder" description: str = "Build a Document containing a JSON object using a key and another Document page content." + name = "JSONDocumentBuilder" + output_types: list[str] = ["Document"] documentation: str = "https://docs.langflow.org/components/utilities#json-document-builder" diff --git a/src/backend/base/langflow/components/langchain_utilities/SQLDatabase.py b/src/backend/base/langflow/components/langchain_utilities/SQLDatabase.py index 93c46087d..e9c7565d6 100644 --- a/src/backend/base/langflow/components/langchain_utilities/SQLDatabase.py +++ b/src/backend/base/langflow/components/langchain_utilities/SQLDatabase.py @@ -6,6 +6,7 @@ from langflow.custom import CustomComponent class SQLDatabaseComponent(CustomComponent): display_name = "SQLDatabase" description = "SQL Database" + name = "SQLDatabase" def build_config(self): return { diff --git a/src/backend/base/langflow/components/langchain_utilities/SearchApi.py b/src/backend/base/langflow/components/langchain_utilities/SearchApi.py index 5dfd55250..2b6f54de7 100644 --- a/src/backend/base/langflow/components/langchain_utilities/SearchApi.py +++ b/src/backend/base/langflow/components/langchain_utilities/SearchApi.py @@ -10,6 +10,8 @@ from langflow.services.database.models.base import orjson_dumps class SearchApi(CustomComponent): display_name: str = "SearchApi" description: str = "Real-time search engine results API." + name = "SearchApi" + output_types: list[str] = ["Document"] documentation: str = "https://www.searchapi.io/docs/google" field_config = { diff --git a/src/backend/base/langflow/components/langchain_utilities/SearxSearchWrapper.py b/src/backend/base/langflow/components/langchain_utilities/SearxSearchWrapper.py index 4fe0706f8..90c1f6b55 100644 --- a/src/backend/base/langflow/components/langchain_utilities/SearxSearchWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/SearxSearchWrapper.py @@ -8,6 +8,7 @@ from langflow.custom import CustomComponent class SearxSearchWrapperComponent(CustomComponent): display_name = "SearxSearchWrapper" description = "Wrapper for Searx API." + name = "SearxSearchWrapper" def build_config(self): return { diff --git a/src/backend/base/langflow/components/langchain_utilities/SerpAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/SerpAPIWrapper.py index d8aa404cb..7bd8d911b 100644 --- a/src/backend/base/langflow/components/langchain_utilities/SerpAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/SerpAPIWrapper.py @@ -8,6 +8,7 @@ from langflow.custom import CustomComponent class SerpAPIWrapperComponent(CustomComponent): display_name = "SerpAPIWrapper" description = "Wrapper around SerpAPI" + name = "SerpAPIWrapper" def build_config(self): return { diff --git a/src/backend/base/langflow/components/langchain_utilities/WikipediaAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/WikipediaAPIWrapper.py index 1c10dd4bd..ef1485532 100644 --- a/src/backend/base/langflow/components/langchain_utilities/WikipediaAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/WikipediaAPIWrapper.py @@ -12,6 +12,7 @@ from langflow.custom import CustomComponent class WikipediaAPIWrapperComponent(CustomComponent): display_name = "WikipediaAPIWrapper" description = "Wrapper around WikipediaAPI." + name = "WikipediaAPIWrapper" def build_config(self): return {} diff --git a/src/backend/base/langflow/components/langchain_utilities/WolframAlphaAPIWrapper.py b/src/backend/base/langflow/components/langchain_utilities/WolframAlphaAPIWrapper.py index 42be1f199..f8771d0ce 100644 --- a/src/backend/base/langflow/components/langchain_utilities/WolframAlphaAPIWrapper.py +++ b/src/backend/base/langflow/components/langchain_utilities/WolframAlphaAPIWrapper.py @@ -11,6 +11,7 @@ from langflow.custom import CustomComponent class WolframAlphaAPIWrapperComponent(CustomComponent): display_name = "WolframAlphaAPIWrapper" description = "Wrapper for Wolfram Alpha." + name = "WolframAlphaAPIWrapper" def build_config(self): return {"appid": {"display_name": "App ID", "type": "str", "password": True}} diff --git a/src/backend/base/langflow/components/memories/AstraDBMessageReader.py b/src/backend/base/langflow/components/memories/AstraDBMessageReader.py index dfb8ef86a..52cdccdca 100644 --- a/src/backend/base/langflow/components/memories/AstraDBMessageReader.py +++ b/src/backend/base/langflow/components/memories/AstraDBMessageReader.py @@ -7,6 +7,7 @@ from langflow.schema import Data class AstraDBMessageReaderComponent(BaseMemoryComponent): display_name = "Astra DB Message Reader" description = "Retrieves stored chat messages from Astra DB." + name = "AstraDBMessageReader" def build_config(self): return { diff --git a/src/backend/base/langflow/components/memories/AstraDBMessageWriter.py b/src/backend/base/langflow/components/memories/AstraDBMessageWriter.py index c929aca9e..b36b32882 100644 --- a/src/backend/base/langflow/components/memories/AstraDBMessageWriter.py +++ b/src/backend/base/langflow/components/memories/AstraDBMessageWriter.py @@ -9,6 +9,7 @@ from langflow.schema import Data class AstraDBMessageWriterComponent(BaseMemoryComponent): display_name = "Astra DB Message Writer" description = "Writes a message to Astra DB." + name = "AstraDBMessageWriter" def build_config(self): return { diff --git a/src/backend/base/langflow/components/memories/CassandraMessageReader.py b/src/backend/base/langflow/components/memories/CassandraMessageReader.py index a8bd1c365..889be0a9a 100644 --- a/src/backend/base/langflow/components/memories/CassandraMessageReader.py +++ b/src/backend/base/langflow/components/memories/CassandraMessageReader.py @@ -9,6 +9,7 @@ from langflow.schema.data import Data class CassandraMessageReaderComponent(BaseMemoryComponent): display_name = "Cassandra Message Reader" description = "Retrieves stored chat messages from a Cassandra table on Astra DB." + name = "CassandraMessageReader" def build_config(self): return { diff --git a/src/backend/base/langflow/components/memories/CassandraMessageWriter.py b/src/backend/base/langflow/components/memories/CassandraMessageWriter.py index 15da27274..33ca0fed1 100644 --- a/src/backend/base/langflow/components/memories/CassandraMessageWriter.py +++ b/src/backend/base/langflow/components/memories/CassandraMessageWriter.py @@ -10,6 +10,7 @@ from langflow.schema.data import Data class CassandraMessageWriterComponent(BaseMemoryComponent): display_name = "Cassandra Message Writer" description = "Writes a message to a Cassandra table on Astra DB." + name = "CassandraMessageWriter" def build_config(self): return { diff --git a/src/backend/base/langflow/components/memories/ZepMessageReader.py b/src/backend/base/langflow/components/memories/ZepMessageReader.py index 89a16587b..935706794 100644 --- a/src/backend/base/langflow/components/memories/ZepMessageReader.py +++ b/src/backend/base/langflow/components/memories/ZepMessageReader.py @@ -10,6 +10,7 @@ from langflow.schema import Data class ZepMessageReaderComponent(BaseMemoryComponent): display_name = "Zep Message Reader" description = "Retrieves stored chat messages from Zep." + name = "ZepMessageReader" def build_config(self): return { diff --git a/src/backend/base/langflow/components/memories/ZepMessageWriter.py b/src/backend/base/langflow/components/memories/ZepMessageWriter.py index cc343488e..82382e701 100644 --- a/src/backend/base/langflow/components/memories/ZepMessageWriter.py +++ b/src/backend/base/langflow/components/memories/ZepMessageWriter.py @@ -11,6 +11,7 @@ if TYPE_CHECKING: class ZepMessageWriterComponent(BaseMemoryComponent): display_name = "Zep Message Writer" description = "Writes a message to Zep." + name = "ZepMessageWriter" def build_config(self): return { diff --git a/src/backend/base/langflow/components/models/AmazonBedrockModel.py b/src/backend/base/langflow/components/models/AmazonBedrockModel.py index 168b689d9..d21546502 100644 --- a/src/backend/base/langflow/components/models/AmazonBedrockModel.py +++ b/src/backend/base/langflow/components/models/AmazonBedrockModel.py @@ -11,6 +11,7 @@ class AmazonBedrockComponent(LCModelComponent): display_name: str = "Amazon Bedrock" description: str = "Generate text using Amazon Bedrock LLMs." icon = "Amazon" + name = "AmazonBedrockModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/AnthropicModel.py b/src/backend/base/langflow/components/models/AnthropicModel.py index a8b7360c0..0972dd577 100644 --- a/src/backend/base/langflow/components/models/AnthropicModel.py +++ b/src/backend/base/langflow/components/models/AnthropicModel.py @@ -11,6 +11,7 @@ class AnthropicModelComponent(LCModelComponent): display_name = "Anthropic" description = "Generate text using Anthropic Chat&Completion LLMs with prefill support." icon = "Anthropic" + name = "AnthropicModel" inputs = [ MessageTextInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/AzureOpenAIModel.py b/src/backend/base/langflow/components/models/AzureOpenAIModel.py index fabcf25a9..57b488cfa 100644 --- a/src/backend/base/langflow/components/models/AzureOpenAIModel.py +++ b/src/backend/base/langflow/components/models/AzureOpenAIModel.py @@ -12,6 +12,7 @@ class AzureChatOpenAIComponent(LCModelComponent): documentation: str = "https://python.langchain.com/docs/integrations/llms/azure_openai" beta = False icon = "Azure" + name = "AzureOpenAIModel" AZURE_OPENAI_API_VERSIONS = [ "2023-03-15-preview", diff --git a/src/backend/base/langflow/components/models/BaiduQianfanChatModel.py b/src/backend/base/langflow/components/models/BaiduQianfanChatModel.py index efaa6a74f..15ede57f7 100644 --- a/src/backend/base/langflow/components/models/BaiduQianfanChatModel.py +++ b/src/backend/base/langflow/components/models/BaiduQianfanChatModel.py @@ -12,6 +12,7 @@ class QianfanChatEndpointComponent(LCModelComponent): description: str = "Generate text using Baidu Qianfan LLMs." documentation: str = "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint" icon = "BaiduQianfan" + name = "BaiduQianfanChatModel" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/models/CohereModel.py b/src/backend/base/langflow/components/models/CohereModel.py index 2305533ef..890f91606 100644 --- a/src/backend/base/langflow/components/models/CohereModel.py +++ b/src/backend/base/langflow/components/models/CohereModel.py @@ -12,6 +12,7 @@ class CohereComponent(LCModelComponent): description = "Generate text using Cohere LLMs." documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" icon = "Cohere" + name = "CohereModel" inputs = [ SecretStrInput( diff --git a/src/backend/base/langflow/components/models/GoogleGenerativeAIModel.py b/src/backend/base/langflow/components/models/GoogleGenerativeAIModel.py index 7bcaf0b07..e20f3150c 100644 --- a/src/backend/base/langflow/components/models/GoogleGenerativeAIModel.py +++ b/src/backend/base/langflow/components/models/GoogleGenerativeAIModel.py @@ -10,6 +10,7 @@ class GoogleGenerativeAIComponent(LCModelComponent): display_name = "Google Generative AI" description = "Generate text using Google Generative AI." icon = "GoogleGenerativeAI" + name = "GoogleGenerativeAIModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/GroqModel.py b/src/backend/base/langflow/components/models/GroqModel.py index fa8765a26..d24ba3cf6 100644 --- a/src/backend/base/langflow/components/models/GroqModel.py +++ b/src/backend/base/langflow/components/models/GroqModel.py @@ -12,6 +12,7 @@ class GroqModel(LCModelComponent): display_name: str = "Groq" description: str = "Generate text using Groq." icon = "Groq" + name = "GroqModel" inputs = [ SecretStrInput( diff --git a/src/backend/base/langflow/components/models/HuggingFaceModel.py b/src/backend/base/langflow/components/models/HuggingFaceModel.py index ff7b440fe..6995eb765 100644 --- a/src/backend/base/langflow/components/models/HuggingFaceModel.py +++ b/src/backend/base/langflow/components/models/HuggingFaceModel.py @@ -11,6 +11,7 @@ class HuggingFaceEndpointsComponent(LCModelComponent): display_name: str = "Hugging Face API" description: str = "Generate text using Hugging Face Inference APIs." icon = "HuggingFace" + name = "HuggingFaceModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/MistralModel.py b/src/backend/base/langflow/components/models/MistralModel.py index aeeca80a2..3aa9fcb3a 100644 --- a/src/backend/base/langflow/components/models/MistralModel.py +++ b/src/backend/base/langflow/components/models/MistralModel.py @@ -11,6 +11,7 @@ class MistralAIModelComponent(LCModelComponent): display_name = "MistralAI" description = "Generates text using MistralAI LLMs." icon = "MistralAI" + name = "MistralModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/OllamaModel.py b/src/backend/base/langflow/components/models/OllamaModel.py index d58736ecd..3419aace2 100644 --- a/src/backend/base/langflow/components/models/OllamaModel.py +++ b/src/backend/base/langflow/components/models/OllamaModel.py @@ -13,6 +13,7 @@ class ChatOllamaComponent(LCModelComponent): display_name = "Ollama" description = "Generate text using Ollama Local LLMs." icon = "Ollama" + name = "OllamaModel" def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None): if field_name == "mirostat": diff --git a/src/backend/base/langflow/components/models/OpenAIModel.py b/src/backend/base/langflow/components/models/OpenAIModel.py index 0cdc8fdf9..9c5fc1d48 100644 --- a/src/backend/base/langflow/components/models/OpenAIModel.py +++ b/src/backend/base/langflow/components/models/OpenAIModel.py @@ -24,6 +24,7 @@ class OpenAIModelComponent(LCModelComponent): display_name = "OpenAI" description = "Generates text using OpenAI LLMs." icon = "OpenAI" + name = "OpenAIModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/models/VertexAiModel.py b/src/backend/base/langflow/components/models/VertexAiModel.py index 11bf63f6e..32cb8f51d 100644 --- a/src/backend/base/langflow/components/models/VertexAiModel.py +++ b/src/backend/base/langflow/components/models/VertexAiModel.py @@ -10,6 +10,7 @@ class ChatVertexAIComponent(LCModelComponent): display_name = "Vertex AI" description = "Generate text using Vertex AI LLMs." icon = "VertexAI" + name = "VertexAiModel" inputs = [ MessageInput(name="input_value", display_name="Input"), diff --git a/src/backend/base/langflow/components/outputs/ChatOutput.py b/src/backend/base/langflow/components/outputs/ChatOutput.py index 534ccf2f0..e1f40ec76 100644 --- a/src/backend/base/langflow/components/outputs/ChatOutput.py +++ b/src/backend/base/langflow/components/outputs/ChatOutput.py @@ -7,6 +7,7 @@ class ChatOutput(ChatComponent): display_name = "Chat Output" description = "Display a chat message in the Playground." icon = "ChatOutput" + name = "ChatOutput" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/outputs/TextOutput.py b/src/backend/base/langflow/components/outputs/TextOutput.py index 4bd03e2e0..ee8276b42 100644 --- a/src/backend/base/langflow/components/outputs/TextOutput.py +++ b/src/backend/base/langflow/components/outputs/TextOutput.py @@ -7,6 +7,7 @@ class TextOutputComponent(TextComponent): display_name = "Text Output" description = "Display a text output in the Playground." icon = "type" + name = "TextOutput" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/prompts/Prompt.py b/src/backend/base/langflow/components/prompts/Prompt.py index 8f8d3d6a2..c102fba3b 100644 --- a/src/backend/base/langflow/components/prompts/Prompt.py +++ b/src/backend/base/langflow/components/prompts/Prompt.py @@ -10,6 +10,7 @@ class PromptComponent(Component): description: str = "Create a prompt template with dynamic variables." icon = "prompts" trace_type = "prompt" + name = "Prompt" inputs = [ PromptInput(name="template", display_name="Template"), diff --git a/src/backend/base/langflow/components/prototypes/ConditionalRouter.py b/src/backend/base/langflow/components/prototypes/ConditionalRouter.py index 6d24bfa5e..133a84867 100644 --- a/src/backend/base/langflow/components/prototypes/ConditionalRouter.py +++ b/src/backend/base/langflow/components/prototypes/ConditionalRouter.py @@ -7,6 +7,7 @@ class ConditionalRouterComponent(Component): display_name = "Conditional Router" description = "Routes an input message to a corresponding output based on text comparison." icon = "equal" + name = "ConditionalRouter" inputs = [ MessageTextInput( diff --git a/src/backend/base/langflow/components/prototypes/CreateData.py b/src/backend/base/langflow/components/prototypes/CreateData.py index 3b0a31083..17a75962b 100644 --- a/src/backend/base/langflow/components/prototypes/CreateData.py +++ b/src/backend/base/langflow/components/prototypes/CreateData.py @@ -13,6 +13,7 @@ from langflow.template.field.base import Input class CreateDataComponent(Component): display_name: str = "Create Data" description: str = "Dynamically create a Data with a specified number of fields." + name: str = "CreateData" inputs = [ IntInput( diff --git a/src/backend/base/langflow/components/prototypes/FlowTool.py b/src/backend/base/langflow/components/prototypes/FlowTool.py index a1c9bc4eb..d4a038e6f 100644 --- a/src/backend/base/langflow/components/prototypes/FlowTool.py +++ b/src/backend/base/langflow/components/prototypes/FlowTool.py @@ -16,6 +16,7 @@ class FlowToolComponent(CustomComponent): description = "Construct a Tool from a function that runs the loaded Flow." field_order = ["flow_name", "name", "description", "return_direct"] trace_type = "tool" + name = "FlowTool" beta = True def get_flow_names(self) -> List[str]: diff --git a/src/backend/base/langflow/components/prototypes/Listen.py b/src/backend/base/langflow/components/prototypes/Listen.py index 03a81d130..23b9c3ee1 100644 --- a/src/backend/base/langflow/components/prototypes/Listen.py +++ b/src/backend/base/langflow/components/prototypes/Listen.py @@ -5,6 +5,7 @@ from langflow.schema import Data class ListenComponent(CustomComponent): display_name = "Listen" description = "A component to listen for a notification." + name = "Listen" beta: bool = True def build_config(self): diff --git a/src/backend/base/langflow/components/prototypes/Notify.py b/src/backend/base/langflow/components/prototypes/Notify.py index e4bd0b090..c07baae34 100644 --- a/src/backend/base/langflow/components/prototypes/Notify.py +++ b/src/backend/base/langflow/components/prototypes/Notify.py @@ -8,6 +8,7 @@ class NotifyComponent(CustomComponent): display_name = "Notify" description = "A component to generate a notification to Get Notified component." icon = "Notify" + name = "Notify" beta: bool = True def build_config(self): diff --git a/src/backend/base/langflow/components/prototypes/Pass.py b/src/backend/base/langflow/components/prototypes/Pass.py index 28e9ea524..ae527976c 100644 --- a/src/backend/base/langflow/components/prototypes/Pass.py +++ b/src/backend/base/langflow/components/prototypes/Pass.py @@ -7,6 +7,7 @@ from langflow.template import Output class PassMessageComponent(Component): display_name = "Pass" description = "Forwards the input message, unchanged." + name = "Pass" icon = "arrow-right" inputs = [ diff --git a/src/backend/base/langflow/components/prototypes/PythonFunction.py b/src/backend/base/langflow/components/prototypes/PythonFunction.py index f0f238636..bc5576f89 100644 --- a/src/backend/base/langflow/components/prototypes/PythonFunction.py +++ b/src/backend/base/langflow/components/prototypes/PythonFunction.py @@ -9,6 +9,7 @@ class PythonFunctionComponent(CustomComponent): display_name = "Python Function" description = "Define a Python function." icon = "Python" + name = "PythonFunction" beta = True def build_config(self): diff --git a/src/backend/base/langflow/components/prototypes/RunFlow.py b/src/backend/base/langflow/components/prototypes/RunFlow.py index d5b2362fb..2114cdc55 100644 --- a/src/backend/base/langflow/components/prototypes/RunFlow.py +++ b/src/backend/base/langflow/components/prototypes/RunFlow.py @@ -10,6 +10,7 @@ from langflow.schema import Data, dotdict class RunFlowComponent(CustomComponent): display_name = "Run Flow" description = "A component to run a flow." + name = "RunFlow" beta: bool = True def get_flow_names(self) -> List[str]: diff --git a/src/backend/base/langflow/components/prototypes/RunnableExecutor.py b/src/backend/base/langflow/components/prototypes/RunnableExecutor.py index 82260b76b..ab85e1e9c 100644 --- a/src/backend/base/langflow/components/prototypes/RunnableExecutor.py +++ b/src/backend/base/langflow/components/prototypes/RunnableExecutor.py @@ -7,6 +7,7 @@ from langflow.field_typing import Text class RunnableExecComponent(CustomComponent): description = "Execute a runnable. It will try to guess the input and output keys." display_name = "Runnable Executor" + name = "RunnableExecutor" beta: bool = True field_order = [ "input_key", diff --git a/src/backend/base/langflow/components/prototypes/SQLExecutor.py b/src/backend/base/langflow/components/prototypes/SQLExecutor.py index 6ef92ba6d..cafc92fb4 100644 --- a/src/backend/base/langflow/components/prototypes/SQLExecutor.py +++ b/src/backend/base/langflow/components/prototypes/SQLExecutor.py @@ -8,6 +8,7 @@ from langflow.field_typing import Text class SQLExecutorComponent(CustomComponent): display_name = "SQL Executor" description = "Execute SQL query." + name = "SQLExecutor" beta: bool = True def build_config(self): diff --git a/src/backend/base/langflow/components/prototypes/SubFlow.py b/src/backend/base/langflow/components/prototypes/SubFlow.py index b0631ee99..f3f0b4623 100644 --- a/src/backend/base/langflow/components/prototypes/SubFlow.py +++ b/src/backend/base/langflow/components/prototypes/SubFlow.py @@ -17,6 +17,7 @@ class SubFlowComponent(CustomComponent): description = ( "Dynamically Generates a Component from a Flow. The output is a list of data with keys 'result' and 'message'." ) + name = "SubFlow" beta: bool = True field_order = ["flow_name"] diff --git a/src/backend/base/langflow/components/prototypes/UpdateData.py b/src/backend/base/langflow/components/prototypes/UpdateData.py index eebd35ec8..10355d2df 100644 --- a/src/backend/base/langflow/components/prototypes/UpdateData.py +++ b/src/backend/base/langflow/components/prototypes/UpdateData.py @@ -5,6 +5,7 @@ from langflow.schema import Data class UpdateDataComponent(CustomComponent): display_name = "Update Data" description = "Update Data with text-based key/value pairs, similar to updating a Python dictionary." + name = "UpdateData" def build_config(self): return { diff --git a/src/backend/base/langflow/components/retrievers/AmazonKendra.py b/src/backend/base/langflow/components/retrievers/AmazonKendra.py index 90c70a7bc..8c4252c26 100644 --- a/src/backend/base/langflow/components/retrievers/AmazonKendra.py +++ b/src/backend/base/langflow/components/retrievers/AmazonKendra.py @@ -9,6 +9,7 @@ from langflow.field_typing import Retriever class AmazonKendraRetrieverComponent(CustomComponent): display_name: str = "Amazon Kendra Retriever" description: str = "Retriever that uses the Amazon Kendra API." + name = "AmazonKendra" icon = "Amazon" def build_config(self): diff --git a/src/backend/base/langflow/components/retrievers/CohereRerank.py b/src/backend/base/langflow/components/retrievers/CohereRerank.py index 7eedc1ee0..f7f22e4a1 100644 --- a/src/backend/base/langflow/components/retrievers/CohereRerank.py +++ b/src/backend/base/langflow/components/retrievers/CohereRerank.py @@ -12,6 +12,7 @@ from langflow.schema import Data class CohereRerankComponent(LCVectorStoreComponent): display_name = "Cohere Rerank" description = "Rerank documents using the Cohere API and a retriever." + name = "CohereRerank" icon = "Cohere" inputs = [ diff --git a/src/backend/base/langflow/components/retrievers/MetalRetriever.py b/src/backend/base/langflow/components/retrievers/MetalRetriever.py index f3af0ebb0..f5ce37d05 100644 --- a/src/backend/base/langflow/components/retrievers/MetalRetriever.py +++ b/src/backend/base/langflow/components/retrievers/MetalRetriever.py @@ -10,6 +10,7 @@ from langflow.field_typing import Retriever class MetalRetrieverComponent(CustomComponent): display_name: str = "Metal Retriever" description: str = "Retriever that uses the Metal API." + name = "MetalRetriever" def build_config(self): return { diff --git a/src/backend/base/langflow/components/retrievers/MultiQueryRetriever.py b/src/backend/base/langflow/components/retrievers/MultiQueryRetriever.py index f7b2eda6b..c662f701e 100644 --- a/src/backend/base/langflow/components/retrievers/MultiQueryRetriever.py +++ b/src/backend/base/langflow/components/retrievers/MultiQueryRetriever.py @@ -10,6 +10,7 @@ class MultiQueryRetrieverComponent(CustomComponent): display_name = "MultiQueryRetriever" description = "Initialize from llm using default template." documentation = "https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever" + name = "MultiQueryRetriever" def build_config(self): return { diff --git a/src/backend/base/langflow/components/retrievers/SelfQueryRetriever.py b/src/backend/base/langflow/components/retrievers/SelfQueryRetriever.py index fd61a32de..405e8fc70 100644 --- a/src/backend/base/langflow/components/retrievers/SelfQueryRetriever.py +++ b/src/backend/base/langflow/components/retrievers/SelfQueryRetriever.py @@ -12,6 +12,7 @@ from langflow.schema.message import Message class SelfQueryRetrieverComponent(CustomComponent): display_name: str = "Self Query Retriever" description: str = "Retriever that uses a vector store and an LLM to generate the vector store queries." + name = "SelfQueryRetriever" icon = "LangChain" def build_config(self): diff --git a/src/backend/base/langflow/components/retrievers/VectaraSelfQueryRetriver.py b/src/backend/base/langflow/components/retrievers/VectaraSelfQueryRetriver.py index a328b2b20..d8580b55a 100644 --- a/src/backend/base/langflow/components/retrievers/VectaraSelfQueryRetriver.py +++ b/src/backend/base/langflow/components/retrievers/VectaraSelfQueryRetriver.py @@ -18,6 +18,7 @@ class VectaraSelfQueryRetriverComponent(CustomComponent): display_name: str = "Vectara Self Query Retriever for Vectara Vector Store" description: str = "Implementation of Vectara Self Query Retriever" documentation = "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query" + name = "VectaraSelfQueryRetriver" icon = "Vectara" field_config = { diff --git a/src/backend/base/langflow/components/retrievers/VectorStoreRetriever.py b/src/backend/base/langflow/components/retrievers/VectorStoreRetriever.py index 6460e0458..b4ef2c846 100644 --- a/src/backend/base/langflow/components/retrievers/VectorStoreRetriever.py +++ b/src/backend/base/langflow/components/retrievers/VectorStoreRetriever.py @@ -7,6 +7,7 @@ from langflow.field_typing import VectorStore class VectoStoreRetrieverComponent(CustomComponent): display_name = "VectorStore Retriever" description = "A vector store retriever" + name = "VectorStoreRetriever" def build_config(self): return { diff --git a/src/backend/base/langflow/components/textsplitters/CharacterTextSplitter.py b/src/backend/base/langflow/components/textsplitters/CharacterTextSplitter.py index c0f00b078..1a17b0cf7 100644 --- a/src/backend/base/langflow/components/textsplitters/CharacterTextSplitter.py +++ b/src/backend/base/langflow/components/textsplitters/CharacterTextSplitter.py @@ -10,6 +10,7 @@ from langflow.utils.util import unescape_string class CharacterTextSplitterComponent(CustomComponent): display_name = "CharacterTextSplitter" description = "Splitting text that looks at characters." + name = "CharacterTextSplitter" def build_config(self): return { diff --git a/src/backend/base/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py b/src/backend/base/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py index 4c074e861..39988aafa 100644 --- a/src/backend/base/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py +++ b/src/backend/base/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py @@ -10,6 +10,7 @@ class LanguageRecursiveTextSplitterComponent(CustomComponent): display_name: str = "Language Recursive Text Splitter" 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" def build_config(self): options = [x.value for x in Language] diff --git a/src/backend/base/langflow/components/textsplitters/RecursiveCharacterTextSplitter.py b/src/backend/base/langflow/components/textsplitters/RecursiveCharacterTextSplitter.py index f1385f165..02aba8a66 100644 --- a/src/backend/base/langflow/components/textsplitters/RecursiveCharacterTextSplitter.py +++ b/src/backend/base/langflow/components/textsplitters/RecursiveCharacterTextSplitter.py @@ -11,6 +11,7 @@ class RecursiveCharacterTextSplitterComponent(Component): display_name: str = "Recursive Character Text Splitter" description: str = "Split text into chunks of a specified length." documentation: str = "https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter" + name = "RecursiveCharacterTextSplitter" inputs = [ IntInput( diff --git a/src/backend/base/langflow/components/toolkits/JsonToolkit.py b/src/backend/base/langflow/components/toolkits/JsonToolkit.py index 09a613336..96dc33248 100644 --- a/src/backend/base/langflow/components/toolkits/JsonToolkit.py +++ b/src/backend/base/langflow/components/toolkits/JsonToolkit.py @@ -10,6 +10,7 @@ from langflow.custom import CustomComponent class JsonToolkitComponent(CustomComponent): display_name = "JsonToolkit" description = "Toolkit for interacting with a JSON spec." + name = "JsonToolkit" def build_config(self): return { diff --git a/src/backend/base/langflow/components/toolkits/Metaphor.py b/src/backend/base/langflow/components/toolkits/Metaphor.py index 9ebd4f771..73c764512 100644 --- a/src/backend/base/langflow/components/toolkits/Metaphor.py +++ b/src/backend/base/langflow/components/toolkits/Metaphor.py @@ -12,6 +12,7 @@ class MetaphorToolkit(CustomComponent): description: str = "Metaphor Toolkit" documentation = "https://python.langchain.com/docs/integrations/tools/metaphor_search" beta: bool = True + name = "Metaphor" # api key should be password = True field_config = { "metaphor_api_key": {"display_name": "Metaphor API Key", "password": True}, diff --git a/src/backend/base/langflow/components/toolkits/OpenAPIToolkit.py b/src/backend/base/langflow/components/toolkits/OpenAPIToolkit.py index 0639dae0c..5a72c7f2f 100644 --- a/src/backend/base/langflow/components/toolkits/OpenAPIToolkit.py +++ b/src/backend/base/langflow/components/toolkits/OpenAPIToolkit.py @@ -12,6 +12,7 @@ from langflow.field_typing import LanguageModel class OpenAPIToolkitComponent(CustomComponent): display_name = "OpenAPIToolkit" description = "Toolkit for interacting with an OpenAPI API." + name = "OpenAPIToolkit" def build_config(self): return { diff --git a/src/backend/base/langflow/components/toolkits/VectorStoreInfo.py b/src/backend/base/langflow/components/toolkits/VectorStoreInfo.py index 60bd6598e..c1c47e45f 100644 --- a/src/backend/base/langflow/components/toolkits/VectorStoreInfo.py +++ b/src/backend/base/langflow/components/toolkits/VectorStoreInfo.py @@ -7,6 +7,7 @@ from langflow.custom import CustomComponent class VectorStoreInfoComponent(CustomComponent): display_name = "VectorStoreInfo" description = "Information about a VectorStore" + name = "VectorStoreInfo" def build_config(self): return { diff --git a/src/backend/base/langflow/components/toolkits/VectorStoreRouterToolkit.py b/src/backend/base/langflow/components/toolkits/VectorStoreRouterToolkit.py index 6e5b5d613..0676312a2 100644 --- a/src/backend/base/langflow/components/toolkits/VectorStoreRouterToolkit.py +++ b/src/backend/base/langflow/components/toolkits/VectorStoreRouterToolkit.py @@ -9,6 +9,7 @@ from langflow.field_typing import LanguageModel, Tool class VectorStoreRouterToolkitComponent(CustomComponent): display_name = "VectorStoreRouterToolkit" description = "Toolkit for routing between Vector Stores." + name = "VectorStoreRouterToolkit" def build_config(self): return { diff --git a/src/backend/base/langflow/components/toolkits/VectorStoreToolkit.py b/src/backend/base/langflow/components/toolkits/VectorStoreToolkit.py index fc63bb66f..74fe5d33c 100644 --- a/src/backend/base/langflow/components/toolkits/VectorStoreToolkit.py +++ b/src/backend/base/langflow/components/toolkits/VectorStoreToolkit.py @@ -9,6 +9,7 @@ from langflow.field_typing import LanguageModel, Tool class VectorStoreToolkitComponent(CustomComponent): display_name = "VectorStoreToolkit" description = "Toolkit for interacting with a Vector Store." + name = "VectorStoreToolkit" def build_config(self): return { diff --git a/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py b/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py index 84392cbdb..ef3c3b8a8 100644 --- a/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py +++ b/src/backend/base/langflow/components/tools/PythonCodeStructuredTool.py @@ -12,6 +12,7 @@ class PythonCodeStructuredTool(CustomComponent): display_name = "PythonCodeTool" description = "structuredtool dataclass code to tool" documentation = "https://python.langchain.com/docs/modules/tools/custom_tools/#structuredtool-dataclass" + name = "PythonCodeStructuredTool" icon = "🐍" field_order = ["name", "description", "tool_code", "return_direct", "tool_function", "tool_class"] diff --git a/src/backend/base/langflow/components/tools/PythonREPLTool.py b/src/backend/base/langflow/components/tools/PythonREPLTool.py index 914b6b965..070630a75 100644 --- a/src/backend/base/langflow/components/tools/PythonREPLTool.py +++ b/src/backend/base/langflow/components/tools/PythonREPLTool.py @@ -9,6 +9,7 @@ from langchain_core.tools import Tool class PythonREPLToolComponent(CustomComponent): display_name = "Python REPL Tool" description = "A tool for running Python code in a REPL environment." + name = "PythonREPLTool" def build_config(self): return { diff --git a/src/backend/base/langflow/components/tools/RetrieverTool.py b/src/backend/base/langflow/components/tools/RetrieverTool.py index 28829321e..6a87bcbf9 100644 --- a/src/backend/base/langflow/components/tools/RetrieverTool.py +++ b/src/backend/base/langflow/components/tools/RetrieverTool.py @@ -7,6 +7,7 @@ from langflow.field_typing import BaseRetriever, Tool class RetrieverToolComponent(CustomComponent): display_name = "RetrieverTool" description = "Tool for interacting with retriever" + name = "RetrieverTool" def build_config(self): return { diff --git a/src/backend/base/langflow/components/tools/SearchAPITool.py b/src/backend/base/langflow/components/tools/SearchAPITool.py index e0658c8c8..3c8058ee9 100644 --- a/src/backend/base/langflow/components/tools/SearchAPITool.py +++ b/src/backend/base/langflow/components/tools/SearchAPITool.py @@ -8,6 +8,7 @@ from langflow.field_typing import Tool class SearchApiToolComponent(CustomComponent): display_name: str = "SearchApi Tool" description: str = "Real-time search engine results API." + name = "SearchAPITool" documentation: str = "https://www.searchapi.io/docs/google" field_config = { "engine": { diff --git a/src/backend/base/langflow/components/tools/SearchApi.py b/src/backend/base/langflow/components/tools/SearchApi.py index 5dfd55250..2b6f54de7 100644 --- a/src/backend/base/langflow/components/tools/SearchApi.py +++ b/src/backend/base/langflow/components/tools/SearchApi.py @@ -10,6 +10,8 @@ from langflow.services.database.models.base import orjson_dumps class SearchApi(CustomComponent): display_name: str = "SearchApi" description: str = "Real-time search engine results API." + name = "SearchApi" + output_types: list[str] = ["Document"] documentation: str = "https://www.searchapi.io/docs/google" field_config = { diff --git a/src/backend/base/langflow/components/vectorstores/AstraDB.py b/src/backend/base/langflow/components/vectorstores/AstraDB.py index d29dbd235..6ed4ec7ab 100644 --- a/src/backend/base/langflow/components/vectorstores/AstraDB.py +++ b/src/backend/base/langflow/components/vectorstores/AstraDB.py @@ -21,6 +21,7 @@ class AstraVectorStoreComponent(LCVectorStoreComponent): display_name: str = "Astra DB" description: str = "Implementation of Vector Store using Astra DB with search capabilities" documentation: str = "https://python.langchain.com/docs/integrations/vectorstores/astradb" + name = "AstraDB" icon: str = "AstraDB" _cached_vectorstore: VectorStore | None = None diff --git a/src/backend/base/langflow/components/vectorstores/Cassandra.py b/src/backend/base/langflow/components/vectorstores/Cassandra.py index 9442822f9..746783af9 100644 --- a/src/backend/base/langflow/components/vectorstores/Cassandra.py +++ b/src/backend/base/langflow/components/vectorstores/Cassandra.py @@ -22,6 +22,7 @@ class CassandraVectorStoreComponent(LCVectorStoreComponent): display_name = "Cassandra" description = "Cassandra Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/cassandra" + name = "Cassandra" icon = "Cassandra" _cached_vectorstore: Cassandra | None = None diff --git a/src/backend/base/langflow/components/vectorstores/Chroma.py b/src/backend/base/langflow/components/vectorstores/Chroma.py index ae2964ea6..aa666f429 100644 --- a/src/backend/base/langflow/components/vectorstores/Chroma.py +++ b/src/backend/base/langflow/components/vectorstores/Chroma.py @@ -22,6 +22,7 @@ class ChromaVectorStoreComponent(LCVectorStoreComponent): display_name: str = "Chroma DB" description: str = "Chroma Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/integrations/vectorstores/chroma" + name = "Chroma" icon = "Chroma" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Couchbase.py b/src/backend/base/langflow/components/vectorstores/Couchbase.py index a25fa0479..8adf642c4 100644 --- a/src/backend/base/langflow/components/vectorstores/Couchbase.py +++ b/src/backend/base/langflow/components/vectorstores/Couchbase.py @@ -13,6 +13,7 @@ class CouchbaseVectorStoreComponent(LCVectorStoreComponent): display_name = "Couchbase" description = "Couchbase Vector Store with search capabilities" documentation = "https://python.langchain.com/v0.1/docs/integrations/document_loaders/couchbase/" + name = "Couchbase" icon = "Couchbase" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/FAISS.py b/src/backend/base/langflow/components/vectorstores/FAISS.py index 24b6e6a76..68aa148d0 100644 --- a/src/backend/base/langflow/components/vectorstores/FAISS.py +++ b/src/backend/base/langflow/components/vectorstores/FAISS.py @@ -17,6 +17,7 @@ class FaissVectorStoreComponent(LCVectorStoreComponent): display_name: str = "FAISS" description: str = "FAISS Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss" + name = "FAISS" icon = "FAISS" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/MongoDBAtlasVector.py b/src/backend/base/langflow/components/vectorstores/MongoDBAtlasVector.py index 4833a4fee..c3bb0666f 100644 --- a/src/backend/base/langflow/components/vectorstores/MongoDBAtlasVector.py +++ b/src/backend/base/langflow/components/vectorstores/MongoDBAtlasVector.py @@ -12,6 +12,7 @@ class MongoVectorStoreComponent(LCVectorStoreComponent): display_name = "MongoDB Atlas" description = "MongoDB Atlas Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas" + name = "MongoDBAtlasVector" icon = "MongoDB" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Pinecone.py b/src/backend/base/langflow/components/vectorstores/Pinecone.py index bf5d0d546..e09711d08 100644 --- a/src/backend/base/langflow/components/vectorstores/Pinecone.py +++ b/src/backend/base/langflow/components/vectorstores/Pinecone.py @@ -20,6 +20,7 @@ class PineconeVectorStoreComponent(LCVectorStoreComponent): display_name = "Pinecone" description = "Pinecone Vector Store with search capabilities" documentation = "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/" + name = "Pinecone" icon = "Pinecone" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Qdrant.py b/src/backend/base/langflow/components/vectorstores/Qdrant.py index 15282c033..bf106cd51 100644 --- a/src/backend/base/langflow/components/vectorstores/Qdrant.py +++ b/src/backend/base/langflow/components/vectorstores/Qdrant.py @@ -21,6 +21,7 @@ class QdrantVectorStoreComponent(LCVectorStoreComponent): display_name = "Qdrant" description = "Qdrant Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/qdrant" + name = "Qdrant" icon = "Qdrant" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Redis.py b/src/backend/base/langflow/components/vectorstores/Redis.py index 9ce42b412..43c50de2b 100644 --- a/src/backend/base/langflow/components/vectorstores/Redis.py +++ b/src/backend/base/langflow/components/vectorstores/Redis.py @@ -17,6 +17,7 @@ class RedisVectorStoreComponent(LCVectorStoreComponent): display_name: str = "Redis" description: str = "Implementation of Vector Store using Redis" documentation = "https://python.langchain.com/docs/integrations/vectorstores/redis" + name = "Redis" inputs = [ SecretStrInput(name="redis_server_url", display_name="Redis Server Connection String", required=True), diff --git a/src/backend/base/langflow/components/vectorstores/SupabaseVectorStore.py b/src/backend/base/langflow/components/vectorstores/SupabaseVectorStore.py index 4c9d89669..d4c210f59 100644 --- a/src/backend/base/langflow/components/vectorstores/SupabaseVectorStore.py +++ b/src/backend/base/langflow/components/vectorstores/SupabaseVectorStore.py @@ -13,6 +13,7 @@ class SupabaseVectorStoreComponent(LCVectorStoreComponent): display_name = "Supabase" description = "Supabase Vector Store with search capabilities" documentation = "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/" + name = "SupabaseVectorStore" icon = "Supabase" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Upstash.py b/src/backend/base/langflow/components/vectorstores/Upstash.py index 951bea020..bc39bde83 100644 --- a/src/backend/base/langflow/components/vectorstores/Upstash.py +++ b/src/backend/base/langflow/components/vectorstores/Upstash.py @@ -12,6 +12,7 @@ class UpstashVectorStoreComponent(LCVectorStoreComponent): display_name = "Upstash" description = "Upstash Vector Store with search capabilities" documentation = "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/" + name = "Upstash" icon = "Upstash" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Vectara.py b/src/backend/base/langflow/components/vectorstores/Vectara.py index 4945eb902..3513ccd98 100644 --- a/src/backend/base/langflow/components/vectorstores/Vectara.py +++ b/src/backend/base/langflow/components/vectorstores/Vectara.py @@ -20,6 +20,7 @@ class VectaraVectorStoreComponent(LCVectorStoreComponent): display_name: str = "Vectara" description: str = "Vectara Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/vectara" + name = "Vectara" icon = "Vectara" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/Weaviate.py b/src/backend/base/langflow/components/vectorstores/Weaviate.py index 2292af672..6a2e69fe9 100644 --- a/src/backend/base/langflow/components/vectorstores/Weaviate.py +++ b/src/backend/base/langflow/components/vectorstores/Weaviate.py @@ -13,6 +13,7 @@ class WeaviateVectorStoreComponent(LCVectorStoreComponent): display_name = "Weaviate" description = "Weaviate Vector Store with search capabilities" documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/weaviate" + name = "Weaviate" icon = "Weaviate" inputs = [ diff --git a/src/backend/base/langflow/components/vectorstores/pgvector.py b/src/backend/base/langflow/components/vectorstores/pgvector.py index e4f1211a5..5b0825d82 100644 --- a/src/backend/base/langflow/components/vectorstores/pgvector.py +++ b/src/backend/base/langflow/components/vectorstores/pgvector.py @@ -12,6 +12,7 @@ class PGVectorStoreComponent(LCVectorStoreComponent): display_name = "PGVector" description = "PGVector Vector Store with search capabilities" documentation = "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvector/" + name = "pgvector" icon = "PGVector" inputs = [ diff --git a/src/backend/base/langflow/custom/custom_component/custom_component.py b/src/backend/base/langflow/custom/custom_component/custom_component.py index 51cbb0b56..eca85c1c8 100644 --- a/src/backend/base/langflow/custom/custom_component/custom_component.py +++ b/src/backend/base/langflow/custom/custom_component/custom_component.py @@ -36,6 +36,7 @@ class CustomComponent(BaseComponent): Represents a custom component in Langflow. Attributes: + name (Optional[str]): This attribute helps the frontend apply styles to known components. display_name (Optional[str]): The display name of the custom component. description (Optional[str]): The description of the custom component. code (Optional[str]): The code of the custom component. @@ -49,6 +50,8 @@ class CustomComponent(BaseComponent): _tree (Optional[dict]): The code tree of the custom component. """ + name: Optional[str] = None + """The name of the component used to styles. Defaults to None.""" display_name: Optional[str] = None """The display name of the component. Defaults to None.""" description: Optional[str] = None diff --git a/src/backend/base/langflow/custom/utils.py b/src/backend/base/langflow/custom/utils.py index 0b2da65f8..c5f2d9f3c 100644 --- a/src/backend/base/langflow/custom/utils.py +++ b/src/backend/base/langflow/custom/utils.py @@ -15,7 +15,6 @@ from langflow.custom.custom_component.component import Component from langflow.custom.directory_reader.utils import ( abuild_custom_component_list_from_path, build_custom_component_list_from_path, - determine_component_name, merge_nested_dicts_with_renaming, ) from langflow.custom.eval import eval_custom_component_code @@ -439,11 +438,11 @@ def create_component_template(component): component_extractor = Component(code=component_code) - component_template, _ = build_custom_component_template(component_extractor) + component_template, component_instance = build_custom_component_template(component_extractor) if not component_template["output_types"] and component_output_types: component_template["output_types"] = component_output_types - return component_template + return component_template, component_instance def build_custom_components(components_paths: List[str]): @@ -554,9 +553,8 @@ def sanitize_field_config(field_config: Union[Dict, Input]): def build_component(component): """Build a single component.""" - component_name = determine_component_name(component) - component_template = create_component_template(component) - + component_template, component_instance = create_component_template(component) + component_name = get_instance_name(component_instance) return component_name, component_template @@ -565,3 +563,10 @@ def get_function(code): function_name = validate.extract_function_name(code) return validate.create_function(code, function_name) + + +def get_instance_name(instance): + name = instance.__class__.__name__ + if hasattr(instance, "name") and instance.name: + name = instance.name + return name diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx index 10e5aa3e4..a2233070e 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx @@ -180,8 +180,12 @@ export default function ParameterComponent({ handleOnNewValueHook(newValue, dbValue, skipSnapshot); }; - const handleNodeClass = (newNodeClass: APIClassType, code?: string): void => { - handleNodeClassHook(newNodeClass, code); + const handleNodeClass = ( + newNodeClass: APIClassType, + code?: string, + type?: string, + ): void => { + handleNodeClassHook(newNodeClass, code, type); }; useEffect(() => { diff --git a/src/frontend/src/CustomNodes/hooks/use-check-code-validity.tsx b/src/frontend/src/CustomNodes/hooks/use-check-code-validity.tsx index bcad57eca..49f6de757 100644 --- a/src/frontend/src/CustomNodes/hooks/use-check-code-validity.tsx +++ b/src/frontend/src/CustomNodes/hooks/use-check-code-validity.tsx @@ -1,6 +1,6 @@ import { useEffect } from "react"; -import { NATIVE_CATEGORIES } from "../../constants/constants"; import { NodeDataType } from "../../types/flow"; +import { nodeNames } from "../../utils/styleUtils"; const useCheckCodeValidity = ( data: NodeDataType, @@ -14,7 +14,7 @@ const useCheckCodeValidity = ( // first check if data.type in NATIVE_CATEGORIES // if not return if ( - !NATIVE_CATEGORIES.includes(types[data.type]) || + !Object.keys(nodeNames).includes(types[data.type]) || !data.node?.template?.code?.value ) return; diff --git a/src/frontend/src/CustomNodes/hooks/use-handle-node-class.tsx b/src/frontend/src/CustomNodes/hooks/use-handle-node-class.tsx index e82c06e72..0827c0b4e 100644 --- a/src/frontend/src/CustomNodes/hooks/use-handle-node-class.tsx +++ b/src/frontend/src/CustomNodes/hooks/use-handle-node-class.tsx @@ -24,7 +24,7 @@ const useHandleNodeClass = ( display_name: newNodeClass.display_name ?? data.node!.display_name, }; if (type) { - newNode.data.node.template[name].type = type; + newNode.data.type = type; } newNode.data.node.template[name].value = code; diff --git a/src/frontend/src/CustomNodes/hooks/use-update-node-code.tsx b/src/frontend/src/CustomNodes/hooks/use-update-node-code.tsx index 1e8e79a1f..beb0430c8 100644 --- a/src/frontend/src/CustomNodes/hooks/use-update-node-code.tsx +++ b/src/frontend/src/CustomNodes/hooks/use-update-node-code.tsx @@ -17,10 +17,9 @@ const useUpdateNodeCode = ( newNode.data = { ...newNode.data, - node: newNodeClass, + node: { ...newNodeClass, edited: false }, description: newNodeClass.description ?? dataNode.description, display_name: newNodeClass.display_name ?? dataNode.display_name, - edited: false, }; if (type) { newNode.data.type = type; diff --git a/src/frontend/src/constants/constants.ts b/src/frontend/src/constants/constants.ts index e74bdd4da..1de79a737 100644 --- a/src/frontend/src/constants/constants.ts +++ b/src/frontend/src/constants/constants.ts @@ -1,6 +1,7 @@ // src/constants/constants.ts import { languageMap } from "../types/components"; +import { nodeNames } from "../utils/styleUtils"; /** * invalid characters for flow name @@ -723,27 +724,6 @@ export const PRIORITY_SIDEBAR_ORDER = [ "vectorstores", "embeddings", ]; -export const NATIVE_CATEGORIES = [ - "inputs", - "outputs", - "prompts", - "data", - "prompt", - "models", - "helpers", - "experimental", - "agents", - "vectorstores", - "retrievers", - "embeddings", - "chains", - "tools", - "memories", - "textsplitters", - "toolkits", - "prototypes", - "langchain_utilities", -]; export const AUTHORIZED_DUPLICATE_REQUESTS = [ "/health", diff --git a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx index 3f1a1baa5..ceb79f5a0 100644 --- a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx @@ -390,7 +390,11 @@ export default function NodeToolbarComponent({ }); }; - const handleNodeClass = (newNodeClass: APIClassType, code?: string): void => { + const handleNodeClass = ( + newNodeClass: APIClassType, + code?: string, + type?: string, + ): void => { if (!data.node) return; if (data.node!.template[name].value !== code) { takeSnapshot(); @@ -406,6 +410,10 @@ export default function NodeToolbarComponent({ display_name: newNodeClass.display_name ?? data.node!.display_name, }; + if (type) { + newNode.data.type = type; + } + newNode.data.node.template[name].value = code; return newNode;