refactor: Update ChatInput and ChatOutput to use Message instead of Record for input and output

This commit is contained in:
ogabrielluiz 2024-06-10 19:00:09 -03:00
commit 4d11c76476
3 changed files with 49 additions and 40 deletions

View file

@ -1,6 +1,6 @@
from langflow.base.io.chat import ChatComponent from langflow.base.io.chat import ChatComponent
from langflow.field_typing import Text from langflow.field_typing import Text
from langflow.schema import Record from langflow.schema.message import Message
from langflow.template import Input, Output from langflow.template import Input, Output
@ -13,7 +13,7 @@ class ChatInput(ChatComponent):
Input( Input(
name="input_value", name="input_value",
type=str, type=str,
display_name="Message", display_name="Text",
multiline=True, multiline=True,
input_types=[], input_types=[],
info="Message to be passed as input.", info="Message to be passed as input.",
@ -34,24 +34,23 @@ class ChatInput(ChatComponent):
] ]
outputs = [ outputs = [
Output(display_name="Message", name="message", method="text_response"), Output(display_name="Message", name="message", method="text_response"),
Output(display_name="Record", name="record", method="record_response"), Output(display_name="Record", name="record", method="message_response"),
] ]
def text_response(self) -> Text: def text_response(self) -> Text:
result = self.input_value result = self.input_value
if self.session_id and isinstance(result, (Record, str)): if self.session_id and isinstance(result, (Message, str)):
self.store_message(result, self.session_id, self.sender, self.sender_name) self.store_message(result, self.session_id, self.sender, self.sender_name)
return result return result
def record_response(self) -> Record: def message_response(self) -> Message:
record = Record( message = Message(
data={ text=self.input_value,
"text": self.input_value, sender=self.sender,
"sender": self.sender, sender_name=self.sender_name,
"sender_name": self.sender_name, session_id=self.session_id,
"session_id": self.session_id,
},
) )
if self.session_id and isinstance(record, (Record, str)): if self.session_id and isinstance(message, (Message, str)):
self.store_message(record, self.session_id, self.sender, self.sender_name) self.store_message(message)
return record self.status = message
return message

View file

@ -1,9 +1,9 @@
from langflow.custom import CustomComponent from langflow.custom import Component
from langflow.field_typing import Input from langflow.field_typing import Input, Output
from langflow.field_typing.prompt import Prompt from langflow.field_typing.prompt import Prompt
class PromptComponent(CustomComponent): class PromptComponent(Component):
display_name: str = "Prompt" display_name: str = "Prompt"
description: str = "Create a prompt template with dynamic variables." description: str = "Create a prompt template with dynamic variables."
icon = "prompts" icon = "prompts"
@ -11,14 +11,26 @@ class PromptComponent(CustomComponent):
def build_config(self): def build_config(self):
return { return {
"template": Input(display_name="Template"), "template": Input(display_name="Template"),
"code": Input(advanced=True),
} }
async def build( inputs = [
Input(name="template", type=Prompt, display_name="Template"),
]
outputs = [
Output(display_name="Prompt", name="prompt", method="build_prompt"),
Output(display_name="Text", name="text", method="format_prompt"),
]
async def format_prompt(self) -> str:
prompt = await self.build_prompt()
formatted_text = prompt.format_text()
self.status = formatted_text
return formatted_text
async def build_prompt(
self, self,
template: Prompt,
**kwargs,
) -> Prompt: ) -> Prompt:
prompt = await Prompt.from_template_and_variables(template, kwargs) prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)
self.status = prompt.format_text() self.status = prompt.format_text()
return prompt return prompt

View file

@ -1,6 +1,6 @@
from langflow.base.io.chat import ChatComponent from langflow.base.io.chat import ChatComponent
from langflow.field_typing import Text from langflow.field_typing import Text
from langflow.schema import Record from langflow.schema.message import Message
from langflow.template import Input, Output from langflow.template import Input, Output
@ -11,7 +11,7 @@ class ChatOutput(ChatComponent):
inputs = [ inputs = [
Input( Input(
name="input_value", type=str, display_name="Message", multiline=True, info="Message to be passed as output." name="input_value", type=str, display_name="Text", multiline=True, info="Message to be passed as output."
), ),
Input( Input(
name="sender", name="sender",
@ -36,26 +36,24 @@ class ChatOutput(ChatComponent):
), ),
] ]
outputs = [ outputs = [
Output(display_name="Message", name="message", method="text_response"), Output(display_name="Text", name="text", method="text_response"),
Output(display_name="Record", name="record", method="record_response"), Output(display_name="Message", name="message", method="message_response"),
] ]
def text_response(self) -> Text: def text_response(self) -> Text:
result = self.input_value result = self.input_value
if self.session_id and isinstance(result, (Record, str)): if self.session_id and isinstance(result, (Message, str)):
self.store_message(result, self.session_id, self.sender, self.sender_name) self.store_message(result, self.session_id, self.sender, self.sender_name)
return result return result
def record_response(self) -> Record: def message_response(self) -> Message:
record = Record( message = Message(
data={ text=self.input_value,
"message": self.input_value, sender=self.sender,
"sender": self.sender, sender_name=self.sender_name,
"sender_name": self.sender_name, session_id=self.session_id,
"session_id": self.session_id,
"template": self.record_template or "",
}
) )
if self.session_id and isinstance(record, (Record, str)): if self.session_id and isinstance(message, (Message, str)):
self.store_message(record, self.session_id, self.sender, self.sender_name) self.store_message(message)
return record self.status = message
return message