Updates PassMessage and StoreMessage components (#2379)
- 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
This commit is contained in:
commit
2b2fca46b9
7 changed files with 108 additions and 55 deletions
28
src/backend/base/langflow/components/helpers/CreateList.py
Normal file
28
src/backend/base/langflow/components/helpers/CreateList.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
from langflow.custom import Component
|
||||
from langflow.inputs import StrInput
|
||||
from langflow.schema import Data
|
||||
from langflow.template import Output
|
||||
|
||||
|
||||
class CreateListComponent(Component):
|
||||
display_name = "Create List"
|
||||
description = "Creates a list of texts."
|
||||
icon = "list"
|
||||
|
||||
inputs = [
|
||||
StrInput(
|
||||
name="texts",
|
||||
display_name="Texts",
|
||||
info="Enter one or more texts.",
|
||||
is_list=True,
|
||||
),
|
||||
]
|
||||
|
||||
outputs = [
|
||||
Output(display_name="Data List", name="list", method="create_list"),
|
||||
]
|
||||
|
||||
def create_list(self) -> list[Data]:
|
||||
data = [Data(text=text) for text in self.texts]
|
||||
self.status = data
|
||||
return data
|
||||
|
|
@ -5,7 +5,7 @@ from langflow.custom import CustomComponent
|
|||
from langflow.schema.dotdict import dotdict
|
||||
|
||||
|
||||
class UUIDGeneratorComponent(CustomComponent):
|
||||
class IDGeneratorComponent(CustomComponent):
|
||||
display_name = "ID Generator"
|
||||
description = "Generates a unique ID."
|
||||
|
||||
|
|
|
|||
|
|
@ -1,22 +1,47 @@
|
|||
from langflow.custom import CustomComponent
|
||||
from langflow.memory import get_messages, store_message
|
||||
from langflow.custom import Component
|
||||
from langflow.inputs import MessageInput, StrInput
|
||||
from langflow.schema.message import Message
|
||||
from langflow.template import Output
|
||||
from langflow.memory import get_messages, store_message
|
||||
|
||||
|
||||
class StoreMessageComponent(CustomComponent):
|
||||
class StoreMessageComponent(Component):
|
||||
display_name = "Store Message"
|
||||
description = "Stores a chat message."
|
||||
description = "Stores a chat message or text."
|
||||
icon = "save"
|
||||
|
||||
def build_config(self):
|
||||
return {
|
||||
"message": {"display_name": "Message"},
|
||||
}
|
||||
inputs = [
|
||||
MessageInput(name="message", display_name="Message", info="The chat message to be stored.", required=True),
|
||||
StrInput(
|
||||
name="sender",
|
||||
display_name="Sender",
|
||||
info="The sender of the message.",
|
||||
value="AI",
|
||||
advanced=True,
|
||||
),
|
||||
StrInput(
|
||||
name="sender_name", display_name="Sender Name", info="The name of the sender.", value="AI", advanced=True
|
||||
),
|
||||
StrInput(
|
||||
name="session_id",
|
||||
display_name="Session ID",
|
||||
info="The session ID of the chat.",
|
||||
value="",
|
||||
),
|
||||
]
|
||||
|
||||
outputs = [
|
||||
Output(display_name="Stored Messages", name="stored_messages", method="store_message"),
|
||||
]
|
||||
|
||||
def store_message(self) -> Message:
|
||||
message = self.message
|
||||
|
||||
message.session_id = self.session_id or message.session_id
|
||||
message.sender = self.sender or message.sender
|
||||
message.sender_name = self.sender_name or message.sender_name
|
||||
|
||||
def build(
|
||||
self,
|
||||
message: Message,
|
||||
) -> Message:
|
||||
store_message(message, flow_id=self.graph.flow_id)
|
||||
self.status = get_messages()
|
||||
|
||||
return message
|
||||
stored = get_messages(session_id=message.session_id, sender_name=message.sender_name, sender=message.sender)
|
||||
self.status = stored
|
||||
return stored
|
||||
|
|
|
|||
|
|
@ -1,22 +1,25 @@
|
|||
from .CombineText import CombineTextComponent
|
||||
from .CustomComponent import CustomComponent
|
||||
from .FilterData import FilterDataComponent
|
||||
from .IDGenerator import UUIDGeneratorComponent
|
||||
from .IDGenerator import IDGeneratorComponent
|
||||
from .Memory import MemoryComponent
|
||||
from .MergeData import MergeDataComponent
|
||||
from .ParseData import ParseDataComponent
|
||||
from .SplitText import SplitTextComponent
|
||||
from .StoreMessage import StoreMessageComponent
|
||||
from .CreateList import CreateListComponent
|
||||
|
||||
|
||||
__all__ = [
|
||||
"CreateListComponent",
|
||||
"CombineTextComponent",
|
||||
"CustomComponent",
|
||||
"FilterDataComponent",
|
||||
"UUIDGeneratorComponent",
|
||||
"IDGeneratorComponent",
|
||||
"MemoryComponent",
|
||||
"MergeDataComponent",
|
||||
"ParseDataComponent",
|
||||
"SplitTextComponent",
|
||||
"StoreMessageComponent",
|
||||
"ListComponent",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -66,21 +66,17 @@ class ConditionalRouterComponent(Component):
|
|||
def true_response(self) -> Message:
|
||||
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
||||
if result:
|
||||
self.stop("false_result")
|
||||
response = self.message if self.message else self.input_text
|
||||
self.status = response
|
||||
return response
|
||||
self.status = self.message
|
||||
return self.message
|
||||
else:
|
||||
self.stop("true_result")
|
||||
return Message()
|
||||
return None
|
||||
|
||||
def false_response(self) -> Message:
|
||||
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
||||
if not result:
|
||||
self.stop("true_result")
|
||||
response = self.message if self.message else self.input_text
|
||||
self.status = response
|
||||
return response
|
||||
self.status = self.message
|
||||
return self.message
|
||||
else:
|
||||
self.stop("false_result")
|
||||
return Message()
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -1,31 +1,32 @@
|
|||
from typing import Union
|
||||
|
||||
from langflow.custom import CustomComponent
|
||||
from langflow.field_typing import Text
|
||||
from langflow.schema import Data
|
||||
from langflow.custom import Component
|
||||
from langflow.io import MessageInput
|
||||
from langflow.schema.message import Message
|
||||
from langflow.template import Output
|
||||
|
||||
|
||||
class PassComponent(CustomComponent):
|
||||
class PassMessageComponent(Component):
|
||||
display_name = "Pass"
|
||||
description = "A pass-through component that forwards the second input while ignoring the first, used for controlling workflow direction."
|
||||
field_order = ["ignored_input", "forwarded_input"]
|
||||
beta = True
|
||||
description = "Forwards the input message, unchanged."
|
||||
icon = "arrow-right"
|
||||
|
||||
def build_config(self) -> dict:
|
||||
return {
|
||||
"ignored_input": {
|
||||
"display_name": "Ignored Input",
|
||||
"info": "This input is ignored. It's used to control the flow in the graph.",
|
||||
"input_types": ["Text", "Data"],
|
||||
},
|
||||
"forwarded_input": {
|
||||
"display_name": "Input",
|
||||
"info": "This input is forwarded by the component.",
|
||||
"input_types": ["Text", "Data"],
|
||||
},
|
||||
}
|
||||
inputs = [
|
||||
MessageInput(
|
||||
name="input_message",
|
||||
display_name="Input Message",
|
||||
info="The message to be passed forward.",
|
||||
),
|
||||
MessageInput(
|
||||
name="ignored_message",
|
||||
display_name="Ignored Message",
|
||||
info="A second message to be ignored. Used as a workaround for continuity.",
|
||||
advanced=True,
|
||||
),
|
||||
]
|
||||
|
||||
def build(self, ignored_input: Text, forwarded_input: Text) -> Union[Text, Data]:
|
||||
# The ignored_input is not used in the logic, it's just there for graph flow control
|
||||
self.status = forwarded_input
|
||||
return forwarded_input
|
||||
outputs = [
|
||||
Output(display_name="Output Message", name="output_message", method="pass_message"),
|
||||
]
|
||||
|
||||
def pass_message(self) -> Message:
|
||||
self.status = self.input_message
|
||||
return self.input_message
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ from langflow.schema import Data
|
|||
|
||||
def test_uuid_generator_component():
|
||||
# Arrange
|
||||
uuid_generator_component = helpers.UUIDGeneratorComponent()
|
||||
uuid_generator_component = helpers.IDGeneratorComponent()
|
||||
uuid_generator_component.code = open(helpers.IDGenerator.__file__, "r").read()
|
||||
|
||||
frontend_node, _ = build_custom_component_template(uuid_generator_component)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue