Update StoreMessageComponent for enhanced message handling

This commit is contained in:
Rodrigo 2024-06-26 12:02:18 -03:00 • committed by Gabriel Luiz Freitas Almeida
commit add2c48ab1
2 changed files with 40 additions and 50 deletions

View file

@ -1,5 +1,5 @@
from langflow.custom import Component from langflow.custom import Component
from langflow.inputs import MessageTextInput, StrInput from langflow.inputs import MessageInput, StrInput
from langflow.schema.message import Message from langflow.schema.message import Message
from langflow.template import Output from langflow.template import Output
from langflow.memory import get_messages, store_message from langflow.memory import get_messages, store_message
@ -11,22 +11,25 @@ class StoreMessageComponent(Component):
icon = "save" icon = "save"
inputs = [ inputs = [
MessageTextInput( MessageInput(
name="message", name="message",
display_name="Message", display_name="Message",
info="The chat message to be stored.", info="The chat message to be stored.",
input_types=["Message", "str"], required=True
required=True,
), ),
StrInput( StrInput(
name="sender", name="sender",
display_name="Sender", display_name="Sender",
info="The sender of the message.", info="The sender of the message.",
value="", value="AI",
advanced=True, advanced=True,
), ),
StrInput( StrInput(
name="sender_name", display_name="Sender Name", info="The name of the sender.", value="", advanced=True name="sender_name",
display_name="Sender Name",
info="The name of the sender.",
value="AI",
advanced=True
), ),
StrInput( StrInput(
name="session_id", name="session_id",
@ -41,26 +44,13 @@ class StoreMessageComponent(Component):
] ]
def store_message(self) -> Message: def store_message(self) -> Message:
if isinstance(self.message, str): message = self.message
if not self.session_id:
raise ValueError("If passing a text, Session ID cannot be empty.")
message = Message(
text=self.message, sender=self.sender, sender_name=self.sender_name, session_id=self.session_id
)
elif isinstance(self.message, Message): message.session_id = self.session_id or message.session_id
message = self.message message.sender = self.sender or message.sender
if self.session_id: message.sender_name = self.sender_name or message.sender_name
message.session_id = self.session_id
if self.sender:
message.sender = self.sender
if self.sender_name:
message.sender_name = self.sender_name
else:
raise ValueError("Message should be either string or Message.")
store_message(message, flow_id=self.graph.flow_id) store_message(message, flow_id=self.graph.flow_id)
stored = get_messages(session_id=message.session_id, sender_name=message.sender_name, sender=message.sender) stored = get_messages(session_id=message.session_id, sender_name=message.sender_name, sender=message.sender)
self.status = stored self.status = stored
return stored return stored

View file

@ -1,31 +1,31 @@
from typing import Union from langflow.custom import Component
from langflow.io import MessageInput
from langflow.schema.message import Message
from langflow.template import Output
from langflow.custom import CustomComponent class PassMessageComponent(Component):
from langflow.field_typing import Text
from langflow.schema import Data
class PassComponent(CustomComponent):
display_name = "Pass" display_name = "Pass"
description = "A pass-through component that forwards the second input while ignoring the first, used for controlling workflow direction." description = "Forwards the input message, unchanged."
field_order = ["ignored_input", "forwarded_input"] icon = "arrow-right"
beta = True
def build_config(self) -> dict: inputs = [
return { MessageInput(
"ignored_input": { name="input_message",
"display_name": "Ignored Input", display_name="Input Message",
"info": "This input is ignored. It's used to control the flow in the graph.", info="The message to be passed forward.",
"input_types": ["Text", "Data"], ),
}, MessageInput(
"forwarded_input": { name="ignored_message",
"display_name": "Input", display_name="Ignored Message",
"info": "This input is forwarded by the component.", info="A second message to be ignored. Used as a workaround for continuity.",
"input_types": ["Text", "Data"], advanced=True
}, ),
} ]
def build(self, ignored_input: Text, forwarded_input: Text) -> Union[Text, Data]: outputs = [
# The ignored_input is not used in the logic, it's just there for graph flow control Output(display_name="Output Message", name="output_message", method="pass_message"),
self.status = forwarded_input ]
return forwarded_input
def pass_message(self) -> Message:
self.status = self.input_message
return self.input_message