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

View file

@ -1,9 +1,9 @@
from langflow.custom import CustomComponent
from langflow.field_typing import Input
from langflow.custom import Component
from langflow.field_typing import Input, Output
from langflow.field_typing.prompt import Prompt
class PromptComponent(CustomComponent):
class PromptComponent(Component):
display_name: str = "Prompt"
description: str = "Create a prompt template with dynamic variables."
icon = "prompts"
@ -11,14 +11,26 @@ class PromptComponent(CustomComponent):
def build_config(self):
return {
"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,
template: Prompt,
**kwargs,
) -> 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()
return prompt

View file

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