From 748bb9da6809579993cbeaffa14cc00c0d1d1e10 Mon Sep 17 00:00:00 2001 From: Edwin Jose Date: Mon, 30 Jun 2025 14:44:01 -0500 Subject: [PATCH] fix: Template updates to fix broken edges (#8785) * update llm component * template updates * Update SEO Keyword Generator.json --- .../Basic Prompt Chaining.json | 366 ++++++++++-------- .../starter_projects/Basic Prompting.json | 135 ++++--- .../SEO Keyword Generator.json | 139 +++---- 3 files changed, 339 insertions(+), 301 deletions(-) diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json index 8fd1830f1..11d10226e 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json @@ -7,7 +7,7 @@ "data": { "sourceHandle": { "dataType": "LanguageModelComponent", - "id": "LanguageModelComponent-AsaOP", + "id": "LanguageModelComponent-kPnuV", "name": "text_output", "output_types": [ "Message" @@ -15,75 +15,19 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "LanguageModelComponent-uV35f", + "id": "LanguageModelComponent-k0SIV", "inputTypes": [ "Message" ], "type": "str" } }, - "id": "xy-edge__LanguageModelComponent-AsaOP{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-AsaOPœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-uV35f{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-uV35fœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-LanguageModelComponent-kPnuV{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-kPnuVœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-k0SIV{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-k0SIVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "LanguageModelComponent-AsaOP", - "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-AsaOPœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-uV35f", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-uV35fœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" - }, - { - "animated": false, - "className": "", - "data": { - "sourceHandle": { - "dataType": "Prompt", - "id": "Prompt-F9fZA", - "name": "prompt", - "output_types": [ - "Message" - ] - }, - "targetHandle": { - "fieldName": "system_message", - "id": "LanguageModelComponent-uV35f", - "inputTypes": [ - "Message" - ], - "type": "str" - } - }, - "id": "xy-edge__Prompt-F9fZA{œdataTypeœ:œPromptœ,œidœ:œPrompt-F9fZAœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-uV35f{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-uV35fœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", - "selected": false, - "source": "Prompt-F9fZA", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-F9fZAœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-uV35f", - "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-uV35fœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" - }, - { - "animated": false, - "className": "", - "data": { - "sourceHandle": { - "dataType": "Prompt", - "id": "Prompt-jnSgC", - "name": "prompt", - "output_types": [ - "Message" - ] - }, - "targetHandle": { - "fieldName": "system_message", - "id": "LanguageModelComponent-AsaOP", - "inputTypes": [ - "Message" - ], - "type": "str" - } - }, - "id": "xy-edge__Prompt-jnSgC{œdataTypeœ:œPromptœ,œidœ:œPrompt-jnSgCœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-AsaOP{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-AsaOPœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", - "selected": false, - "source": "Prompt-jnSgC", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-jnSgCœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-AsaOP", - "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-AsaOPœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + "source": "LanguageModelComponent-kPnuV", + "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-kPnuVœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-k0SIV", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-k0SIVœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" }, { "animated": false, @@ -91,7 +35,7 @@ "data": { "sourceHandle": { "dataType": "LanguageModelComponent", - "id": "LanguageModelComponent-uV35f", + "id": "LanguageModelComponent-k0SIV", "name": "text_output", "output_types": [ "Message" @@ -99,7 +43,7 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "ChatOutput-bnf9c", + "id": "ChatOutput-mc2Rz", "inputTypes": [ "Data", "DataFrame", @@ -108,12 +52,12 @@ "type": "str" } }, - "id": "xy-edge__LanguageModelComponent-uV35f{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-uV35fœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-bnf9c{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-bnf9cœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-LanguageModelComponent-k0SIV{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-k0SIVœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-mc2Rz{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-mc2Rzœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "LanguageModelComponent-uV35f", - "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-uV35fœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", - "target": "ChatOutput-bnf9c", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-bnf9cœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" + "source": "LanguageModelComponent-k0SIV", + "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-k0SIVœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", + "target": "ChatOutput-mc2Rz", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-mc2Rzœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" }, { "animated": false, @@ -121,7 +65,7 @@ "data": { "sourceHandle": { "dataType": "ChatInput", - "id": "ChatInput-E1Lwc", + "id": "ChatInput-B7vXK", "name": "message", "output_types": [ "Message" @@ -129,47 +73,19 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "LanguageModelComponent-OVCTy", + "id": "LanguageModelComponent-sPFGT", "inputTypes": [ "Message" ], "type": "str" } }, - "id": "xy-edge__ChatInput-E1Lwc{œdataTypeœ:œChatInputœ,œidœ:œChatInput-E1Lwcœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-OVCTy{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-OVCTyœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-ChatInput-B7vXK{œdataTypeœ:œChatInputœ,œidœ:œChatInput-B7vXKœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-sPFGT{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-sPFGTœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "ChatInput-E1Lwc", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-E1Lwcœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-OVCTy", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-OVCTyœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" - }, - { - "animated": false, - "className": "", - "data": { - "sourceHandle": { - "dataType": "Prompt", - "id": "Prompt-kNwlW", - "name": "prompt", - "output_types": [ - "Message" - ] - }, - "targetHandle": { - "fieldName": "system_message", - "id": "LanguageModelComponent-OVCTy", - "inputTypes": [ - "Message" - ], - "type": "str" - } - }, - "id": "xy-edge__Prompt-kNwlW{œdataTypeœ:œPromptœ,œidœ:œPrompt-kNwlWœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-OVCTy{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-OVCTyœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", - "selected": false, - "source": "Prompt-kNwlW", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-kNwlWœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-OVCTy", - "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-OVCTyœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + "source": "ChatInput-B7vXK", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-B7vXKœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-sPFGT", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-sPFGTœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" }, { "animated": false, @@ -177,7 +93,7 @@ "data": { "sourceHandle": { "dataType": "LanguageModelComponent", - "id": "LanguageModelComponent-OVCTy", + "id": "LanguageModelComponent-sPFGT", "name": "text_output", "output_types": [ "Message" @@ -185,19 +101,103 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "LanguageModelComponent-AsaOP", + "id": "LanguageModelComponent-kPnuV", "inputTypes": [ "Message" ], "type": "str" } }, - "id": "xy-edge__LanguageModelComponent-OVCTy{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-OVCTyœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-AsaOP{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-AsaOPœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-LanguageModelComponent-sPFGT{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-sPFGTœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-kPnuV{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-kPnuVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "LanguageModelComponent-OVCTy", - "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-OVCTyœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-AsaOP", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-AsaOPœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + "source": "LanguageModelComponent-sPFGT", + "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-sPFGTœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-kPnuV", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-kPnuVœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + }, + { + "animated": false, + "className": "", + "data": { + "sourceHandle": { + "dataType": "Prompt", + "id": "Prompt-gxyFu", + "name": "prompt", + "output_types": [ + "Message" + ] + }, + "targetHandle": { + "fieldName": "system_message", + "id": "LanguageModelComponent-kPnuV", + "inputTypes": [ + "Message" + ], + "type": "str" + } + }, + "id": "xy-edge__Prompt-gxyFu{œdataTypeœ:œPromptœ,œidœ:œPrompt-gxyFuœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-kPnuV{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-kPnuVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "selected": false, + "source": "Prompt-gxyFu", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-gxyFuœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-kPnuV", + "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-kPnuVœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + }, + { + "animated": false, + "className": "", + "data": { + "sourceHandle": { + "dataType": "Prompt", + "id": "Prompt-7PuDH", + "name": "prompt", + "output_types": [ + "Message" + ] + }, + "targetHandle": { + "fieldName": "system_message", + "id": "LanguageModelComponent-k0SIV", + "inputTypes": [ + "Message" + ], + "type": "str" + } + }, + "id": "xy-edge__Prompt-7PuDH{œdataTypeœ:œPromptœ,œidœ:œPrompt-7PuDHœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-k0SIV{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-k0SIVœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "selected": false, + "source": "Prompt-7PuDH", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-7PuDHœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-k0SIV", + "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-k0SIVœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + }, + { + "animated": false, + "className": "", + "data": { + "sourceHandle": { + "dataType": "Prompt", + "id": "Prompt-RcCgD", + "name": "prompt", + "output_types": [ + "Message" + ] + }, + "targetHandle": { + "fieldName": "system_message", + "id": "LanguageModelComponent-sPFGT", + "inputTypes": [ + "Message" + ], + "type": "str" + } + }, + "id": "xy-edge__Prompt-RcCgD{œdataTypeœ:œPromptœ,œidœ:œPrompt-RcCgDœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-sPFGT{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-sPFGTœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "selected": false, + "source": "Prompt-RcCgD", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-RcCgDœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-sPFGT", + "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-sPFGTœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" } ], "nodes": [ @@ -205,7 +205,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-jnSgC", + "id": "Prompt-gxyFu", "node": { "base_classes": [ "Message" @@ -225,7 +225,7 @@ "frozen": false, "icon": "braces", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": {}, "output_types": [], "outputs": [ @@ -313,14 +313,14 @@ }, "dragging": false, "height": 260, - "id": "Prompt-jnSgC", + "id": "Prompt-gxyFu", "measured": { "height": 260, "width": 320 }, "position": { - "x": 1933.9451134281053, - "y": 989.0706980544699 + "x": 1962.3374859019868, + "y": 1019.10858285748 }, "positionAbsolute": { "x": 1921.9168573384, @@ -332,7 +332,7 @@ }, { "data": { - "id": "ChatInput-E1Lwc", + "id": "ChatInput-B7vXK", "node": { "base_classes": [ "Message" @@ -360,7 +360,7 @@ "icon": "MessagesSquare", "key": "ChatInput", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": {}, "output_types": [], "outputs": [ @@ -611,14 +611,14 @@ }, "dragging": false, "height": 234, - "id": "ChatInput-E1Lwc", + "id": "ChatInput-B7vXK", "measured": { "height": 234, "width": 320 }, "position": { - "x": 1515.8142893180777, - "y": 511.98346649699556 + "x": 1529.0771385757494, + "y": 435.05894080249993 }, "positionAbsolute": { "x": 1178.0239685549568, @@ -632,7 +632,7 @@ "data": { "description": "Display a chat message in the Playground.", "display_name": "Chat Output", - "id": "ChatOutput-bnf9c", + "id": "ChatOutput-mc2Rz", "node": { "base_classes": [ "Message" @@ -658,7 +658,7 @@ "frozen": false, "icon": "MessagesSquare", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": {}, "output_types": [], "outputs": [ @@ -915,14 +915,14 @@ }, "dragging": false, "height": 234, - "id": "ChatOutput-bnf9c", + "id": "ChatOutput-mc2Rz", "measured": { "height": 234, "width": 320 }, "position": { - "x": 3372.7401089499594, - "y": 681.9385927784625 + "x": 3253.3744656309145, + "y": 1265.5039601160156 }, "positionAbsolute": { "x": 3363.868906129255, @@ -936,7 +936,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-F9fZA", + "id": "Prompt-7PuDH", "node": { "base_classes": [ "Message" @@ -956,7 +956,7 @@ "frozen": false, "icon": "braces", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": {}, "output_types": [], "outputs": [ @@ -1044,14 +1044,14 @@ }, "dragging": false, "height": 260, - "id": "Prompt-F9fZA", + "id": "Prompt-7PuDH", "measured": { "height": 260, "width": 320 }, "position": { - "x": 2449.240273618089, - "y": 998.5590279612616 + "x": 2403.3031998597485, + "y": 1283.0725170451763 }, "positionAbsolute": { "x": 2647.8305106628454, @@ -1065,7 +1065,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-kNwlW", + "id": "Prompt-RcCgD", "node": { "base_classes": [ "Message" @@ -1085,7 +1085,7 @@ "frozen": false, "icon": "braces", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": {}, "output_types": [], "outputs": [ @@ -1173,14 +1173,14 @@ }, "dragging": false, "height": 260, - "id": "Prompt-kNwlW", + "id": "Prompt-RcCgD", "measured": { "height": 260, "width": 320 }, "position": { - "x": 1480.5655849711331, - "y": 943.8455975825916 + "x": 1518.9507061981496, + "y": 719.6649516157374 }, "positionAbsolute": { "x": 1178.7099500302636, @@ -1192,7 +1192,7 @@ }, { "data": { - "id": "LanguageModelComponent-AsaOP", + "id": "LanguageModelComponent-kPnuV", "node": { "base_classes": [ "LanguageModel", @@ -1217,7 +1217,7 @@ "frozen": false, "icon": "brain-circuit", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": { "keywords": [ "model", @@ -1234,8 +1234,11 @@ "cache": true, "display_name": "Model Response", "group_outputs": false, + "hidden": null, "method": "text_response", "name": "text_output", + "options": null, + "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ @@ -1248,8 +1251,11 @@ "cache": true, "display_name": "Language Model", "group_outputs": false, + "hidden": null, "method": "build_model", "name": "model_output", + "options": null, + "required_inputs": null, "selected": "LanguageModel", "tool_mode": true, "types": [ @@ -1299,7 +1305,7 @@ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider. \"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n info=\"Select the model to use\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=True,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n return build_config\n" }, "input_value": { - "_input_type": "MessageTextInput", + "_input_type": "MessageInput", "advanced": false, "display_name": "Input", "dynamic": false, @@ -1375,7 +1381,7 @@ "icon": "Anthropic" }, { - "icon": "Google" + "icon": "GoogleGenerativeAI" } ], "placeholder": "", @@ -1408,8 +1414,9 @@ "value": false }, "system_message": { - "_input_type": "MessageTextInput", - "advanced": true, + "_input_type": "MultilineInput", + "advanced": false, + "copy_field": false, "display_name": "System Message", "dynamic": false, "info": "A system message that helps set the behavior of the assistant", @@ -1419,6 +1426,7 @@ "list": false, "list_add_label": "Add More", "load_from_db": false, + "multiline": true, "name": "system_message", "placeholder": "", "required": false, @@ -1461,25 +1469,26 @@ }, "tool_mode": false }, + "selected_output": "text_output", "showNode": true, "type": "LanguageModelComponent" }, "dragging": false, - "id": "LanguageModelComponent-AsaOP", + "id": "LanguageModelComponent-kPnuV", "measured": { "height": 534, "width": 320 }, "position": { - "x": 2417.5170722121943, - "y": 383.1664476071964 + "x": 2401.6016531029886, + "y": 690.864550385179 }, "selected": false, "type": "genericNode" }, { "data": { - "id": "LanguageModelComponent-uV35f", + "id": "LanguageModelComponent-k0SIV", "node": { "base_classes": [ "LanguageModel", @@ -1504,7 +1513,7 @@ "frozen": false, "icon": "brain-circuit", "legacy": false, - "lf_version": "1.4.2", + "lf_version": "1.5.0", "metadata": { "keywords": [ "model", @@ -1521,8 +1530,11 @@ "cache": true, "display_name": "Model Response", "group_outputs": false, + "hidden": null, "method": "text_response", "name": "text_output", + "options": null, + "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ @@ -1535,8 +1547,11 @@ "cache": true, "display_name": "Language Model", "group_outputs": false, + "hidden": null, "method": "build_model", "name": "model_output", + "options": null, + "required_inputs": null, "selected": "LanguageModel", "tool_mode": true, "types": [ @@ -1586,7 +1601,7 @@ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider. \"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n info=\"Select the model to use\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=True,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n return build_config\n" }, "input_value": { - "_input_type": "MessageTextInput", + "_input_type": "MessageInput", "advanced": false, "display_name": "Input", "dynamic": false, @@ -1662,7 +1677,7 @@ "icon": "Anthropic" }, { - "icon": "Google" + "icon": "GoogleGenerativeAI" } ], "placeholder": "", @@ -1695,8 +1710,9 @@ "value": false }, "system_message": { - "_input_type": "MessageTextInput", - "advanced": true, + "_input_type": "MultilineInput", + "advanced": false, + "copy_field": false, "display_name": "System Message", "dynamic": false, "info": "A system message that helps set the behavior of the assistant", @@ -1706,6 +1722,7 @@ "list": false, "list_add_label": "Add More", "load_from_db": false, + "multiline": true, "name": "system_message", "placeholder": "", "required": false, @@ -1748,25 +1765,26 @@ }, "tool_mode": false }, + "selected_output": "text_output", "showNode": true, "type": "LanguageModelComponent" }, "dragging": false, - "id": "LanguageModelComponent-uV35f", + "id": "LanguageModelComponent-k0SIV", "measured": { "height": 534, "width": 320 }, "position": { - "x": 2892.417146179941, - "y": 413.60768769085433 + "x": 2836.5657382114464, + "y": 950.0578222812694 }, "selected": false, "type": "genericNode" }, { "data": { - "id": "LanguageModelComponent-OVCTy", + "id": "LanguageModelComponent-sPFGT", "node": { "base_classes": [ "LanguageModel", @@ -1791,7 +1809,6 @@ "frozen": false, "icon": "brain-circuit", "legacy": false, - "lf_version": "1.4.2", "metadata": { "keywords": [ "model", @@ -1808,8 +1825,11 @@ "cache": true, "display_name": "Model Response", "group_outputs": false, + "hidden": null, "method": "text_response", "name": "text_output", + "options": null, + "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ @@ -1822,8 +1842,11 @@ "cache": true, "display_name": "Language Model", "group_outputs": false, + "hidden": null, "method": "build_model", "name": "model_output", + "options": null, + "required_inputs": null, "selected": "LanguageModel", "tool_mode": true, "types": [ @@ -1873,7 +1896,7 @@ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider. \"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n info=\"Select the model to use\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=True,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n return build_config\n" }, "input_value": { - "_input_type": "MessageTextInput", + "_input_type": "MessageInput", "advanced": false, "display_name": "Input", "dynamic": false, @@ -1949,7 +1972,7 @@ "icon": "Anthropic" }, { - "icon": "Google" + "icon": "GoogleGenerativeAI" } ], "placeholder": "", @@ -1982,8 +2005,9 @@ "value": false }, "system_message": { - "_input_type": "MessageTextInput", - "advanced": true, + "_input_type": "MultilineInput", + "advanced": false, + "copy_field": false, "display_name": "System Message", "dynamic": false, "info": "A system message that helps set the behavior of the assistant", @@ -1993,6 +2017,7 @@ "list": false, "list_add_label": "Add More", "load_from_db": false, + "multiline": true, "name": "system_message", "placeholder": "", "required": false, @@ -2035,11 +2060,12 @@ }, "tool_mode": false }, + "selected_output": "text_output", "showNode": true, "type": "LanguageModelComponent" }, "dragging": false, - "id": "LanguageModelComponent-OVCTy", + "id": "LanguageModelComponent-sPFGT", "measured": { "height": 534, "width": 320 @@ -2053,7 +2079,7 @@ }, { "data": { - "id": "note-mhQH6", + "id": "note-7A8gW", "node": { "description": "# Prompt chaining\n\nThis flow demonstrates chaining three prompts and three language models.\nEach prompt is specifically designed to process previous output, with each LLM call building upon previous results\n\n\n## Prerequisites\n\n* [OpenAI API Key](https://platform.openai.com/)\n\n## Quickstart\n\n1. In all **Language Model** components, add your OpenAI API key.\n2. To run the flow, open the **Playground*. An example input is provided, with other suggestions listed below.\n\n \"The increasing need for secure and user-friendly decentralized finance (DeFi) platforms that make cryptocurrency investments accessible to non-tech-savvy users.\"\n\n \"The rising popularity of immersive, augmented reality (AR) experiences for remote collaboration and virtual team-building in distributed workforces.\"\n\n \"The expanding market for smart, IoT-enabled urban farming solutions that allow city dwellers to grow their own food efficiently in small spaces.\"\n\n \"The emerging demand for AI-powered personal styling and shopping assistants that consider sustainability, body positivity, and individual style preferences.\"\n\n", "display_name": "", @@ -2064,10 +2090,10 @@ }, "dragging": false, "height": 920, - "id": "note-mhQH6", + "id": "note-7A8gW", "measured": { "height": 920, - "width": 522 + "width": 521 }, "position": { "x": 845.3254638400961, @@ -2080,16 +2106,16 @@ } ], "viewport": { - "x": -400.8533008879997, - "y": 142.36253504700537, - "zoom": 0.4763932486920123 + "x": -277.2451206894975, + "y": 97.74227843275781, + "zoom": 0.3918551313771338 } }, "description": "Connect multiple prompts in sequence where each output becomes the next stage's input, enabling step-by-step text processing.", "endpoint_name": null, - "id": "eaaa2f42-a548-4241-a121-d43a71659651", + "id": "e1d24fdb-ce84-44ec-937f-1672d8609a35", "is_component": false, - "last_tested_version": "1.4.2", + "last_tested_version": "1.5.0", "name": "Basic Prompt Chaining", "tags": [ "chatbots" diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting.json b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting.json index 97ae44db3..97418a9a7 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting.json @@ -1,41 +1,13 @@ { "data": { "edges": [ - { - "animated": false, - "className": "", - "data": { - "sourceHandle": { - "dataType": "Prompt", - "id": "Prompt-qrgXn", - "name": "prompt", - "output_types": [ - "Message" - ] - }, - "targetHandle": { - "fieldName": "system_message", - "id": "LanguageModelComponent-UrOQf", - "inputTypes": [ - "Message" - ], - "type": "str" - } - }, - "id": "xy-edge__Prompt-qrgXn{œdataTypeœ:œPromptœ,œidœ:œPrompt-qrgXnœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-UrOQf{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-UrOQfœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", - "selected": false, - "source": "Prompt-qrgXn", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-qrgXnœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-UrOQf", - "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-UrOQfœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" - }, { "animated": false, "className": "", "data": { "sourceHandle": { "dataType": "ChatInput", - "id": "ChatInput-9rvSS", + "id": "ChatInput-SzjnT", "name": "message", "output_types": [ "Message" @@ -43,19 +15,19 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "LanguageModelComponent-UrOQf", + "id": "LanguageModelComponent-kBOja", "inputTypes": [ "Message" ], "type": "str" } }, - "id": "xy-edge__ChatInput-9rvSS{œdataTypeœ:œChatInputœ,œidœ:œChatInput-9rvSSœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-UrOQf{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-UrOQfœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-ChatInput-SzjnT{œdataTypeœ:œChatInputœ,œidœ:œChatInput-SzjnTœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-kBOja{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-kBOjaœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "ChatInput-9rvSS", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-9rvSSœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-UrOQf", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-UrOQfœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + "source": "ChatInput-SzjnT", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-SzjnTœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-kBOja", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-kBOjaœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" }, { "animated": false, @@ -63,7 +35,7 @@ "data": { "sourceHandle": { "dataType": "LanguageModelComponent", - "id": "LanguageModelComponent-UrOQf", + "id": "LanguageModelComponent-kBOja", "name": "text_output", "output_types": [ "Message" @@ -71,7 +43,7 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "ChatOutput-AyRuN", + "id": "ChatOutput-8ZWWB", "inputTypes": [ "Data", "DataFrame", @@ -80,12 +52,39 @@ "type": "str" } }, - "id": "xy-edge__LanguageModelComponent-UrOQf{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-UrOQfœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-AyRuN{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-AyRuNœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-LanguageModelComponent-kBOja{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-kBOjaœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-8ZWWB{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-8ZWWBœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "LanguageModelComponent-UrOQf", - "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-UrOQfœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", - "target": "ChatOutput-AyRuN", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-AyRuNœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" + "source": "LanguageModelComponent-kBOja", + "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-kBOjaœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", + "target": "ChatOutput-8ZWWB", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-8ZWWBœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" + }, + { + "animated": false, + "data": { + "sourceHandle": { + "dataType": "Prompt", + "id": "Prompt-tOH5D", + "name": "prompt", + "output_types": [ + "Message" + ] + }, + "targetHandle": { + "fieldName": "system_message", + "id": "LanguageModelComponent-kBOja", + "inputTypes": [ + "Message" + ], + "type": "str" + } + }, + "id": "xy-edge__Prompt-tOH5D{œdataTypeœ:œPromptœ,œidœ:œPrompt-tOH5Dœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-kBOja{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-kBOjaœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "selected": false, + "source": "Prompt-tOH5D", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-tOH5Dœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-kBOja", + "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-kBOjaœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" } ], "nodes": [ @@ -93,7 +92,7 @@ "data": { "description": "Get chat inputs from the Playground.", "display_name": "Chat Input", - "id": "ChatInput-9rvSS", + "id": "ChatInput-SzjnT", "node": { "base_classes": [ "Message" @@ -361,7 +360,7 @@ }, "dragging": false, "height": 234, - "id": "ChatInput-9rvSS", + "id": "ChatInput-SzjnT", "measured": { "height": 234, "width": 320 @@ -382,7 +381,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-qrgXn", + "id": "Prompt-tOH5D", "node": { "base_classes": [ "Message" @@ -490,7 +489,7 @@ }, "dragging": false, "height": 260, - "id": "Prompt-qrgXn", + "id": "Prompt-tOH5D", "measured": { "height": 260, "width": 320 @@ -509,7 +508,7 @@ }, { "data": { - "id": "undefined-x1gke", + "id": "undefined-qkI8p", "node": { "description": "## 📖 README\n\nPerform basic prompting with a Language model component.\n\n#### Quick Start\n- Add your **OpenAI API key** to the **Language Model** component.\n- Open the **Playground** to chat with your bot.\n\n#### Next steps:\nExperiment by changing the prompt and the Language model temperature to see how the bot's responses change.", "display_name": "Read Me", @@ -521,7 +520,7 @@ }, "dragging": false, "height": 403, - "id": "undefined-x1gke", + "id": "undefined-qkI8p", "measured": { "height": 403, "width": 324 @@ -545,7 +544,7 @@ }, { "data": { - "id": "note-YJtLA", + "id": "note-CLC7a", "node": { "description": "### 💡 Add your OpenAI API key here 👇", "display_name": "", @@ -558,7 +557,7 @@ }, "dragging": false, "height": 324, - "id": "note-YJtLA", + "id": "note-CLC7a", "measured": { "height": 324, "width": 324 @@ -582,7 +581,7 @@ }, { "data": { - "id": "ChatOutput-AyRuN", + "id": "ChatOutput-8ZWWB", "node": { "base_classes": [ "Message" @@ -865,7 +864,7 @@ }, "dragging": false, "height": 234, - "id": "ChatOutput-AyRuN", + "id": "ChatOutput-8ZWWB", "measured": { "height": 234, "width": 320 @@ -884,7 +883,7 @@ }, { "data": { - "id": "LanguageModelComponent-UrOQf", + "id": "LanguageModelComponent-kBOja", "node": { "base_classes": [ "LanguageModel", @@ -909,7 +908,6 @@ "frozen": false, "icon": "brain-circuit", "legacy": false, - "lf_version": "1.4.2", "metadata": { "keywords": [ "model", @@ -926,8 +924,11 @@ "cache": true, "display_name": "Model Response", "group_outputs": false, + "hidden": null, "method": "text_response", "name": "text_output", + "options": null, + "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ @@ -940,8 +941,11 @@ "cache": true, "display_name": "Language Model", "group_outputs": false, + "hidden": null, "method": "build_model", "name": "model_output", + "options": null, + "required_inputs": null, "selected": "LanguageModel", "tool_mode": true, "types": [ @@ -991,7 +995,7 @@ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider. \"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n info=\"Select the model to use\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=True,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n return build_config\n" }, "input_value": { - "_input_type": "MessageTextInput", + "_input_type": "MessageInput", "advanced": false, "display_name": "Input", "dynamic": false, @@ -1067,7 +1071,7 @@ "icon": "Anthropic" }, { - "icon": "Google" + "icon": "GoogleGenerativeAI" } ], "placeholder": "", @@ -1100,8 +1104,9 @@ "value": false }, "system_message": { - "_input_type": "MessageTextInput", + "_input_type": "MultilineInput", "advanced": false, + "copy_field": false, "display_name": "System Message", "dynamic": false, "info": "A system message that helps set the behavior of the assistant", @@ -1111,6 +1116,7 @@ "list": false, "list_add_label": "Add More", "load_from_db": false, + "multiline": true, "name": "system_message", "placeholder": "", "required": false, @@ -1153,11 +1159,12 @@ }, "tool_mode": false }, + "selected_output": "text_output", "showNode": true, "type": "LanguageModelComponent" }, "dragging": false, - "id": "LanguageModelComponent-UrOQf", + "id": "LanguageModelComponent-kBOja", "measured": { "height": 534, "width": 320 @@ -1166,21 +1173,21 @@ "x": 1085.7542386472996, "y": 795.0399905192078 }, - "selected": false, + "selected": true, "type": "genericNode" } ], "viewport": { - "x": -38.712024727138214, - "y": -377.46660457274356, - "zoom": 0.7816796789893417 + "x": -171.73930599141136, + "y": -281.4054320344371, + "zoom": 0.7267911009473667 } }, "description": "Perform basic prompting with an OpenAI model.", "endpoint_name": null, - "id": "f0994431-652b-4fd1-940e-e5bfa1416fcc", + "id": "0dbee653-41ae-4e51-af2e-55757fb24be3", "is_component": false, - "last_tested_version": "1.4.2", + "last_tested_version": "1.5.0", "name": "Basic Prompting", "tags": [ "chatbots" diff --git a/src/backend/base/langflow/initial_setup/starter_projects/SEO Keyword Generator.json b/src/backend/base/langflow/initial_setup/starter_projects/SEO Keyword Generator.json index cb1b51060..6c7e09747 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/SEO Keyword Generator.json @@ -7,7 +7,7 @@ "data": { "sourceHandle": { "dataType": "Prompt", - "id": "Prompt-CMP8r", + "id": "Prompt-KS0e2", "name": "prompt", "output_types": [ "Message" @@ -15,47 +15,19 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "LanguageModelComponent-v0n1N", + "id": "LanguageModelComponent-zY7m0", "inputTypes": [ "Message" ], "type": "str" } }, - "id": "xy-edge__Prompt-CMP8r{œdataTypeœ:œPromptœ,œidœ:œPrompt-CMP8rœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-v0n1N{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-v0n1Nœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-Prompt-KS0e2{œdataTypeœ:œPromptœ,œidœ:œPrompt-KS0e2œ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-zY7m0{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-zY7m0œ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "Prompt-CMP8r", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-CMP8rœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-v0n1N", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-v0n1Nœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" - }, - { - "animated": false, - "className": "", - "data": { - "sourceHandle": { - "dataType": "Prompt", - "id": "Prompt-PZu7g", - "name": "prompt", - "output_types": [ - "Message" - ] - }, - "targetHandle": { - "fieldName": "system_message", - "id": "LanguageModelComponent-v0n1N", - "inputTypes": [ - "Message" - ], - "type": "str" - } - }, - "id": "xy-edge__Prompt-PZu7g{œdataTypeœ:œPromptœ,œidœ:œPrompt-PZu7gœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-v0n1N{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-v0n1Nœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", - "selected": false, - "source": "Prompt-PZu7g", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-PZu7gœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", - "target": "LanguageModelComponent-v0n1N", - "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-v0n1Nœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" + "source": "Prompt-KS0e2", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-KS0e2œ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-zY7m0", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-zY7m0œ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" }, { "animated": false, @@ -63,7 +35,7 @@ "data": { "sourceHandle": { "dataType": "LanguageModelComponent", - "id": "LanguageModelComponent-v0n1N", + "id": "LanguageModelComponent-zY7m0", "name": "text_output", "output_types": [ "Message" @@ -71,7 +43,7 @@ }, "targetHandle": { "fieldName": "input_value", - "id": "ChatOutput-2rZzN", + "id": "ChatOutput-S7Bzs", "inputTypes": [ "Data", "DataFrame", @@ -80,12 +52,37 @@ "type": "str" } }, - "id": "xy-edge__LanguageModelComponent-v0n1N{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-v0n1Nœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-2rZzN{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-2rZzNœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", + "id": "reactflow__edge-LanguageModelComponent-zY7m0{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-zY7m0œ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-S7Bzs{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-S7Bzsœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}", "selected": false, - "source": "LanguageModelComponent-v0n1N", - "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-v0n1Nœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", - "target": "ChatOutput-2rZzN", - "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-2rZzNœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" + "source": "LanguageModelComponent-zY7m0", + "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-zY7m0œ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}", + "target": "ChatOutput-S7Bzs", + "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-S7Bzsœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}" + }, + { + "data": { + "sourceHandle": { + "dataType": "Prompt", + "id": "Prompt-YWJzc", + "name": "prompt", + "output_types": [ + "Message" + ] + }, + "targetHandle": { + "fieldName": "system_message", + "id": "LanguageModelComponent-zY7m0", + "inputTypes": [ + "Message" + ], + "type": "str" + } + }, + "id": "xy-edge__Prompt-YWJzc{œdataTypeœ:œPromptœ,œidœ:œPrompt-YWJzcœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-zY7m0{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-zY7m0œ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}", + "source": "Prompt-YWJzc", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-YWJzcœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}", + "target": "LanguageModelComponent-zY7m0", + "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-zY7m0œ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}" } ], "nodes": [ @@ -93,7 +90,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-CMP8r", + "id": "Prompt-KS0e2", "node": { "base_classes": [ "Message" @@ -346,7 +343,7 @@ }, "dragging": false, "height": 779, - "id": "Prompt-CMP8r", + "id": "Prompt-KS0e2", "measured": { "height": 779, "width": 320 @@ -365,7 +362,7 @@ }, { "data": { - "id": "note-PopoT", + "id": "note-z1798", "node": { "description": "## SEO Keyword Generator\n\nThis template creates strategic keywords based on your product and audience profile.\n\n### Prerequisites\n\n* [OpenAI API Key](https://platform.openai.com/)\n\n### Quickstart\n\n1. In the **Language Model** component, add your OpenAI API Key.\n\n2. In the **Prompt** component, complete the following fields. Optionally, just run the flow with the included example values.\n\n* Product Information\n* Pain Points\n* Goals\n* Target Audience\n* Expertise Level\n* Review Output \n\n3. Open the **Playground**, and then click **Run Flow**. The LLM generates keywords based on your inputs.", "display_name": "", @@ -376,10 +373,10 @@ }, "dragging": false, "height": 716, - "id": "note-PopoT", + "id": "note-z1798", "measured": { "height": 716, - "width": 569 + "width": 568 }, "position": { "x": 147.91696397014965, @@ -402,7 +399,7 @@ "data": { "description": "Create a prompt template with dynamic variables.", "display_name": "Prompt", - "id": "Prompt-PZu7g", + "id": "Prompt-YWJzc", "node": { "base_classes": [ "Message" @@ -510,7 +507,7 @@ }, "dragging": false, "height": 260, - "id": "Prompt-PZu7g", + "id": "Prompt-YWJzc", "measured": { "height": 260, "width": 320 @@ -531,7 +528,7 @@ "data": { "description": "Display a chat message in the Playground.", "display_name": "Chat Output", - "id": "ChatOutput-2rZzN", + "id": "ChatOutput-S7Bzs", "node": { "base_classes": [ "Message" @@ -814,7 +811,7 @@ }, "dragging": false, "height": 234, - "id": "ChatOutput-2rZzN", + "id": "ChatOutput-S7Bzs", "measured": { "height": 234, "width": 320 @@ -833,7 +830,7 @@ }, { "data": { - "id": "note-Wojgl", + "id": "note-dikol", "node": { "description": "### 💡 Add your OpenAI API key here", "display_name": "", @@ -845,21 +842,21 @@ "type": "note" }, "dragging": false, - "id": "note-Wojgl", + "id": "note-dikol", "measured": { "height": 324, "width": 324 }, "position": { - "x": 1212.6765474786587, - "y": 346.5142342999466 + "x": 1208.3032428372405, + "y": 369.8385257208433 }, "selected": false, "type": "noteNode" }, { "data": { - "id": "LanguageModelComponent-v0n1N", + "id": "LanguageModelComponent-zY7m0", "node": { "base_classes": [ "LanguageModel", @@ -884,7 +881,6 @@ "frozen": false, "icon": "brain-circuit", "legacy": false, - "lf_version": "1.4.2", "metadata": { "keywords": [ "model", @@ -901,8 +897,11 @@ "cache": true, "display_name": "Model Response", "group_outputs": false, + "hidden": null, "method": "text_response", "name": "text_output", + "options": null, + "required_inputs": null, "selected": "Message", "tool_mode": true, "types": [ @@ -915,8 +914,11 @@ "cache": true, "display_name": "Language Model", "group_outputs": false, + "hidden": null, "method": "build_model", "name": "model_output", + "options": null, + "required_inputs": null, "selected": "LanguageModel", "tool_mode": true, "types": [ @@ -966,7 +968,7 @@ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langflow.inputs.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider. \"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n info=\"Select the model to use\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=True,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n return build_config\n" }, "input_value": { - "_input_type": "MessageTextInput", + "_input_type": "MessageInput", "advanced": false, "display_name": "Input", "dynamic": false, @@ -1042,7 +1044,7 @@ "icon": "Anthropic" }, { - "icon": "Google" + "icon": "GoogleGenerativeAI" } ], "placeholder": "", @@ -1075,8 +1077,9 @@ "value": false }, "system_message": { - "_input_type": "MessageTextInput", - "advanced": true, + "_input_type": "MultilineInput", + "advanced": false, + "copy_field": false, "display_name": "System Message", "dynamic": false, "info": "A system message that helps set the behavior of the assistant", @@ -1086,6 +1089,7 @@ "list": false, "list_add_label": "Add More", "load_from_db": false, + "multiline": true, "name": "system_message", "placeholder": "", "required": false, @@ -1128,11 +1132,12 @@ }, "tool_mode": false }, + "selected_output": "text_output", "showNode": true, "type": "LanguageModelComponent" }, "dragging": false, - "id": "LanguageModelComponent-v0n1N", + "id": "LanguageModelComponent-zY7m0", "measured": { "height": 534, "width": 320 @@ -1146,16 +1151,16 @@ } ], "viewport": { - "x": -10.563204467302512, - "y": -29.97245595813189, - "zoom": 0.681755116725734 + "x": -303.5261603757315, + "y": -21.163393979488205, + "zoom": 0.6859801102324296 } }, "description": "Generates targeted SEO keywords based on product information, pain points, and customer profiles for strategic marketing.", "endpoint_name": null, - "id": "d4228d1f-4f1b-48d6-8ffc-430f47bfb5d4", + "id": "77064cce-d437-42be-a7bb-f0dedf93a75a", "is_component": false, - "last_tested_version": "1.4.2", + "last_tested_version": "1.4.3", "name": "SEO Keyword Generator", "tags": [ "chatbots",