/
artctvcode
/
Langflow-Gigachat
Обзор
Документация
Войти
/
artctvcode
/
Langflow-Gigachat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
modules/Prompting.json
1 433 строки
70 KB
Marakya
Add modules and components
09 сен 2025, 15:48
09 сен 2025, 15:48
1a1fd75
Код
Авторство
О чём код?
{ "data": { "edges": [ { "animated": false, "className": "", "data": { "sourceHandle": { "dataType": "ParserComponent", "id": "ParserComponent-yT6rd", "name": "parsed_text", "output_types": [ "Message" ] }, "targetHandle": { "fieldName": "input_value", "id": "ChatOutput-VVIDN", "inputTypes": [ "Data", "DataFrame", "Message" ], "type": "other" } }, "id": "reactflow__edge-ParserComponent-yT6rd{œdataTypeœ:œParserComponentœ,œidœ:œParserComponent-yT6rdœ,œnameœ:œparsed_textœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-VVIDN{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-VVIDNœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œotherœ}", "selected": false, "source": "ParserComponent-yT6rd", "sourceHandle": "{œdataTypeœ:œParserComponentœ,œidœ:œParserComponent-yT6rdœ,œnameœ:œparsed_textœ,œoutput_typesœ:[œMessageœ]}", "target": "ChatOutput-VVIDN", "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-VVIDNœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œotherœ}" }, { "className": "", "data": { "sourceHandle": { "dataType": "ChatInput", "id": "ChatInput-ePrVW", "name": "message", "output_types": [ "Message" ] }, "targetHandle": { "fieldName": "input_message", "id": "YandexGPT-M6quV", "inputTypes": [ "Message" ], "type": "str" } }, "id": "xy-edge__ChatInput-ePrVW{œdataTypeœ:œChatInputœ,œidœ:œChatInput-ePrVWœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-YandexGPT-M6quV{œfieldNameœ:œinput_messageœ,œidœ:œYandexGPT-M6quVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "source": "ChatInput-ePrVW", "sourceHandle": "{œdataTypeœ:œChatInputœ,œidœ:œChatInput-ePrVWœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}", "target": "YandexGPT-M6quV", "targetHandle": "{œfieldNameœ:œinput_messageœ,œidœ:œYandexGPT-M6quVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}" }, { "className": "", "data": { "sourceHandle": { "dataType": "YandexGPT", "id": "YandexGPT-M6quV", "name": "output", "output_types": [ "Data" ] }, "targetHandle": { "fieldName": "input_data", "id": "ParserComponent-yT6rd", "inputTypes": [ "DataFrame", "Data" ], "type": "other" } }, "id": "xy-edge__YandexGPT-M6quV{œdataTypeœ:œYandexGPTœ,œidœ:œYandexGPT-M6quVœ,œnameœ:œoutputœ,œoutput_typesœ:[œDataœ]}-ParserComponent-yT6rd{œfieldNameœ:œinput_dataœ,œidœ:œParserComponent-yT6rdœ,œinputTypesœ:[œDataFrameœ,œDataœ],œtypeœ:œotherœ}", "source": "YandexGPT-M6quV", "sourceHandle": "{œdataTypeœ:œYandexGPTœ,œidœ:œYandexGPT-M6quVœ,œnameœ:œoutputœ,œoutput_typesœ:[œDataœ]}", "target": "ParserComponent-yT6rd", "targetHandle": "{œfieldNameœ:œinput_dataœ,œidœ:œParserComponent-yT6rdœ,œinputTypesœ:[œDataFrameœ,œDataœ],œtypeœ:œotherœ}" } ], "nodes": [ { "data": { "description": "Get chat inputs from the Playground.", "display_name": "Chat Input", "id": "ChatInput-ePrVW", "node": { "base_classes": [ "Message" ], "beta": false, "conditional_paths": [], "custom_fields": {}, "description": "Get chat inputs from the Playground.", "display_name": "Chat Input", "documentation": "https://docs.langflow.org/components-io#chat-input", "edited": false, "field_order": [ "input_value", "should_store_message", "sender", "sender_name", "session_id", "files", "background_color", "chat_icon", "text_color" ], "frozen": false, "icon": "MessagesSquare", "legacy": false, "lf_version": "1.5.0.post2", "metadata": {}, "minimized": true, "output_types": [], "outputs": [ { "allows_loop": false, "cache": true, "display_name": "Chat Message", "group_outputs": false, "hidden": false, "method": "message_response", "name": "message", "options": null, "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ "Message" ], "value": "__UNDEFINED__" } ], "pinned": false, "template": { "_type": "Component", "background_color": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Background Color", "dynamic": false, "info": "The background color of the icon.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "background_color", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "chat_icon": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Icon", "dynamic": false, "info": "The icon of the message.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "chat_icon", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "code": { "advanced": true, "dynamic": true, "fileTypes": [], "file_path": "", "info": "", "list": false, "load_from_db": false, "multiline": true, "name": "code", "password": false, "placeholder": "", "required": true, "show": true, "title_case": false, "type": "code", "value": "from langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.langflow.org/components-io#chat-input\"\n icon = \"MessagesSquare\"\n name = \"ChatInput\"\n minimized = True\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n input_types=[],\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n temp_file=True,\n ),\n MessageTextInput(\n name=\"background_color\",\n display_name=\"Background Color\",\n info=\"The background color of the icon.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"chat_icon\",\n display_name=\"Icon\",\n info=\"The icon of the message.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"text_color\",\n display_name=\"Text Color\",\n info=\"The text color of the name\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Chat Message\", name=\"message\", method=\"message_response\"),\n ]\n\n async def message_response(self) -> Message:\n background_color = self.background_color\n text_color = self.text_color\n icon = self.chat_icon\n\n message = await Message.create(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n files=self.files,\n properties={\n \"background_color\": background_color,\n \"text_color\": text_color,\n \"icon\": icon,\n },\n )\n if self.session_id and isinstance(message, Message) and self.should_store_message:\n stored_message = await self.send_message(\n message,\n )\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n" }, "files": { "_input_type": "FileInput", "advanced": true, "display_name": "Files", "dynamic": false, "fileTypes": [ "txt", "md", "mdx", "csv", "json", "yaml", "yml", "xml", "html", "htm", "pdf", "docx", "py", "sh", "sql", "js", "ts", "tsx", "jpg", "jpeg", "png", "bmp", "image" ], "file_path": "", "info": "Files to be sent with the message.", "list": true, "list_add_label": "Add More", "name": "files", "placeholder": "", "required": false, "show": true, "temp_file": true, "title_case": false, "trace_as_metadata": true, "type": "file", "value": "" }, "input_value": { "_input_type": "MultilineInput", "advanced": false, "copy_field": false, "display_name": "Input Text", "dynamic": false, "info": "Message to be passed as input.", "input_types": [], "list": false, "list_add_label": "Add More", "load_from_db": false, "multiline": true, "name": "input_value", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "как у тебя дела?" }, "sender": { "_input_type": "DropdownInput", "advanced": true, "combobox": false, "dialog_inputs": {}, "display_name": "Sender Type", "dynamic": false, "info": "Type of sender.", "name": "sender", "options": [ "Machine", "User" ], "options_metadata": [], "placeholder": "", "required": false, "show": true, "title_case": false, "toggle": false, "tool_mode": false, "trace_as_metadata": true, "type": "str", "value": "User" }, "sender_name": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Sender Name", "dynamic": false, "info": "Name of the sender.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "sender_name", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "User" }, "session_id": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Session ID", "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "session_id", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "should_store_message": { "_input_type": "BoolInput", "advanced": true, "display_name": "Store Messages", "dynamic": false, "info": "Store the message in the history.", "list": false, "list_add_label": "Add More", "name": "should_store_message", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_metadata": true, "type": "bool", "value": true }, "text_color": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Text Color", "dynamic": false, "info": "The text color of the name", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "text_color", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" } }, "tool_mode": false }, "type": "ChatInput" }, "dragging": false, "height": 234, "id": "ChatInput-ePrVW", "measured": { "height": 234, "width": 320 }, "position": { "x": -109.47454044777902, "y": 853.9269802362053 }, "positionAbsolute": { "x": 689.5720422421635, "y": 765.155834131403 }, "selected": false, "type": "genericNode", "width": 320 }, { "data": { "id": "ChatOutput-VVIDN", "node": { "base_classes": [ "Message" ], "beta": false, "conditional_paths": [], "custom_fields": {}, "description": "Display a chat message in the Playground.", "display_name": "Chat Output", "documentation": "https://docs.langflow.org/components-io#chat-output", "edited": false, "field_order": [ "input_value", "should_store_message", "sender", "sender_name", "session_id", "data_template", "background_color", "chat_icon", "text_color", "clean_data" ], "frozen": false, "icon": "MessagesSquare", "legacy": false, "lf_version": "1.5.0.post2", "metadata": {}, "minimized": true, "output_types": [], "outputs": [ { "allows_loop": false, "cache": true, "display_name": "Output Message", "group_outputs": false, "method": "message_response", "name": "message", "options": null, "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ "Message" ], "value": "__UNDEFINED__" } ], "pinned": false, "template": { "_type": "Component", "background_color": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Background Color", "dynamic": false, "info": "The background color of the icon.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "background_color", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "chat_icon": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Icon", "dynamic": false, "info": "The icon of the message.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "chat_icon", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "clean_data": { "_input_type": "BoolInput", "advanced": true, "display_name": "Basic Clean Data", "dynamic": false, "info": "Whether to clean the data", "list": false, "list_add_label": "Add More", "name": "clean_data", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_metadata": true, "type": "bool", "value": true }, "code": { "advanced": true, "dynamic": true, "fileTypes": [], "file_path": "", "info": "", "list": false, "load_from_db": false, "multiline": true, "name": "code", "password": false, "placeholder": "", "required": true, "show": true, "title_case": false, "type": "code", "value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.helpers.data import safe_convert\nfrom langflow.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom langflow.schema.data import Data\nfrom langflow.schema.dataframe import DataFrame\nfrom langflow.schema.message import Message\nfrom langflow.schema.properties import Source\nfrom langflow.template.field.base import Output\nfrom langflow.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.langflow.org/components-io#chat-output\"\n icon = \"MessagesSquare\"\n name = \"ChatOutput\"\n minimized = True\n\n inputs = [\n HandleInput(\n name=\"input_value\",\n display_name=\"Inputs\",\n info=\"Message to be passed as output.\",\n input_types=[\"Data\", \"DataFrame\", \"Message\"],\n required=True,\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n MessageTextInput(\n name=\"background_color\",\n display_name=\"Background Color\",\n info=\"The background color of the icon.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"chat_icon\",\n display_name=\"Icon\",\n info=\"The icon of the message.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"text_color\",\n display_name=\"Text Color\",\n info=\"The text color of the name\",\n advanced=True,\n ),\n BoolInput(\n name=\"clean_data\",\n display_name=\"Basic Clean Data\",\n value=True,\n info=\"Whether to clean the data\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(\n display_name=\"Output Message\",\n name=\"message\",\n method=\"message_response\",\n ),\n ]\n\n def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:\n source_dict = {}\n if id_:\n source_dict[\"id\"] = id_\n if display_name:\n source_dict[\"display_name\"] = display_name\n if source:\n # Handle case where source is a ChatOpenAI object\n if hasattr(source, \"model_name\"):\n source_dict[\"source\"] = source.model_name\n elif hasattr(source, \"model\"):\n source_dict[\"source\"] = str(source.model)\n else:\n source_dict[\"source\"] = str(source)\n return Source(**source_dict)\n\n async def message_response(self) -> Message:\n # First convert the input to string if needed\n text = self.convert_to_string()\n\n # Get source properties\n source, icon, display_name, source_id = self.get_properties_from_source_component()\n background_color = self.background_color\n text_color = self.text_color\n if self.chat_icon:\n icon = self.chat_icon\n\n # Create or use existing Message object\n if isinstance(self.input_value, Message):\n message = self.input_value\n # Update message properties\n message.text = text\n else:\n message = Message(text=text)\n\n # Set message properties\n message.sender = self.sender\n message.sender_name = self.sender_name\n message.session_id = self.session_id\n message.flow_id = self.graph.flow_id if hasattr(self, \"graph\") else None\n message.properties.source = self._build_source(source_id, display_name, source)\n message.properties.icon = icon\n message.properties.background_color = background_color\n message.properties.text_color = text_color\n\n # Store message if needed\n if self.session_id and self.should_store_message:\n stored_message = await self.send_message(message)\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n\n def _serialize_data(self, data: Data) -> str:\n \"\"\"Serialize Data object to JSON string.\"\"\"\n # Convert data.data to JSON-serializable format\n serializable_data = jsonable_encoder(data.data)\n # Serialize with orjson, enabling pretty printing with indentation\n json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)\n # Convert bytes to string and wrap in Markdown code blocks\n return \"```json\\n\" + json_bytes.decode(\"utf-8\") + \"\\n```\"\n\n def _validate_input(self) -> None:\n \"\"\"Validate the input data and raise ValueError if invalid.\"\"\"\n if self.input_value is None:\n msg = \"Input data cannot be None\"\n raise ValueError(msg)\n if isinstance(self.input_value, list) and not all(\n isinstance(item, Message | Data | DataFrame | str) for item in self.input_value\n ):\n invalid_types = [\n type(item).__name__\n for item in self.input_value\n if not isinstance(item, Message | Data | DataFrame | str)\n ]\n msg = f\"Expected Data or DataFrame or Message or str, got {invalid_types}\"\n raise TypeError(msg)\n if not isinstance(\n self.input_value,\n Message | Data | DataFrame | str | list | Generator | type(None),\n ):\n type_name = type(self.input_value).__name__\n msg = f\"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}\"\n raise TypeError(msg)\n\n def convert_to_string(self) -> str | Generator[Any, None, None]:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n self._validate_input()\n if isinstance(self.input_value, list):\n return \"\\n\".join([safe_convert(item, clean_data=self.clean_data) for item in self.input_value])\n if isinstance(self.input_value, Generator):\n return self.input_value\n return safe_convert(self.input_value)\n" }, "data_template": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Data Template", "dynamic": false, "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "data_template", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "{text}" }, "input_value": { "_input_type": "HandleInput", "advanced": false, "display_name": "Inputs", "dynamic": false, "info": "Message to be passed as output.", "input_types": [ "Data", "DataFrame", "Message" ], "list": false, "list_add_label": "Add More", "name": "input_value", "placeholder": "", "required": true, "show": true, "title_case": false, "trace_as_metadata": true, "type": "other", "value": "" }, "sender": { "_input_type": "DropdownInput", "advanced": true, "combobox": false, "dialog_inputs": {}, "display_name": "Sender Type", "dynamic": false, "info": "Type of sender.", "name": "sender", "options": [ "Machine", "User" ], "options_metadata": [], "placeholder": "", "required": false, "show": true, "title_case": false, "toggle": false, "tool_mode": false, "trace_as_metadata": true, "type": "str", "value": "Machine" }, "sender_name": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Sender Name", "dynamic": false, "info": "Name of the sender.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "sender_name", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "AI" }, "session_id": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Session ID", "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "session_id", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "should_store_message": { "_input_type": "BoolInput", "advanced": true, "display_name": "Store Messages", "dynamic": false, "info": "Store the message in the history.", "list": false, "list_add_label": "Add More", "name": "should_store_message", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_metadata": true, "type": "bool", "value": true }, "text_color": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Text Color", "dynamic": false, "info": "The text color of the name", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "text_color", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" } }, "tool_mode": false }, "type": "ChatOutput" }, "dragging": false, "height": 234, "id": "ChatOutput-VVIDN", "measured": { "height": 234, "width": 320 }, "position": { "x": 1495.2749227418428, "y": 928.3135272067998 }, "positionAbsolute": { "x": 1444.936881624563, "y": 872.7273956769025 }, "selected": false, "type": "genericNode", "width": 320 }, { "data": { "id": "ParserComponent-yT6rd", "node": { "base_classes": [ "Message" ], "beta": false, "conditional_paths": [], "custom_fields": {}, "description": "Extracts text using a template.", "display_name": "Parser", "documentation": "https://docs.langflow.org/components-processing#parser", "edited": false, "field_order": [ "input_data", "mode", "pattern", "sep" ], "frozen": false, "icon": "braces", "legacy": false, "lf_version": "1.5.0.post2", "metadata": {}, "minimized": false, "output_types": [], "outputs": [ { "allows_loop": false, "cache": true, "display_name": "Parsed Text", "group_outputs": false, "hidden": false, "method": "parse_combined_text", "name": "parsed_text", "options": null, "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ "Message" ], "value": "__UNDEFINED__" } ], "pinned": false, "template": { "_type": "Component", "code": { "advanced": true, "dynamic": true, "fileTypes": [], "file_path": "", "info": "", "list": false, "load_from_db": false, "multiline": true, "name": "code", "password": false, "placeholder": "", "required": true, "show": true, "title_case": false, "type": "code", "value": "from langflow.custom.custom_component.component import Component\nfrom langflow.helpers.data import safe_convert\nfrom langflow.inputs.inputs import BoolInput, HandleInput, MessageTextInput, MultilineInput, TabInput\nfrom langflow.schema.data import Data\nfrom langflow.schema.dataframe import DataFrame\nfrom langflow.schema.message import Message\nfrom langflow.template.field.base import Output\n\n\nclass ParserComponent(Component):\n display_name = \"Parser\"\n description = \"Extracts text using a template.\"\n documentation: str = \"https://docs.langflow.org/components-processing#parser\"\n icon = \"braces\"\n\n inputs = [\n HandleInput(\n name=\"input_data\",\n display_name=\"Data or DataFrame\",\n input_types=[\"DataFrame\", \"Data\"],\n info=\"Accepts either a DataFrame or a Data object.\",\n required=True,\n ),\n TabInput(\n name=\"mode\",\n display_name=\"Mode\",\n options=[\"Parser\", \"Stringify\"],\n value=\"Parser\",\n info=\"Convert into raw string instead of using a template.\",\n real_time_refresh=True,\n ),\n MultilineInput(\n name=\"pattern\",\n display_name=\"Template\",\n info=(\n \"Use variables within curly brackets to extract column values for DataFrames \"\n \"or key values for Data.\"\n \"For example: `Name: {Name}, Age: {Age}, Country: {Country}`\"\n ),\n value=\"Text: {text}\", # Example default\n dynamic=True,\n show=True,\n required=True,\n ),\n MessageTextInput(\n name=\"sep\",\n display_name=\"Separator\",\n advanced=True,\n value=\"\\n\",\n info=\"String used to separate rows/items.\",\n ),\n ]\n\n outputs = [\n Output(\n display_name=\"Parsed Text\",\n name=\"parsed_text\",\n info=\"Formatted text output.\",\n method=\"parse_combined_text\",\n ),\n ]\n\n def update_build_config(self, build_config, field_value, field_name=None):\n \"\"\"Dynamically hide/show `template` and enforce requirement based on `stringify`.\"\"\"\n if field_name == \"mode\":\n build_config[\"pattern\"][\"show\"] = self.mode == \"Parser\"\n build_config[\"pattern\"][\"required\"] = self.mode == \"Parser\"\n if field_value:\n clean_data = BoolInput(\n name=\"clean_data\",\n display_name=\"Clean Data\",\n info=(\n \"Enable to clean the data by removing empty rows and lines \"\n \"in each cell of the DataFrame/ Data object.\"\n ),\n value=True,\n advanced=True,\n required=False,\n )\n build_config[\"clean_data\"] = clean_data.to_dict()\n else:\n build_config.pop(\"clean_data\", None)\n\n return build_config\n\n def _clean_args(self):\n \"\"\"Prepare arguments based on input type.\"\"\"\n input_data = self.input_data\n\n match input_data:\n case list() if all(isinstance(item, Data) for item in input_data):\n msg = \"List of Data objects is not supported.\"\n raise ValueError(msg)\n case DataFrame():\n return input_data, None\n case Data():\n return None, input_data\n case dict() if \"data\" in input_data:\n try:\n if \"columns\" in input_data: # Likely a DataFrame\n return DataFrame.from_dict(input_data), None\n # Likely a Data object\n return None, Data(**input_data)\n except (TypeError, ValueError, KeyError) as e:\n msg = f\"Invalid structured input provided: {e!s}\"\n raise ValueError(msg) from e\n case _:\n msg = f\"Unsupported input type: {type(input_data)}. Expected DataFrame or Data.\"\n raise ValueError(msg)\n\n def parse_combined_text(self) -> Message:\n \"\"\"Parse all rows/items into a single text or convert input to string if `stringify` is enabled.\"\"\"\n # Early return for stringify option\n if self.mode == \"Stringify\":\n return self.convert_to_string()\n\n df, data = self._clean_args()\n\n lines = []\n if df is not None:\n for _, row in df.iterrows():\n formatted_text = self.pattern.format(**row.to_dict())\n lines.append(formatted_text)\n elif data is not None:\n formatted_text = self.pattern.format(**data.data)\n lines.append(formatted_text)\n\n combined_text = self.sep.join(lines)\n self.status = combined_text\n return Message(text=combined_text)\n\n def convert_to_string(self) -> Message:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n result = \"\"\n if isinstance(self.input_data, list):\n result = \"\\n\".join([safe_convert(item, clean_data=self.clean_data or False) for item in self.input_data])\n else:\n result = safe_convert(self.input_data or False)\n self.log(f\"Converted to string with length: {len(result)}\")\n\n message = Message(text=result)\n self.status = message\n return message\n" }, "input_data": { "_input_type": "HandleInput", "advanced": false, "display_name": "Data or DataFrame", "dynamic": false, "info": "Accepts either a DataFrame or a Data object.", "input_types": [ "DataFrame", "Data" ], "list": false, "list_add_label": "Add More", "name": "input_data", "placeholder": "", "required": true, "show": true, "title_case": false, "trace_as_metadata": true, "type": "other", "value": "" }, "mode": { "_input_type": "TabInput", "advanced": false, "display_name": "Mode", "dynamic": false, "info": "Convert into raw string instead of using a template.", "name": "mode", "options": [ "Parser", "Stringify" ], "placeholder": "", "real_time_refresh": true, "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_metadata": true, "type": "tab", "value": "Parser" }, "pattern": { "_input_type": "MultilineInput", "advanced": false, "copy_field": false, "display_name": "Template", "dynamic": true, "info": "Use variables within curly brackets to extract column values for DataFrames or key values for Data.For example: `Name: {Name}, Age: {Age}, Country: {Country}`", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "multiline": true, "name": "pattern", "placeholder": "", "required": true, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "Text: {text}" }, "sep": { "_input_type": "MessageTextInput", "advanced": true, "display_name": "Separator", "dynamic": false, "info": "String used to separate rows/items.", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "sep", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "\n" } }, "tool_mode": false }, "showNode": true, "type": "ParserComponent" }, "dragging": false, "id": "ParserComponent-yT6rd", "measured": { "height": 325, "width": 320 }, "position": { "x": 972.3282541338247, "y": 804.886729887727 }, "selected": false, "type": "genericNode" }, { "data": { "id": "note-XIIlk", "node": { "description": "Блок по подключению к GigaChat\n\nСекреты (необходимо получить в вашей учетной записи): GigaChat API Key\n\n- Input Message - входной запрос пользователя\n- Model - выбор модели\n- Scope - персональный или корпоративный ключ\n- System Prompt - задает поведение модели\n- Temperature - креативность модели (0-1)\n- Max Tokens - ограничение на длину последовательности\n\n", "display_name": "", "documentation": "", "template": { "backgroundColor": "neutral" } }, "type": "note" }, "dragging": false, "height": 379, "id": "note-XIIlk", "measured": { "height": 379, "width": 504 }, "position": { "x": -222.64178562695986, "y": 1464.3428554069835 }, "resizing": false, "selected": false, "type": "noteNode", "width": 504 }, { "data": { "id": "note-b1MUr", "node": { "description": "Блок по подключению к Yandex GPT\n\nСекреты (необходимо получить в вашей учетной записи):\nYandex API KEY\nYandex Folder ID \n\n- Input Message - входной запрос пользователя\n- System Prompt - задает поведение модели\n- Temperature - креативность модели (0-1)\n- Max Tokens - ограничение на длину послеlовательности\n\n", "display_name": "", "documentation": "", "template": { "backgroundColor": "neutral" } }, "type": "note" }, "dragging": false, "height": 324, "id": "note-b1MUr", "measured": { "height": 324, "width": 458 }, "position": { "x": -669.9301336572016, "y": 779.3475136205129 }, "resizing": false, "selected": false, "type": "noteNode", "width": 458 }, { "data": { "id": "YandexGPT-M6quV", "node": { "base_classes": [ "Data" ], "beta": false, "conditional_paths": [], "custom_fields": {}, "description": "LLM от Яндекс", "display_name": "Yandex GPT", "documentation": "https://cloud.yandex.ru/docs/yandexgpt", "edited": false, "field_order": [ "input_message", "api_key", "folder_id", "system_prompt", "temperature", "max_tokens" ], "frozen": false, "icon": "custom_components", "legacy": false, "lf_version": "1.5.0.post2", "metadata": {}, "minimized": false, "output_types": [], "outputs": [ { "allows_loop": false, "cache": true, "display_name": "Output", "group_outputs": false, "method": "build_output", "name": "output", "selected": "Data", "tool_mode": true, "types": [ "Data" ], "value": "__UNDEFINED__" } ], "pinned": false, "template": { "_type": "Component", "api_key": { "_input_type": "SecretStrInput", "advanced": false, "display_name": "Yandex API Key", "dynamic": false, "info": "", "input_types": [], "load_from_db": false, "name": "api_key", "password": true, "placeholder": "", "required": false, "show": true, "title_case": false, "type": "str", "value": "" }, "code": { "advanced": true, "dynamic": true, "fileTypes": [], "file_path": "", "info": "", "list": false, "load_from_db": false, "multiline": true, "name": "code", "password": false, "placeholder": "", "required": true, "show": true, "title_case": false, "type": "code", "value": "from langflow.field_typing import Data\r\nfrom langflow.custom import Component\r\nfrom langflow.io import MessageTextInput, Output, SecretStrInput\r\nfrom yandex_cloud_ml_sdk import YCloudML\r\n\r\nclass YandexGPT(Component):\r\n display_name = \"Yandex GPT\"\r\n description = \"LLM от Яндекс\"\r\n documentation: str = \"https://cloud.yandex.ru/docs/yandexgpt\"\r\n icon = \"custom_components\"\r\n\r\n inputs = [\r\n MessageTextInput(name=\"input_message\", display_name=\"Input Message\"),\r\n SecretStrInput(name=\"api_key\", display_name=\"Yandex API Key\"),\r\n SecretStrInput(name=\"folder_id\", display_name=\"Yandex Folder ID\"),\r\n MessageTextInput(\r\n name=\"system_prompt\",\r\n display_name=\"System Prompt\",\r\n value=\"Ты — умный и профессиональный ассистент. Отвечай понятно и структурированно.\"\r\n ),\r\n MessageTextInput(\r\n name=\"temperature\",\r\n display_name=\"Temperature\",\r\n value=\"0.1\"\r\n ),\r\n MessageTextInput(\r\n name=\"max_tokens\",\r\n display_name=\"Max Tokens\",\r\n value=\"500\"\r\n ),\r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Output\", name=\"output\", method=\"build_output\", type=\"Data\"),\r\n ]\r\n\r\n def build_output(self) -> Data:\r\n sdk = YCloudML(\r\n folder_id=self.folder_id,\r\n auth=self.api_key\r\n )\r\n\r\n temperature = float(self.temperature)\r\n max_tokens = int(self.max_tokens)\r\n\r\n messages = [\r\n {\"role\": \"system\", \"text\": self.system_prompt.strip()},\r\n {\"role\": \"user\", \"text\": self.input_message.strip()}\r\n ]\r\n\r\n result = (\r\n sdk.models.completions(\"yandexgpt\")\r\n .configure(\r\n temperature=temperature,\r\n max_tokens=max_tokens\r\n )\r\n .run(messages)\r\n )\r\n\r\n if result and hasattr(result, 'alternatives') and result.alternatives:\r\n text_result = result.alternatives[0].text\r\n else:\r\n text_result = \"Не удалось получить ответ от модели\"\r\n\r\n return Data(text=text_result)" }, "folder_id": { "_input_type": "SecretStrInput", "advanced": false, "display_name": "Yandex Folder ID", "dynamic": false, "info": "", "input_types": [], "load_from_db": false, "name": "folder_id", "password": true, "placeholder": "", "required": false, "show": true, "title_case": false, "type": "str", "value": "" }, "input_message": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Input Message", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "input_message", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "max_tokens": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Max Tokens", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "max_tokens", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "500" }, "system_prompt": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "System Prompt", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "system_prompt", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "Ты — умный и профессиональный ассистент. Отвечай понятно и структурированно." }, "temperature": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Temperature", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "temperature", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "0.1" } }, "tool_mode": false }, "showNode": true, "type": "YandexGPT" }, "dragging": false, "id": "YandexGPT-M6quV", "measured": { "height": 612, "width": 320 }, "position": { "x": 406.8640256529729, "y": 637.84216861927 }, "selected": false, "type": "genericNode" }, { "data": { "id": "GChat-63vnw", "node": { "base_classes": [ "Data" ], "beta": false, "conditional_paths": [], "custom_fields": {}, "description": "LLM from Sber.", "display_name": "GigaChat", "documentation": "http://docs.langflow.org/components/custom", "edited": false, "field_order": [ "input_message", "giga_api", "model_name", "scope", "system_prompt", "temperature", "max_tokens" ], "frozen": false, "icon": "custom_components", "legacy": false, "lf_version": "1.5.0.post2", "metadata": {}, "minimized": false, "output_types": [], "outputs": [ { "allows_loop": false, "cache": true, "display_name": "Output", "group_outputs": false, "method": "build_output", "name": "output", "selected": "Data", "tool_mode": true, "types": [ "Data" ], "value": "__UNDEFINED__" } ], "pinned": false, "template": { "_type": "Component", "code": { "advanced": true, "dynamic": true, "fileTypes": [], "file_path": "", "info": "", "list": false, "load_from_db": false, "multiline": true, "name": "code", "password": false, "placeholder": "", "required": true, "show": true, "title_case": false, "type": "code", "value": "from langflow.custom import Component\r\nfrom langflow.io import MessageTextInput, Output, SecretStrInput, DropdownInput\r\nfrom langchain_community.llms import GigaChat\r\nfrom langflow.schema import Data\r\n\r\n\r\nclass GChat(Component):\r\n display_name = \"GigaChat\"\r\n description = \"LLM from Sber.\"\r\n documentation: str = \"http://docs.langflow.org/components/custom\"\r\n icon = \"custom_components\"\r\n\r\n model_list = ['GigaChat-2', 'GigaChat-2-Pro', 'GigaChat-2-Max']\r\n scope_list = ['GIGACHAT_API_PERS', 'GIGACHAT_API_CORP', 'GIGACHAT_API_B2B']\r\n\r\n inputs = [\r\n MessageTextInput(name=\"input_message\", display_name=\"Input Message\"),\r\n SecretStrInput(name=\"giga_api\", display_name=\"GigaChat API Key\"),\r\n DropdownInput(name=\"model_name\", display_name=\"Model\", options=model_list),\r\n DropdownInput(name=\"scope\", display_name=\"Scope\", options=scope_list, value=\"GIGACHAT_API_PERS\"),\r\n MessageTextInput(\r\n name=\"system_prompt\",\r\n display_name=\"System Prompt\",\r\n value=\"Ты — умный и профессиональный ассистент. Отвечай понятно и структурированно.\"\r\n ),\r\n MessageTextInput(\r\n name=\"temperature\",\r\n display_name=\"Temperature\",\r\n value=\"0.1\"\r\n ),\r\n MessageTextInput(\r\n name=\"max_tokens\",\r\n display_name=\"Max Tokens\",\r\n value=\"500\"\r\n ),\r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Output\", name=\"output\", method=\"build_output\", type=\"Data\"),\r\n ]\r\n\r\n def build_output(self) -> Data:\r\n # конвертируем числовые параметры\r\n temperature = float(self.temperature)\r\n max_tokens = int(self.max_tokens)\r\n\r\n # инициализация модели\r\n llm = GigaChat(\r\n verify_ssl_certs=False,\r\n model=self.model_name,\r\n credentials=self.giga_api,\r\n scope=self.scope,\r\n temperature=temperature,\r\n max_tokens=max_tokens\r\n )\r\n\r\n # формируем полный текст запроса с системным промптом\r\n prompt = f\"{self.system_prompt}\\n\\n{self.input_message}\"\r\n\r\n # получение ответа\r\n data = llm.invoke(prompt)\r\n return Data(text=str(data))" }, "giga_api": { "_input_type": "SecretStrInput", "advanced": false, "display_name": "GigaChat API Key", "dynamic": false, "info": "", "input_types": [], "load_from_db": false, "name": "giga_api", "password": true, "placeholder": "", "required": false, "show": true, "title_case": false, "type": "str", "value": "" }, "input_message": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Input Message", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "input_message", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "" }, "max_tokens": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Max Tokens", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "max_tokens", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "500" }, "model_name": { "_input_type": "DropdownInput", "advanced": false, "combobox": false, "dialog_inputs": {}, "display_name": "Model", "dynamic": false, "info": "", "name": "model_name", "options": [ "GigaChat-2", "GigaChat-2-Pro", "GigaChat-2-Max" ], "options_metadata": [], "placeholder": "", "required": false, "show": true, "title_case": false, "toggle": false, "tool_mode": false, "trace_as_metadata": true, "type": "str", "value": "GigaChat-2" }, "scope": { "_input_type": "DropdownInput", "advanced": false, "combobox": false, "dialog_inputs": {}, "display_name": "Scope", "dynamic": false, "info": "", "name": "scope", "options": [ "GIGACHAT_API_PERS", "GIGACHAT_API_CORP", "GIGACHAT_API_B2B" ], "options_metadata": [], "placeholder": "", "required": false, "show": true, "title_case": false, "toggle": false, "tool_mode": false, "trace_as_metadata": true, "type": "str", "value": "GIGACHAT_API_PERS" }, "system_prompt": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "System Prompt", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "system_prompt", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "Ты — умный и профессиональный ассистент. Отвечай понятно и структурированно." }, "temperature": { "_input_type": "MessageTextInput", "advanced": false, "display_name": "Temperature", "dynamic": false, "info": "", "input_types": [ "Message" ], "list": false, "list_add_label": "Add More", "load_from_db": false, "name": "temperature", "placeholder": "", "required": false, "show": true, "title_case": false, "tool_mode": false, "trace_as_input": true, "trace_as_metadata": true, "type": "str", "value": "0.1" } }, "tool_mode": false }, "showNode": true, "type": "GChat" }, "dragging": false, "id": "GChat-63vnw", "measured": { "height": 693, "width": 320 }, "position": { "x": 411.22280644769023, "y": 1445.4383242171602 }, "selected": false, "type": "genericNode" } ], "viewport": { "x": 291.3062857160731, "y": -199.79110498870045, "zoom": 0.36616696785518016 } }, "description": "Perform basic prompting with an OpenAI model.", "endpoint_name": null, "id": "9c037d3b-8533-4ad4-9933-32120766159b", "is_component": false, "last_tested_version": "1.5.0.post2", "name": "Prompting", "tags": [ "chatbots" ] }