Merge branch 'cz/fix-messages-deleting-error' of https://github.com/langflow-ai/langflow into cz/fix-messages-deleting-error
This commit is contained in:
commit
5cf24f0ea4
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
|
from langflow.schema.dotdict import dotdict
|
||||||
|
|
||||||
|
|
||||||
class UUIDGeneratorComponent(CustomComponent):
|
class IDGeneratorComponent(CustomComponent):
|
||||||
display_name = "ID Generator"
|
display_name = "ID Generator"
|
||||||
description = "Generates a unique ID."
|
description = "Generates a unique ID."
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,47 @@
|
||||||
from langflow.custom import CustomComponent
|
from langflow.custom import Component
|
||||||
from langflow.memory import get_messages, store_message
|
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.memory import get_messages, store_message
|
||||||
|
|
||||||
|
|
||||||
class StoreMessageComponent(CustomComponent):
|
class StoreMessageComponent(Component):
|
||||||
display_name = "Store Message"
|
display_name = "Store Message"
|
||||||
description = "Stores a chat message."
|
description = "Stores a chat message or text."
|
||||||
|
icon = "save"
|
||||||
|
|
||||||
def build_config(self):
|
inputs = [
|
||||||
return {
|
MessageInput(name="message", display_name="Message", info="The chat message to be stored.", required=True),
|
||||||
"message": {"display_name": "Message"},
|
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)
|
store_message(message, flow_id=self.graph.flow_id)
|
||||||
self.status = get_messages()
|
stored = get_messages(session_id=message.session_id, sender_name=message.sender_name, sender=message.sender)
|
||||||
|
self.status = stored
|
||||||
return message
|
return stored
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
from .CombineText import CombineTextComponent
|
from .CombineText import CombineTextComponent
|
||||||
from .CustomComponent import CustomComponent
|
from .CustomComponent import CustomComponent
|
||||||
from .FilterData import FilterDataComponent
|
from .FilterData import FilterDataComponent
|
||||||
from .IDGenerator import UUIDGeneratorComponent
|
from .IDGenerator import IDGeneratorComponent
|
||||||
from .Memory import MemoryComponent
|
from .Memory import MemoryComponent
|
||||||
from .MergeData import MergeDataComponent
|
from .MergeData import MergeDataComponent
|
||||||
from .ParseData import ParseDataComponent
|
from .ParseData import ParseDataComponent
|
||||||
from .SplitText import SplitTextComponent
|
from .SplitText import SplitTextComponent
|
||||||
from .StoreMessage import StoreMessageComponent
|
from .StoreMessage import StoreMessageComponent
|
||||||
|
from .CreateList import CreateListComponent
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
"CreateListComponent",
|
||||||
"CombineTextComponent",
|
"CombineTextComponent",
|
||||||
"CustomComponent",
|
"CustomComponent",
|
||||||
"FilterDataComponent",
|
"FilterDataComponent",
|
||||||
"UUIDGeneratorComponent",
|
"IDGeneratorComponent",
|
||||||
"MemoryComponent",
|
"MemoryComponent",
|
||||||
"MergeDataComponent",
|
"MergeDataComponent",
|
||||||
"ParseDataComponent",
|
"ParseDataComponent",
|
||||||
"SplitTextComponent",
|
"SplitTextComponent",
|
||||||
"StoreMessageComponent",
|
"StoreMessageComponent",
|
||||||
|
"ListComponent",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -66,21 +66,17 @@ class ConditionalRouterComponent(Component):
|
||||||
def true_response(self) -> Message:
|
def true_response(self) -> Message:
|
||||||
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
||||||
if result:
|
if result:
|
||||||
self.stop("false_result")
|
self.status = self.message
|
||||||
response = self.message if self.message else self.input_text
|
return self.message
|
||||||
self.status = response
|
|
||||||
return response
|
|
||||||
else:
|
else:
|
||||||
self.stop("true_result")
|
self.stop("true_result")
|
||||||
return Message()
|
return None
|
||||||
|
|
||||||
def false_response(self) -> Message:
|
def false_response(self) -> Message:
|
||||||
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
|
||||||
if not result:
|
if not result:
|
||||||
self.stop("true_result")
|
self.status = self.message
|
||||||
response = self.message if self.message else self.input_text
|
return self.message
|
||||||
self.status = response
|
|
||||||
return response
|
|
||||||
else:
|
else:
|
||||||
self.stop("false_result")
|
self.stop("false_result")
|
||||||
return Message()
|
return None
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,32 @@
|
||||||
from typing import Union
|
from langflow.custom import Component
|
||||||
|
from langflow.io import MessageInput
|
||||||
from langflow.custom import CustomComponent
|
from langflow.schema.message import Message
|
||||||
from langflow.field_typing import Text
|
from langflow.template import Output
|
||||||
from langflow.schema import Data
|
|
||||||
|
|
||||||
|
|
||||||
class PassComponent(CustomComponent):
|
class PassMessageComponent(Component):
|
||||||
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
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ from langflow.schema import Data
|
||||||
|
|
||||||
def test_uuid_generator_component():
|
def test_uuid_generator_component():
|
||||||
# Arrange
|
# Arrange
|
||||||
uuid_generator_component = helpers.UUIDGeneratorComponent()
|
uuid_generator_component = helpers.IDGeneratorComponent()
|
||||||
uuid_generator_component.code = open(helpers.IDGenerator.__file__, "r").read()
|
uuid_generator_component.code = open(helpers.IDGenerator.__file__, "r").read()
|
||||||
|
|
||||||
frontend_node, _ = build_custom_component_template(uuid_generator_component)
|
frontend_node, _ = build_custom_component_template(uuid_generator_component)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue