from langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES from langflow.base.io.chat import ChatComponent from langflow.inputs import BoolInput from langflow.io import DropdownInput, FileInput, MessageTextInput, MultilineInput, Output from langflow.schema.message import Message from langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_NAME_USER, MESSAGE_SENDER_USER class ChatInput(ChatComponent): display_name = "Chat Input" description = "Get chat inputs from the Playground." icon = "MessagesSquare" name = "ChatInput" inputs = [ MultilineInput( name="input_value", display_name="Text", value="", info="Message to be passed as input.", ), BoolInput( name="should_store_message", display_name="Store Messages", info="Store the message in the history.", value=True, advanced=True, ), DropdownInput( name="sender", display_name="Sender Type", options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER], value=MESSAGE_SENDER_USER, info="Type of sender.", advanced=True, ), MessageTextInput( name="sender_name", display_name="Sender Name", info="Name of the sender.", value=MESSAGE_SENDER_NAME_USER, advanced=True, ), MessageTextInput( name="session_id", display_name="Session ID", info="The session ID of the chat. If empty, the current session ID parameter will be used.", advanced=True, ), FileInput( name="files", display_name="Files", file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES, info="Files to be sent with the message.", advanced=True, is_list=True, ), MessageTextInput( name="background_color", display_name="Background Color", info="The background color of the icon.", advanced=True, ), MessageTextInput( name="chat_icon", display_name="Icon", info="The icon of the message.", advanced=True, ), MessageTextInput( name="text_color", display_name="Text Color", info="The text color of the name", advanced=True, ), ] outputs = [ Output(display_name="Message", name="message", method="message_response"), ] async def message_response(self) -> Message: background_color = self.background_color text_color = self.text_color icon = self.chat_icon message = await Message.create( text=self.input_value, sender=self.sender, sender_name=self.sender_name, session_id=self.session_id, files=self.files, properties={"background_color": background_color, "text_color": text_color, "icon": icon}, ) if self.session_id and isinstance(message, Message) and self.should_store_message: stored_message = await self.send_message( message, ) self.message.value = stored_message message = stored_message self.status = message return message