From 05de3ba2554f1d62dc07f719a9fb2fb8847cd644 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 1 Apr 2024 16:40:07 -0300 Subject: [PATCH 1/5] Update HuggingFace Spaces documentation with duplication process --- .../getting-started/hugging-face-spaces.mdx | 25 ++++++++++++------ docs/static/img/duplicate-space.png | Bin 0 -> 211167 bytes 2 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 docs/static/img/duplicate-space.png diff --git a/docs/docs/getting-started/hugging-face-spaces.mdx b/docs/docs/getting-started/hugging-face-spaces.mdx index 4759ea398..dfb377e7f 100644 --- a/docs/docs/getting-started/hugging-face-spaces.mdx +++ b/docs/docs/getting-started/hugging-face-spaces.mdx @@ -1,20 +1,29 @@ # 🤗 HuggingFace Spaces -A fully featured version of Langflow can be accessed via HuggingFace spaces with no installation required. +TLDR; +A fully featured version of Langflow can be accessed via [HuggingFace Spaces](https://huggingface.co/spaces/Logspace/Langflow?duplicate=true) with no installation required. All you gotta do is [duplicate the Space](https://huggingface.co/spaces/Logspace/Langflow?duplicate=true) and you'll have your own copy to play around with! -import ThemedImage from "@theme/ThemedImage"; -import useBaseUrl from "@docusaurus/useBaseUrl"; -import ZoomableImage from "/src/theme/ZoomableImage.js"; +--- -{" "} +# 🚀 Getting Started + +HuggingFace provides great support for running Langflow in their Spaces environment. This means you can run Langflow without any installation required. + +The first step is to go to the [Langflow Space](https://huggingface.co/spaces/Logspace/Langflow?duplicate=true). + +You'll be greeted with the following screen: -Check out Langflow on [HuggingFace Spaces](https://huggingface.co/spaces/Logspace/Langflow). +From here, you can rename your Space, define the visibility (Public or Private) and click on the `Duplicate Space` button to start the duplication process. + +import ThemedImage from "@theme/ThemedImage"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import ZoomableImage from "/src/theme/ZoomableImage.js"; diff --git a/docs/static/img/duplicate-space.png b/docs/static/img/duplicate-space.png new file mode 100644 index 0000000000000000000000000000000000000000..2b342bbcdc09dc4a022caebf95c5644fed187681 GIT binary patch literal 211167 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 KT5|dRv;P68Z+^W1 literal 0 HcmV?d00001 From 501a71d2cbb08e60ba29d81300cffb16a07baa43 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 1 Apr 2024 16:42:47 -0300 Subject: [PATCH 2/5] Add asyncio event loop to uvicorn command --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5d165e799..91f273037 100644 --- a/Makefile +++ b/Makefile @@ -137,7 +137,7 @@ ifeq ($(login),1) poetry run uvicorn --factory langflow.main:create_app --host 0.0.0.0 --port 7860 --reload --env-file .env --loop asyncio else @echo "Running backend with autologin"; - LANGFLOW_AUTO_LOGIN=True poetry run uvicorn --factory langflow.main:create_app --host 0.0.0.0 --port 7860 --reload --env-file .env + LANGFLOW_AUTO_LOGIN=True poetry run uvicorn --factory langflow.main:create_app --host 0.0.0.0 --port 7860 --reload --env-file .env --loop asyncio endif build_and_run: From 6bfc3bf8ad81a726e77e4065e78264ee69699dd9 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 1 Apr 2024 16:46:23 -0300 Subject: [PATCH 3/5] Add installation of backend in start target --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 91f273037..9412752d4 100644 --- a/Makefile +++ b/Makefile @@ -99,6 +99,7 @@ endif start: @echo 'Running the CLI' + @make install_backend ifeq ($(open_browser),false) poetry run langflow run --path src/frontend/build --log-level $(log_level) --host $(host) --port $(port) --env-file $(env) --no-open-browser else From 85c375382f1e3314fe7101c4acbfe972259a962d Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Mon, 1 Apr 2024 16:46:32 -0300 Subject: [PATCH 4/5] udpate some starter projects --- .../Langflow Blog Writter.json | 1 + .../Langflow Data Ingestion.json | 1091 ---------- .../Langflow Memory Conversation.json | 2 +- .../Langflow Prompt Chaining.json | 1772 +++++++++++++++++ 4 files changed, 1774 insertions(+), 1092 deletions(-) create mode 100644 src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json delete mode 100644 src/backend/base/langflow/initial_setup/starter_projects/Langflow Data Ingestion.json create mode 100644 src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json new file mode 100644 index 000000000..e9c580c0a --- /dev/null +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json @@ -0,0 +1 @@ +{"id":"163e4b44-7d18-4166-b7e4-95b04560e255","data":{"nodes":[{"id":"Prompt-3taIG","type":"genericNode","position":{"x":1331.381712783371,"y":535.0279854229713},"data":{"type":"Prompt","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langchain_core.prompts import PromptTemplate\n\nfrom langflow.field_typing import Prompt, TemplateField, Text\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": TemplateField(display_name=\"Template\"),\n \"code\": TemplateField(advanced=True),\n }\n\n def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Text:\n from langflow.base.prompts.utils import dict_values_to_string\n\n prompt_template = PromptTemplate.from_template(Text(template))\n kwargs = dict_values_to_string(kwargs)\n kwargs = {k: \"\\n\".join(v) if isinstance(v, list) else v for k, v in kwargs.items()}\n try:\n formated_prompt = prompt_template.format(**kwargs)\n except Exception as exc:\n raise ValueError(f\"Error formatting prompt: {exc}\") from exc\n self.status = f'Prompt:\\n\"{formated_prompt}\"'\n return formated_prompt\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"template":{"type":"prompt","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"Reference 1:\n\n{reference_1}\n\n---\n\nReference 2:\n\n{reference_2}\n\n---\n\nReference 3:\n\n{reference_3}\n\n---\n\nStructure:\n\n{structure}\n\n\n---\n\n{instructions}\n\nFinal Blog:\n\n","fileTypes":[],"file_path":"","password":false,"name":"template","display_name":"Template","advanced":false,"input_types":["Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false},"_type":"CustomComponent","reference_1":{"field_type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"","fileTypes":[],"file_path":"","password":false,"name":"reference_1","display_name":"reference_1","advanced":false,"input_types":["Document","BaseOutputParser","Record","Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"type":"str"},"reference_2":{"field_type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"","fileTypes":[],"file_path":"","password":false,"name":"reference_2","display_name":"reference_2","advanced":false,"input_types":["Document","BaseOutputParser","Record","Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"type":"str"},"structure":{"field_type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"Analyzing the Acquisition of SOCCER PLAYER by SOCCER TEAM (anonymized data)\nReflecting on the player's arrival X seasons ago…\nExploring the rationale behind this transfer and its potential impact on team dynamics\nWhat lies ahead? Insights into the revamped lineup and the buzz it generates among supporters\n\nThis analysis delves into the recent acquisition of a soccer player by a prominent team. Here's why this move is noteworthy:\n\nThe player's integration into the team several seasons ago marked a significant turning point.\nExamining the strategic reasoning behind this transfer sheds light on the team's evolving tactics and ambitions.\nA glimpse into the upcoming lineup hints at the team's competitive edge and fan excitement, setting the stage for an exciting season ahead.","fileTypes":[],"file_path":"","password":false,"name":"structure","display_name":"structure","advanced":false,"input_types":["Document","BaseOutputParser","Record","Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"type":"str"},"reference_3":{"field_type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"","fileTypes":[],"file_path":"","password":false,"name":"reference_3","display_name":"reference_3","advanced":false,"input_types":["Document","BaseOutputParser","Record","Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"type":"str"},"instructions":{"field_type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"Given the references and structure provided, write a blog about SOCCER PLAYER being acquired by SOCCER TEAM.","fileTypes":[],"file_path":"","password":false,"name":"instructions","display_name":"instructions","advanced":false,"input_types":["Document","BaseOutputParser","Record","Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false,"type":"str"}},"description":"Create a prompt template with dynamic variables.","icon":"prompts","is_input":null,"is_output":null,"is_composition":null,"base_classes":["Text","str","object"],"name":"","display_name":"Prompt","documentation":"","custom_fields":{"template":["reference_1","reference_2","reference_3","structure","instructions"]},"output_types":["Text"],"full_path":null,"field_formatters":{},"frozen":false,"field_order":[],"beta":false,"error":null},"id":"Prompt-3taIG","description":"Create a prompt template with dynamic variables.","display_name":"Prompt"},"selected":false,"width":384,"height":762,"dragging":false,"positionAbsolute":{"x":1331.381712783371,"y":535.0279854229713}},{"id":"URL-lRph2","type":"genericNode","position":{"x":597.7955409467556,"y":736.8178220997634},"data":{"type":"URL","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"urls":{"type":"str","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"urls","display_name":"URL","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":["https://www.marca.com/en/football/psg/2023/08/15/64dbaa6de2704ea0868b45c8.html"]},"_type":"CustomComponent"},"description":"Fetch content from one or more URLs.","icon":"layout-template","base_classes":["Record"],"display_name":"URL","documentation":"","custom_fields":{"urls":null},"output_types":["Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"URL-lRph2"},"selected":false,"width":384,"height":282,"positionAbsolute":{"x":597.7955409467556,"y":736.8178220997634},"dragging":false},{"id":"URL-7Dziz","type":"genericNode","position":{"x":574.4142139929079,"y":1175.2784505900304},"data":{"type":"URL","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"urls":{"type":"str","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"urls","display_name":"URL","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":["https://www.bbc.com/sport/football/66495833"]},"_type":"CustomComponent"},"description":"Fetch content from one or more URLs.","icon":"layout-template","base_classes":["Record"],"display_name":"URL","documentation":"","custom_fields":{"urls":null},"output_types":["Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"URL-7Dziz"},"selected":false,"width":384,"height":282},{"id":"ChatOutput-fi9CW","type":"genericNode","position":{"x":2503.8617424688505,"y":789.3005578928434},"data":{"type":"ChatOutput","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional, Union\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Interaction Panel.\"\n icon = \"ChatOutput\"\n\n def build(\n self,\n sender: Optional[str] = \"Machine\",\n sender_name: Optional[str] = \"AI\",\n input_value: Optional[str] = None,\n session_id: Optional[str] = None,\n return_record: Optional[bool] = False,\n record_template: Optional[str] = \"{text}\",\n ) -> Union[Text, Record]:\n return super().build(\n sender=sender,\n sender_name=sender_name,\n input_value=input_value,\n session_id=session_id,\n return_record=return_record,\n record_template=record_template,\n )\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"input_value":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"fileTypes":[],"file_path":"","password":false,"name":"input_value","display_name":"Message","advanced":false,"input_types":["Text"],"dynamic":false,"info":"","load_from_db":false,"title_case":false},"record_template":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":true,"value":"{text}","fileTypes":[],"file_path":"","password":false,"name":"record_template","display_name":"Record Template","advanced":true,"dynamic":false,"info":"In case of Message being a Record, this template will be used to convert it to text.","load_from_db":false,"title_case":false,"input_types":["Text"]},"return_record":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"file_path":"","password":false,"name":"return_record","display_name":"Return Record","advanced":true,"dynamic":false,"info":"Return the message as a record containing the sender, sender_name, and session_id.","load_from_db":false,"title_case":false},"sender":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"Machine","fileTypes":[],"file_path":"","password":false,"options":["Machine","User"],"name":"sender","display_name":"Sender Type","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"sender_name":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"AI","fileTypes":[],"file_path":"","password":false,"name":"sender_name","display_name":"Sender Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"session_id":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"session_id","display_name":"Session ID","advanced":true,"dynamic":false,"info":"If provided, the message will be stored in the memory.","load_from_db":false,"title_case":false,"input_types":["Text"]},"_type":"CustomComponent"},"description":"Display a chat message in the Interaction Panel.","icon":"ChatOutput","base_classes":["Text","Record","object","str"],"display_name":"Chat Output","documentation":"","custom_fields":{"sender":null,"sender_name":null,"input_value":null,"session_id":null,"return_record":null,"record_template":null},"output_types":["Text","Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"ChatOutput-fi9CW"},"selected":false,"width":384,"height":385},{"id":"OpenAIModel-ZD1ks","type":"genericNode","position":{"x":1917.7089968570963,"y":575.9186499244129},"data":{"type":"OpenAIModel","node":{"template":{"input_value":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"input_value","display_name":"Input","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Optional\n\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.constants import STREAM_INFO_TEXT\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.field_typing import NestedDict, Text\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n\n field_order = [\n \"max_tokens\",\n \"model_kwargs\",\n \"model_name\",\n \"openai_api_base\",\n \"openai_api_key\",\n \"temperature\",\n \"input_value\",\n \"system_message\",\n \"stream\",\n ]\n\n def build_config(self):\n return {\n \"input_value\": {\"display_name\": \"Input\"},\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": True,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n },\n \"model_name\": {\n \"display_name\": \"Model Name\",\n \"advanced\": False,\n \"options\": [\n \"gpt-4-turbo-preview\",\n \"gpt-3.5-turbo\",\n \"gpt-4-0125-preview\",\n \"gpt-4-1106-preview\",\n \"gpt-4-vision-preview\",\n \"gpt-3.5-turbo-0125\",\n \"gpt-3.5-turbo-1106\",\n ],\n \"value\": \"gpt-4-turbo-preview\",\n },\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": True,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"info\": \"The OpenAI API Key to use for the OpenAI model.\",\n \"advanced\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"value\": 0.1,\n },\n \"stream\": {\n \"display_name\": \"Stream\",\n \"info\": STREAM_INFO_TEXT,\n \"advanced\": True,\n },\n \"system_message\": {\n \"display_name\": \"System Message\",\n \"info\": \"System message to pass to the model.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n input_value: Text,\n openai_api_key: str,\n temperature: float,\n model_name: str,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n openai_api_base: Optional[str] = None,\n stream: bool = False,\n system_message: Optional[str] = None,\n ) -> Text:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n output = ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n\n return self.get_chat_result(output, stream, input_value, system_message)\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"max_tokens":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"1024","fileTypes":[],"file_path":"","password":false,"name":"max_tokens","display_name":"Max Tokens","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_kwargs":{"type":"NestedDict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":{},"fileTypes":[],"file_path":"","password":false,"name":"model_kwargs","display_name":"Model Kwargs","advanced":true,"dynamic":false,"info":"","load_from_db":false,"title_case":false},"model_name":{"type":"str","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"value":"gpt-3.5-turbo-0125","fileTypes":[],"file_path":"","password":false,"options":["gpt-4-turbo-preview","gpt-3.5-turbo","gpt-4-0125-preview","gpt-4-1106-preview","gpt-4-vision-preview","gpt-3.5-turbo-0125","gpt-3.5-turbo-1106"],"name":"model_name","display_name":"Model Name","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":true,"dynamic":false,"info":"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.","load_from_db":false,"title_case":false,"input_types":["Text"]},"openai_api_key":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":"The OpenAI API Key to use for the OpenAI model.","load_from_db":false,"title_case":false,"input_types":["Text"],"value":""},"stream":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":true,"fileTypes":[],"file_path":"","password":false,"name":"stream","display_name":"Stream","advanced":true,"dynamic":false,"info":"Stream the response from the model. Streaming works only in Chat.","load_from_db":false,"title_case":false},"system_message":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"system_message","display_name":"System Message","advanced":true,"dynamic":false,"info":"System message to pass to the model.","load_from_db":false,"title_case":false,"input_types":["Text"]},"temperature":{"type":"float","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"0.7","fileTypes":[],"file_path":"","password":false,"name":"temperature","display_name":"Temperature","advanced":false,"dynamic":false,"info":"","rangeSpec":{"step_type":"float","min":-1,"max":1,"step":0.1},"load_from_db":false,"title_case":false},"_type":"CustomComponent"},"description":"Generates text using OpenAI LLMs.","icon":"OpenAI","base_classes":["str","Text","object"],"display_name":"OpenAI","documentation":"","custom_fields":{"input_value":null,"openai_api_key":null,"temperature":null,"model_name":null,"max_tokens":null,"model_kwargs":null,"openai_api_base":null,"stream":null,"system_message":null},"output_types":["Text"],"field_formatters":{},"frozen":false,"field_order":["max_tokens","model_kwargs","model_name","openai_api_base","openai_api_key","temperature","input_value","system_message","stream"],"beta":false},"id":"OpenAIModel-ZD1ks"},"selected":true,"width":384,"height":565,"positionAbsolute":{"x":1917.7089968570963,"y":575.9186499244129},"dragging":false},{"id":"URL-jdykB","type":"genericNode","position":{"x":573.961301764604,"y":336.41463436122086},"data":{"type":"URL","node":{"template":{"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"urls":{"type":"str","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"urls","display_name":"URL","advanced":false,"dynamic":false,"info":"","load_from_db":false,"title_case":false,"input_types":["Text"],"value":["https://ge.globo.com/futebol/futebol-internacional/futebol-saudita/noticia/2024/03/10/zagueiro-do-al-hilal-rasga-elogios-a-neymar-ele-e-incrivel.ghtml"]},"_type":"CustomComponent"},"description":"Fetch content from one or more URLs.","icon":"layout-template","base_classes":["Record"],"display_name":"URL","documentation":"","custom_fields":{"urls":null},"output_types":["Record"],"field_formatters":{},"frozen":false,"field_order":[],"beta":false},"id":"URL-jdykB"},"selected":false,"width":384,"height":282,"positionAbsolute":{"x":573.961301764604,"y":336.41463436122086},"dragging":false}],"edges":[{"source":"URL-7Dziz","target":"Prompt-3taIG","sourceHandle":"{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-7Dzizœ}","targetHandle":"{œfieldNameœ:œreference_3œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}","id":"reactflow__edge-URL-7Dziz{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-7Dzizœ}-Prompt-3taIG{œfieldNameœ:œreference_3œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"reference_3","id":"Prompt-3taIG","inputTypes":["Document","BaseOutputParser","Record","Text"],"type":"str"},"sourceHandle":{"baseClasses":["Record"],"dataType":"URL","id":"URL-7Dziz"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"URL-lRph2","target":"Prompt-3taIG","sourceHandle":"{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-lRph2œ}","targetHandle":"{œfieldNameœ:œreference_2œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}","id":"reactflow__edge-URL-lRph2{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-lRph2œ}-Prompt-3taIG{œfieldNameœ:œreference_2œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"reference_2","id":"Prompt-3taIG","inputTypes":["Document","BaseOutputParser","Record","Text"],"type":"str"},"sourceHandle":{"baseClasses":["Record"],"dataType":"URL","id":"URL-lRph2"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 ","selected":false},{"source":"Prompt-3taIG","sourceHandle":"{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-3taIGœ}","target":"OpenAIModel-ZD1ks","targetHandle":"{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-ZD1ksœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"input_value","id":"OpenAIModel-ZD1ks","inputTypes":["Text"],"type":"str"},"sourceHandle":{"baseClasses":["Text","str","object"],"dataType":"Prompt","id":"Prompt-3taIG"}},"style":{"stroke":"#555"},"className":"stroke-foreground stroke-connection","id":"reactflow__edge-Prompt-3taIG{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-3taIGœ}-OpenAIModel-ZD1ks{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-ZD1ksœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}"},{"source":"OpenAIModel-ZD1ks","sourceHandle":"{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-ZD1ksœ}","target":"ChatOutput-fi9CW","targetHandle":"{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-fi9CWœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"input_value","id":"ChatOutput-fi9CW","inputTypes":["Text"],"type":"str"},"sourceHandle":{"baseClasses":["str","Text","object"],"dataType":"OpenAIModel","id":"OpenAIModel-ZD1ks"}},"style":{"stroke":"#555"},"className":"stroke-foreground stroke-connection","id":"reactflow__edge-OpenAIModel-ZD1ks{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-ZD1ksœ}-ChatOutput-fi9CW{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-fi9CWœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}"},{"source":"URL-jdykB","sourceHandle":"{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-jdykBœ}","target":"Prompt-3taIG","targetHandle":"{œfieldNameœ:œreference_1œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}","data":{"targetHandle":{"fieldName":"reference_1","id":"Prompt-3taIG","inputTypes":["Document","BaseOutputParser","Record","Text"],"type":"str"},"sourceHandle":{"baseClasses":["Record"],"dataType":"URL","id":"URL-jdykB"}},"style":{"stroke":"#555"},"className":"stroke-foreground stroke-connection","id":"reactflow__edge-URL-jdykB{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-jdykBœ}-Prompt-3taIG{œfieldNameœ:œreference_1œ,œidœ:œPrompt-3taIGœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}"}],"viewport":{"x":-142.89038264176406,"y":-85.47379699387753,"zoom":0.6597539594750865}},"description":"","name":"Blog Writter","last_tested_version":"1.0.0a0","is_component":false} \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Data Ingestion.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Data Ingestion.json deleted file mode 100644 index 9affd0ae5..000000000 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Data Ingestion.json +++ /dev/null @@ -1,1091 +0,0 @@ -{ - "name": "Data Ingestion", - "icon": ":inbox_tray:", - "icon_bg_color": "#FFD700", - "description": "This project is the starting point to insert data into a Vector Store. \n\nWe use the Vector Store Chroma but you can replace it with any other Vector Store. \n\nYou start by deciding what type of data you want to load, then you pick a place where you want to store the vectors and run it.\n\nThis will create a vector store in your local environment which you can query using the Chroma Search component.", - "data": { - "nodes": [ - { - "id": "RecursiveCharacterTextSplitter-jwfyG", - "type": "genericNode", - "position": { - "x": 1042.4388767006992, - "y": 633.2204634490822 - }, - "data": { - "type": "RecursiveCharacterTextSplitter", - "node": { - "template": { - "inputs": { - "type": "Document", - "required": true, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "inputs", - "display_name": "Input", - "advanced": false, - "input_types": [ - "Document", - "Record" - ], - "dynamic": false, - "info": "The texts to split.", - "title_case": false - }, - "chunk_overlap": { - "type": "int", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": 200, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chunk_overlap", - "display_name": "Chunk Overlap", - "advanced": false, - "dynamic": false, - "info": "The amount of overlap between chunks.", - "title_case": false - }, - "chunk_size": { - "type": "int", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": 1000, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chunk_size", - "display_name": "Chunk Size", - "advanced": false, - "dynamic": false, - "info": "The maximum length of each chunk.", - "title_case": false - }, - "code": { - "type": "code", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": true, - "value": "from typing import Optional\n\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\nfrom langchain_core.documents import Document\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema import Record\nfrom langflow.utils.util import build_loader_repr_from_records, unescape_string\n\n\nclass RecursiveCharacterTextSplitterComponent(CustomComponent):\n display_name: str = \"Recursive Character Text Splitter\"\n description: str = \"Split text into chunks of a specified length.\"\n documentation: str = \"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\"\n\n def build_config(self):\n return {\n \"inputs\": {\n \"display_name\": \"Input\",\n \"info\": \"The texts to split.\",\n \"input_types\": [\"Document\", \"Record\"],\n },\n \"separators\": {\n \"display_name\": \"Separators\",\n \"info\": 'The characters to split on.\\nIf left empty defaults to [\"\\\\n\\\\n\", \"\\\\n\", \" \", \"\"].',\n \"is_list\": True,\n },\n \"chunk_size\": {\n \"display_name\": \"Chunk Size\",\n \"info\": \"The maximum length of each chunk.\",\n \"field_type\": \"int\",\n \"value\": 1000,\n },\n \"chunk_overlap\": {\n \"display_name\": \"Chunk Overlap\",\n \"info\": \"The amount of overlap between chunks.\",\n \"field_type\": \"int\",\n \"value\": 200,\n },\n \"code\": {\"show\": False},\n }\n\n def build(\n self,\n inputs: list[Document],\n separators: Optional[list[str]] = None,\n chunk_size: Optional[int] = 1000,\n chunk_overlap: Optional[int] = 200,\n ) -> list[Record]:\n \"\"\"\n Split text into chunks of a specified length.\n\n Args:\n separators (list[str]): The characters to split on.\n chunk_size (int): The maximum length of each chunk.\n chunk_overlap (int): The amount of overlap between chunks.\n length_function (function): The function to use to calculate the length of the text.\n\n Returns:\n list[str]: The chunks of text.\n \"\"\"\n\n if separators == \"\":\n separators = None\n elif separators:\n # check if the separators list has escaped characters\n # if there are escaped characters, unescape them\n separators = [unescape_string(x) for x in separators]\n\n # Make sure chunk_size and chunk_overlap are ints\n if isinstance(chunk_size, str):\n chunk_size = int(chunk_size)\n if isinstance(chunk_overlap, str):\n chunk_overlap = int(chunk_overlap)\n splitter = RecursiveCharacterTextSplitter(\n separators=separators,\n chunk_size=chunk_size,\n chunk_overlap=chunk_overlap,\n )\n documents = []\n for _input in inputs:\n if isinstance(_input, Record):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n docs = splitter.split_documents(documents)\n records = self.to_records(docs)\n self.repr_value = build_loader_repr_from_records(records)\n return records\n", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "code", - "advanced": true, - "dynamic": true, - "info": "", - "load_from_db": false, - "title_case": false - }, - "separators": { - "type": "str", - "required": false, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "separators", - "display_name": "Separators", - "advanced": false, - "dynamic": false, - "info": "The characters to split on.\nIf left empty defaults to [\"\\n\\n\", \"\\n\", \" \", \"\"].", - "title_case": false, - "input_types": [ - "Text" - ], - "value": [ - "\\n" - ] - }, - "_type": "CustomComponent" - }, - "description": "Split text into chunks of a specified length.", - "base_classes": [ - "Record" - ], - "display_name": "Recursive Character Text Splitter", - "documentation": "https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter", - "custom_fields": { - "inputs": null, - "separators": null, - "chunk_size": null, - "chunk_overlap": null - }, - "output_types": [ - "Record" - ], - "field_formatters": {}, - "frozen": false, - "beta": false - }, - "id": "RecursiveCharacterTextSplitter-jwfyG" - }, - "selected": false, - "width": 384, - "height": 509, - "positionAbsolute": { - "x": 1042.4388767006992, - "y": 633.2204634490822 - }, - "dragging": false - }, - { - "id": "Chroma-aFGHF", - "type": "genericNode", - "position": { - "x": 1641.280676720732, - "y": 356.94961598422196 - }, - "data": { - "type": "Chroma", - "node": { - "template": { - "embedding": { - "type": "Embeddings", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "embedding", - "display_name": "Embedding", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false - }, - "inputs": { - "type": "Record", - "required": false, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "inputs", - "display_name": "Input", - "advanced": false, - "input_types": [ - "Document", - "Record" - ], - "dynamic": false, - "info": "", - "title_case": false - }, - "chroma_server_cors_allow_origins": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chroma_server_cors_allow_origins", - "display_name": "Server CORS Allow Origins", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "chroma_server_grpc_port": { - "type": "int", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chroma_server_grpc_port", - "display_name": "Server gRPC Port", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "chroma_server_host": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chroma_server_host", - "display_name": "Server Host", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "chroma_server_port": { - "type": "int", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chroma_server_port", - "display_name": "Server Port", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "chroma_server_ssl_enabled": { - "type": "bool", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chroma_server_ssl_enabled", - "display_name": "Server SSL Enabled", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "code": { - "type": "code", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": true, - "value": "from typing import List, Optional, Union\n\nimport chromadb # type: ignore\nfrom langchain.embeddings.base import Embeddings\nfrom langchain.schema import BaseRetriever\nfrom langchain_community.vectorstores import VectorStore\nfrom langchain_community.vectorstores.chroma import Chroma\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema.schema import Record\n\n\nclass ChromaComponent(CustomComponent):\n \"\"\"\n A custom component for implementing a Vector Store using Chroma.\n \"\"\"\n\n display_name: str = \"Chroma\"\n description: str = \"Implementation of Vector Store using Chroma\"\n documentation = \"https://python.langchain.com/docs/integrations/vectorstores/chroma\"\n icon = \"Chroma\"\n\n def build_config(self):\n \"\"\"\n Builds the configuration for the component.\n\n Returns:\n - dict: A dictionary containing the configuration options for the component.\n \"\"\"\n return {\n \"collection_name\": {\"display_name\": \"Collection Name\", \"value\": \"langflow\"},\n \"index_directory\": {\"display_name\": \"Persist Directory\"},\n \"code\": {\"advanced\": True, \"display_name\": \"Code\"},\n \"inputs\": {\"display_name\": \"Input\", \"input_types\": [\"Document\", \"Record\"]},\n \"embedding\": {\"display_name\": \"Embedding\"},\n \"chroma_server_cors_allow_origins\": {\n \"display_name\": \"Server CORS Allow Origins\",\n \"advanced\": True,\n },\n \"chroma_server_host\": {\"display_name\": \"Server Host\", \"advanced\": True},\n \"chroma_server_port\": {\"display_name\": \"Server Port\", \"advanced\": True},\n \"chroma_server_grpc_port\": {\n \"display_name\": \"Server gRPC Port\",\n \"advanced\": True,\n },\n \"chroma_server_ssl_enabled\": {\n \"display_name\": \"Server SSL Enabled\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n collection_name: str,\n embedding: Embeddings,\n chroma_server_ssl_enabled: bool,\n index_directory: Optional[str] = None,\n inputs: Optional[List[Record]] = None,\n chroma_server_cors_allow_origins: Optional[str] = None,\n chroma_server_host: Optional[str] = None,\n chroma_server_port: Optional[int] = None,\n chroma_server_grpc_port: Optional[int] = None,\n ) -> Union[VectorStore, BaseRetriever]:\n \"\"\"\n Builds the Vector Store or BaseRetriever object.\n\n Args:\n - collection_name (str): The name of the collection.\n - index_directory (Optional[str]): The directory to persist the Vector Store to.\n - chroma_server_ssl_enabled (bool): Whether to enable SSL for the Chroma server.\n - embedding (Optional[Embeddings]): The embeddings to use for the Vector Store.\n - documents (Optional[Document]): The documents to use for the Vector Store.\n - chroma_server_cors_allow_origins (Optional[str]): The CORS allow origins for the Chroma server.\n - chroma_server_host (Optional[str]): The host for the Chroma server.\n - chroma_server_port (Optional[int]): The port for the Chroma server.\n - chroma_server_grpc_port (Optional[int]): The gRPC port for the Chroma server.\n\n Returns:\n - Union[VectorStore, BaseRetriever]: The Vector Store or BaseRetriever object.\n \"\"\"\n\n # Chroma settings\n chroma_settings = None\n\n if chroma_server_host is not None:\n chroma_settings = chromadb.config.Settings(\n chroma_server_cors_allow_origins=chroma_server_cors_allow_origins or None,\n chroma_server_host=chroma_server_host,\n chroma_server_port=chroma_server_port or None,\n chroma_server_grpc_port=chroma_server_grpc_port or None,\n chroma_server_ssl_enabled=chroma_server_ssl_enabled,\n )\n\n # If documents, then we need to create a Chroma instance using .from_documents\n\n # Check index_directory and expand it if it is a relative path\n if index_directory is not None:\n index_directory = self.resolve_path(index_directory)\n\n documents = []\n for _input in inputs or []:\n if isinstance(_input, Record):\n documents.append(_input.to_lc_document())\n else:\n documents.append(_input)\n if documents is not None and embedding is not None:\n if len(documents) == 0:\n raise ValueError(\"If documents are provided, there must be at least one document.\")\n chroma = Chroma.from_documents(\n documents=documents, # type: ignore\n persist_directory=index_directory,\n collection_name=collection_name,\n embedding=embedding,\n client_settings=chroma_settings,\n )\n else:\n chroma = Chroma(\n persist_directory=index_directory,\n client_settings=chroma_settings,\n embedding_function=embedding,\n )\n return chroma\n", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "code", - "advanced": true, - "dynamic": true, - "info": "", - "load_from_db": false, - "title_case": false - }, - "collection_name": { - "type": "str", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": "langflow_contrib", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "collection_name", - "display_name": "Collection Name", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "index_directory": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "index_directory", - "display_name": "Persist Directory", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ], - "value": "./chroma_langflow" - }, - "_type": "CustomComponent" - }, - "description": "Implementation of Vector Store using Chroma", - "icon": "Chroma", - "base_classes": [ - "Serializable", - "VectorStore", - "object", - "Runnable", - "BaseRetriever", - "RunnableSerializable", - "Generic" - ], - "display_name": "Chroma", - "documentation": "https://python.langchain.com/docs/integrations/vectorstores/chroma", - "custom_fields": { - "collection_name": null, - "embedding": null, - "chroma_server_ssl_enabled": null, - "index_directory": null, - "inputs": null, - "chroma_server_cors_allow_origins": null, - "chroma_server_host": null, - "chroma_server_port": null, - "chroma_server_grpc_port": null - }, - "output_types": [ - "VectorStore", - "BaseRetriever" - ], - "field_formatters": {}, - "frozen": false, - "beta": false - }, - "id": "Chroma-aFGHF" - }, - "selected": true, - "width": 384, - "height": 495, - "positionAbsolute": { - "x": 1641.280676720732, - "y": 356.94961598422196 - }, - "dragging": false - }, - { - "id": "OpenAIEmbeddings-rbMk3", - "type": "genericNode", - "position": { - "x": 1053.9472627140208, - "y": -2.5921878249999963 - }, - "data": { - "type": "OpenAIEmbeddings", - "node": { - "template": { - "allowed_special": { - "type": "str", - "required": true, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "value": [], - "fileTypes": [], - "file_path": "", - "password": false, - "name": "allowed_special", - "display_name": "Allowed Special", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "chunk_size": { - "type": "int", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": 1000, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "chunk_size", - "display_name": "Chunk Size", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "client": { - "type": "Any", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "client", - "display_name": "Client", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "code": { - "type": "code", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": true, - "value": "from typing import Any, Callable, Dict, List, Optional, Union\n\nfrom langchain_openai.embeddings.base import OpenAIEmbeddings\nfrom langflow.custom import CustomComponent\nfrom langflow.field_typing import NestedDict\nfrom pydantic.v1.types import SecretStr\n\n\nclass OpenAIEmbeddingsComponent(CustomComponent):\n display_name = \"OpenAIEmbeddings\"\n description = \"OpenAI embedding models\"\n\n def build_config(self):\n return {\n \"allowed_special\": {\n \"display_name\": \"Allowed Special\",\n \"advanced\": True,\n \"field_type\": \"str\",\n \"is_list\": True,\n },\n \"default_headers\": {\n \"display_name\": \"Default Headers\",\n \"advanced\": True,\n \"field_type\": \"dict\",\n },\n \"default_query\": {\n \"display_name\": \"Default Query\",\n \"advanced\": True,\n \"field_type\": \"NestedDict\",\n },\n \"disallowed_special\": {\n \"display_name\": \"Disallowed Special\",\n \"advanced\": True,\n \"field_type\": \"str\",\n \"is_list\": True,\n },\n \"chunk_size\": {\"display_name\": \"Chunk Size\", \"advanced\": True},\n \"client\": {\"display_name\": \"Client\", \"advanced\": True},\n \"deployment\": {\"display_name\": \"Deployment\", \"advanced\": True},\n \"embedding_ctx_length\": {\n \"display_name\": \"Embedding Context Length\",\n \"advanced\": True,\n },\n \"max_retries\": {\"display_name\": \"Max Retries\", \"advanced\": True},\n \"model\": {\n \"display_name\": \"Model\",\n \"advanced\": False,\n \"options\": [\"text-embedding-3-small\", \"text-embedding-3-large\", \"text-embedding-ada-002\"],\n },\n \"model_kwargs\": {\"display_name\": \"Model Kwargs\", \"advanced\": True},\n \"openai_api_base\": {\"display_name\": \"OpenAI API Base\", \"password\": True, \"advanced\": True},\n \"openai_api_key\": {\"display_name\": \"OpenAI API Key\", \"password\": True},\n \"openai_api_type\": {\"display_name\": \"OpenAI API Type\", \"advanced\": True, \"password\": True},\n \"openai_api_version\": {\n \"display_name\": \"OpenAI API Version\",\n \"advanced\": True,\n },\n \"openai_organization\": {\n \"display_name\": \"OpenAI Organization\",\n \"advanced\": True,\n },\n \"openai_proxy\": {\"display_name\": \"OpenAI Proxy\", \"advanced\": True},\n \"request_timeout\": {\"display_name\": \"Request Timeout\", \"advanced\": True},\n \"show_progress_bar\": {\n \"display_name\": \"Show Progress Bar\",\n \"advanced\": True,\n },\n \"skip_empty\": {\"display_name\": \"Skip Empty\", \"advanced\": True},\n \"tiktoken_model_name\": {\"display_name\": \"TikToken Model Name\"},\n \"tikToken_enable\": {\"display_name\": \"TikToken Enable\", \"advanced\": True},\n }\n\n def build(\n self,\n default_headers: Optional[Dict[str, str]] = None,\n default_query: Optional[NestedDict] = {},\n allowed_special: List[str] = [],\n disallowed_special: List[str] = [\"all\"],\n chunk_size: int = 1000,\n client: Optional[Any] = None,\n deployment: str = \"text-embedding-3-small\",\n embedding_ctx_length: int = 8191,\n max_retries: int = 6,\n model: str = \"text-embedding-3-small\",\n model_kwargs: NestedDict = {},\n openai_api_base: Optional[str] = None,\n openai_api_key: Optional[str] = \"\",\n openai_api_type: Optional[str] = None,\n openai_api_version: Optional[str] = None,\n openai_organization: Optional[str] = None,\n openai_proxy: Optional[str] = None,\n request_timeout: Optional[float] = None,\n show_progress_bar: bool = False,\n skip_empty: bool = False,\n tiktoken_enable: bool = True,\n tiktoken_model_name: Optional[str] = None,\n ) -> Union[OpenAIEmbeddings, Callable]:\n # This is to avoid errors with Vector Stores (e.g Chroma)\n if disallowed_special == [\"all\"]:\n disallowed_special = \"all\" # type: ignore\n\n api_key = SecretStr(openai_api_key) if openai_api_key else None\n\n return OpenAIEmbeddings(\n tiktoken_enabled=tiktoken_enable,\n default_headers=default_headers,\n default_query=default_query,\n allowed_special=set(allowed_special),\n disallowed_special=\"all\",\n chunk_size=chunk_size,\n client=client,\n deployment=deployment,\n embedding_ctx_length=embedding_ctx_length,\n max_retries=max_retries,\n model=model,\n model_kwargs=model_kwargs,\n base_url=openai_api_base,\n api_key=api_key,\n openai_api_type=openai_api_type,\n api_version=openai_api_version,\n organization=openai_organization,\n openai_proxy=openai_proxy,\n timeout=request_timeout,\n show_progress_bar=show_progress_bar,\n skip_empty=skip_empty,\n tiktoken_model_name=tiktoken_model_name,\n )\n", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "code", - "advanced": false, - "dynamic": true, - "info": "", - "title_case": false - }, - "default_headers": { - "type": "dict", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "default_headers", - "display_name": "Default Headers", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "default_query": { - "type": "NestedDict", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": {}, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "default_query", - "display_name": "Default Query", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "deployment": { - "type": "str", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": "text-embedding-3-small", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "deployment", - "display_name": "Deployment", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "disallowed_special": { - "type": "str", - "required": true, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "value": [ - "all" - ], - "fileTypes": [], - "file_path": "", - "password": false, - "name": "disallowed_special", - "display_name": "Disallowed Special", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "embedding_ctx_length": { - "type": "int", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": 8191, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "embedding_ctx_length", - "display_name": "Embedding Context Length", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "max_retries": { - "type": "int", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": 6, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "max_retries", - "display_name": "Max Retries", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "model": { - "type": "str", - "required": true, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "value": "text-embedding-3-small", - "fileTypes": [], - "file_path": "", - "password": false, - "options": [ - "text-embedding-3-small", - "text-embedding-3-large", - "text-embedding-ada-002" - ], - "name": "model", - "display_name": "Model", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "model_kwargs": { - "type": "NestedDict", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": {}, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "model_kwargs", - "display_name": "Model Kwargs", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "openai_api_base": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": true, - "name": "openai_api_base", - "display_name": "OpenAI API Base", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ], - "value": "" - }, - "openai_api_key": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": "", - "fileTypes": [], - "file_path": "", - "password": true, - "name": "openai_api_key", - "display_name": "OpenAI API Key", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "openai_api_type": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": true, - "name": "openai_api_type", - "display_name": "OpenAI API Type", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ], - "value": "" - }, - "openai_api_version": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "openai_api_version", - "display_name": "OpenAI API Version", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "openai_organization": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "openai_organization", - "display_name": "OpenAI Organization", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "openai_proxy": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "openai_proxy", - "display_name": "OpenAI Proxy", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "request_timeout": { - "type": "float", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "request_timeout", - "display_name": "Request Timeout", - "advanced": true, - "dynamic": false, - "info": "", - "rangeSpec": { - "min": -1, - "max": 1, - "step": 0.1 - }, - "title_case": false - }, - "show_progress_bar": { - "type": "bool", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "show_progress_bar", - "display_name": "Show Progress Bar", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "skip_empty": { - "type": "bool", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "skip_empty", - "display_name": "Skip Empty", - "advanced": true, - "dynamic": false, - "info": "", - "title_case": false - }, - "tiktoken_enable": { - "type": "bool", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "value": true, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "tiktoken_enable", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false - }, - "tiktoken_model_name": { - "type": "str", - "required": false, - "placeholder": "", - "list": false, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "tiktoken_model_name", - "display_name": "TikToken Model Name", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ] - }, - "_type": "CustomComponent" - }, - "description": "OpenAI embedding models", - "base_classes": [ - "Embeddings", - "OpenAIEmbeddings", - "Callable" - ], - "display_name": "OpenAIEmbeddings", - "documentation": "", - "custom_fields": { - "default_headers": null, - "default_query": null, - "allowed_special": null, - "disallowed_special": null, - "chunk_size": null, - "client": null, - "deployment": null, - "embedding_ctx_length": null, - "max_retries": null, - "model": null, - "model_kwargs": null, - "openai_api_base": null, - "openai_api_key": null, - "openai_api_type": null, - "openai_api_version": null, - "openai_organization": null, - "openai_proxy": null, - "request_timeout": null, - "show_progress_bar": null, - "skip_empty": null, - "tiktoken_enable": null, - "tiktoken_model_name": null - }, - "output_types": [ - "OpenAIEmbeddings", - "Callable" - ], - "field_formatters": {}, - "frozen": false, - "beta": true - }, - "id": "OpenAIEmbeddings-rbMk3" - }, - "selected": false, - "width": 384, - "height": 573, - "positionAbsolute": { - "x": 1053.9472627140208, - "y": -2.5921878249999963 - }, - "dragging": false - }, - { - "id": "URL-5zjQH", - "type": "genericNode", - "position": { - "x": 567.0838444398559, - "y": 596.6568151511171 - }, - "data": { - "type": "URL", - "node": { - "template": { - "code": { - "type": "code", - "required": true, - "placeholder": "", - "list": false, - "show": true, - "multiline": true, - "value": "from typing import Any, Dict\n\nfrom langchain_community.document_loaders.web_base import WebBaseLoader\n\nfrom langflow.interface.custom.custom_component import CustomComponent\nfrom langflow.schema import Record\n\n\nclass URLComponent(CustomComponent):\n display_name = \"URL\"\n description = \"Fetch content from one or more URLs.\"\n icon = \"layout-template\"\n\n def build_config(self) -> Dict[str, Any]:\n return {\n \"urls\": {\"display_name\": \"URL\"},\n }\n\n def build(\n self,\n urls: list[str],\n ) -> list[Record]:\n loader = WebBaseLoader(web_paths=urls)\n docs = loader.load()\n records = self.to_records(docs)\n self.status = records\n return records\n", - "fileTypes": [], - "file_path": "", - "password": false, - "name": "code", - "advanced": true, - "dynamic": true, - "info": "", - "load_from_db": false, - "title_case": false - }, - "urls": { - "type": "str", - "required": true, - "placeholder": "", - "list": true, - "show": true, - "multiline": false, - "fileTypes": [], - "file_path": "", - "password": false, - "name": "urls", - "display_name": "URL", - "advanced": false, - "dynamic": false, - "info": "", - "title_case": false, - "input_types": [ - "Text" - ], - "value": [ - "https://raw.githubusercontent.com/logspace-ai/langflow/dev/CONTRIBUTING.md" - ] - }, - "_type": "CustomComponent" - }, - "description": "Fetch content from one or more URLs.", - "base_classes": [ - "Record" - ], - "display_name": "URL", - "documentation": "", - "custom_fields": { - "urls": null - }, - "output_types": [ - "Record" - ], - "field_formatters": {}, - "frozen": false, - "beta": false, - "icon": "layout-template" - }, - "id": "URL-5zjQH" - }, - "selected": false, - "width": 384, - "height": 289, - "dragging": false, - "positionAbsolute": { - "x": 567.0838444398559, - "y": 596.6568151511171 - } - } - ], - "edges": [ - { - "source": "RecursiveCharacterTextSplitter-jwfyG", - "sourceHandle": "{œbaseClassesœ:[œRecordœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-jwfyGœ}", - "target": "Chroma-aFGHF", - "targetHandle": "{œfieldNameœ:œinputsœ,œidœ:œChroma-aFGHFœ,œinputTypesœ:[œDocumentœ,œRecordœ],œtypeœ:œRecordœ}", - "data": { - "targetHandle": { - "fieldName": "inputs", - "id": "Chroma-aFGHF", - "inputTypes": [ - "Document", - "Record" - ], - "type": "Record" - }, - "sourceHandle": { - "baseClasses": [ - "Record" - ], - "dataType": "RecursiveCharacterTextSplitter", - "id": "RecursiveCharacterTextSplitter-jwfyG" - } - }, - "style": { - "stroke": "#555" - }, - "className": "stroke-gray-900 stroke-connection", - "id": "reactflow__edge-RecursiveCharacterTextSplitter-jwfyG{œbaseClassesœ:[œRecordœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-jwfyGœ}-Chroma-aFGHF{œfieldNameœ:œinputsœ,œidœ:œChroma-aFGHFœ,œinputTypesœ:[œDocumentœ,œRecordœ],œtypeœ:œRecordœ}" - }, - { - "source": "OpenAIEmbeddings-rbMk3", - "sourceHandle": "{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ,œCallableœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-rbMk3œ}", - "target": "Chroma-aFGHF", - "targetHandle": "{œfieldNameœ:œembeddingœ,œidœ:œChroma-aFGHFœ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}", - "data": { - "targetHandle": { - "fieldName": "embedding", - "id": "Chroma-aFGHF", - "inputTypes": null, - "type": "Embeddings" - }, - "sourceHandle": { - "baseClasses": [ - "Embeddings", - "OpenAIEmbeddings", - "Callable" - ], - "dataType": "OpenAIEmbeddings", - "id": "OpenAIEmbeddings-rbMk3" - } - }, - "style": { - "stroke": "#555" - }, - "className": "stroke-gray-900 stroke-connection", - "id": "reactflow__edge-OpenAIEmbeddings-rbMk3{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ,œCallableœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-rbMk3œ}-Chroma-aFGHF{œfieldNameœ:œembeddingœ,œidœ:œChroma-aFGHFœ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}" - }, - { - "source": "URL-5zjQH", - "sourceHandle": "{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-5zjQHœ}", - "target": "RecursiveCharacterTextSplitter-jwfyG", - "targetHandle": "{œfieldNameœ:œinputsœ,œidœ:œRecursiveCharacterTextSplitter-jwfyGœ,œinputTypesœ:[œDocumentœ,œRecordœ],œtypeœ:œDocumentœ}", - "data": { - "targetHandle": { - "fieldName": "inputs", - "id": "RecursiveCharacterTextSplitter-jwfyG", - "inputTypes": [ - "Document", - "Record" - ], - "type": "Document" - }, - "sourceHandle": { - "baseClasses": [ - "Record" - ], - "dataType": "URL", - "id": "URL-5zjQH" - } - }, - "style": { - "stroke": "#555" - }, - "className": "stroke-foreground stroke-connection", - "id": "reactflow__edge-URL-5zjQH{œbaseClassesœ:[œRecordœ],œdataTypeœ:œURLœ,œidœ:œURL-5zjQHœ}-RecursiveCharacterTextSplitter-jwfyG{œfieldNameœ:œinputsœ,œidœ:œRecursiveCharacterTextSplitter-jwfyGœ,œinputTypesœ:[œDocumentœ,œRecordœ],œtypeœ:œDocumentœ}" - } - ], - "viewport": { - "x": -160.3219973143573, - "y": 117.63775645863632, - "zoom": 0.48903173672366845 - } - }, - "is_component": false, - "updated_at": "2024-03-05T21:59:59.738081", - "folder": null, - "id": "7f90dc54-717d-49fe-a43f-c4dc055daa4e", - "user_id": "9365dbda-e8cf-4e95-8c84-49f8b6edb44f" -} \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json index 9a1369930..f82f2c668 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json @@ -1129,7 +1129,7 @@ } }, "description": "This project can be used as a starting point for building a Chat experience with user specific memory. You can set a different Session ID to start a new message history.", - "name": "Conversation with Memory", + "name": "Chatbot with Memory", "last_tested_version": "1.0.0a0", "is_component": false } \ No newline at end of file diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json new file mode 100644 index 000000000..ef60a2fea --- /dev/null +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json @@ -0,0 +1,1772 @@ +{ + "id": "85392e54-20f3-4ab5-a179-cb4bef16f639", + "data": { + "nodes": [ + { + "id": "Prompt-6qkyO", + "type": "genericNode", + "position": { + "x": 2191.5837146441663, + "y": 1047.9307944451873 + }, + "data": { + "type": "Prompt", + "node": { + "template": { + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from langchain_core.prompts import PromptTemplate\n\nfrom langflow.field_typing import Prompt, TemplateField, Text\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"terminal-square\"\n\n def build_config(self):\n return {\n \"template\": TemplateField(display_name=\"Template\"),\n \"code\": TemplateField(advanced=True),\n }\n\n def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Text:\n from langflow.base.prompts.utils import dict_values_to_string\n\n prompt_template = PromptTemplate.from_template(Text(template))\n kwargs = dict_values_to_string(kwargs)\n kwargs = {k: \"\\n\".join(v) if isinstance(v, list) else v for k, v in kwargs.items()}\n try:\n formated_prompt = prompt_template.format(**kwargs)\n except Exception as exc:\n raise ValueError(f\"Error formatting prompt: {exc}\") from exc\n self.status = f'Prompt:\\n\"{formated_prompt}\"'\n return formated_prompt\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "template": { + "type": "prompt", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "You are a helpful assistant. Given a long document, your task is to create a concise summary that captures the main points and key details. The summary should be clear, accurate, and succinct. Please provide the summary in the format below:\n####\n{document}\n####\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "template", + "display_name": "Template", + "advanced": false, + "input_types": [ + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "_type": "CustomComponent", + "document": { + "field_type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "document", + "display_name": "document", + "advanced": false, + "input_types": [ + "Document", + "BaseOutputParser", + "Record", + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "type": "str" + } + }, + "description": "Create a prompt template with dynamic variables.", + "icon": "terminal-square", + "is_input": null, + "is_output": null, + "is_composition": null, + "base_classes": [ + "object", + "str", + "Text" + ], + "name": "", + "display_name": "Prompt", + "documentation": "", + "custom_fields": { + "template": [ + "document" + ] + }, + "output_types": [ + "Text" + ], + "full_path": null, + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false, + "error": null + }, + "id": "Prompt-6qkyO", + "description": "Create a prompt template with dynamic variables.", + "display_name": "Prompt" + }, + "selected": false, + "width": 384, + "height": 385, + "positionAbsolute": { + "x": 2191.5837146441663, + "y": 1047.9307944451873 + }, + "dragging": false + }, + { + "id": "Prompt-8M7lZ", + "type": "genericNode", + "position": { + "x": 3731.0813766902447, + "y": 799.631909121391 + }, + "data": { + "type": "Prompt", + "node": { + "template": { + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from langchain_core.prompts import PromptTemplate\n\nfrom langflow.field_typing import Prompt, TemplateField, Text\nfrom langflow.interface.custom.custom_component import CustomComponent\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"terminal-square\"\n\n def build_config(self):\n return {\n \"template\": TemplateField(display_name=\"Template\"),\n \"code\": TemplateField(advanced=True),\n }\n\n def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Text:\n from langflow.base.prompts.utils import dict_values_to_string\n\n prompt_template = PromptTemplate.from_template(Text(template))\n kwargs = dict_values_to_string(kwargs)\n kwargs = {k: \"\\n\".join(v) if isinstance(v, list) else v for k, v in kwargs.items()}\n try:\n formated_prompt = prompt_template.format(**kwargs)\n except Exception as exc:\n raise ValueError(f\"Error formatting prompt: {exc}\") from exc\n self.status = f'Prompt:\\n\"{formated_prompt}\"'\n return formated_prompt\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "template": { + "type": "prompt", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "Given a summary of an article, please create two multiple-choice questions that cover the key points and details mentioned. Ensure the questions are clear and provide three options (A, B, C), with one correct answer.\n####\n{summary}\n####", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "template", + "display_name": "Template", + "advanced": false, + "input_types": [ + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "_type": "CustomComponent", + "summary": { + "field_type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "summary", + "display_name": "summary", + "advanced": false, + "input_types": [ + "Document", + "BaseOutputParser", + "Record", + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "type": "str" + } + }, + "description": "Create a prompt template with dynamic variables.", + "icon": "terminal-square", + "is_input": null, + "is_output": null, + "is_composition": null, + "base_classes": [ + "object", + "str", + "Text" + ], + "name": "", + "display_name": "Prompt", + "documentation": "", + "custom_fields": { + "template": [ + "summary" + ] + }, + "output_types": [ + "Text" + ], + "full_path": null, + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false, + "error": null + }, + "id": "Prompt-8M7lZ", + "description": "Create a prompt template with dynamic variables.", + "display_name": "Prompt" + }, + "selected": false, + "width": 384, + "height": 385 + }, + { + "id": "ChatOutput-TKkOi", + "type": "genericNode", + "position": { + "x": 3722.1747844849388, + "y": 1283.413553222214 + }, + "data": { + "type": "ChatOutput", + "node": { + "template": { + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional, Union\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Interaction Panel.\"\n icon = \"ChatOutput\"\n\n def build(\n self,\n sender: Optional[str] = \"Machine\",\n sender_name: Optional[str] = \"AI\",\n input_value: Optional[str] = None,\n session_id: Optional[str] = None,\n return_record: Optional[bool] = False,\n record_template: Optional[str] = \"{text}\",\n ) -> Union[Text, Record]:\n return super().build(\n sender=sender,\n sender_name=sender_name,\n input_value=input_value,\n session_id=session_id,\n return_record=return_record,\n record_template=record_template,\n )\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "input_value": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Message", + "advanced": false, + "input_types": [ + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "record_template": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "{text}", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "record_template", + "display_name": "Record Template", + "advanced": true, + "dynamic": false, + "info": "In case of Message being a Record, this template will be used to convert it to text.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "return_record": { + "type": "bool", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "return_record", + "display_name": "Return Record", + "advanced": true, + "dynamic": false, + "info": "Return the message as a record containing the sender, sender_name, and session_id.", + "load_from_db": false, + "title_case": false + }, + "sender": { + "type": "str", + "required": false, + "placeholder": "", + "list": true, + "show": true, + "multiline": false, + "value": "Machine", + "fileTypes": [], + "file_path": "", + "password": false, + "options": [ + "Machine", + "User" + ], + "name": "sender", + "display_name": "Sender Type", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "sender_name": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "Summarizer", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "sender_name", + "display_name": "Sender Name", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "session_id": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "session_id", + "display_name": "Session ID", + "advanced": true, + "dynamic": false, + "info": "If provided, the message will be stored in the memory.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "_type": "CustomComponent" + }, + "description": "Display a chat message in the Interaction Panel.", + "icon": "ChatOutput", + "base_classes": [ + "object", + "Record", + "Text", + "str" + ], + "display_name": "Chat Output", + "documentation": "", + "custom_fields": { + "sender": null, + "sender_name": null, + "input_value": null, + "session_id": null, + "return_record": null, + "record_template": null + }, + "output_types": [ + "Text", + "Record" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false + }, + "id": "ChatOutput-TKkOi" + }, + "selected": false, + "width": 384, + "height": 385, + "dragging": false + }, + { + "id": "ChatOutput-WOZJj", + "type": "genericNode", + "position": { + "x": 5077.71285886074, + "y": 1232.9152769735522 + }, + "data": { + "type": "ChatOutput", + "node": { + "template": { + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional, Union\n\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Interaction Panel.\"\n icon = \"ChatOutput\"\n\n def build(\n self,\n sender: Optional[str] = \"Machine\",\n sender_name: Optional[str] = \"AI\",\n input_value: Optional[str] = None,\n session_id: Optional[str] = None,\n return_record: Optional[bool] = False,\n record_template: Optional[str] = \"{text}\",\n ) -> Union[Text, Record]:\n return super().build(\n sender=sender,\n sender_name=sender_name,\n input_value=input_value,\n session_id=session_id,\n return_record=return_record,\n record_template=record_template,\n )\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "input_value": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Message", + "advanced": false, + "input_types": [ + "Text" + ], + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "record_template": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "{text}", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "record_template", + "display_name": "Record Template", + "advanced": true, + "dynamic": false, + "info": "In case of Message being a Record, this template will be used to convert it to text.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "return_record": { + "type": "bool", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "return_record", + "display_name": "Return Record", + "advanced": true, + "dynamic": false, + "info": "Return the message as a record containing the sender, sender_name, and session_id.", + "load_from_db": false, + "title_case": false + }, + "sender": { + "type": "str", + "required": false, + "placeholder": "", + "list": true, + "show": true, + "multiline": false, + "value": "Machine", + "fileTypes": [], + "file_path": "", + "password": false, + "options": [ + "Machine", + "User" + ], + "name": "sender", + "display_name": "Sender Type", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "sender_name": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "Question Generator", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "sender_name", + "display_name": "Sender Name", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "session_id": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "session_id", + "display_name": "Session ID", + "advanced": true, + "dynamic": false, + "info": "If provided, the message will be stored in the memory.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "_type": "CustomComponent" + }, + "description": "Display a chat message in the Interaction Panel.", + "icon": "ChatOutput", + "base_classes": [ + "object", + "Record", + "Text", + "str" + ], + "display_name": "Chat Output", + "documentation": "", + "custom_fields": { + "sender": null, + "sender_name": null, + "input_value": null, + "session_id": null, + "return_record": null, + "record_template": null + }, + "output_types": [ + "Text", + "Record" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false + }, + "id": "ChatOutput-WOZJj" + }, + "selected": false, + "width": 384, + "height": 385 + }, + { + "id": "TextInput-fd38z", + "type": "genericNode", + "position": { + "x": 1700.5624822024752, + "y": 1039.603088937466 + }, + "data": { + "type": "TextInput", + "node": { + "template": { + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional\n\nfrom langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\n\n\nclass TextInput(TextComponent):\n display_name = \"Text Input\"\n description = \"Get text inputs from the Interaction Panel.\"\n icon = \"type\"\n\n def build_config(self):\n return {\n \"input_value\": {\n \"display_name\": \"Value\",\n \"input_types\": [\"Record\", \"Text\"],\n \"info\": \"Text or Record to be passed as input.\",\n },\n \"record_template\": {\n \"display_name\": \"Record Template\",\n \"multiline\": True,\n \"info\": \"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n input_value: Optional[str] = \"\",\n record_template: Optional[str] = \"\",\n ) -> Text:\n return super().build(input_value=input_value, record_template=record_template)\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "input_value": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "Revolutionary Nano-Battery Technology Unveiled In a groundbreaking announcement yesterday, researchers from the fictional Tech Innovations Institute revealed the development of a new nano-battery technology that promises to revolutionize energy storage. The new battery, dubbed the \"EnerGCell\", uses advanced nanomaterials to achieve unprecedented efficiency and storage capacities. According to lead researcher Dr. Ada Byron, the EnerGCell can store up to ten times more energy than the best lithium-ion batteries available today, while charging in just a fraction of the time. \"We're talking about charging your electric vehicle in just five minutes for a range of over 1,000 miles,\" Dr. Byron stated during the press conference. The technology behind the EnerGCell involves a complex arrangement of nanostructured electrodes that allow for rapid ion transfer and extremely high energy density. This breakthrough was achieved after a decade of research into nanomaterials and their applications in energy storage. The implications of this technology are vast, promising to accelerate the adoption of renewable energy by making it more practical and affordable to store wind and solar power. It could also lead to significant advancements in electric vehicles, mobile devices, and any other technology that relies on batteries. Despite the excitement, some experts are calling for patience, noting that the EnerGCell is still in its early stages of development and may take several years before it's commercially available. However, the potential impact of such a technology on the environment and the global economy is undeniable. Tech Innovations Institute plans to continue refining the EnerGCell and begin pilot projects with select partners in the coming year. If successful, this nano-battery technology could indeed be the breakthrough needed to usher in a new era of clean energy and technology.", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Value", + "advanced": false, + "input_types": [ + "Record", + "Text" + ], + "dynamic": false, + "info": "Text or Record to be passed as input.", + "load_from_db": false, + "title_case": false + }, + "record_template": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "record_template", + "display_name": "Record Template", + "advanced": true, + "dynamic": false, + "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "_type": "CustomComponent" + }, + "description": "Get text inputs from the Interaction Panel.", + "icon": "type", + "base_classes": [ + "str", + "Text", + "object" + ], + "display_name": "Text Input", + "documentation": "", + "custom_fields": { + "input_value": null, + "record_template": null + }, + "output_types": [ + "Text" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false + }, + "id": "TextInput-fd38z" + }, + "selected": true, + "width": 384, + "height": 290, + "positionAbsolute": { + "x": 1700.5624822024752, + "y": 1039.603088937466 + }, + "dragging": false + }, + { + "id": "TextOutput-LH9pW", + "type": "genericNode", + "position": { + "x": 2429.4897030584134, + "y": 552.2482060219679 + }, + "data": { + "type": "TextOutput", + "node": { + "template": { + "input_value": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Value", + "advanced": false, + "input_types": [ + "Record", + "Text" + ], + "dynamic": false, + "info": "Text or Record to be passed as output.", + "load_from_db": false, + "title_case": false + }, + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional\n\nfrom langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\n\n\nclass TextOutput(TextComponent):\n display_name = \"Text Output\"\n description = \"Display a text output in the Interaction Panel.\"\n icon = \"type\"\n\n def build_config(self):\n return {\n \"input_value\": {\n \"display_name\": \"Value\",\n \"input_types\": [\"Record\", \"Text\"],\n \"info\": \"Text or Record to be passed as output.\",\n },\n \"record_template\": {\n \"display_name\": \"Record Template\",\n \"multiline\": True,\n \"info\": \"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n \"advanced\": True,\n },\n }\n\n def build(self, input_value: Optional[Text] = \"\", record_template: str = \"\") -> Text:\n return super().build(input_value=input_value, record_template=record_template)\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "record_template": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "record_template", + "display_name": "Record Template", + "advanced": true, + "dynamic": false, + "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "_type": "CustomComponent" + }, + "description": "Display a text output in the Interaction Panel.", + "icon": "type", + "base_classes": [ + "str", + "Text", + "object" + ], + "display_name": "First Prompt", + "documentation": "", + "custom_fields": { + "input_value": null, + "record_template": null + }, + "output_types": [ + "Text" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false + }, + "id": "TextOutput-LH9pW" + }, + "selected": false, + "width": 384, + "height": 290, + "positionAbsolute": { + "x": 2429.4897030584134, + "y": 552.2482060219679 + }, + "dragging": false + }, + { + "id": "OpenAIModel-WAiN2", + "type": "genericNode", + "position": { + "x": 2925.784767523062, + "y": 933.6465680967775 + }, + "data": { + "type": "OpenAIModel", + "node": { + "template": { + "input_value": { + "type": "str", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Input", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional\n\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.constants import STREAM_INFO_TEXT\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.field_typing import NestedDict, Text\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n\n field_order = [\n \"max_tokens\",\n \"model_kwargs\",\n \"model_name\",\n \"openai_api_base\",\n \"openai_api_key\",\n \"temperature\",\n \"input_value\",\n \"system_message\",\n \"stream\",\n ]\n\n def build_config(self):\n return {\n \"input_value\": {\"display_name\": \"Input\"},\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": True,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n },\n \"model_name\": {\n \"display_name\": \"Model Name\",\n \"advanced\": False,\n \"options\": [\n \"gpt-4-turbo-preview\",\n \"gpt-3.5-turbo\",\n \"gpt-4-0125-preview\",\n \"gpt-4-1106-preview\",\n \"gpt-4-vision-preview\",\n \"gpt-3.5-turbo-0125\",\n \"gpt-3.5-turbo-1106\",\n ],\n \"value\": \"gpt-4-turbo-preview\",\n },\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": True,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"info\": \"The OpenAI API Key to use for the OpenAI model.\",\n \"advanced\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"value\": 0.1,\n },\n \"stream\": {\n \"display_name\": \"Stream\",\n \"info\": STREAM_INFO_TEXT,\n \"advanced\": True,\n },\n \"system_message\": {\n \"display_name\": \"System Message\",\n \"info\": \"System message to pass to the model.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n input_value: Text,\n openai_api_key: str,\n temperature: float,\n model_name: str,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n openai_api_base: Optional[str] = None,\n stream: bool = False,\n system_message: Optional[str] = None,\n ) -> Text:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n output = ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n\n return self.get_chat_result(output, stream, input_value, system_message)\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "max_tokens": { + "type": "int", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": 256, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "max_tokens", + "display_name": "Max Tokens", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "model_kwargs": { + "type": "NestedDict", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": {}, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "model_kwargs", + "display_name": "Model Kwargs", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "model_name": { + "type": "str", + "required": true, + "placeholder": "", + "list": true, + "show": true, + "multiline": false, + "value": "gpt-4-turbo-preview", + "fileTypes": [], + "file_path": "", + "password": false, + "options": [ + "gpt-4-turbo-preview", + "gpt-3.5-turbo", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-vision-preview", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106" + ], + "name": "model_name", + "display_name": "Model Name", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "openai_api_base": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "openai_api_base", + "display_name": "OpenAI API Base", + "advanced": true, + "dynamic": false, + "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "openai_api_key": { + "type": "str", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": true, + "name": "openai_api_key", + "display_name": "OpenAI API Key", + "advanced": false, + "dynamic": false, + "info": "The OpenAI API Key to use for the OpenAI model.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ], + "value": "" + }, + "stream": { + "type": "bool", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "stream", + "display_name": "Stream", + "advanced": true, + "dynamic": false, + "info": "Stream the response from the model. Streaming works only in Chat.", + "load_from_db": false, + "title_case": false + }, + "system_message": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "system_message", + "display_name": "System Message", + "advanced": true, + "dynamic": false, + "info": "System message to pass to the model.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "temperature": { + "type": "float", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": 0.1, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "temperature", + "display_name": "Temperature", + "advanced": false, + "dynamic": false, + "info": "", + "rangeSpec": { + "step_type": "float", + "min": -1, + "max": 1, + "step": 0.1 + }, + "load_from_db": false, + "title_case": false + }, + "_type": "CustomComponent" + }, + "description": "Generates text using OpenAI LLMs.", + "icon": "OpenAI", + "base_classes": [ + "str", + "Text", + "object" + ], + "display_name": "OpenAI", + "documentation": "", + "custom_fields": { + "input_value": null, + "openai_api_key": null, + "temperature": null, + "model_name": null, + "max_tokens": null, + "model_kwargs": null, + "openai_api_base": null, + "stream": null, + "system_message": null + }, + "output_types": [ + "Text" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [ + "max_tokens", + "model_kwargs", + "model_name", + "openai_api_base", + "openai_api_key", + "temperature", + "input_value", + "system_message", + "stream" + ], + "beta": false + }, + "id": "OpenAIModel-WAiN2" + }, + "selected": false, + "width": 384, + "height": 565, + "positionAbsolute": { + "x": 2925.784767523062, + "y": 933.6465680967775 + }, + "dragging": false + }, + { + "id": "TextOutput-ZUN0s", + "type": "genericNode", + "position": { + "x": 4446.064323520379, + "y": 633.833297518702 + }, + "data": { + "type": "TextOutput", + "node": { + "template": { + "input_value": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Value", + "advanced": false, + "input_types": [ + "Record", + "Text" + ], + "dynamic": false, + "info": "Text or Record to be passed as output.", + "load_from_db": false, + "title_case": false + }, + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional\n\nfrom langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\n\n\nclass TextOutput(TextComponent):\n display_name = \"Text Output\"\n description = \"Display a text output in the Interaction Panel.\"\n icon = \"type\"\n\n def build_config(self):\n return {\n \"input_value\": {\n \"display_name\": \"Value\",\n \"input_types\": [\"Record\", \"Text\"],\n \"info\": \"Text or Record to be passed as output.\",\n },\n \"record_template\": {\n \"display_name\": \"Record Template\",\n \"multiline\": True,\n \"info\": \"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n \"advanced\": True,\n },\n }\n\n def build(self, input_value: Optional[Text] = \"\", record_template: str = \"\") -> Text:\n return super().build(input_value=input_value, record_template=record_template)\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "record_template": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "record_template", + "display_name": "Record Template", + "advanced": true, + "dynamic": false, + "info": "Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "_type": "CustomComponent" + }, + "description": "Display a text output in the Interaction Panel.", + "icon": "type", + "base_classes": [ + "str", + "Text", + "object" + ], + "display_name": "Second Prompt", + "documentation": "", + "custom_fields": { + "input_value": null, + "record_template": null + }, + "output_types": [ + "Text" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [], + "beta": false + }, + "id": "TextOutput-ZUN0s" + }, + "selected": false, + "width": 384, + "height": 290, + "dragging": false, + "positionAbsolute": { + "x": 4446.064323520379, + "y": 633.833297518702 + } + }, + { + "id": "OpenAIModel-4b8eN", + "type": "genericNode", + "position": { + "x": 4500.152018344182, + "y": 1027.7382026227656 + }, + "data": { + "type": "OpenAIModel", + "node": { + "template": { + "input_value": { + "type": "str", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "input_value", + "display_name": "Input", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "code": { + "type": "code", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": true, + "value": "from typing import Optional\n\nfrom langchain_openai import ChatOpenAI\n\nfrom langflow.base.constants import STREAM_INFO_TEXT\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.field_typing import NestedDict, Text\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n\n field_order = [\n \"max_tokens\",\n \"model_kwargs\",\n \"model_name\",\n \"openai_api_base\",\n \"openai_api_key\",\n \"temperature\",\n \"input_value\",\n \"system_message\",\n \"stream\",\n ]\n\n def build_config(self):\n return {\n \"input_value\": {\"display_name\": \"Input\"},\n \"max_tokens\": {\n \"display_name\": \"Max Tokens\",\n \"advanced\": True,\n },\n \"model_kwargs\": {\n \"display_name\": \"Model Kwargs\",\n \"advanced\": True,\n },\n \"model_name\": {\n \"display_name\": \"Model Name\",\n \"advanced\": False,\n \"options\": [\n \"gpt-4-turbo-preview\",\n \"gpt-3.5-turbo\",\n \"gpt-4-0125-preview\",\n \"gpt-4-1106-preview\",\n \"gpt-4-vision-preview\",\n \"gpt-3.5-turbo-0125\",\n \"gpt-3.5-turbo-1106\",\n ],\n \"value\": \"gpt-4-turbo-preview\",\n },\n \"openai_api_base\": {\n \"display_name\": \"OpenAI API Base\",\n \"advanced\": True,\n \"info\": (\n \"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\\n\\n\"\n \"You can change this to use other APIs like JinaChat, LocalAI and Prem.\"\n ),\n },\n \"openai_api_key\": {\n \"display_name\": \"OpenAI API Key\",\n \"info\": \"The OpenAI API Key to use for the OpenAI model.\",\n \"advanced\": False,\n \"password\": True,\n },\n \"temperature\": {\n \"display_name\": \"Temperature\",\n \"advanced\": False,\n \"value\": 0.1,\n },\n \"stream\": {\n \"display_name\": \"Stream\",\n \"info\": STREAM_INFO_TEXT,\n \"advanced\": True,\n },\n \"system_message\": {\n \"display_name\": \"System Message\",\n \"info\": \"System message to pass to the model.\",\n \"advanced\": True,\n },\n }\n\n def build(\n self,\n input_value: Text,\n openai_api_key: str,\n temperature: float,\n model_name: str,\n max_tokens: Optional[int] = 256,\n model_kwargs: NestedDict = {},\n openai_api_base: Optional[str] = None,\n stream: bool = False,\n system_message: Optional[str] = None,\n ) -> Text:\n if not openai_api_base:\n openai_api_base = \"https://api.openai.com/v1\"\n output = ChatOpenAI(\n max_tokens=max_tokens,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=openai_api_key,\n temperature=temperature,\n )\n\n return self.get_chat_result(output, stream, input_value, system_message)\n", + "fileTypes": [], + "file_path": "", + "password": false, + "name": "code", + "advanced": true, + "dynamic": true, + "info": "", + "load_from_db": false, + "title_case": false + }, + "max_tokens": { + "type": "int", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": 256, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "max_tokens", + "display_name": "Max Tokens", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "model_kwargs": { + "type": "NestedDict", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": {}, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "model_kwargs", + "display_name": "Model Kwargs", + "advanced": true, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false + }, + "model_name": { + "type": "str", + "required": true, + "placeholder": "", + "list": true, + "show": true, + "multiline": false, + "value": "gpt-4-turbo-preview", + "fileTypes": [], + "file_path": "", + "password": false, + "options": [ + "gpt-4-turbo-preview", + "gpt-3.5-turbo", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-vision-preview", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106" + ], + "name": "model_name", + "display_name": "Model Name", + "advanced": false, + "dynamic": false, + "info": "", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "openai_api_base": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "openai_api_base", + "display_name": "OpenAI API Base", + "advanced": true, + "dynamic": false, + "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "openai_api_key": { + "type": "str", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": true, + "name": "openai_api_key", + "display_name": "OpenAI API Key", + "advanced": false, + "dynamic": false, + "info": "The OpenAI API Key to use for the OpenAI model.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ], + "value": "" + }, + "stream": { + "type": "bool", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "stream", + "display_name": "Stream", + "advanced": true, + "dynamic": false, + "info": "Stream the response from the model. Streaming works only in Chat.", + "load_from_db": false, + "title_case": false + }, + "system_message": { + "type": "str", + "required": false, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "system_message", + "display_name": "System Message", + "advanced": true, + "dynamic": false, + "info": "System message to pass to the model.", + "load_from_db": false, + "title_case": false, + "input_types": [ + "Text" + ] + }, + "temperature": { + "type": "float", + "required": true, + "placeholder": "", + "list": false, + "show": true, + "multiline": false, + "value": 0.1, + "fileTypes": [], + "file_path": "", + "password": false, + "name": "temperature", + "display_name": "Temperature", + "advanced": false, + "dynamic": false, + "info": "", + "rangeSpec": { + "step_type": "float", + "min": -1, + "max": 1, + "step": 0.1 + }, + "load_from_db": false, + "title_case": false + }, + "_type": "CustomComponent" + }, + "description": "Generates text using OpenAI LLMs.", + "icon": "OpenAI", + "base_classes": [ + "str", + "Text", + "object" + ], + "display_name": "OpenAI", + "documentation": "", + "custom_fields": { + "input_value": null, + "openai_api_key": null, + "temperature": null, + "model_name": null, + "max_tokens": null, + "model_kwargs": null, + "openai_api_base": null, + "stream": null, + "system_message": null + }, + "output_types": [ + "Text" + ], + "field_formatters": {}, + "frozen": false, + "field_order": [ + "max_tokens", + "model_kwargs", + "model_name", + "openai_api_base", + "openai_api_key", + "temperature", + "input_value", + "system_message", + "stream" + ], + "beta": false + }, + "id": "OpenAIModel-4b8eN" + }, + "selected": false, + "width": 384, + "height": 565, + "positionAbsolute": { + "x": 4500.152018344182, + "y": 1027.7382026227656 + }, + "dragging": false + } + ], + "edges": [ + { + "source": "TextInput-fd38z", + "sourceHandle": "{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œTextInputœ,œidœ:œTextInput-fd38zœ}", + "target": "Prompt-6qkyO", + "targetHandle": "{œfieldNameœ:œdocumentœ,œidœ:œPrompt-6qkyOœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "document", + "id": "Prompt-6qkyO", + "inputTypes": [ + "Document", + "BaseOutputParser", + "Record", + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "str", + "Text", + "object" + ], + "dataType": "TextInput", + "id": "TextInput-fd38z" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-TextInput-fd38z{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œTextInputœ,œidœ:œTextInput-fd38zœ}-Prompt-6qkyO{œfieldNameœ:œdocumentœ,œidœ:œPrompt-6qkyOœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "Prompt-6qkyO", + "sourceHandle": "{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-6qkyOœ}", + "target": "TextOutput-LH9pW", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-LH9pWœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "TextOutput-LH9pW", + "inputTypes": [ + "Record", + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "object", + "str", + "Text" + ], + "dataType": "Prompt", + "id": "Prompt-6qkyO" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-Prompt-6qkyO{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-6qkyOœ}-TextOutput-LH9pW{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-LH9pWœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "Prompt-6qkyO", + "sourceHandle": "{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-6qkyOœ}", + "target": "OpenAIModel-WAiN2", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-WAiN2œ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "OpenAIModel-WAiN2", + "inputTypes": [ + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "object", + "str", + "Text" + ], + "dataType": "Prompt", + "id": "Prompt-6qkyO" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-Prompt-6qkyO{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-6qkyOœ}-OpenAIModel-WAiN2{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-WAiN2œ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "OpenAIModel-WAiN2", + "sourceHandle": "{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-WAiN2œ}", + "target": "Prompt-8M7lZ", + "targetHandle": "{œfieldNameœ:œsummaryœ,œidœ:œPrompt-8M7lZœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "summary", + "id": "Prompt-8M7lZ", + "inputTypes": [ + "Document", + "BaseOutputParser", + "Record", + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "str", + "Text", + "object" + ], + "dataType": "OpenAIModel", + "id": "OpenAIModel-WAiN2" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-OpenAIModel-WAiN2{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-WAiN2œ}-Prompt-8M7lZ{œfieldNameœ:œsummaryœ,œidœ:œPrompt-8M7lZœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "OpenAIModel-WAiN2", + "sourceHandle": "{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-WAiN2œ}", + "target": "ChatOutput-TKkOi", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-TKkOiœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "ChatOutput-TKkOi", + "inputTypes": [ + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "str", + "Text", + "object" + ], + "dataType": "OpenAIModel", + "id": "OpenAIModel-WAiN2" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-OpenAIModel-WAiN2{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-WAiN2œ}-ChatOutput-TKkOi{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-TKkOiœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "Prompt-8M7lZ", + "sourceHandle": "{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-8M7lZœ}", + "target": "TextOutput-ZUN0s", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-ZUN0sœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "TextOutput-ZUN0s", + "inputTypes": [ + "Record", + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "object", + "str", + "Text" + ], + "dataType": "Prompt", + "id": "Prompt-8M7lZ" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-Prompt-8M7lZ{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-8M7lZœ}-TextOutput-ZUN0s{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-ZUN0sœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "Prompt-8M7lZ", + "sourceHandle": "{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-8M7lZœ}", + "target": "OpenAIModel-4b8eN", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-4b8eNœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "OpenAIModel-4b8eN", + "inputTypes": [ + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "object", + "str", + "Text" + ], + "dataType": "Prompt", + "id": "Prompt-8M7lZ" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-Prompt-8M7lZ{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-8M7lZœ}-OpenAIModel-4b8eN{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-4b8eNœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}" + }, + { + "source": "OpenAIModel-4b8eN", + "sourceHandle": "{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-4b8eNœ}", + "target": "ChatOutput-WOZJj", + "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-WOZJjœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", + "data": { + "targetHandle": { + "fieldName": "input_value", + "id": "ChatOutput-WOZJj", + "inputTypes": [ + "Text" + ], + "type": "str" + }, + "sourceHandle": { + "baseClasses": [ + "str", + "Text", + "object" + ], + "dataType": "OpenAIModel", + "id": "OpenAIModel-4b8eN" + } + }, + "style": { + "stroke": "#555" + }, + "className": "stroke-foreground stroke-connection", + "id": "reactflow__edge-OpenAIModel-4b8eN{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œOpenAIModelœ,œidœ:œOpenAIModel-4b8eNœ}-ChatOutput-WOZJj{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-WOZJjœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}" + } + ], + "viewport": { + "x": -269.16751160112597, + "y": 42.28236292358156, + "zoom": 0.30778611191960875 + } + }, + "description": "The Prompt Chaining flow chains prompts with LLMs, refining outputs through iterative stages.", + "name": "Prompt Chaining", + "last_tested_version": "1.0.0a0", + "is_component": false +} \ No newline at end of file From 0d88aba4bb702fdba6b349531debfe4a97254e57 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 1 Apr 2024 16:46:32 -0300 Subject: [PATCH 5/5] Fix formatting in hugging-face-spaces.mdx --- docs/docs/getting-started/hugging-face-spaces.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/docs/getting-started/hugging-face-spaces.mdx b/docs/docs/getting-started/hugging-face-spaces.mdx index dfb377e7f..ce2a8aa70 100644 --- a/docs/docs/getting-started/hugging-face-spaces.mdx +++ b/docs/docs/getting-started/hugging-face-spaces.mdx @@ -1,6 +1,7 @@ # 🤗 HuggingFace Spaces -TLDR; +## TLDR; + A fully featured version of Langflow can be accessed via [HuggingFace Spaces](https://huggingface.co/spaces/Logspace/Langflow?duplicate=true) with no installation required. All you gotta do is [duplicate the Space](https://huggingface.co/spaces/Logspace/Langflow?duplicate=true) and you'll have your own copy to play around with! --- @@ -26,4 +27,4 @@ From here, you can rename your Space, define the visibility (Public or Private) import ThemedImage from "@theme/ThemedImage"; import useBaseUrl from "@docusaurus/useBaseUrl"; -import ZoomableImage from "/src/theme/ZoomableImage.js"; +import ZoomableImage from "/src/theme/ZoomableImage.js"; \ No newline at end of file