Merge remote-tracking branch 'origin/two_edges' into new_Group
This commit is contained in:
commit
3f1cc76067
17 changed files with 150 additions and 95 deletions
|
|
@ -43,8 +43,8 @@ class TextOperatorComponent(Component):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="True Result", method="result_response"),
|
Output(display_name="True Result", name="true_result", method="result_response"),
|
||||||
Output(name="False Result", method="result_response"),
|
Output(display_name="False Result", name="false_result", method="result_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def true_response(self) -> Union[Text, Record]:
|
def true_response(self) -> Union[Text, Record]:
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,8 @@ class ChatInput(ChatComponent):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Message", method="text_response"),
|
Output(display_name="Message", name="message", method="text_response"),
|
||||||
Output(name="Record", method="record_response"),
|
Output(display_name="Record", name="record", method="record_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def text_response(self) -> Text:
|
def text_response(self) -> Text:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class TextInput(TextComponent):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Text", method="text_response"),
|
Output(display_name="Text", name="text", method="text_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def text_response(self) -> Text:
|
def text_response(self) -> Text:
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ class ChatOutput(ChatComponent):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Message", method="text_response"),
|
Output(display_name="Message", name="message", method="text_response"),
|
||||||
Output(name="Record", method="record_response"),
|
Output(display_name="Record", name="record", method="record_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def text_response(self) -> Text:
|
def text_response(self) -> Text:
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ class RecordsOutput(Component):
|
||||||
Input(name="input_value", type=Record, display_name="Record Input"),
|
Input(name="input_value", type=Record, display_name="Record Input"),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Record", method="record_response"),
|
Output(display_name="Record", name="record", method="record_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def record_response(self) -> Record:
|
def record_response(self) -> Record:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class TextOutput(TextComponent):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Text", method="text_response"),
|
Output(display_name="Text", name="text", method="text_response"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def text_response(self) -> Text:
|
def text_response(self) -> Text:
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,8 @@ class Component(CustomComponent):
|
||||||
|
|
||||||
def _set_outputs(self, outputs: List[dict]):
|
def _set_outputs(self, outputs: List[dict]):
|
||||||
self.outputs = [Output(**output) for output in outputs]
|
self.outputs = [Output(**output) for output in outputs]
|
||||||
|
for output in self.outputs:
|
||||||
|
setattr(self, output.name, output)
|
||||||
|
|
||||||
async def build_results(self, vertex: "Vertex"):
|
async def build_results(self, vertex: "Vertex"):
|
||||||
_results = {}
|
_results = {}
|
||||||
|
|
@ -69,14 +71,13 @@ class Component(CustomComponent):
|
||||||
for output in self.outputs:
|
for output in self.outputs:
|
||||||
# Build the output if it's connected to some other vertex
|
# Build the output if it's connected to some other vertex
|
||||||
# or if it's not connected to any vertex
|
# or if it's not connected to any vertex
|
||||||
self.output = output
|
if not vertex.outgoing_edges or output.display_name in vertex.edges_source_names:
|
||||||
if not vertex.outgoing_edges or output.name in vertex.edges_source_names:
|
|
||||||
method: Callable | Awaitable = getattr(self, output.method)
|
method: Callable | Awaitable = getattr(self, output.method)
|
||||||
result = method()
|
result = method()
|
||||||
# If the method is asynchronous, we need to await it
|
# If the method is asynchronous, we need to await it
|
||||||
if inspect.iscoroutinefunction(method):
|
if inspect.iscoroutinefunction(method):
|
||||||
result = await result
|
result = await result
|
||||||
_results[output.name] = result
|
_results[output.display_name] = result
|
||||||
self._results = _results
|
self._results = _results
|
||||||
return _results
|
return _results
|
||||||
|
|
||||||
|
|
@ -109,6 +110,7 @@ class Component(CustomComponent):
|
||||||
"""
|
"""
|
||||||
# This function is similar to build_config, but it will process the inputs
|
# This function is similar to build_config, but it will process the inputs
|
||||||
# and return them as a dict with keys being the Input.name and values being the Input.model_dump()
|
# and return them as a dict with keys being the Input.name and values being the Input.model_dump()
|
||||||
|
self.inputs = self.template_config.get("inputs", [])
|
||||||
if not self.inputs:
|
if not self.inputs:
|
||||||
return {}
|
return {}
|
||||||
build_config = {_input.name: _input.model_dump(by_alias=True, exclude_none=True) for _input in self.inputs}
|
build_config = {_input.name: _input.model_dump(by_alias=True, exclude_none=True) for _input in self.inputs}
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,8 @@ def extract_type_from_optional(field_type):
|
||||||
Returns:
|
Returns:
|
||||||
str: The extracted type, or an empty string if no type was found.
|
str: The extracted type, or an empty string if no type was found.
|
||||||
"""
|
"""
|
||||||
|
if "optional" not in field_type.lower():
|
||||||
|
return field_type
|
||||||
match = re.search(r"\[(.*?)\]$", field_type)
|
match = re.search(r"\[(.*?)\]$", field_type)
|
||||||
return match[1] if match else field_type
|
return match[1] if match else field_type
|
||||||
|
|
||||||
|
|
@ -249,10 +251,16 @@ def get_field_dict(field: Union[Input, dict]):
|
||||||
return field
|
return field
|
||||||
|
|
||||||
|
|
||||||
def run_build_inputs(custom_component: Component, user_id: Optional[Union[str, UUID]] = None):
|
def run_build_inputs(
|
||||||
|
frontend_node: ComponentFrontendNode,
|
||||||
|
custom_component: Component,
|
||||||
|
user_id: Optional[Union[str, UUID]] = None,
|
||||||
|
):
|
||||||
"""Run the build inputs of a custom component."""
|
"""Run the build inputs of a custom component."""
|
||||||
try:
|
try:
|
||||||
return custom_component.build_inputs(user_id=user_id)
|
field_config = custom_component.build_inputs(user_id=user_id)
|
||||||
|
add_extra_fields(frontend_node, field_config, field_config.values())
|
||||||
|
return field_config
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.error(f"Error running build inputs: {exc}")
|
logger.error(f"Error running build inputs: {exc}")
|
||||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||||
|
|
@ -326,14 +334,18 @@ def build_custom_component_template_from_inputs(
|
||||||
custom_component: Component, user_id: Optional[Union[str, UUID]] = None
|
custom_component: Component, user_id: Optional[Union[str, UUID]] = None
|
||||||
):
|
):
|
||||||
# The List of Inputs fills the role of the build_config and the entrypoint_args
|
# The List of Inputs fills the role of the build_config and the entrypoint_args
|
||||||
frontend_node = ComponentFrontendNode.from_inputs(**custom_component.template_config)
|
field_config = custom_component.template_config
|
||||||
|
frontend_node = ComponentFrontendNode.from_inputs(**field_config)
|
||||||
field_config = run_build_inputs(
|
field_config = run_build_inputs(
|
||||||
custom_component,
|
frontend_node=frontend_node,
|
||||||
|
custom_component=custom_component,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
)
|
)
|
||||||
frontend_node = add_code_field(frontend_node, custom_component.code, field_config.get("code", {}))
|
frontend_node = add_code_field(frontend_node, custom_component.code, field_config.get("code", {}))
|
||||||
# But we now need to calculate the return_type of the methods in the outputs
|
# But we now need to calculate the return_type of the methods in the outputs
|
||||||
for output in frontend_node.outputs:
|
for output in frontend_node.outputs:
|
||||||
|
if output.types:
|
||||||
|
continue
|
||||||
return_types = custom_component.get_method_return_type(output.method)
|
return_types = custom_component.get_method_return_type(output.method)
|
||||||
return_types = [format_type(return_type) for return_type in return_types]
|
return_types = [format_type(return_type) for return_type in return_types]
|
||||||
output.add_types(return_types)
|
output.add_types(return_types)
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -402,6 +403,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -438,7 +440,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -497,7 +499,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "Machine",
|
"value": "Machine",
|
||||||
|
|
@ -597,7 +599,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -605,7 +607,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -639,7 +641,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -674,7 +676,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "User",
|
"value": "User",
|
||||||
|
|
@ -773,7 +775,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -781,7 +783,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -859,7 +861,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source": "ChatInput-P3fgL",
|
"source": "ChatInput-P3fgL",
|
||||||
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-P3fgL\", \"output_types\": [\"Text\"], \"name\": \"Message\"}",
|
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-P3fgL\", \"output_types\": [\"Text\"], \"name\": \"message\"}",
|
||||||
"target": "Prompt-uxBqP",
|
"target": "Prompt-uxBqP",
|
||||||
"targetHandle": "{œfieldNameœ:œuser_inputœ,œidœ:œPrompt-uxBqPœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œuser_inputœ,œidœ:œPrompt-uxBqPœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -880,7 +882,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Message"
|
"name": "message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -264,6 +265,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Record",
|
"name": "Record",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -298,7 +300,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -357,7 +359,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -457,7 +459,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -465,7 +467,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -746,6 +748,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -840,6 +843,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Record",
|
"name": "Record",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -296,7 +297,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -331,7 +332,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -430,7 +431,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -438,7 +439,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -472,7 +473,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -531,7 +532,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -630,7 +631,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -638,7 +639,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -924,6 +925,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -944,7 +946,7 @@
|
||||||
"edges": [
|
"edges": [
|
||||||
{
|
{
|
||||||
"source": "ChatInput-MsSJ9",
|
"source": "ChatInput-MsSJ9",
|
||||||
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-MsSJ9\", \"output_types\": [\"Text\"], \"name\": \"Message\"}",
|
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-MsSJ9\", \"output_types\": [\"Text\"], \"name\": \"message\"}",
|
||||||
"target": "Prompt-tHwPf",
|
"target": "Prompt-tHwPf",
|
||||||
"targetHandle": "{œfieldNameœ:œQuestionœ,œidœ:œPrompt-tHwPfœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œQuestionœ,œidœ:œPrompt-tHwPfœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -965,7 +967,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Message"
|
"name": "message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -57,7 +57,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -156,7 +156,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -164,7 +164,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -198,7 +198,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -257,7 +257,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -356,7 +356,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -364,7 +364,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -578,6 +578,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -735,6 +736,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1023,6 +1025,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1184,7 +1187,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source": "ChatInput-t7F8v",
|
"source": "ChatInput-t7F8v",
|
||||||
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-t7F8v\", \"output_types\": [\"Text\"], \"name\": \"Message\"}",
|
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-t7F8v\", \"output_types\": [\"Text\"], \"name\": \"message\"}",
|
||||||
"target": "Prompt-ODkUx",
|
"target": "Prompt-ODkUx",
|
||||||
"targetHandle": "{œfieldNameœ:œuser_messageœ,œidœ:œPrompt-ODkUxœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œuser_messageœ,œidœ:œPrompt-ODkUxœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -1205,7 +1208,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Message"
|
"name": "message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -244,6 +245,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -276,7 +278,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -335,7 +337,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -435,7 +437,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -443,7 +445,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -473,7 +475,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -532,7 +534,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -632,7 +634,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -640,7 +642,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -669,7 +671,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\nfrom langflow.template import Input, Output\n\n\nclass TextInput(TextComponent):\n display_name = \"Text Input\"\n description = \"Get text inputs from the Playground.\"\n icon = \"type\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Value\",\n info=\"Text or Record to be passed as input.\",\n input_types=[\"Record\", \"Text\"],\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n multiline=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(name=\"Text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Text:\n return self.build(input_value=self.input_value, record_template=self.record_template)\n",
|
"value": "from langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\nfrom langflow.template import Input, Output\n\n\nclass TextInput(TextComponent):\n display_name = \"Text Input\"\n description = \"Get text inputs from the Playground.\"\n icon = \"type\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Value\",\n info=\"Text or Record to be passed as input.\",\n input_types=[\"Record\", \"Text\"],\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n multiline=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Text:\n return self.build(input_value=self.input_value, record_template=self.record_template)\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -753,7 +755,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Text",
|
"name": "text",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -1147,6 +1149,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1541,6 +1544,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1561,7 +1565,7 @@
|
||||||
"edges": [
|
"edges": [
|
||||||
{
|
{
|
||||||
"source": "TextInput-sptaH",
|
"source": "TextInput-sptaH",
|
||||||
"sourceHandle": "{\"dataType\": \"TextInput\", \"id\": \"TextInput-sptaH\", \"output_types\": [\"Text\"], \"name\": \"Text\"}",
|
"sourceHandle": "{\"dataType\": \"TextInput\", \"id\": \"TextInput-sptaH\", \"output_types\": [\"Text\"], \"name\": \"text\"}",
|
||||||
"target": "Prompt-amqBu",
|
"target": "Prompt-amqBu",
|
||||||
"targetHandle": "{œfieldNameœ:œdocumentœ,œidœ:œPrompt-amqBuœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œdocumentœ,œidœ:œPrompt-amqBuœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -1582,7 +1586,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Text"
|
"name": "text"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -154,7 +154,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -162,7 +162,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -305,7 +305,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": [],
|
"value": [],
|
||||||
|
|
@ -441,7 +441,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": [
|
"value": [
|
||||||
|
|
@ -819,6 +819,7 @@
|
||||||
"Embeddings"
|
"Embeddings"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Embeddings",
|
"name": "Embeddings",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1101,6 +1102,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1256,6 +1258,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Text",
|
"name": "Text",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1292,7 +1295,7 @@
|
||||||
"list": false,
|
"list": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": true,
|
"multiline": true,
|
||||||
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(name=\"Message\", method=\"text_response\"),\n Output(name=\"Record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
"value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n",
|
||||||
"fileTypes": [],
|
"fileTypes": [],
|
||||||
"file_path": "",
|
"file_path": "",
|
||||||
"password": false,
|
"password": false,
|
||||||
|
|
@ -1351,7 +1354,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|
@ -1451,7 +1454,7 @@
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"selected": "Text",
|
"selected": "Text",
|
||||||
"name": "Message",
|
"name": "message",
|
||||||
"method": "text_response"
|
"method": "text_response"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -1459,7 +1462,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": "Record",
|
"selected": "Record",
|
||||||
"name": "Record",
|
"name": "record",
|
||||||
"method": "record_response"
|
"method": "record_response"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -1587,6 +1590,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Record",
|
"name": "Record",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -1743,6 +1747,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Record",
|
"name": "Record",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -2206,6 +2211,7 @@
|
||||||
"Record"
|
"Record"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Record",
|
"name": "Record",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -2619,6 +2625,7 @@
|
||||||
"VectorStore"
|
"VectorStore"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "VectorStore",
|
"name": "VectorStore",
|
||||||
"method": null
|
"method": null
|
||||||
},
|
},
|
||||||
|
|
@ -2627,6 +2634,7 @@
|
||||||
"BaseRetriever"
|
"BaseRetriever"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "BaseRetriever",
|
"name": "BaseRetriever",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -2658,7 +2666,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": [],
|
"value": [],
|
||||||
|
|
@ -2794,7 +2802,7 @@
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"required": false,
|
"required": false,
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"list": false,
|
"list": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
"multiline": false,
|
"multiline": false,
|
||||||
"value": [
|
"value": [
|
||||||
|
|
@ -3172,6 +3180,7 @@
|
||||||
"Embeddings"
|
"Embeddings"
|
||||||
],
|
],
|
||||||
"selected": null,
|
"selected": null,
|
||||||
|
"display_name": null,
|
||||||
"name": "Embeddings",
|
"name": "Embeddings",
|
||||||
"method": null
|
"method": null
|
||||||
}
|
}
|
||||||
|
|
@ -3226,7 +3235,7 @@
|
||||||
{
|
{
|
||||||
"source": "ChatInput-yxMKE",
|
"source": "ChatInput-yxMKE",
|
||||||
"target": "Prompt-xeI6K",
|
"target": "Prompt-xeI6K",
|
||||||
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"Message\"}",
|
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"message\"}",
|
||||||
"targetHandle": "{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"id": "reactflow__edge-ChatInput-yxMKE{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ,œRecordœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-yxMKEœ}-Prompt-xeI6K{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
"id": "reactflow__edge-ChatInput-yxMKE{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ,œRecordœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-yxMKEœ}-Prompt-xeI6K{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -3247,7 +3256,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Message"
|
"name": "message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
@ -3376,7 +3385,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source": "ChatInput-yxMKE",
|
"source": "ChatInput-yxMKE",
|
||||||
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"Message\"}",
|
"sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"message\"}",
|
||||||
"target": "AstraDBSearch-41nRz",
|
"target": "AstraDBSearch-41nRz",
|
||||||
"targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œAstraDBSearch-41nRzœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}",
|
"targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œAstraDBSearch-41nRzœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}",
|
||||||
"data": {
|
"data": {
|
||||||
|
|
@ -3394,7 +3403,7 @@
|
||||||
"output_types": [
|
"output_types": [
|
||||||
"Text"
|
"Text"
|
||||||
],
|
],
|
||||||
"name": "Message"
|
"name": "message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
|
from types import GenericAlias
|
||||||
from typing import Any, Callable, Optional, Union
|
from typing import Any, Callable, Optional, Union
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer, model_validator
|
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer, model_validator
|
||||||
|
|
||||||
|
from langflow.field_typing import Text
|
||||||
from langflow.field_typing.range_spec import RangeSpec
|
from langflow.field_typing.range_spec import RangeSpec
|
||||||
from langflow.helpers.custom import format_type
|
|
||||||
|
|
||||||
|
|
||||||
class Input(BaseModel):
|
class Input(BaseModel):
|
||||||
model_config = ConfigDict()
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
||||||
|
|
||||||
field_type: str = Field(
|
field_type: str | type | None = Field(default=str, serialization_alias="type")
|
||||||
default="str",
|
|
||||||
serialization_alias="type",
|
|
||||||
)
|
|
||||||
"""The type of field this is. Default is a string."""
|
"""The type of field this is. Default is a string."""
|
||||||
|
|
||||||
required: bool = False
|
required: bool = False
|
||||||
|
|
@ -86,10 +84,10 @@ class Input(BaseModel):
|
||||||
def serialize_model(self, handler):
|
def serialize_model(self, handler):
|
||||||
result = handler(self)
|
result = handler(self)
|
||||||
# If the field is str, we add the Text input type
|
# If the field is str, we add the Text input type
|
||||||
if self.field_type in ["str", "Text"]:
|
if self.field_type in [str, Text]:
|
||||||
if "input_types" not in result:
|
if "input_types" not in result:
|
||||||
result["input_types"] = ["Text"]
|
result["input_types"] = ["Text"]
|
||||||
if self.field_type == "Text":
|
if self.field_type == Text:
|
||||||
result["type"] = "str"
|
result["type"] = "str"
|
||||||
else:
|
else:
|
||||||
result["type"] = self.field_type
|
result["type"] = self.field_type
|
||||||
|
|
@ -111,15 +109,15 @@ class Input(BaseModel):
|
||||||
# If the user passes CustomComponent as a type insteado of "CustomComponent" we need to convert it to a string
|
# If the user passes CustomComponent as a type insteado of "CustomComponent" we need to convert it to a string
|
||||||
# this should be done for all types
|
# this should be done for all types
|
||||||
# How to check if v is a type?
|
# How to check if v is a type?
|
||||||
if isinstance(v, type):
|
if isinstance(v, (type, GenericAlias)):
|
||||||
return format_type(v)
|
return str(v)
|
||||||
elif not isinstance(v, str):
|
elif not isinstance(v, str):
|
||||||
raise ValueError(f"type must be a string or a type, not {type(v)}")
|
raise ValueError(f"type must be a string or a type, not {type(v)}")
|
||||||
return v
|
return v
|
||||||
|
|
||||||
@field_serializer("field_type")
|
@field_serializer("field_type")
|
||||||
def serialize_field_type(self, value, _info):
|
def serialize_field_type(self, value, _info):
|
||||||
if value == "float" and self.range_spec is None:
|
if value == float and self.range_spec is None:
|
||||||
self.range_spec = RangeSpec()
|
self.range_spec = RangeSpec()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
@ -152,7 +150,10 @@ class Output(BaseModel):
|
||||||
selected: Optional[str] = Field(default=None, serialization_alias="selected")
|
selected: Optional[str] = Field(default=None, serialization_alias="selected")
|
||||||
"""The selected output type for the field."""
|
"""The selected output type for the field."""
|
||||||
|
|
||||||
name: str = Field(default="", serialization_alias="name")
|
display_name: Optional[str] = Field(default=None, serialization_alias="name")
|
||||||
|
"""The display name of the field."""
|
||||||
|
|
||||||
|
name: str = Field(default=None, serialization_alias="name")
|
||||||
"""The name of the field."""
|
"""The name of the field."""
|
||||||
|
|
||||||
method: Optional[str] = Field(default=None, serialization_alias="method")
|
method: Optional[str] = Field(default=None, serialization_alias="method")
|
||||||
|
|
@ -168,3 +169,18 @@ class Output(BaseModel):
|
||||||
def set_selected(self):
|
def set_selected(self):
|
||||||
if not self.selected:
|
if not self.selected:
|
||||||
self.selected = self.types[0]
|
self.selected = self.types[0]
|
||||||
|
|
||||||
|
@field_validator("display_name", mode="before")
|
||||||
|
def validate_display_name(cls, v, info):
|
||||||
|
if not v:
|
||||||
|
if info.data.get("name"):
|
||||||
|
return info.data["name"]
|
||||||
|
else:
|
||||||
|
raise ValueError("If display_name is not set, name must be set")
|
||||||
|
return v
|
||||||
|
|
||||||
|
@model_serializer(mode="wrap")
|
||||||
|
def serialize_model(self, handler):
|
||||||
|
result = handler(self)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ class MultipleOutputsComponent(Component):
|
||||||
Input(display_name="Number", name="number", field_type=int),
|
Input(display_name="Number", name="number", field_type=int),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Certain Output", method="certain_output"),
|
Output(display_name="Certain Output", name="certain_output", method="certain_output"),
|
||||||
Output(name="Other Output", method="other_output"),
|
Output(display_name="Other Output", name="other_output", method="other_output"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def certain_output(self) -> str:
|
def certain_output(self) -> str:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
|
from random import randint
|
||||||
|
|
||||||
from langflow.custom import Component
|
from langflow.custom import Component
|
||||||
from langflow.template.field.base import Input, Output
|
from langflow.template.field.base import Input, Output
|
||||||
from random import randint
|
|
||||||
|
|
||||||
|
|
||||||
class MultipleOutputsComponent(Component):
|
class MultipleOutputsComponent(Component):
|
||||||
|
|
@ -9,8 +10,8 @@ class MultipleOutputsComponent(Component):
|
||||||
Input(display_name="Number", name="number", field_type=int),
|
Input(display_name="Number", name="number", field_type=int),
|
||||||
]
|
]
|
||||||
outputs = [
|
outputs = [
|
||||||
Output(name="Certain Output", method="certain_output"),
|
Output(display_name="Certain Output", name="certain_output", method="certain_output"),
|
||||||
Output(name="Other Output", method="other_output"),
|
Output(display_name="Other Output", name="other_output", method="other_output"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def certain_output(self) -> int:
|
def certain_output(self) -> int:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue