diff --git a/.env.example b/.env.example index 0da27dd1b..31363bd3f 100644 --- a/.env.example +++ b/.env.example @@ -56,6 +56,13 @@ LANGFLOW_REMOVE_API_KEYS= # LANGFLOW_REDIS_CACHE_EXPIRE (default: 3600) LANGFLOW_CACHE_TYPE= + +# Set AUTO_LOGIN to false if you want to disable auto login +# and use the login form to login. LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD +# must be set if AUTO_LOGIN is set to false +# Values: true, false +LANGFLOW_AUTO_LOGIN= + # Superuser username # Example: LANGFLOW_SUPERUSER=admin LANGFLOW_SUPERUSER= diff --git a/.githooks/pre-commit b/.githooks/pre-commit deleted file mode 100755 index ef67eaa37..000000000 --- a/.githooks/pre-commit +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -added_files=$(git diff --name-only --cached --diff-filter=d) - -make format -git add ${added_files} \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 64d06a313..d4eaafb95 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -3,7 +3,15 @@ name: lint on: push: branches: [main] + paths: + - "poetry.lock" + - "pyproject.toml" + - "src/backend/**" pull_request: + paths: + - "poetry.lock" + - "pyproject.toml" + - "src/backend/**" env: POETRY_VERSION: "1.7.0" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 93ec5bf7e..10ab9b324 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,8 +3,16 @@ name: test on: push: branches: [main] + paths: + - "poetry.lock" + - "pyproject.toml" + - "src/backend/**" pull_request: branches: [dev] + paths: + - "poetry.lock" + - "pyproject.toml" + - "src/backend/**" env: POETRY_VERSION: "1.5.0" diff --git a/.vscode/launch.json b/.vscode/launch.json index a8229b155..3332b67e9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -17,6 +17,9 @@ ], "jinja": true, "justMyCode": true, + "env": { + "LANGFLOW_LOG_LEVEL": "debug" + }, "envFile": "${workspaceFolder}/.env" }, { diff --git a/Makefile b/Makefile index 7f0f998ae..4de68111b 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,6 @@ all: help init: - @echo 'Installing pre-commit hooks' - git config core.hooksPath .githooks - @echo 'Making pre-commit hook executable' - chmod +x .githooks/pre-commit @echo 'Installing backend dependencies' make install_backend @echo 'Installing frontend dependencies' diff --git a/README.md b/README.md index 53ce90086..72bb7fcc6 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,27 @@ - + # ⛓️ Langflow -~ An effortless way to experiment and prototype [LangChain](https://github.com/hwchase17/langchain) pipelines ~ +

Discover a simpler & smarter way to build around Foundation Models

-

-GitHub Contributors -GitHub Last Commit - -GitHub Issues -GitHub Pull Requests -Github License -

+[![Release Notes](https://img.shields.io/github/release/logspace-ai/langflow)](https://github.com/logspace-ai/langflow/releases) +[![Contributors](https://img.shields.io/github/contributors/logspace-ai/langflow)](https://github.com/logspace-ai/langflow/contributors) +[![Last Commit](https://img.shields.io/github/last-commit/logspace-ai/langflow)](https://github.com/logspace-ai/langflow/last-commit) +[![Open Issues](https://img.shields.io/github/issues-raw/logspace-ai/langflow)](https://github.com/logspace-ai/langflow/issues) +[![LRepo-size](https://img.shields.io/github/repo-size/logspace-ai/langflow)](https://github.com/logspace-ai/langflow/repo-size) +[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/logspace-ai/langflow) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![GitHub star chart](https://img.shields.io/github/stars/logspace-ai/langflow?style=social)](https://star-history.com/#logspace-ai/langflow) +[![GitHub fork](https://img.shields.io/github/forks/logspace-ai/langflow?style=social)](https://github.com/logspace-ai/langflow/fork) +[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langflow_ai.svg?style=social&label=Follow%20%40langflow_ai)](https://twitter.com/langflow_ai) +[![](https://dcbadge.vercel.app/api/server/EqksyE2EX9?compact=true&style=flat)](https://discord.com/invite/EqksyE2EX9) +[![HuggingFace Spaces](https://huggingface.co/datasets/huggingface/badges/raw/main/open-in-hf-spaces-sm.svg)](https://huggingface.co/spaces/Logspace/Langflow) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/logspace-ai/langflow) -

-Discord Server -HuggingFace Spaces -

+The easiest way to create and customize your flow - - -

-

- -# Table of Contents - -- [⛓️ Langflow](#️-langflow) -- [Table of Contents](#table-of-contents) -- [📦 Installation](#-installation) - - [Locally](#locally) - - [HuggingFace Spaces](#huggingface-spaces) -- [🖥️ Command Line Interface (CLI)](#️-command-line-interface-cli) - - [Usage](#usage) - - [Environment Variables](#environment-variables) -- [Deployment](#deployment) - - [Deploy Langflow on Google Cloud Platform](#deploy-langflow-on-google-cloud-platform) - - [Deploy on Railway](#deploy-on-railway) - - [Deploy on Render](#deploy-on-render) -- [🎨 Creating Flows](#-creating-flows) -- [👋 Contributing](#-contributing) -- [📄 License](#-license) + # 📦 Installation @@ -65,7 +46,7 @@ This will install the following dependencies: - [llama-cpp-python](https://github.com/abetlen/llama-cpp-python) - [sentence-transformers](https://github.com/UKPLab/sentence-transformers) -You can still use models from projects like LocalAI +You can still use models from projects like LocalAI, Ollama, LM Studio, Jan and others. Next, run: @@ -117,7 +98,7 @@ Each option is detailed below: - `--backend-only`: This parameter, with a default value of `False`, allows running only the backend server without the frontend. It can also be set using the `LANGFLOW_BACKEND_ONLY` environment variable. - `--store`: This parameter, with a default value of `True`, enables the store features, use `--no-store` to deactivate it. It can be configured using the `LANGFLOW_STORE` environment variable. -These parameters are important for users who need to customize the behavior of Langflow, especially in development or specialized deployment scenarios. You may want to update the documentation to include these parameters for completeness and clarity. +These parameters are important for users who need to customize the behavior of Langflow, especially in development or specialized deployment scenarios. ### Environment Variables @@ -147,19 +128,19 @@ Alternatively, click the **"Open in Cloud Shell"** button below to launch Google # 🎨 Creating Flows -Creating flows with Langflow is easy. Simply drag sidebar components onto the canvas and connect them together to create your pipeline. Langflow provides a range of [LangChain components](https://python.langchain.com/docs/integrations/components) to choose from, including LLMs, prompt serializers, agents, and chains. +Creating flows with Langflow is easy. Simply drag components from the sidebar onto the canvas and connect them to start building your application. -Explore by editing prompt parameters, link chains and agents, track an agent's thought process, and export your flow. +Explore by editing prompt parameters, grouping components into a single high-level component, and building your own Custom Components. -Once you're done, you can export your flow as a JSON file to use with LangChain. -To do so, click the "Export" button in the top right corner of the canvas, then -in Python, you can load the flow with: +Once you’re done, you can export your flow as a JSON file. + +Load the flow with: ```python from langflow import load_flow_from_json flow = load_flow_from_json("path/to/flow.json") -# Now you can use it like any chain +# Now you can use it flow("Hey, have you heard of Langflow?") ``` @@ -167,15 +148,16 @@ flow("Hey, have you heard of Langflow?") We welcome contributions from developers of all levels to our open-source project on GitHub. If you'd like to contribute, please check our [contributing guidelines](./CONTRIBUTING.md) and help make Langflow more accessible. +Join our [Discord](https://discord.com/invite/EqksyE2EX9) server to ask questions, make suggestions, and showcase your projects! 🦾 + --- -Join our [Discord](https://discord.com/invite/EqksyE2EX9) server to ask questions, make suggestions and showcase your projects! 🦾 - -

-

- [![Star History Chart](https://api.star-history.com/svg?repos=logspace-ai/langflow&type=Timeline)](https://star-history.com/#logspace-ai/langflow&Date) +# 🌟 Contributors + +[![langflow contributors](https://contrib.rocks/image?repo=logspace-ai/langflow)](https://github.com/logspace-ai/langflow/graphs/contributors) + # 📄 License Langflow is released under the MIT License. See the LICENSE file for details. diff --git a/docs/docs/components/custom.mdx b/docs/docs/components/custom.mdx index 112e40ed8..d8c6ff2f5 100644 --- a/docs/docs/components/custom.mdx +++ b/docs/docs/components/custom.mdx @@ -81,7 +81,18 @@ The CustomComponent class serves as the foundation for creating custom component | _`required: bool`_ | Makes the field required. | | _`info: str`_ | Adds a tooltip to the field. | | _`file_types: List[str]`_ | This is a requirement if the _`field_type`_ is _file_. Defines which file types will be accepted. For example, _json_, _yaml_ or _yml_. | - | _`range_spec: langflow.field_typing.RangeSpec`_ | This is a requirement if the _`field_type`_ is _`float`_. Defines the range of values accepted and the step size. If none is defined, the default is _`[-1, 1, 0.1]`_. | + | _`range_spec: langflow.field_typing.RangeSpec`_ | This is a requirement if the _`field_type`_ is _`float`_. Defines the range of values accepted and the step size. If none is defined, the default is _`[-1, 1, 0.1]`_. | + | _`title_case: bool`_ | Formats the name of the field when _`display_name`_ is not defined. Set it to False to keep the name as you set it in the _`build`_ method. | + + + + Keys _`options`_ and _`value`_ can receive a method or function that returns a list of strings or a string, respectively. This is useful when you want to dynamically generate the options or the default value of a field. A refresh button will appear next to the field in the component, allowing the user to update the options or the default value. + + + + + + - The CustomComponent class also provides helpful methods for specific tasks (e.g., to load and use other flows from the Langflow platform): | Method Name | Description | @@ -96,6 +107,7 @@ The CustomComponent class serves as the foundation for creating custom component | -------------- | ----------------------------------------------------------------------------- | | _`status`_ | Displays the value it receives in the _`build`_ method. Useful for debugging. | | _`field_order`_ | Defines the order the fields will be displayed in the canvas. | + | _`icon`_ | Defines the emoji (for example, _`:rocket:`_) that will be displayed in the canvas. | diff --git a/docs/docs/components/embeddings.mdx b/docs/docs/components/embeddings.mdx index 015ba1ce1..d4ad17542 100644 --- a/docs/docs/components/embeddings.mdx +++ b/docs/docs/components/embeddings.mdx @@ -98,9 +98,9 @@ Used to load [OpenAI’s](https://openai.com/) embedding models. Wrapper around [Google Vertex AI](https://cloud.google.com/vertex-ai) [Embeddings API](https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings). -:::info + Vertex AI is a cloud computing platform offered by Google Cloud Platform (GCP). It provides access, management, and development of applications and services through global data centers. To use Vertex AI PaLM, you need to have the [google-cloud-aiplatform](https://pypi.org/project/google-cloud-aiplatform/) Python package installed and credentials configured for your environment. -::: + - **credentials:** The default custom credentials (google.auth.credentials.Credentials) to use. - **location:** The default location to use when making API calls – defaults to `us-central1`. diff --git a/docs/docs/components/io.mdx b/docs/docs/components/io.mdx index e0b8fb87d..0ef93d684 100644 --- a/docs/docs/components/io.mdx +++ b/docs/docs/components/io.mdx @@ -1,9 +1,8 @@ - -import Admonition from '@theme/Admonition'; +import Admonition from "@theme/Admonition"; # I/O -## ChatInput +### ChatInput This component is designed to get user input from the chat. @@ -15,9 +14,7 @@ This component is designed to get user input from the chat. - **Message:** specifies the message text. It is a multiline text input. -- **Session ID:** specifies the session ID of the chat history. - -- **As Record:** if true, the message will be returned as a _`Record`_. Defaults to _`false`_. +- **Session ID:** specifies the session ID of the chat history. If provided, the message will be saved in the Message History.

@@ -25,7 +22,7 @@ This component is designed to get user input from the chat.

-## ChatOutput +### ChatOutput This component is designed to send a message to the chat. @@ -35,65 +32,21 @@ This component is designed to send a message to the chat. - **Sender Name:** specifies the name of the sender. Defaults to _`"AI"`_. -- **Session ID:** specifies the session ID of the chat history. +- **Session ID:** specifies the session ID of the chat history. If provided, the message will be saved in the Message History. - **Message:** specifies the message text. -- **As Record:** if true, the message will be returned as a _`Record`_. Defaults to _`false`_. -

If _`As Record`_ is _`true`_ and the _`Message`_ is a _`Record`_, the data of the _`Record`_ will be updated with the _`Sender`_, _`Sender Name`_, and _`Session ID`_.

-## StoreMessages -This component is designed to store messages in a structured format. It can store messages provided directly as records or construct records from provided texts and metadata. +### TextInput -**Params** +This component is designed for simple text input, allowing users to pass textual data to subsequent components in the workflow. It's particularly useful for scenarios where a brief user input is required to initiate or influence the flow. -- **Records:** (Optional) Specifies the list of records to store. Each `Record` should contain the keys `'sender'`, `'sender_name'`, and `'session_id'`. If not provided, `texts` must be used along with `session_id`, `sender`, and `sender_name` to construct the records. - -- **Texts:** (Optional) Specifies the list of text messages to store. If `records` is not provided, `texts` must be provided along with `session_id`, `sender`, and `sender_name`. - -- **Session ID:** (Optional) Specifies the session ID associated with the messages. Required if `records` is not provided and `texts` are used. - -- **Sender:** (Optional) Specifies the identifier of the sender. Required if `records` is not provided and `texts` are used. - -- **Sender Name:** (Optional) Specifies the name of the sender. Required if `records` is not provided and `texts` are used. - - -

- The component prioritizes the use of `Records` for storing messages. If `Records` are not provided, it requires `Texts`, `Session ID`, `Sender`, and `Sender Name` to construct and store records. Ensure that either `Records` or the combination of `Texts`, `Session ID`, `Sender`, and `Sender Name` is provided. -

-
- -## MessageHistory - -This component is designed to retrieve stored messages based on various filters such as sender type, sender name, and session ID. It allows for a flexible retrieval of chat history, providing insights into past interactions. - -**Params** - -- **Sender Type:** (Optional) Specifies the type of the sender. Options are _`"Machine"`_ or _`"User"`_. Filters the messages by the type of sender. - -- **Sender Name:** (Optional) Specifies the name of the sender. Filters the messages by the name of the sender. - -- **Session ID:** (Optional) Specifies the session ID of the chat history. Filters the messages belonging to a specific session. - -- **Number of Messages:** Specifies the number of messages to retrieve. Defaults to _`5`_. Determines how many recent messages from the chat history to fetch. - - -

- The component retrieves messages based on the provided criteria. If no specific criteria are provided, it will return the most recent messages up to the specified limit. This component can be used to review past interactions and analyze the flow of conversations. - - -

-
- -## TextInput - -This component is designed for simple text input, allowing users to pass textual data to subsequent components in the workflow. It's particularly useful for scenarios where a brief user input is required to initiate or influence the process flow. **Params** @@ -101,6 +54,20 @@ This component is designed for simple text input, allowing users to pass textual

- The `TextInput` component serves as a straightforward means for capturing user input. It ensures that textual data can be seamlessly integrated into the Langflow's component-based processing pipeline, fostering interactivity within automated workflows. + The `TextInput` component serves as a straightforward means for setting Text input values in the chat window. It ensures that textual data can be seamlessly passed to subsequent components in the flow.

+ +### TextOutput + +This component is designed to display text data to the user. It's particularly useful for scenarios where you don't want to send the text data to the chat, but still want to display it. + +**Params** + +- **Value:** Specifies the text data to be displayed. This is where the text data to be displayed is provided. If no value is provided, it defaults to an empty string. + + +

+ The `TextOutput` component serves as a straightforward means for displaying text data. It ensures that textual data can be seamlessly observed in the chat window throughout your flow. +

+
\ No newline at end of file diff --git a/docs/docs/components/llms.mdx b/docs/docs/components/llms.mdx index 088556d2f..d72364376 100644 --- a/docs/docs/components/llms.mdx +++ b/docs/docs/components/llms.mdx @@ -40,9 +40,10 @@ Wrapper around Anthropic's large language model used for chat-based interactions The `CTransformers` component provides access to the Transformer models implemented in C/C++ using the [GGML](https://github.com/ggerganov/ggml) library. -:::info + + Make sure to have the `ctransformers` python package installed. Learn more about installation, supported models, and usage [here](https://github.com/marella/ctransformers). -::: + **config:** Configuration for the Transformer models. Check out [config](https://github.com/marella/ctransformers#config). Defaults to: @@ -115,9 +116,9 @@ Wrapper around [Cohere's](https://cohere.com) large language models. Wrapper around [HuggingFace](https://www.huggingface.co/models) models. -:::info + The HuggingFace Hub is an online platform that hosts over 120k models, 20k datasets, and 50k demo apps, all of which are open-source and publicly available. Discover more at [HuggingFace](http://www.huggingface.co). -::: + - **huggingfacehub_api_token:** Token needed to authenticate the API. - **model_kwargs:** Keyword arguments to pass to the model. @@ -130,9 +131,9 @@ The HuggingFace Hub is an online platform that hosts over 120k models, 20k datas The `LlamaCpp` component provides access to the `llama.cpp` models. -:::info + Make sure to have the `llama.cpp` python package installed. Learn more about installation, supported models, and usage [here](https://github.com/ggerganov/llama.cpp). -::: + - **echo:** Whether to echo the prompt – defaults to `False`. - **f16_kv:** Use half-precision for key/value cache – defaults to `True`. @@ -181,9 +182,9 @@ Wrapper around [OpenAI's](https://openai.com) large language models. Wrapper around [Google Vertex AI](https://cloud.google.com/vertex-ai) large language models. -:::info + Vertex AI is a cloud computing platform offered by Google Cloud Platform (GCP). It provides access, management, and development of applications and services through global data centers. To use Vertex AI PaLM, you need to have the [google-cloud-aiplatform](https://pypi.org/project/google-cloud-aiplatform/) Python package installed and credentials configured for your environment. -::: + - **credentials:** The default custom credentials (google.auth.credentials.Credentials) to use. - **location:** The default location to use when making API calls – defaults to `us-central1`. @@ -203,9 +204,9 @@ Vertex AI is a cloud computing platform offered by Google Cloud Platform (GCP). Wrapper around [Google Vertex AI](https://cloud.google.com/vertex-ai) large language models. -:::info + Vertex AI is a cloud computing platform offered by Google Cloud Platform (GCP). It provides access, management, and development of applications and services through global data centers. To use Vertex AI PaLM, you need to have the [google-cloud-aiplatform](https://pypi.org/project/google-cloud-aiplatform/) Python package installed and credentials configured for your environment. -::: + - **credentials:** The default custom credentials (google.auth.credentials.Credentials) to use. - **location:** The default location to use when making API calls – defaults to `us-central1`. diff --git a/docs/docs/components/memories.mdx b/docs/docs/components/memories.mdx index 3bf9a957c..b92538134 100644 --- a/docs/docs/components/memories.mdx +++ b/docs/docs/components/memories.mdx @@ -12,6 +12,26 @@ Memory is a concept in chat-based applications that allows the system to remembe --- +### MessageHistory + +This component is designed to retrieve stored messages based on various filters such as sender type, sender name, session ID, and a specific file path where messages are stored. It allows for a flexible retrieval of chat history, providing insights into past interactions. + +**Params** + +- **Sender Type:** (Optional) Specifies the type of the sender. Options are _`"Machine"`_, _`"User"`_, or _`"Machine and User"`_. Filters the messages by the type of the sender. + +- **Sender Name:** (Optional) Specifies the name of the sender. Filters the messages by the name of the sender. + +- **Session ID:** (Optional) Specifies the session ID of the chat history. Filters the messages belonging to a specific session. + +- **Number of Messages:** Specifies the number of messages to retrieve. Defaults to _`5`_. Determines how many recent messages from the chat history to fetch. + + +

+ The component retrieves messages based on the provided criteria, including the specific file path for stored messages. If no specific criteria are provided, it will return the most recent messages up to the specified limit. This component can be used to review past interactions and analyze the flow of conversations. +

+
+ ### ConversationBufferMemory The `ConversationBufferMemory` component is a type of memory system that plainly stores the last few inputs and outputs of a conversation. @@ -27,7 +47,7 @@ The `ConversationBufferMemory` component is a type of memory system that plainly ### ConversationBufferWindowMemory -`ConversationBufferWindowMemory` is a variation of the `ConversationBufferMemory` that maintains a list of the recent interactions in a conversation. It only keeps the last K interactions in memory, which can be useful for maintaining a sliding window of the most recent interactions without letting the buffer get too large. +`ConversationBufferWindowMemory` is a variation of the `ConversationBufferMemory` that maintains a list of the recent interactions in a conversation. It only keeps the last K interactions in memory, which can be useful for maintaining a sliding window of the most recent interactions without letting the buffer get too large. **Params** @@ -72,7 +92,7 @@ The `ConversationEntityMemory` component incorporates intricate memory structure ### ConversationSummaryMemory -The `ConversationSummaryMemory` is a memory component that creates a summary of the conversation over time. It condenses information from the conversation and stores the current summary in memory. It is particularly useful for longer conversations where keeping the entire message history in the prompt would take up too many tokens. +The `ConversationSummaryMemory` is a memory component that creates a summary of the conversation over time. It condenses information from the conversation and stores the current summary in memory. It is particularly useful for longer conversations where keeping the entire message history in the prompt would take up too many tokens. **Params** diff --git a/docs/docs/components/tools.mdx b/docs/docs/components/tools.mdx index c92d6eee0..40fb2c5c2 100644 --- a/docs/docs/components/tools.mdx +++ b/docs/docs/components/tools.mdx @@ -9,6 +9,21 @@ import Admonition from '@theme/Admonition';
+### SearchApi + +Real-time search engine results API. Returns structured JSON data that includes answer box, knowledge graph, organic results, and more. + +**Parameters** + +- **Api Key:** A unique identifier for the SearchApi, necessary for authenticating requests to real-time search engines. This key can be retrieved from the [SearchApi dashboard](https://www.searchapi.io/). +- **Engine:** Specifies the search engine. For instance: google, google_scholar, bing, youtube, and youtube_transcripts. A full list of supported engines is available in the [documentation](https://www.searchapi.io/docs/google). +- **Parameters:** Allows the selection of any parameters recognized by SearchApi, with some being required and others optional. + +**Output** + +- **Document:** The JSON response from the request as a Document. + + ### BingSearchRun Bing Search is a web search engine owned and operated by Microsoft. It provides search results for various types of content, including web pages, images, videos, and news articles. It uses a combination of algorithms and human editors to deliver search results to users. @@ -60,4 +75,4 @@ Tool for getting metadata about a SQL database. The input to this tool is a comm **Params** -- **Db:** SQLDatabase to query. \ No newline at end of file +- **Db:** SQLDatabase to query. diff --git a/docs/docs/contributing/community.md b/docs/docs/contributing/community.md index 51016f508..6bb62641d 100644 --- a/docs/docs/contributing/community.md +++ b/docs/docs/contributing/community.md @@ -12,7 +12,7 @@ ## 🐦 Stay tunned for **Langflow** on Twitter -Follow [@logspace_ai](https://twitter.com/langflow_ai) on **Twitter** to get the latest news about **Langflow**. +Follow [@langflow_ai](https://twitter.com/langflow_ai) on **Twitter** to get the latest news about **Langflow**. --- ## ⭐️ Star **Langflow** on GitHub diff --git a/docs/docs/deployment/gcp-deployment.md b/docs/docs/deployment/gcp-deployment.md index 771550f24..032426d94 100644 --- a/docs/docs/deployment/gcp-deployment.md +++ b/docs/docs/deployment/gcp-deployment.md @@ -4,9 +4,8 @@ This guide will help you set up a Langflow development VM in a Google Cloud Platform project using Google Cloud Shell. -:::note -When Cloud Shell opens, be sure to select **Trust repo**. Some `gcloud` commands might not run in an ephemeral Cloud Shell environment. -::: +> Note: When Cloud Shell opens, be sure to select **Trust repo**. Some `gcloud` commands might not run in an ephemeral Cloud Shell environment. + ## Standard VM diff --git a/docs/docs/examples/buffer-memory.mdx b/docs/docs/examples/buffer-memory.mdx index 2b5b76586..3167081a5 100644 --- a/docs/docs/examples/buffer-memory.mdx +++ b/docs/docs/examples/buffer-memory.mdx @@ -14,6 +14,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/buffer-memory.png", + dark: "img/buffer-memory.png", }} /> diff --git a/docs/docs/examples/conversation-chain.mdx b/docs/docs/examples/conversation-chain.mdx index db3181881..1cd59ca55 100644 --- a/docs/docs/examples/conversation-chain.mdx +++ b/docs/docs/examples/conversation-chain.mdx @@ -20,6 +20,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/basic-chat.png", + dark: "img/basic-chat.png", }} /> diff --git a/docs/docs/examples/csv-loader.mdx b/docs/docs/examples/csv-loader.mdx index c59dfc1e7..351e99440 100644 --- a/docs/docs/examples/csv-loader.mdx +++ b/docs/docs/examples/csv-loader.mdx @@ -32,6 +32,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/csv-loader.png", + dark: "img/csv-loader.png", }} /> @@ -39,12 +40,12 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; -- [`CSVLoader`](https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv) +- [`CSVLoader`](https://python.langchain.com/docs/integrations/document_loaders/csv) - [`CharacterTextSplitter`](https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter) -- [`OpenAIEmbedding`](https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai) -- [`Chroma`](https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma) +- [`OpenAIEmbedding`](https://python.langchain.com/docs/integrations/text_embedding/openai) +- [`Chroma`](https://python.langchain.com/docs/integrations/vectorstores/chroma) - [`VectorStoreInfo`](https://python.langchain.com/docs/modules/data_connection/vectorstores/) - [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai) -- [`VectorStoreAgent`](https://python.langchain.com/docs/modules/agents/toolkits/vectorstore) +- [`VectorStoreAgent`](https://js.langchain.com/docs/modules/agents/tools/how_to/agents_with_vectorstores) diff --git a/docs/docs/examples/flow-runner.mdx b/docs/docs/examples/flow-runner.mdx index c496cd745..e20dc39f7 100644 --- a/docs/docs/examples/flow-runner.mdx +++ b/docs/docs/examples/flow-runner.mdx @@ -14,6 +14,7 @@ The CustomComponent class allows us to create components that interact with Lang alt="Document Processor Component" sources={{ light: "img/flow_runner.png", + dark: "img/flow_runner.png", }} style={{ width: "30%", @@ -339,6 +340,7 @@ Done! This is what our script and custom component looks like: alt="Document Processor Code" sources={{ light: "img/flow_runner_code.png", + dark: "img/flow_runner_code.png", }} style={{ maxWidth: "100%", @@ -353,6 +355,7 @@ Done! This is what our script and custom component looks like: alt="Document Processor Component" sources={{ light: "img/flow_runner.png", + dark: "img/flow_runner.png", }} style={{ width: "40%", diff --git a/docs/docs/examples/how-upload-examples.mdx b/docs/docs/examples/how-upload-examples.mdx index 2b1a2b06c..4f54558eb 100644 --- a/docs/docs/examples/how-upload-examples.mdx +++ b/docs/docs/examples/how-upload-examples.mdx @@ -12,6 +12,7 @@ Langflow Examples is a repository on [GitHub](https://github.com/logspace-ai/lan alt="Docusaurus themed image" sources={{ light: "img/community-examples.png", + dark: "img/community-examples.png", }} style={{ width: "100%" }} /> diff --git a/docs/docs/examples/midjourney-prompt-chain.mdx b/docs/docs/examples/midjourney-prompt-chain.mdx index c79bb0b27..9df732026 100644 --- a/docs/docs/examples/midjourney-prompt-chain.mdx +++ b/docs/docs/examples/midjourney-prompt-chain.mdx @@ -32,6 +32,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/midjourney-prompt-chain.png", + dark: "img/midjourney-prompt-chain.png", }} /> @@ -40,6 +41,6 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; - [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai) -- [`ConversationSummaryMemory`](https://python.langchain.com/docs/modules/memory/how_to/summary) +- [`ConversationSummaryMemory`](https://python.langchain.com/docs/modules/memory/types/summary) diff --git a/docs/docs/examples/multiple-vectorstores.mdx b/docs/docs/examples/multiple-vectorstores.mdx index 0c9f11c4c..2e554bbf1 100644 --- a/docs/docs/examples/multiple-vectorstores.mdx +++ b/docs/docs/examples/multiple-vectorstores.mdx @@ -24,7 +24,7 @@ https://pt.wikipedia.org/wiki/Harry_Potter Learn more about Multiple Vector Stores - [here](https://python.langchain.com/docs/modules/agents/toolkits/vectorstore?highlight=Multiple%20Vector%20Stores#multiple-vectorstores). + [here](https://python.langchain.com/docs/modules/data_connection/vectorstores/). ## ⛓️ Langflow Example @@ -37,6 +37,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/multiple-vectorstores.png", + dark: "img/multiple-vectorstores.png", }} /> @@ -44,14 +45,14 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; -- [`WebBaseLoader`](https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base) -- [`TextLoader`](https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/unstructured_file) +- [`WebBaseLoader`](https://python.langchain.com/docs/integrations/document_loaders/web_base) +- [`TextLoader`](https://python.langchain.com/docs/modules/data_connection/document_loaders/) - [`CharacterTextSplitter`](https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter) -- [`OpenAIEmbedding`](https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai) -- [`Chroma`](https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma) +- [`OpenAIEmbedding`](https://python.langchain.com/docs/integrations/text_embedding/openai) +- [`Chroma`](https://python.langchain.com/docs/integrations/vectorstores/chroma) - [`VectorStoreInfo`](https://python.langchain.com/docs/modules/data_connection/vectorstores/) - [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai) -- [`VectorStoreRouterToolkit`](https://python.langchain.com/docs/modules/agents/toolkits/vectorstore) -- [`VectorStoreRouterAgent`](https://python.langchain.com/docs/modules/agents/toolkits/vectorstore) +- [`VectorStoreRouterToolkit`](https://js.langchain.com/docs/modules/agents/tools/how_to/agents_with_vectorstores) +- [`VectorStoreRouterAgent`](https://js.langchain.com/docs/modules/agents/tools/how_to/agents_with_vectorstores) diff --git a/docs/docs/examples/python-function.mdx b/docs/docs/examples/python-function.mdx index f537075c6..9eadd7273 100644 --- a/docs/docs/examples/python-function.mdx +++ b/docs/docs/examples/python-function.mdx @@ -28,7 +28,7 @@ The `AgentInitializer` component is a quick way to construct an agent from the m The `PythonFunction` is a custom component that uses the LangChain 🦜🔗 tool decorator. Learn more about it - [here](https://python.langchain.com/docs/modules/agents/tools/how_to/custom_tools). + [here](https://python.langchain.com/docs/modules/agents/tools/custom_tools). ## ⛓️ Langflow Example @@ -41,6 +41,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/python-function.png", + dark: "img/python-function.png", }} /> @@ -48,7 +49,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; -- [`PythonFunctionTool`](https://python.langchain.com/docs/modules/agents/tools/how_to/custom_tools) +- [`PythonFunctionTool`](https://python.langchain.com/docs/modules/agents/tools/custom_tools) - [`ChatOpenAI`](https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai) - [`AgentInitializer`](https://python.langchain.com/docs/modules/agents/) diff --git a/docs/docs/examples/searchapi-tool.mdx b/docs/docs/examples/searchapi-tool.mdx new file mode 100644 index 000000000..d3cb4734a --- /dev/null +++ b/docs/docs/examples/searchapi-tool.mdx @@ -0,0 +1,52 @@ +import Admonition from "@theme/Admonition"; + +# SearchApi Tool + +The [SearchApi](https://www.searchapi.io/) allows developers to retrieve results from search engines such as Google, Google Scholar, YouTube, YouTube transcripts, and more, and can be used as in Langflow through the `SearchApi` tool. + + + To use the SearchApi, you must first obtain an API key by registering at [SearchApi's website](https://www.searchapi.io/). + + +In the given example, we specify `engine` as `youtube_transcripts` and provide a `video_id`. + + + All engines and parameters can be found in [SearchApi documentation](https://www.searchapi.io/docs/google). + + +The `RetrievalQA` chain processes a `Document` along with a user's question to return an answer. + + + In this example, we used [`ChatOpenAI`](https://platform.openai.com/) as the + LLM, but feel free to experiment with other Language Models! + + +The `RetrievalQA` takes `CombineDocsChain` and `SearchApi` tool as inputs, using the tool as a `Document` to answer questions. + + + Learn more about the SearchApi + [here](https://python.langchain.com/docs/integrations/tools/searchapi). + + +## ⛓️ Langflow Example + +import ThemedImage from "@theme/ThemedImage"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import ZoomableImage from "/src/theme/ZoomableImage.js"; + + + +#### Download Flow + + + +- [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai) +- [`SearchApiAPIWrapper`](https://python.langchain.com/docs/integrations/providers/searchapi#wrappers) +- [`ZeroShotAgent`](https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent) + + \ No newline at end of file diff --git a/docs/docs/examples/serp-api-tool.mdx b/docs/docs/examples/serp-api-tool.mdx index 60e55791a..7e8d95936 100644 --- a/docs/docs/examples/serp-api-tool.mdx +++ b/docs/docs/examples/serp-api-tool.mdx @@ -22,7 +22,7 @@ The `ZeroShotAgent` takes the `LLMChain` and the `Search` tool as inputs, using Learn more about the Serp API - [here](https://python.langchain.com/docs/modules/agents/tools/integrations/serpapi). + [here](https://python.langchain.com/docs/integrations/providers/serpapi ). ## ⛓️ Langflow Example @@ -35,6 +35,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/serp-api-tool.png", + dark: "img/serp-api-tool.png", }} /> @@ -45,7 +46,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; - [`ZeroShotPrompt`](https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/) - [`OpenAI`](https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai) - [`LLMChain`](https://python.langchain.com/docs/modules/chains/foundational/llm_chain) -- [`Search`](https://python.langchain.com/docs/modules/agents/tools/integrations/serpapi) +- [`Search`](https://python.langchain.com/docs/integrations/providers/serpapi) - [`ZeroShotAgent`](https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent) diff --git a/docs/docs/getting-started/creating-flows.mdx b/docs/docs/getting-started/creating-flows.mdx index b09951f42..aecc3ea16 100644 --- a/docs/docs/getting-started/creating-flows.mdx +++ b/docs/docs/getting-started/creating-flows.mdx @@ -13,6 +13,7 @@ Creating flows with Langflow is easy. Drag sidebar components onto the canvas an alt="Docusaurus themed image" sources={{ light: "img/langflow_canvas.png", + dark: "img/langflow_canvas.png" }} /> diff --git a/docs/docs/getting-started/hugging-face-spaces.mdx b/docs/docs/getting-started/hugging-face-spaces.mdx index acc4bb8d5..4759ea398 100644 --- a/docs/docs/getting-started/hugging-face-spaces.mdx +++ b/docs/docs/getting-started/hugging-face-spaces.mdx @@ -12,6 +12,7 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; alt="Docusaurus themed image" sources={{ light: "img/hugging-face.png", + dark: "img/hugging-face.png", }} style={{ width: "100%" }} /> diff --git a/docs/docs/guidelines/api.mdx b/docs/docs/guidelines/api.mdx index 97d2db76e..8bba633fb 100644 --- a/docs/docs/guidelines/api.mdx +++ b/docs/docs/guidelines/api.mdx @@ -17,6 +17,7 @@ Langflow offers an API Key functionality that allows users to access their indiv alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/api-key.png"), + dark: useBaseUrl("img/api-key.png"), }} style={{ width: "50%", maxWidth: "600px", margin: "0 auto" }} /> diff --git a/docs/docs/guidelines/chat-interface.mdx b/docs/docs/guidelines/chat-interface.mdx index 0ac23dc8a..5da5d4647 100644 --- a/docs/docs/guidelines/chat-interface.mdx +++ b/docs/docs/guidelines/chat-interface.mdx @@ -13,6 +13,7 @@ Langflow’s chat interface provides a user-friendly experience and functionalit alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/chat_interface.png"), + dark: useBaseUrl("img/chat_interface.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -25,6 +26,7 @@ Notice that editing variables in the chat interface take place temporarily and w alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/chat_interface2.png"), + dark: useBaseUrl("img/chat_interface2.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -36,6 +38,7 @@ To view the complete prompt in its original, structured format, click the "Displ alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/chat_interface3.png"), + dark: useBaseUrl("img/chat_interface3.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -47,6 +50,7 @@ In the chat interface, you can redefine which variable should be interpreted as alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/chat_interface4.png"), + dark: useBaseUrl("img/chat_interface4.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> diff --git a/docs/docs/guidelines/chat-widget.mdx b/docs/docs/guidelines/chat-widget.mdx index 7f6737fea..46ed974a8 100644 --- a/docs/docs/guidelines/chat-widget.mdx +++ b/docs/docs/guidelines/chat-widget.mdx @@ -38,6 +38,7 @@ import Admonition from "@theme/Admonition"; alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/widget-sidebar.png"), + dark: useBaseUrl("img/widget-sidebar.png"), }} style={{ width: "50%", maxWidth: "600px", margin: "0 auto" }} /> @@ -53,6 +54,7 @@ import Admonition from "@theme/Admonition"; alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/widget-code.png"), + dark: useBaseUrl("img/widget-code.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> diff --git a/docs/docs/guidelines/components.mdx b/docs/docs/guidelines/components.mdx index 7188bf1e0..32ec00615 100644 --- a/docs/docs/guidelines/components.mdx +++ b/docs/docs/guidelines/components.mdx @@ -30,6 +30,7 @@ Components are the building blocks of the flows. They are made of inputs, output alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/single-compenent.png"), + dark: useBaseUrl("img/single-compenent.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> diff --git a/docs/docs/guidelines/custom-component.mdx b/docs/docs/guidelines/custom-component.mdx index 4f18d0375..99106d400 100644 --- a/docs/docs/guidelines/custom-component.mdx +++ b/docs/docs/guidelines/custom-component.mdx @@ -63,6 +63,7 @@ class DocumentProcessor(CustomComponent): alt="Document Processor Component" sources={{ light: "img/document_processor.png", + dark: "img/document_processor.png", }} style={{ margin: "0 auto", @@ -330,6 +331,7 @@ All done! This is what our script and brand-new custom component look like: alt="Document Processor Code" sources={{ light: "img/document_processor_code.png", + dark: "img/document_processor_code.png", }} style={{ maxWidth: "100%", @@ -344,6 +346,7 @@ All done! This is what our script and brand-new custom component look like: alt="Document Processor Component" sources={{ light: "img/document_processor.png", + dark: "img/document_processor.png", }} style={{ width: "40%", diff --git a/docs/docs/guidelines/features.mdx b/docs/docs/guidelines/features.mdx index 6235b68db..19837430d 100644 --- a/docs/docs/guidelines/features.mdx +++ b/docs/docs/guidelines/features.mdx @@ -18,6 +18,7 @@ import Admonition from "@theme/Admonition"; alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/features.png"), + dark: useBaseUrl("img/features.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> diff --git a/docs/docs/guidelines/login.mdx b/docs/docs/guidelines/login.mdx index 85ca1371f..fde7cd09a 100644 --- a/docs/docs/guidelines/login.mdx +++ b/docs/docs/guidelines/login.mdx @@ -86,6 +86,7 @@ With _`LANGFLOW_AUTO_LOGIN`_ set to _`False`_, Langflow requires users to sign u alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/sign-up.png"), + dark: useBaseUrl("img/sign-up.png"), }} style={{ width: "50%", maxWidth: "600px", margin: "0 auto" }} /> @@ -102,6 +103,7 @@ Users can change their profile settings by clicking on the profile icon in the t alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/my-account.png"), + dark: useBaseUrl("img/my-account.png"), }} style={{ width: "50%", maxWidth: "600px", margin: "0 auto" }} /> @@ -112,6 +114,7 @@ By clicking on **Profile Settings**, the user is taken to the profile settings p alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/profile-settings.png"), + dark: useBaseUrl("img/profile-settings.png"), }} style={{ maxWidth: "600px", margin: "0 auto" }} /> @@ -122,6 +125,7 @@ By clicking on **Admin Page**, the superuser is taken to the admin page, where t alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/admin-page.png"), + dark: useBaseUrl("img/admin-page.png"), }} style={{ maxWidth: "600px", margin: "0 auto" }} diff --git a/docs/docs/guidelines/prompt-customization.mdx b/docs/docs/guidelines/prompt-customization.mdx index efb5b3928..2a1b1f210 100644 --- a/docs/docs/guidelines/prompt-customization.mdx +++ b/docs/docs/guidelines/prompt-customization.mdx @@ -13,6 +13,7 @@ The prompt template allows users to create prompts and define variables that pro alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/prompt_customization.png"), + dark: useBaseUrl("img/prompt_customization.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -25,6 +26,7 @@ Variables can be used to define instructions, questions, context, inputs, or exa alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/prompt_customization2.png"), + dark: useBaseUrl("img/prompt_customization2.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -37,6 +39,7 @@ Once inserted, these variables are immediately recognized as new fields in the p alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/prompt_customization3.png"), + dark: useBaseUrl("img/prompt_customization3.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -49,6 +52,7 @@ You can also use documents or output parsers as prompt variables. By plugging th alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/prompt_customization4.png"), + dark: useBaseUrl("img/prompt_customization4.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> @@ -63,6 +67,7 @@ If working with an interactive (chat-like) flow, remember to keep one of the inp alt="Docusaurus themed image" sources={{ light: useBaseUrl("img/prompt_customization5.png"), + dark: useBaseUrl("img/prompt_customization5.png"), }} style={{ width: "100%", maxWidth: "800px", margin: "0 auto" }} /> diff --git a/docs/docs/index.mdx b/docs/docs/index.mdx index f0fee5009..840f10f10 100644 --- a/docs/docs/index.mdx +++ b/docs/docs/index.mdx @@ -1,6 +1,6 @@ # 👋 Welcome to Langflow -Langflow is an easy way to prototype [LangChain](https://github.com/hwchase17/langchain) flows. The drag-and-drop feature allows quick and effortless experimentation, while the built-in chat interface facilitates real-time interaction. It provides options to edit prompt parameters, create chains and agents, track thought processes, and export flows. +Langflow is an easy way to create flows. The drag-and-drop feature allows quick and effortless experimentation, while the built-in chat interface facilitates real-time interaction. It provides options to edit prompt parameters, create chains and agents, track thought processes, and export flows. import ThemedImage from "@theme/ThemedImage"; import useBaseUrl from "@docusaurus/useBaseUrl"; @@ -11,7 +11,8 @@ import ZoomableImage from "/src/theme/ZoomableImage.js"; diff --git a/docs/sidebars.js b/docs/sidebars.js index 0309f2d9a..18cf18040 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -82,6 +82,7 @@ module.exports = { "examples/buffer-memory", "examples/midjourney-prompt-chain", "examples/csv-loader", + "examples/searchapi-tool", "examples/serp-api-tool", "examples/multiple-vectorstores", "examples/python-function", diff --git a/img/new_langflow_demo.gif b/docs/static/img/new_langflow_demo.gif similarity index 100% rename from img/new_langflow_demo.gif rename to docs/static/img/new_langflow_demo.gif diff --git a/docs/static/img/searchapi-tool.png b/docs/static/img/searchapi-tool.png new file mode 100644 index 000000000..0e11a3b16 Binary files /dev/null and b/docs/static/img/searchapi-tool.png differ diff --git a/docs/static/json_files/SearchApi_Tool.json b/docs/static/json_files/SearchApi_Tool.json new file mode 100644 index 000000000..304f191f1 --- /dev/null +++ b/docs/static/json_files/SearchApi_Tool.json @@ -0,0 +1 @@ +{"id":"7fc56f82-3493-4742-9c85-82b144127aff","data":{"nodes":[{"id":"ChatOpenAI-4Mfuz","type":"genericNode","position":{"x":-2243.8068684913856,"y":-2026.350019258601},"data":{"type":"ChatOpenAI","node":{"template":{"callbacks":{"type":"langchain_core.callbacks.base.BaseCallbackHandler","required":false,"placeholder":"","list":true,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"callbacks","advanced":false,"dynamic":false,"info":""},"async_client":{"type":"Any","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"async_client","advanced":false,"dynamic":false,"info":""},"cache":{"type":"bool","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"cache","advanced":false,"dynamic":false,"info":""},"client":{"type":"Any","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"client","advanced":false,"dynamic":false,"info":""},"default_headers":{"type":"dict","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"default_headers","advanced":false,"dynamic":false,"info":""},"default_query":{"type":"dict","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"default_query","advanced":false,"dynamic":false,"info":""},"http_client":{"type":"Any","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"http_client","advanced":false,"dynamic":false,"info":""},"max_retries":{"type":"int","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"value":2,"fileTypes":[],"password":false,"name":"max_retries","advanced":false,"dynamic":false,"info":""},"max_tokens":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":true,"name":"max_tokens","advanced":false,"dynamic":false,"info":"","value":""},"metadata":{"type":"dict","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"metadata","advanced":false,"dynamic":false,"info":""},"model_kwargs":{"type":"dict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"model_kwargs","advanced":true,"dynamic":false,"info":""},"model_name":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"gpt-3.5-turbo-16k","fileTypes":[],"password":false,"options":["gpt-4-1106-preview","gpt-4-vision-preview","gpt-4","gpt-4-32k","gpt-3.5-turbo","gpt-3.5-turbo-16k"],"name":"model_name","advanced":false,"dynamic":false,"info":""},"n":{"type":"int","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"value":1,"fileTypes":[],"password":false,"name":"n","advanced":false,"dynamic":false,"info":""},"name":{"type":"str","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"name","advanced":false,"dynamic":false,"info":""},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":false,"dynamic":false,"info":"\nThe 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.\n"},"openai_api_key":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"","fileTypes":[],"password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":""},"openai_organization":{"type":"str","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"openai_organization","display_name":"OpenAI Organization","advanced":false,"dynamic":false,"info":""},"openai_proxy":{"type":"str","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"openai_proxy","display_name":"OpenAI Proxy","advanced":false,"dynamic":false,"info":""},"request_timeout":{"type":"float","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"request_timeout","advanced":false,"dynamic":false,"info":"","rangeSpec":{"min":-1,"max":1,"step":0.1}},"streaming":{"type":"bool","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"value":false,"fileTypes":[],"password":false,"name":"streaming","advanced":false,"dynamic":false,"info":""},"tags":{"type":"str","required":false,"placeholder":"","list":true,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"tags","advanced":false,"dynamic":false,"info":""},"temperature":{"type":"float","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"0.5","fileTypes":[],"password":false,"name":"temperature","advanced":false,"dynamic":false,"info":"","rangeSpec":{"min":-1,"max":1,"step":0.1}},"tiktoken_model_name":{"type":"str","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"tiktoken_model_name","advanced":false,"dynamic":false,"info":""},"verbose":{"type":"bool","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"value":false,"fileTypes":[],"password":false,"name":"verbose","advanced":false,"dynamic":false,"info":""},"_type":"ChatOpenAI"},"description":"[*Deprecated*] `OpenAI` Chat large language models API.","base_classes":["BaseLanguageModel","BaseChatModel","ChatOpenAI","BaseLLM"],"display_name":"ChatOpenAI","documentation":"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai","custom_fields":{},"output_types":[],"field_formatters":{},"beta":false},"id":"ChatOpenAI-4Mfuz"},"selected":false,"width":384,"height":649,"positionAbsolute":{"x":-2243.8068684913856,"y":-2026.350019258601},"dragging":false},{"id":"CharacterTextSplitter-WVMFU","type":"genericNode","position":{"x":-2661.4749778477553,"y":-1608.9437055023366},"data":{"type":"CharacterTextSplitter","node":{"template":{"documents":{"type":"Document","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"value":"","fileTypes":[],"file_path":"","password":false,"name":"documents","advanced":false,"dynamic":false,"info":""},"chunk_overlap":{"type":"int","required":true,"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":""},"chunk_size":{"type":"int","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"2000","fileTypes":[],"file_path":"","password":false,"name":"chunk_size","display_name":"Chunk Size","advanced":false,"dynamic":false,"info":""},"separator":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"\"","fileTypes":[],"file_path":"","password":false,"name":"separator","display_name":"Separator","advanced":false,"dynamic":false,"info":""},"_type":"CharacterTextSplitter"},"description":"Splitting text that looks at characters.","base_classes":["Document"],"display_name":"CharacterTextSplitter","documentation":"https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter","custom_fields":{},"output_types":["Document"],"field_formatters":{},"beta":false},"id":"CharacterTextSplitter-WVMFU"},"selected":false,"width":384,"height":501,"positionAbsolute":{"x":-2661.4749778477553,"y":-1608.9437055023366},"dragging":false},{"id":"Chroma-OtYDg","type":"genericNode","position":{"x":-2194.2051907050227,"y":-1370.1637632208287},"data":{"type":"Chroma","node":{"template":{"documents":{"type":"Document","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"documents","display_name":"Documents","advanced":false,"dynamic":false,"info":""},"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":""},"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":""},"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":""},"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":""},"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":""},"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":""},"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, Document\nfrom langchain.vectorstores import Chroma\nfrom langchain.vectorstores.base import VectorStore\n\nfrom langflow import CustomComponent\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 beta: bool = True\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 \"persist\": {\"display_name\": \"Persist\"},\n \"persist_directory\": {\"display_name\": \"Persist Directory\"},\n \"code\": {\"show\": False, \"display_name\": \"Code\"},\n \"documents\": {\"display_name\": \"Documents\", \"is_list\": True},\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 persist: bool,\n embedding: Embeddings,\n chroma_server_ssl_enabled: bool,\n persist_directory: Optional[str] = None,\n documents: Optional[List[Document]] = 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 - persist_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 - persist (bool): Whether to persist the Vector Store or not.\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 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 return Chroma.from_documents(\n documents=documents, # type: ignore\n persist_directory=persist_directory if persist else None,\n collection_name=collection_name,\n embedding=embedding,\n client_settings=chroma_settings,\n )\n\n return Chroma(persist_directory=persist_directory, client_settings=chroma_settings)\n","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":false,"dynamic":true,"info":""},"collection_name":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"video","fileTypes":[],"file_path":"","password":false,"name":"collection_name","display_name":"Collection Name","advanced":false,"dynamic":false,"info":""},"persist":{"type":"bool","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"file_path":"","password":false,"name":"persist","display_name":"Persist","advanced":false,"dynamic":false,"info":""},"persist_directory":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"persist_directory","display_name":"Persist Directory","advanced":false,"dynamic":false,"info":""},"_type":"CustomComponent"},"description":"Implementation of Vector Store using Chroma","base_classes":["VectorStore","BaseRetriever"],"display_name":"Chroma","documentation":"https://python.langchain.com/docs/integrations/vectorstores/chroma","custom_fields":{"chroma_server_cors_allow_origins":null,"chroma_server_grpc_port":null,"chroma_server_host":null,"chroma_server_port":null,"chroma_server_ssl_enabled":null,"collection_name":null,"documents":null,"embedding":null,"persist":null,"persist_directory":null},"output_types":["Chroma"],"field_formatters":{},"beta":true},"id":"Chroma-OtYDg"},"selected":false,"width":384,"height":625,"positionAbsolute":{"x":-2194.2051907050227,"y":-1370.1637632208287},"dragging":false},{"id":"OpenAIEmbeddings-9yqtI","type":"genericNode","position":{"x":-2653.011009324626,"y":-1103.8414515074774},"data":{"type":"OpenAIEmbeddings","node":{"template":{"allowed_special":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":[],"fileTypes":[],"password":false,"name":"allowed_special","advanced":true,"dynamic":false,"info":""},"async_client":{"type":"Any","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"async_client","advanced":true,"dynamic":false,"info":""},"chunk_size":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":1000,"fileTypes":[],"password":false,"name":"chunk_size","advanced":true,"dynamic":false,"info":""},"client":{"type":"Any","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"client","advanced":true,"dynamic":false,"info":""},"default_headers":{"type":"dict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"default_headers","advanced":true,"dynamic":false,"info":""},"default_query":{"type":"dict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"default_query","advanced":true,"dynamic":false,"info":""},"deployment":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"text-embedding-ada-002","fileTypes":[],"password":false,"name":"deployment","advanced":true,"dynamic":false,"info":""},"disallowed_special":{"type":"str","required":false,"placeholder":"","list":true,"show":true,"multiline":false,"value":"all","fileTypes":[],"password":false,"name":"disallowed_special","advanced":true,"dynamic":false,"info":""},"embedding_ctx_length":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":8191,"fileTypes":[],"password":false,"name":"embedding_ctx_length","advanced":true,"dynamic":false,"info":""},"headers":{"type":"Any","required":false,"placeholder":"","list":false,"show":false,"multiline":true,"value":"{\"Authorization\": \"Bearer \"}","fileTypes":[],"password":false,"name":"headers","advanced":true,"dynamic":false,"info":""},"http_client":{"type":"Any","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"http_client","advanced":true,"dynamic":false,"info":""},"max_retries":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":2,"fileTypes":[],"password":false,"name":"max_retries","advanced":true,"dynamic":false,"info":""},"model":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"text-embedding-ada-002","fileTypes":[],"password":false,"name":"model","advanced":true,"dynamic":false,"info":""},"model_kwargs":{"type":"dict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"model_kwargs","advanced":true,"dynamic":false,"info":""},"openai_api_base":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":true,"name":"openai_api_base","display_name":"OpenAI API Base","advanced":true,"dynamic":false,"info":"","value":""},"openai_api_key":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"","fileTypes":[],"password":true,"name":"openai_api_key","display_name":"OpenAI API Key","advanced":false,"dynamic":false,"info":""},"openai_api_type":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":true,"name":"openai_api_type","display_name":"OpenAI API Type","advanced":true,"dynamic":false,"info":"","value":""},"openai_api_version":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":true,"name":"openai_api_version","display_name":"OpenAI API Version","advanced":true,"dynamic":false,"info":"","value":""},"openai_organization":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"openai_organization","display_name":"OpenAI Organization","advanced":true,"dynamic":false,"info":""},"openai_proxy":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"openai_proxy","display_name":"OpenAI Proxy","advanced":true,"dynamic":false,"info":""},"request_timeout":{"type":"float","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"request_timeout","advanced":true,"dynamic":false,"info":"","rangeSpec":{"min":-1,"max":1,"step":0.1}},"retry_max_seconds":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":20,"fileTypes":[],"password":false,"name":"retry_max_seconds","advanced":true,"dynamic":false,"info":""},"retry_min_seconds":{"type":"int","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":4,"fileTypes":[],"password":false,"name":"retry_min_seconds","advanced":true,"dynamic":false,"info":""},"show_progress_bar":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"password":false,"name":"show_progress_bar","advanced":true,"dynamic":false,"info":""},"skip_empty":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":false,"fileTypes":[],"password":false,"name":"skip_empty","advanced":true,"dynamic":false,"info":""},"tiktoken_enabled":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":"","fileTypes":[],"password":true,"name":"tiktoken_enabled","advanced":false,"dynamic":false,"info":""},"tiktoken_model_name":{"type":"str","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":true,"name":"tiktoken_model_name","advanced":false,"dynamic":false,"info":"","value":""},"_type":"OpenAIEmbeddings"},"description":"[*Deprecated*] OpenAI embedding models.","base_classes":["Embeddings","OpenAIEmbeddings"],"display_name":"OpenAIEmbeddings","documentation":"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai","custom_fields":{},"output_types":[],"field_formatters":{},"beta":false},"id":"OpenAIEmbeddings-9yqtI"},"selected":false,"width":384,"height":443,"positionAbsolute":{"x":-2653.011009324626,"y":-1103.8414515074774},"dragging":false},{"id":"RetrievalQA-DpylI","type":"genericNode","position":{"x":-1757.239471200792,"y":-1258.2132589352987},"data":{"type":"RetrievalQA","node":{"template":{"callbacks":{"type":"langchain_core.callbacks.base.BaseCallbackHandler","required":false,"placeholder":"","list":true,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"callbacks","advanced":false,"dynamic":false,"info":""},"combine_documents_chain":{"type":"BaseCombineDocumentsChain","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"combine_documents_chain","advanced":false,"dynamic":false,"info":""},"memory":{"type":"BaseMemory","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"memory","advanced":false,"dynamic":false,"info":""},"retriever":{"type":"BaseRetriever","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"password":false,"name":"retriever","advanced":false,"dynamic":false,"info":""},"input_key":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"query","fileTypes":[],"password":false,"name":"input_key","advanced":true,"dynamic":false,"info":""},"metadata":{"type":"dict","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"metadata","advanced":false,"dynamic":false,"info":""},"name":{"type":"str","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"name","advanced":false,"dynamic":false,"info":""},"output_key":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"result","fileTypes":[],"password":false,"name":"output_key","advanced":true,"dynamic":false,"info":""},"return_source_documents":{"type":"bool","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"value":true,"fileTypes":[],"password":false,"name":"return_source_documents","advanced":true,"dynamic":false,"info":""},"tags":{"type":"str","required":false,"placeholder":"","list":true,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"tags","advanced":false,"dynamic":false,"info":""},"verbose":{"type":"bool","required":false,"placeholder":"","list":false,"show":false,"multiline":false,"fileTypes":[],"password":false,"name":"verbose","advanced":true,"dynamic":false,"info":""},"_type":"RetrievalQA"},"description":"Chain for question-answering against an index.","base_classes":["Chain","RetrievalQA","BaseRetrievalQA","Callable"],"display_name":"RetrievalQA","documentation":"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa","custom_fields":{},"output_types":[],"field_formatters":{},"beta":false},"id":"RetrievalQA-DpylI"},"selected":false,"width":384,"height":339,"positionAbsolute":{"x":-1757.239471200792,"y":-1258.2132589352987},"dragging":true},{"id":"CombineDocsChain-afKOq","type":"genericNode","position":{"x":-1775.9040057312934,"y":-1644.0423777157919},"data":{"type":"CombineDocsChain","node":{"template":{"llm":{"type":"BaseLanguageModel","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"value":"","fileTypes":[],"file_path":"","password":false,"name":"llm","display_name":"LLM","advanced":false,"dynamic":false,"info":""},"chain_type":{"type":"str","required":true,"placeholder":"","list":true,"show":true,"multiline":false,"value":"refine","fileTypes":[],"file_path":"","password":false,"options":["stuff","map_reduce","map_rerank","refine"],"name":"chain_type","advanced":false,"dynamic":false,"info":""},"_type":"load_qa_chain"},"description":"Load question answering chain.","base_classes":["BaseCombineDocumentsChain","Callable"],"display_name":"CombineDocsChain","documentation":"","custom_fields":{},"output_types":[],"field_formatters":{},"beta":false},"id":"CombineDocsChain-afKOq"},"selected":false,"width":384,"height":333,"dragging":false,"positionAbsolute":{"x":-1775.9040057312934,"y":-1644.0423777157919}},{"id":"SearchApi-kZmEj","type":"genericNode","position":{"x":-3074.364183247263,"y":-1782.5742787937606},"data":{"type":"SearchApi","node":{"template":{"api_key":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":true,"name":"api_key","display_name":"API Key","advanced":false,"dynamic":false,"info":"The API key to use SearchApi.","value":""},"code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow import CustomComponent\nfrom langchain.schema import Document\nfrom langflow.services.database.models.base import orjson_dumps\nfrom langchain_community.utilities.searchapi import SearchApiAPIWrapper\nfrom typing import Optional\n\n\nclass SearchApi(CustomComponent):\n display_name: str = \"SearchApi\"\n description: str = \"Real-time search engines API.\"\n output_types: list[str] = [\"Document\"]\n documentation: str = \"https://www.searchapi.io/docs/google\"\n field_config = {\n \"engine\": {\n \"display_name\": \"Engine\",\n \"field_type\": \"str\",\n \"info\": \"The search engine to use.\",\n },\n \"params\": {\n \"display_name\": \"Parameters\",\n \"info\": \"The parameters to send with the request.\",\n },\n \"code\": {\"show\": False},\n \"api_key\": {\n \"display_name\": \"API Key\",\n \"field_type\": \"str\",\n \"required\": True, \n \"password\": True,\n \"info\": \"The API key to use SearchApi.\",\n },\n }\n\n def build(\n self,\n engine: str,\n api_key: str,\n params: Optional[dict] = None,\n ) -> Document:\n if params is None:\n params = {}\n\n search_api_wrapper = SearchApiAPIWrapper(engine=engine, searchapi_api_key=api_key)\n\n query = params.pop(\"query\", \"default query\") \n results = search_api_wrapper.results(query, **params)\n\n result = orjson_dumps(results, indent_2=False)\n \n document = Document(page_content=result) \n\n return document","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":false,"dynamic":true,"info":""},"engine":{"type":"str","required":true,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"engine","display_name":"Engine","advanced":false,"dynamic":false,"info":"The search engine to use.","value":"youtube_transcripts"},"params":{"type":"dict","required":false,"placeholder":"","list":false,"show":true,"multiline":false,"fileTypes":[],"file_path":"","password":false,"name":"params","display_name":"Parameters","advanced":false,"dynamic":false,"info":"The parameters to send with the request.","value":[{"video_id":"krsBRQbOPQ4"}]},"_type":"CustomComponent"},"description":"Real-time search engines API.","base_classes":["Document"],"display_name":"SearchApi","documentation":"https://www.searchapi.io/docs/google","custom_fields":{"api_key":null,"engine":null,"params":null},"output_types":["SearchApi"],"field_formatters":{},"beta":true},"id":"SearchApi-kZmEj"},"selected":false,"width":384,"height":539,"dragging":false,"positionAbsolute":{"x":-3074.364183247263,"y":-1782.5742787937606}}],"edges":[{"source":"CharacterTextSplitter-WVMFU","sourceHandle":"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCharacterTextSplitterœ,œidœ:œCharacterTextSplitter-WVMFUœ}","target":"Chroma-OtYDg","targetHandle":"{œfieldNameœ:œdocumentsœ,œidœ:œChroma-OtYDgœ,œinputTypesœ:null,œtypeœ:œDocumentœ}","data":{"targetHandle":{"fieldName":"documents","id":"Chroma-OtYDg","inputTypes":null,"type":"Document"},"sourceHandle":{"baseClasses":["Document"],"dataType":"CharacterTextSplitter","id":"CharacterTextSplitter-WVMFU"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-CharacterTextSplitter-WVMFU{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCharacterTextSplitterœ,œidœ:œCharacterTextSplitter-WVMFUœ}-Chroma-OtYDg{œfieldNameœ:œdocumentsœ,œidœ:œChroma-OtYDgœ,œinputTypesœ:null,œtypeœ:œDocumentœ}"},{"source":"OpenAIEmbeddings-9yqtI","sourceHandle":"{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-9yqtIœ}","target":"Chroma-OtYDg","targetHandle":"{œfieldNameœ:œembeddingœ,œidœ:œChroma-OtYDgœ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}","data":{"targetHandle":{"fieldName":"embedding","id":"Chroma-OtYDg","inputTypes":null,"type":"Embeddings"},"sourceHandle":{"baseClasses":["Embeddings","OpenAIEmbeddings"],"dataType":"OpenAIEmbeddings","id":"OpenAIEmbeddings-9yqtI"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-OpenAIEmbeddings-9yqtI{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-9yqtIœ}-Chroma-OtYDg{œfieldNameœ:œembeddingœ,œidœ:œChroma-OtYDgœ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}"},{"source":"Chroma-OtYDg","sourceHandle":"{œbaseClassesœ:[œVectorStoreœ,œBaseRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-OtYDgœ}","target":"RetrievalQA-DpylI","targetHandle":"{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-DpylIœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}","data":{"targetHandle":{"fieldName":"retriever","id":"RetrievalQA-DpylI","inputTypes":null,"type":"BaseRetriever"},"sourceHandle":{"baseClasses":["VectorStore","BaseRetriever"],"dataType":"Chroma","id":"Chroma-OtYDg"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-Chroma-OtYDg{œbaseClassesœ:[œVectorStoreœ,œBaseRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-OtYDgœ}-RetrievalQA-DpylI{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-DpylIœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}"},{"source":"ChatOpenAI-4Mfuz","sourceHandle":"{œbaseClassesœ:[œBaseLanguageModelœ,œBaseChatModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-4Mfuzœ}","target":"CombineDocsChain-afKOq","targetHandle":"{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-afKOqœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}","data":{"targetHandle":{"fieldName":"llm","id":"CombineDocsChain-afKOq","inputTypes":null,"type":"BaseLanguageModel"},"sourceHandle":{"baseClasses":["BaseLanguageModel","BaseChatModel","ChatOpenAI","BaseLLM"],"dataType":"ChatOpenAI","id":"ChatOpenAI-4Mfuz"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-ChatOpenAI-4Mfuz{œbaseClassesœ:[œBaseLanguageModelœ,œBaseChatModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-4Mfuzœ}-CombineDocsChain-afKOq{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-afKOqœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}"},{"source":"CombineDocsChain-afKOq","sourceHandle":"{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œCallableœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-afKOqœ}","target":"RetrievalQA-DpylI","targetHandle":"{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-DpylIœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}","data":{"targetHandle":{"fieldName":"combine_documents_chain","id":"RetrievalQA-DpylI","inputTypes":null,"type":"BaseCombineDocumentsChain"},"sourceHandle":{"baseClasses":["BaseCombineDocumentsChain","Callable"],"dataType":"CombineDocsChain","id":"CombineDocsChain-afKOq"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-CombineDocsChain-afKOq{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œCallableœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-afKOqœ}-RetrievalQA-DpylI{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-DpylIœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}"},{"source":"SearchApi-kZmEj","sourceHandle":"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œSearchApiœ,œidœ:œSearchApi-kZmEjœ}","target":"CharacterTextSplitter-WVMFU","targetHandle":"{œfieldNameœ:œdocumentsœ,œidœ:œCharacterTextSplitter-WVMFUœ,œinputTypesœ:null,œtypeœ:œDocumentœ}","data":{"targetHandle":{"fieldName":"documents","id":"CharacterTextSplitter-WVMFU","inputTypes":null,"type":"Document"},"sourceHandle":{"baseClasses":["Document"],"dataType":"SearchApi","id":"SearchApi-kZmEj"}},"style":{"stroke":"#555"},"className":"stroke-gray-900 stroke-connection","animated":false,"id":"reactflow__edge-SearchApi-kZmEj{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œSearchApiœ,œidœ:œSearchApi-kZmEjœ}-CharacterTextSplitter-WVMFU{œfieldNameœ:œdocumentsœ,œidœ:œCharacterTextSplitter-WVMFUœ,œinputTypesœ:null,œtypeœ:œDocumentœ}"}],"viewport":{"x":2046.3642433866817,"y":1270.2852546488134,"zoom":0.6177254407441625}},"description":"Real-time Google Search engine q&a.","name":"SearchApi Tool","last_tested_version":"0.6.5a9","is_component":false} \ No newline at end of file diff --git a/docs/static/videos/langflow_api.mp4 b/docs/static/videos/langflow_api.mp4 index 7bb270f6b..f0daa5266 100644 Binary files a/docs/static/videos/langflow_api.mp4 and b/docs/static/videos/langflow_api.mp4 differ diff --git a/docs/static/videos/langflow_build.mp4 b/docs/static/videos/langflow_build.mp4 index fffd21aec..9d068fa01 100644 Binary files a/docs/static/videos/langflow_build.mp4 and b/docs/static/videos/langflow_build.mp4 differ diff --git a/docs/static/videos/langflow_collection.mp4 b/docs/static/videos/langflow_collection.mp4 index f240d1be0..69d172776 100644 Binary files a/docs/static/videos/langflow_collection.mp4 and b/docs/static/videos/langflow_collection.mp4 differ diff --git a/docs/static/videos/langflow_collection_example.mp4 b/docs/static/videos/langflow_collection_example.mp4 index 31cc94961..e58ea31e4 100644 Binary files a/docs/static/videos/langflow_collection_example.mp4 and b/docs/static/videos/langflow_collection_example.mp4 differ diff --git a/docs/static/videos/langflow_fork.mp4 b/docs/static/videos/langflow_fork.mp4 index c9b75bc23..03c280c35 100644 Binary files a/docs/static/videos/langflow_fork.mp4 and b/docs/static/videos/langflow_fork.mp4 differ diff --git a/docs/static/videos/langflow_parameters.mp4 b/docs/static/videos/langflow_parameters.mp4 index c7599e649..370ca5f36 100644 Binary files a/docs/static/videos/langflow_parameters.mp4 and b/docs/static/videos/langflow_parameters.mp4 differ diff --git a/docs/static/videos/langflow_widget.mp4 b/docs/static/videos/langflow_widget.mp4 index d5514a948..7894316f7 100644 Binary files a/docs/static/videos/langflow_widget.mp4 and b/docs/static/videos/langflow_widget.mp4 differ diff --git a/img/langflow-demo.gif b/img/langflow-demo.gif deleted file mode 100644 index 4cea58628..000000000 Binary files a/img/langflow-demo.gif and /dev/null differ diff --git a/img/langflow-screen.png b/img/langflow-screen.png deleted file mode 100644 index 49ef0b053..000000000 Binary files a/img/langflow-screen.png and /dev/null differ diff --git a/poetry.lock b/poetry.lock index 5aae08745..2ec2d889e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -418,17 +418,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.47" +version = "1.34.52" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.8" files = [ - {file = "boto3-1.34.47-py3-none-any.whl", hash = "sha256:1de708665cbf156e76ca67e376d6cabc5f9a06d7213f925a510cb818a15340a6"}, - {file = "boto3-1.34.47.tar.gz", hash = "sha256:7574afd70c767fdbb19726565a67b47291e1e35ec792c9fbb8ee63cb3f630d45"}, + {file = "boto3-1.34.52-py3-none-any.whl", hash = "sha256:898ad2123b18cae8efd85adc56ac2d1925be54592aebc237020d4f16e9a9e7a9"}, + {file = "boto3-1.34.52.tar.gz", hash = "sha256:66303b5f26d92afb72656ff490b22ea72dfff8bf1a29e4a0c5d5f11ec56245dd"}, ] [package.dependencies] -botocore = ">=1.34.47,<1.35.0" +botocore = ">=1.34.52,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -437,13 +437,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.47" +version = "1.34.52" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.8" files = [ - {file = "botocore-1.34.47-py3-none-any.whl", hash = "sha256:8f0c989d12cfceb06b005808492ec1ff6ae90fab1fc4bf7ac8e825ac86bc8a0b"}, - {file = "botocore-1.34.47.tar.gz", hash = "sha256:29f1d6659602c5d79749eca7430857f7a48dd02e597d0ea4a95a83c47847993e"}, + {file = "botocore-1.34.52-py3-none-any.whl", hash = "sha256:05567d8aba344826060481ea309555432c96f0febe22bee7cf5a3b6d3a03cec8"}, + {file = "botocore-1.34.52.tar.gz", hash = "sha256:187da93aec3f2e87d8a31eced16fa2cb9c71fe2d69b0a797f9f7a9220f5bf7ae"}, ] [package.dependencies] @@ -549,6 +549,20 @@ files = [ {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, ] +[[package]] +name = "bs4" +version = "0.0.2" +description = "Dummy package for Beautiful Soup (beautifulsoup4)" +optional = false +python-versions = "*" +files = [ + {file = "bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc"}, + {file = "bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925"}, +] + +[package.dependencies] +beautifulsoup4 = "*" + [[package]] name = "build" version = "1.0.3" @@ -575,13 +589,13 @@ virtualenv = ["virtualenv (>=20.0.35)"] [[package]] name = "cachetools" -version = "5.3.2" +version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, - {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, ] [[package]] @@ -875,13 +889,13 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.4.22" +version = "0.4.24" description = "Chroma." optional = false python-versions = ">=3.8" files = [ - {file = "chromadb-0.4.22-py3-none-any.whl", hash = "sha256:ad210b27b4cda2f09d15adc9c83c81bfa66b69f39648a27b637306e40de0680d"}, - {file = "chromadb-0.4.22.tar.gz", hash = "sha256:c793149e1c2bbbb52d77602c6c0594c5752f04cd9be12619250ddad2082af27a"}, + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, ] [package.dependencies] @@ -899,6 +913,7 @@ opentelemetry-api = ">=1.2.0" opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" opentelemetry-instrumentation-fastapi = ">=0.41b0" opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" overrides = ">=7.3.1" posthog = ">=2.4.0" pulsar-client = ">=3.1.0" @@ -978,13 +993,13 @@ testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] [[package]] name = "cohere" -version = "4.48" +version = "4.51" description = "Python SDK for the Cohere API" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "cohere-4.48-py3-none-any.whl", hash = "sha256:d8a84900533725e62c536a73426e367cd97cde464e34d39bd2cf7fd18f3e319d"}, - {file = "cohere-4.48.tar.gz", hash = "sha256:874578aad8c67d5b73f4705cf03341d94f302012288190613a6b1ed2fac3e010"}, + {file = "cohere-4.51-py3-none-any.whl", hash = "sha256:71193475ba08b00244bcc6de0e4fa1de869eaa82d6a00e04ab07f64429498268"}, + {file = "cohere-4.51.tar.gz", hash = "sha256:01fb092ea9038dd4fb360efb3506fad2451ed231cb6774e324b993c9374a550a"}, ] [package.dependencies] @@ -1078,63 +1093,63 @@ yaml = ["PyYAML"] [[package]] name = "coverage" -version = "7.4.2" +version = "7.4.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3e089179d9d23900e3efc86d46e4431188d9a657f345410eecdd0151f50"}, - {file = "coverage-7.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe6e43c8b510719b48af7db9631b5fbac910ade4bd90e6378c85ac5ac706382c"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b98c89db1b150d851a7840142d60d01d07677a18f0f46836e691c38134ed18b"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f9683be6a5b19cd776ee4e2f2ffb411424819c69afab6b2db3a0a364ec6642"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cdcbf7b9cb83fe047ee09298e25b1cd1636824067166dc97ad0543b079d22f"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2599972b21911111114100d362aea9e70a88b258400672626efa2b9e2179609c"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef00d31b7569ed3cb2036f26565f1984b9fc08541731ce01012b02a4c238bf03"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:20a875bfd8c282985c4720c32aa05056f77a68e6d8bbc5fe8632c5860ee0b49b"}, - {file = "coverage-7.4.2-cp310-cp310-win32.whl", hash = "sha256:b3f2b1eb229f23c82898eedfc3296137cf1f16bb145ceab3edfd17cbde273fb7"}, - {file = "coverage-7.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7df95fdd1432a5d2675ce630fef5f239939e2b3610fe2f2b5bf21fa505256fa3"}, - {file = "coverage-7.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8ddbd158e069dded57738ea69b9744525181e99974c899b39f75b2b29a624e2"}, - {file = "coverage-7.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81a5fb41b0d24447a47543b749adc34d45a2cf77b48ca74e5bf3de60a7bd9edc"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2412e98e70f16243be41d20836abd5f3f32edef07cbf8f407f1b6e1ceae783ac"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb79414c15c6f03f56cc68fa06994f047cf20207c31b5dad3f6bab54a0f66ef"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf89ab85027427d351f1de918aff4b43f4eb5f33aff6835ed30322a86ac29c9e"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a178b7b1ac0f1530bb28d2e51f88c0bab3e5949835851a60dda80bff6052510c"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:06fe398145a2e91edaf1ab4eee66149c6776c6b25b136f4a86fcbbb09512fd10"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:18cac867950943fe93d6cd56a67eb7dcd2d4a781a40f4c1e25d6f1ed98721a55"}, - {file = "coverage-7.4.2-cp311-cp311-win32.whl", hash = "sha256:f72cdd2586f9a769570d4b5714a3837b3a59a53b096bb954f1811f6a0afad305"}, - {file = "coverage-7.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:d779a48fac416387dd5673fc5b2d6bd903ed903faaa3247dc1865c65eaa5a93e"}, - {file = "coverage-7.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:adbdfcda2469d188d79771d5696dc54fab98a16d2ef7e0875013b5f56a251047"}, - {file = "coverage-7.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ac4bab32f396b03ebecfcf2971668da9275b3bb5f81b3b6ba96622f4ef3f6e17"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:006d220ba2e1a45f1de083d5022d4955abb0aedd78904cd5a779b955b019ec73"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3733545eb294e5ad274abe131d1e7e7de4ba17a144505c12feca48803fea5f64"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a9e754aa250fe61f0f99986399cec086d7e7a01dd82fd863a20af34cbce962"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2ed37e16cf35c8d6e0b430254574b8edd242a367a1b1531bd1adc99c6a5e00fe"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b953275d4edfab6cc0ed7139fa773dfb89e81fee1569a932f6020ce7c6da0e8f"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32b4ab7e6c924f945cbae5392832e93e4ceb81483fd6dc4aa8fb1a97b9d3e0e1"}, - {file = "coverage-7.4.2-cp312-cp312-win32.whl", hash = "sha256:f5df76c58977bc35a49515b2fbba84a1d952ff0ec784a4070334dfbec28a2def"}, - {file = "coverage-7.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:34423abbaad70fea9d0164add189eabaea679068ebdf693baa5c02d03e7db244"}, - {file = "coverage-7.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b11f9c6587668e495cc7365f85c93bed34c3a81f9f08b0920b87a89acc13469"}, - {file = "coverage-7.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:51593a1f05c39332f623d64d910445fdec3d2ac2d96b37ce7f331882d5678ddf"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69f1665165ba2fe7614e2f0c1aed71e14d83510bf67e2ee13df467d1c08bf1e8"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3c8bbb95a699c80a167478478efe5e09ad31680931ec280bf2087905e3b95ec"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:175f56572f25e1e1201d2b3e07b71ca4d201bf0b9cb8fad3f1dfae6a4188de86"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8562ca91e8c40864942615b1d0b12289d3e745e6b2da901d133f52f2d510a1e3"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d9a1ef0f173e1a19738f154fb3644f90d0ada56fe6c9b422f992b04266c55d5a"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f40ac873045db4fd98a6f40387d242bde2708a3f8167bd967ccd43ad46394ba2"}, - {file = "coverage-7.4.2-cp38-cp38-win32.whl", hash = "sha256:d1b750a8409bec61caa7824bfd64a8074b6d2d420433f64c161a8335796c7c6b"}, - {file = "coverage-7.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b4ae777bebaed89e3a7e80c4a03fac434a98a8abb5251b2a957d38fe3fd30088"}, - {file = "coverage-7.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ff7f92ae5a456101ca8f48387fd3c56eb96353588e686286f50633a611afc95"}, - {file = "coverage-7.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:861d75402269ffda0b33af94694b8e0703563116b04c681b1832903fac8fd647"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3507427d83fa961cbd73f11140f4a5ce84208d31756f7238d6257b2d3d868405"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf711d517e21fb5bc429f5c4308fbc430a8585ff2a43e88540264ae87871e36a"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c00e54f0bd258ab25e7f731ca1d5144b0bf7bec0051abccd2bdcff65fa3262c9"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8e845d894e39fb53834da826078f6dc1a933b32b1478cf437007367efaf6f6a"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:840456cb1067dc350af9080298c7c2cfdddcedc1cb1e0b30dceecdaf7be1a2d3"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c11ca2df2206a4e3e4c4567f52594637392ed05d7c7fb73b4ea1c658ba560265"}, - {file = "coverage-7.4.2-cp39-cp39-win32.whl", hash = "sha256:3ff5bdb08d8938d336ce4088ca1a1e4b6c8cd3bef8bb3a4c0eb2f37406e49643"}, - {file = "coverage-7.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:ac9e95cefcf044c98d4e2c829cd0669918585755dd9a92e28a1a7012322d0a95"}, - {file = "coverage-7.4.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:f593a4a90118d99014517c2679e04a4ef5aee2d81aa05c26c734d271065efcb6"}, - {file = "coverage-7.4.2.tar.gz", hash = "sha256:1a5ee18e3a8d766075ce9314ed1cb695414bae67df6a4b0805f5137d93d6f1cb"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, + {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, + {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, + {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, + {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, + {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, + {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, + {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, + {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, + {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, + {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, + {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, + {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, ] [package.dependencies] @@ -1145,43 +1160,43 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.4" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"}, - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"}, - {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"}, - {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"}, - {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"}, - {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"}, - {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"}, - {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, ] [package.dependencies] @@ -2253,13 +2268,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.118.0" +version = "2.120.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.118.0.tar.gz", hash = "sha256:ebf4927a3f5184096647be8f705d090e7f06d48ad82b0fa431a2fe80c2cbe182"}, - {file = "google_api_python_client-2.118.0-py2.py3-none-any.whl", hash = "sha256:9d83b178496b180e058fd206ebfb70ea1afab49f235dd326f557513f56f496d5"}, + {file = "google-api-python-client-2.120.0.tar.gz", hash = "sha256:a0c8769cad9576768bcb3191cb1f550f6ab3290cba042badb0fb17bba03f70cc"}, + {file = "google_api_python_client-2.120.0-py2.py3-none-any.whl", hash = "sha256:e2cdf4497bfc758fb44a4b487920cc1ca0571c2428187697a8e43e3b9feba1c9"}, ] [package.dependencies] @@ -2360,13 +2375,13 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "gotrue" -version = "2.1.0" +version = "2.4.1" description = "Python Client Library for GoTrue" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "gotrue-2.1.0-py3-none-any.whl", hash = "sha256:6483d9a3ac9be1d1ad510be24171e133aa1cec702cc10a8f323b9e7519642447"}, - {file = "gotrue-2.1.0.tar.gz", hash = "sha256:b21d48ee64f0f6a1ed111efe4871a83e542529f1a75a264833b50e6433cd3c98"}, + {file = "gotrue-2.4.1-py3-none-any.whl", hash = "sha256:9647bb7a585c969d26667df21168fa20b18f91c5d6afe286af08d7a0610fd2cc"}, + {file = "gotrue-2.4.1.tar.gz", hash = "sha256:8b260ef285f45a3a2f9b5a006f12afb9fad7a36a28fa277f19e733f22eb88584"}, ] [package.dependencies] @@ -2863,13 +2878,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.1.1" +version = "6.1.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-6.1.2-py3-none-any.whl", hash = "sha256:9a0a862501dc38b68adebc82970140c9e4209fc99601782925178f8386339938"}, + {file = "importlib_resources-6.1.2.tar.gz", hash = "sha256:308abf8474e2dba5f867d279237cd4076482c3de7104a40b41426370e891549b"}, ] [package.dependencies] @@ -2877,7 +2892,7 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -2892,13 +2907,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.2" +version = "6.29.3" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.2-py3-none-any.whl", hash = "sha256:50384f5c577a260a1d53f1f59a828c7266d321c9b7d00d345693783f66616055"}, - {file = "ipykernel-6.29.2.tar.gz", hash = "sha256:3bade28004e3ff624ed57974948116670604ac5f676d12339693f3142176d3f0"}, + {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, + {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, ] [package.dependencies] @@ -2921,7 +2936,7 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.4)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -3075,7 +3090,6 @@ files = [ {file = "jq-1.6.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:227b178b22a7f91ae88525810441791b1ca1fc71c86f03190911793be15cec3d"}, {file = "jq-1.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:780eb6383fbae12afa819ef676fc93e1548ae4b076c004a393af26a04b460742"}, {file = "jq-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08ded6467f4ef89fec35b2bf310f210f8cd13fbd9d80e521500889edf8d22441"}, - {file = "jq-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49e44ed677713f4115bd5bf2dbae23baa4cd503be350e12a1c1f506b0687848f"}, {file = "jq-1.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:984f33862af285ad3e41e23179ac4795f1701822473e1a26bf87ff023e5a89ea"}, {file = "jq-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42264fafc6166efb5611b5d4cb01058887d050a6c19334f6a3f8a13bb369df5"}, {file = "jq-1.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a67154f150aaf76cc1294032ed588436eb002097dd4fd1e283824bf753a05080"}, @@ -3252,13 +3266,13 @@ adal = ["adal (>=1.0.2)"] [[package]] name = "langchain" -version = "0.1.8" +version = "0.1.9" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain-0.1.8-py3-none-any.whl", hash = "sha256:19e951b0e2be099ff048ee483acecb47e1a39c33a47dadfee70fcfa20f45cc19"}, - {file = "langchain-0.1.8.tar.gz", hash = "sha256:c8b1c2954a07cd6422c9027459473bafae90c78f07015bf2fc6262fadf97ea44"}, + {file = "langchain-0.1.9-py3-none-any.whl", hash = "sha256:1436a9f4e498bb9f8e01e0ab8d185771d49c0fc96b3d2da4d5bed5055015746f"}, + {file = "langchain-0.1.9.tar.gz", hash = "sha256:da1f89aeaf5cbc225eb1d6523af0f273c062fdc40a76ec455486c3c184f741b1"}, ] [package.dependencies] @@ -3267,7 +3281,7 @@ async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\ dataclasses-json = ">=0.5.7,<0.7" jsonpatch = ">=1.33,<2.0" langchain-community = ">=0.0.21,<0.1" -langchain-core = ">=0.1.24,<0.2" +langchain-core = ">=0.1.26,<0.2" langsmith = ">=0.1.0,<0.2.0" numpy = ">=1,<2" pydantic = ">=1,<3" @@ -3292,19 +3306,19 @@ text-helpers = ["chardet (>=5.1.0,<6.0.0)"] [[package]] name = "langchain-community" -version = "0.0.21" +version = "0.0.24" description = "Community contributed LangChain integrations." optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain_community-0.0.21-py3-none-any.whl", hash = "sha256:120977485d244eb472ad3618a31222fe6c2bce08026f4caa96bd6dae2e316ac0"}, - {file = "langchain_community-0.0.21.tar.gz", hash = "sha256:1c310a7e2663d5f6464a433981504894f97c12783cbeb8bdf4159a574f88c18d"}, + {file = "langchain_community-0.0.24-py3-none-any.whl", hash = "sha256:575e776817d6f5e3dfdff0230049de342e06aaa60fb1924316cf82b4e710fe84"}, + {file = "langchain_community-0.0.24.tar.gz", hash = "sha256:fd609f6c962cca4b7b75f2159f1fbf74b14fdd45011ee2be53e95db4e678837f"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" dataclasses-json = ">=0.5.7,<0.7" -langchain-core = ">=0.1.24,<0.2" +langchain-core = ">=0.1.26,<0.2" langsmith = ">=0.1.0,<0.2.0" numpy = ">=1,<2" PyYAML = ">=5.3" @@ -3318,13 +3332,13 @@ extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15. [[package]] name = "langchain-core" -version = "0.1.25" +version = "0.1.27" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain_core-0.1.25-py3-none-any.whl", hash = "sha256:ff0a0ad1ed877878e7b9c7601870cd12145abf3c814aae41995968d05ea6c09d"}, - {file = "langchain_core-0.1.25.tar.gz", hash = "sha256:065ff8b4e383c5645d175b20ae44b258330ed06457b0fc0179efee310b6f2af6"}, + {file = "langchain_core-0.1.27-py3-none-any.whl", hash = "sha256:68eb89dc4a932baf4fb6b4b75b7119eec9e5405e892d2137e9fe0a1d24a40d0c"}, + {file = "langchain_core-0.1.27.tar.gz", hash = "sha256:698414223525c0bc130d85a614e1493905d588ab72fe0c9ad3b537b1dc62067f"}, ] [package.dependencies] @@ -3342,18 +3356,18 @@ extended-testing = ["jinja2 (>=3,<4)"] [[package]] name = "langchain-experimental" -version = "0.0.52" +version = "0.0.53" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain_experimental-0.0.52-py3-none-any.whl", hash = "sha256:30bc6f4aba3ceef75a29b92d775110bbfeb35a7ddb50555fa3b09d4acbf20caa"}, - {file = "langchain_experimental-0.0.52.tar.gz", hash = "sha256:c8f896d8b9fec363038c9a7f0acb16d0b69d0ed31134eed79ea9c31fd5569256"}, + {file = "langchain_experimental-0.0.53-py3-none-any.whl", hash = "sha256:0e086d163891c7781f61d01739e37a7230fd68dfd73a12e81aa4506f82338956"}, + {file = "langchain_experimental-0.0.53.tar.gz", hash = "sha256:f8c1df800e70e7f8d7b969d2bf4c0188d183036a8707105ba469e25f44ec7b2f"}, ] [package.dependencies] langchain = ">=0.1.8,<0.2.0" -langchain-core = ">=0.1.24,<0.2.0" +langchain-core = ">=0.1.27,<0.2.0" [package.extras] extended-testing = ["faker (>=19.3.1,<20.0.0)", "jinja2 (>=3,<4)", "pandas (>=2.0.1,<3.0.0)", "presidio-analyzer (>=2.2.352,<3.0.0)", "presidio-anonymizer (>=2.2.352,<3.0.0)", "sentence-transformers (>=2,<3)", "tabulate (>=0.9.0,<0.10.0)", "vowpal-wabbit-next (==0.6.0)"] @@ -3409,40 +3423,41 @@ six = "*" [[package]] name = "langfuse" -version = "2.16.2" +version = "2.19.0" description = "A client library for accessing langfuse" optional = false -python-versions = ">=3.8.1,<3.13" +python-versions = ">=3.8.1,<4.0" files = [ - {file = "langfuse-2.16.2-py3-none-any.whl", hash = "sha256:6aa6911a9fb9cb1a9ffc67c9afb88e741ff95888ca711b03278e49b73a36adb1"}, - {file = "langfuse-2.16.2.tar.gz", hash = "sha256:17bec8a86497a836a75fd87aeebd8d333800570b5988eae71d72d1d99fe22431"}, + {file = "langfuse-2.19.0-py3-none-any.whl", hash = "sha256:33c8833e4a6b55ef2b2f3342f861a3c9960155da26554bc7eb2fd1bfeb5bea4f"}, + {file = "langfuse-2.19.0.tar.gz", hash = "sha256:a445b90b9047754d6a0f0fa0fbb93a191bdce48ba7a685798d0d92fc45f625c6"}, ] [package.dependencies] backoff = ">=2.2.1,<3.0.0" chevron = ">=0.14.0,<0.15.0" -httpx = ">=0.15.4,<0.26.0" +httpx = ">=0.15.4,<1.0" openai = ">=0.27.8" packaging = ">=23.2,<24.0" pydantic = ">=1.10.7,<3.0" -wrapt = "1.14" +wrapt = ">=1.14,<2.0" [package.extras] langchain = ["langchain (>=0.0.309)"] -llama-index = ["llama-index (>=0.10.6,<0.11.0)"] +llama-index = ["llama-index (>=0.10.12,<0.11.0)"] [[package]] name = "langsmith" -version = "0.1.5" +version = "0.1.10" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langsmith-0.1.5-py3-none-any.whl", hash = "sha256:a1811821a923d90e53bcbacdd0988c3c366aff8f4c120d8777e7af8ecda06268"}, - {file = "langsmith-0.1.5.tar.gz", hash = "sha256:aa7a2861aa3d9ae563a077c622953533800466c4e2e539b0d567b84d5fd5b157"}, + {file = "langsmith-0.1.10-py3-none-any.whl", hash = "sha256:2997a80aea60ed235d83502a7ccdc1f62ffb4dd6b3b7dd4218e8fa4de68a6725"}, + {file = "langsmith-0.1.10.tar.gz", hash = "sha256:13e7e8b52e694aa4003370cefbb9e79cce3540c65dbf1517902bf7aa4dbbb653"}, ] [package.dependencies] +orjson = ">=3.9.14,<4.0.0" pydantic = ">=1,<3" requests = ">=2,<3" @@ -3465,12 +3480,12 @@ regex = ["regex"] [[package]] name = "llama-cpp-python" -version = "0.2.47" +version = "0.2.53" description = "Python bindings for the llama.cpp library" optional = true python-versions = ">=3.8" files = [ - {file = "llama_cpp_python-0.2.47.tar.gz", hash = "sha256:cd1a46a70ec2d4be4c3b063e6824f8481790bd5081e934c9a85f534738d3cf62"}, + {file = "llama_cpp_python-0.2.53.tar.gz", hash = "sha256:f7ff8eda538ca6c80521a8bbf80d3ef4527ecb28f6d08fa9b3bb1f0cfc3b684e"}, ] [package.dependencies] @@ -3487,13 +3502,142 @@ test = ["httpx (>=0.24.1)", "pytest (>=7.4.0)", "scipy (>=1.10)"] [[package]] name = "llama-index" +version = "0.10.14" +description = "Interface between LLMs and your data" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index-0.10.14-py3-none-any.whl", hash = "sha256:31883c563b1a8d296910c2d5fa054ebc60539064d5dcac25114e4bb9749883e5"}, + {file = "llama_index-0.10.14.tar.gz", hash = "sha256:bfc25753ea0c3c59918b4f5925cb470a478b3b0da083a45c48f1992ab16a695f"}, +] + +[package.dependencies] +llama-index-agent-openai = ">=0.1.4,<0.2.0" +llama-index-cli = ">=0.1.2,<0.2.0" +llama-index-core = ">=0.10.14,<0.11.0" +llama-index-embeddings-openai = ">=0.1.5,<0.2.0" +llama-index-indices-managed-llama-cloud = ">=0.1.2,<0.2.0" +llama-index-legacy = ">=0.9.48,<0.10.0" +llama-index-llms-openai = ">=0.1.5,<0.2.0" +llama-index-multi-modal-llms-openai = ">=0.1.3,<0.2.0" +llama-index-program-openai = ">=0.1.3,<0.2.0" +llama-index-question-gen-openai = ">=0.1.2,<0.2.0" +llama-index-readers-file = ">=0.1.4,<0.2.0" +llama-index-readers-llama-parse = ">=0.1.2,<0.2.0" + +[[package]] +name = "llama-index-agent-openai" +version = "0.1.5" +description = "llama-index agent openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_agent_openai-0.1.5-py3-none-any.whl", hash = "sha256:1ab06fe853d9d391ba724dcb0009b249ae88ca4de4b5842226373b0c55ee435a"}, + {file = "llama_index_agent_openai-0.1.5.tar.gz", hash = "sha256:42099326d526af140493c5f744ef70bef0aed8a941b6c9aea4b3eff9c63f0ba6"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.1,<0.11.0" +llama-index-llms-openai = ">=0.1.5,<0.2.0" + +[[package]] +name = "llama-index-cli" +version = "0.1.6" +description = "llama-index cli" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_cli-0.1.6-py3-none-any.whl", hash = "sha256:403c1b0be437d5fa3ca677dbc61dcebbf095ad4daf565fcc0f9db28e94be5df1"}, + {file = "llama_index_cli-0.1.6.tar.gz", hash = "sha256:bf94e6c61ab75240dbe59b867b9b3e4788b0f66b2cb1c2efb18320735a0bf612"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.11.post1,<0.11.0" +llama-index-embeddings-openai = ">=0.1.1,<0.2.0" +llama-index-llms-openai = ">=0.1.1,<0.2.0" +llama-index-vector-stores-chroma = ">=0.1.1,<0.2.0" + +[[package]] +name = "llama-index-core" +version = "0.10.14" +description = "Interface between LLMs and your data" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_core-0.10.14-py3-none-any.whl", hash = "sha256:52e99ae101a32b2894477e49a0c4bc93de721a71d598fea61e4d9e8e68a35633"}, + {file = "llama_index_core-0.10.14.tar.gz", hash = "sha256:db6c66948c51751545a73bb3acecfe401649e05296d8865d71d22bcb5a1e55e7"}, +] + +[package.dependencies] +aiohttp = ">=3.8.6,<4.0.0" +dataclasses-json = "*" +deprecated = ">=1.2.9.3" +dirtyjson = ">=1.0.8,<2.0.0" +fsspec = ">=2023.5.0" +httpx = "*" +llamaindex-py-client = ">=0.1.13,<0.2.0" +nest-asyncio = ">=1.5.8,<2.0.0" +networkx = ">=3.0" +nltk = ">=3.8.1,<4.0.0" +numpy = "*" +openai = ">=1.1.0" +pandas = "*" +pillow = ">=9.0.0" +PyYAML = ">=6.0.1" +requests = ">=2.31.0" +SQLAlchemy = {version = ">=1.4.49", extras = ["asyncio"]} +tenacity = ">=8.2.0,<9.0.0" +tiktoken = ">=0.3.3" +tqdm = ">=4.66.1,<5.0.0" +typing-extensions = ">=4.5.0" +typing-inspect = ">=0.8.0" + +[package.extras] +gradientai = ["gradientai (>=1.4.0)"] +html = ["beautifulsoup4 (>=4.12.2,<5.0.0)"] +langchain = ["langchain (>=0.0.303)"] +local-models = ["optimum[onnxruntime] (>=1.13.2,<2.0.0)", "sentencepiece (>=0.1.99,<0.2.0)", "transformers[torch] (>=4.33.1,<5.0.0)"] +postgres = ["asyncpg (>=0.28.0,<0.29.0)", "pgvector (>=0.1.0,<0.2.0)", "psycopg2-binary (>=2.9.9,<3.0.0)"] +query-tools = ["guidance (>=0.0.64,<0.0.65)", "jsonpath-ng (>=1.6.0,<2.0.0)", "lm-format-enforcer (>=0.4.3,<0.5.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "scikit-learn", "spacy (>=3.7.1,<4.0.0)"] + +[[package]] +name = "llama-index-embeddings-openai" +version = "0.1.6" +description = "llama-index embeddings openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_embeddings_openai-0.1.6-py3-none-any.whl", hash = "sha256:f8b2dded0718e9f57c08ce352d186941e6acf7de414c64219210b66f7a6d6d2d"}, + {file = "llama_index_embeddings_openai-0.1.6.tar.gz", hash = "sha256:f12f0ef6f92211efe1a022a97bb68fc8731c93bd20df3b0567dba69c610033db"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.1,<0.11.0" + +[[package]] +name = "llama-index-indices-managed-llama-cloud" +version = "0.1.3" +description = "llama-index indices llama-cloud integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_indices_managed_llama_cloud-0.1.3-py3-none-any.whl", hash = "sha256:9fe2823855f00bf8b091be008ce953b9a9c5d4b2d976b54ab0d37877c83457f5"}, + {file = "llama_index_indices_managed_llama_cloud-0.1.3.tar.gz", hash = "sha256:5db725cb7db675019dc65e38153890802e2ae89838c127c19d3184efc46ea28b"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.0,<0.11.0" +llamaindex-py-client = ">=0.1.13,<0.2.0" + +[[package]] +name = "llama-index-legacy" version = "0.9.48" description = "Interface between LLMs and your data" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "llama_index-0.9.48-py3-none-any.whl", hash = "sha256:56aa406d39e7ca53a5d990b55d69901fbb9eddc9af6a40950367dc5d734f6283"}, - {file = "llama_index-0.9.48.tar.gz", hash = "sha256:c50d02ac8c7e4ff9fb41f0860391fe0020ad8a3d7c30048db52d17d8be654bf3"}, + {file = "llama_index_legacy-0.9.48-py3-none-any.whl", hash = "sha256:714ada95beac179b4acefa4d2deff74bb7b2f22b0f699ac247d4cb67738d16d4"}, + {file = "llama_index_legacy-0.9.48.tar.gz", hash = "sha256:82ddc4691edbf49533d65582c249ba22c03fe96fbd3e92f7758dccef28e43834"}, ] [package.dependencies] @@ -3524,15 +3668,155 @@ local-models = ["optimum[onnxruntime] (>=1.13.2,<2.0.0)", "sentencepiece (>=0.1. postgres = ["asyncpg (>=0.28.0,<0.29.0)", "pgvector (>=0.1.0,<0.2.0)", "psycopg2-binary (>=2.9.9,<3.0.0)"] query-tools = ["guidance (>=0.0.64,<0.0.65)", "jsonpath-ng (>=1.6.0,<2.0.0)", "lm-format-enforcer (>=0.4.3,<0.5.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "scikit-learn", "spacy (>=3.7.1,<4.0.0)"] +[[package]] +name = "llama-index-llms-openai" +version = "0.1.6" +description = "llama-index llms openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_llms_openai-0.1.6-py3-none-any.whl", hash = "sha256:4260ad31c3444e97ec8a8d061cb6dbf1074262b82341a2b69d2b27e8a23efe62"}, + {file = "llama_index_llms_openai-0.1.6.tar.gz", hash = "sha256:15530dfa3893b15c5576ebc71e01b77acbf47abd689219436fdf7b6ca567a9fd"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.1,<0.11.0" + +[[package]] +name = "llama-index-multi-modal-llms-openai" +version = "0.1.4" +description = "llama-index multi-modal-llms openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_multi_modal_llms_openai-0.1.4-py3-none-any.whl", hash = "sha256:03b887d110551d5d5b99b9fd110824e6311f2e31f4d5e67dafd2ee66da32818d"}, + {file = "llama_index_multi_modal_llms_openai-0.1.4.tar.gz", hash = "sha256:6a5d6584c33a9d1b06cf5c874c63af2603fc93b660bde481a8c547e876c6e2c3"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.1,<0.11.0" +llama-index-llms-openai = ">=0.1.1,<0.2.0" + +[[package]] +name = "llama-index-program-openai" +version = "0.1.4" +description = "llama-index program openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_program_openai-0.1.4-py3-none-any.whl", hash = "sha256:cfa8f00f3743d2fc70043e80f7c3925d23b1413a0cc7a72863ad60497a18307d"}, + {file = "llama_index_program_openai-0.1.4.tar.gz", hash = "sha256:573e99a2dd16ad3caf382c8ab28d1ac10eb2571bc9481d84a6d89806ad6aa5d4"}, +] + +[package.dependencies] +llama-index-agent-openai = ">=0.1.1,<0.2.0" +llama-index-core = ">=0.10.1,<0.11.0" +llama-index-llms-openai = ">=0.1.1,<0.2.0" + +[[package]] +name = "llama-index-question-gen-openai" +version = "0.1.3" +description = "llama-index question_gen openai integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_question_gen_openai-0.1.3-py3-none-any.whl", hash = "sha256:1f83b49e8b2e665030d1ec8c54687d6985d9fa8426147b64e46628a9e489b302"}, + {file = "llama_index_question_gen_openai-0.1.3.tar.gz", hash = "sha256:4486198117a45457d2e036ae60b93af58052893cc7d78fa9b6f47dd47b81e2e1"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.1,<0.11.0" +llama-index-llms-openai = ">=0.1.1,<0.2.0" +llama-index-program-openai = ">=0.1.1,<0.2.0" + +[[package]] +name = "llama-index-readers-file" +version = "0.1.6" +description = "llama-index readers file integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_readers_file-0.1.6-py3-none-any.whl", hash = "sha256:f583bd90353a0c0985213af02c97aa2f2f22e702d4311fe719de91382c9ad8dd"}, + {file = "llama_index_readers_file-0.1.6.tar.gz", hash = "sha256:d9fc0ca84926d04bd757c57fe87841cd9dbc2606aab5f2ce927deec14aaa1a74"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.12.3,<5.0.0" +bs4 = ">=0.0.2,<0.0.3" +llama-index-core = ">=0.10.1,<0.11.0" +pymupdf = ">=1.23.21,<2.0.0" +pypdf = ">=4.0.1,<5.0.0" + +[[package]] +name = "llama-index-readers-llama-parse" +version = "0.1.3" +description = "llama-index readers llama-parse integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_readers_llama_parse-0.1.3-py3-none-any.whl", hash = "sha256:f52a06a2765a2ffe6c138cf1703ab1de6249ff069ba62d80b9147e849bbcbc27"}, + {file = "llama_index_readers_llama_parse-0.1.3.tar.gz", hash = "sha256:e0ee0c393e10fc80eac644788338bbd2032050c8b8a474f3d0b5ebd08e9867fe"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.7,<0.11.0" +llama-parse = ">=0.3.3,<0.4.0" + +[[package]] +name = "llama-index-vector-stores-chroma" +version = "0.1.5" +description = "llama-index vector_stores chroma integration" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_index_vector_stores_chroma-0.1.5-py3-none-any.whl", hash = "sha256:40692f8bcc4b44d4a28b6ed578bad71fbc33ce5d95220c29b00e5ba7ab00d8a0"}, + {file = "llama_index_vector_stores_chroma-0.1.5.tar.gz", hash = "sha256:5e6ed1bc0b0e4c54a030b7ec95cc19015af4a8a22d3c37deb66f76b017d54b14"}, +] + +[package.dependencies] +chromadb = ">=0.4.22,<0.5.0" +llama-index-core = ">=0.10.1,<0.11.0" +onnxruntime = ">=1.17.0,<2.0.0" +tokenizers = ">=0.15.1,<0.16.0" + +[[package]] +name = "llama-parse" +version = "0.3.5" +description = "Parse files into RAG-Optimized formats." +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "llama_parse-0.3.5-py3-none-any.whl", hash = "sha256:8e6e7a0986ad30cb82c5c67a29b7e2c3892620dd2a422afc909654a9d0f1c82c"}, + {file = "llama_parse-0.3.5.tar.gz", hash = "sha256:736a80e4fc5970b9cbef1048171908021ebd26be43f07b806889f0d1bb3875fe"}, +] + +[package.dependencies] +llama-index-core = ">=0.10.7" + +[[package]] +name = "llamaindex-py-client" +version = "0.1.13" +description = "" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "llamaindex_py_client-0.1.13-py3-none-any.whl", hash = "sha256:02400c90655da80ae373e0455c829465208607d72462f1898fd383fdfe8dabce"}, + {file = "llamaindex_py_client-0.1.13.tar.gz", hash = "sha256:3bd9b435ee0a78171eba412dea5674d813eb5bf36e577d3c7c7e90edc54900d9"}, +] + +[package.dependencies] +httpx = ">=0.20.0" +pydantic = ">=1.10" + [[package]] name = "locust" -version = "2.23.1" +version = "2.24.0" description = "Developer friendly load testing framework" optional = false python-versions = ">=3.8" files = [ - {file = "locust-2.23.1-py3-none-any.whl", hash = "sha256:96013a460a4b4d6d4fd46c70e6ff1fd2b6e03b48ddb1b48d1513d3134ba2cecf"}, - {file = "locust-2.23.1.tar.gz", hash = "sha256:6cc729729e5ebf5852fc9d845302cfcf0ab0132f198e68b3eb0c88b438b6a863"}, + {file = "locust-2.24.0-py3-none-any.whl", hash = "sha256:1b6b878b4fd0108fec956120815e69775d2616c8f4d1e9f365c222a7a5c17d9a"}, + {file = "locust-2.24.0.tar.gz", hash = "sha256:6cffa378d995244a7472af6be1d6139331f19aee44e907deee73e0281252804d"}, ] [package.dependencies] @@ -3548,6 +3832,7 @@ pywin32 = {version = "*", markers = "platform_system == \"Windows\""} pyzmq = ">=25.0.0" requests = ">=2.26.0" roundrobin = ">=0.0.2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} Werkzeug = ">=2.0.0" [[package]] @@ -3570,110 +3855,96 @@ dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptio [[package]] name = "lxml" -version = "4.9.4" +version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.7)"] [[package]] name = "mako" @@ -3694,6 +3965,24 @@ babel = ["Babel"] lingua = ["lingua"] testing = ["pytest"] +[[package]] +name = "markdown" +version = "3.5.2" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -3789,22 +4078,21 @@ files = [ [[package]] name = "marshmallow" -version = "3.20.2" +version = "3.21.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" files = [ - {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, - {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, + {file = "marshmallow-3.21.0-py3-none-any.whl", hash = "sha256:e7997f83571c7fd476042c2c188e4ee8a78900ca5e74bd9c8097afa56624e9bd"}, + {file = "marshmallow-3.21.0.tar.gz", hash = "sha256:20f53be28c6e374a711a16165fb22a8dc6003e3f7cda1285e3ca777b9193885b"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] -dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["pre-commit (>=2.4,<4.0)"] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==4.0.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "pytz", "simplejson"] [[package]] @@ -4331,6 +4619,7 @@ files = [ {file = "numexpr-2.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c77392aea53f0700d60eb270ad63174b4ff10b04f8de92861101ca2129fee51"}, {file = "numexpr-2.9.0-cp39-cp39-win32.whl", hash = "sha256:3b03a6cf37a72f5b52f2b962d7ac7f565bea8eaba83c3c4e5fcf8fbb6a938153"}, {file = "numexpr-2.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:d655b6eacc4e81006b662cba014e4615a9ddd96881b8b4db4ad0d7f6d38069af"}, + {file = "numexpr-2.9.0.tar.gz", hash = "sha256:f21d12f6c432ce349089eb95342babf6629aebb3fddf187a4492d3aadaadaaf0"}, ] [package.dependencies] @@ -4576,36 +4865,36 @@ full = ["XLMMacroDeobfuscator"] [[package]] name = "onnxruntime" -version = "1.17.0" +version = "1.17.1" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime-1.17.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d2b22a25a94109cc983443116da8d9805ced0256eb215c5e6bc6dcbabefeab96"}, - {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4c87d83c6f58d1af2675fc99e3dc810f2dbdb844bcefd0c1b7573632661f6fc"}, - {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dba55723bf9b835e358f48c98a814b41692c393eb11f51e02ece0625c756b797"}, - {file = "onnxruntime-1.17.0-cp310-cp310-win32.whl", hash = "sha256:ee48422349cc500273beea7607e33c2237909f58468ae1d6cccfc4aecd158565"}, - {file = "onnxruntime-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f34cc46553359293854e38bdae2ab1be59543aad78a6317e7746d30e311110c3"}, - {file = "onnxruntime-1.17.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:16d26badd092c8c257fa57c458bb600d96dc15282c647ccad0ed7b2732e6c03b"}, - {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f1273bebcdb47ed932d076c85eb9488bc4768fcea16d5f2747ca692fad4f9d3"}, - {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cb60fd3c2c1acd684752eb9680e89ae223e9801a9b0e0dc7b28adabe45a2e380"}, - {file = "onnxruntime-1.17.0-cp311-cp311-win32.whl", hash = "sha256:4b038324586bc905299e435f7c00007e6242389c856b82fe9357fdc3b1ef2bdc"}, - {file = "onnxruntime-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:93d39b3fa1ee01f034f098e1c7769a811a21365b4883f05f96c14a2b60c6028b"}, - {file = "onnxruntime-1.17.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:90c0890e36f880281c6c698d9bc3de2afbeee2f76512725ec043665c25c67d21"}, - {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7466724e809a40e986b1637cba156ad9fc0d1952468bc00f79ef340bc0199552"}, - {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d47bee7557a8b99c8681b6882657a515a4199778d6d5e24e924d2aafcef55b0a"}, - {file = "onnxruntime-1.17.0-cp312-cp312-win32.whl", hash = "sha256:bb1bf1ee575c665b8bbc3813ab906e091a645a24ccc210be7932154b8260eca1"}, - {file = "onnxruntime-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:ac2f286da3494b29b4186ca193c7d4e6a2c1f770c4184c7192c5da142c3dec28"}, - {file = "onnxruntime-1.17.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1ec485643b93e0a3896c655eb2426decd63e18a278bb7ccebc133b340723624f"}, - {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83c35809cda898c5a11911c69ceac8a2ac3925911854c526f73bad884582f911"}, - {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fa464aa4d81df818375239e481887b656e261377d5b6b9a4692466f5f3261edc"}, - {file = "onnxruntime-1.17.0-cp38-cp38-win32.whl", hash = "sha256:b7b337cd0586f7836601623cbd30a443df9528ef23965860d11c753ceeb009f2"}, - {file = "onnxruntime-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:fbb9faaf51d01aa2c147ef52524d9326744c852116d8005b9041809a71838878"}, - {file = "onnxruntime-1.17.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:5a06ab84eaa350bf64b1d747b33ccf10da64221ed1f38f7287f15eccbec81603"}, - {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d3d11db2c8242766212a68d0b139745157da7ce53bd96ba349a5c65e5a02357"}, - {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5632077c3ab8b0cd4f74b0af9c4e924be012b1a7bcd7daa845763c6c6bf14b7d"}, - {file = "onnxruntime-1.17.0-cp39-cp39-win32.whl", hash = "sha256:61a12732cba869b3ad2d4e29ab6cb62c7a96f61b8c213f7fcb961ba412b70b37"}, - {file = "onnxruntime-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:461fa0fc7d9c392c352b6cccdedf44d818430f3d6eacd924bb804fdea2dcfd02"}, + {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, + {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, + {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, + {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, + {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, ] [package.dependencies] @@ -4618,13 +4907,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.12.0" +version = "1.13.3" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.12.0-py3-none-any.whl", hash = "sha256:a54002c814e05222e413664f651b5916714e4700d041d5cf5724d3ae1a3e3481"}, - {file = "openai-1.12.0.tar.gz", hash = "sha256:99c5d257d09ea6533d689d1cc77caa0ac679fa21efef8893d8b0832a86877f1b"}, + {file = "openai-1.13.3-py3-none-any.whl", hash = "sha256:5769b62abd02f350a8dd1a3a242d8972c947860654466171d60fb0972ae0a41c"}, + {file = "openai-1.13.3.tar.gz", hash = "sha256:ff6c6b3bc7327e715e4b3592a923a5a1c7519ff5dd764a83d69f633d49e77a7b"}, ] [package.dependencies] @@ -4641,13 +4930,13 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "opentelemetry-api" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_api-1.22.0-py3-none-any.whl", hash = "sha256:43621514301a7e9f5d06dd8013a1b450f30c2e9372b8e30aaeb4562abf2ce034"}, - {file = "opentelemetry_api-1.22.0.tar.gz", hash = "sha256:15ae4ca925ecf9cfdfb7a709250846fbb08072260fca08ade78056c502b86bed"}, + {file = "opentelemetry_api-1.23.0-py3-none-any.whl", hash = "sha256:cc03ea4025353048aadb9c64919099663664672ea1c6be6ddd8fee8e4cd5e774"}, + {file = "opentelemetry_api-1.23.0.tar.gz", hash = "sha256:14a766548c8dd2eb4dfc349739eb4c3893712a0daa996e5dbf945f9da665da9d"}, ] [package.dependencies] @@ -4656,51 +4945,50 @@ importlib-metadata = ">=6.0,<7.0" [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Protobuf encoding" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0-py3-none-any.whl", hash = "sha256:3f2538bec5312587f8676c332b3747f54c89fe6364803a807e217af4603201fa"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0.tar.gz", hash = "sha256:71ae2f81bc6d6fe408d06388826edc8933759b2ca3a97d24054507dc7cfce52d"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.23.0-py3-none-any.whl", hash = "sha256:2a9e7e9d5a8b026b572684b6b24dcdefcaa58613d5ce3d644130b0c373c056c1"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.23.0.tar.gz", hash = "sha256:35e4ea909e7a0b24235bd0aaf17fba49676527feb1823b46565ff246d5a1ab18"}, ] [package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} -opentelemetry-proto = "1.22.0" +opentelemetry-proto = "1.23.0" [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0-py3-none-any.whl", hash = "sha256:b5bcadc129272004316a455e9081216d3380c1fc2231a928ea6a70aa90e173fb"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0.tar.gz", hash = "sha256:1e0e5aa4bbabc74942f06f268deffd94851d12a8dc30b02527472ef1729fe5b1"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0-py3-none-any.whl", hash = "sha256:40f9e3e7761eb34f2a1001f4543028783ac26e2db27e420d5374f2cca0182dad"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0.tar.gz", hash = "sha256:aa1a012eea5342bfef51fcf3f7f22601dcb0f0984a07ffe6025b2fbb6d91a2a9"}, ] [package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} deprecated = ">=1.2.6" googleapis-common-protos = ">=1.52,<2.0" grpcio = ">=1.0.0,<2.0.0" opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.22.0" -opentelemetry-proto = "1.22.0" -opentelemetry-sdk = ">=1.22.0,<1.23.0" +opentelemetry-exporter-otlp-proto-common = "1.23.0" +opentelemetry-proto = "1.23.0" +opentelemetry-sdk = ">=1.23.0,<1.24.0" [package.extras] test = ["pytest-grpc"] [[package]] name = "opentelemetry-instrumentation" -version = "0.43b0" +version = "0.44b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation-0.43b0-py3-none-any.whl", hash = "sha256:0ff1334d7e359e27640e9d420024efeb73eacae464309c2e14ede7ba6c93967e"}, + {file = "opentelemetry_instrumentation-0.44b0-py3-none-any.whl", hash = "sha256:79560f386425176bcc60c59190064597096114c4a8e5154f1cb281bb4e47d2fc"}, + {file = "opentelemetry_instrumentation-0.44b0.tar.gz", hash = "sha256:8213d02d8c0987b9b26386ae3e091e0477d6331673123df736479322e1a50b48"}, ] [package.dependencies] @@ -4710,57 +4998,57 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-asgi" -version = "0.43b0" +version = "0.44b0" description = "ASGI instrumentation for OpenTelemetry" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_asgi-0.43b0-py3-none-any.whl", hash = "sha256:1f593829fa039e9367820736fb063e92acd15c25b53d7bcb5d319971b8e93fd7"}, - {file = "opentelemetry_instrumentation_asgi-0.43b0.tar.gz", hash = "sha256:3f6f19333dca31ef696672e4e36cb1c2613c71dc7e847c11ff36a37e1130dadc"}, + {file = "opentelemetry_instrumentation_asgi-0.44b0-py3-none-any.whl", hash = "sha256:0d95c84a8991008c8a8ac35e15d43cc7768a5bb46f95f129e802ad2990d7c366"}, + {file = "opentelemetry_instrumentation_asgi-0.44b0.tar.gz", hash = "sha256:72d4d28ec7ccd551eac11edc5ae8cac3586c0a228467d6a95fad7b6d4edd597a"}, ] [package.dependencies] asgiref = ">=3.0,<4.0" opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" [package.extras] instruments = ["asgiref (>=3.0,<4.0)"] -test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.43b0)"] +test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.44b0)"] [[package]] name = "opentelemetry-instrumentation-fastapi" -version = "0.43b0" +version = "0.44b0" description = "OpenTelemetry FastAPI Instrumentation" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_fastapi-0.43b0-py3-none-any.whl", hash = "sha256:b79c044df68a52e07b35fa12a424e7cc0dd27ff0a171c5fdcc41dea9de8fc938"}, - {file = "opentelemetry_instrumentation_fastapi-0.43b0.tar.gz", hash = "sha256:2afaaf470622e1a2732182c68f6d2431ffe5e026a7edacd0f83605632b66347f"}, + {file = "opentelemetry_instrumentation_fastapi-0.44b0-py3-none-any.whl", hash = "sha256:4441482944bea6676816668d56deb94af990e8c6e9582c581047e5d84c91d3c9"}, + {file = "opentelemetry_instrumentation_fastapi-0.44b0.tar.gz", hash = "sha256:67ed10b93ad9d35238ae0be73cf8acbbb65a4a61fb7444d0aee5b0c492e294db"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-instrumentation-asgi = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-instrumentation-asgi = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" [package.extras] instruments = ["fastapi (>=0.58,<1.0)"] -test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.43b0)", "requests (>=2.23,<3.0)"] +test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.44b0)", "requests (>=2.23,<3.0)"] [[package]] name = "opentelemetry-proto" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python Proto" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_proto-1.22.0-py3-none-any.whl", hash = "sha256:ce7188d22c75b6d0fe53e7fb58501613d0feade5139538e79dedd9420610fa0c"}, - {file = "opentelemetry_proto-1.22.0.tar.gz", hash = "sha256:9ec29169286029f17ca34ec1f3455802ffb90131642d2f545ece9a63e8f69003"}, + {file = "opentelemetry_proto-1.23.0-py3-none-any.whl", hash = "sha256:4c017deca052cb287a6003b7c989ed8b47af65baeb5d57ebf93dde0793f78509"}, + {file = "opentelemetry_proto-1.23.0.tar.gz", hash = "sha256:e6aaf8b7ace8d021942d546161401b83eed90f9f2cc6f13275008cea730e4651"}, ] [package.dependencies] @@ -4768,105 +5056,99 @@ protobuf = ">=3.19,<5.0" [[package]] name = "opentelemetry-sdk" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python SDK" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_sdk-1.22.0-py3-none-any.whl", hash = "sha256:a730555713d7c8931657612a88a141e3a4fe6eb5523d9e2d5a8b1e673d76efa6"}, - {file = "opentelemetry_sdk-1.22.0.tar.gz", hash = "sha256:45267ac1f38a431fc2eb5d6e0c0d83afc0b78de57ac345488aa58c28c17991d0"}, + {file = "opentelemetry_sdk-1.23.0-py3-none-any.whl", hash = "sha256:a93c96990ac0f07c6d679e2f1015864ff7a4f5587122dd5af968034436efb1fd"}, + {file = "opentelemetry_sdk-1.23.0.tar.gz", hash = "sha256:9ddf60195837b59e72fd2033d6a47e2b59a0f74f0ec37d89387d89e3da8cab7f"}, ] [package.dependencies] -opentelemetry-api = "1.22.0" -opentelemetry-semantic-conventions = "0.43b0" +opentelemetry-api = "1.23.0" +opentelemetry-semantic-conventions = "0.44b0" typing-extensions = ">=3.7.4" [[package]] name = "opentelemetry-semantic-conventions" -version = "0.43b0" +version = "0.44b0" description = "OpenTelemetry Semantic Conventions" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_semantic_conventions-0.43b0-py3-none-any.whl", hash = "sha256:291284d7c1bf15fdaddf309b3bd6d3b7ce12a253cec6d27144439819a15d8445"}, - {file = "opentelemetry_semantic_conventions-0.43b0.tar.gz", hash = "sha256:b9576fb890df479626fa624e88dde42d3d60b8b6c8ae1152ad157a8b97358635"}, + {file = "opentelemetry_semantic_conventions-0.44b0-py3-none-any.whl", hash = "sha256:7c434546c9cbd797ab980cc88bf9ff3f4a5a28f941117cad21694e43d5d92019"}, + {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, ] [[package]] name = "opentelemetry-util-http" -version = "0.43b0" +version = "0.44b0" description = "Web util for OpenTelemetry" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_util_http-0.43b0-py3-none-any.whl", hash = "sha256:f25a820784b030f6cb86b3d76e5676c769b75ed3f55a210bcdae0a5e175ebadb"}, - {file = "opentelemetry_util_http-0.43b0.tar.gz", hash = "sha256:3ff6ab361dbe99fc81200d625603c0fb890c055c6e416a3e6d661ddf47a6c7f7"}, + {file = "opentelemetry_util_http-0.44b0-py3-none-any.whl", hash = "sha256:ff018ab6a2fa349537ff21adcef99a294248b599be53843c44f367aef6bccea5"}, + {file = "opentelemetry_util_http-0.44b0.tar.gz", hash = "sha256:75896dffcbbeb5df5429ad4526e22307fc041a27114e0c5bfd90bb219381e68f"}, ] [[package]] name = "orjson" -version = "3.9.3" +version = "3.9.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "orjson-3.9.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:082714b5554fcced092c45272f22a93400389733083c43f5043c4316e86f57a2"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97ddec69ca4fa1b66d512cf4f4a3fe6a57c4bf21209295ab2f4ada415996e08a"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab7501722ec2172b1c6ea333bc47bba3bbb9b5fc0e3e891191e8447f43d3187d"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ae680163ab09f04683d35fbd63eee858019f0066640f7cbad4dba3e7422a4bc"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e5abca1e0a9d110bab7346fab0acd3b7848d2ee13318bc24a31bbfbdad974b8"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c55f42a8b07cdb7d514cfaeb56f6e9029eef1cbc8e670ac31fc377c46b993cd1"}, - {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:303f1324f5ea516f8e874ea0f8d15c581caabdca59fc990705fc76f3bd9f3bdf"}, - {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c444e3931ea4fe7dec26d195486a681fedc0233230c9b84848f8e60affd4a4"}, - {file = "orjson-3.9.3-cp310-none-win32.whl", hash = "sha256:63333de96d83091023c9c99cc579973a2977b15feb5cdc8d9660104c886e9ab8"}, - {file = "orjson-3.9.3-cp310-none-win_amd64.whl", hash = "sha256:7bce6ff507a83c6a4b6b00726f3a7d7aed0b1f0884aac0440e95b55cac0b113e"}, - {file = "orjson-3.9.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec4421f377cce51decd6ea3869a8b41e9f05c50bf6acef8284f8906e642992c4"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b3177bd67756e53bdbd72c79fae3507796a67b67c32a16f4b55cad48ef25c13"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b21908252c8a13b8f48d4cccdb7fabb592824cf39c9fa4e9076015dd65eabeba"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7b795c6ac344b0c49776b7e135a9bed0cd15b1ade2a4c7b3a19e3913247702e"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac43842f5ba26e6f21b4e63312bd1137111a9b9821d7f7dfe189a4015c6c6bc"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8def4f6560c7b6dbc4b356dfd8e6624a018d920ce5a2864291a2bf1052cd6b68"}, - {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bbc0dafd1de42c8dbfd6e5d1fe4deab15d2de474e11475921286bebefd109ec8"}, - {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:85b1870d5420292419b34002659082d77f31b13d4d8cbd67bed9d717c775a0fb"}, - {file = "orjson-3.9.3-cp311-none-win32.whl", hash = "sha256:d6ece3f48f14a06c325181f2b9bd9a9827aac2ecdcad11eb12f561fb697eaaaa"}, - {file = "orjson-3.9.3-cp311-none-win_amd64.whl", hash = "sha256:448feda092c681c0a5b8eec62dd4f625ad5d316dafd56c81fb3f05b5221827ff"}, - {file = "orjson-3.9.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:413d7cf731f1222373360128a3d5232d52630a7355f446bf2659fc3445ec0b76"}, - {file = "orjson-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009a0f79804c604998b068f5f942e40546913ed45ee2f0a3d0e75695bf7543fa"}, - {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ce062844255cce4d6a8a150e8e78b9fcd6c5a3f1ff3f8792922de25827c25b9c"}, - {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:776659e18debe5de73c30b0957cd6454fcc61d87377fcb276441fca1b9f1305d"}, - {file = "orjson-3.9.3-cp312-none-win_amd64.whl", hash = "sha256:47b237da3818c8e546df4d2162f0a5cfd50b7b58528907919a27244141e0e48e"}, - {file = "orjson-3.9.3-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f954115d8496d4ab5975438e3ce07780c1644ea0a66c78a943ef79f33769b61a"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c57100517b6dbfe34181ed2248bebfab03bd2a7aafb6fbf849c6fd3bb2fbda"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa6017140fe487ab8fae605a2890c94c6fbe7a8e763ff33bbdb00e27ce078cfd"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fe77af2ff33c370fb06c9fdf004a66d85ea19c77f0273bbf70c70f98f832725"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2fa8c385b27bab886caa098fa3ae114d56571ae6e7a5610cb624d7b0a66faed"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8323739e7905ae4ec4dbdebb31067d28be981f30c11b6ae88ddec2671c0b3194"}, - {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ad43fd5b1ededb54fe01e67468710fcfec8a5830e4ce131f85e741ea151a18e9"}, - {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:42cb645780f732c829bc351346a54157d57f2bc409e671ee36b9fc1037bb77fe"}, - {file = "orjson-3.9.3-cp37-none-win32.whl", hash = "sha256:b84542669d1b0175dc2870025b73cbd4f4a3beb17796de6ec82683663e0400f3"}, - {file = "orjson-3.9.3-cp37-none-win_amd64.whl", hash = "sha256:1440a404ce84f43e2f8e97d8b5fe6f271458e0ffd37290dc3a9f6aa067c69930"}, - {file = "orjson-3.9.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1da8edaefb75f25b449ed4e22d00b9b49211b97dcefd44b742bdd8721d572788"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47210746acda49febe3bb07253eb5d63d7c7511beec5fa702aad3ce64e15664f"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:893c62afd5b26f04e2814dffa4d9d4060583ac43dc3e79ed3eadf62a5ac37b2c"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32aef33ae33901c327fd5679f91fa37199834d122dffd234416a6fe4193d1982"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd2761384ddb9de63b20795845d5cedadf052255a34c3ff1750cfc77b29d9926"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e2502b4af2055050dcc74718f2647b65102087c6f5b3f939e2e1a3e3099602"}, - {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fa7c7a39eeb8dd171f59d96fd4610f908ac14b2f2eb268f4498e5f310bda8da7"}, - {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc3fe0c0ae7acf00d827efe2506131f1b19af3c87e3d76b0e081748984e51c26"}, - {file = "orjson-3.9.3-cp38-none-win32.whl", hash = "sha256:5b1ff8e920518753b310034e5796f0116f7732b0b27531012d46f0b54f3c8c85"}, - {file = "orjson-3.9.3-cp38-none-win_amd64.whl", hash = "sha256:9f2b1007174c93dd838f52e623c972df33057e3cb7ad9341b7d9bbd66b8d8fb4"}, - {file = "orjson-3.9.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cddc5b8bd7b0d1dfd36637eedbd83726b8b8a5969d3ecee70a9b54a94b8a0258"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c3bbf4b6f94fad2fd73c81293da8b343fbd07ce48d7836c07d0d54b58c8e93"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a5cc22ef6973992db18952f8b978781e19a0c62c098f475db936284df9311df7"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcea93630986209c690f27f32398956b04ccbba8f1fa7c3d1bb88a01d9ab87a"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:526cb34e63faaad908c34597294507b7a4b999a436b4f206bc4e60ff4e911c20"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5ac6e30ee10af57f52e72f9c8b9bc4846a9343449d10ca2ae9760615da3042"}, - {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6c37ab097c062bdf535105c7156839c4e370065c476bb2393149ad31a2cdf6e"}, - {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27d69628f449c52a7a34836b15ec948804254f7954457f88de53f2f4de99512f"}, - {file = "orjson-3.9.3-cp39-none-win32.whl", hash = "sha256:5297463d8831c2327ed22bf92eb6d50347071ff1c73fb4702d50b8bc514aeac9"}, - {file = "orjson-3.9.3-cp39-none-win_amd64.whl", hash = "sha256:69a33486b5b6e5a99939fdb13c1c0d8bcc7c89fe6083e7b9ce3c70931ca9fb71"}, - {file = "orjson-3.9.3.tar.gz", hash = "sha256:d3da4faf6398154c1e75d32778035fa7dc284814809f76e8f8d50c4f54859399"}, + {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, + {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, + {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, + {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, + {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, + {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, + {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, + {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, + {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, + {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, + {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, + {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, + {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, + {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, + {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, ] [[package]] @@ -5138,23 +5420,23 @@ xmp = ["defusedxml"] [[package]] name = "pinecone-client" -version = "3.0.3" +version = "3.1.0" description = "Pinecone client and SDK" optional = false -python-versions = ">=3.8,<3.13" +python-versions = ">=3.8,<4.0" files = [ - {file = "pinecone_client-3.0.3-py3-none-any.whl", hash = "sha256:940c942aeb259145e1cd6d3f214ad977dbb4dc2e626b3528fb5015c64c3e6190"}, - {file = "pinecone_client-3.0.3.tar.gz", hash = "sha256:2ad3ef7627edc4d9ee248d9781861c4341d6d27a15bc05f6bef53d958837d374"}, + {file = "pinecone_client-3.1.0-py3-none-any.whl", hash = "sha256:66dfe9859ed5b3412c3b59c68c9706c0f522cafd1a15c5d05e28d5664c2c48a4"}, + {file = "pinecone_client-3.1.0.tar.gz", hash = "sha256:45b8206013f91a982b994f1fbaa39e7e8c99d30ef3778a9f319c43b8c992fc42"}, ] [package.dependencies] certifi = ">=2019.11.17" tqdm = ">=4.64.1" typing-extensions = ">=3.7.4" -urllib3 = ">=1.26.0" +urllib3 = {version = ">=1.26.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""} [package.extras] -grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] +grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "grpcio (>=1.59.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] [[package]] name = "platformdirs" @@ -5207,13 +5489,13 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "postgrest" -version = "0.15.0" +version = "0.16.1" description = "PostgREST client for Python. This library provides an ORM interface to PostgREST." optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "postgrest-0.15.0-py3-none-any.whl", hash = "sha256:f405b3c4adfa3fe61732fabb1d5d7c55111159d25fc595663ea75ff992cafd5b"}, - {file = "postgrest-0.15.0.tar.gz", hash = "sha256:2e6b4b2b721be2c4e2dbc8de49f8b6a8ed74663b3b0f6b04976c04e222b283cb"}, + {file = "postgrest-0.16.1-py3-none-any.whl", hash = "sha256:412ec6bf61c58f38c92b6b61f57ab50e25c73ca9ef415a6f56ed9cf5429614cb"}, + {file = "postgrest-0.16.1.tar.gz", hash = "sha256:d955824d37e7123a8313cbf10c8e0a8d42418fcb942cd8e1526e8509fb71574d"}, ] [package.dependencies] @@ -5468,6 +5750,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -5476,6 +5759,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -5671,13 +5956,13 @@ pyasn1 = ">=0.4.6,<0.6.0" [[package]] name = "pyautogen" -version = "0.2.14" +version = "0.2.15" description = "Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework" optional = false python-versions = ">=3.8,<3.13" files = [ - {file = "pyautogen-0.2.14-py3-none-any.whl", hash = "sha256:2cbbaea5f0bdcc15c68fb9602caa05668852a05d7d0cb8998fa4446dc48ba6b2"}, - {file = "pyautogen-0.2.14.tar.gz", hash = "sha256:96931f18e9f0837ce53e52918bc9c815d9bd24638d430c90406584d26a561b68"}, + {file = "pyautogen-0.2.15-py3-none-any.whl", hash = "sha256:6bd8b551ce7afb66c729c9bf263b9bf4633d287a3fd9b321c372d67b2c869b8d"}, + {file = "pyautogen-0.2.15.tar.gz", hash = "sha256:62db6de3e510256c832fcb5125553bc5d34ab4850fb83d5f4172e54cd4470b11"}, ] [package.dependencies] @@ -5696,6 +5981,7 @@ blendsearch = ["flaml[blendsearch]"] graph = ["matplotlib", "networkx"] ipython = ["ipykernel (>=6.29.0)", "jupyter-client (>=8.6.0)"] lmm = ["pillow", "replicate"] +local-jupyter-exec = ["ipykernel", "jupyter-kernel-gateway", "requests", "websocket-client"] mathchat = ["pydantic (==1.10.9)", "sympy", "wolframalpha"] redis = ["redis"] retrievechat = ["chromadb", "ipython", "pypdf", "sentence-transformers"] @@ -5757,18 +6043,18 @@ files = [ [[package]] name = "pydantic" -version = "2.6.1" +version = "2.6.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"}, - {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"}, + {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, + {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.2" +pydantic-core = "2.16.3" typing-extensions = ">=4.6.1" [package.extras] @@ -5776,90 +6062,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.2" +version = "2.16.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"}, - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"}, - {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"}, - {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"}, - {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"}, - {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"}, - {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"}, - {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"}, - {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"}, - {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"}, - {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"}, - {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"}, - {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"}, - {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"}, - {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, + {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, + {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, + {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, + {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, + {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, + {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, + {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, + {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, + {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, + {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, + {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, + {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, + {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, ] [package.dependencies] @@ -6002,6 +6288,59 @@ snappy = ["python-snappy"] test = ["pytest (>=7)"] zstd = ["zstandard"] +[[package]] +name = "pymupdf" +version = "1.23.26" +description = "A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents." +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyMuPDF-1.23.26-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:645a05321aecc8c45739f71f0eb574ce33138d19189582ffa5241fea3a8e2549"}, + {file = "PyMuPDF-1.23.26-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2dfc9e010669ae92fade6fb72aaea49ebe3b8dcd7ee4dcbbe50115abcaa4d3fe"}, + {file = "PyMuPDF-1.23.26-cp310-none-manylinux2014_x86_64.whl", hash = "sha256:b22f8d854f8196ad5b20308c1cebad3d5189ed9f0988acbafa043947ea7e6c55"}, + {file = "PyMuPDF-1.23.26-cp310-none-win32.whl", hash = "sha256:cc0f794e3466bc96b5bf79d42fbc1551428751e3fef38ebc10ac70396b676144"}, + {file = "PyMuPDF-1.23.26-cp310-none-win_amd64.whl", hash = "sha256:2eb701247d8e685a24e45899d1175f01a3ce5fc792a4431c91fbb68633b29298"}, + {file = "PyMuPDF-1.23.26-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:e2804a64bb57da414781e312fb0561f6be67658ad57ed4a73dce008b23fc70a6"}, + {file = "PyMuPDF-1.23.26-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:97b40bb22e3056874634617a90e0ed24a5172cf71791b9e25d1d91c6743bc567"}, + {file = "PyMuPDF-1.23.26-cp311-none-manylinux2014_x86_64.whl", hash = "sha256:f25aafd3e7fb9d7761a22acf2b67d704f04cc36d4dc33a3773f0eb3f4ec3606f"}, + {file = "PyMuPDF-1.23.26-cp311-none-win32.whl", hash = "sha256:05e672ed3e82caca7ef02a88ace30130b1dd392a1190f03b2b58ffe7aa331400"}, + {file = "PyMuPDF-1.23.26-cp311-none-win_amd64.whl", hash = "sha256:92b3c4dd4d0491d495f333be2d41f4e1c155a409bc9d04b5ff29655dccbf4655"}, + {file = "PyMuPDF-1.23.26-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:a217689ede18cc6991b4e6a78afee8a440b3075d53b9dec4ba5ef7487d4547e9"}, + {file = "PyMuPDF-1.23.26-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:42ad2b819b90ce1947e11b90ec5085889df0a2e3aa0207bc97ecacfc6157cabc"}, + {file = "PyMuPDF-1.23.26-cp312-none-manylinux2014_x86_64.whl", hash = "sha256:bb42d4b8407b4de7cb58c28f01449f16f32a6daed88afb41108f1aeb3552bdd4"}, + {file = "PyMuPDF-1.23.26-cp312-none-win32.whl", hash = "sha256:c40d044411615e6f0baa7d3d933b3032cf97e168c7fa77d1be8a46008c109aee"}, + {file = "PyMuPDF-1.23.26-cp312-none-win_amd64.whl", hash = "sha256:3f876533aa7f9a94bcd9a0225ce72571b7808260903fec1d95c120bc842fb52d"}, + {file = "PyMuPDF-1.23.26-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:52df831d46beb9ff494f5fba3e5d069af6d81f49abf6b6e799ee01f4f8fa6799"}, + {file = "PyMuPDF-1.23.26-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:0bbb0cf6593e53524f3fc26fb5e6ead17c02c64791caec7c4afe61b677dedf80"}, + {file = "PyMuPDF-1.23.26-cp38-none-manylinux2014_x86_64.whl", hash = "sha256:d7cd88842b2e7f4c71eef4d87c98c35646b80b60e6375392d7ce40e519261f59"}, + {file = "PyMuPDF-1.23.26-cp38-none-win32.whl", hash = "sha256:6577e2f473625e2d0df5f5a3bf1e4519e94ae749733cc9937994d1b256687bfa"}, + {file = "PyMuPDF-1.23.26-cp38-none-win_amd64.whl", hash = "sha256:fbe1a3255b2cd0d769b2da2c4efdd0c0f30d4961a1aac02c0f75cf951b337aa4"}, + {file = "PyMuPDF-1.23.26-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:73fce034f2afea886a59ead2d0caedf27e2b2a8558b5da16d0286882e0b1eb82"}, + {file = "PyMuPDF-1.23.26-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:b3de8618b7cb5b36db611083840b3bcf09b11a893e2d8262f4e042102c7e65de"}, + {file = "PyMuPDF-1.23.26-cp39-none-manylinux2014_x86_64.whl", hash = "sha256:deee96c2fd415ded7b5070d8d5b2c60679aee6ed0e28ac0d2cb998060d835c2c"}, + {file = "PyMuPDF-1.23.26-cp39-none-win32.whl", hash = "sha256:9f7f4ef99dd8ac97fb0b852efa3dcbee515798078b6c79a6a13c7b1e7c5d41a4"}, + {file = "PyMuPDF-1.23.26-cp39-none-win_amd64.whl", hash = "sha256:ba9a54552c7afb9ec85432c765e2fa9a81413acfaa7d70db7c9b528297749e5b"}, + {file = "PyMuPDF-1.23.26.tar.gz", hash = "sha256:a904261b317b761b0aa2bd2c1f6cd25d25aa4258be67a90c02a878efc5dca649"}, +] + +[package.dependencies] +PyMuPDFb = "1.23.22" + +[[package]] +name = "pymupdfb" +version = "1.23.22" +description = "MuPDF shared libraries for PyMuPDF." +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyMuPDFb-1.23.22-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9085a1e2fbf16f2820f9f7ad3d25e85f81d9b9eb0409110c1670d4cf5a27a678"}, + {file = "PyMuPDFb-1.23.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:01016dd33220cef4ecaf929d09fd27a584dc3ec3e5c9f4112dfe63613ea35135"}, + {file = "PyMuPDFb-1.23.22-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf50e814db91f2a2325219302fbac229a23682c372cf8232aabd51ea3f18210e"}, + {file = "PyMuPDFb-1.23.22-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ffa713ad18e816e584c8a5f569995c32d22f8ac76ab6e4a61f2d2983c4b73d9"}, + {file = "PyMuPDFb-1.23.22-py3-none-win32.whl", hash = "sha256:d00e372452845aea624659c302d25e935052269fd3aafe26948301576d6f2ee8"}, + {file = "PyMuPDFb-1.23.22-py3-none-win_amd64.whl", hash = "sha256:7c9c157281fdee9f296e666a323307dbf74cb38f017921bb131fa7bfcd39c2bd"}, +] + [[package]] name = "pyparsing" version = "2.4.7" @@ -6084,13 +6423,13 @@ chardet = "*" [[package]] name = "pytest" -version = "8.0.1" +version = "8.0.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.1-py3-none-any.whl", hash = "sha256:3e4f16fe1c0a9dc9d9389161c127c3edc5d810c38d6793042fb81d9f48a59fca"}, - {file = "pytest-8.0.1.tar.gz", hash = "sha256:267f6563751877d772019b13aacbe4e860d73fe8f651f28112e9ac37de7513ae"}, + {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, + {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, ] [package.dependencies] @@ -6394,6 +6733,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -6401,8 +6741,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -6419,6 +6767,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -6426,6 +6775,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -6722,17 +7072,17 @@ files = [ [[package]] name = "redis" -version = "5.0.1" +version = "5.0.2" description = "Python client for Redis database and key-value store" optional = true python-versions = ">=3.7" files = [ - {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, - {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, + {file = "redis-5.0.2-py3-none-any.whl", hash = "sha256:4caa8e1fcb6f3c0ef28dba99535101d80934b7d4cd541bbb47f4a3826ee472d1"}, + {file = "redis-5.0.2.tar.gz", hash = "sha256:3f82cc80d350e93042c8e6e7a5d0596e4dd68715babffba79492733e1f367037"}, ] [package.dependencies] -async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} +async-timeout = ">=4.0.3" [package.extras] hiredis = ["hiredis (>=1.0.0)"] @@ -6881,13 +7231,13 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "13.7.0" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, - {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] @@ -7201,104 +7551,40 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "sentence-transformers" -version = "2.3.1" +version = "2.5.0" description = "Multilingual text embeddings" optional = true python-versions = ">=3.8.0" files = [ - {file = "sentence-transformers-2.3.1.tar.gz", hash = "sha256:d589d85a464f45338cdbdf99ea715f8068e1fb01c582e0bcdbf60bcf3eade6d0"}, - {file = "sentence_transformers-2.3.1-py3-none-any.whl", hash = "sha256:285d6637726c3b002186aa4b8bcace1101364b32671fb605297c4c2636b8190e"}, + {file = "sentence-transformers-2.5.0.tar.gz", hash = "sha256:42cbd4130d58e8e08ea966bf94b012136f0939bbe692ab28dcd00d3e69c57989"}, + {file = "sentence_transformers-2.5.0-py3-none-any.whl", hash = "sha256:2a8df56b1c2171a2c625294bd371ebd61bbbfd1208f4fbac0f8cf95aeaffb79d"}, ] [package.dependencies] huggingface-hub = ">=0.15.1" -nltk = "*" numpy = "*" Pillow = "*" scikit-learn = "*" scipy = "*" -sentencepiece = "*" torch = ">=1.11.0" tqdm = "*" transformers = ">=4.32.0,<5.0.0" -[[package]] -name = "sentencepiece" -version = "0.2.0" -description = "SentencePiece python wrapper" -optional = true -python-versions = "*" -files = [ - {file = "sentencepiece-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:188779e1298a1c8b8253c7d3ad729cb0a9891e5cef5e5d07ce4592c54869e227"}, - {file = "sentencepiece-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bed9cf85b296fa2b76fc2547b9cbb691a523864cebaee86304c43a7b4cb1b452"}, - {file = "sentencepiece-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d7b67e724bead13f18db6e1d10b6bbdc454af574d70efbb36f27d90387be1ca3"}, - {file = "sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fde4b08cfe237be4484c6c7c2e2c75fb862cfeab6bd5449ce4caeafd97b767a"}, - {file = "sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c378492056202d1c48a4979650981635fd97875a00eabb1f00c6a236b013b5e"}, - {file = "sentencepiece-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1380ce6540a368de2ef6d7e6ba14ba8f3258df650d39ba7d833b79ee68a52040"}, - {file = "sentencepiece-0.2.0-cp310-cp310-win32.whl", hash = "sha256:a1151d6a6dd4b43e552394aed0edfe9292820272f0194bd56c7c1660a0c06c3d"}, - {file = "sentencepiece-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:d490142b0521ef22bc1085f061d922a2a6666175bb6b42e588ff95c0db6819b2"}, - {file = "sentencepiece-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17982700c4f6dbb55fa3594f3d7e5dd1c8659a274af3738e33c987d2a27c9d5c"}, - {file = "sentencepiece-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c867012c0e8bcd5bdad0f791609101cb5c66acb303ab3270218d6debc68a65e"}, - {file = "sentencepiece-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd6071249c74f779c5b27183295b9202f8dedb68034e716784364443879eaa6"}, - {file = "sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f90c55a65013cbb8f4d7aab0599bf925cde4adc67ae43a0d323677b5a1c6cb"}, - {file = "sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b293734059ef656dcd65be62ff771507bea8fed0a711b6733976e1ed3add4553"}, - {file = "sentencepiece-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e58b47f933aca74c6a60a79dcb21d5b9e47416256c795c2d58d55cec27f9551d"}, - {file = "sentencepiece-0.2.0-cp311-cp311-win32.whl", hash = "sha256:c581258cf346b327c62c4f1cebd32691826306f6a41d8c4bec43b010dee08e75"}, - {file = "sentencepiece-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:0993dbc665f4113017892f1b87c3904a44d0640eda510abcacdfb07f74286d36"}, - {file = "sentencepiece-0.2.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ea5f536e32ea8ec96086ee00d7a4a131ce583a1b18d130711707c10e69601cb2"}, - {file = "sentencepiece-0.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0cb51f53b6aae3c36bafe41e86167c71af8370a039f542c43b0cce5ef24a68c"}, - {file = "sentencepiece-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3212121805afc58d8b00ab4e7dd1f8f76c203ddb9dc94aa4079618a31cf5da0f"}, - {file = "sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a3149e3066c2a75e0d68a43eb632d7ae728c7925b517f4c05c40f6f7280ce08"}, - {file = "sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632f3594d3e7ac8b367bca204cb3fd05a01d5b21455acd097ea4c0e30e2f63d7"}, - {file = "sentencepiece-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f295105c6bdbb05bd5e1b0cafbd78ff95036f5d3641e7949455a3f4e5e7c3109"}, - {file = "sentencepiece-0.2.0-cp312-cp312-win32.whl", hash = "sha256:fb89f811e5efd18bab141afc3fea3de141c3f69f3fe9e898f710ae7fe3aab251"}, - {file = "sentencepiece-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a673a72aab81fef5ebe755c6e0cc60087d1f3a4700835d40537183c1703a45f"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4547683f330289ec4f093027bfeb87f9ef023b2eb6f879fdc4a8187c7e0ffb90"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd6175f7eaec7142d2bf6f6597ce7db4c9ac89acf93fcdb17410c3a8b781eeb"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:859ba1acde782609a0910a26a60e16c191a82bf39b5621107552c0cd79fad00f"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcbbef6cc277f8f18f36959e305f10b1c620442d75addc79c21d7073ae581b50"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-win32.whl", hash = "sha256:536b934e244829e3fe6c4f198652cd82da48adb9aa145c9f00889542726dee3d"}, - {file = "sentencepiece-0.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:0a91aaa3c769b52440df56fafda683b3aa48e3f2169cf7ee5b8c8454a7f3ae9b"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:787e480ca4c1d08c9985a7eb1eae4345c107729c99e9b5a9a00f2575fc7d4b4b"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4d158189eb2ecffea3a51edf6d25e110b3678ec47f1a40f2d541eafbd8f6250"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1e5ca43013e8935f25457a4fca47e315780172c3e821b4b13a890668911c792"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7140d9e5a74a0908493bb4a13f1f16a401297bd755ada4c707e842fbf6f0f5bf"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-win32.whl", hash = "sha256:6cf333625234f247ab357b0bd9836638405ea9082e1543d5b8408f014979dcbf"}, - {file = "sentencepiece-0.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ff88712338b01031910e8e61e7239aff3ce8869ee31a47df63cb38aadd591bea"}, - {file = "sentencepiece-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20813a68d4c221b1849c62c30e1281ea81687894d894b8d4a0f4677d9311e0f5"}, - {file = "sentencepiece-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:926ef920ae2e8182db31d3f5d081ada57804e3e1d3a8c4ef8b117f9d9fb5a945"}, - {file = "sentencepiece-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:89f65f69636b7e9c015b79dff9c9985a9bc7d19ded6f79ef9f1ec920fdd73ecf"}, - {file = "sentencepiece-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f67eae0dbe6f2d7d6ba50a354623d787c99965f068b81e145d53240198021b0"}, - {file = "sentencepiece-0.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:98501e075f35dd1a1d5a20f65be26839fcb1938752ec61539af008a5aa6f510b"}, - {file = "sentencepiece-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d1d2cc4882e8d6a1adf9d5927d7716f80617fc693385661caff21888972269"}, - {file = "sentencepiece-0.2.0-cp38-cp38-win32.whl", hash = "sha256:b99a308a2e5e569031ab164b74e6fab0b6f37dfb493c32f7816225f4d411a6dd"}, - {file = "sentencepiece-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:cdb701eec783d3ec86b7cd4c763adad8eaf6b46db37ee1c36e5e6c44b3fe1b5f"}, - {file = "sentencepiece-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1e0f9c4d0a6b0af59b613175f019916e28ade076e21242fd5be24340d8a2f64a"}, - {file = "sentencepiece-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:298f21cc1366eb60311aedba3169d30f885c363ddbf44214b0a587d2908141ad"}, - {file = "sentencepiece-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f1ec95aa1e5dab11f37ac7eff190493fd87770f7a8b81ebc9dd768d1a3c8704"}, - {file = "sentencepiece-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b06b70af54daa4b4904cbb90b4eb6d35c9f3252fdc86c9c32d5afd4d30118d8"}, - {file = "sentencepiece-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e37bac44dd6603388cb598c64ff7a76e41ca774646f21c23aadfbf5a2228ab"}, - {file = "sentencepiece-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0461324897735512a32d222e3d886e24ad6a499761952b6bda2a9ee6e4313ea5"}, - {file = "sentencepiece-0.2.0-cp39-cp39-win32.whl", hash = "sha256:38aed822fb76435fa1f12185f10465a94ab9e51d5e8a9159e9a540ce926f0ffd"}, - {file = "sentencepiece-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:d8cf876516548b5a1d6ac4745d8b554f5c07891d55da557925e5c13ff0b4e6ad"}, - {file = "sentencepiece-0.2.0.tar.gz", hash = "sha256:a52c19171daaf2e697dc6cbe67684e0fa341b1248966f6aebb541de654d15843"}, -] - [[package]] name = "setuptools" -version = "69.1.0" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, - {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "simple-websocket" @@ -7330,13 +7616,13 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -7523,19 +7809,19 @@ test = ["pylint", "pytest", "pytest-black", "pytest-cov", "pytest-pylint"] [[package]] name = "supabase" -version = "2.3.5" +version = "2.4.0" description = "Supabase client for Python." optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "supabase-2.3.5-py3-none-any.whl", hash = "sha256:0555ca74ac4607e9597c6f5cf8236d121777f14506c5f7633e4c56d7a22cbc4e"}, - {file = "supabase-2.3.5.tar.gz", hash = "sha256:3bebf5e8cc80e0a416f4458880a60292ff255de63f6ebf03de04db8c4b4e1f7e"}, + {file = "supabase-2.4.0-py3-none-any.whl", hash = "sha256:f2f02b0e7903247ef9e2b3cb5dde067924a19a068f1c8befbdf40fb091bf8dd3"}, + {file = "supabase-2.4.0.tar.gz", hash = "sha256:d51556d3884f2e6f4588c33f1fcac954d4304238253bc35e9a87fdd22c43bafb"}, ] [package.dependencies] gotrue = ">=1.3,<3.0" httpx = ">=0.24,<0.26" -postgrest = ">=0.10.8,<0.16.0" +postgrest = ">=0.10.8,<0.17.0" realtime = ">=1.0.0,<2.0.0" storage3 = ">=0.5.3,<0.8.0" supafunc = ">=0.3.1,<0.4.0" @@ -7813,36 +8099,36 @@ files = [ [[package]] name = "torch" -version = "2.2.0" +version = "2.2.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = true python-versions = ">=3.8.0" files = [ - {file = "torch-2.2.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d366158d6503a3447e67f8c0ad1328d54e6c181d88572d688a625fac61b13a97"}, - {file = "torch-2.2.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:707f2f80402981e9f90d0038d7d481678586251e6642a7a6ef67fc93511cb446"}, - {file = "torch-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:15c8f0a105c66b28496092fca1520346082e734095f8eaf47b5786bac24b8a31"}, - {file = "torch-2.2.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:0ca4df4b728515ad009b79f5107b00bcb2c63dc202d991412b9eb3b6a4f24349"}, - {file = "torch-2.2.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:3d3eea2d5969b9a1c9401429ca79efc668120314d443d3463edc3289d7f003c7"}, - {file = "torch-2.2.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:0d1c580e379c0d48f0f0a08ea28d8e373295aa254de4f9ad0631f9ed8bc04c24"}, - {file = "torch-2.2.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9328e3c1ce628a281d2707526b4d1080eae7c4afab4f81cea75bde1f9441dc78"}, - {file = "torch-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:03c8e660907ac1b8ee07f6d929c4e15cd95be2fb764368799cca02c725a212b8"}, - {file = "torch-2.2.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:da0cefe7f84ece3e3b56c11c773b59d1cb2c0fd83ddf6b5f7f1fd1a987b15c3e"}, - {file = "torch-2.2.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:f81d23227034221a4a4ff8ef24cc6cec7901edd98d9e64e32822778ff01be85e"}, - {file = "torch-2.2.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:dcbfb2192ac41ca93c756ebe9e2af29df0a4c14ee0e7a0dd78f82c67a63d91d4"}, - {file = "torch-2.2.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:9eeb42971619e24392c9088b5b6d387d896e267889d41d267b1fec334f5227c5"}, - {file = "torch-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:c718b2ca69a6cac28baa36d86d8c0ec708b102cebd1ceb1b6488e404cd9be1d1"}, - {file = "torch-2.2.0-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:f11d18fceb4f9ecb1ac680dde7c463c120ed29056225d75469c19637e9f98d12"}, - {file = "torch-2.2.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:ee1da852bfd4a7e674135a446d6074c2da7194c1b08549e31eae0b3138c6b4d2"}, - {file = "torch-2.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0d819399819d0862268ac531cf12a501c253007df4f9e6709ede8a0148f1a7b8"}, - {file = "torch-2.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:08f53ccc38c49d839bc703ea1b20769cc8a429e0c4b20b56921a9f64949bf325"}, - {file = "torch-2.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:93bffe3779965a71dab25fc29787538c37c5d54298fd2f2369e372b6fb137d41"}, - {file = "torch-2.2.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:c17ec323da778efe8dad49d8fb534381479ca37af1bfc58efdbb8607a9d263a3"}, - {file = "torch-2.2.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c02685118008834e878f676f81eab3a952b7936fa31f474ef8a5ff4b5c78b36d"}, - {file = "torch-2.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d9f39d6f53cec240a0e3baa82cb697593340f9d4554cee6d3d6ca07925c2fac0"}, - {file = "torch-2.2.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:51770c065206250dc1222ea7c0eff3f88ab317d3e931cca2aee461b85fbc2472"}, - {file = "torch-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:008e4c6ad703de55af760c73bf937ecdd61a109f9b08f2bbb9c17e7c7017f194"}, - {file = "torch-2.2.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:de8680472dd14e316f42ceef2a18a301461a9058cd6e99a1f1b20f78f11412f1"}, - {file = "torch-2.2.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:99e1dcecb488e3fd25bcaac56e48cdb3539842904bdc8588b0b255fde03a254c"}, + {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, + {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, + {file = "torch-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5f5dee8433798888ca1415055f5e3faf28a3bad660e4c29e1014acd3275ab11a"}, + {file = "torch-2.2.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b6d78338acabf1fb2e88bf4559d837d30230cf9c3e4337261f4d83200df1fcbe"}, + {file = "torch-2.2.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:6ab3ea2e29d1aac962e905142bbe50943758f55292f1b4fdfb6f4792aae3323e"}, + {file = "torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157"}, + {file = "torch-2.2.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d6227060f268894f92c61af0a44c0d8212e19cb98d05c20141c73312d923bc0a"}, + {file = "torch-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:77e990af75fb1675490deb374d36e726f84732cd5677d16f19124934b2409ce9"}, + {file = "torch-2.2.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:46085e328d9b738c261f470231e987930f4cc9472d9ffb7087c7a1343826ac51"}, + {file = "torch-2.2.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2d9e7e5ecbb002257cf98fae13003abbd620196c35f85c9e34c2adfb961321ec"}, + {file = "torch-2.2.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ada53aebede1c89570e56861b08d12ba4518a1f8b82d467c32665ec4d1f4b3c8"}, + {file = "torch-2.2.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:be21d4c41ecebed9e99430dac87de1439a8c7882faf23bba7fea3fea7b906ac1"}, + {file = "torch-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:79848f46196750367dcdf1d2132b722180b9d889571e14d579ae82d2f50596c5"}, + {file = "torch-2.2.1-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:7ee804847be6be0032fbd2d1e6742fea2814c92bebccb177f0d3b8e92b2d2b18"}, + {file = "torch-2.2.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:84b2fb322ab091039fdfe74e17442ff046b258eb5e513a28093152c5b07325a7"}, + {file = "torch-2.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5c0c83aa7d94569997f1f474595e808072d80b04d34912ce6f1a0e1c24b0c12a"}, + {file = "torch-2.2.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:91a1b598055ba06b2c386415d2e7f6ac818545e94c5def597a74754940188513"}, + {file = "torch-2.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f93ddf3001ecec16568390b507652644a3a103baa72de3ad3b9c530e3277098"}, + {file = "torch-2.2.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0e8bdd4c77ac2584f33ee14c6cd3b12767b4da508ec4eed109520be7212d1069"}, + {file = "torch-2.2.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6a21bcd7076677c97ca7db7506d683e4e9db137e8420eb4a68fb67c3668232a7"}, + {file = "torch-2.2.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f1b90ac61f862634039265cd0f746cc9879feee03ff962c803486301b778714b"}, + {file = "torch-2.2.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed9e29eb94cd493b36bca9cb0b1fd7f06a0688215ad1e4b3ab4931726e0ec092"}, + {file = "torch-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c47bc25744c743f3835831a20efdcfd60aeb7c3f9804a213f61e45803d16c2a5"}, + {file = "torch-2.2.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:0952549bcb43448c8d860d5e3e947dd18cbab491b14638e21750cb3090d5ad3e"}, + {file = "torch-2.2.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:26bd2272ec46fc62dcf7d24b2fb284d44fcb7be9d529ebf336b9860350d674ed"}, ] [package.dependencies] @@ -7862,7 +8148,7 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" nvidia-nccl-cu12 = {version = "2.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -8093,13 +8379,13 @@ files = [ [[package]] name = "types-pyopenssl" -version = "24.0.0.20240130" +version = "24.0.0.20240228" description = "Typing stubs for pyOpenSSL" optional = false python-versions = ">=3.8" files = [ - {file = "types-pyOpenSSL-24.0.0.20240130.tar.gz", hash = "sha256:c812e5c1c35249f75ef5935708b2a997d62abf9745be222e5f94b9595472ab25"}, - {file = "types_pyOpenSSL-24.0.0.20240130-py3-none-any.whl", hash = "sha256:24a255458b5b8a7fca8139cf56f2a8ad5a4f1a5f711b73a5bb9cb50dc688fab5"}, + {file = "types-pyOpenSSL-24.0.0.20240228.tar.gz", hash = "sha256:cd990717d8aa3743ef0e73e0f462e64b54d90c304249232d48fece4f0f7c3c6a"}, + {file = "types_pyOpenSSL-24.0.0.20240228-py3-none-any.whl", hash = "sha256:a472cf877a873549175e81972f153f44e975302a3cf17381eb5f3d41ccfb75a4"}, ] [package.dependencies] @@ -8208,13 +8494,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] @@ -8262,13 +8548,13 @@ devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3) [[package]] name = "unstructured" -version = "0.12.4" +version = "0.12.5" description = "A library that prepares raw documents for downstream ML tasks." optional = false python-versions = ">=3.9.0,<3.12" files = [ - {file = "unstructured-0.12.4-py3-none-any.whl", hash = "sha256:f1aa046297a3afba3aa16895e513aca6a93802ef73b7a18080656435c4deb217"}, - {file = "unstructured-0.12.4.tar.gz", hash = "sha256:019cf52e9e2bfa286e61ffa0d7d336e1645280f9a0f165e697583143fcfe708a"}, + {file = "unstructured-0.12.5-py3-none-any.whl", hash = "sha256:cce7de36964f556810adb8728d0639d8e9b3ef4567443877609f3c66a54e24d1"}, + {file = "unstructured-0.12.5.tar.gz", hash = "sha256:5ea6c881049e7d98a88c07192bcb6ab750de41b4e3b594972ed1034bda99dbae"}, ] [package.dependencies] @@ -8280,6 +8566,7 @@ emoji = "*" filetype = "*" langdetect = "*" lxml = "*" +markdown = {version = "*", optional = true, markers = "extra == \"md\""} nltk = "*" numpy = "*" python-iso639 = "*" @@ -8294,6 +8581,7 @@ wrapt = "*" [package.extras] airtable = ["pyairtable"] all-docs = ["markdown", "msg-parser", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pikepdf", "pillow-heif", "pypandoc", "pypdf", "python-docx", "python-pptx (<=0.6.23)", "unstructured-inference (==0.7.23)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +astra = ["astrapy"] azure = ["adlfs", "fsspec"] azure-cognitive-search = ["azure-search-documents"] bedrock = ["boto3", "langchain-community"] @@ -8796,75 +9084,81 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [[package]] name = "wrapt" -version = "1.14.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"}, - {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"}, - {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"}, - {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"}, - {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"}, - {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"}, - {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"}, - {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"}, - {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"}, - {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"}, - {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"}, - {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"}, - {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"}, - {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"}, - {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"}, - {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"}, - {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"}, - {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"}, - {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"}, - {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"}, - {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"}, - {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"}, - {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"}, - {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"}, - {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"}, - {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"}, - {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"}, - {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"}, - {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"}, - {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"}, - {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"}, - {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"}, - {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"}, - {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"}, - {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] @@ -9094,4 +9388,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "def994a26e99d50158ec1c21779c3eeb491045820a2bc40cc62abdccf642a149" +content-hash = "524743a03769e472c83325641463bddb09f51dfc6ad50f8454c204bba8f484b5" diff --git a/pyproject.toml b/pyproject.toml index e206760d5..c0b41cec7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "0.6.7a5" +version = "0.7.0a0" description = "A Python package with a built-in web application" authors = ["Logspace "] maintainers = [ @@ -39,14 +39,12 @@ gunicorn = "^21.2.0" langchain = "~0.1.0" openai = "^1.12.0" pandas = "2.2.0" -chromadb = "^0.4.0" +chromadb = "^0.4.23" huggingface-hub = { version = "^0.20.0", extras = ["inference"] } rich = "^13.7.0" llama-cpp-python = { version = "~0.2.0", optional = true } networkx = "^3.1" -unstructured = "^0.12.0" pypdf = "^4.0.0" -lxml = "^4.9.2" pysrt = "^1.1.2" fake-useragent = "^1.4.0" docstring-parser = "^0.15" @@ -63,7 +61,7 @@ python-multipart = "^0.0.7" sqlmodel = "^0.0.14" faiss-cpu = "^1.7.4" anthropic = "^0.15.0" -orjson = "3.9.3" +orjson = "3.9.15" multiprocess = "^0.70.14" cachetools = "^5.3.1" types-cachetools = "^5.3.0.5" @@ -105,8 +103,9 @@ langchain-google-genai = "^0.0.6" elasticsearch = "^8.12.0" pytube = "^15.0.0" python-socketio = "^5.11.0" -llama-index = "0.9.48" +llama-index = "^0.10.13" langchain-openai = "^0.0.6" +unstructured = { extras = ["md"], version = "^0.12.4" } [tool.poetry.group.dev.dependencies] pytest-asyncio = "^0.23.1" diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py index 8e12a3cf9..bc430e941 100644 --- a/src/backend/langflow/__main__.py +++ b/src/backend/langflow/__main__.py @@ -109,7 +109,11 @@ def version_callback(value: bool): @app.callback() def main_entry_point( version: bool = typer.Option( - None, "--version", callback=version_callback, is_eager=True, help="Show the version and exit." + None, + "--version", + callback=version_callback, + is_eager=True, + help="Show the version and exit.", ), ): """ diff --git a/src/backend/langflow/alembic.ini b/src/backend/langflow/alembic.ini index 379661422..9739c069d 100644 --- a/src/backend/langflow/alembic.ini +++ b/src/backend/langflow/alembic.ini @@ -63,7 +63,7 @@ version_path_separator = os # Use os.pathsep. Default configuration used for ne # This is the path to the db in the root of the project. # When the user runs the Langflow the database url will # be set dinamically. -sqlalchemy.url = sqlite:///../../../langflow.db +sqlalchemy.url = sqlite:///./langflow.db [post_write_hooks] @@ -98,7 +98,7 @@ handlers = qualname = sqlalchemy.engine [logger_alembic] -level = INFO +level = DEBUG handlers = qualname = alembic diff --git a/src/backend/langflow/alembic/env.py b/src/backend/langflow/alembic/env.py index 283b24a6f..479db05bb 100644 --- a/src/backend/langflow/alembic/env.py +++ b/src/backend/langflow/alembic/env.py @@ -1,10 +1,11 @@ +import os from logging.config import fileConfig -from sqlalchemy import engine_from_config -from sqlalchemy import pool - from alembic import context +from loguru import logger +from sqlalchemy import engine_from_config, pool +from langflow.services.database.models import * # noqa from langflow.services.database.service import SQLModel # this is the Alembic Config object, which provides @@ -40,7 +41,8 @@ def run_migrations_offline() -> None: script output. """ - url = config.get_main_option("sqlalchemy.url") + url = os.getenv("LANGFLOW_DATABASE_URL") + url = url or config.get_main_option("sqlalchemy.url") context.configure( url=url, target_metadata=target_metadata, @@ -60,12 +62,17 @@ def run_migrations_online() -> None: and associate a connection with the context. """ - connectable = engine_from_config( - config.get_section(config.config_ini_section, {}), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) + from langflow.services.deps import get_db_service + try: + connectable = get_db_service().engine + except Exception as e: + logger.error(f"Error getting database engine: {e}") + connectable = engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) with connectable.connect() as connection: context.configure( connection=connection, target_metadata=target_metadata, render_as_batch=True diff --git a/src/backend/langflow/alembic/script.py.mako b/src/backend/langflow/alembic/script.py.mako index 6ce335109..2fbdc930d 100644 --- a/src/backend/langflow/alembic/script.py.mako +++ b/src/backend/langflow/alembic/script.py.mako @@ -10,6 +10,7 @@ from typing import Sequence, Union from alembic import op import sqlalchemy as sa import sqlmodel +from sqlalchemy.engine.reflection import Inspector ${imports if imports else ""} # revision identifiers, used by Alembic. @@ -20,8 +21,12 @@ depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} def upgrade() -> None: + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore ${upgrades if upgrades else "pass"} def downgrade() -> None: + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore ${downgrades if downgrades else "pass"} diff --git a/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py index dd3ccbe32..e5958ab73 100644 --- a/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +++ b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py @@ -5,28 +5,43 @@ Revises: 1ef9c4f3765d Create Date: 2023-12-13 18:55:52.587360 """ + from typing import Sequence, Union from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = '006b3990db50' -down_revision: Union[str, None] = '1ef9c4f3765d' +revision: str = "006b3990db50" +down_revision: Union[str, None] = "1ef9c4f3765d" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + api_key_constraints = inspector.get_unique_constraints("apikey") + flow_constraints = inspector.get_unique_constraints("flow") + user_constraints = inspector.get_unique_constraints("user") try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.create_unique_constraint('uq_apikey_id', ['id']) + if not any( + constraint["name"] == "uq_apikey_id" for constraint in api_key_constraints + ): + with op.batch_alter_table("apikey", schema=None) as batch_op: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.create_unique_constraint('uq_flow_id', ['id']) - - with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.create_unique_constraint('uq_user_id', ['id']) + batch_op.create_unique_constraint("uq_apikey_id", ["id"]) + if not any( + constraint["name"] == "uq_flow_id" for constraint in flow_constraints + ): + with op.batch_alter_table("flow", schema=None) as batch_op: + batch_op.create_unique_constraint("uq_flow_id", ["id"]) + if not any( + constraint["name"] == "uq_user_id" for constraint in user_constraints + ): + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.create_unique_constraint("uq_user_id", ["id"]) except Exception as e: print(e) pass @@ -36,15 +51,24 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + api_key_constraints = inspector.get_unique_constraints("apikey") + flow_constraints = inspector.get_unique_constraints("flow") + user_constraints = inspector.get_unique_constraints("user") try: - with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.drop_constraint('uq_user_id', type_='unique') + if any( + constraint["name"] == "uq_apikey_id" for constraint in api_key_constraints + ): + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.drop_constraint("uq_user_id", type_="unique") + if any(constraint["name"] == "uq_flow_id" for constraint in flow_constraints): + with op.batch_alter_table("flow", schema=None) as batch_op: + batch_op.drop_constraint("uq_flow_id", type_="unique") + if any(constraint["name"] == "uq_user_id" for constraint in user_constraints): - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_constraint('uq_flow_id', type_='unique') - - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.drop_constraint('uq_apikey_id', type_='unique') + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.drop_constraint("uq_apikey_id", type_="unique") except Exception as e: print(e) pass diff --git a/src/backend/langflow/alembic/versions/0b8757876a7c_.py b/src/backend/langflow/alembic/versions/0b8757876a7c_.py index 61b769694..da9e612f8 100644 --- a/src/backend/langflow/alembic/versions/0b8757876a7c_.py +++ b/src/backend/langflow/alembic/versions/0b8757876a7c_.py @@ -5,67 +5,25 @@ Revises: 006b3990db50 Create Date: 2024-01-17 10:32:56.686287 """ + from typing import Sequence, Union -from alembic import op - # revision identifiers, used by Alembic. -revision: str = '0b8757876a7c' -down_revision: Union[str, None] = '006b3990db50' +revision: str = "0b8757876a7c" +down_revision: Union[str, None] = "006b3990db50" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.create_index(batch_op.f('ix_apikey_api_key'), ['api_key'], unique=True) - batch_op.create_index(batch_op.f('ix_apikey_name'), ['name'], unique=False) - batch_op.create_index(batch_op.f('ix_apikey_user_id'), ['user_id'], unique=False) - except Exception as e: - print(e) - pass - try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.create_index(batch_op.f('ix_flow_description'), ['description'], unique=False) - batch_op.create_index(batch_op.f('ix_flow_name'), ['name'], unique=False) - batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False) - except Exception as e: - print(e) - pass + pass - try: - with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.create_index(batch_op.f('ix_user_username'), ['username'], unique=True) - except Exception as e: - print(e) - pass # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - try: - with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.drop_index(batch_op.f('ix_user_username')) - except Exception as e: - print(e) - pass - try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_index(batch_op.f('ix_flow_user_id')) - batch_op.drop_index(batch_op.f('ix_flow_name')) - batch_op.drop_index(batch_op.f('ix_flow_description')) - except Exception as e: - print(e) - pass - try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.drop_index(batch_op.f('ix_apikey_user_id')) - batch_op.drop_index(batch_op.f('ix_apikey_name')) - batch_op.drop_index(batch_op.f('ix_apikey_api_key')) - except Exception as e: - print(e) - pass - # ### end Alembic commands ### \ No newline at end of file + + pass + # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/1ef9c4f3765d_.py b/src/backend/langflow/alembic/versions/1ef9c4f3765d_.py index f2bc42917..df92f1f02 100644 --- a/src/backend/langflow/alembic/versions/1ef9c4f3765d_.py +++ b/src/backend/langflow/alembic/versions/1ef9c4f3765d_.py @@ -6,6 +6,7 @@ Revises: fd531f8868b1 Create Date: 2023-12-04 15:00:27.968998 """ + from typing import Sequence, Union import sqlalchemy as sa @@ -13,8 +14,8 @@ import sqlmodel from alembic import op # revision identifiers, used by Alembic. -revision: str = '1ef9c4f3765d' -down_revision: Union[str, None] = 'fd531f8868b1' +revision: str = "1ef9c4f3765d" +down_revision: Union[str, None] = "fd531f8868b1" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None @@ -22,10 +23,10 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.alter_column('name', - existing_type=sqlmodel.sql.sqltypes.AutoString(), - nullable=True) + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.alter_column( + "name", existing_type=sqlmodel.sql.sqltypes.AutoString(), nullable=True + ) except Exception as e: pass # ### end Alembic commands ### @@ -34,10 +35,8 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.alter_column('name', - existing_type=sa.VARCHAR(), - nullable=False) + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.alter_column("name", existing_type=sa.VARCHAR(), nullable=False) except Exception as e: pass # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py b/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py index 48c56e90d..0d7eed582 100644 --- a/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py +++ b/src/backend/langflow/alembic/versions/260dbcc8b680_adds_tables.py @@ -5,6 +5,7 @@ Revises: Create Date: 2023-08-27 19:49:02.681355 """ + from typing import Sequence, Union import sqlalchemy as sa @@ -33,7 +34,9 @@ def upgrade() -> None: if "ix_flowstyle_flow_id" in [ index["name"] for index in inspector.get_indexes("flowstyle") ]: - op.drop_index("ix_flowstyle_flow_id", table_name="flowstyle") + op.drop_index( + "ix_flowstyle_flow_id", table_name="flowstyle", if_exists=True + ) existing_indices_flow = [] existing_fks_flow = [] @@ -80,8 +83,7 @@ def upgrade() -> None: sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False), sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False), sa.ForeignKeyConstraint( - ["user_id"], - ["user.id"], + ["user_id"], ["user.id"], name="fk_apikey_user_id_user" ), sa.PrimaryKeyConstraint("id", name="pk_apikey"), sa.UniqueConstraint("id", name="uq_apikey_id"), @@ -103,8 +105,7 @@ def upgrade() -> None: sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False), sa.ForeignKeyConstraint( - ["user_id"], - ["user.id"], + ["user_id"], ["user.id"], name="fk_flow_user_id_user" ), sa.PrimaryKeyConstraint("id", name="pk_flow"), sa.UniqueConstraint("id", name="uq_flow_id"), @@ -151,21 +152,21 @@ def downgrade() -> None: existing_tables = inspector.get_table_names() if "flow" in existing_tables: with op.batch_alter_table("flow", schema=None) as batch_op: - batch_op.drop_index(batch_op.f("ix_flow_user_id")) - batch_op.drop_index(batch_op.f("ix_flow_name")) - batch_op.drop_index(batch_op.f("ix_flow_description")) + batch_op.drop_index(batch_op.f("ix_flow_user_id"), if_exists=True) + batch_op.drop_index(batch_op.f("ix_flow_name"), if_exists=True) + batch_op.drop_index(batch_op.f("ix_flow_description"), if_exists=True) op.drop_table("flow") if "apikey" in existing_tables: with op.batch_alter_table("apikey", schema=None) as batch_op: - batch_op.drop_index(batch_op.f("ix_apikey_user_id")) - batch_op.drop_index(batch_op.f("ix_apikey_name")) - batch_op.drop_index(batch_op.f("ix_apikey_api_key")) + batch_op.drop_index(batch_op.f("ix_apikey_user_id"), if_exists=True) + batch_op.drop_index(batch_op.f("ix_apikey_name"), if_exists=True) + batch_op.drop_index(batch_op.f("ix_apikey_api_key"), if_exists=True) op.drop_table("apikey") if "user" in existing_tables: with op.batch_alter_table("user", schema=None) as batch_op: - batch_op.drop_index(batch_op.f("ix_user_username")) + batch_op.drop_index(batch_op.f("ix_user_username"), if_exists=True) op.drop_table("user") diff --git a/src/backend/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py b/src/backend/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py index 1ac3e1a13..ce2d2cd76 100644 --- a/src/backend/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +++ b/src/backend/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py @@ -5,34 +5,44 @@ Revises: 7d2162acc8b2 Create Date: 2023-11-24 10:45:38.465302 """ + from typing import Sequence, Union import sqlalchemy as sa import sqlmodel from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = '2ac71eb9c3ae' -down_revision: Union[str, None] = '7d2162acc8b2' +revision: str = "2ac71eb9c3ae" +down_revision: Union[str, None] = "7d2162acc8b2" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + tables = inspector.get_table_names() try: - op.create_table('credential', - sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=True), - sa.Column('value', sqlmodel.sql.sqltypes.AutoString(), nullable=True), - sa.Column('provider', sqlmodel.sql.sqltypes.AutoString(), nullable=True), - sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.Column('id', sqlmodel.sql.sqltypes.GUID(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id'), - ) + if "credential" not in tables: + op.create_table( + "credential", + sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column("value", sqlmodel.sql.sqltypes.AutoString(), nullable=True), + sa.Column( + "provider", sqlmodel.sql.sqltypes.AutoString(), nullable=True + ), + sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.Column("created_at", sa.DateTime(), nullable=False), + sa.Column("updated_at", sa.DateTime(), nullable=True), + sa.PrimaryKeyConstraint("id"), + ) except Exception as e: print(e) + pass # ### end Alembic commands ### @@ -40,7 +50,7 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### try: - op.drop_table('credential') + op.drop_table("credential") except Exception as e: print(e) pass diff --git a/src/backend/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py b/src/backend/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py index 6ce9316ac..0d97df314 100644 --- a/src/backend/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +++ b/src/backend/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py @@ -5,6 +5,7 @@ Revises: 260dbcc8b680 Create Date: 2023-09-08 07:36:13.387318 """ + from typing import Sequence, Union import sqlalchemy as sa @@ -21,29 +22,36 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - conn = op.get_bind() - inspector = Inspector.from_engine(conn) # type: ignore - if "user" in inspector.get_table_names() and "profile_image" not in [ - column["name"] for column in inspector.get_columns("user") - ]: - with op.batch_alter_table("user", schema=None) as batch_op: - batch_op.add_column( - sa.Column( - "profile_image", sqlmodel.sql.sqltypes.AutoString(), nullable=True + try: + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + if "user" in inspector.get_table_names() and "profile_image" not in [ + column["name"] for column in inspector.get_columns("user") + ]: + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.add_column( + sa.Column( + "profile_image", + sqlmodel.sql.sqltypes.AutoString(), + nullable=True, + ) ) - ) - + except Exception as e: + print(e) # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - conn = op.get_bind() - inspector = Inspector.from_engine(conn) # type: ignore - if "user" in inspector.get_table_names() and "profile_image" in [ - column["name"] for column in inspector.get_columns("user") - ]: - with op.batch_alter_table("user", schema=None) as batch_op: - batch_op.drop_column("profile_image") + try: + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + if "user" in inspector.get_table_names() and "profile_image" in [ + column["name"] for column in inspector.get_columns("user") + ]: + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.drop_column("profile_image") + except Exception as e: + print(e) # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/7843803a87b5_store_updates.py b/src/backend/langflow/alembic/versions/7843803a87b5_store_updates.py index e0b844b61..b1565cd0f 100644 --- a/src/backend/langflow/alembic/versions/7843803a87b5_store_updates.py +++ b/src/backend/langflow/alembic/versions/7843803a87b5_store_updates.py @@ -5,12 +5,13 @@ Revises: eb5866d51fd2 Create Date: 2023-10-18 23:08:57.744906 """ + from typing import Sequence, Union import sqlalchemy as sa import sqlmodel from alembic import op -from loguru import logger +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. revision: str = "7843803a87b5" @@ -21,19 +22,26 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + flow_columns = [column["name"] for column in inspector.get_columns("flow")] + user_columns = [column["name"] for column in inspector.get_columns("user")] try: - with op.batch_alter_table("flow", schema=None) as batch_op: - batch_op.add_column(sa.Column("is_component", sa.Boolean(), nullable=True)) - - with op.batch_alter_table("user", schema=None) as batch_op: - batch_op.add_column( - sa.Column( - "store_api_key", sqlmodel.AutoString(), nullable=True + if "is_component" not in flow_columns: + with op.batch_alter_table("flow", schema=None) as batch_op: + batch_op.add_column( + sa.Column("is_component", sa.Boolean(), nullable=True) ) - ) except Exception as e: - logger.exception(e) - + pass + try: + if "store_api_key" not in user_columns: + with op.batch_alter_table("user", schema=None) as batch_op: + batch_op.add_column( + sa.Column("store_api_key", sqlmodel.AutoString(), nullable=True) + ) + except Exception as e: + pass # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py b/src/backend/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py index 01dd38cfd..5ed929568 100644 --- a/src/backend/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +++ b/src/backend/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py @@ -5,88 +5,74 @@ Revises: f5ee9749d1a6 Create Date: 2023-11-21 20:56:53.998781 """ + from typing import Sequence, Union import sqlalchemy as sa import sqlmodel from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = '7d2162acc8b2' -down_revision: Union[str, None] = 'f5ee9749d1a6' +revision: str = "7d2162acc8b2" +down_revision: Union[str, None] = "f5ee9749d1a6" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + api_key_columns = [column["name"] for column in inspector.get_columns("apikey")] + flow_columns = [column["name"] for column in inspector.get_columns("flow")] + try: - with op.batch_alter_table('component', schema=None) as batch_op: - batch_op.drop_index('ix_component_frontend_node_id') - batch_op.drop_index('ix_component_name') - op.drop_table('component') - op.drop_table('flowstyle') + if "name" in api_key_columns: + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.alter_column( + "name", existing_type=sa.VARCHAR(), nullable=False + ) except Exception as e: print(e) - pass - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.alter_column('name', - existing_type=sa.VARCHAR(), - nullable=False) - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True)) + pass + try: + with op.batch_alter_table("flow", schema=None) as batch_op: + if "updated_at" not in flow_columns: + batch_op.add_column( + sa.Column("updated_at", sa.DateTime(), nullable=True) + ) + if "folder" not in flow_columns: + batch_op.add_column( + sa.Column( + "folder", sqlmodel.sql.sqltypes.AutoString(), nullable=True + ) + ) + except Exception as e: + print(e) + + pass + # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_column('folder') - batch_op.drop_column('updated_at') + with op.batch_alter_table("flow", schema=None) as batch_op: + batch_op.drop_column("folder") + batch_op.drop_column("updated_at") except Exception as e: print(e) pass try: - with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.alter_column('name', - existing_type=sa.VARCHAR(), - nullable=True) + with op.batch_alter_table("apikey", schema=None) as batch_op: + batch_op.alter_column("name", existing_type=sa.VARCHAR(), nullable=True) except Exception as e: print(e) pass - try: - op.create_table('flowstyle', - sa.Column('color', sa.VARCHAR(), nullable=False), - sa.Column('emoji', sa.VARCHAR(), nullable=False), - sa.Column('flow_id', sa.CHAR(length=32), nullable=True), - sa.Column('id', sa.CHAR(length=32), nullable=False), - sa.ForeignKeyConstraint(['flow_id'], ['flow.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('id') - ) - op.create_table('component', - sa.Column('id', sa.CHAR(length=32), nullable=False), - sa.Column('frontend_node_id', sa.CHAR(length=32), nullable=False), - sa.Column('name', sa.VARCHAR(), nullable=False), - sa.Column('description', sa.VARCHAR(), nullable=True), - sa.Column('python_code', sa.VARCHAR(), nullable=True), - sa.Column('return_type', sa.VARCHAR(), nullable=True), - sa.Column('is_disabled', sa.BOOLEAN(), nullable=False), - sa.Column('is_read_only', sa.BOOLEAN(), nullable=False), - sa.Column('create_at', sa.DATETIME(), nullable=False), - sa.Column('update_at', sa.DATETIME(), nullable=False), - sa.PrimaryKeyConstraint('id') - ) - with op.batch_alter_table('component', schema=None) as batch_op: - batch_op.create_index('ix_component_name', ['name'], unique=False) - batch_op.create_index('ix_component_frontend_node_id', ['frontend_node_id'], unique=False) - except Exception as e: - print(e) - pass # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py b/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py index 8a2e90abc..bb3c0c7cd 100644 --- a/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +++ b/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py @@ -5,55 +5,105 @@ Revises: 0b8757876a7c Create Date: 2024-01-26 13:31:14.797548 """ + from typing import Sequence, Union import sqlalchemy as sa import sqlmodel from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = 'b2fa308044b5' -down_revision: Union[str, None] = '0b8757876a7c' +revision: str = "b2fa308044b5" +down_revision: Union[str, None] = "0b8757876a7c" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + tables = inspector.get_table_names() # ### commands auto generated by Alembic - please adjust! ### try: - op.drop_table('flowstyle') - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.add_column(sa.Column('is_component', sa.Boolean(), nullable=True)) - batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True)) - batch_op.add_column(sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=True)) - batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False) - batch_op.create_foreign_key('fk_flow_user_id_user', 'user', ['user_id'], ['id']) + if "flowstyle" in tables: + op.drop_table("flowstyle") + with op.batch_alter_table("flow", schema=None) as batch_op: + flow_columns = [column["name"] for column in inspector.get_columns("flow")] + if "is_component" not in flow_columns: + batch_op.add_column( + sa.Column("is_component", sa.Boolean(), nullable=True) + ) + if "updated_at" not in flow_columns: + batch_op.add_column( + sa.Column("updated_at", sa.DateTime(), nullable=True) + ) + if "folder" not in flow_columns: + batch_op.add_column( + sa.Column( + "folder", sqlmodel.sql.sqltypes.AutoString(), nullable=True + ) + ) + if "user_id" not in flow_columns: + batch_op.add_column( + sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=True) + ) + indices = inspector.get_indexes("flow") + indices_names = [index["name"] for index in indices] + if "ix_flow_user_id" not in indices_names: + batch_op.create_index( + batch_op.f("ix_flow_user_id"), ["user_id"], unique=False + ) + if "fk_flow_user_id_user" not in indices_names: + batch_op.create_foreign_key( + "fk_flow_user_id_user", "user", ["user_id"], ["id"] + ) + except Exception: pass # ### end Alembic commands ### def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_constraint('fk_flow_user_id_user', type_='foreignkey') - batch_op.drop_index(batch_op.f('ix_flow_user_id')) - batch_op.drop_column('user_id') - batch_op.drop_column('folder') - batch_op.drop_column('updated_at') - batch_op.drop_column('is_component') + # Re-create the dropped table 'flowstyle' if it was previously dropped in upgrade + if "flowstyle" not in inspector.get_table_names(): + op.create_table( + "flowstyle", + sa.Column("color", sa.String(), nullable=False), + sa.Column("emoji", sa.String(), nullable=False), + sa.Column("flow_id", sqlmodel.sql.sqltypes.GUID(), nullable=True), + sa.Column("id", sqlmodel.sql.sqltypes.GUID(), nullable=False), + sa.ForeignKeyConstraint(["flow_id"], ["flow.id"]), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint("id"), + ) - op.create_table('flowstyle', - sa.Column('color', sa.VARCHAR(), nullable=False), - sa.Column('emoji', sa.VARCHAR(), nullable=False), - sa.Column('flow_id', sa.CHAR(length=32), nullable=True), - sa.Column('id', sa.CHAR(length=32), nullable=False), - sa.ForeignKeyConstraint(['flow_id'], ['flow.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('id') - ) - except Exception: - pass - # ### end Alembic commands ### + with op.batch_alter_table("flow", schema=None) as batch_op: + # Check and remove newly added columns and constraints in upgrade + flow_columns = [column["name"] for column in inspector.get_columns("flow")] + if "user_id" in flow_columns: + batch_op.drop_column("user_id") + if "folder" in flow_columns: + batch_op.drop_column("folder") + if "updated_at" in flow_columns: + batch_op.drop_column("updated_at") + if "is_component" in flow_columns: + batch_op.drop_column("is_component") + + indices = inspector.get_indexes("flow") + indices_names = [index["name"] for index in indices] + if "ix_flow_user_id" in indices_names: + batch_op.drop_index("ix_flow_user_id") + # Assuming fk_flow_user_id_user is a foreign key constraint's name, not an index + constraints = inspector.get_foreign_keys("flow") + constraint_names = [constraint["name"] for constraint in constraints] + if "fk_flow_user_id_user" in constraint_names: + batch_op.drop_constraint("fk_flow_user_id_user", type_="foreignkey") + + except Exception as e: + # It's generally a good idea to log the exception or handle it in a way other than a bare pass + print(f"Error during downgrade: {e}") diff --git a/src/backend/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py b/src/backend/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py index 3ad7ba5f3..cfbf74f06 100644 --- a/src/backend/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +++ b/src/backend/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py @@ -5,46 +5,68 @@ Revises: b2fa308044b5 Create Date: 2024-01-26 13:34:14.496769 """ + from typing import Sequence, Union import sqlalchemy as sa import sqlmodel from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = 'bc2f01c40e4a' -down_revision: Union[str, None] = 'b2fa308044b5' +revision: str = "bc2f01c40e4a" +down_revision: Union[str, None] = "b2fa308044b5" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.add_column(sa.Column('is_component', sa.Boolean(), nullable=True)) - batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True)) - batch_op.add_column(sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=True)) - batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False) - batch_op.create_foreign_key('flow_user_id_fkey' - , 'user', ['user_id'], ['id']) - except Exception: - pass - # ### end Alembic commands ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + flow_columns = {column["name"] for column in inspector.get_columns("flow")} + flow_indexes = {index["name"] for index in inspector.get_indexes("flow")} + flow_fks = {fk["name"] for fk in inspector.get_foreign_keys("flow")} + + with op.batch_alter_table("flow", schema=None) as batch_op: + if "is_component" not in flow_columns: + batch_op.add_column(sa.Column("is_component", sa.Boolean(), nullable=True)) + if "updated_at" not in flow_columns: + batch_op.add_column(sa.Column("updated_at", sa.DateTime(), nullable=True)) + if "folder" not in flow_columns: + batch_op.add_column( + sa.Column("folder", sqlmodel.sql.sqltypes.AutoString(), nullable=True) + ) + if "user_id" not in flow_columns: + batch_op.add_column( + sa.Column("user_id", sqlmodel.sql.sqltypes.GUID(), nullable=True) + ) + if "ix_flow_user_id" not in flow_indexes: + batch_op.create_index( + batch_op.f("ix_flow_user_id"), ["user_id"], unique=False + ) + if "flow_user_id_fkey" not in flow_fks: + batch_op.create_foreign_key( + "flow_user_id_fkey", "user", ["user_id"], ["id"] + ) def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - try: - with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_constraint('flow_user_id_fkey', type_='foreignkey') - batch_op.drop_index(batch_op.f('ix_flow_user_id')) - batch_op.drop_column('user_id') - batch_op.drop_column('folder') - batch_op.drop_column('updated_at') - batch_op.drop_column('is_component') - except Exception: - pass + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + flow_columns = {column["name"] for column in inspector.get_columns("flow")} + flow_indexes = {index["name"] for index in inspector.get_indexes("flow")} + flow_fks = {fk["name"] for fk in inspector.get_foreign_keys("flow")} - # ### end Alembic commands ### + with op.batch_alter_table("flow", schema=None) as batch_op: + if "flow_user_id_fkey" in flow_fks: + batch_op.drop_constraint("flow_user_id_fkey", type_="foreignkey") + if "ix_flow_user_id" in flow_indexes: + batch_op.drop_index(batch_op.f("ix_flow_user_id")) + if "user_id" in flow_columns: + batch_op.drop_column("user_id") + if "folder" in flow_columns: + batch_op.drop_column("folder") + if "updated_at" in flow_columns: + batch_op.drop_column("updated_at") + if "is_component" in flow_columns: + batch_op.drop_column("is_component") diff --git a/src/backend/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py b/src/backend/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py index 59b94ecec..4da04c325 100644 --- a/src/backend/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +++ b/src/backend/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py @@ -5,11 +5,10 @@ Revises: 67cc006d50bf Create Date: 2023-10-04 10:18:25.640458 """ + from typing import Sequence, Union -import sqlalchemy as sa from alembic import op -from sqlalchemy import exc # revision identifiers, used by Alembic. revision: str = "eb5866d51fd2" @@ -21,70 +20,12 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### connection = op.get_bind() - try: - op.drop_table("flowstyle") - with op.batch_alter_table("component", schema=None) as batch_op: - batch_op.drop_index("ix_component_frontend_node_id") - batch_op.drop_index("ix_component_name") - except exc.SQLAlchemyError: - # connection.execute(text("ROLLBACK")) - pass - except Exception as e: - print(e) - pass - try: - op.drop_table("component") - except exc.SQLAlchemyError: - # connection.execute(text("ROLLBACK")) - pass - except Exception as e: - print(e) - pass + pass # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - try: - op.create_table( - "component", - sa.Column("id", sa.CHAR(length=32), nullable=False), - sa.Column("frontend_node_id", sa.CHAR(length=32), nullable=False), - sa.Column("name", sa.VARCHAR(), nullable=False), - sa.Column("description", sa.VARCHAR(), nullable=True), - sa.Column("python_code", sa.VARCHAR(), nullable=True), - sa.Column("return_type", sa.VARCHAR(), nullable=True), - sa.Column("is_disabled", sa.BOOLEAN(), nullable=False), - sa.Column("is_read_only", sa.BOOLEAN(), nullable=False), - sa.Column("create_at", sa.DATETIME(), nullable=False), - sa.Column("update_at", sa.DATETIME(), nullable=False), - sa.PrimaryKeyConstraint("id", name="pk_component"), - ) - with op.batch_alter_table("component", schema=None) as batch_op: - batch_op.create_index("ix_component_name", ["name"], unique=False) - batch_op.create_index( - "ix_component_frontend_node_id", ["frontend_node_id"], unique=False - ) - except Exception as e: - print(e) - pass - - try: - op.create_table( - "flowstyle", - sa.Column("color", sa.VARCHAR(), nullable=False), - sa.Column("emoji", sa.VARCHAR(), nullable=False), - sa.Column("flow_id", sa.CHAR(length=32), nullable=True), - sa.Column("id", sa.CHAR(length=32), nullable=False), - sa.ForeignKeyConstraint( - ["flow_id"], - ["flow.id"], - ), - sa.PrimaryKeyConstraint("id", name="pk_flowstyle"), - sa.UniqueConstraint("id", name="uq_flowstyle_id"), - ) - except Exception as e: - print(e) - pass + pass # ### end Alembic commands ### diff --git a/src/backend/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py b/src/backend/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py index d9aab403f..494de22ac 100644 --- a/src/backend/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +++ b/src/backend/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py @@ -5,6 +5,7 @@ Revises: 7843803a87b5 Create Date: 2023-10-18 23:12:27.297016 """ + from typing import Sequence, Union import sqlalchemy as sa diff --git a/src/backend/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py b/src/backend/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py index 2bcaacd68..77e6acd75 100644 --- a/src/backend/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +++ b/src/backend/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py @@ -5,22 +5,35 @@ Revises: 2ac71eb9c3ae Create Date: 2023-11-24 15:07:37.566516 """ -from typing import Sequence, Union + +from typing import Optional, Sequence, Union from alembic import op +from sqlalchemy.engine.reflection import Inspector # revision identifiers, used by Alembic. -revision: str = 'fd531f8868b1' -down_revision: Union[str, None] = '2ac71eb9c3ae' +revision: str = "fd531f8868b1" +down_revision: Union[str, None] = "2ac71eb9c3ae" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + tables = inspector.get_table_names() + foreign_keys_names = [] + if "credential" in tables: + foreign_keys = inspector.get_foreign_keys("credential") + foreign_keys_names = [fk["name"] for fk in foreign_keys] + try: - with op.batch_alter_table('credential', schema=None) as batch_op: - batch_op.create_foreign_key("fk_credential_user_id", 'user', ['user_id'], ['id']) + if "credential" in tables and "fk_credential_user_id" not in foreign_keys_names: + with op.batch_alter_table("credential", schema=None) as batch_op: + batch_op.create_foreign_key( + "fk_credential_user_id", "user", ["user_id"], ["id"] + ) except Exception as e: print(e) pass @@ -30,9 +43,17 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### + conn = op.get_bind() + inspector = Inspector.from_engine(conn) # type: ignore + tables = inspector.get_table_names() + foreign_keys_names: list[Optional[str]] = [] + if "credential" in tables: + foreign_keys = inspector.get_foreign_keys("credential") + foreign_keys_names = [fk["name"] for fk in foreign_keys] try: - with op.batch_alter_table('credential', schema=None) as batch_op: - batch_op.drop_constraint("fk_credential_user_id", type_='foreignkey') + if "credential" in tables and "fk_credential_user_id" in foreign_keys_names: + with op.batch_alter_table("credential", schema=None) as batch_op: + batch_op.drop_constraint("fk_credential_user_id", type_="foreignkey") except Exception as e: print(e) pass diff --git a/src/backend/langflow/api/utils.py b/src/backend/langflow/api/utils.py index f92fb2986..fc9a4cb7f 100644 --- a/src/backend/langflow/api/utils.py +++ b/src/backend/langflow/api/utils.py @@ -3,9 +3,7 @@ from pathlib import Path from typing import TYPE_CHECKING, List, Optional from fastapi import HTTPException -from langchain_core.documents import Document from platformdirs import user_cache_dir -from pydantic import BaseModel from sqlmodel import Session from langflow.graph.graph.base import Graph @@ -199,20 +197,6 @@ def format_elapsed_time(elapsed_time: float) -> str: return f"{minutes} {minutes_unit}, {seconds} {seconds_unit}" -def serialize_field(value): - """Unified serialization function for handling both BaseModel and Document types, - including handling lists of these types.""" - if isinstance(value, (list, tuple)): - return [serialize_field(v) for v in value] - elif isinstance(value, Document): - return value.to_json() - elif isinstance(value, BaseModel): - return value.model_dump() - elif isinstance(value, str): - return {"result": value} - return value - - def build_and_cache_graph( flow_id: str, session: Session, @@ -220,13 +204,37 @@ def build_and_cache_graph( graph: Optional[Graph] = None, ): """Build and cache the graph.""" - flow: Flow = session.get(Flow, flow_id) + flow: Optional[Flow] = session.get(Flow, flow_id) if not flow or not flow.data: raise ValueError("Invalid flow ID") - other_graph = Graph.from_payload(flow.data) + other_graph = Graph.from_payload(flow.data, flow_id) if graph is None: graph = other_graph else: graph = graph.update(other_graph) chat_service.set_cache(flow_id, graph) return graph + + +def format_syntax_error_message(exc: SyntaxError) -> str: + """Format a SyntaxError message for returning to the frontend.""" + if exc.text is None: + return f"Syntax error in code. Error on line {exc.lineno}" + return f"Syntax error in code. Error on line {exc.lineno}: {exc.text.strip()}" + + +def get_causing_exception(exc: BaseException) -> BaseException: + """Get the causing exception from an exception.""" + if hasattr(exc, "__cause__") and exc.__cause__: + return get_causing_exception(exc.__cause__) + return exc + + +def format_exception_message(exc: Exception) -> str: + """Format an exception message for returning to the frontend.""" + # We need to check if the __cause__ is a SyntaxError + # If it is, we need to return the message of the SyntaxError + causing_exception = get_causing_exception(exc) + if isinstance(causing_exception, SyntaxError): + return format_syntax_error_message(causing_exception) + return str(exc) diff --git a/src/backend/langflow/api/v1/base.py b/src/backend/langflow/api/v1/base.py index 01e4e9c79..2380b019e 100644 --- a/src/backend/langflow/api/v1/base.py +++ b/src/backend/langflow/api/v1/base.py @@ -68,8 +68,6 @@ INVALID_CHARACTERS = { ")", "[", "]", - "{", - "}", } INVALID_NAMES = { @@ -88,73 +86,110 @@ def validate_prompt(template: str): # Check if there are invalid characters in the input_variables input_variables = check_input_variables(input_variables) if any(var in INVALID_NAMES for var in input_variables): - raise ValueError(f"Invalid input variables. None of the variables can be named {', '.join(input_variables)}. ") + raise ValueError( + f"Invalid input variables. None of the variables can be named {', '.join(input_variables)}. " + ) try: PromptTemplate(template=template, input_variables=input_variables) except Exception as exc: - raise ValueError(str(exc)) from exc + raise ValueError(f"Invalid prompt: {exc}") from exc return input_variables -def check_input_variables(input_variables: list): +def is_json_like(var): + if var.startswith("{{") and var.endswith("}}"): + # If it is a double brance variable + # we don't want to validate any of its content + return True + # the above doesn't work on all cases because the json string can be multiline + # or indented which can add \n or spaces at the start or end of the string + # test_case_3 new_var == '\n{{\n "test": "hello",\n "text": "world"\n}}\n' + # what we can do is to remove the \n and spaces from the start and end of the string + # and then check if the string starts with {{ and ends with }} + var = var.strip() + var = var.replace("\n", "") + var = var.replace(" ", "") + # Now it should be a valid json string + return var.startswith("{{") and var.endswith("}}") + + +def fix_variable(var, invalid_chars, wrong_variables): + if not var: + return var, invalid_chars, wrong_variables + new_var = var + + # Handle variables starting with a number + if var[0].isdigit(): + invalid_chars.append(var[0]) + new_var, invalid_chars, wrong_variables = fix_variable( + var[1:], invalid_chars, wrong_variables + ) + + # Temporarily replace {{ and }} to avoid treating them as invalid + new_var = new_var.replace("{{", "ᴛᴇᴍᴘᴏᴘᴇɴ").replace("}}", "ᴛᴇᴍᴘᴄʟᴏsᴇ") + + # Remove invalid characters + for char in new_var: + if char in INVALID_CHARACTERS: + invalid_chars.append(char) + new_var = new_var.replace(char, "") + if var not in wrong_variables: # Avoid duplicating entries + wrong_variables.append(var) + + # Restore {{ and }} + new_var = new_var.replace("ᴛᴇᴍᴘᴏᴘᴇɴ", "{{").replace("ᴛᴇᴍᴘᴄʟᴏsᴇ", "}}") + + return new_var, invalid_chars, wrong_variables + + +def check_variable(var, invalid_chars, wrong_variables, empty_variables): + if any(char in invalid_chars for char in var): + wrong_variables.append(var) + elif var == "": + empty_variables.append(var) + return wrong_variables, empty_variables + + +def check_for_errors( + input_variables, fixed_variables, wrong_variables, empty_variables +): + if any(var for var in input_variables if var not in fixed_variables): + error_message = ( + f"Error: Input variables contain invalid characters or formats. \n" + f"Invalid variables: {', '.join(wrong_variables)}.\n" + f"Empty variables: {', '.join(empty_variables)}. \n" + f"Fixed variables: {', '.join(fixed_variables)}." + ) + raise ValueError(error_message) + + +def check_input_variables(input_variables): invalid_chars = [] fixed_variables = [] wrong_variables = [] empty_variables = [] - for variable in input_variables: - new_var = variable + variables_to_check = [] - # if variable is empty, then we should add that to the wrong variables - if not variable: - empty_variables.append(variable) + for var in input_variables: + # First, let's check if the variable is a JSON string + # because if it is, it won't be considered a variable + # and we don't need to validate it + if is_json_like(var): continue - # if variable starts with a number we should add that to the invalid chars - # and wrong variables - if variable[0].isdigit(): - invalid_chars.append(variable[0]) - new_var = new_var.replace(variable[0], "") - wrong_variables.append(variable) - else: - for char in INVALID_CHARACTERS: - if char in variable: - invalid_chars.append(char) - new_var = new_var.replace(char, "") - wrong_variables.append(variable) - fixed_variables.append(new_var) - # If any of the input_variables is not in the fixed_variables, then it means that - # there are invalid characters in the input_variables - - if any(var not in fixed_variables for var in input_variables): - error_message = build_error_message( - input_variables, - invalid_chars, - wrong_variables, - fixed_variables, - empty_variables, + new_var, wrong_variables, empty_variables = fix_variable( + var, invalid_chars, wrong_variables ) - raise ValueError(error_message) - return input_variables + wrong_variables, empty_variables = check_variable( + var, INVALID_CHARACTERS, wrong_variables, empty_variables + ) + fixed_variables.append(new_var) + variables_to_check.append(var) + check_for_errors( + variables_to_check, fixed_variables, wrong_variables, empty_variables + ) -def build_error_message(input_variables, invalid_chars, wrong_variables, fixed_variables, empty_variables): - input_variables_str = ", ".join([f"'{var}'" for var in input_variables]) - error_string = f"Invalid input variables: {input_variables_str}. " - - if wrong_variables and invalid_chars: - # fix the wrong variables replacing invalid chars and find them in the fixed variables - error_string_vars = "You can fix them by replacing the invalid characters: " - wvars = wrong_variables.copy() - for i, wrong_var in enumerate(wvars): - for char in invalid_chars: - wrong_var = wrong_var.replace(char, "") - if wrong_var in fixed_variables: - error_string_vars += f"'{wrong_variables[i]}' -> '{wrong_var}'" - error_string += error_string_vars - elif empty_variables: - error_string += f" There are {len(empty_variables)} empty variable{'s' if len(empty_variables) > 1 else ''}." - elif len(set(fixed_variables)) != len(fixed_variables): - error_string += "There are duplicate variables." - return error_string + return fixed_variables diff --git a/src/backend/langflow/api/v1/callback.py b/src/backend/langflow/api/v1/callback.py index 0a5e7f743..38737623c 100644 --- a/src/backend/langflow/api/v1/callback.py +++ b/src/backend/langflow/api/v1/callback.py @@ -1,128 +1,31 @@ -import asyncio from typing import TYPE_CHECKING, Any, Dict, List, Optional from uuid import UUID from langchain.schema import AgentAction, AgentFinish -from langchain_core.callbacks.base import AsyncCallbackHandler, BaseCallbackHandler -from langflow.api.v1.schemas import ChatResponse, PromptResponse -from langflow.services.deps import get_chat_service -from langflow.utils.util import remove_ansi_escape_codes +from langchain_core.callbacks.base import AsyncCallbackHandler from loguru import logger +from langflow.api.v1.schemas import ChatResponse, PromptResponse +from langflow.services.deps import get_chat_service, get_socket_service +from langflow.utils.util import remove_ansi_escape_codes + if TYPE_CHECKING: from langflow.services.socket.service import SocketIOService -class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler): - """Callback handler for streaming LLM responses.""" - - def __init__(self, client_id: str = None): - self.chat_service = get_chat_service() - self.client_id = client_id - self.websocket = self.chat_service.active_connections[self.client_id] - - async def on_llm_new_token(self, token: str, **kwargs: Any) -> None: - resp = ChatResponse(message=token, type="stream", intermediate_steps="") - await self.websocket.send_json(resp.model_dump()) - - async def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any: - """Run when tool starts running.""" - resp = ChatResponse( - message="", - type="stream", - intermediate_steps=f"Tool input: {input_str}", - ) - await self.websocket.send_json(resp.model_dump()) - - async def on_tool_end(self, output: str, **kwargs: Any) -> Any: - """Run when tool ends running.""" - observation_prefix = kwargs.get("observation_prefix", "Tool output: ") - split_output = output.split() - first_word = split_output[0] - rest_of_output = split_output[1:] - # Create a formatted message. - intermediate_steps = f"{observation_prefix}{first_word}" - - # Create a ChatResponse instance. - resp = ChatResponse( - message="", - type="stream", - intermediate_steps=intermediate_steps, - ) - rest_of_resps = [ - ChatResponse( - message="", - type="stream", - intermediate_steps=f"{word}", - ) - for word in rest_of_output - ] - resps = [resp] + rest_of_resps - # Try to send the response, handle potential errors. - - try: - # This is to emulate the stream of tokens - for resp in resps: - await self.websocket.send_json(resp.model_dump()) - except Exception as exc: - logger.error(f"Error sending response: {exc}") - - async def on_tool_error( - self, - error: BaseException, - *, - run_id: UUID, - parent_run_id: Optional[UUID] = None, - tags: Optional[List[str]] = None, - **kwargs: Any, - ) -> None: - """Run when tool errors.""" - - async def on_text(self, text: str, **kwargs: Any) -> Any: - """Run on arbitrary text.""" - # This runs when first sending the prompt - # to the LLM, adding it will send the final prompt - # to the frontend - if "Prompt after formatting" in text: - text = text.replace("Prompt after formatting:\n", "") - text = remove_ansi_escape_codes(text) - resp = PromptResponse( - prompt=text, - ) - await self.websocket.send_json(resp.model_dump()) - self.chat_service.chat_history.add_message(self.client_id, resp) - - async def on_agent_action(self, action: AgentAction, **kwargs: Any): - log = f"Thought: {action.log}" - # if there are line breaks, split them and send them - # as separate messages - if "\n" in log: - logs = log.split("\n") - for log in logs: - resp = ChatResponse(message="", type="stream", intermediate_steps=log) - await self.websocket.send_json(resp.model_dump()) - else: - resp = ChatResponse(message="", type="stream", intermediate_steps=log) - await self.websocket.send_json(resp.model_dump()) - - async def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any: - """Run on agent end.""" - resp = ChatResponse( - message="", - type="stream", - intermediate_steps=finish.log, - ) - await self.websocket.send_json(resp.model_dump()) - - # https://github.com/hwchase17/chat-langchain/blob/master/callback.py class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): """Callback handler for streaming LLM responses.""" + @property + def ignore_chain(self) -> bool: + """Whether to ignore chain callbacks.""" + return False + def __init__(self, session_id: str): self.chat_service = get_chat_service() self.client_id = session_id - self.socketio_service: "SocketIOService" = self.chat_service.socketio_service + self.socketio_service: "SocketIOService" = get_socket_service() self.sid = session_id # self.socketio_service = self.chat_service.active_connections[self.client_id] @@ -130,7 +33,9 @@ class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): resp = ChatResponse(message=token, type="stream", intermediate_steps="") await self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) - async def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any: + async def on_tool_start( + self, serialized: Dict[str, Any], input_str: str, **kwargs: Any + ) -> Any: """Run when tool starts running.""" resp = ChatResponse( message="", @@ -168,7 +73,9 @@ class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): try: # This is to emulate the stream of tokens for resp in resps: - await self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) + await self.socketio_service.emit_token( + to=self.sid, data=resp.model_dump() + ) except Exception as exc: logger.error(f"Error sending response: {exc}") @@ -194,8 +101,9 @@ class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): resp = PromptResponse( prompt=text, ) - await self.socketio_service.emit_message(to=self.sid, data=resp.model_dump()) - self.chat_service.chat_history.add_message(self.client_id, resp) + await self.socketio_service.emit_message( + to=self.sid, data=resp.model_dump() + ) async def on_agent_action(self, action: AgentAction, **kwargs: Any): log = f"Thought: {action.log}" @@ -205,7 +113,9 @@ class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): logs = log.split("\n") for log in logs: resp = ChatResponse(message="", type="stream", intermediate_steps=log) - await self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) + await self.socketio_service.emit_token( + to=self.sid, data=resp.model_dump() + ) else: resp = ChatResponse(message="", type="stream", intermediate_steps=log) await self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) @@ -218,19 +128,3 @@ class AsyncStreamingLLMCallbackHandleSIO(AsyncCallbackHandler): intermediate_steps=finish.log, ) await self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) - - -class StreamingLLMCallbackHandler(BaseCallbackHandler): - """Callback handler for streaming LLM responses.""" - - def __init__(self, client_id: str): - self.chat_service = get_chat_service() - self.client_id = client_id - self.socketio_service = self.chat_service.active_connections[self.client_id] - - def on_llm_new_token(self, token: str, **kwargs: Any) -> None: - resp = ChatResponse(message=token, type="stream", intermediate_steps="") - - loop = asyncio.get_event_loop() - coroutine = self.socketio_service.emit_token(to=self.sid, data=resp.model_dump()) - asyncio.run_coroutine_threadsafe(coroutine, loop) diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py index dd0d5da6c..fff0ff221 100644 --- a/src/backend/langflow/api/v1/chat.py +++ b/src/backend/langflow/api/v1/chat.py @@ -1,72 +1,35 @@ import time -from typing import Optional +import uuid +from typing import TYPE_CHECKING, Annotated, Optional -from fastapi import ( - APIRouter, - BackgroundTasks, - Depends, - HTTPException, - WebSocket, - WebSocketException, - status, -) +from fastapi import APIRouter, BackgroundTasks, Body, Depends, HTTPException +from fastapi.responses import StreamingResponse from loguru import logger -from sqlmodel import Session -from langflow.api.utils import build_and_cache_graph, format_elapsed_time +from langflow.api.utils import ( + build_and_cache_graph, + format_elapsed_time, + format_exception_message, +) from langflow.api.v1.schemas import ( - ResultData, + InputValueRequest, + ResultDataResponse, + StreamData, VertexBuildResponse, VerticesOrderResponse, ) -from langflow.graph.graph.base import Graph -from langflow.graph.vertex.types import RoutingVertex -from langflow.services.auth.utils import ( - get_current_active_user, - get_current_user_for_websocket, -) +from langflow.services.auth.utils import get_current_active_user from langflow.services.chat.service import ChatService -from langflow.services.deps import get_chat_service, get_session +from langflow.services.deps import get_chat_service, get_session, get_session_service from langflow.services.monitor.utils import log_vertex_build +if TYPE_CHECKING: + from langflow.graph.vertex.types import ChatVertex + from langflow.services.session.service import SessionService + router = APIRouter(tags=["Chat"]) -@router.websocket("/chat/{client_id}") -async def chat( - client_id: str, - websocket: WebSocket, - db: Session = Depends(get_session), - chat_service: "ChatService" = Depends(get_chat_service), -): - """Websocket endpoint for chat.""" - try: - user = await get_current_user_for_websocket(websocket, db) - await websocket.accept() - if not user: - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="Unauthorized") - elif not user.is_active: - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="Unauthorized") - - if client_id in chat_service.cache_service: - await chat_service.handle_websocket(client_id, websocket) - else: - # We accept the connection but close it immediately - # if the flow is not built yet - message = "Please, build the flow before sending messages" - await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=message) - except WebSocketException as exc: - logger.error(f"Websocket exrror: {exc}") - await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=str(exc)) - except Exception as exc: - logger.error(f"Error in chat websocket: {exc}") - messsage = exc.detail if isinstance(exc, HTTPException) else str(exc) - if "Could not validate credentials" in str(exc): - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="Unauthorized") - else: - await websocket.close(code=status.WS_1011_INTERNAL_ERROR, reason=messsage) - - async def try_running_celery_task(vertex, user_id): # Try running the task in celery # and set the task_id to the local vertex @@ -95,7 +58,7 @@ async def get_vertices( # First, we need to check if the flow_id is in the cache graph = None if cache := chat_service.get_cache(flow_id): - graph: Graph = cache.get("result") + graph = cache.get("result") graph = build_and_cache_graph(flow_id, session, chat_service, graph) if stop_component_id: try: @@ -109,7 +72,9 @@ async def get_vertices( # Now vertices is a list of lists # We need to get the id of each vertex # and return the same structure but only with the ids - return VerticesOrderResponse(ids=vertices) + run_id = uuid.uuid4() + graph.set_run_id(run_id) + return VerticesOrderResponse(ids=vertices, run_id=run_id) except Exception as exc: logger.error(f"Error checking build status: {exc}") @@ -122,87 +87,169 @@ async def build_vertex( flow_id: str, vertex_id: str, background_tasks: BackgroundTasks, + inputs: Annotated[Optional[InputValueRequest], Body(embed=True)] = None, chat_service: "ChatService" = Depends(get_chat_service), current_user=Depends(get_current_active_user), ): """Build a vertex instead of the entire graph.""" + {"inputs": {"input_value": "some value"}} start_time = time.perf_counter() + next_vertices_ids = [] try: start_time = time.perf_counter() cache = chat_service.get_cache(flow_id) if not cache: # If there's no cache - logger.warning(f"No cache found for {flow_id}. Building graph starting at {vertex_id}") - graph = build_and_cache_graph(flow_id=flow_id, session=next(get_session()), chat_service=chat_service) + logger.warning( + f"No cache found for {flow_id}. Building graph starting at {vertex_id}" + ) + graph = build_and_cache_graph( + flow_id=flow_id, session=next(get_session()), chat_service=chat_service + ) else: graph = cache.get("result") - result_dict = {} + result_data_response = ResultDataResponse(results={}) duration = "" vertex = graph.get_vertex(vertex_id) try: if not vertex.pinned or not vertex._built: - await vertex.build(user_id=current_user.id) - params = vertex._built_object_repr() - valid = True - result_dict = vertex.get_built_result() - # We need to set the artifacts to pass information - # to the frontend - vertex.set_artifacts() - artifacts = vertex.artifacts - result_dict = ResultData( - results=result_dict, - artifacts=artifacts, - ) - vertex.set_result(result_dict) - elif vertex.result is not None: + inputs_dict = inputs.model_dump() if inputs else {} + await vertex.build(user_id=current_user.id, inputs=inputs_dict) + + if vertex.result is not None: params = vertex._built_object_repr() valid = True result_dict = vertex.result artifacts = vertex.artifacts else: raise ValueError(f"No result found for vertex {vertex_id}") - if isinstance(vertex, RoutingVertex): - if vertex._built_object is True: - next_vertex_id = next(graph.next_vertex_to_build()) - else: - next_vertex_id = None - chat_service.set_cache(flow_id, graph) + result_data_response = ResultDataResponse(**result_dict.model_dump()) + except Exception as exc: - params = str(exc) + logger.exception(f"Error building vertex: {exc}") + params = format_exception_message(exc) valid = False - result_dict = ResultData(results={}) + result_data_response = ResultDataResponse(results={}) artifacts = {} # If there's an error building the vertex # we need to clear the cache chat_service.clear_cache(flow_id) # Log the vertex build - background_tasks.add_task( - log_vertex_build, - flow_id=flow_id, - vertex_id=vertex_id, - valid=valid, - params=params, - data=result_dict, - artifacts=artifacts, - ) + if not vertex.will_stream: + background_tasks.add_task( + log_vertex_build, + flow_id=flow_id, + vertex_id=vertex_id, + valid=valid, + params=params, + data=result_data_response, + artifacts=artifacts, + ) timedelta = time.perf_counter() - start_time duration = format_elapsed_time(timedelta) - result_dict.duration = duration - result_dict.timedelta = timedelta + result_data_response.duration = duration + result_data_response.timedelta = timedelta vertex.add_build_time(timedelta) + inactive_vertices = None + if graph.inactive_vertices: + inactive_vertices = list(graph.inactive_vertices) + graph.reset_inactive_vertices() + chat_service.set_cache(flow_id, graph) - return VertexBuildResponse( - next_vertex_id=next_vertex_id, + build_response = VertexBuildResponse( + next_vertices_ids=next_vertices_ids, + inactive_vertices=inactive_vertices, valid=valid, params=params, id=vertex.id, - data=result_dict, + data=result_data_response, ) + return build_response except Exception as exc: logger.error(f"Error building vertex: {exc}") logger.exception(exc) raise HTTPException(status_code=500, detail=str(exc)) from exc + + +# Now onto an endpoint that is an SSE endpoint +# it will receive a component_id and a flow_id +# +@router.get("/build/{flow_id}/{vertex_id}/stream", response_class=StreamingResponse) +async def build_vertex_stream( + flow_id: str, + vertex_id: str, + session_id: Optional[str] = None, + chat_service: "ChatService" = Depends(get_chat_service), + session_service: "SessionService" = Depends(get_session_service), +): + """Build a vertex instead of the entire graph.""" + try: + + async def stream_vertex(): + try: + if not session_id: + cache = chat_service.get_cache(flow_id) + if not cache: + # If there's no cache + raise ValueError(f"No cache found for {flow_id}.") + else: + graph = cache.get("result") + else: + session_data = await session_service.load_session( + session_id, flow_id=flow_id + ) + graph, artifacts = session_data if session_data else (None, None) + if not graph: + raise ValueError(f"No graph found for {flow_id}.") + + vertex: "ChatVertex" = graph.get_vertex(vertex_id) + if not hasattr(vertex, "stream"): + raise ValueError(f"Vertex {vertex_id} does not support streaming") + if isinstance(vertex._built_result, str) and vertex._built_result: + stream_data = StreamData( + event="message", + data={"message": f"Streaming vertex {vertex_id}"}, + ) + yield str(stream_data) + stream_data = StreamData( + event="message", + data={"chunk": vertex._built_result}, + ) + yield str(stream_data) + + elif not vertex.pinned or not vertex._built: + logger.debug(f"Streaming vertex {vertex_id}") + stream_data = StreamData( + event="message", + data={"message": f"Streaming vertex {vertex_id}"}, + ) + yield str(stream_data) + async for chunk in vertex.stream(): + stream_data = StreamData( + event="message", + data={"chunk": chunk}, + ) + yield str(stream_data) + elif vertex.result is not None: + stream_data = StreamData( + event="message", + data={"chunk": vertex._built_result}, + ) + yield str(stream_data) + else: + raise ValueError(f"No result found for vertex {vertex_id}") + + except Exception as exc: + logger.error(f"Error building vertex: {exc}") + yield str(StreamData(event="error", data={"error": str(exc)})) + finally: + logger.debug("Closing stream") + yield str(StreamData(event="close", data={"message": "Stream closed"})) + + return StreamingResponse(stream_vertex(), media_type="text/event-stream") + except Exception as exc: + raise HTTPException(status_code=500, detail="Error building vertex") from exc diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index 8a3f67ddf..bd07d38b2 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -3,112 +3,39 @@ from typing import Annotated, Any, List, Optional, Union import sqlalchemy as sa from fastapi import APIRouter, Body, Depends, HTTPException, UploadFile, status +from loguru import logger +from sqlmodel import Session, select + from langflow.api.utils import update_frontend_node_with_template_values from langflow.api.v1.schemas import ( CustomComponentCode, - PreloadResponse, + InputValueRequest, ProcessResponse, - TaskResponse, + RunResponse, TaskStatusResponse, UploadFileResponse, ) from langflow.interface.custom.custom_component import CustomComponent from langflow.interface.custom.directory_reader import DirectoryReader from langflow.interface.custom.utils import build_custom_component_template -from langflow.processing.process import build_graph_and_generate_result, process_graph_cached, process_tweaks +from langflow.processing.process import process_tweaks, run_graph from langflow.services.auth.utils import api_key_security, get_current_active_user from langflow.services.cache.utils import save_uploaded_file from langflow.services.database.models.flow import Flow from langflow.services.database.models.user.model import User -from langflow.services.deps import get_session, get_session_service, get_settings_service, get_task_service +from langflow.services.deps import ( + get_session, + get_session_service, + get_settings_service, + get_task_service, +) from langflow.services.session.service import SessionService -from loguru import logger -from sqlmodel import select - -try: - from langflow.worker import process_graph_cached_task -except ImportError: - - def process_graph_cached_task(*args, **kwargs): - raise NotImplementedError("Celery is not installed") - - from langflow.services.task.service import TaskService -from sqlmodel import Session # build router router = APIRouter(tags=["Base"]) -async def process_graph_data( - graph_data: dict, - inputs: Optional[Union[List[dict], dict]] = None, - tweaks: Optional[dict] = None, - clear_cache: bool = False, - session_id: Optional[str] = None, - task_service: "TaskService" = Depends(get_task_service), - sync: bool = True, -): - task_result: Any = None - task_status = None - if tweaks: - try: - graph_data = process_tweaks(graph_data, tweaks) - except Exception as exc: - logger.error(f"Error processing tweaks: {exc}") - if sync: - result = await process_graph_cached( - graph_data, - inputs, - clear_cache, - session_id, - ) - task_id = str(id(result)) - if isinstance(result, dict) and "result" in result: - task_result = result["result"] - session_id = result["session_id"] - elif hasattr(result, "result") and hasattr(result, "session_id"): - task_result = result.result - - session_id = result.session_id - else: - task_result = result - else: - logger.warning( - "This is an experimental feature and may not work as expected." - "Please report any issues to our GitHub repository." - ) - if session_id is None: - # Generate a session ID - session_id = get_session_service().generate_key(session_id=session_id, data_graph=graph_data) - task_id, task = await task_service.launch_task( - process_graph_cached_task if task_service.use_celery else process_graph_cached, - graph_data, - inputs, - clear_cache, - session_id, - ) - task_status = task.status - if task.status == "FAILURE": - logger.error(f"Task {task_id} failed: {task.traceback}") - task_result = str(task._exception) - else: - task_result = task.result - - if task_id: - task_response = TaskResponse(id=task_id, href=f"api/v1/task/{task_id}") - else: - task_response = None - - return ProcessResponse( - result=task_result, - status=task_status, - task=task_response, - session_id=session_id, - backend=task_service.backend_name, - ) - - @router.get("/all", dependencies=[Depends(get_current_active_user)]) def get_all( settings_service=Depends(get_settings_service), @@ -117,84 +44,91 @@ def get_all( logger.debug("Building langchain types dict") try: - return get_all_types_dict(settings_service) + all_types_dict = get_all_types_dict(settings_service) + return all_types_dict except Exception as exc: raise HTTPException(status_code=500, detail=str(exc)) from exc -@router.post("/process/json", response_model=ProcessResponse) -async def process_json( - session: Annotated[Session, Depends(get_session)], - data: dict, - inputs: Optional[dict] = None, - tweaks: Optional[dict] = None, - clear_cache: Annotated[bool, Body(embed=True)] = False, # noqa: F821 - session_id: Annotated[Union[None, str], Body(embed=True)] = None, # noqa: F821 - task_service: "TaskService" = Depends(get_task_service), - sync: Annotated[bool, Body(embed=True)] = True, # noqa: F821 -): - try: - return await process_graph_data( - graph_data=data, - inputs=inputs, - tweaks=tweaks, - clear_cache=clear_cache, - session_id=session_id, - task_service=task_service, - sync=sync, - ) - except Exception as exc: - logger.exception(exc) - raise HTTPException(status_code=500, detail=str(exc)) from exc - - -# Endpoint to preload a graph -@router.post("/process/preload/{flow_id}", response_model=PreloadResponse) -async def preload_flow( +@router.post( + "/run/{flow_id}", response_model=RunResponse, response_model_exclude_none=True +) +async def run_flow_with_caching( session: Annotated[Session, Depends(get_session)], flow_id: str, - session_id: Optional[str] = None, - session_service: SessionService = Depends(get_session_service), + inputs: Optional[InputValueRequest] = None, + tweaks: Optional[dict] = None, + stream: Annotated[bool, Body(embed=True)] = False, # noqa: F821 + session_id: Annotated[Union[None, str], Body(embed=True)] = None, # noqa: F821 api_key_user: User = Depends(api_key_security), - clear_session: Annotated[bool, Body(embed=True)] = False, # noqa: F821 + session_service: SessionService = Depends(get_session_service), ): try: - # Get the flow that matches the flow_id and belongs to the user - # flow = session.query(Flow).filter(Flow.id == flow_id).filter(Flow.user_id == api_key_user.id).first() - if clear_session: - session_service.clear_session(session_id) - # Check if the session exists - session_data = await session_service.load_session(session_id) - # Session data is a tuple of (graph, artifacts) - # or (None, None) if the session is empty - if isinstance(session_data, tuple): - graph, artifacts = session_data - is_clear = graph is None and artifacts is None - else: - is_clear = session_data is None - return PreloadResponse(session_id=session_id, is_clear=is_clear) + if inputs is not None: + input_values_dict: dict[str, Union[str, list[str]]] = inputs.model_dump() else: - if session_id is None: - session_id = flow_id - flow = session.exec(select(Flow).where(Flow.id == flow_id).where(Flow.user_id == api_key_user.id)).first() + input_values_dict = {} + + if session_id: + session_data = await session_service.load_session( + session_id, flow_id=flow_id + ) + graph, artifacts = session_data if session_data else (None, None) + task_result: Any = None + if not graph: + raise ValueError("Graph not found in the session") + task_result, session_id = await run_graph( + graph=graph, + flow_id=flow_id, + session_id=session_id, + inputs=input_values_dict, + artifacts=artifacts, + session_service=session_service, + stream=stream, + ) + + else: + # Get the flow that matches the flow_id and belongs to the user + # flow = session.query(Flow).filter(Flow.id == flow_id).filter(Flow.user_id == api_key_user.id).first() + flow = session.exec( + select(Flow) + .where(Flow.id == flow_id) + .where(Flow.user_id == api_key_user.id) + ).first() if flow is None: raise ValueError(f"Flow {flow_id} not found") if flow.data is None: raise ValueError(f"Flow {flow_id} has no data") graph_data = flow.data - session_service.clear_session(session_id) - # Load the graph using SessionService - session_data = await session_service.load_session(session_id, graph_data) - graph, artifacts = session_data if session_data else (None, None) - if not graph: - raise ValueError("Graph not found in the session") - _ = await graph.build() - session_service.update_session(session_id, (graph, artifacts)) - return PreloadResponse(session_id=session_id) - except Exception as exc: - logger.exception(exc) - raise HTTPException(status_code=500, detail=str(exc)) from exc + graph_data = process_tweaks(graph_data, tweaks or {}) + task_result, session_id = await run_graph( + graph=graph_data, + flow_id=flow_id, + session_id=session_id, + inputs=input_values_dict, + artifacts={}, + session_service=session_service, + stream=stream, + ) + + return RunResponse(outputs=task_result, session_id=session_id) + except sa.exc.StatementError as exc: + # StatementError('(builtins.ValueError) badly formed hexadecimal UUID string') + if "badly formed hexadecimal UUID string" in str(exc): + # This means the Flow ID is not a valid UUID which means it can't find the flow + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail=str(exc) + ) from exc + except ValueError as exc: + if f"Flow {flow_id} not found" in str(exc): + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail=str(exc) + ) from exc + else: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc) + ) from exc @router.post( @@ -221,84 +155,16 @@ async def process( """ Endpoint to process an input with a given flow_id. """ - - try: - if session_id: - session_data = await session_service.load_session(session_id) - graph, artifacts = session_data if session_data else (None, None) - task_result: Any = None - task_status = None - task_id = None - if not graph: - raise ValueError("Graph not found in the session") - result = await build_graph_and_generate_result( - graph=graph, - inputs=inputs, - artifacts=artifacts, - session_id=session_id, - session_service=session_service, - ) - task_id = str(id(result)) - if isinstance(result, dict) and "result" in result: - task_result = result["result"] - session_id = result["session_id"] - elif hasattr(result, "result") and hasattr(result, "session_id"): - task_result = result.result - - session_id = result.session_id - else: - task_result = result - if task_id: - task_response = TaskResponse(id=task_id, href=f"api/v1/task/{task_id}") - else: - task_response = None - return ProcessResponse( - result=task_result, - status=task_status, - task=task_response, - session_id=session_id, - backend=task_service.backend_name, - ) - - else: - if api_key_user is None: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="Invalid API Key", - ) - - # Get the flow that matches the flow_id and belongs to the user - # flow = session.query(Flow).filter(Flow.id == flow_id).filter(Flow.user_id == api_key_user.id).first() - flow = session.exec(select(Flow).where(Flow.id == flow_id).where(Flow.user_id == api_key_user.id)).first() - if flow is None: - raise ValueError(f"Flow {flow_id} not found") - - if flow.data is None: - raise ValueError(f"Flow {flow_id} has no data") - graph_data = flow.data - return await process_graph_data( - graph_data=graph_data, - inputs=inputs, - tweaks=tweaks, - clear_cache=clear_cache, - session_id=session_id, - task_service=task_service, - sync=sync, - ) - except sa.exc.StatementError as exc: - # StatementError('(builtins.ValueError) badly formed hexadecimal UUID string') - if "badly formed hexadecimal UUID string" in str(exc): - # This means the Flow ID is not a valid UUID which means it can't find the flow - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc - except ValueError as exc: - if f"Flow {flow_id} not found" in str(exc): - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc - else: - raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc)) from exc - except Exception as e: - # Log stack trace - logger.exception(e) - raise HTTPException(status_code=500, detail=str(e)) from e + # Raise a depreciation warning + logger.warning( + "The /process endpoint is deprecated and will be removed in a future version. " + "Please use /run instead." + ) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="The /process endpoint is deprecated and will be removed in a future version. " + "Please use /run instead.", + ) @router.get("/task/{task_id}", response_model=TaskStatusResponse) @@ -364,12 +230,16 @@ async def custom_component( built_frontend_node = build_custom_component_template(component, user_id=user.id) - built_frontend_node = update_frontend_node_with_template_values(built_frontend_node, raw_code.frontend_node) + built_frontend_node = update_frontend_node_with_template_values( + built_frontend_node, raw_code.frontend_node + ) return built_frontend_node @router.post("/custom_component/reload", status_code=HTTPStatus.OK) -async def reload_custom_component(path: str, user: User = Depends(get_current_active_user)): +async def reload_custom_component( + path: str, user: User = Depends(get_current_active_user) +): from langflow.interface.custom.utils import build_custom_component_template try: @@ -391,6 +261,8 @@ async def custom_component_update( ): component = CustomComponent(code=raw_code.code) - component_node = build_custom_component_template(component, user_id=user.id, update_field=raw_code.field) + component_node = build_custom_component_template( + component, user_id=user.id, update_field=raw_code.field + ) # Update the field return component_node diff --git a/src/backend/langflow/api/v1/schemas.py b/src/backend/langflow/api/v1/schemas.py index ca15ad207..0a473847c 100644 --- a/src/backend/langflow/api/v1/schemas.py +++ b/src/backend/langflow/api/v1/schemas.py @@ -4,9 +4,8 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Union from uuid import UUID -from pydantic import BaseModel, Field, field_serializer, field_validator +from pydantic import BaseModel, Field, field_validator, model_serializer -from langflow.api.utils import serialize_field from langflow.services.database.models.api_key.model import ApiKeyRead from langflow.services.database.models.base import orjson_dumps from langflow.services.database.models.flow import FlowCreate, FlowRead @@ -22,26 +21,6 @@ class BuildStatus(Enum): IN_PROGRESS = "in_progress" -class GraphData(BaseModel): - """Data inside the exported flow.""" - - nodes: List[Dict[str, Any]] - edges: List[Dict[str, Any]] - - -class ExportedFlow(BaseModel): - """Exported flow from Langflow.""" - - description: str - name: str - id: str - data: GraphData - - -class InputRequest(BaseModel): - input: dict - - class TweaksRequest(BaseModel): tweaks: Optional[Dict[str, Dict[str, str]]] = Field(default_factory=dict) @@ -67,6 +46,26 @@ class ProcessResponse(BaseModel): backend: Optional[str] = None +class RunResponse(BaseModel): + """Run response schema.""" + + outputs: Optional[List[Any]] = None + session_id: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize(self, handler): + # Serialize all the outputs if they are base models + if self.outputs: + serialized_outputs = [] + for output in self.outputs: + if isinstance(output, BaseModel): + serialized_outputs.append(output.model_dump(exclude_none=True)) + else: + serialized_outputs.append(output) + self.outputs = serialized_outputs + return handler(self) + + class PreloadResponse(BaseModel): """Preload response schema.""" @@ -74,9 +73,6 @@ class PreloadResponse(BaseModel): is_clear: Optional[bool] = None -# TaskStatusResponse( -# status=task.status, result=task.result if task.ready() else None -# ) class TaskStatusResponse(BaseModel): """Task status response schema.""" @@ -162,7 +158,9 @@ class StreamData(BaseModel): data: dict def __str__(self) -> str: - return f"event: {self.event}\ndata: {orjson_dumps(self.data, indent_2=False)}\n\n" + return ( + f"event: {self.event}\ndata: {orjson_dumps(self.data, indent_2=False)}\n\n" + ) class CustomComponentCode(BaseModel): @@ -219,28 +217,24 @@ class ApiKeyCreateRequest(BaseModel): class VerticesOrderResponse(BaseModel): ids: List[List[str]] + run_id: UUID -class ResultData(BaseModel): +class ResultDataResponse(BaseModel): results: Optional[Any] = Field(default_factory=dict) artifacts: Optional[Any] = Field(default_factory=dict) timedelta: Optional[float] = None duration: Optional[str] = None - @field_serializer("results") - def serialize_results(self, value): - if isinstance(value, dict): - return {key: serialize_field(val) for key, val in value.items()} - return serialize_field(value) - class VertexBuildResponse(BaseModel): id: Optional[str] = None - next_vertex_id: Optional[str] = None + next_verteices_ids: Optional[List[str]] = None + inactive_vertices: Optional[List[str]] = None valid: bool params: Optional[str] """JSON string of the params.""" - data: ResultData + data: ResultDataResponse """Mapping of vertex ids to result dict containing the param name and result value.""" timestamp: Optional[datetime] = Field(default_factory=datetime.utcnow) """Timestamp of the build.""" @@ -248,3 +242,7 @@ class VertexBuildResponse(BaseModel): class VerticesBuiltResponse(BaseModel): vertices: List[VertexBuildResponse] + + +class InputValueRequest(BaseModel): + input_value: str diff --git a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py index 5dfb53387..c0d128ca6 100644 --- a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py +++ b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py @@ -16,6 +16,7 @@ from langflow.field_typing.range_spec import RangeSpec class ConversationalAgent(CustomComponent): display_name: str = "OpenAI Conversational Agent" description: str = "Conversational Agent that can use OpenAI's function calling API" + icon = "OpenAI" def build_config(self): openai_function_models = [ diff --git a/src/backend/langflow/components/chains/ConversationChain.py b/src/backend/langflow/components/chains/ConversationChain.py index dd465c511..6e1e319d6 100644 --- a/src/backend/langflow/components/chains/ConversationChain.py +++ b/src/backend/langflow/components/chains/ConversationChain.py @@ -1,9 +1,9 @@ -from typing import Callable, Optional, Union +from typing import Optional from langchain.chains import ConversationChain from langflow import CustomComponent -from langflow.field_typing import BaseLanguageModel, BaseMemory, Chain, Text +from langflow.field_typing import BaseLanguageModel, BaseMemory, Text class ConversationChainComponent(CustomComponent): @@ -23,10 +23,10 @@ class ConversationChainComponent(CustomComponent): def build( self, - inputs: str, + input_value: Text, llm: BaseLanguageModel, memory: Optional[BaseMemory] = None, - ) -> Union[Chain, Callable, Text]: + ) -> Text: if memory is None: chain = ConversationChain(llm=llm) else: diff --git a/src/backend/langflow/components/chains/LLMChain.py b/src/backend/langflow/components/chains/LLMChain.py index 8596dd0c9..5d660cd4b 100644 --- a/src/backend/langflow/components/chains/LLMChain.py +++ b/src/backend/langflow/components/chains/LLMChain.py @@ -1,8 +1,14 @@ -from typing import Callable, Optional, Union +from typing import Optional from langchain.chains import LLMChain + from langflow import CustomComponent -from langflow.field_typing import BaseLanguageModel, BaseMemory, BasePromptTemplate, Chain, Text +from langflow.field_typing import ( + BaseLanguageModel, + BaseMemory, + BasePromptTemplate, + Text, +) class LLMChainComponent(CustomComponent): @@ -22,5 +28,10 @@ class LLMChainComponent(CustomComponent): prompt: BasePromptTemplate, llm: BaseLanguageModel, memory: Optional[BaseMemory] = None, - ) -> Union[Chain, Callable, Text]: - return LLMChain(prompt=prompt, llm=llm, memory=memory) + ) -> Text: + runnable = LLMChain(prompt=prompt, llm=llm, memory=memory) + result_dict = runnable.invoke({}) + output_key = runnable.output_key + result = result_dict[output_key] + self.status = result + return result diff --git a/src/backend/langflow/components/chains/LLMCheckerChain.py b/src/backend/langflow/components/chains/LLMCheckerChain.py index 527cafbb7..5e7af9af5 100644 --- a/src/backend/langflow/components/chains/LLMCheckerChain.py +++ b/src/backend/langflow/components/chains/LLMCheckerChain.py @@ -1,8 +1,7 @@ -from typing import Callable, Union - from langchain.chains import LLMCheckerChain + from langflow import CustomComponent -from langflow.field_typing import BaseLanguageModel, Chain +from langflow.field_typing import BaseLanguageModel, Text class LLMCheckerChainComponent(CustomComponent): @@ -17,6 +16,12 @@ class LLMCheckerChainComponent(CustomComponent): def build( self, + input_value: Text, llm: BaseLanguageModel, - ) -> Union[Chain, Callable]: - return LLMCheckerChain.from_llm(llm=llm) + ) -> Text: + chain = LLMCheckerChain.from_llm(llm=llm) + response = chain.invoke({chain.input_key: input_value}) + result = response.get(chain.output_key, "") + result_str = Text(result) + self.status = result_str + return result_str diff --git a/src/backend/langflow/components/chains/LLMMathChain.py b/src/backend/langflow/components/chains/LLMMathChain.py index 28f430e6d..52fb5e1ee 100644 --- a/src/backend/langflow/components/chains/LLMMathChain.py +++ b/src/backend/langflow/components/chains/LLMMathChain.py @@ -1,9 +1,9 @@ -from typing import Callable, Optional, Union +from typing import Optional from langchain.chains import LLMChain, LLMMathChain from langflow import CustomComponent -from langflow.field_typing import BaseLanguageModel, BaseMemory, Chain +from langflow.field_typing import BaseLanguageModel, BaseMemory, Text class LLMMathChainComponent(CustomComponent): @@ -22,10 +22,22 @@ class LLMMathChainComponent(CustomComponent): def build( self, + input_value: Text, llm: BaseLanguageModel, llm_chain: LLMChain, input_key: str = "question", output_key: str = "answer", memory: Optional[BaseMemory] = None, - ) -> Union[LLMMathChain, Callable, Chain]: - return LLMMathChain(llm=llm, llm_chain=llm_chain, input_key=input_key, output_key=output_key, memory=memory) + ) -> Text: + chain = LLMMathChain( + llm=llm, + llm_chain=llm_chain, + input_key=input_key, + output_key=output_key, + memory=memory, + ) + response = chain.invoke({input_key: input_value}) + result = response.get(output_key) + result_str = Text(result) + self.status = result_str + return result_str diff --git a/src/backend/langflow/components/chains/PromptRunner.py b/src/backend/langflow/components/chains/PromptRunner.py deleted file mode 100644 index 878247c39..000000000 --- a/src/backend/langflow/components/chains/PromptRunner.py +++ /dev/null @@ -1,32 +0,0 @@ -from langchain.llms.base import BaseLLM -from langchain.prompts import PromptTemplate -from langchain_core.messages import BaseMessage -from langflow import CustomComponent -from langflow.field_typing import Text - - -class PromptRunner(CustomComponent): - display_name: str = "Prompt Runner" - description: str = "Run a Chain with the given PromptTemplate" - beta: bool = True - field_config = { - "llm": {"display_name": "LLM"}, - "prompt": { - "display_name": "Prompt Template", - "info": "Make sure the prompt has all variables filled.", - }, - "code": {"show": False}, - } - - def build(self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}) -> Text: - chain = prompt | llm - # The input is an empty dict because the prompt is already filled - result_message: BaseMessage = chain.invoke(input=inputs) - if hasattr(result_message, "content"): - result: str = result_message.content - elif isinstance(result_message, str): - result = result_message - else: - result = str(result_message) - self.repr_value = result - return result diff --git a/src/backend/langflow/components/chains/RetrievalQA.py b/src/backend/langflow/components/chains/RetrievalQA.py index bfa3b2e11..453b66d32 100644 --- a/src/backend/langflow/components/chains/RetrievalQA.py +++ b/src/backend/langflow/components/chains/RetrievalQA.py @@ -1,8 +1,9 @@ -from typing import Callable, Optional, Union +from typing import Optional from langchain.chains.combine_documents.base import BaseCombineDocumentsChain -from langchain.chains.retrieval_qa.base import BaseRetrievalQA, RetrievalQA +from langchain.chains.retrieval_qa.base import RetrievalQA from langchain_core.documents import Document + from langflow import CustomComponent from langflow.field_typing import BaseMemory, BaseRetriever, Text @@ -19,19 +20,22 @@ class RetrievalQAComponent(CustomComponent): "input_key": {"display_name": "Input Key", "advanced": True}, "output_key": {"display_name": "Output Key", "advanced": True}, "return_source_documents": {"display_name": "Return Source Documents"}, - "inputs": {"display_name": "Input", "input_types": ["Text", "Document"]}, + "input_value": { + "display_name": "Input", + "input_types": ["Text", "Document"], + }, } def build( self, combine_documents_chain: BaseCombineDocumentsChain, retriever: BaseRetriever, - inputs: str = "", + input_value: str = "", memory: Optional[BaseMemory] = None, input_key: str = "query", output_key: str = "result", return_source_documents: bool = True, - ) -> Union[BaseRetrievalQA, Callable, Text]: + ) -> Text: runnable = RetrievalQA( combine_documents_chain=combine_documents_chain, retriever=retriever, @@ -40,11 +44,19 @@ class RetrievalQAComponent(CustomComponent): output_key=output_key, return_source_documents=return_source_documents, ) - if isinstance(inputs, Document): - inputs = inputs.page_content + if isinstance(input_value, Document): + input_value = input_value.page_content self.status = runnable - result = runnable.invoke({input_key: inputs}) + result = runnable.invoke({input_key: input_value}) result = result.content if hasattr(result, "content") else result # Result is a dict with keys "query", "result" and "source_documents" # for now we just return the result - return result.get("result") + records = self.to_records(result.get("source_documents")) + references_str = "" + if return_source_documents: + references_str = self.create_references_from_records(records) + result_str = result.get("result", "") + + final_result = "\n".join([Text(result_str), references_str]) + self.status = final_result + return final_result # OK diff --git a/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py b/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py index 3c46cd8bd..9a1b63756 100644 --- a/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py +++ b/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py @@ -1,11 +1,10 @@ from typing import Optional from langchain.chains import RetrievalQAWithSourcesChain -from langchain.chains.qa_with_sources.base import BaseQAWithSourcesChain -from langchain.chains.combine_documents.base import BaseCombineDocumentsChain +from langchain_core.documents import Document from langflow import CustomComponent -from langflow.field_typing import BaseLanguageModel, BaseMemory, BaseRetriever +from langflow.field_typing import BaseLanguageModel, BaseMemory, BaseRetriever, Text class RetrievalQAWithSourcesChainComponent(CustomComponent): @@ -18,25 +17,42 @@ class RetrievalQAWithSourcesChainComponent(CustomComponent): "chain_type": { "display_name": "Chain Type", "options": ["stuff", "map_reduce", "map_rerank", "refine"], + "info": "The type of chain to use to combined Documents.", }, "memory": {"display_name": "Memory"}, "return_source_documents": {"display_name": "Return Source Documents"}, + "retriever": {"display_name": "Retriever"}, } def build( self, + input_value: Text, retriever: BaseRetriever, llm: BaseLanguageModel, - combine_documents_chain: BaseCombineDocumentsChain, chain_type: str, memory: Optional[BaseMemory] = None, return_source_documents: Optional[bool] = True, - ) -> BaseQAWithSourcesChain: - return RetrievalQAWithSourcesChain.from_chain_type( + ) -> Text: + runnable = RetrievalQAWithSourcesChain.from_chain_type( llm=llm, chain_type=chain_type, - combine_documents_chain=combine_documents_chain, memory=memory, return_source_documents=return_source_documents, retriever=retriever, ) + if isinstance(input_value, Document): + input_value = input_value.page_content + self.status = runnable + input_key = runnable.input_keys[0] + result = runnable.invoke({input_key: input_value}) + result = result.content if hasattr(result, "content") else result + # Result is a dict with keys "query", "result" and "source_documents" + # for now we just return the result + records = self.to_records(result.get("source_documents")) + references_str = "" + if return_source_documents: + references_str = self.create_references_from_records(records) + result_str = Text(result.get("answer", "")) + final_result = "\n".join([result_str, references_str]) + self.status = final_result + return final_result diff --git a/src/backend/langflow/components/chains/SQLDatabaseChain.py b/src/backend/langflow/components/chains/SQLDatabaseChain.py deleted file mode 100644 index 56bd433ba..000000000 --- a/src/backend/langflow/components/chains/SQLDatabaseChain.py +++ /dev/null @@ -1,25 +0,0 @@ -from langflow import CustomComponent -from typing import Callable, Union -from langflow.field_typing import BasePromptTemplate, BaseLanguageModel, Chain -from langchain_community.utilities.sql_database import SQLDatabase -from langchain_experimental.sql.base import SQLDatabaseChain - - -class SQLDatabaseChainComponent(CustomComponent): - display_name = "SQLDatabaseChain" - description = "" - - def build_config(self): - return { - "db": {"display_name": "Database"}, - "llm": {"display_name": "LLM"}, - "prompt": {"display_name": "Prompt"}, - } - - def build( - self, - db: SQLDatabase, - llm: BaseLanguageModel, - prompt: BasePromptTemplate, - ) -> Union[Chain, Callable, SQLDatabaseChain]: - return SQLDatabaseChain.from_llm(llm=llm, db=db, prompt=prompt) diff --git a/src/backend/langflow/components/chains/SQLGenerator.py b/src/backend/langflow/components/chains/SQLGenerator.py new file mode 100644 index 000000000..ecd9eb248 --- /dev/null +++ b/src/backend/langflow/components/chains/SQLGenerator.py @@ -0,0 +1,57 @@ +from typing import Optional + +from langchain.chains import create_sql_query_chain +from langchain_community.utilities.sql_database import SQLDatabase +from langchain_core.prompts import PromptTemplate +from langchain_core.runnables import Runnable + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, Text + + +class SQLGeneratorComponent(CustomComponent): + display_name = "Natural Language to SQL" + description = "Generate SQL from natural language." + + def build_config(self): + return { + "db": {"display_name": "Database"}, + "llm": {"display_name": "LLM"}, + "prompt": { + "display_name": "Prompt", + "info": "The prompt must contain `{question}`.", + }, + "top_k": { + "display_name": "Top K", + "info": "The number of results per select statement to return. If 0, no limit.", + }, + } + + def build( + self, + input_value: Text, + db: SQLDatabase, + llm: BaseLanguageModel, + top_k: int = 5, + prompt: Optional[Text] = None, + ) -> Text: + if prompt: + prompt_template = PromptTemplate.from_template(template=prompt) + else: + prompt_template = None + + if top_k < 1: + raise ValueError("Top K must be greater than 0.") + + if not prompt_template: + sql_query_chain = create_sql_query_chain(llm=llm, db=db, k=top_k) + else: + # Check if {question} is in the prompt + if "{question}" not in prompt_template.template or "question" not in prompt_template.input_variables: + raise ValueError("Prompt must contain `{question}` to be used with Natural Language to SQL.") + sql_query_chain = create_sql_query_chain(llm=llm, db=db, prompt=prompt_template, k=top_k) + query_writer: Runnable = sql_query_chain | {"query": lambda x: x.replace("SQLQuery:", "").strip()} + response = query_writer.invoke({"question": input_value}) + query = response.get("query") + self.status = query + return query diff --git a/src/backend/langflow/components/documentloaders/DirectoryLoader.py b/src/backend/langflow/components/documentloaders/DirectoryLoader.py deleted file mode 100644 index 5b0875126..000000000 --- a/src/backend/langflow/components/documentloaders/DirectoryLoader.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import Any, Dict, List - -from langchain.docstore.document import Document -from langchain.document_loaders.directory import DirectoryLoader -from langflow import CustomComponent - - -class DirectoryLoaderComponent(CustomComponent): - display_name = "DirectoryLoader" - description = "Load from a directory." - - def build_config(self) -> Dict[str, Any]: - return { - "glob": {"display_name": "Glob Pattern", "value": "**/*.txt"}, - "load_hidden": {"display_name": "Load Hidden Files", "value": False, "advanced": True}, - "max_concurrency": {"display_name": "Max Concurrency", "value": 10, "advanced": True}, - "metadata": {"display_name": "Metadata", "value": {}}, - "path": {"display_name": "Local Directory"}, - "recursive": {"display_name": "Recursive", "value": True, "advanced": True}, - "silent_errors": {"display_name": "Silent Errors", "value": False, "advanced": True}, - "use_multithreading": {"display_name": "Use Multithreading", "value": True, "advanced": True}, - } - - def build( - self, - glob: str, - path: str, - max_concurrency: int = 2, - load_hidden: bool = False, - recursive: bool = True, - silent_errors: bool = False, - use_multithreading: bool = True, - ) -> List[Document]: - return DirectoryLoader( - glob=glob, - path=path, - load_hidden=load_hidden, - max_concurrency=max_concurrency, - recursive=recursive, - silent_errors=silent_errors, - use_multithreading=use_multithreading, - ).load() diff --git a/src/backend/langflow/components/documentloaders/FileLoader.py b/src/backend/langflow/components/documentloaders/FileLoader.py index 07160557d..2f74d9d04 100644 --- a/src/backend/langflow/components/documentloaders/FileLoader.py +++ b/src/backend/langflow/components/documentloaders/FileLoader.py @@ -1,5 +1,7 @@ -from langchain_core.documents import Document +from typing import List + from langflow import CustomComponent +from langflow.schema import Record from langflow.utils.constants import LOADERS_INFO @@ -9,7 +11,9 @@ class FileLoaderComponent(CustomComponent): beta = True def build_config(self): - loader_options = ["Automatic"] + [loader_info["name"] for loader_info in LOADERS_INFO] + loader_options = ["Automatic"] + [ + loader_info["name"] for loader_info in LOADERS_INFO + ] file_types = [] suffixes = [] @@ -38,6 +42,7 @@ class FileLoaderComponent(CustomComponent): "srt", "eml", "md", + "mdx", "pptx", "docx", ], @@ -55,6 +60,7 @@ class FileLoaderComponent(CustomComponent): ".srt", ".eml", ".md", + ".mdx", ".pptx", ".docx", ], @@ -71,10 +77,10 @@ class FileLoaderComponent(CustomComponent): "code": {"show": False}, } - def build(self, file_path: str, loader: str) -> Document: + def build(self, file_path: str, loader: str) -> List[Record]: file_type = file_path.split(".")[-1] - # Mapeie o nome do loader selecionado para suas informações + # Map the loader to the correct loader class selected_loader_info = None for loader_info in LOADERS_INFO: if loader_info["name"] == loader: @@ -85,7 +91,7 @@ class FileLoaderComponent(CustomComponent): raise ValueError(f"Loader {loader} not found in the loader info list") if loader == "Automatic": - # Determine o loader automaticamente com base na extensão do arquivo + # Determine the loader based on the file type default_loader_info = None for info in LOADERS_INFO: if "defaultFor" in info and file_type in info["defaultFor"]: @@ -99,15 +105,20 @@ class FileLoaderComponent(CustomComponent): if isinstance(selected_loader_info, dict): loader_import: str = selected_loader_info["import"] else: - raise ValueError(f"Loader info for {loader} is not a dict\nLoader info:\n{selected_loader_info}") + raise ValueError( + f"Loader info for {loader} is not a dict\nLoader info:\n{selected_loader_info}" + ) module_name, class_name = loader_import.rsplit(".", 1) try: - # Importe o loader dinamicamente + # Import the loader class loader_module = __import__(module_name, fromlist=[class_name]) loader_instance = getattr(loader_module, class_name) except ImportError as e: - raise ValueError(f"Loader {loader} could not be imported\nLoader info:\n{selected_loader_info}") from e + raise ValueError( + f"Loader {loader} could not be imported\nLoader info:\n{selected_loader_info}" + ) from e result = loader_instance(file_path=file_path) - return result.load() + docs = result.load() + return self.to_records(docs) diff --git a/src/backend/langflow/components/documentloaders/GatherRecords.py b/src/backend/langflow/components/documentloaders/GatherRecords.py new file mode 100644 index 000000000..ac298c092 --- /dev/null +++ b/src/backend/langflow/components/documentloaders/GatherRecords.py @@ -0,0 +1,161 @@ +from concurrent import futures +from pathlib import Path +from typing import Any, Dict, List, Optional, Text + +from langflow import CustomComponent +from langflow.schema import Record + + +class GatherRecordsComponent(CustomComponent): + display_name = "Gather Records" + description = "Gather records from a directory." + + def build_config(self) -> Dict[str, Any]: + return { + "path": {"display_name": "Path"}, + "types": { + "display_name": "Types", + "info": "File types to load. Leave empty to load all types.", + }, + "depth": {"display_name": "Depth", "info": "Depth to search for files."}, + "max_concurrency": {"display_name": "Max Concurrency", "advanced": True}, + "load_hidden": { + "display_name": "Load Hidden", + "advanced": True, + "info": "If true, hidden files will be loaded.", + }, + "recursive": { + "display_name": "Recursive", + "advanced": True, + "info": "If true, the search will be recursive.", + }, + "silent_errors": { + "display_name": "Silent Errors", + "advanced": True, + "info": "If true, errors will not raise an exception.", + }, + "use_multithreading": { + "display_name": "Use Multithreading", + "advanced": True, + }, + } + + def is_hidden(self, path: Path) -> bool: + return path.name.startswith(".") + + def retrieve_file_paths( + self, + path: str, + types: List[str], + load_hidden: bool, + recursive: bool, + depth: int, + ) -> List[str]: + path_obj = Path(path) + if not path_obj.exists() or not path_obj.is_dir(): + raise ValueError(f"Path {path} must exist and be a directory.") + + def match_types(p: Path) -> bool: + return any(p.suffix == f".{t}" for t in types) if types else True + + def is_not_hidden(p: Path) -> bool: + return not self.is_hidden(p) or load_hidden + + def walk_level(directory: Path, max_depth: int): + directory = directory.resolve() + prefix_length = len(directory.parts) + for p in directory.rglob("*" if recursive else "[!.]*"): + if len(p.parts) - prefix_length <= max_depth: + yield p + + glob = "**/*" if recursive else "*" + paths = walk_level(path_obj, depth) if depth else path_obj.glob(glob) + file_paths = [ + Text(p) + for p in paths + if p.is_file() and match_types(p) and is_not_hidden(p) + ] + + return file_paths + + def parse_file_to_record( + self, file_path: str, silent_errors: bool + ) -> Optional[Record]: + # Use the partition function to load the file + from unstructured.partition.auto import partition # type: ignore + + try: + elements = partition(file_path) + except Exception as e: + if not silent_errors: + raise ValueError(f"Error loading file {file_path}: {e}") from e + return None + + # Create a Record + text = "\n\n".join([Text(el) for el in elements]) + metadata = elements.metadata if hasattr(elements, "metadata") else {} + metadata["file_path"] = file_path + record = Record(text=text, data=metadata) + return record + + def get_elements( + self, + file_paths: List[str], + silent_errors: bool, + max_concurrency: int, + use_multithreading: bool, + ) -> List[Optional[Record]]: + if use_multithreading: + records = self.parallel_load_records( + file_paths, silent_errors, max_concurrency + ) + else: + records = [ + self.parse_file_to_record(file_path, silent_errors) + for file_path in file_paths + ] + records = list(filter(None, records)) + return records + + def parallel_load_records( + self, file_paths: List[str], silent_errors: bool, max_concurrency: int + ) -> List[Optional[Record]]: + with futures.ThreadPoolExecutor(max_workers=max_concurrency) as executor: + loaded_files = executor.map( + lambda file_path: self.parse_file_to_record(file_path, silent_errors), + file_paths, + ) + # loaded_files is an iterator, so we need to convert it to a list + return list(loaded_files) + + def build( + self, + path: str, + types: Optional[List[str]] = None, + depth: int = 0, + max_concurrency: int = 2, + load_hidden: bool = False, + recursive: bool = True, + silent_errors: bool = False, + use_multithreading: bool = True, + ) -> List[Optional[Record]]: + if types is None: + types = [] + resolved_path = self.resolve_path(path) + file_paths = self.retrieve_file_paths( + resolved_path, types, load_hidden, recursive, depth + ) + loaded_records = [] + + if use_multithreading: + loaded_records = self.parallel_load_records( + file_paths, silent_errors, max_concurrency + ) + else: + loaded_records = [ + self.parse_file_to_record(file_path, silent_errors) + for file_path in file_paths + ] + loaded_records = list(filter(None, loaded_records)) + self.status = loaded_records + return loaded_records diff --git a/src/backend/langflow/components/embeddings/AmazonBedrockEmbeddings.py b/src/backend/langflow/components/embeddings/AmazonBedrockEmbeddings.py index 450e5ee3b..98deefcb8 100644 --- a/src/backend/langflow/components/embeddings/AmazonBedrockEmbeddings.py +++ b/src/backend/langflow/components/embeddings/AmazonBedrockEmbeddings.py @@ -1,7 +1,9 @@ from typing import Optional -from langchain.embeddings import BedrockEmbeddings from langchain.embeddings.base import Embeddings +from langchain_community.embeddings import BedrockEmbeddings + + from langflow import CustomComponent diff --git a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py index 09b03e17b..a44259be9 100644 --- a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py @@ -9,6 +9,7 @@ class AzureOpenAIEmbeddingsComponent(CustomComponent): description: str = "Embeddings model from Azure OpenAI." documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/azureopenai" beta = False + icon = "Azure" API_VERSION_OPTIONS = [ "2022-12-01", diff --git a/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py index 6f3540358..fa2bb425a 100644 --- a/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py +++ b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py @@ -9,6 +9,7 @@ class HuggingFaceEmbeddingsComponent(CustomComponent): documentation = ( "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers" ) + icon = "HuggingFace" def build_config(self): return { diff --git a/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py b/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py index acc828d7f..578b601a6 100644 --- a/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/HuggingFaceInferenceAPIEmbeddings.py @@ -9,6 +9,7 @@ class HuggingFaceInferenceAPIEmbeddingsComponent(CustomComponent): display_name = "HuggingFaceInferenceAPIEmbeddings" description = "HuggingFace sentence_transformers embedding models, API version." documentation = "https://github.com/huggingface/text-embeddings-inference" + icon = "HuggingFace" def build_config(self): return { diff --git a/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py b/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py index 053fd6c7f..f7f4cf2ee 100644 --- a/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py @@ -1,5 +1,5 @@ from langflow import CustomComponent -from langchain.embeddings import VertexAIEmbeddings +from langchain_community.embeddings import VertexAIEmbeddings from typing import Optional, List @@ -9,17 +9,45 @@ class VertexAIEmbeddingsComponent(CustomComponent): def build_config(self): return { - "credentials": {"display_name": "Credentials", "value": "", "file_types": [".json"], "field_type": "file"}, - "instance": {"display_name": "instance", "advanced": True, "field_type": "dict"}, - "location": {"display_name": "Location", "value": "us-central1", "advanced": True}, + "credentials": { + "display_name": "Credentials", + "value": "", + "file_types": [".json"], + "field_type": "file", + }, + "instance": { + "display_name": "instance", + "advanced": True, + "field_type": "dict", + }, + "location": { + "display_name": "Location", + "value": "us-central1", + "advanced": True, + }, "max_output_tokens": {"display_name": "Max Output Tokens", "value": 128}, - "max_retries": {"display_name": "Max Retries", "value": 6, "advanced": True}, - "model_name": {"display_name": "Model Name", "value": "textembedding-gecko"}, + "max_retries": { + "display_name": "Max Retries", + "value": 6, + "advanced": True, + }, + "model_name": { + "display_name": "Model Name", + "value": "textembedding-gecko", + }, "n": {"display_name": "N", "value": 1, "advanced": True}, "project": {"display_name": "Project", "advanced": True}, - "request_parallelism": {"display_name": "Request Parallelism", "value": 5, "advanced": True}, + "request_parallelism": { + "display_name": "Request Parallelism", + "value": 5, + "advanced": True, + }, "stop": {"display_name": "Stop", "advanced": True}, - "streaming": {"display_name": "Streaming", "value": False, "advanced": True}, + "streaming": { + "display_name": "Streaming", + "value": False, + "advanced": True, + }, "temperature": {"display_name": "Temperature", "value": 0.0}, "top_k": {"display_name": "Top K", "value": 40, "advanced": True}, "top_p": {"display_name": "Top P", "value": 0.95, "advanced": True}, diff --git a/src/backend/langflow/components/io/ChatInput.py b/src/backend/langflow/components/io/ChatInput.py index 42f2715e6..de8ce14cb 100644 --- a/src/backend/langflow/components/io/ChatInput.py +++ b/src/backend/langflow/components/io/ChatInput.py @@ -1,61 +1,26 @@ from typing import Optional, Union -from langflow import CustomComponent +from langflow.components.io.base.chat import ChatComponent from langflow.field_typing import Text from langflow.schema import Record -class ChatInput(CustomComponent): +class ChatInput(ChatComponent): display_name = "Chat Input" description = "Used to get user input from the chat." - def build_config(self): - return { - "message": { - "input_types": ["Text"], - "display_name": "Message", - "multiline": True, - }, - "sender": { - "options": ["Machine", "User"], - "display_name": "Sender Type", - }, - "sender_name": {"display_name": "Sender Name"}, - "session_id": { - "display_name": "Session ID", - "info": "Session ID of the chat history.", - }, - "as_record": { - "display_name": "As Record", - "info": "If true, the message will be returned as a Record.", - }, - } - def build( self, sender: Optional[str] = "User", sender_name: Optional[str] = "User", - message: Optional[str] = None, - as_record: Optional[bool] = False, + input_value: Optional[str] = None, session_id: Optional[str] = None, + return_record: Optional[bool] = False, ) -> Union[Text, Record]: - self.status = message - if as_record: - if isinstance(message, Record): - # Update the data of the record - message.data["sender"] = sender - message.data["sender_name"] = sender_name - message.data["session_id"] = session_id - return message - return Record( - text=message, - data={ - "sender": sender, - "sender_name": sender_name, - "session_id": session_id, - }, - ) - if not message: - message = "" - self.status = message - return message + return super().build( + sender=sender, + sender_name=sender_name, + input_value=input_value, + session_id=session_id, + return_record=return_record, + ) diff --git a/src/backend/langflow/components/io/ChatOutput.py b/src/backend/langflow/components/io/ChatOutput.py index 5896adb6b..a528b65b8 100644 --- a/src/backend/langflow/components/io/ChatOutput.py +++ b/src/backend/langflow/components/io/ChatOutput.py @@ -1,65 +1,26 @@ from typing import Optional, Union -from langflow import CustomComponent +from langflow.components.io.base.chat import ChatComponent from langflow.field_typing import Text from langflow.schema import Record -class ChatOutput(CustomComponent): +class ChatOutput(ChatComponent): display_name = "Chat Output" description = "Used to send a message to the chat." - field_config = { - "code": { - "show": True, - } - } - - def build_config(self): - return { - "message": {"input_types": ["Text"], "display_name": "Message"}, - "sender": { - "options": ["Machine", "User"], - "display_name": "Sender Type", - }, - "sender_name": {"display_name": "Sender Name"}, - "session_id": { - "display_name": "Session ID", - "info": "Session ID of the chat history.", - "input_types": ["Text"], - }, - "as_record": { - "display_name": "As Record", - "info": "If true, the message will be returned as a Record.", - }, - } - def build( self, sender: Optional[str] = "Machine", sender_name: Optional[str] = "AI", + input_value: Optional[str] = None, session_id: Optional[str] = None, - message: Optional[str] = None, - as_record: Optional[bool] = False, + return_record: Optional[bool] = False, ) -> Union[Text, Record]: - self.status = message - if as_record: - if isinstance(message, Record): - # Update the data of the record - message.data["sender"] = sender - message.data["sender_name"] = sender_name - message.data["session_id"] = session_id - - return message - return Record( - text=message, - data={ - "sender": sender, - "sender_name": sender_name, - "session_id": session_id, - }, - ) - if not message: - message = "" - self.status = message - return message + return super().build( + sender=sender, + sender_name=sender_name, + input_value=input_value, + session_id=session_id, + return_record=return_record, + ) diff --git a/src/backend/langflow/components/io/StoreMessages.py b/src/backend/langflow/components/io/StoreMessages.py deleted file mode 100644 index 93af76e4f..000000000 --- a/src/backend/langflow/components/io/StoreMessages.py +++ /dev/null @@ -1,71 +0,0 @@ -from typing import List, Optional - -from langflow import CustomComponent -from langflow.field_typing import Text -from langflow.memory import add_messages -from langflow.schema import Record - - -class StoreMessages(CustomComponent): - display_name = "Store Messages" - description = "Used to store messages." - - def build_config(self): - return { - "records": { - "display_name": "Records", - "info": "The list of records to store. Each record should contain the keys 'sender', 'sender_name', and 'session_id'.", - }, - "texts": { - "display_name": "Texts", - "info": "The list of texts to store. If records is not provided, texts must be provided.", - }, - "session_id": { - "display_name": "Session ID", - "info": "The session ID to store.", - }, - "sender": { - "display_name": "Sender", - "info": "The sender to store.", - }, - "sender_name": { - "display_name": "Sender Name", - "info": "The sender name to store.", - }, - } - - def build( - self, - records: Optional[List[Record]] = None, - texts: Optional[List[Text]] = None, - session_id: Optional[str] = None, - sender: Optional[str] = None, - sender_name: Optional[str] = None, - ) -> List[Record]: - # Records is the main way to store messages - # If records is not provided, we can use texts - # but we need to create the records from the texts - # and the other parameters - if not texts and not records: - raise ValueError("Either texts or records must be provided.") - - if not records: - records = [] - if not session_id or not sender or not sender_name: - raise ValueError("If passing texts, session_id, sender, and sender_name must be provided.") - for text in texts: - record = Record( - text=text, - data={ - "session_id": session_id, - "sender": sender, - "sender_name": sender_name, - }, - ) - records.append(record) - elif isinstance(records, Record): - records = [records] - - self.status = records - records = add_messages(records) - return records diff --git a/src/backend/langflow/components/io/TextInput.py b/src/backend/langflow/components/io/TextInput.py index 3f0125b1a..dc7ff1a73 100644 --- a/src/backend/langflow/components/io/TextInput.py +++ b/src/backend/langflow/components/io/TextInput.py @@ -1,22 +1,12 @@ from typing import Optional -from langflow import CustomComponent +from langflow.components.io.base.text import TextComponent from langflow.field_typing import Text -class TextInput(CustomComponent): +class TextInput(TextComponent): display_name = "Text Input" description = "Used to pass text input to the next component." - field_config = { - "code": { - "show": False, - }, - "value": {"display_name": "Value"}, - } - - def build(self, value: Optional[str] = "") -> Text: - self.status = value - if not value: - value = "" - return value + def build(self, input_value: Optional[str] = "") -> Text: + return super().build(input_value=input_value) diff --git a/src/backend/langflow/components/io/TextOutput.py b/src/backend/langflow/components/io/TextOutput.py new file mode 100644 index 000000000..f92e09146 --- /dev/null +++ b/src/backend/langflow/components/io/TextOutput.py @@ -0,0 +1,16 @@ +from typing import Optional + +from langflow.components.io.base.text import TextComponent +from langflow.field_typing import Text + + +class TextOutput(TextComponent): + display_name = "Text Output" + description = "Used to pass text output to the next component." + + field_config = { + "input_value": {"display_name": "Value"}, + } + + def build(self, input_value: Optional[Text] = "") -> Text: + return super().build(input_value=input_value) diff --git a/src/backend/langflow/components/llms/__init__.py b/src/backend/langflow/components/io/base/__init__.py similarity index 100% rename from src/backend/langflow/components/llms/__init__.py rename to src/backend/langflow/components/io/base/__init__.py diff --git a/src/backend/langflow/components/io/base/chat.py b/src/backend/langflow/components/io/base/chat.py new file mode 100644 index 000000000..8695dbcbc --- /dev/null +++ b/src/backend/langflow/components/io/base/chat.py @@ -0,0 +1,107 @@ +import warnings +from typing import Optional, Union + +from langflow import CustomComponent +from langflow.field_typing import Text +from langflow.memory import add_messages +from langflow.schema import Record + + +class ChatComponent(CustomComponent): + display_name = "Chat Component" + description = "Use as base for chat components." + + def build_config(self): + return { + "input_value": { + "input_types": ["Text"], + "display_name": "Message", + "multiline": True, + }, + "sender": { + "options": ["Machine", "User"], + "display_name": "Sender Type", + }, + "sender_name": {"display_name": "Sender Name"}, + "session_id": { + "display_name": "Session ID", + "info": "If provided, the message will be stored in the memory.", + }, + "return_record": { + "display_name": "Return Record", + "info": "Return the message as a record containing the sender, sender_name, and session_id.", + }, + } + + def store_message( + self, + message: Union[str, Text, Record], + session_id: Optional[str] = None, + sender: Optional[str] = None, + sender_name: Optional[str] = None, + ) -> list[Record]: + if not message: + warnings.warn("No message provided.") + return [] + + if not session_id or not sender or not sender_name: + raise ValueError( + "All of session_id, sender, and sender_name must be provided." + ) + if isinstance(message, Record): + record = message + record.data.update( + { + "session_id": session_id, + "sender": sender, + "sender_name": sender_name, + } + ) + else: + record = Record( + text=message, + data={ + "session_id": session_id, + "sender": sender, + "sender_name": sender_name, + }, + ) + + self.status = record + records = add_messages([record]) + return records[0] + + def build( + self, + sender: Optional[str] = "User", + sender_name: Optional[str] = "User", + input_value: Optional[str] = None, + session_id: Optional[str] = None, + return_record: Optional[bool] = False, + ) -> Union[Text, Record]: + input_value_record: Optional[Record] = None + if return_record: + if isinstance(input_value, Record): + # Update the data of the record + input_value.data["sender"] = sender + input_value.data["sender_name"] = sender_name + input_value.data["session_id"] = session_id + else: + input_value_record = Record( + text=input_value, + data={ + "sender": sender, + "sender_name": sender_name, + "session_id": session_id, + }, + ) + if not input_value: + input_value = "" + if return_record and input_value_record: + result: Union[Text, Record] = input_value_record + else: + result = input_value + self.status = result + if session_id: + self.store_message(result, session_id, sender, sender_name) + return result diff --git a/src/backend/langflow/components/io/base/text.py b/src/backend/langflow/components/io/base/text.py new file mode 100644 index 000000000..8c6620781 --- /dev/null +++ b/src/backend/langflow/components/io/base/text.py @@ -0,0 +1,19 @@ +from typing import Optional + +from langflow import CustomComponent +from langflow.field_typing import Text + + +class TextComponent(CustomComponent): + display_name = "Text Component" + description = "Used to pass text to the next component." + + field_config = { + "input_value": {"display_name": "Value", "multiline": True}, + } + + def build(self, input_value: Optional[str] = "") -> Text: + self.status = input_value + if not input_value: + input_value = "" + return input_value diff --git a/src/backend/langflow/components/io/MessageHistory.py b/src/backend/langflow/components/memories/MessageHistory.py similarity index 82% rename from src/backend/langflow/components/io/MessageHistory.py rename to src/backend/langflow/components/memories/MessageHistory.py index 345de4ba0..8b4d11a5f 100644 --- a/src/backend/langflow/components/io/MessageHistory.py +++ b/src/backend/langflow/components/memories/MessageHistory.py @@ -12,14 +12,10 @@ class MessageHistoryComponent(CustomComponent): def build_config(self): return { "sender": { - "options": ["Machine", "User"], + "options": ["Machine", "User", "Machine and User"], "display_name": "Sender Type", }, "sender_name": {"display_name": "Sender Name"}, - "file_path": { - "display_name": "File Path", - "info": "Path of the local JSON file to store the messages. It should be a unique path for each chat history.", - }, "n_messages": { "display_name": "Number of Messages", "info": "Number of messages to retrieve.", @@ -38,6 +34,8 @@ class MessageHistoryComponent(CustomComponent): session_id: Optional[str] = None, n_messages: int = 5, ) -> List[Record]: + if sender == "Machine and User": + sender = None messages = get_messages( sender=sender, sender_name=sender_name, diff --git a/src/backend/langflow/components/memories/__init__.py b/src/backend/langflow/components/memories/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/components/llms/AmazonBedrock.py b/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py similarity index 96% rename from src/backend/langflow/components/llms/AmazonBedrock.py rename to src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py index 5b931bb94..92b7bc7f9 100644 --- a/src/backend/langflow/components/llms/AmazonBedrock.py +++ b/src/backend/langflow/components/model_specs/AmazonBedrockSpecs.py @@ -1,13 +1,16 @@ from typing import Optional from langchain.llms.base import BaseLLM -from langchain.llms.bedrock import Bedrock +from langchain_community.llms.bedrock import Bedrock + + from langflow import CustomComponent class AmazonBedrockComponent(CustomComponent): display_name: str = "Amazon Bedrock" description: str = "LLM model from Amazon Bedrock." + icon = "Amazon" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/AnthropicLLM.py b/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py similarity index 99% rename from src/backend/langflow/components/llms/AnthropicLLM.py rename to src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py index 94c4ed8f5..d5c093863 100644 --- a/src/backend/langflow/components/llms/AnthropicLLM.py +++ b/src/backend/langflow/components/model_specs/AnthropicLLMSpecs.py @@ -10,6 +10,7 @@ from langflow import CustomComponent class AnthropicLLM(CustomComponent): display_name: str = "AnthropicLLM" description: str = "Anthropic Chat&Completion large language models." + icon = "Anthropic" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/Anthropic.py b/src/backend/langflow/components/model_specs/AnthropicSpecs.py similarity index 98% rename from src/backend/langflow/components/llms/Anthropic.py rename to src/backend/langflow/components/model_specs/AnthropicSpecs.py index c1b776617..218dac33f 100644 --- a/src/backend/langflow/components/llms/Anthropic.py +++ b/src/backend/langflow/components/model_specs/AnthropicSpecs.py @@ -10,6 +10,7 @@ from langflow.field_typing import BaseLanguageModel, NestedDict class AnthropicComponent(CustomComponent): display_name = "Anthropic" description = "Anthropic large language models." + icon = "Anthropic" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/AzureChatOpenAI.py b/src/backend/langflow/components/model_specs/AzureChatOpenAISpecs.py similarity index 97% rename from src/backend/langflow/components/llms/AzureChatOpenAI.py rename to src/backend/langflow/components/model_specs/AzureChatOpenAISpecs.py index d43abb3dc..e6e1b5da5 100644 --- a/src/backend/langflow/components/llms/AzureChatOpenAI.py +++ b/src/backend/langflow/components/model_specs/AzureChatOpenAISpecs.py @@ -1,14 +1,17 @@ from typing import Optional -from langflow import CustomComponent + from langchain.llms.base import BaseLanguageModel from langchain_community.chat_models.azure_openai import AzureChatOpenAI +from langflow import CustomComponent -class AzureChatOpenAIComponent(CustomComponent): + +class AzureChatOpenAISpecsComponent(CustomComponent): display_name: str = "AzureChatOpenAI" description: str = "LLM model from Azure OpenAI." documentation: str = "https://python.langchain.com/docs/integrations/llms/azure_openai" beta = False + icon = "Azure" AZURE_OPENAI_MODELS = [ "gpt-35-turbo", diff --git a/src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py b/src/backend/langflow/components/model_specs/BaiduQianfanChatEndpointsSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py rename to src/backend/langflow/components/model_specs/BaiduQianfanChatEndpointsSpecs.py diff --git a/src/backend/langflow/components/llms/BaiduQianfanLLMEndpoints.py b/src/backend/langflow/components/model_specs/BaiduQianfanLLMEndpointsSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/BaiduQianfanLLMEndpoints.py rename to src/backend/langflow/components/model_specs/BaiduQianfanLLMEndpointsSpecs.py diff --git a/src/backend/langflow/components/llms/CTransformers.py b/src/backend/langflow/components/model_specs/CTransformersSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/CTransformers.py rename to src/backend/langflow/components/model_specs/CTransformersSpecs.py diff --git a/src/backend/langflow/components/llms/ChatAnthropic.py b/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py similarity index 98% rename from src/backend/langflow/components/llms/ChatAnthropic.py rename to src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py index c0e376d16..fe3c3b6bb 100644 --- a/src/backend/langflow/components/llms/ChatAnthropic.py +++ b/src/backend/langflow/components/model_specs/ChatAnthropicSpecs.py @@ -9,6 +9,7 @@ class ChatAnthropicComponent(CustomComponent): display_name = "ChatAnthropic" description = "`Anthropic` chat large language models." documentation = "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic" + icon = "Anthropic" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/ChatLiteLLM.py b/src/backend/langflow/components/model_specs/ChatLiteLLMSpecs.py similarity index 87% rename from src/backend/langflow/components/llms/ChatLiteLLM.py rename to src/backend/langflow/components/model_specs/ChatLiteLLMSpecs.py index 1f7f22234..6760c12aa 100644 --- a/src/backend/langflow/components/llms/ChatLiteLLM.py +++ b/src/backend/langflow/components/model_specs/ChatLiteLLMSpecs.py @@ -1,6 +1,7 @@ from typing import Any, Callable, Dict, Optional, Union from langchain_community.chat_models.litellm import ChatLiteLLM, ChatLiteLLMException + from langflow import CustomComponent from langflow.field_typing import BaseLanguageModel @@ -137,7 +138,14 @@ class ChatLiteLLMComponent(CustomComponent): "OpenRouter": "openrouter_api_key", } # Set the API key based on the provider - kwarg = {provider_map[provider]: api_key} + api_keys: dict[str, Optional[str]] = {v: None for v in provider_map.values()} + + if variable_name := provider_map.get(provider): + api_keys[variable_name] = api_key + else: + raise ChatLiteLLMException( + f"Provider {provider} is not supported. Supported providers are: {', '.join(provider_map.keys())}" + ) LLM = ChatLiteLLM( model=model, @@ -150,6 +158,11 @@ class ChatLiteLLMComponent(CustomComponent): n=n, max_tokens=max_tokens, max_retries=max_retries, - **kwarg, + openai_api_key=api_keys["openai_api_key"], + azure_api_key=api_keys["azure_api_key"], + anthropic_api_key=api_keys["anthropic_api_key"], + replicate_api_key=api_keys["replicate_api_key"], + cohere_api_key=api_keys["cohere_api_key"], + openrouter_api_key=api_keys["openrouter_api_key"], ) return LLM diff --git a/src/backend/langflow/components/llms/ChatOllamaEndpoint.py b/src/backend/langflow/components/model_specs/ChatOllamaEndpointSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/ChatOllamaEndpoint.py rename to src/backend/langflow/components/model_specs/ChatOllamaEndpointSpecs.py diff --git a/src/backend/langflow/components/llms/ChatOpenAI.py b/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py similarity index 99% rename from src/backend/langflow/components/llms/ChatOpenAI.py rename to src/backend/langflow/components/model_specs/ChatOpenAISpecs.py index 2ad4f0309..0f20f0852 100644 --- a/src/backend/langflow/components/llms/ChatOpenAI.py +++ b/src/backend/langflow/components/model_specs/ChatOpenAISpecs.py @@ -9,6 +9,7 @@ from langflow.field_typing import BaseLanguageModel, NestedDict class ChatOpenAIComponent(CustomComponent): display_name = "ChatOpenAI" description = "`OpenAI` Chat large language models API." + icon = "OpenAI" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/ChatVertexAI.py b/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py similarity index 99% rename from src/backend/langflow/components/llms/ChatVertexAI.py rename to src/backend/langflow/components/model_specs/ChatVertexAISpecs.py index 66235a1d8..a1c8556a7 100644 --- a/src/backend/langflow/components/llms/ChatVertexAI.py +++ b/src/backend/langflow/components/model_specs/ChatVertexAISpecs.py @@ -10,6 +10,7 @@ from langflow.field_typing import BaseLanguageModel class ChatVertexAIComponent(CustomComponent): display_name = "ChatVertexAI" description = "`Vertex AI` Chat large language models API." + icon = "VertexAI" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/Cohere.py b/src/backend/langflow/components/model_specs/CohereSpecs.py similarity index 98% rename from src/backend/langflow/components/llms/Cohere.py rename to src/backend/langflow/components/model_specs/CohereSpecs.py index 3b74fc9b4..8cb0f3624 100644 --- a/src/backend/langflow/components/llms/Cohere.py +++ b/src/backend/langflow/components/model_specs/CohereSpecs.py @@ -7,6 +7,7 @@ class CohereComponent(CustomComponent): display_name = "Cohere" description = "Cohere large language models." documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" + icon = "Cohere" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/GoogleGenerativeAI.py b/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py similarity index 99% rename from src/backend/langflow/components/llms/GoogleGenerativeAI.py rename to src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py index eb1134583..9ff17e389 100644 --- a/src/backend/langflow/components/llms/GoogleGenerativeAI.py +++ b/src/backend/langflow/components/model_specs/GoogleGenerativeAISpecs.py @@ -10,6 +10,7 @@ class GoogleGenerativeAIComponent(CustomComponent): display_name: str = "Google Generative AI" description: str = "A component that uses Google Generative AI to generate text." documentation: str = "http://docs.langflow.org/components/custom" + icon = "Google" def build_config(self): return { diff --git a/src/backend/langflow/components/llms/HuggingFaceEndpoints.py b/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py similarity index 91% rename from src/backend/langflow/components/llms/HuggingFaceEndpoints.py rename to src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py index 0d28d5b9b..4b5b07b9a 100644 --- a/src/backend/langflow/components/llms/HuggingFaceEndpoints.py +++ b/src/backend/langflow/components/model_specs/HuggingFaceEndpointsSpecs.py @@ -1,12 +1,14 @@ from typing import Optional -from langflow import CustomComponent -from langchain.llms.huggingface_endpoint import HuggingFaceEndpoint + from langchain.llms.base import BaseLLM +from langchain.llms.huggingface_endpoint import HuggingFaceEndpoint +from langflow import CustomComponent class HuggingFaceEndpointsComponent(CustomComponent): display_name: str = "Hugging Face Inference API" description: str = "LLM model from Hugging Face Inference API." + icon = "HuggingFace" def build_config(self): return { @@ -31,11 +33,11 @@ class HuggingFaceEndpointsComponent(CustomComponent): model_kwargs: Optional[dict] = None, ) -> BaseLLM: try: - output = HuggingFaceEndpoint( + output = HuggingFaceEndpoint( # type: ignore endpoint_url=endpoint_url, task=task, huggingfacehub_api_token=huggingfacehub_api_token, - model_kwargs=model_kwargs, + model_kwargs=model_kwargs or {}, ) except Exception as e: raise ValueError("Could not connect to HuggingFace Endpoints API.") from e diff --git a/src/backend/langflow/components/llms/LlamaCpp.py b/src/backend/langflow/components/model_specs/LlamaCppSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/LlamaCpp.py rename to src/backend/langflow/components/model_specs/LlamaCppSpecs.py diff --git a/src/backend/langflow/components/llms/OllamaLLM.py b/src/backend/langflow/components/model_specs/OllamaLLMSpecs.py similarity index 100% rename from src/backend/langflow/components/llms/OllamaLLM.py rename to src/backend/langflow/components/model_specs/OllamaLLMSpecs.py diff --git a/src/backend/langflow/components/llms/VertexAI.py b/src/backend/langflow/components/model_specs/VertexAISpecs.py similarity index 99% rename from src/backend/langflow/components/llms/VertexAI.py rename to src/backend/langflow/components/model_specs/VertexAISpecs.py index 008451bc8..d622ddc81 100644 --- a/src/backend/langflow/components/llms/VertexAI.py +++ b/src/backend/langflow/components/model_specs/VertexAISpecs.py @@ -7,6 +7,7 @@ from langchain_community.llms.vertexai import VertexAI class VertexAIComponent(CustomComponent): display_name = "VertexAI" description = "Google Vertex AI large language models" + icon = "VertexAI" def build_config(self): return { diff --git a/src/backend/langflow/components/model_specs/__init__.py b/src/backend/langflow/components/model_specs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/components/models/AmazonBedrock.py b/src/backend/langflow/components/models/AmazonBedrockModel.py similarity index 80% rename from src/backend/langflow/components/models/AmazonBedrock.py rename to src/backend/langflow/components/models/AmazonBedrockModel.py index 8465ca877..ce7347fde 100644 --- a/src/backend/langflow/components/models/AmazonBedrock.py +++ b/src/backend/langflow/components/models/AmazonBedrockModel.py @@ -1,14 +1,15 @@ from typing import Optional from langchain_community.chat_models.bedrock import BedrockChat + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -from langflow import CustomComponent - -class AmazonBedrockComponent(CustomComponent): - display_name: str = "Amazon Bedrock model" +class AmazonBedrockComponent(LCModelComponent): + display_name: str = "Amazon Bedrock Model" description: str = "Generate text using LLM model from Amazon Bedrock." + icon = "Amazon" def build_config(self): return { @@ -34,12 +35,16 @@ class AmazonBedrockComponent(CustomComponent): "model_kwargs": {"display_name": "Model Kwargs"}, "cache": {"display_name": "Cache"}, "code": {"advanced": True}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, - inputs: str, + input_value: Text, model_id: str = "anthropic.claude-instant-v1", credentials_profile_name: Optional[str] = None, region_name: Optional[str] = None, @@ -47,6 +52,7 @@ class AmazonBedrockComponent(CustomComponent): endpoint_url: Optional[str] = None, streaming: bool = False, cache: Optional[bool] = None, + stream: bool = False, ) -> Text: try: output = BedrockChat( @@ -60,7 +66,5 @@ class AmazonBedrockComponent(CustomComponent): ) # type: ignore except Exception as e: raise ValueError("Could not connect to AmazonBedrock API.") from e - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/Anthropic.py b/src/backend/langflow/components/models/AnthropicModel.py similarity index 79% rename from src/backend/langflow/components/models/Anthropic.py rename to src/backend/langflow/components/models/AnthropicModel.py index 86af33ede..fb891f9a3 100644 --- a/src/backend/langflow/components/models/Anthropic.py +++ b/src/backend/langflow/components/models/AnthropicModel.py @@ -2,15 +2,15 @@ from typing import Optional from langchain_community.chat_models.anthropic import ChatAnthropic from pydantic.v1 import SecretStr + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -from langflow import CustomComponent - - -class AnthropicLLM(CustomComponent): - display_name: str = "Anthropic model" +class AnthropicLLM(LCModelComponent): + display_name: str = "AnthropicModel" description: str = "Generate text using Anthropic Chat&Completion large language models." + icon = "Anthropic" def build_config(self): return { @@ -48,17 +48,22 @@ class AnthropicLLM(CustomComponent): "info": "Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.", }, "code": {"show": False}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, model: str, - inputs: str, + input_value: Text, anthropic_api_key: Optional[str] = None, max_tokens: Optional[int] = None, temperature: Optional[float] = None, api_endpoint: Optional[str] = None, + stream: bool = False, ) -> Text: # Set default API endpoint if not provided if not api_endpoint: @@ -67,14 +72,12 @@ class AnthropicLLM(CustomComponent): try: output = ChatAnthropic( model_name=model, - anthropic_api_key=SecretStr(anthropic_api_key) if anthropic_api_key else None, + anthropic_api_key=(SecretStr(anthropic_api_key) if anthropic_api_key else None), max_tokens_to_sample=max_tokens, # type: ignore temperature=temperature, anthropic_api_url=api_endpoint, ) except Exception as e: raise ValueError("Could not connect to Anthropic API.") from e - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/AzureOpenAI.py b/src/backend/langflow/components/models/AzureOpenAIModel.py similarity index 81% rename from src/backend/langflow/components/models/AzureOpenAI.py rename to src/backend/langflow/components/models/AzureOpenAIModel.py index f640be109..81c22d399 100644 --- a/src/backend/langflow/components/models/AzureOpenAI.py +++ b/src/backend/langflow/components/models/AzureOpenAIModel.py @@ -2,15 +2,18 @@ from typing import Optional from langchain.llms.base import BaseLanguageModel from langchain_openai import AzureChatOpenAI +from pydantic.v1 import SecretStr -from langflow import CustomComponent +from langflow.components.models.base.model import LCModelComponent +from langflow.field_typing import Text -class AzureChatOpenAIComponent(CustomComponent): - display_name: str = "AzureOpenAI model" +class AzureChatOpenAIComponent(LCModelComponent): + display_name: str = "AzureOpenAI Model" description: str = "Generate text using LLM model from Azure OpenAI." documentation: str = "https://python.langchain.com/docs/integrations/llms/azure_openai" beta = False + icon = "Azure" AZURE_OPENAI_MODELS = [ "gpt-35-turbo", @@ -71,33 +74,37 @@ class AzureChatOpenAIComponent(CustomComponent): "info": "Maximum number of tokens to generate.", }, "code": {"show": False}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, model: str, azure_endpoint: str, - inputs: str, + input_value: Text, azure_deployment: str, api_key: str, api_version: str, temperature: float = 0.7, max_tokens: Optional[int] = 1000, + stream: bool = False, ) -> BaseLanguageModel: + secret_api_key = SecretStr(api_key) try: output = AzureChatOpenAI( model=model, azure_endpoint=azure_endpoint, azure_deployment=azure_deployment, api_version=api_version, - api_key=api_key, + api_key=secret_api_key, temperature=temperature, max_tokens=max_tokens, ) except Exception as e: raise ValueError("Could not connect to AzureOpenAI API.") from e - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/BaiduQianfanChat.py b/src/backend/langflow/components/models/BaiduQianfanChatModel.py similarity index 87% rename from src/backend/langflow/components/models/BaiduQianfanChat.py rename to src/backend/langflow/components/models/BaiduQianfanChatModel.py index 88051d0e9..1ef65ee33 100644 --- a/src/backend/langflow/components/models/BaiduQianfanChat.py +++ b/src/backend/langflow/components/models/BaiduQianfanChatModel.py @@ -3,16 +3,17 @@ from typing import Optional from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint from pydantic.v1 import SecretStr -from langflow import CustomComponent +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -class QianfanChatEndpointComponent(CustomComponent): +class QianfanChatEndpointComponent(LCModelComponent): display_name: str = "QianfanChat Model" description: str = ( "Generate text using Baidu Qianfan chat models. Get more detail from " "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint." ) + icon = "BaiduQianfan" def build_config(self): return { @@ -68,12 +69,16 @@ class QianfanChatEndpointComponent(CustomComponent): "info": "Endpoint of the Qianfan LLM, required if custom model used.", }, "code": {"show": False}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, - inputs: str, + input_value: Text, model: str = "ERNIE-Bot-turbo", qianfan_ak: Optional[str] = None, qianfan_sk: Optional[str] = None, @@ -81,6 +86,7 @@ class QianfanChatEndpointComponent(CustomComponent): temperature: Optional[float] = None, penalty_score: Optional[float] = None, endpoint: Optional[str] = None, + stream: bool = False, ) -> Text: try: output = QianfanChatEndpoint( # type: ignore @@ -94,7 +100,5 @@ class QianfanChatEndpointComponent(CustomComponent): ) except Exception as e: raise ValueError("Could not connect to Baidu Qianfan API.") from e - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/CTransformers.py b/src/backend/langflow/components/models/CTransformersModel.py similarity index 57% rename from src/backend/langflow/components/models/CTransformers.py rename to src/backend/langflow/components/models/CTransformersModel.py index 16cb8ff1d..219d74440 100644 --- a/src/backend/langflow/components/models/CTransformers.py +++ b/src/backend/langflow/components/models/CTransformersModel.py @@ -1,13 +1,13 @@ from typing import Dict, Optional from langchain_community.llms.ctransformers import CTransformers + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -from langflow import CustomComponent - -class CTransformersComponent(CustomComponent): - display_name = "CTransformers model" +class CTransformersComponent(LCModelComponent): + display_name = "CTransformersModel" description = "Generate text using CTransformers LLM models" documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers" @@ -28,12 +28,28 @@ class CTransformersComponent(CustomComponent): "field_type": "dict", "value": '{"top_k":40,"top_p":0.95,"temperature":0.8,"repetition_penalty":1.1,"last_n_tokens":64,"seed":-1,"max_new_tokens":256,"stop":"","stream":"False","reset":"True","batch_size":8,"threads":-1,"context_length":-1,"gpu_layers":0}', }, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } - def build(self, model: str, model_file: str, inputs: str, model_type: str, config: Optional[Dict] = None) -> Text: - output = CTransformers(model=model, model_file=model_file, model_type=model_type, config=config) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + def build( + self, + model: str, + model_file: str, + input_value: Text, + model_type: str, + stream: bool = False, + config: Optional[Dict] = None, + ) -> Text: + output = CTransformers( + client=None, + model=model, + model_file=model_file, + model_type=model_type, + config=config, # noqa + ) + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/Cohere.py b/src/backend/langflow/components/models/Cohere.py deleted file mode 100644 index 3342033b1..000000000 --- a/src/backend/langflow/components/models/Cohere.py +++ /dev/null @@ -1,30 +0,0 @@ -from langchain_community.chat_models.cohere import ChatCohere -from langflow import CustomComponent -from langflow.field_typing import Text - - -class CohereComponent(CustomComponent): - display_name = "Cohere model" - description = "Generate text using Cohere large language models." - documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" - - def build_config(self): - return { - "cohere_api_key": {"display_name": "Cohere API Key", "type": "password", "password": True}, - "max_tokens": {"display_name": "Max Tokens", "default": 256, "type": "int", "show": True}, - "temperature": {"display_name": "Temperature", "default": 0.75, "type": "float", "show": True}, - "inputs": {"display_name": "Input"}, - } - - def build( - self, - cohere_api_key: str, - inputs: str, - max_tokens: int = 256, - temperature: float = 0.75, - ) -> Text: - output = ChatCohere(cohere_api_key=cohere_api_key, max_tokens=max_tokens, temperature=temperature) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result diff --git a/src/backend/langflow/components/models/CohereModel.py b/src/backend/langflow/components/models/CohereModel.py new file mode 100644 index 000000000..c0b603695 --- /dev/null +++ b/src/backend/langflow/components/models/CohereModel.py @@ -0,0 +1,51 @@ +from langchain_community.chat_models.cohere import ChatCohere + +from langflow.components.models.base.model import LCModelComponent +from langflow.field_typing import Text + + +class CohereComponent(LCModelComponent): + display_name = "CohereModel" + description = "Generate text using Cohere large language models." + documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" + + icon = "Cohere" + + def build_config(self): + return { + "cohere_api_key": { + "display_name": "Cohere API Key", + "type": "password", + "password": True, + }, + "max_tokens": { + "display_name": "Max Tokens", + "default": 256, + "type": "int", + "show": True, + }, + "temperature": { + "display_name": "Temperature", + "default": 0.75, + "type": "float", + "show": True, + }, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, + } + + def build( + self, + cohere_api_key: str, + input_value: Text, + temperature: float = 0.75, + stream: bool = False, + ) -> Text: + output = ChatCohere( # type: ignore + cohere_api_key=cohere_api_key, + temperature=temperature, + ) + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/GoogleGenerativeAI.py b/src/backend/langflow/components/models/GoogleGenerativeAIModel.py similarity index 76% rename from src/backend/langflow/components/models/GoogleGenerativeAI.py rename to src/backend/langflow/components/models/GoogleGenerativeAIModel.py index a3756a55a..c979e6db4 100644 --- a/src/backend/langflow/components/models/GoogleGenerativeAI.py +++ b/src/backend/langflow/components/models/GoogleGenerativeAIModel.py @@ -1,16 +1,17 @@ from typing import Optional -from langchain_google_genai import ChatGoogleGenerativeAI # type: ignore -from langflow import CustomComponent -from langflow.field_typing import RangeSpec -from pydantic.v1.types import SecretStr -from langflow.field_typing import Text +from langchain_google_genai import ChatGoogleGenerativeAI +from pydantic.v1 import SecretStr + +from langflow.components.models.base.model import LCModelComponent +from langflow.field_typing import RangeSpec, Text -class GoogleGenerativeAIComponent(CustomComponent): - display_name: str = "Google Generative AI model" +class GoogleGenerativeAIComponent(LCModelComponent): + display_name: str = "Google Generative AIModel" description: str = "Generate text using Google Generative AI to generate text." - documentation: str = "http://docs.langflow.org/components/custom" + icon = "GoogleGenerativeAI" + icon = "Google" def build_config(self): return { @@ -50,19 +51,24 @@ class GoogleGenerativeAIComponent(CustomComponent): "code": { "advanced": True, }, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input", "info": "The input to the model."}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, google_api_key: str, model: str, - inputs: str, + input_value: Text, max_output_tokens: Optional[int] = None, temperature: float = 0.1, top_k: Optional[int] = None, top_p: Optional[float] = None, n: Optional[int] = 1, + stream: bool = False, ) -> Text: output = ChatGoogleGenerativeAI( model=model, @@ -73,7 +79,4 @@ class GoogleGenerativeAIComponent(CustomComponent): n=n or 1, google_api_key=SecretStr(google_api_key), ) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/HuggingFace.py b/src/backend/langflow/components/models/HuggingFaceModel.py similarity index 65% rename from src/backend/langflow/components/models/HuggingFace.py rename to src/backend/langflow/components/models/HuggingFaceModel.py index c37cda530..33cc57815 100644 --- a/src/backend/langflow/components/models/HuggingFace.py +++ b/src/backend/langflow/components/models/HuggingFaceModel.py @@ -1,13 +1,16 @@ from typing import Optional -from langflow import CustomComponent -from langchain.llms.huggingface_endpoint import HuggingFaceEndpoint + from langchain_community.chat_models.huggingface import ChatHuggingFace +from langchain_community.llms.huggingface_endpoint import HuggingFaceEndpoint + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -class HuggingFaceEndpointsComponent(CustomComponent): +class HuggingFaceEndpointsComponent(LCModelComponent): display_name: str = "Hugging Face Inference API models" description: str = "Generate text using LLM model from Hugging Face Inference API." + icon = "HuggingFace" def build_config(self): return { @@ -22,28 +25,32 @@ class HuggingFaceEndpointsComponent(CustomComponent): "field_type": "code", }, "code": {"show": False}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, - inputs: str, + input_value: Text, endpoint_url: str, + model: Optional[str] = None, task: str = "text2text-generation", huggingfacehub_api_token: Optional[str] = None, model_kwargs: Optional[dict] = None, + stream: bool = False, ) -> Text: try: - llm = HuggingFaceEndpoint( + llm = HuggingFaceEndpoint( # type: ignore endpoint_url=endpoint_url, task=task, huggingfacehub_api_token=huggingfacehub_api_token, - model_kwargs=model_kwargs, + model_kwargs=model_kwargs or {}, + model=model or "", ) except Exception as e: raise ValueError("Could not connect to HuggingFace Endpoints API.") from e output = ChatHuggingFace(llm=llm) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/LlamaCpp.py b/src/backend/langflow/components/models/LlamaCppModel.py similarity index 88% rename from src/backend/langflow/components/models/LlamaCpp.py rename to src/backend/langflow/components/models/LlamaCppModel.py index 925703007..468a1ac8b 100644 --- a/src/backend/langflow/components/models/LlamaCpp.py +++ b/src/backend/langflow/components/models/LlamaCppModel.py @@ -1,11 +1,13 @@ -from typing import Optional, List, Dict, Any -from langflow import CustomComponent +from typing import Any, Dict, List, Optional + from langchain_community.llms.llamacpp import LlamaCpp + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -class LlamaCppComponent(CustomComponent): - display_name = "LlamaCpp model" +class LlamaCppComponent(LCModelComponent): + display_name = "LlamaCppModel" description = "Generate text using llama.cpp model." documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp" @@ -17,7 +19,10 @@ class LlamaCppComponent(CustomComponent): "echo": {"display_name": "Echo", "advanced": True}, "f16_kv": {"display_name": "F16 KV", "advanced": True}, "grammar_path": {"display_name": "Grammar Path", "advanced": True}, - "last_n_tokens_size": {"display_name": "Last N Tokens Size", "advanced": True}, + "last_n_tokens_size": { + "display_name": "Last N Tokens Size", + "advanced": True, + }, "logits_all": {"display_name": "Logits All", "advanced": True}, "logprobs": {"display_name": "Logprobs", "advanced": True}, "lora_base": {"display_name": "Lora Base", "advanced": True}, @@ -51,13 +56,17 @@ class LlamaCppComponent(CustomComponent): "use_mmap": {"display_name": "Use Mmap", "advanced": True}, "verbose": {"display_name": "Verbose", "advanced": True}, "vocab_only": {"display_name": "Vocab Only", "advanced": True}, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, model_path: str, - inputs: str, + input_value: Text, grammar: Optional[str] = None, cache: Optional[bool] = None, client: Optional[Any] = None, @@ -92,6 +101,7 @@ class LlamaCppComponent(CustomComponent): use_mmap: Optional[bool] = True, verbose: bool = True, vocab_only: bool = False, + stream: bool = False, ) -> Text: output = LlamaCpp( model_path=model_path, @@ -130,7 +140,5 @@ class LlamaCppComponent(CustomComponent): verbose=verbose, vocab_only=vocab_only, ) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/Ollama.py b/src/backend/langflow/components/models/OllamaModel.py similarity index 95% rename from src/backend/langflow/components/models/Ollama.py rename to src/backend/langflow/components/models/OllamaModel.py index 496dc1a15..9de1847f0 100644 --- a/src/backend/langflow/components/models/Ollama.py +++ b/src/backend/langflow/components/models/OllamaModel.py @@ -3,17 +3,19 @@ from typing import Any, Dict, List, Optional # from langchain_community.chat_models import ChatOllama from langchain_community.chat_models import ChatOllama +from langflow.components.models.base.model import LCModelComponent + # from langchain.chat_models import ChatOllama -from langflow import CustomComponent from langflow.field_typing import Text # whe When a callback component is added to Langflow, the comment must be uncommented. # from langchain.callbacks.manager import CallbackManager -class ChatOllamaComponent(CustomComponent): - display_name = "ChatOllama model" +class ChatOllamaComponent(LCModelComponent): + display_name = "ChatOllamaModel" description = "Generate text using Local LLM for chat with Ollama." + icon = "Ollama" def build_config(self) -> dict: return { @@ -164,14 +166,18 @@ class ChatOllamaComponent(CustomComponent): "info": "Template to use for generating text.", "advanced": True, }, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, base_url: Optional[str], model: str, - inputs: str, + input_value: Text, mirostat: Optional[str], mirostat_eta: Optional[float] = None, mirostat_tau: Optional[float] = None, @@ -197,6 +203,7 @@ class ChatOllamaComponent(CustomComponent): timeout: Optional[int] = None, top_k: Optional[int] = None, top_p: Optional[int] = None, + stream: bool = False, ) -> Text: if not base_url: base_url = "http://localhost:11434" @@ -250,7 +257,5 @@ class ChatOllamaComponent(CustomComponent): output = ChatOllama(**llm_params) # type: ignore except Exception as e: raise ValueError("Could not initialize Ollama LLM.") from e - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/OpenAI.py b/src/backend/langflow/components/models/OpenAIModel.py similarity index 77% rename from src/backend/langflow/components/models/OpenAI.py rename to src/backend/langflow/components/models/OpenAIModel.py index 1cc352b20..f595255ce 100644 --- a/src/backend/langflow/components/models/OpenAI.py +++ b/src/backend/langflow/components/models/OpenAIModel.py @@ -1,17 +1,20 @@ from typing import Optional from langchain_openai import ChatOpenAI -from langflow import CustomComponent +from pydantic.v1 import SecretStr + +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import NestedDict, Text -class OpenAIModelComponent(CustomComponent): +class OpenAIModelComponent(LCModelComponent): display_name = "OpenAI Model" description = "Generates text using OpenAI's models." + icon = "OpenAI" def build_config(self): return { - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, "max_tokens": { "display_name": "Max Tokens", "advanced": False, @@ -56,30 +59,36 @@ class OpenAIModelComponent(CustomComponent): "required": False, "value": 0.7, }, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, - inputs: Text, + input_value: Text, max_tokens: Optional[int] = 256, model_kwargs: NestedDict = {}, model_name: str = "gpt-4-1106-preview", openai_api_base: Optional[str] = None, openai_api_key: Optional[str] = None, temperature: float = 0.7, + stream: bool = False, ) -> Text: if not openai_api_base: openai_api_base = "https://api.openai.com/v1" - model = ChatOpenAI( + if openai_api_key: + secret_key = SecretStr(openai_api_key) + else: + secret_key = None + output = ChatOpenAI( max_tokens=max_tokens, model_kwargs=model_kwargs, model=model_name, base_url=openai_api_base, - api_key=openai_api_key, + api_key=secret_key, temperature=temperature, ) - message = model.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/VertexAi.py b/src/backend/langflow/components/models/VertexAiModel.py similarity index 81% rename from src/backend/langflow/components/models/VertexAi.py rename to src/backend/langflow/components/models/VertexAiModel.py index 65f64578f..c4354d999 100644 --- a/src/backend/langflow/components/models/VertexAi.py +++ b/src/backend/langflow/components/models/VertexAiModel.py @@ -2,13 +2,14 @@ from typing import List, Optional from langchain_core.messages.base import BaseMessage -from langflow import CustomComponent +from langflow.components.models.base.model import LCModelComponent from langflow.field_typing import Text -class ChatVertexAIComponent(CustomComponent): - display_name = "ChatVertexAI model" +class ChatVertexAIComponent(LCModelComponent): + display_name = "ChatVertexAIModel" description = "Generate text using Vertex AI Chat large language models API." + icon = "VertexAI" def build_config(self): return { @@ -57,12 +58,16 @@ class ChatVertexAIComponent(CustomComponent): "value": False, "advanced": True, }, - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, + "stream": { + "display_name": "Stream", + "info": "Stream the response from the model.", + }, } def build( self, - inputs: str, + input_value: Text, credentials: Optional[str], project: str, examples: Optional[List[BaseMessage]] = [], @@ -73,9 +78,10 @@ class ChatVertexAIComponent(CustomComponent): top_k: int = 40, top_p: float = 0.95, verbose: bool = False, + stream: bool = False, ) -> Text: try: - from langchain_google_vertexai import ChatVertexAI + from langchain_google_vertexai import ChatVertexAI # type: ignore except ImportError: raise ImportError( "To use the ChatVertexAI model, you need to install the langchain-google-vertexai package." @@ -92,7 +98,5 @@ class ChatVertexAIComponent(CustomComponent): top_p=top_p, verbose=verbose, ) - message = output.invoke(inputs) - result = message.content if hasattr(message, "content") else message - self.status = result - return result + + return self.get_result(output=output, stream=stream, input_value=input_value) diff --git a/src/backend/langflow/components/models/base/__init__.py b/src/backend/langflow/components/models/base/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/components/models/base/model.py b/src/backend/langflow/components/models/base/model.py new file mode 100644 index 000000000..9f9ca7b36 --- /dev/null +++ b/src/backend/langflow/components/models/base/model.py @@ -0,0 +1,28 @@ +from langchain_core.runnables import Runnable + +from langflow import CustomComponent + + +class LCModelComponent(CustomComponent): + display_name: str = "Model Name" + description: str = "Model Description" + + def get_result(self, output: Runnable, stream: bool, input_value: str): + """ + Retrieves the result from the output of a Runnable object. + + Args: + output (Runnable): The output object to retrieve the result from. + stream (bool): Indicates whether to use streaming or invocation mode. + input_value (str): The input value to pass to the output object. + + Returns: + The result obtained from the output object. + """ + if stream: + result = output.stream(input_value) + else: + message = output.invoke(input_value) + result = message.content if hasattr(message, "content") else message + self.status = result + return result diff --git a/src/backend/langflow/components/prompts/Prompt.py b/src/backend/langflow/components/prompts/Prompt.py index ca8262c2f..975998919 100644 --- a/src/backend/langflow/components/prompts/Prompt.py +++ b/src/backend/langflow/components/prompts/Prompt.py @@ -1,4 +1,5 @@ from langchain_core.prompts import PromptTemplate + from langflow import CustomComponent from langflow.field_typing import Prompt, TemplateField, Text @@ -19,10 +20,10 @@ class PromptComponent(CustomComponent): template: Prompt, **kwargs, ) -> Text: - prompt_template = PromptTemplate.from_template(template) + prompt_template = PromptTemplate.from_template(Text(template)) attributes_to_check = ["text", "page_content"] - for key, value in kwargs.items(): + for key, value in kwargs.copy().items(): for attribute in attributes_to_check: if hasattr(value, attribute): kwargs[key] = getattr(value, attribute) diff --git a/src/backend/langflow/components/retrievers/AmazonKendra.py b/src/backend/langflow/components/retrievers/AmazonKendra.py index 827945a51..886afeff5 100644 --- a/src/backend/langflow/components/retrievers/AmazonKendra.py +++ b/src/backend/langflow/components/retrievers/AmazonKendra.py @@ -1,12 +1,15 @@ from typing import Optional -from langflow import CustomComponent -from langchain.retrievers import AmazonKendraRetriever + from langchain.schema import BaseRetriever +from langchain_community.retrievers import AmazonKendraRetriever + +from langflow import CustomComponent class AmazonKendraRetrieverComponent(CustomComponent): display_name: str = "Amazon Kendra Retriever" description: str = "Retriever that uses the Amazon Kendra API." + icon = "Amazon" def build_config(self): return { diff --git a/src/backend/langflow/components/retrievers/MetalRetriever.py b/src/backend/langflow/components/retrievers/MetalRetriever.py index 88393f26d..1d37906d1 100644 --- a/src/backend/langflow/components/retrievers/MetalRetriever.py +++ b/src/backend/langflow/components/retrievers/MetalRetriever.py @@ -1,9 +1,11 @@ from typing import Optional -from langflow import CustomComponent -from langchain.retrievers import MetalRetriever + from langchain.schema import BaseRetriever +from langchain_community.retrievers import MetalRetriever from metal_sdk.metal import Metal # type: ignore +from langflow import CustomComponent + class MetalRetrieverComponent(CustomComponent): display_name: str = "Metal Retriever" diff --git a/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py b/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py index 26afd765c..bb2941158 100644 --- a/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py +++ b/src/backend/langflow/components/retrievers/VectaraSelfQueryRetriver.py @@ -17,6 +17,7 @@ class VectaraSelfQueryRetriverComponent(CustomComponent): description: str = "Implementation of Vectara Self Query Retriever" documentation = "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query" beta = True + icon = "Vectara" field_config = { "code": {"show": True}, diff --git a/src/backend/langflow/components/tools/SearchApi.py b/src/backend/langflow/components/tools/SearchApi.py new file mode 100644 index 000000000..53da6c741 --- /dev/null +++ b/src/backend/langflow/components/tools/SearchApi.py @@ -0,0 +1,51 @@ +from langflow import CustomComponent +from langchain.schema import Document +from langflow.services.database.models.base import orjson_dumps +from langchain_community.utilities.searchapi import SearchApiAPIWrapper +from typing import Optional + + +class SearchApi(CustomComponent): + display_name: str = "SearchApi" + description: str = "Real-time search engine results API." + output_types: list[str] = ["Document"] + documentation: str = "https://www.searchapi.io/docs/google" + field_config = { + "engine": { + "display_name": "Engine", + "field_type": "str", + "info": "The search engine to use.", + }, + "params": { + "display_name": "Parameters", + "info": "The parameters to send with the request.", + }, + "code": {"show": False}, + "api_key": { + "display_name": "API Key", + "field_type": "str", + "required": True, + "password": True, + "info": "The API key to use SearchApi.", + }, + } + + def build( + self, + engine: str, + api_key: str, + params: Optional[dict] = None, + ) -> Document: + if params is None: + params = {} + + search_api_wrapper = SearchApiAPIWrapper(engine=engine, searchapi_api_key=api_key) + + q = params.pop("q", "SearchApi Langflow") + results = search_api_wrapper.results(q, **params) + + result = orjson_dumps(results, indent_2=False) + + document = Document(page_content=result) + + return document diff --git a/src/backend/langflow/components/utilities/DocumentToRecord.py b/src/backend/langflow/components/utilities/DocumentToRecord.py new file mode 100644 index 000000000..b5dc3f657 --- /dev/null +++ b/src/backend/langflow/components/utilities/DocumentToRecord.py @@ -0,0 +1,22 @@ +from typing import List + +from langchain_core.documents import Document + +from langflow import CustomComponent +from langflow.schema import Record + + +class DocumentToRecordComponent(CustomComponent): + display_name = "Documents to Records" + description = "Convert documents to records." + + field_config = { + "documents": {"display_name": "Documents"}, + } + + def build(self, documents: List[Document]) -> List[Record]: + if isinstance(documents, Document): + documents = [documents] + records = [Record.from_document(document) for document in documents] + self.status = records + return records diff --git a/src/backend/langflow/components/utilities/GetRequest.py b/src/backend/langflow/components/utilities/GetRequest.py index b143a8e7e..d6ee5a44f 100644 --- a/src/backend/langflow/components/utilities/GetRequest.py +++ b/src/backend/langflow/components/utilities/GetRequest.py @@ -1,7 +1,8 @@ -from typing import Optional +from typing import Optional, Text import requests from langchain_core.documents import Document + from langflow import CustomComponent from langflow.services.database.models.base import orjson_dumps @@ -55,7 +56,7 @@ class GetRequest(CustomComponent): ) except Exception as exc: return Document( - page_content=str(exc), + page_content=Text(exc), metadata={"source": url, "headers": headers, "status_code": 500}, ) diff --git a/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py b/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py index be5efe738..3c340e9c2 100644 --- a/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py +++ b/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py @@ -3,6 +3,7 @@ from typing import Dict # Assuming the existence of GoogleSerperAPIWrapper class in the serper module # If this class does not exist, you would need to create it or import the appropriate class from another module from langchain_community.utilities.google_serper import GoogleSerperAPIWrapper + from langflow import CustomComponent @@ -17,20 +18,23 @@ class GoogleSerperAPIWrapperComponent(CustomComponent): "show": True, "multiline": False, "password": False, - "name": "result_key_for_type", "advanced": False, "dynamic": False, "info": "", "field_type": "dict", "list": False, - "value": {"news": "news", "places": "places", "images": "images", "search": "organic"}, + "value": { + "news": "news", + "places": "places", + "images": "images", + "search": "organic", + }, }, "serper_api_key": { "display_name": "Serper API Key", "show": True, "multiline": False, "password": True, - "name": "serper_api_key", "advanced": False, "dynamic": False, "info": "", diff --git a/src/backend/langflow/components/utilities/IDGenerator.py b/src/backend/langflow/components/utilities/IDGenerator.py index 5b81e61e5..ceb937a6c 100644 --- a/src/backend/langflow/components/utilities/IDGenerator.py +++ b/src/backend/langflow/components/utilities/IDGenerator.py @@ -1,4 +1,5 @@ import uuid +from typing import Text from langflow import CustomComponent @@ -9,7 +10,7 @@ class UUIDGeneratorComponent(CustomComponent): description = "Generates a unique ID." def generate(self, *args, **kwargs): - return str(uuid.uuid4().hex) + return Text(uuid.uuid4().hex) def build_config(self): return {"unique_id": {"display_name": "Value", "value": self.generate}} diff --git a/src/backend/langflow/components/utilities/PostRequest.py b/src/backend/langflow/components/utilities/PostRequest.py index baf734f54..befc006c8 100644 --- a/src/backend/langflow/components/utilities/PostRequest.py +++ b/src/backend/langflow/components/utilities/PostRequest.py @@ -1,7 +1,8 @@ -from typing import Optional +from typing import Optional, Text import requests from langchain_core.documents import Document + from langflow import CustomComponent from langflow.services.database.models.base import orjson_dumps @@ -47,7 +48,7 @@ class PostRequest(CustomComponent): ) except Exception as exc: return Document( - page_content=str(exc), + page_content=Text(exc), metadata={ "source": url, "headers": headers, diff --git a/src/backend/langflow/components/utilities/RecordsAsText.py b/src/backend/langflow/components/utilities/RecordsAsText.py index 8c4be331a..debf3eed2 100644 --- a/src/backend/langflow/components/utilities/RecordsAsText.py +++ b/src/backend/langflow/components/utilities/RecordsAsText.py @@ -1,5 +1,6 @@ from langflow import CustomComponent from langflow.field_typing import Text +from langflow.helpers.record import records_to_text from langflow.schema import Record @@ -27,7 +28,6 @@ class RecordsAsTextComponent(CustomComponent): if isinstance(records, Record): records = [records] - formated_records = [template.format(text=record.text, **record.data) for record in records] - result_string = "\n".join(formated_records) + result_string = records_to_text(template, records) self.status = result_string return result_string diff --git a/src/backend/langflow/components/utilities/RunnableExecutor.py b/src/backend/langflow/components/utilities/RunnableExecutor.py index f83f352b4..1a3e1fa7f 100644 --- a/src/backend/langflow/components/utilities/RunnableExecutor.py +++ b/src/backend/langflow/components/utilities/RunnableExecutor.py @@ -15,7 +15,7 @@ class RunnableExecComponent(CustomComponent): "display_name": "Input Key", "info": "The key to use for the input.", }, - "inputs": { + "input_value": { "display_name": "Inputs", "info": "The inputs to pass to the runnable.", }, @@ -32,11 +32,11 @@ class RunnableExecComponent(CustomComponent): def build( self, input_key: str, - inputs: str, + input_value: Text, runnable: Runnable, output_key: str = "output", ) -> Text: - result = runnable.invoke({input_key: inputs}) + result = runnable.invoke({input_key: input_value}) result = result.get(output_key) self.status = result return result diff --git a/src/backend/langflow/components/utilities/SQLDatabase.py b/src/backend/langflow/components/utilities/SQLDatabase.py new file mode 100644 index 000000000..ddd1be318 --- /dev/null +++ b/src/backend/langflow/components/utilities/SQLDatabase.py @@ -0,0 +1,22 @@ +from langchain_experimental.sql.base import SQLDatabase + +from langflow import CustomComponent + + +class SQLDatabaseComponent(CustomComponent): + display_name = "SQLDatabase" + description = "SQL Database" + + def build_config(self): + return { + "uri": {"display_name": "URI", "info": "URI to the database."}, + } + + def clean_up_uri(self, uri: str) -> str: + if uri.startswith("postgresql://"): + uri = uri.replace("postgresql://", "postgres://") + return uri.strip() + + def build(self, uri: str) -> SQLDatabase: + uri = self.clean_up_uri(uri) + return SQLDatabase.from_uri(uri) diff --git a/src/backend/langflow/components/utilities/SQLExecutor.py b/src/backend/langflow/components/utilities/SQLExecutor.py new file mode 100644 index 000000000..530391c31 --- /dev/null +++ b/src/backend/langflow/components/utilities/SQLExecutor.py @@ -0,0 +1,56 @@ +from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool +from langchain_experimental.sql.base import SQLDatabase + +from langflow import CustomComponent +from langflow.field_typing import Text + + +class SQLExecutorComponent(CustomComponent): + display_name = "SQL Executor" + description = "Execute SQL query." + + def build_config(self): + return { + "database": {"display_name": "Database"}, + "include_columns": { + "display_name": "Include Columns", + "info": "Include columns in the result.", + }, + "passthrough": { + "display_name": "Passthrough", + "info": "If an error occurs, return the query instead of raising an exception.", + }, + "add_error": { + "display_name": "Add Error", + "info": "Add the error to the result.", + }, + } + + def build( + self, + query: str, + database: SQLDatabase, + include_columns: bool = False, + passthrough: bool = False, + add_error: bool = False, + ) -> Text: + error = None + try: + tool = QuerySQLDataBaseTool(db=database) + result = tool.run(query, include_columns=include_columns) + self.status = result + except Exception as e: + result = Text(e) + self.status = result + if not passthrough: + raise e + error = repr(e) + + if add_error and error is not None: + result = f"{result}\n\nError: {error}\n\nQuery: {query}" + elif error is not None: + # Then we won't add the error to the result + # but since we are in passthrough mode, we will return the query + result = query + + return result diff --git a/src/backend/langflow/components/utilities/SharedState.py b/src/backend/langflow/components/utilities/SharedState.py new file mode 100644 index 000000000..7d29da9bb --- /dev/null +++ b/src/backend/langflow/components/utilities/SharedState.py @@ -0,0 +1,38 @@ +from typing import Union + +from langflow import CustomComponent +from langflow.field_typing import Text +from langflow.schema import Record + + +class SharedState(CustomComponent): + display_name = "Shared State" + description = "A component to share state between components." + + def build_config(self): + return { + "name": {"display_name": "Name", "info": "The name of the state."}, + "record": {"display_name": "Record", "info": "The record to store."}, + "append": { + "display_name": "Append", + "info": "If True, the record will be appended to the state.", + }, + } + + def build( + self, name: str, record: Union[Text, Record], append: bool = False + ) -> Record: + if append: + self.append_state(name, record) + else: + self.update_state(name, record) + + state = self.get_state(name) + if not isinstance(state, Record): + if isinstance(state, str): + state = Record(text=state) + elif isinstance(state, dict): + state = Record(data=state) + else: + state = Record(text=str(state)) + return state diff --git a/src/backend/langflow/components/utilities/ShouldRunNext.py b/src/backend/langflow/components/utilities/ShouldRunNext.py new file mode 100644 index 000000000..b9ae3b048 --- /dev/null +++ b/src/backend/langflow/components/utilities/ShouldRunNext.py @@ -0,0 +1,49 @@ +# Implement ShouldRunNext component +from typing import Text +from langchain_core.prompts import PromptTemplate + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, Prompt + + +class ShouldRunNext(CustomComponent): + display_name = "Should Run Next" + description = "Decides whether to run the next component." + + def build_config(self): + return { + "prompt": { + "display_name": "Prompt", + "info": "The prompt to use for the decision. It should generate a boolean response (True or False).", + }, + "llm": { + "display_name": "LLM", + "info": "The language model to use for the decision.", + }, + } + + def build(self, template: Prompt, llm: BaseLanguageModel, **kwargs) -> dict: + # This is a simple component that always returns True + prompt_template = PromptTemplate.from_template(Text(template)) + + attributes_to_check = ["text", "page_content"] + for key, value in kwargs.items(): + for attribute in attributes_to_check: + if hasattr(value, attribute): + kwargs[key] = getattr(value, attribute) + + chain = prompt_template | llm + result = chain.invoke(kwargs) + if hasattr(result, "content") and isinstance(result.content, str): + result = result.content + elif isinstance(result, str): + result = result + else: + result = result.get("response") + + if result.lower() not in ["true", "false"]: + raise ValueError("The prompt should generate a boolean response (True or False).") + # The string should be the words true or false + # if not raise an error + bool_result = result.lower() == "true" + return {"condition": bool_result, "result": kwargs} diff --git a/src/backend/langflow/components/utilities/UpdateRequest.py b/src/backend/langflow/components/utilities/UpdateRequest.py index bd40f642d..41a57eda6 100644 --- a/src/backend/langflow/components/utilities/UpdateRequest.py +++ b/src/backend/langflow/components/utilities/UpdateRequest.py @@ -1,7 +1,8 @@ -from typing import List, Optional +from typing import List, Optional, Text import requests from langchain_core.documents import Document + from langflow import CustomComponent from langflow.services.database.models.base import orjson_dumps @@ -61,7 +62,7 @@ class UpdateRequest(CustomComponent): ) except Exception as exc: return Document( - page_content=str(exc), + page_content=Text(exc), metadata={"source": url, "headers": headers, "status_code": 500}, ) diff --git a/src/backend/langflow/components/vectorstores/Chroma.py b/src/backend/langflow/components/vectorstores/Chroma.py index c277a0552..b1756e777 100644 --- a/src/backend/langflow/components/vectorstores/Chroma.py +++ b/src/backend/langflow/components/vectorstores/Chroma.py @@ -5,6 +5,7 @@ from langchain.embeddings.base import Embeddings from langchain.schema import BaseRetriever, Document from langchain_community.vectorstores import VectorStore from langchain_community.vectorstores.chroma import Chroma + from langflow import CustomComponent @@ -67,7 +68,6 @@ class ChromaComponent(CustomComponent): - collection_name (str): The name of the collection. - index_directory (Optional[str]): The directory to persist the Vector Store to. - chroma_server_ssl_enabled (bool): Whether to enable SSL for the Chroma server. - - persist (bool): Whether to persist the Vector Store or not. - embedding (Optional[Embeddings]): The embeddings to use for the Vector Store. - documents (Optional[Document]): The documents to use for the Vector Store. - chroma_server_cors_allow_origins (Optional[str]): The CORS allow origins for the Chroma server. @@ -94,8 +94,8 @@ class ChromaComponent(CustomComponent): # If documents, then we need to create a Chroma instance using .from_documents # Check index_directory and expand it if it is a relative path - - index_directory = self.resolve_path(index_directory) + if index_directory is not None: + index_directory = self.resolve_path(index_directory) if documents is not None and embedding is not None: if len(documents) == 0: @@ -108,5 +108,9 @@ class ChromaComponent(CustomComponent): client_settings=chroma_settings, ) else: - chroma = Chroma(persist_directory=index_directory, client_settings=chroma_settings) + chroma = Chroma( + persist_directory=index_directory, + client_settings=chroma_settings, + embedding_function=embedding, + ) return chroma diff --git a/src/backend/langflow/components/vectorstores/ChromaSearch.py b/src/backend/langflow/components/vectorstores/ChromaSearch.py index c6eb1ebac..3a6d283b3 100644 --- a/src/backend/langflow/components/vectorstores/ChromaSearch.py +++ b/src/backend/langflow/components/vectorstores/ChromaSearch.py @@ -2,12 +2,13 @@ from typing import List, Optional import chromadb # type: ignore from langchain_community.vectorstores.chroma import Chroma -from langflow import CustomComponent + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent from langflow.field_typing import Embeddings, Text -from langflow.schema import Record, docs_to_records +from langflow.schema import Record -class ChromaSearchComponent(CustomComponent): +class ChromaSearchComponent(LCVectorStoreComponent): """ A custom component for implementing a Vector Store using Chroma. """ @@ -25,7 +26,7 @@ class ChromaSearchComponent(CustomComponent): - dict: A dictionary containing the configuration options for the component. """ return { - "inputs": {"display_name": "Input"}, + "input_value": {"display_name": "Input"}, "search_type": { "display_name": "Search Type", "options": ["Similarity", "MMR"], @@ -57,7 +58,7 @@ class ChromaSearchComponent(CustomComponent): def build( self, - inputs: Text, + input_value: Text, search_type: str, collection_name: str, embedding: Embeddings, @@ -92,24 +93,20 @@ class ChromaSearchComponent(CustomComponent): if chroma_server_host is not None: chroma_settings = chromadb.config.Settings( - chroma_server_cors_allow_origins=chroma_server_cors_allow_origins or None, + chroma_server_cors_allow_origins=chroma_server_cors_allow_origins + or None, chroma_server_host=chroma_server_host, chroma_server_port=chroma_server_port or None, chroma_server_grpc_port=chroma_server_grpc_port or None, chroma_server_ssl_enabled=chroma_server_ssl_enabled, ) - index_directory = self.resolve_path(index_directory) - chroma = Chroma( + if index_directory: + index_directory = self.resolve_path(index_directory) + vector_store = Chroma( embedding_function=embedding, collection_name=collection_name, persist_directory=index_directory, client_settings=chroma_settings, ) - # Validate the inputs - docs = [] - if inputs and isinstance(inputs, str): - docs = chroma.search(query=inputs, search_type=search_type.lower()) - else: - raise ValueError("Invalid inputs provided.") - return docs_to_records(docs) + return self.search_with_vector_store(input_value, search_type, vector_store) diff --git a/src/backend/langflow/components/vectorstores/FAISS.py b/src/backend/langflow/components/vectorstores/FAISS.py index dec14f6db..a0324456e 100644 --- a/src/backend/langflow/components/vectorstores/FAISS.py +++ b/src/backend/langflow/components/vectorstores/FAISS.py @@ -1,26 +1,39 @@ -from typing import List, Union +from typing import List, Text, Union from langchain.schema import BaseRetriever from langchain_community.vectorstores import VectorStore from langchain_community.vectorstores.faiss import FAISS + from langflow import CustomComponent from langflow.field_typing import Document, Embeddings class FAISSComponent(CustomComponent): display_name = "FAISS" - description = "Construct FAISS wrapper from raw documents." + description = "Ingest documents into FAISS Vector Store." documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss" def build_config(self): return { "documents": {"display_name": "Documents"}, "embedding": {"display_name": "Embedding"}, + "folder_path": { + "display_name": "Folder Path", + "info": "Path to save the FAISS index. It will be relative to where Langflow is running.", + }, + "index_name": {"display_name": "Index Name"}, } def build( self, embedding: Embeddings, documents: List[Document], + folder_path: str, + index_name: str = "langflow_index", ) -> Union[VectorStore, FAISS, BaseRetriever]: - return FAISS.from_documents(documents=documents, embedding=embedding) + vector_store = FAISS.from_documents(documents=documents, embedding=embedding) + if not folder_path: + raise ValueError("Folder path is required to save the FAISS index.") + path = self.resolve_path(folder_path) + vector_store.save_local(Text(path), index_name) + return vector_store diff --git a/src/backend/langflow/components/vectorstores/FAISSSearch.py b/src/backend/langflow/components/vectorstores/FAISSSearch.py new file mode 100644 index 000000000..f6ddf4f7a --- /dev/null +++ b/src/backend/langflow/components/vectorstores/FAISSSearch.py @@ -0,0 +1,45 @@ +from typing import List + +from langchain_community.vectorstores.faiss import FAISS + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.field_typing import Embeddings, Text +from langflow.schema import Record + + +class FAISSSearchComponent(LCVectorStoreComponent): + display_name = "FAISS Search" + description = "Search a FAISS Vector Store for similar documents." + documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss" + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "folder_path": { + "display_name": "Folder Path", + "info": "Path to save the FAISS index. It will be relative to where Langflow is running.", + }, + "input_value": {"display_name": "Input"}, + "index_name": {"display_name": "Index Name"}, + } + + def build( + self, + input_value: Text, + embedding: Embeddings, + folder_path: str, + index_name: str = "langflow_index", + ) -> List[Record]: + if not folder_path: + raise ValueError("Folder path is required to save the FAISS index.") + path = self.resolve_path(folder_path) + vector_store = FAISS.load_local( + folder_path=Text(path), embeddings=embedding, index_name=index_name + ) + if not vector_store: + raise ValueError("Failed to load the FAISS index.") + + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type="similarity" + ) diff --git a/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py b/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py new file mode 100644 index 000000000..e15368f7d --- /dev/null +++ b/src/backend/langflow/components/vectorstores/MongoDBAtlasVector.py @@ -0,0 +1,61 @@ +from typing import List, Optional + +from langchain_community.vectorstores.mongodb_atlas import MongoDBAtlasVectorSearch + +from langflow import CustomComponent +from langflow.field_typing import Document, Embeddings, NestedDict + + +class MongoDBAtlasComponent(CustomComponent): + display_name = "MongoDB Atlas" + description = "Construct a `MongoDB Atlas Vector Search` vector store from raw documents." + icon = "MongoDB" + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "collection_name": {"display_name": "Collection Name"}, + "db_name": {"display_name": "Database Name"}, + "index_name": {"display_name": "Index Name"}, + "mongodb_atlas_cluster_uri": {"display_name": "MongoDB Atlas Cluster URI"}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + } + + def build( + self, + embedding: Embeddings, + documents: List[Document], + collection_name: str = "", + db_name: str = "", + index_name: str = "", + mongodb_atlas_cluster_uri: str = "", + search_kwargs: Optional[NestedDict] = None, + ) -> MongoDBAtlasVectorSearch: + search_kwargs = search_kwargs or {} + try: + from pymongo import MongoClient + except ImportError: + raise ImportError("Please install pymongo to use MongoDB Atlas Vector Store") + try: + mongo_client: MongoClient = MongoClient(mongodb_atlas_cluster_uri) + collection = mongo_client[db_name][collection_name] + except Exception as e: + raise ValueError(f"Failed to connect to MongoDB Atlas: {e}") + if documents: + vector_store = MongoDBAtlasVectorSearch.from_documents( + documents=documents, + embedding=embedding, + collection=collection, + db_name=db_name, + index_name=index_name, + mongodb_atlas_cluster_uri=mongodb_atlas_cluster_uri, + search_kwargs=search_kwargs, + ) + else: + vector_store = MongoDBAtlasVectorSearch( + embedding=embedding, + collection=collection, + index_name=index_name, + ) + return vector_store diff --git a/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py b/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py index d2d215f2b..0c713950a 100644 --- a/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py +++ b/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py @@ -1,22 +1,22 @@ from typing import List, Optional -from langchain_community.vectorstores import MongoDBAtlasVectorSearch - -from langflow import CustomComponent -from langflow.field_typing import ( - Document, - Embeddings, - NestedDict, -) +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.MongoDBAtlasVector import MongoDBAtlasComponent +from langflow.field_typing import Embeddings, NestedDict, Text +from langflow.schema import Record -class MongoDBAtlasComponent(CustomComponent): - display_name = "MongoDB Atlas" - description = "Construct a `MongoDB Atlas Vector Search` vector store from raw documents." +class MongoDBAtlasSearchComponent(MongoDBAtlasComponent, LCVectorStoreComponent): + display_name = "MongoDB Atlas Search" + description = "Search a MongoDB Atlas Vector Store for similar documents." def build_config(self): return { - "documents": {"display_name": "Documents"}, + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, "embedding": {"display_name": "Embedding"}, "collection_name": {"display_name": "Collection Name"}, "db_name": {"display_name": "Database Name"}, @@ -25,23 +25,28 @@ class MongoDBAtlasComponent(CustomComponent): "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, } - def build( + def build( # type: ignore[override] self, - documents: List[Document], + input_value: Text, + search_type: str, embedding: Embeddings, collection_name: str = "", db_name: str = "", index_name: str = "", mongodb_atlas_cluster_uri: str = "", search_kwargs: Optional[NestedDict] = None, - ) -> MongoDBAtlasVectorSearch: - search_kwargs = search_kwargs or {} - return MongoDBAtlasVectorSearch( - documents=documents, + ) -> List[Record]: + vector_store = super().build( embedding=embedding, collection_name=collection_name, + documents=[], db_name=db_name, index_name=index_name, mongodb_atlas_cluster_uri=mongodb_atlas_cluster_uri, search_kwargs=search_kwargs, ) + if not vector_store: + raise ValueError("Failed to create MongoDB Atlas Vector Store") + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type=search_type + ) diff --git a/src/backend/langflow/components/vectorstores/Pinecone.py b/src/backend/langflow/components/vectorstores/Pinecone.py index 147af1df8..54222b133 100644 --- a/src/backend/langflow/components/vectorstores/Pinecone.py +++ b/src/backend/langflow/components/vectorstores/Pinecone.py @@ -5,6 +5,7 @@ import pinecone # type: ignore from langchain.schema import BaseRetriever from langchain_community.vectorstores import VectorStore from langchain_community.vectorstores.pinecone import Pinecone + from langflow import CustomComponent from langflow.field_typing import Document, Embeddings @@ -12,6 +13,7 @@ from langflow.field_typing import Document, Embeddings class PineconeComponent(CustomComponent): display_name = "Pinecone" description = "Construct Pinecone wrapper from raw documents." + icon = "Pinecone" def build_config(self): return { @@ -19,10 +21,23 @@ class PineconeComponent(CustomComponent): "embedding": {"display_name": "Embedding"}, "index_name": {"display_name": "Index Name"}, "namespace": {"display_name": "Namespace"}, - "pinecone_api_key": {"display_name": "Pinecone API Key", "default": "", "password": True, "required": True}, - "pinecone_env": {"display_name": "Pinecone Environment", "default": "", "required": True}, + "pinecone_api_key": { + "display_name": "Pinecone API Key", + "default": "", + "password": True, + "required": True, + }, + "pinecone_env": { + "display_name": "Pinecone Environment", + "default": "", + "required": True, + }, "search_kwargs": {"display_name": "Search Kwargs", "default": "{}"}, - "pool_threads": {"display_name": "Pool Threads", "default": 1, "advanced": True}, + "pool_threads": { + "display_name": "Pool Threads", + "default": 1, + "advanced": True, + }, } def build( diff --git a/src/backend/langflow/components/vectorstores/PineconeSearch.py b/src/backend/langflow/components/vectorstores/PineconeSearch.py new file mode 100644 index 000000000..95cd28ded --- /dev/null +++ b/src/backend/langflow/components/vectorstores/PineconeSearch.py @@ -0,0 +1,70 @@ +from typing import List, Optional + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.Pinecone import PineconeComponent +from langflow.field_typing import Embeddings, Text +from langflow.schema import Record + + +class PineconeSearchComponent(PineconeComponent, LCVectorStoreComponent): + display_name = "Pinecone Search" + description = "Search a Pinecone Vector Store for similar documents." + icon = "Pinecone" + + def build_config(self): + return { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "embedding": {"display_name": "Embedding"}, + "index_name": {"display_name": "Index Name"}, + "namespace": {"display_name": "Namespace"}, + "pinecone_api_key": { + "display_name": "Pinecone API Key", + "default": "", + "password": True, + "required": True, + }, + "pinecone_env": { + "display_name": "Pinecone Environment", + "default": "", + "required": True, + }, + "search_kwargs": {"display_name": "Search Kwargs", "default": "{}"}, + "pool_threads": { + "display_name": "Pool Threads", + "default": 1, + "advanced": True, + }, + } + + def build( # type: ignore[override] + self, + input_value: Text, + embedding: Embeddings, + pinecone_env: str, + text_key: str = "text", + pool_threads: int = 4, + index_name: Optional[str] = None, + pinecone_api_key: Optional[str] = None, + namespace: Optional[str] = "default", + search_type: str = "similarity", + ) -> List[Record]: # type: ignore[override] + vector_store = super().build( + embedding=embedding, + pinecone_env=pinecone_env, + documents=[], + text_key=text_key, + pool_threads=pool_threads, + index_name=index_name, + pinecone_api_key=pinecone_api_key, + namespace=namespace, + ) + if not vector_store: + raise ValueError("Failed to load the Pinecone index.") + + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type=search_type + ) diff --git a/src/backend/langflow/components/vectorstores/Qdrant.py b/src/backend/langflow/components/vectorstores/Qdrant.py index 6d68cdd55..23ee70b11 100644 --- a/src/backend/langflow/components/vectorstores/Qdrant.py +++ b/src/backend/langflow/components/vectorstores/Qdrant.py @@ -10,6 +10,7 @@ from langflow.field_typing import Document, Embeddings, NestedDict class QdrantComponent(CustomComponent): display_name = "Qdrant" description = "Construct Qdrant wrapper from a list of texts." + icon = "Qdrant" def build_config(self): return { diff --git a/src/backend/langflow/components/vectorstores/QdrantSearch.py b/src/backend/langflow/components/vectorstores/QdrantSearch.py new file mode 100644 index 000000000..1562a9cd0 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/QdrantSearch.py @@ -0,0 +1,92 @@ +from typing import List, Optional + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.Qdrant import QdrantComponent +from langflow.field_typing import Embeddings, NestedDict, Text +from langflow.schema import Record + + +class QdrantSearchComponent(QdrantComponent, LCVectorStoreComponent): + display_name = "Qdrant Search" + description = "Construct Qdrant wrapper from a list of texts." + icon = "Qdrant" + + def build_config(self): + return { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "embedding": {"display_name": "Embedding"}, + "api_key": {"display_name": "API Key", "password": True, "advanced": True}, + "collection_name": {"display_name": "Collection Name"}, + "content_payload_key": { + "display_name": "Content Payload Key", + "advanced": True, + }, + "distance_func": {"display_name": "Distance Function", "advanced": True}, + "grpc_port": {"display_name": "gRPC Port", "advanced": True}, + "host": {"display_name": "Host", "advanced": True}, + "https": {"display_name": "HTTPS", "advanced": True}, + "location": {"display_name": "Location", "advanced": True}, + "metadata_payload_key": { + "display_name": "Metadata Payload Key", + "advanced": True, + }, + "path": {"display_name": "Path", "advanced": True}, + "port": {"display_name": "Port", "advanced": True}, + "prefer_grpc": {"display_name": "Prefer gRPC", "advanced": True}, + "prefix": {"display_name": "Prefix", "advanced": True}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + "timeout": {"display_name": "Timeout", "advanced": True}, + "url": {"display_name": "URL", "advanced": True}, + } + + def build( # type: ignore[override] + self, + input_value: Text, + embedding: Embeddings, + collection_name: str, + search_type: str = "similarity", + api_key: Optional[str] = None, + content_payload_key: str = "page_content", + distance_func: str = "Cosine", + grpc_port: int = 6334, + https: bool = False, + host: Optional[str] = None, + location: Optional[str] = None, + metadata_payload_key: str = "metadata", + path: Optional[str] = None, + port: Optional[int] = 6333, + prefer_grpc: bool = False, + prefix: Optional[str] = None, + search_kwargs: Optional[NestedDict] = None, + timeout: Optional[int] = None, + url: Optional[str] = None, + ) -> List[Record]: # type: ignore[override] + vector_store = super().build( + embedding=embedding, + collection_name=collection_name, + api_key=api_key, + content_payload_key=content_payload_key, + distance_func=distance_func, + grpc_port=grpc_port, + https=https, + host=host, + location=location, + metadata_payload_key=metadata_payload_key, + path=path, + port=port, + prefer_grpc=prefer_grpc, + prefix=prefix, + search_kwargs=search_kwargs, + timeout=timeout, + url=url, + ) + if not vector_store: + raise ValueError("Failed to load the Qdrant index.") + + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type=search_type + ) diff --git a/src/backend/langflow/components/vectorstores/RedisSearch.py b/src/backend/langflow/components/vectorstores/RedisSearch.py new file mode 100644 index 000000000..4089d4f47 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/RedisSearch.py @@ -0,0 +1,78 @@ +from typing import List, Optional + +from langchain.embeddings.base import Embeddings + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.Redis import RedisComponent +from langflow.field_typing import Text +from langflow.schema import Record + + +class RedisSearchComponent(RedisComponent, LCVectorStoreComponent): + """ + A custom component for implementing a Vector Store using Redis. + """ + + display_name: str = "Redis Search" + description: str = "Search a Redis Vector Store for similar documents." + documentation = "https://python.langchain.com/docs/integrations/vectorstores/redis" + beta = True + + def build_config(self): + """ + Builds the configuration for the component. + + Returns: + - dict: A dictionary containing the configuration options for the component. + """ + return { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "index_name": {"display_name": "Index Name", "value": "your_index"}, + "code": {"show": False, "display_name": "Code"}, + "documents": {"display_name": "Documents", "is_list": True}, + "embedding": {"display_name": "Embedding"}, + "schema": {"display_name": "Schema", "file_types": [".yaml"]}, + "redis_server_url": { + "display_name": "Redis Server Connection String", + "advanced": False, + }, + "redis_index_name": {"display_name": "Redis Index", "advanced": False}, + } + + def build( # type: ignore[override] + self, + input_value: Text, + search_type: str, + embedding: Embeddings, + redis_server_url: str, + redis_index_name: str, + schema: Optional[str] = None, + ) -> List[Record]: + """ + Builds the Vector Store or BaseRetriever object. + + Args: + - embedding (Embeddings): The embeddings to use for the Vector Store. + - documents (Optional[Document]): The documents to use for the Vector Store. + - redis_index_name (str): The name of the Redis index. + - redis_server_url (str): The URL for the Redis server. + + Returns: + - VectorStore: The Vector Store object. + """ + vector_store = super().build( + embedding=embedding, + redis_server_url=redis_server_url, + redis_index_name=redis_index_name, + schema=schema, + ) + if not vector_store: + raise ValueError("Failed to load the Redis index.") + + return self.search_with_vector_store( + input_value=input_value, search_type=search_type, vector_store=vector_store + ) diff --git a/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py b/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py new file mode 100644 index 000000000..5fd4dbd18 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/SupabaseVectorStoreSearch.py @@ -0,0 +1,50 @@ +from typing import List + +from langchain_community.vectorstores.supabase import SupabaseVectorStore +from supabase.client import Client, create_client + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.field_typing import Embeddings, Text +from langflow.schema import Record + + +class SupabaseSearchComponent(LCVectorStoreComponent): + display_name = "Supabase Search" + description = "Search a Supabase Vector Store for similar documents." + icon = "Supabase" + + def build_config(self): + return { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "embedding": {"display_name": "Embedding"}, + "query_name": {"display_name": "Query Name"}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + "supabase_service_key": {"display_name": "Supabase Service Key"}, + "supabase_url": {"display_name": "Supabase URL"}, + "table_name": {"display_name": "Table Name", "advanced": True}, + } + + def build( + self, + input_value: Text, + search_type: str, + embedding: Embeddings, + query_name: str = "", + supabase_service_key: str = "", + supabase_url: str = "", + table_name: str = "", + ) -> List[Record]: + supabase: Client = create_client( + supabase_url, supabase_key=supabase_service_key + ) + vector_store = SupabaseVectorStore( + client=supabase, + embedding=embedding, + table_name=table_name, + query_name=query_name, + ) + return self.search_with_vector_store(input_value, search_type, vector_store) diff --git a/src/backend/langflow/components/vectorstores/Vectara.py b/src/backend/langflow/components/vectorstores/Vectara.py index 31615fe7f..0a396918c 100644 --- a/src/backend/langflow/components/vectorstores/Vectara.py +++ b/src/backend/langflow/components/vectorstores/Vectara.py @@ -6,6 +6,7 @@ from typing import List, Optional, Union from langchain_community.embeddings import FakeEmbeddings from langchain_community.vectorstores.vectara import Vectara from langchain_core.vectorstores import VectorStore + from langflow import CustomComponent from langflow.field_typing import BaseRetriever, Document @@ -15,6 +16,7 @@ class VectaraComponent(CustomComponent): description: str = "Implementation of Vector Store using Vectara" documentation = "https://python.langchain.com/docs/integrations/vectorstores/vectara" beta = True + icon = "Vectara" field_config = { "vectara_customer_id": { "display_name": "Vectara Customer ID", @@ -26,7 +28,10 @@ class VectaraComponent(CustomComponent): "display_name": "Vectara API Key", "password": True, }, - "documents": {"display_name": "Documents", "info": "If provided, will be upserted to corpus (optional)"}, + "documents": { + "display_name": "Documents", + "info": "If provided, will be upserted to corpus (optional)", + }, "files_url": { "display_name": "Files Url", "info": "Make vectara object using url of files (optional)", diff --git a/src/backend/langflow/components/vectorstores/VectaraSearch.py b/src/backend/langflow/components/vectorstores/VectaraSearch.py new file mode 100644 index 000000000..ae2d442be --- /dev/null +++ b/src/backend/langflow/components/vectorstores/VectaraSearch.py @@ -0,0 +1,67 @@ +from typing import List + +from langchain_community.vectorstores.vectara import Vectara + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.Vectara import VectaraComponent +from langflow.field_typing import Text +from langflow.schema import Record + + +class VectaraSearchComponent(VectaraComponent, LCVectorStoreComponent): + display_name: str = "Vectara Search" + description: str = "Search a Vectara Vector Store for similar documents." + documentation = ( + "https://python.langchain.com/docs/integrations/vectorstores/vectara" + ) + beta = True + icon = "Vectara" + + field_config = { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "vectara_customer_id": { + "display_name": "Vectara Customer ID", + }, + "vectara_corpus_id": { + "display_name": "Vectara Corpus ID", + }, + "vectara_api_key": { + "display_name": "Vectara API Key", + "password": True, + }, + "documents": { + "display_name": "Documents", + "info": "If provided, will be upserted to corpus (optional)", + }, + "files_url": { + "display_name": "Files Url", + "info": "Make vectara object using url of files (optional)", + }, + } + + def build( # type: ignore[override] + self, + input_value: Text, + search_type: str, + vectara_customer_id: str, + vectara_corpus_id: str, + vectara_api_key: str, + ) -> List[Record]: + source = "Langflow" + vector_store = Vectara( + vectara_customer_id=vectara_customer_id, + vectara_corpus_id=vectara_corpus_id, + vectara_api_key=vectara_api_key, + source=source, + ) + + if not vector_store: + raise ValueError("Failed to create Vectara Vector Store") + + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type=search_type + ) diff --git a/src/backend/langflow/components/vectorstores/Weaviate.py b/src/backend/langflow/components/vectorstores/Weaviate.py index 9b4967c36..3d804255a 100644 --- a/src/backend/langflow/components/vectorstores/Weaviate.py +++ b/src/backend/langflow/components/vectorstores/Weaviate.py @@ -8,7 +8,7 @@ from langchain_community.vectorstores import VectorStore, Weaviate from langflow import CustomComponent -class WeaviateVectorStore(CustomComponent): +class WeaviateVectorStoreComponent(CustomComponent): display_name: str = "Weaviate" description: str = "Implementation of Vector Store using Weaviate" documentation = "https://python.langchain.com/docs/integrations/vectorstores/weaviate" @@ -24,7 +24,12 @@ class WeaviateVectorStore(CustomComponent): "display_name": "Index name", "required": False, }, - "text_key": {"display_name": "Text Key", "required": False, "advanced": True, "value": "text"}, + "text_key": { + "display_name": "Text Key", + "required": False, + "advanced": True, + "value": "text", + }, "documents": {"display_name": "Documents", "is_list": True}, "embedding": {"display_name": "Embedding"}, "attributes": { @@ -34,7 +39,11 @@ class WeaviateVectorStore(CustomComponent): "field_type": "str", "advanced": True, }, - "search_by_text": {"display_name": "Search By Text", "field_type": "bool", "advanced": True}, + "search_by_text": { + "display_name": "Search By Text", + "field_type": "bool", + "advanced": True, + }, "code": {"show": False}, } diff --git a/src/backend/langflow/components/vectorstores/WeaviateSearch.py b/src/backend/langflow/components/vectorstores/WeaviateSearch.py new file mode 100644 index 000000000..6eee202c9 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/WeaviateSearch.py @@ -0,0 +1,85 @@ +from typing import List, Optional + +from langchain.embeddings.base import Embeddings + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.Weaviate import WeaviateVectorStoreComponent +from langflow.field_typing import Text +from langflow.schema import Record + + +class WeaviateSearchVectorStore(WeaviateVectorStoreComponent, LCVectorStoreComponent): + display_name: str = "Weaviate Search" + description: str = "Search a Weaviate Vector Store for similar documents." + documentation = ( + "https://python.langchain.com/docs/integrations/vectorstores/weaviate" + ) + beta = True + icon = "Weaviate" + + field_config = { + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "input_value": {"display_name": "Input"}, + "url": {"display_name": "Weaviate URL", "value": "http://localhost:8080"}, + "api_key": { + "display_name": "API Key", + "password": True, + "required": False, + }, + "index_name": { + "display_name": "Index name", + "required": False, + }, + "text_key": { + "display_name": "Text Key", + "required": False, + "advanced": True, + "value": "text", + }, + "documents": {"display_name": "Documents", "is_list": True}, + "embedding": {"display_name": "Embedding"}, + "attributes": { + "display_name": "Attributes", + "required": False, + "is_list": True, + "field_type": "str", + "advanced": True, + }, + "search_by_text": { + "display_name": "Search By Text", + "field_type": "bool", + "advanced": True, + }, + "code": {"show": False}, + } + + def build( # type: ignore[override] + self, + input_value: Text, + search_type: str, + url: str, + search_by_text: bool = False, + api_key: Optional[str] = None, + index_name: Optional[str] = None, + text_key: str = "text", + embedding: Optional[Embeddings] = None, + attributes: Optional[list] = None, + ) -> List[Record]: + vector_store = super().build( + url=url, + api_key=api_key, + index_name=index_name, + text_key=text_key, + embedding=embedding, + attributes=attributes, + search_by_text=search_by_text, + ) + if not vector_store: + raise ValueError("Failed to load the Weaviate index.") + + return self.search_with_vector_store( + vector_store=vector_store, input_value=input_value, search_type=search_type + ) diff --git a/src/backend/langflow/components/vectorstores/base/__init__.py b/src/backend/langflow/components/vectorstores/base/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/components/vectorstores/base/model.py b/src/backend/langflow/components/vectorstores/base/model.py new file mode 100644 index 000000000..6c2c7d453 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/base/model.py @@ -0,0 +1,50 @@ +from typing import List, Union + +from langchain_core.documents import Document +from langchain_core.retrievers import BaseRetriever +from langchain_core.vectorstores import VectorStore + +from langflow import CustomComponent +from langflow.field_typing import Text +from langflow.helpers.record import docs_to_records +from langflow.schema import Record + + +class LCVectorStoreComponent(CustomComponent): + display_name: str = "LC Vector Store" + description: str = "Search a LC Vector Store for similar documents." + beta: bool = True + + def search_with_vector_store( + self, + input_value: Text, + search_type: str, + vector_store: Union[VectorStore, BaseRetriever], + ) -> List[Record]: + """ + Search for records in the vector store based on the input value and search type. + + Args: + input_value (Text): The input value to search for. + search_type (str): The type of search to perform. + vector_store (VectorStore): The vector store to search in. + + Returns: + List[Record]: A list of records matching the search criteria. + + Raises: + ValueError: If invalid inputs are provided. + """ + + docs: List[Document] = [] + if ( + input_value + and isinstance(input_value, str) + and hasattr(vector_store, "search") + ): + docs = vector_store.search( + query=input_value, search_type=search_type.lower() + ) + else: + raise ValueError("Invalid inputs provided.") + return docs_to_records(docs) diff --git a/src/backend/langflow/components/vectorstores/pgvectorSearch.py b/src/backend/langflow/components/vectorstores/pgvectorSearch.py new file mode 100644 index 000000000..f40e5ed26 --- /dev/null +++ b/src/backend/langflow/components/vectorstores/pgvectorSearch.py @@ -0,0 +1,74 @@ +from typing import List + +from langchain.embeddings.base import Embeddings + +from langflow.components.vectorstores.base.model import LCVectorStoreComponent +from langflow.components.vectorstores.pgvector import PGVectorComponent +from langflow.field_typing import Text +from langflow.schema import Record + + +class PGVectorSearchComponent(PGVectorComponent, LCVectorStoreComponent): + """ + A custom component for implementing a Vector Store using PostgreSQL. + """ + + display_name: str = "PGVector Search" + description: str = "Search a PGVector Store for similar documents." + documentation = ( + "https://python.langchain.com/docs/integrations/vectorstores/pgvector" + ) + + def build_config(self): + """ + Builds the configuration for the component. + + Returns: + - dict: A dictionary containing the configuration options for the component. + """ + return { + "code": {"show": False}, + "embedding": {"display_name": "Embedding"}, + "search_type": { + "display_name": "Search Type", + "options": ["Similarity", "MMR"], + }, + "pg_server_url": { + "display_name": "PostgreSQL Server Connection String", + "advanced": False, + }, + "collection_name": {"display_name": "Table", "advanced": False}, + "input_value": {"display_name": "Input"}, + } + + def build( # type: ignore[override] + self, + input_value: Text, + embedding: Embeddings, + search_type: str, + pg_server_url: str, + collection_name: str, + ) -> List[Record]: + """ + Builds the Vector Store or BaseRetriever object. + + Args: + - input_value (str): The input value to search for. + - embedding (Embeddings): The embeddings to use for the Vector Store. + - collection_name (str): The name of the PG table. + - pg_server_url (str): The URL for the PG server. + + Returns: + - VectorStore: The Vector Store object. + """ + try: + vector_store = super().build( + embedding=embedding, + pg_server_url=pg_server_url, + collection_name=collection_name, + ) + except Exception as e: + raise RuntimeError(f"Failed to build PGVector: {e}") + return self.search_with_vector_store( + input_value=input_value, search_type=search_type, vector_store=vector_store + ) diff --git a/src/backend/langflow/config.yaml b/src/backend/langflow/config.yaml index 5ec4f3aaa..102cb9016 100644 --- a/src/backend/langflow/config.yaml +++ b/src/backend/langflow/config.yaml @@ -11,31 +11,6 @@ agents: documentation: "" SQLAgent: documentation: "" -chains: - # LLMChain: - # documentation: "https://python.langchain.com/docs/modules/chains/foundational/llm_chain" - LLMMathChain: - documentation: "https://python.langchain.com/docs/modules/chains/additional/llm_math" - LLMCheckerChain: - documentation: "https://python.langchain.com/docs/modules/chains/additional/llm_checker" - # ConversationChain: - # documentation: "" - SeriesCharacterChain: - documentation: "" - MidJourneyPromptChain: - documentation: "" - TimeTravelGuideChain: - documentation: "" - SQLDatabaseChain: - documentation: "" - RetrievalQA: - documentation: "https://python.langchain.com/docs/modules/chains/popular/vector_db_qa" - RetrievalQAWithSourcesChain: - documentation: "" - ConversationalRetrievalChain: - documentation: "https://python.langchain.com/docs/modules/chains/popular/chat_vector_db" - CombineDocsChain: - documentation: "" documentloaders: AirbyteJSONLoader: documentation: "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json" @@ -109,32 +84,6 @@ embeddings: OllamaEmbeddings: documentation: "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/ollama" -llms: - OpenAI: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai" - ChatOpenAI: - documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai" - LlamaCpp: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp" - CTransformers: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers" - Cohere: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" - Anthropic: - documentation: "" - ChatAnthropic: - documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic" - HuggingFaceHub: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/huggingface_hub" - VertexAI: - documentation: "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/google_vertex_ai_palm" - ### - # There's a bug in this component deactivating until we get it sorted: _language_models.py", line 804, in send_message - # is_blocked=safety_attributes.get("blocked", False), - # AttributeError: 'list' object has no attribute 'get' - ChatVertexAI: - documentation: "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/google_vertex_ai_palm" - ### memories: # https://github.com/supabase-community/supabase-py/issues/482 # ZepChatMessageHistory: @@ -269,24 +218,7 @@ retrievers: # https://github.com/supabase-community/supabase-py/issues/482 # ZepRetriever: # documentation: "https://python.langchain.com/docs/modules/data_connection/retrievers/integrations/zep_memorystore" -vectorstores: - # Chroma: - # documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma" - Qdrant: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/qdrant" - FAISS: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss" - Pinecone: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/pinecone" - ElasticsearchStore: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/elasticsearch" - SupabaseVectorStore: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/supabase" - MongoDBAtlasVectorSearch: - documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas" - # Requires docarray >=0.32.0 but langchain-serve requires jina 3.15.2 which doesn't support docarray >=0.32.0 - # DocArrayInMemorySearch: - # documentation: "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/docarray_in_memory" + wrappers: RequestsWrapper: documentation: "" diff --git a/src/backend/langflow/field_typing/constants.py b/src/backend/langflow/field_typing/constants.py index 5977cd9f8..2e8fd4b3b 100644 --- a/src/backend/langflow/field_typing/constants.py +++ b/src/backend/langflow/field_typing/constants.py @@ -1,4 +1,4 @@ -from typing import Callable, Dict, Union +from typing import Callable, Dict, Text, Union from langchain.agents.agent import AgentExecutor from langchain.chains.base import Chain @@ -22,10 +22,6 @@ class Object: pass -class Text: - pass - - class Data: pass diff --git a/src/backend/langflow/graph/edge/base.py b/src/backend/langflow/graph/edge/base.py index 3301ca936..c49ec714c 100644 --- a/src/backend/langflow/graph/edge/base.py +++ b/src/backend/langflow/graph/edge/base.py @@ -1,6 +1,7 @@ from typing import TYPE_CHECKING, Any, List, Optional from langflow.graph.edge.utils import build_clean_params +from langflow.graph.schema import INPUT_FIELD_NAME from langflow.services.deps import get_monitor_service from langflow.services.monitor.utils import log_message from loguru import logger @@ -11,7 +12,9 @@ if TYPE_CHECKING: class SourceHandle(BaseModel): - baseClasses: List[str] = Field(..., description="List of base classes for the source handle.") + baseClasses: List[str] = Field( + ..., description="List of base classes for the source handle." + ) dataType: str = Field(..., description="Data type for the source handle.") id: str = Field(..., description="Unique identifier for the source handle.") @@ -19,7 +22,9 @@ class SourceHandle(BaseModel): class TargetHandle(BaseModel): fieldName: str = Field(..., description="Field name for the target handle.") id: str = Field(..., description="Unique identifier for the target handle.") - inputTypes: Optional[List[str]] = Field(None, description="List of input types for the target handle.") + inputTypes: Optional[List[str]] = Field( + None, description="List of input types for the target handle." + ) type: str = Field(..., description="Type of the target handle.") @@ -48,16 +53,24 @@ class Edge: def validate_handles(self, source, target) -> None: if self.target_handle.inputTypes is None: - self.valid_handles = self.target_handle.type in self.source_handle.baseClasses + self.valid_handles = ( + self.target_handle.type in self.source_handle.baseClasses + ) else: self.valid_handles = ( - any(baseClass in self.target_handle.inputTypes for baseClass in self.source_handle.baseClasses) + any( + baseClass in self.target_handle.inputTypes + for baseClass in self.source_handle.baseClasses + ) or self.target_handle.type in self.source_handle.baseClasses ) if not self.valid_handles: logger.debug(self.source_handle) logger.debug(self.target_handle) - raise ValueError(f"Edge between {source.vertex_type} and {target.vertex_type} " f"has invalid handles") + raise ValueError( + f"Edge between {source.vertex_type} and {target.vertex_type} " + f"has invalid handles" + ) def __setstate__(self, state): self.source_id = state["source_id"] @@ -74,7 +87,11 @@ class Edge: # Both lists contain strings and sometimes a string contains the value we are # looking for e.g. comgin_out=["Chain"] and target_reqs=["LLMChain"] # so we need to check if any of the strings in source_types is in target_reqs - self.valid = any(output in target_req for output in self.source_types for target_req in self.target_reqs) + self.valid = any( + output in target_req + for output in self.source_types + for target_req in self.target_reqs + ) # Get what type of input the target node is expecting self.matched_type = next( @@ -85,7 +102,10 @@ class Edge: if no_matched_type: logger.debug(self.source_types) logger.debug(self.target_reqs) - raise ValueError(f"Edge between {source.vertex_type} and {target.vertex_type} " f"has no matched type") + raise ValueError( + f"Edge between {source.vertex_type} and {target.vertex_type} " + f"has no matched type" + ) def __repr__(self) -> str: return ( @@ -96,8 +116,12 @@ class Edge: def __hash__(self) -> int: return hash(self.__repr__()) - def __eq__(self, __value: object) -> bool: - return self.__repr__() == __value.__repr__() if isinstance(__value, Edge) else False + def __eq__(self, __o: object) -> bool: + # Create a better way to compare edges + return ( + self._source_handle == __o._source_handle + and self._target_handle == __o._target_handle + ) class ContractEdge(Edge): @@ -135,15 +159,16 @@ class ContractEdge(Edge): log_transaction(self, source, target, "success") # If the target vertex is a power component we log messages - if ( - target.vertex_type == "ChatOutput" - and isinstance(target.params.get("message"), str) - or isinstance(target.params.get("message"), dict) + if target.vertex_type == "ChatOutput" and ( + isinstance(target.params.get(INPUT_FIELD_NAME), str) + or isinstance(target.params.get(INPUT_FIELD_NAME), dict) ): + if target.params.get("message") == "": + return self.result await log_message( sender=target.params.get("sender", ""), sender_name=target.params.get("sender_name", ""), - message=target.params.get("message", {}), + message=target.params.get(INPUT_FIELD_NAME, {}), session_id=target.params.get("session_id", ""), artifacts=target.artifacts, ) @@ -153,7 +178,9 @@ class ContractEdge(Edge): return f"{self.source_id} -[{self.target_param}]-> {self.target_id}" -def log_transaction(edge: ContractEdge, source: "Vertex", target: "Vertex", status, error=None): +def log_transaction( + edge: ContractEdge, source: "Vertex", target: "Vertex", status, error=None +): try: monitor_service = get_monitor_service() clean_params = build_clean_params(target) @@ -168,3 +195,4 @@ def log_transaction(edge: ContractEdge, source: "Vertex", target: "Vertex", stat monitor_service.add_row(table_name="transactions", data=data) except Exception as e: logger.error(f"Error logging transaction: {e}") + logger.error(f"Error logging transaction: {e}") diff --git a/src/backend/langflow/graph/graph/base.py b/src/backend/langflow/graph/graph/base.py index 0ec5a7923..163cc7cc4 100644 --- a/src/backend/langflow/graph/graph/base.py +++ b/src/backend/langflow/graph/graph/base.py @@ -1,24 +1,30 @@ +import asyncio from collections import defaultdict, deque from itertools import chain -from typing import Dict, Generator, List, Optional, Type, Union +from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Type, Union from langchain.chains.base import Chain from loguru import logger from langflow.graph.edge.base import ContractEdge from langflow.graph.graph.constants import lazy_load_vertex_dict +from langflow.graph.graph.state_manager import GraphStateManager from langflow.graph.graph.utils import process_flow -from langflow.graph.schema import InterfaceComponentTypes +from langflow.graph.schema import INPUT_FIELD_NAME, InterfaceComponentTypes from langflow.graph.vertex.base import Vertex from langflow.graph.vertex.types import ( ChatVertex, FileToolVertex, LLMVertex, + RoutingVertex, ToolkitVertex, ) from langflow.interface.tools.constants import FILE_TOOLS from langflow.utils import payload +if TYPE_CHECKING: + from langflow.graph.schema import ResultData + class Graph: """A class representing a graph of vertices and edges.""" @@ -27,14 +33,19 @@ class Graph: self, nodes: List[Dict], edges: List[Dict[str, str]], + flow_id: Optional[str] = None, ) -> None: - self.inputs = [] - self.outputs = [] self._vertices = nodes self._edges = edges self.raw_graph_data = {"nodes": nodes, "edges": edges} self._runs = 0 self._updates = 0 + self.flow_id = flow_id + self._is_input_vertices: List[str] = [] + self._is_output_vertices: List[str] = [] + self._has_session_id_vertices: List[str] = [] + self._sorted_vertices_layers: List[List[str]] = [] + self.run_id = None self.top_level_vertices = [] for vertex in self._vertices: @@ -47,8 +58,83 @@ class Graph: self.vertices_layers = [] self.stop_vertex = None + self.inactive_vertices: set = set() + self.edges: List[ContractEdge] = [] + self.vertices: List[Vertex] = [] self._build_graph() self.build_graph_maps() + self.define_vertices_lists() + self.state_manager = GraphStateManager() + + def set_run_id(self, run_id: str): + for vertex in self.vertices: + self.state_manager.subscribe(run_id, vertex.update_graph_state) + self.run_id = run_id + + def add_state(self, state: str): + self.state_manager.append_state(self.run_id, state) + + @property + def sorted_vertices_layers(self) -> List[List[str]]: + if not self._sorted_vertices_layers: + self.sort_vertices() + return self._sorted_vertices_layers + + def define_vertices_lists(self): + """ + Defines the lists of vertices that are inputs, outputs, and have session_id. + """ + attributes = ["is_input", "is_output", "has_session_id"] + for vertex in self.vertices: + for attribute in attributes: + if getattr(vertex, attribute): + getattr(self, f"_{attribute}_vertices").append(vertex.id) + + async def _run( + self, inputs: Dict[str, str], stream: bool + ) -> List[Optional["ResultData"]]: + """Runs the graph with the given inputs.""" + for vertex_id in self._is_input_vertices: + vertex = self.get_vertex(vertex_id) + if vertex is None: + raise ValueError(f"Vertex {vertex_id} not found") + vertex.update_raw_params(inputs) + try: + await self.process() + self.increment_run_count() + except Exception as exc: + logger.exception(exc) + raise ValueError(f"Error running graph: {exc}") from exc + outputs = [] + for vertex_id in self._is_output_vertices: + vertex = self.get_vertex(vertex_id) + if vertex is None: + raise ValueError(f"Vertex {vertex_id} not found") + if not stream and hasattr(vertex, "consume_async_generator"): + await vertex.consume_async_generator() + outputs.append(vertex.result) + return outputs + + async def run( + self, inputs: Dict[str, Union[str, list[str]]], stream: bool + ) -> List[Optional["ResultData"]]: + """Runs the graph with the given inputs.""" + + # inputs is {"message": "Hello, world!"} + # we need to go through self.inputs and update the self._raw_params + # of the vertices that are inputs + # if the value is a list, we need to run multiple times + outputs = [] + inputs_values = inputs.get(INPUT_FIELD_NAME, "") + if not isinstance(inputs_values, list): + inputs_values = [inputs_values] + for input_value in inputs_values: + run_outputs = await self._run( + {INPUT_FIELD_NAME: input_value}, stream=stream + ) + logger.debug(f"Run outputs: {run_outputs}") + outputs.extend(run_outputs) + return outputs # vertices_layers is a list of lists ordered by the order the vertices # should be built. @@ -63,11 +149,40 @@ class Graph: return { "runs": self._runs, "updates": self._updates, + "inactive_vertices": self.inactive_vertices, } def build_graph_maps(self): self.predecessor_map, self.successor_map = self.build_adjacency_maps() self.in_degree_map = self.build_in_degree() + self.parent_child_map = self.build_parent_child_map() + + def reset_inactive_vertices(self): + self.inactive_vertices = set() + + def mark_all_vertices(self, state: str): + """Marks all vertices in the graph.""" + for vertex in self.vertices: + vertex.set_state(state) + + def mark_vertex(self, vertex_id: str, state: str): + """Marks a vertex in the graph.""" + vertex = self.get_vertex(vertex_id) + vertex.set_state(state) + + def mark_branch(self, vertex_id: str, state: str): + """Marks a branch of the graph.""" + self.mark_vertex(vertex_id, state) + for child_id in self.parent_child_map[vertex_id]: + self.mark_branch(child_id, state) + + def build_parent_child_map(self): + parent_child_map = defaultdict(list) + for vertex in self.vertices: + parent_child_map[vertex.id] = [ + child.id for child in self.get_successors(vertex) + ] + return parent_child_map def increment_run_count(self): self._runs += 1 @@ -97,7 +212,7 @@ class Graph: return predecessor_map, successor_map @classmethod - def from_payload(cls, payload: Dict) -> "Graph": + def from_payload(cls, payload: Dict, flow_id: str) -> "Graph": """ Creates a graph from a payload. @@ -112,7 +227,7 @@ class Graph: try: vertices = payload["nodes"] edges = payload["edges"] - return cls(vertices, edges) + return cls(vertices, edges, flow_id) except KeyError as exc: logger.exception(exc) raise ValueError( @@ -130,7 +245,32 @@ class Graph: # both graphs have the same vertices and edges # but the data of the vertices might be different - def update(self, other: "Graph") -> None: + def update_edges_from_vertex(self, vertex: Vertex, other_vertex: Vertex) -> None: + """Updates the edges of a vertex in the Graph.""" + new_edges = [] + for edge in self.edges: + if edge.source_id == other_vertex.id or edge.target_id == other_vertex.id: + continue + new_edges.append(edge) + new_edges += other_vertex.edges + self.edges = new_edges + + def vertex_data_is_identical(self, vertex: Vertex, other_vertex: Vertex) -> bool: + data_is_equivalent = vertex == other_vertex + if not data_is_equivalent: + return False + return self.vertex_edges_are_identical(vertex, other_vertex) + + def vertex_edges_are_identical(self, vertex: Vertex, other_vertex: Vertex) -> bool: + same_length = len(vertex.edges) == len(other_vertex.edges) + if not same_length: + return False + for edge in vertex.edges: + if edge not in other_vertex.edges: + return False + return True + + def update(self, other: "Graph") -> "Graph": # Existing vertices in self graph existing_vertex_ids = set(vertex.id for vertex in self.vertices) # Vertex IDs in the other graph @@ -142,38 +282,52 @@ class Graph: # Find vertices that are in self but not in other (removed vertices) removed_vertex_ids = existing_vertex_ids - other_vertex_ids - # Update existing vertices that have changed - for vertex_id in existing_vertex_ids.intersection(other_vertex_ids): - self_vertex = self.get_vertex(vertex_id) - other_vertex = other.get_vertex(vertex_id) - if self_vertex.__repr__() != other_vertex.__repr__(): - self_vertex._data = other_vertex._data - self_vertex._parse_data() - self_vertex.params = {} - self_vertex._build_params() - self_vertex.graph = self - # If the vertex is pinned, we don't want - # to reset the results nor the _built attribute - if not self_vertex.pinned: - self_vertex._built = False - self_vertex.result = None - self_vertex.artifacts = None - self_vertex.set_top_level(self.top_level_vertices) - self.reset_all_edges_of_vertex(self_vertex) - - # Remove vertices + # Remove vertices that are not in the other graph for vertex_id in removed_vertex_ids: self.remove_vertex(vertex_id) # Add new vertices for vertex_id in new_vertex_ids: new_vertex = other.get_vertex(vertex_id) + new_vertex.graph = self self._add_vertex(new_vertex) + # Update existing vertices that have changed + for vertex_id in existing_vertex_ids.intersection(other_vertex_ids): + self_vertex = self.get_vertex(vertex_id) + other_vertex = other.get_vertex(vertex_id) + # If the vertices are not identical, update the vertex + if not self.vertex_data_is_identical(self_vertex, other_vertex): + self.update_vertex_from_another(self_vertex, other_vertex) + self.build_graph_maps() self.increment_update_count() return self + def update_vertex_from_another(self, vertex: Vertex, other_vertex: Vertex) -> None: + """ + Updates a vertex from another vertex. + + Args: + vertex (Vertex): The vertex to be updated. + other_vertex (Vertex): The vertex to update from. + """ + vertex._data = other_vertex._data + vertex._parse_data() + # Now we update the edges of the vertex + self.update_edges_from_vertex(vertex, other_vertex) + vertex.params = {} + vertex._build_params() + vertex.graph = self + # If the vertex is pinned, we don't want + # to reset the results nor the _built attribute + if not vertex.pinned: + vertex._built = False + vertex.result = None + vertex.artifacts = {} + vertex.set_top_level(self.top_level_vertices) + self.reset_all_edges_of_vertex(vertex) + def reset_all_edges_of_vertex(self, vertex: Vertex) -> None: """Resets all the edges of a vertex.""" for edge in vertex.edges: @@ -206,28 +360,6 @@ class Graph: # Now that we have the vertices and edges # We need to map the vertices that are connected to # to ChatVertex instances - self._map_chat_vertices() - - def _map_chat_vertices(self) -> None: - """Maps the vertices that are connected to ChatVertex instances.""" - # For each edge, we need to check if the source or target vertex is a ChatVertex - # If it is, we need to update the other vertex `is_external` attribute - # and store the id of the ChatVertex in the attributes self.inputs and self.outputs - for edge in self.edges: - source_vertex = self.get_vertex(edge.source_id) - target_vertex = self.get_vertex(edge.target_id) - if isinstance(source_vertex, ChatVertex): - # The source vertex is a ChatVertex - # thus the target vertex is an external vertex - # and the source vertex is an input - target_vertex.has_external_input = True - self.inputs.append(source_vertex.id) - if isinstance(target_vertex, ChatVertex): - # The target vertex is a ChatVertex - # thus the source vertex is an external vertex - # and the target vertex is an output - source_vertex.has_external_output = True - self.outputs.append(target_vertex.id) def remove_vertex(self, vertex_id: str) -> None: """Removes a vertex from the graph.""" @@ -236,7 +368,11 @@ class Graph: return self.vertices.remove(vertex) self.vertex_map.pop(vertex_id) - self.edges = [edge for edge in self.edges if edge.source_id != vertex_id and edge.target_id != vertex_id] + self.edges = [ + edge + for edge in self.edges + if edge.source_id != vertex_id and edge.target_id != vertex_id + ] def _build_vertex_params(self) -> None: """Identifies and handles the LLM vertex within the graph.""" @@ -257,23 +393,37 @@ class Graph: return for vertex in self.vertices: if not self._validate_vertex(vertex): - raise ValueError(f"{vertex.vertex_type} is not connected to any other components") + raise ValueError( + f"{vertex.display_name} is not connected to any other components" + ) def _validate_vertex(self, vertex: Vertex) -> bool: """Validates a vertex.""" # All vertices that do not have edges are invalid return len(self.get_vertex_edges(vertex.id)) > 0 - def get_vertex(self, vertex_id: str) -> Union[None, Vertex]: + def get_vertex(self, vertex_id: str) -> Vertex: """Returns a vertex by id.""" try: - return self.vertex_map.get(vertex_id) + return self.vertex_map[vertex_id] except KeyError: raise ValueError(f"Vertex {vertex_id} not found") - def get_vertex_edges(self, vertex_id: str) -> List[ContractEdge]: + def get_vertex_edges( + self, + vertex_id: str, + is_target: Optional[bool] = None, + is_source: Optional[bool] = None, + ) -> List[ContractEdge]: """Returns a list of edges for a given vertex.""" - return [edge for edge in self.edges if edge.source_id == vertex_id or edge.target_id == vertex_id] + # The idea here is to return the edges that have the vertex_id as source or target + # or both + return [ + edge + for edge in self.edges + if (edge.source_id == vertex_id and is_source is not False) + or (edge.target_id == vertex_id and is_target is not False) + ] def get_vertices_with_target(self, vertex_id: str) -> List[Vertex]: """Returns the vertices connected to a vertex.""" @@ -294,6 +444,38 @@ class Graph: raise ValueError("No root vertex found") return await root_vertex.build() + async def process(self) -> "Graph": + """Processes the graph with vertices in each layer run in parallel.""" + vertices_layers = self.sorted_vertices_layers + + for layer_index, layer in enumerate(vertices_layers): + tasks = [] + for vertex_id in layer: + vertex = self.get_vertex(vertex_id) + task = asyncio.create_task( + vertex.build(), name=f"layer-{layer_index}-vertex-{vertex_id}" + ) + tasks.append(task) + logger.debug(f"Running layer {layer_index} with {len(tasks)} tasks") + await self._execute_tasks(tasks) + logger.debug("Graph processing complete") + return self + + async def _execute_tasks(self, tasks): + """Executes tasks in parallel, handling exceptions for each task.""" + results = [] + for i, task in enumerate(asyncio.as_completed(tasks)): + try: + result = await task + results.append(result) + except Exception as e: + # Log the exception along with the task name for easier debugging + # task_name = task.get_name() + # coroutine has not attribute get_name + task_name = tasks[i].get_name() + logger.error(f"Task {task_name} failed with exception: {e}") + return results + def topological_sort(self) -> List[Vertex]: """ Performs a topological sort of the vertices in the graph. @@ -311,7 +493,9 @@ class Graph: def dfs(vertex): if state[vertex] == 1: # We have a cycle - raise ValueError("Graph contains a cycle, cannot perform topological sort") + raise ValueError( + "Graph contains a cycle, cannot perform topological sort" + ) if state[vertex] == 0: state[vertex] = 1 for edge in vertex.edges: @@ -335,11 +519,17 @@ class Graph: def get_predecessors(self, vertex): """Returns the predecessors of a vertex.""" - return [self.get_vertex(source_id) for source_id in self.predecessor_map.get(vertex.id, [])] + return [ + self.get_vertex(source_id) + for source_id in self.predecessor_map.get(vertex.id, []) + ] def get_successors(self, vertex): """Returns the successors of a vertex.""" - return [self.get_vertex(target_id) for target_id in self.successor_map.get(vertex.id, [])] + return [ + self.get_vertex(target_id) + for target_id in self.successor_map.get(vertex.id, []) + ] def get_vertex_neighbors(self, vertex: Vertex) -> Dict[Vertex, int]: """Returns the neighbors of a vertex.""" @@ -378,16 +568,19 @@ class Graph: edges.append(ContractEdge(source, target, edge)) return edges - def _get_vertex_class(self, node_type: str, node_base_type: str, node_id: str) -> Type[Vertex]: + def _get_vertex_class( + self, node_type: str, node_base_type: str, node_id: str + ) -> Type[Vertex]: """Returns the node class based on the node type.""" # First we check for the node_base_type node_name = node_id.split("-")[0] if node_name in ["ChatOutput", "ChatInput"]: return ChatVertex - if node_base_type in lazy_load_vertex_dict.VERTEX_TYPE_MAP: + elif node_name in ["ShouldRunNext"]: + return RoutingVertex + elif node_base_type in lazy_load_vertex_dict.VERTEX_TYPE_MAP: return lazy_load_vertex_dict.VERTEX_TYPE_MAP[node_base_type] - - if node_name in lazy_load_vertex_dict.VERTEX_TYPE_MAP: + elif node_name in lazy_load_vertex_dict.VERTEX_TYPE_MAP: return lazy_load_vertex_dict.VERTEX_TYPE_MAP[node_name] if node_type in FILE_TOOLS: @@ -408,14 +601,18 @@ class Graph: vertex_type: str = vertex_data["type"] # type: ignore vertex_base_type: str = vertex_data["node"]["template"]["_type"] # type: ignore - VertexClass = self._get_vertex_class(vertex_type, vertex_base_type, vertex_data["id"]) + VertexClass = self._get_vertex_class( + vertex_type, vertex_base_type, vertex_data["id"] + ) vertex_instance = VertexClass(vertex, graph=self) vertex_instance.set_top_level(self.top_level_vertices) vertices.append(vertex_instance) return vertices - def get_children_by_vertex_type(self, vertex: Vertex, vertex_type: str) -> List[Vertex]: + def get_children_by_vertex_type( + self, vertex: Vertex, vertex_type: str + ) -> List[Vertex]: """Returns the children of a vertex based on the vertex type.""" children = [] vertex_types = [vertex.data["type"]] @@ -427,25 +624,51 @@ class Graph: def __repr__(self): vertex_ids = [vertex.id for vertex in self.vertices] - edges_repr = "\n".join([f"{edge.source_id} --> {edge.target_id}" for edge in self.edges]) + edges_repr = "\n".join( + [f"{edge.source_id} --> {edge.target_id}" for edge in self.edges] + ) return f"Graph:\nNodes: {vertex_ids}\nConnections:\n{edges_repr}" - def sort_up_to_vertex(self, vertex_id: str) -> "Graph": + def sort_up_to_vertex(self, vertex_id: str) -> List[Vertex]: """Cuts the graph up to a given vertex and sorts the resulting subgraph.""" # Initial setup visited = set() # To keep track of visited vertices + excluded = set() # To keep track of vertices that should be excluded stack = [vertex_id] # Use a list as a stack for DFS + def get_successors(vertex, recursive=True): + # Recursively get the successors of the current vertex + successors = vertex.successors + if not successors: + return [] + successors_result = [] + for successor in successors: + # Just return a list of successors + if recursive: + next_successors = get_successors(successor) + successors_result.extend(next_successors) + successors_result.append(successor) + return successors_result + # DFS to collect all vertices that can reach the specified vertex while stack: current_id = stack.pop() - if current_id not in visited: + if current_id not in visited and current_id not in excluded: visited.add(current_id) current_vertex = self.get_vertex(current_id) # Assuming get_predecessors is a method that returns all vertices with edges to current_vertex for predecessor in current_vertex.predecessors: stack.append(predecessor.id) + if current_id == vertex_id: + # We should add to visited all the vertices that are successors of the current vertex + # and their successors and so on + for successor in current_vertex.successors: + excluded.add(successor.id) + all_successors = get_successors(successor) + for successor in all_successors: + excluded.add(successor.id) + # Filter the original graph's vertices and edges to keep only those in `visited` vertices_to_keep = [self.get_vertex(vid) for vid in visited] @@ -456,10 +679,12 @@ class Graph: vertices: List[Vertex], ) -> List[List[str]]: """Performs a layered topological sort of the vertices in the graph.""" - + vertices_ids = {vertex.id for vertex in vertices} # Queue for vertices with no incoming edges - queue = deque(vertex.id for vertex in vertices if self.in_degree_map[vertex.id] == 0) - layers = [] + queue = deque( + vertex.id for vertex in vertices if self.in_degree_map[vertex.id] == 0 + ) + layers: List[List[str]] = [] current_layer = 0 while queue: @@ -469,6 +694,13 @@ class Graph: vertex_id = queue.popleft() layers[current_layer].append(vertex_id) for neighbor in self.successor_map[vertex_id]: + # only vertices in `vertices_ids` should be considered + # because vertices by have been filtered out + # in a previous step. All dependencies of theirs + # will be built automatically if required + if neighbor not in vertices_ids: + continue + self.in_degree_map[neighbor] -= 1 # 'remove' edge if self.in_degree_map[neighbor] == 0: queue.append(neighbor) @@ -514,7 +746,9 @@ class Graph: return refined_layers - def sort_chat_inputs_first(self, vertices_layers: List[List[str]]) -> List[List[str]]: + def sort_chat_inputs_first( + self, vertices_layers: List[List[str]] + ) -> List[List[str]]: chat_inputs_first = [] for layer in vertices_layers: for vertex_id in layer: @@ -531,6 +765,7 @@ class Graph: def sort_vertices(self, stop_component_id: Optional[str] = None) -> List[List[str]]: """Sorts the vertices in the graph.""" + self.mark_all_vertices("ACTIVE") if stop_component_id: self.stop_vertex = stop_component_id vertices = self.sort_up_to_vertex(stop_component_id) @@ -546,11 +781,15 @@ class Graph: # Return just the first layer return first_layer - def sort_interface_components_first(self, vertices_layers: List[List[str]]) -> List[List[str]]: + def sort_interface_components_first( + self, vertices_layers: List[List[str]] + ) -> List[List[str]]: """Sorts the vertices in the graph so that vertices containing ChatInput or ChatOutput come first.""" def contains_interface_component(vertex): - return any(component.value in vertex for component in InterfaceComponentTypes) + return any( + component.value in vertex for component in InterfaceComponentTypes + ) # Sort each inner list so that vertices containing ChatInput or ChatOutput come first sorted_vertices = [ @@ -562,16 +801,22 @@ class Graph: ] return sorted_vertices - def sort_by_avg_build_time(self, vertices_layers: List[str]) -> List[str]: + def sort_by_avg_build_time( + self, vertices_layers: List[List[str]] + ) -> List[List[str]]: """Sorts the vertices in the graph so that vertices with the lowest average build time come first.""" def sort_layer_by_avg_build_time(vertices_ids: List[str]) -> List[str]: """Sorts the vertices in the graph so that vertices with the lowest average build time come first.""" if len(vertices_ids) == 1: return vertices_ids - vertices_ids.sort(key=lambda vertex_id: self.get_vertex(vertex_id).avg_build_time) + vertices_ids.sort( + key=lambda vertex_id: self.get_vertex(vertex_id).avg_build_time + ) return vertices_ids - sorted_vertices = [sort_layer_by_avg_build_time(layer) for layer in vertices_layers] + sorted_vertices = [ + sort_layer_by_avg_build_time(layer) for layer in vertices_layers + ] return sorted_vertices diff --git a/src/backend/langflow/graph/graph/constants.py b/src/backend/langflow/graph/graph/constants.py index 4317ac99d..2badbf0eb 100644 --- a/src/backend/langflow/graph/graph/constants.py +++ b/src/backend/langflow/graph/graph/constants.py @@ -1,10 +1,8 @@ from langflow.graph.vertex import types from langflow.interface.agents.base import agent_creator -from langflow.interface.chains.base import chain_creator from langflow.interface.custom.base import custom_component_creator from langflow.interface.document_loaders.base import documentloader_creator from langflow.interface.embeddings.base import embedding_creator -from langflow.interface.llms.base import llm_creator from langflow.interface.memories.base import memory_creator from langflow.interface.output_parsers.base import output_parser_creator from langflow.interface.prompts.base import prompt_creator @@ -15,9 +13,8 @@ from langflow.interface.tools.base import tool_creator from langflow.interface.wrappers.base import wrapper_creator from langflow.utils.lazy_load import LazyLoadDictBase -chat_components = ["ChatInput", "ChatOutput", "TextInput"] -# For now the only routing we support is to stop or run the next component -routing_components = ["ShouldRunNext"] +CHAT_COMPONENTS = ["ChatInput", "ChatOutput", "TextInput", "SessionID"] +ROUTING_COMPONENTS = ["ShouldRunNext"] class VertexTypesDict(LazyLoadDictBase): @@ -39,21 +36,24 @@ class VertexTypesDict(LazyLoadDictBase): return { **{t: types.PromptVertex for t in prompt_creator.to_list()}, **{t: types.AgentVertex for t in agent_creator.to_list()}, - **{t: types.ChainVertex for t in chain_creator.to_list()}, + # **{t: types.ChainVertex for t in chain_creator.to_list()}, **{t: types.ToolVertex for t in tool_creator.to_list()}, **{t: types.ToolkitVertex for t in toolkits_creator.to_list()}, **{t: types.WrapperVertex for t in wrapper_creator.to_list()}, - **{t: types.LLMVertex for t in llm_creator.to_list()}, + # **{t: types.LLMVertex for t in llm_creator.to_list()}, **{t: types.MemoryVertex for t in memory_creator.to_list()}, **{t: types.EmbeddingVertex for t in embedding_creator.to_list()}, # **{t: types.VectorStoreVertex for t in vectorstore_creator.to_list()}, **{t: types.DocumentLoaderVertex for t in documentloader_creator.to_list()}, **{t: types.TextSplitterVertex for t in textsplitter_creator.to_list()}, **{t: types.OutputParserVertex for t in output_parser_creator.to_list()}, - **{t: types.CustomComponentVertex for t in custom_component_creator.to_list()}, + **{ + t: types.CustomComponentVertex + for t in custom_component_creator.to_list() + }, **{t: types.RetrieverVertex for t in retriever_creator.to_list()}, - **{t: types.ChatVertex for t in chat_components}, - **{t: types.RoutingVertex for t in routing_components}, + **{t: types.ChatVertex for t in CHAT_COMPONENTS}, + **{t: types.RoutingVertex for t in ROUTING_COMPONENTS}, } def get_custom_component_vertex_type(self): diff --git a/src/backend/langflow/graph/graph/state_manager.py b/src/backend/langflow/graph/graph/state_manager.py new file mode 100644 index 000000000..64476011b --- /dev/null +++ b/src/backend/langflow/graph/graph/state_manager.py @@ -0,0 +1,39 @@ +from collections import defaultdict +from threading import Lock +from typing import Callable + + +class GraphStateManager: + def __init__(self): + self.states = {} + self.observers = defaultdict(list) + self.lock = Lock() + + def append_state(self, key, new_state): + with self.lock: + if key not in self.states: + self.states[key] = [] + self.states[key].append(new_state) + self.notify_append_observers(key, new_state) + + def update_state(self, key, new_state): + with self.lock: + self.states[key] = new_state + self.notify_observers(key, new_state) + + def get_state(self, key): + with self.lock: + return self.states.get(key, None) + + def subscribe(self, key, observer: Callable): + with self.lock: + if observer not in self.observers[key]: + self.observers[key].append(observer) + + def notify_observers(self, key, new_state): + for callback in self.observers[key]: + callback(key, new_state, append=False) + + def notify_append_observers(self, key, new_state): + for callback in self.observers[key]: + callback(key, new_state, append=True) diff --git a/src/backend/langflow/graph/schema.py b/src/backend/langflow/graph/schema.py index a3a2822e1..f53a0833f 100644 --- a/src/backend/langflow/graph/schema.py +++ b/src/backend/langflow/graph/schema.py @@ -1,8 +1,49 @@ from enum import Enum +from typing import Any, Optional + +from pydantic import BaseModel, Field, field_serializer + +from langflow.graph.utils import serialize_field +from langflow.utils.schemas import ContainsEnumMeta -class InterfaceComponentTypes(Enum): +class ResultData(BaseModel): + results: Optional[Any] = Field(default_factory=dict) + artifacts: Optional[Any] = Field(default_factory=dict) + timedelta: Optional[float] = None + duration: Optional[str] = None + + @field_serializer("results") + def serialize_results(self, value): + if isinstance(value, dict): + return {key: serialize_field(val) for key, val in value.items()} + return serialize_field(value) + + +class InterfaceComponentTypes(str, Enum, metaclass=ContainsEnumMeta): # ChatInput and ChatOutput are the only ones that are # power components ChatInput = "ChatInput" ChatOutput = "ChatOutput" + TextInput = "TextInput" + TextOutput = "TextOutput" + + def __contains__(cls, item): + try: + cls(item) + except ValueError: + return False + else: + return True + + +INPUT_COMPONENTS = [ + InterfaceComponentTypes.ChatInput, + InterfaceComponentTypes.TextInput, +] +OUTPUT_COMPONENTS = [ + InterfaceComponentTypes.ChatOutput, + InterfaceComponentTypes.TextOutput, +] + +INPUT_FIELD_NAME = "input_value" diff --git a/src/backend/langflow/graph/utils.py b/src/backend/langflow/graph/utils.py index 4bfd71fc5..83e2177b1 100644 --- a/src/backend/langflow/graph/utils.py +++ b/src/backend/langflow/graph/utils.py @@ -1,5 +1,8 @@ from typing import Any, Union +from langchain_core.documents import Document +from pydantic import BaseModel + from langflow.interface.utils import extract_input_variables_from_prompt @@ -33,3 +36,17 @@ def flatten_list(list_of_lists: list[Union[list, Any]]) -> list: else: new_list.append(item) return new_list + + +def serialize_field(value): + """Unified serialization function for handling both BaseModel and Document types, + including handling lists of these types.""" + if isinstance(value, (list, tuple)): + return [serialize_field(v) for v in value] + elif isinstance(value, Document): + return value.to_json() + elif isinstance(value, BaseModel): + return value.model_dump() + elif isinstance(value, str): + return {"result": value} + return value diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index 5d5a6ea60..6fd66067e 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -1,11 +1,27 @@ import ast import inspect import types -from typing import TYPE_CHECKING, Any, Callable, Coroutine, Dict, List, Optional +from enum import Enum +from typing import ( + TYPE_CHECKING, + Any, + AsyncIterator, + Callable, + Coroutine, + Dict, + Iterator, + List, + Optional, +) from loguru import logger -from langflow.graph.schema import InterfaceComponentTypes +from langflow.graph.schema import ( + INPUT_COMPONENTS, + OUTPUT_COMPONENTS, + InterfaceComponentTypes, + ResultData, +) from langflow.graph.utils import UnbuiltObject, UnbuiltResult from langflow.graph.vertex.utils import generate_result from langflow.interface.initialize import loading @@ -15,11 +31,18 @@ from langflow.utils.constants import DIRECT_TYPES from langflow.utils.util import sync_to_async if TYPE_CHECKING: - from langflow.api.v1.schemas import ResultData from langflow.graph.edge.base import ContractEdge from langflow.graph.graph.base import Graph +class VertexStates(str, Enum): + """Vertex are related to it being active, inactive, or in an error state.""" + + ACTIVE = "active" + INACTIVE = "inactive" + ERROR = "error" + + class Vertex: def __init__( self, @@ -31,10 +54,21 @@ class Vertex: ) -> None: # is_external means that the Vertex send or receives data from # an external source (e.g the chat) + self.will_stream = False + self.updated_raw_params = False + self.id: str = data["id"] + self.is_input = any( + input_component_name in self.id for input_component_name in INPUT_COMPONENTS + ) + self.is_output = any( + output_component_name in self.id + for output_component_name in OUTPUT_COMPONENTS + ) + self.has_session_id = None + self._custom_component = None self.has_external_input = False self.has_external_output = False self.graph = graph - self.id: str = data["id"] self._data = data self.base_type: Optional[str] = base_type self._parse_data() @@ -51,14 +85,40 @@ class Vertex: self.parent_is_top_level = False self.layer = None self.should_run = True - self.result: Optional["ResultData"] = None + self.result: Optional[ResultData] = None try: - self.is_interface_component = InterfaceComponentTypes(self.vertex_type) + self.is_interface_component = self.vertex_type in InterfaceComponentTypes except ValueError: self.is_interface_component = False self.use_result = False self.build_times: List[float] = [] + self.state = VertexStates.ACTIVE + self.graph_state = {} + + def update_graph_state(self, key, new_state, append: bool): + if append: + if key in self.graph_state: + self.graph_state[key].append(new_state) + else: + self.graph_state[key] = [new_state] + else: + self.graph_state[key] = new_state + + def set_state(self, state: str): + self.state = VertexStates[state] + if ( + self.state == VertexStates.INACTIVE + and self.graph.in_degree_map[self.id] < 2 + ): + # If the vertex is inactive and has only one in degree + # it means that it is not a merge point in the graph + self.graph.inactive_vertices.add(self.id) + elif ( + self.state == VertexStates.ACTIVE + and self.id in self.graph.inactive_vertices + ): + self.graph.inactive_vertices.remove(self.id) @property def avg_build_time(self): @@ -67,35 +127,16 @@ class Vertex: def add_build_time(self, time): self.build_times.append(time) - # Build a result dict for each edge - # like so: {edge.target.id: {edge.target_param: self._built_object}} - async def get_result_dict(self, force: bool = False) -> Dict[str, Dict[str, Any]]: - """ - Returns a dictionary with the result of the build process. - """ - edge_results = {} - for edge in self.edges: - target = self.graph.get_vertex(edge.target_id) - if edge.is_fulfilled and isinstance( - await edge.get_result( - source=self, - target=target, - ), - str, - ): - if edge.target_id not in edge_results: - edge_results[edge.target_id] = {} - edge_results[edge.target_id][edge.target_param] = await edge.get_result(source=self, target=target) - return edge_results - - def set_result(self, result: "ResultData") -> None: + def set_result(self, result: ResultData) -> None: self.result = result def get_built_result(self): # If the Vertex.type is a power component # then we need to return the built object # instead of the result dict - if self.is_interface_component and not isinstance(self._built_object, UnbuiltObject): + if self.is_interface_component and not isinstance( + self._built_object, UnbuiltObject + ): result = self._built_object # if it is not a dict or a string and hasattr model_dump then # return the model_dump @@ -105,7 +146,11 @@ class Vertex: if isinstance(self._built_result, UnbuiltResult): return {} - return self._built_result if isinstance(self._built_result, dict) else {"result": self._built_result} + return ( + self._built_result + if isinstance(self._built_result, dict) + else {"result": self._built_result} + ) def set_artifacts(self) -> None: pass @@ -170,18 +215,36 @@ class Vertex: def _parse_data(self) -> None: self.data = self._data["data"] self.output = self.data["node"]["base_classes"] + self.display_name = self.data["node"].get("display_name", self.id.split("-")[0]) self.pinned = self.data["node"].get("pinned", False) - template_dicts = {key: value for key, value in self.data["node"]["template"].items() if isinstance(value, dict)} + self.selected_output_type = self.data["node"].get("selected_output_type") + self.is_input = self.data["node"].get("is_input") or self.is_input + self.is_output = self.data["node"].get("is_output") or self.is_output + template_dicts = { + key: value + for key, value in self.data["node"]["template"].items() + if isinstance(value, dict) + } + + self.has_session_id = "session_id" in template_dicts self.required_inputs = [ - template_dicts[key]["type"] for key, value in template_dicts.items() if value["required"] + template_dicts[key]["type"] + for key, value in template_dicts.items() + if value["required"] ] self.optional_inputs = [ - template_dicts[key]["type"] for key, value in template_dicts.items() if not value["required"] + template_dicts[key]["type"] + for key, value in template_dicts.items() + if not value["required"] ] # Add the template_dicts[key]["input_types"] to the optional_inputs self.optional_inputs.extend( - [input_type for value in template_dicts.values() for input_type in value.get("input_types", [])] + [ + input_type + for value in template_dicts.values() + for input_type in value.get("input_types", []) + ] ) template_dict = self.data["node"]["template"] @@ -224,7 +287,15 @@ class Vertex: if self.graph is None: raise ValueError("Graph not found") - template_dict = {key: value for key, value in self.data["node"]["template"].items() if isinstance(value, dict)} + if self.updated_raw_params: + self.updated_raw_params = False + return + + template_dict = { + key: value + for key, value in self.data["node"]["template"].items() + if isinstance(value, dict) + } params = {} for edge in self.edges: @@ -262,7 +333,7 @@ class Vertex: full_path = storage_service.build_full_path(flow_id, file_name) params[key] = full_path else: - raise ValueError(f"File path not found for {self.vertex_type}") + raise ValueError(f"File path not found for {self.display_name}") elif value.get("type") in DIRECT_TYPES and params.get(key) is None: val = value.get("value") if value.get("type") == "code": @@ -275,7 +346,11 @@ class Vertex: # list of dicts, so we need to convert it to a dict # before passing it to the build method if isinstance(val, list): - params[key] = {k: v for item in value.get("value", []) for k, v in item.items()} + params[key] = { + k: v + for item in value.get("value", []) + for k, v in item.items() + } elif isinstance(val, dict): params[key] = val elif value.get("type") == "int" and val is not None: @@ -291,7 +366,10 @@ class Vertex: elif value.get("type") == "str" and val is not None: # val may contain escaped \n, \t, etc. # so we need to unescape it - params[key] = val.encode().decode("unicode_escape") + if isinstance(val, list): + params[key] = [v.encode().decode("unicode_escape") for v in val] + elif isinstance(val, str): + params[key] = val.encode().decode("unicode_escape") elif val is not None and val != "": params[key] = val @@ -304,17 +382,47 @@ class Vertex: self.params = params self._raw_params = params.copy() + def update_raw_params(self, new_params: Dict[str, str]): + """ + Update the raw parameters of the vertex with the given new parameters. + + Args: + new_params (Dict[str, Any]): The new parameters to update. + + Raises: + ValueError: If any key in new_params is not found in self._raw_params. + """ + # First check if the input_value in _raw_params is not a vertex + if not new_params: + return + if any(isinstance(self._raw_params.get(key), Vertex) for key in new_params): + return + self._raw_params.update(new_params) + self.updated_raw_params = True + async def _build(self, user_id=None): """ Initiate the build process. """ - logger.debug(f"Building {self.vertex_type}") + logger.debug(f"Building {self.display_name}") await self._build_each_node_in_params_dict(user_id) await self._get_and_instantiate_class(user_id) self._validate_built_object() self._built = True + def _finalize_build(self): + result_dict = self.get_built_result() + # We need to set the artifacts to pass information + # to the frontend + self.set_artifacts() + artifacts = self.artifacts + result_dict = ResultData( + results=result_dict, + artifacts=artifacts, + ) + self.set_result(result_dict) + async def _run( self, user_id: str, @@ -335,7 +443,9 @@ class Vertex: if isinstance(self._built_object, str): self._built_result = self._built_object - result = await generate_result(self._built_object, inputs, self.has_external_output, session_id) + result = await generate_result( + self._built_object, inputs, self.has_external_output, session_id + ) self._built_result = result async def _build_each_node_in_params_dict(self, user_id=None): @@ -350,6 +460,8 @@ class Vertex: await self._build_node_and_update_params(key, value, user_id) elif isinstance(value, list) and self._is_list_of_nodes(value): await self._build_list_of_nodes_and_update_params(key, value, user_id) + elif key not in self.params or self.updated_raw_params: + self.params[key] = value def _is_node(self, value): """ @@ -363,7 +475,9 @@ class Vertex: """ return all(self._is_node(node) for node in value) - async def get_result(self, requester: Optional["Vertex"] = None, user_id=None, timeout=None) -> Any: + async def get_result( + self, requester: Optional["Vertex"] = None, user_id=None, timeout=None + ) -> Any: # PLEASE REVIEW THIS IF STATEMENT # Check if the Vertex was built already if self._built: @@ -397,19 +511,30 @@ class Vertex: self._extend_params_list_with_result(key, result) self.params[key] = result - async def _build_list_of_nodes_and_update_params(self, key, nodes: List["Vertex"], user_id=None): + async def _build_list_of_nodes_and_update_params( + self, key, nodes: List["Vertex"], user_id=None + ): """ Iterates over a list of nodes, builds each and updates the params dictionary. """ self.params[key] = [] for node in nodes: built = await node.get_result(requester=self, user_id=user_id) + # Weird check to see if the params[key] is a list + # because sometimes it is a Record and breaks the code + if not isinstance(self.params[key], list): + self.params[key] = [self.params[key]] + if isinstance(built, list): - if key not in self.params: - self.params[key] = [] self.params[key].extend(built) else: - self.params[key].append(built) + try: + self.params[key].append(built) + except AttributeError as e: + logger.exception(e) + raise ValueError( + f"Error building node {self.display_name}: {str(e)}" + ) from e def _handle_func(self, key, result): """ @@ -438,25 +563,32 @@ class Vertex: Gets the class from a dictionary and instantiates it with the params. """ if self.base_type is None: - raise ValueError(f"Base type for node {self.vertex_type} not found") + raise ValueError(f"Base type for node {self.display_name} not found") try: result = await loading.instantiate_class( node_type=self.vertex_type, base_type=self.base_type, params=self.params, user_id=user_id, + vertex=self, ) self._update_built_object_and_artifacts(result) except Exception as exc: logger.exception(exc) - raise ValueError(f"Error building node {self.vertex_type}(ID:{self.id}): {str(exc)}") from exc + + raise ValueError( + f"Error building node {self.display_name}: {str(exc)}" + ) from exc def _update_built_object_and_artifacts(self, result): """ Updates the built object and its artifacts. """ if isinstance(result, tuple): - self._built_object, self.artifacts = result + if len(result) == 2: + self._built_object, self.artifacts = result + elif len(result) == 3: + self._custom_component, self._built_object, self.artifacts = result else: self._built_object = result @@ -465,31 +597,55 @@ class Vertex: Checks if the built object is None and raises a ValueError if so. """ if isinstance(self._built_object, UnbuiltObject): - raise ValueError(f"{self.vertex_type}: {self._built_object_repr()}") + raise ValueError(f"{self.display_name}: {self._built_object_repr()}") elif self._built_object is None: - message = f"{self.vertex_type} returned None." + message = f"{self.display_name} returned None." if self.base_type == "custom_components": message += " Make sure your build method returns a component." logger.warning(message) + elif isinstance(self._built_object, (Iterator, AsyncIterator)): + if self.display_name in ["Text Output"]: + raise ValueError( + f"You are trying to stream to a {self.display_name}. Try using a Chat Output instead." + ) + raise ValueError( + f"{self.display_name}: You are trying to stream to a non-streamable component." + ) - def _reset(self): + def _reset(self, params_update: Optional[Dict[str, Any]] = None): self._built = False self._built_object = UnbuiltObject() self._built_result = UnbuiltResult() self.artifacts = {} self.steps_ran = [] + self._build_params() + + def build_inactive(self): + # Just set the results to None + self._built = True + self._built_object = None + self._built_result = None async def build( self, user_id=None, + inputs: Optional[Dict[str, Any]] = None, requester: Optional["Vertex"] = None, **kwargs, ) -> Any: + if self.state == VertexStates.INACTIVE: + # If the vertex is inactive, return None + self.build_inactive() + return + if self.pinned and self._built: return self.get_requester_result(requester) self._reset() + if self.is_input and inputs is not None: + self.update_raw_params(inputs) + # Run steps for step in self.steps: if step not in self.steps_ran: @@ -499,6 +655,8 @@ class Vertex: step(user_id=user_id, **kwargs) self.steps_ran.append(step) + self._finalize_build() + return await self.get_requester_result(requester) async def get_requester_result(self, requester: Optional["Vertex"]): @@ -508,20 +666,36 @@ class Vertex: return self._built_object # Get the requester edge - requester_edge = next((edge for edge in self.edges if edge.target_id == requester.id), None) + requester_edge = next( + (edge for edge in self.edges if edge.target_id == requester.id), None + ) # Return the result of the requester edge - return None if requester_edge is None else await requester_edge.get_result(source=self, target=requester) + return ( + None + if requester_edge is None + else await requester_edge.get_result(source=self, target=requester) + ) def add_edge(self, edge: "ContractEdge") -> None: if edge not in self.edges: self.edges.append(edge) def __repr__(self) -> str: - return f"Vertex(id={self.id}, data={self.data})" + return ( + f"Vertex(display_name={self.display_name}, id={self.id}, data={self.data})" + ) def __eq__(self, __o: object) -> bool: try: - return self.id == __o.id if isinstance(__o, Vertex) else False + if not isinstance(__o, Vertex): + return False + # We should create a more robust comparison + # for the Vertex class + ids_are_equal = self.id == __o.id + # self._data is a dict and we need to compare them + # to check if they are equal + data_are_equal = self.data == __o.data + return ids_are_equal and data_are_equal except AttributeError: return False @@ -530,7 +704,11 @@ class Vertex: def _built_object_repr(self): # Add a message with an emoji, stars for sucess, - return "Built sucessfully ✨" if self._built_object is not None else "Failed to build 😵‍💫" + return ( + "Built sucessfully ✨" + if self._built_object is not None + else "Failed to build 😵‍💫" + ) class StatefulVertex(Vertex): diff --git a/src/backend/langflow/graph/vertex/types.py b/src/backend/langflow/graph/vertex/types.py index 34d6d8554..c78567c5f 100644 --- a/src/backend/langflow/graph/vertex/types.py +++ b/src/backend/langflow/graph/vertex/types.py @@ -1,14 +1,17 @@ import ast import json -from typing import Callable, Dict, List, Optional, Union +from typing import AsyncIterator, Callable, Dict, Iterator, List, Optional, Union import yaml from langchain_core.messages import AIMessage +from loguru import logger -from langflow.graph.utils import UnbuiltObject, flatten_list +from langflow.graph.schema import INPUT_FIELD_NAME +from langflow.graph.utils import UnbuiltObject, flatten_list, serialize_field from langflow.graph.vertex.base import StatefulVertex, StatelessVertex from langflow.interface.utils import extract_input_variables_from_prompt from langflow.schema import Record +from langflow.services.monitor.utils import log_vertex_build from langflow.utils.schemas import ChatOutputResponse @@ -65,7 +68,7 @@ class LLMVertex(StatelessVertex): class_built_object = None def __init__(self, data: Dict, graph, params: Optional[Dict] = None): - super().__init__(data, graph=graph, base_type="llms", params=params) + super().__init__(data, graph=graph, base_type="models", params=params) self.steps: List[Callable] = [self._custom_build] async def _custom_build(self, *args, **kwargs): @@ -120,10 +123,12 @@ class DocumentLoaderVertex(StatefulVertex): # show how many documents are in the list? if not isinstance(self._built_object, UnbuiltObject): - avg_length = sum(len(doc.page_content) for doc in self._built_object if hasattr(doc, "page_content")) / len( - self._built_object - ) - return f"""{self.vertex_type}({len(self._built_object)} documents) + avg_length = sum( + len(doc.page_content) + for doc in self._built_object + if hasattr(doc, "page_content") + ) / len(self._built_object) + return f"""{self.display_name}({len(self._built_object)} documents) \nAvg. Document Length (characters): {int(avg_length)} Documents: {self._built_object[:3]}...""" return f"{self.vertex_type}()" @@ -195,7 +200,9 @@ class TextSplitterVertex(StatefulVertex): # show how many documents are in the list? if not isinstance(self._built_object, UnbuiltObject): - avg_length = sum(len(doc.page_content) for doc in self._built_object) / len(self._built_object) + avg_length = sum(len(doc.page_content) for doc in self._built_object) / len( + self._built_object + ) return f"""{self.vertex_type}({len(self._built_object)} documents) \nAvg. Document Length (characters): {int(avg_length)} \nDocuments: {self._built_object[:3]}...""" @@ -242,18 +249,27 @@ class PromptVertex(StatelessVertex): user_id = kwargs.get("user_id", None) tools = kwargs.get("tools", []) if not self._built or force: - if "input_variables" not in self.params or self.params["input_variables"] is None: + if ( + "input_variables" not in self.params + or self.params["input_variables"] is None + ): self.params["input_variables"] = [] # Check if it is a ZeroShotPrompt and needs a tool if "ShotPrompt" in self.vertex_type: - tools = [tool_node.build(user_id=user_id) for tool_node in tools] if tools is not None else [] + tools = ( + [tool_node.build(user_id=user_id) for tool_node in tools] + if tools is not None + else [] + ) # flatten the list of tools if it is a list of lists # first check if it is a list if tools and isinstance(tools, list) and isinstance(tools[0], list): tools = flatten_list(tools) self.params["tools"] = tools prompt_params = [ - key for key, value in self.params.items() if isinstance(value, str) and key != "format_instructions" + key + for key, value in self.params.items() + if isinstance(value, str) and key != "format_instructions" ] else: prompt_params = ["template"] @@ -263,14 +279,20 @@ class PromptVertex(StatelessVertex): prompt_text = self.params[param] variables = extract_input_variables_from_prompt(prompt_text) self.params["input_variables"].extend(variables) - self.params["input_variables"] = list(set(self.params["input_variables"])) + self.params["input_variables"] = list( + set(self.params["input_variables"]) + ) elif isinstance(self.params, dict): self.params.pop("input_variables", None) await self._build(user_id=user_id) def _built_object_repr(self): - if not self.artifacts or self._built_object is None or not hasattr(self._built_object, "format"): + if ( + not self.artifacts + or self._built_object is None + or not hasattr(self._built_object, "format") + ): return super()._built_object_repr() elif isinstance(self._built_object, UnbuiltObject): return super()._built_object_repr() @@ -282,7 +304,9 @@ class PromptVertex(StatelessVertex): # so the prompt format doesn't break artifacts.pop("handle_keys", None) try: - if not hasattr(self._built_object, "template") and hasattr(self._built_object, "prompt"): + if not hasattr(self._built_object, "template") and hasattr( + self._built_object, "prompt" + ): template = self._built_object.prompt.template else: template = self._built_object.template @@ -290,7 +314,11 @@ class PromptVertex(StatelessVertex): if value: replace_key = "{" + key + "}" template = template.replace(replace_key, value) - return template if isinstance(template, str) else f"{self.vertex_type}({template})" + return ( + template + if isinstance(template, str) + else f"{self.vertex_type}({template})" + ) except KeyError: return str(self._built_object) @@ -314,6 +342,9 @@ class ChatVertex(StatelessVertex): super().__init__(data, graph=graph, base_type="custom_components", is_task=True) self.steps = [self._build, self._run] + def build_stream_url(self): + return f"/api/v1/build/{self.graph.flow_id}/{self.id}/stream" + def _built_object_repr(self): if self.task_id and self.is_task: if task := self.get_task(): @@ -332,6 +363,8 @@ class ChatVertex(StatelessVertex): artifacts = None sender = self.params.get("sender", None) sender_name = self.params.get("sender_name", None) + message = self.params.get(INPUT_FIELD_NAME, None) + stream_url = None if isinstance(self._built_object, AIMessage): artifacts = ChatOutputResponse.from_message( self._built_object, @@ -345,8 +378,13 @@ class ChatVertex(StatelessVertex): message = dict_to_codeblock(self._built_object) elif isinstance(self._built_object, Record): message = self._built_object.text + elif isinstance(message, (AsyncIterator, Iterator)): + stream_url = self.build_stream_url() + message = "" elif not isinstance(self._built_object, str): message = str(self._built_object) + # if the message is a generator or iterator + # it means that it is a stream of messages else: message = self._built_object @@ -354,18 +392,73 @@ class ChatVertex(StatelessVertex): message=message, sender=sender, sender_name=sender_name, + stream_url=stream_url, ) + + self.will_stream = stream_url is not None if artifacts: self.artifacts = artifacts.model_dump() + if isinstance(self._built_object, (AsyncIterator, Iterator)): + if self.params["return_record"]: + self._built_object = Record(text=message, data=self.artifacts) + else: + self._built_object = message self._built_result = self._built_object else: await super()._run(*args, **kwargs) + async def stream(self): + iterator = self.params.get(INPUT_FIELD_NAME, None) + if not isinstance(iterator, (AsyncIterator, Iterator)): + raise ValueError("The message must be an iterator or an async iterator.") + is_async = isinstance(iterator, AsyncIterator) + complete_message = "" + if is_async: + async for message in iterator: + message = message.content if hasattr(message, "content") else message + message = message.text if hasattr(message, "text") else message + yield message + complete_message += message + else: + for message in iterator: + message = message.content if hasattr(message, "content") else message + message = message.text if hasattr(message, "text") else message + yield message + complete_message += message + self.artifacts = ChatOutputResponse( + message=complete_message, + sender=self.params.get("sender", ""), + sender_name=self.params.get("sender_name", ""), + ).model_dump() + self.params[INPUT_FIELD_NAME] = complete_message + self._built_object = Record(text=complete_message, data=self.artifacts) + self._built_result = complete_message + # Update artifacts with the message + # and remove the stream_url + self._finalize_build() + logger.debug(f"Streamed message: {complete_message}") + + await log_vertex_build( + flow_id=self.graph.flow_id, + vertex_id=self.id, + valid=True, + params=self._built_object_repr(), + data=self.result, + artifacts=self.artifacts, + ) + + self._validate_built_object() + self._built = True + + async def consume_async_generator(self): + async for _ in self.stream(): + pass + class RoutingVertex(StatelessVertex): def __init__(self, data: Dict, graph): - super().__init__(data, graph=graph, base_type="routing") + super().__init__(data, graph=graph, base_type="custom_components") self.use_result = True self.steps = [self._build] @@ -383,10 +476,22 @@ class RoutingVertex(StatelessVertex): return [] raise ValueError("RoutingVertex should return a boolean value.") + def _run(self, *args, **kwargs): + if self._built_object: + condition = self._built_object.get("condition") + result = self._built_object.get("result") + if condition is None: + raise ValueError("Condition is required for the routing vertex.") + if result is None: + raise ValueError("Result is required for the routing vertex.") + if condition is True: + self._built_result = result + else: + self.graph.mark_branch(self.id, "INACTIVE") + self._built_result = None + def dict_to_codeblock(d: dict) -> str: - from langflow.api.utils import serialize_field - serialized = {key: serialize_field(val) for key, val in d.items()} json_str = json.dumps(serialized, indent=4) return f"```json\n{json_str}\n```" diff --git a/src/backend/langflow/helpers/__init__.py b/src/backend/langflow/helpers/__init__.py new file mode 100644 index 000000000..adfa72088 --- /dev/null +++ b/src/backend/langflow/helpers/__init__.py @@ -0,0 +1,3 @@ +from .record import docs_to_records, records_to_text + +__all__ = ["docs_to_records", "records_to_text"] diff --git a/src/backend/langflow/helpers/record.py b/src/backend/langflow/helpers/record.py new file mode 100644 index 000000000..9e1f2eb34 --- /dev/null +++ b/src/backend/langflow/helpers/record.py @@ -0,0 +1,37 @@ +from langchain_core.documents import Document + +from langflow.schema import Record + + +def docs_to_records(documents: list[Document]) -> list[Record]: + """ + Converts a list of Documents to a list of Records. + + Args: + documents (list[Document]): The list of Documents to convert. + + Returns: + list[Record]: The converted list of Records. + """ + return [Record.from_document(document) for document in documents] + + +def records_to_text(template: str, records: list[Record]) -> list[str]: + """ + Converts a list of Records to a list of texts. + + Args: + records (list[Record]): The list of Records to convert. + + Returns: + list[str]: The converted list of texts. + """ + if isinstance(records, Record): + records = [records] + # Check if there are any format strings in the template + + formated_records = [ + template.format(text=record.text, data=record.data, **record.data) + for record in records + ] + return "\n".join(formated_records) diff --git a/src/backend/langflow/interface/custom/attributes.py b/src/backend/langflow/interface/custom/attributes.py index 8ec2a0daa..9b91af43c 100644 --- a/src/backend/langflow/interface/custom/attributes.py +++ b/src/backend/langflow/interface/custom/attributes.py @@ -1,4 +1,5 @@ import warnings +from typing import Callable import emoji @@ -30,11 +31,13 @@ def getattr_return_bool(value): return value -ATTR_FUNC_MAPPING = { +ATTR_FUNC_MAPPING: dict[str, Callable] = { "display_name": getattr_return_str, "description": getattr_return_str, "beta": getattr_return_bool, "documentation": getattr_return_str, "icon": validate_icon, "pinned": getattr_return_bool, + "is_input": getattr_return_bool, + "is_output": getattr_return_bool, } diff --git a/src/backend/langflow/interface/custom/code_parser/code_parser.py b/src/backend/langflow/interface/custom/code_parser/code_parser.py index 7a102e33f..258d2fa6b 100644 --- a/src/backend/langflow/interface/custom/code_parser/code_parser.py +++ b/src/backend/langflow/interface/custom/code_parser/code_parser.py @@ -6,6 +6,9 @@ from typing import Any, Dict, List, Type, Union from cachetools import TTLCache, cachedmethod, keys from fastapi import HTTPException +from loguru import logger + +from langflow.interface.custom.eval import eval_custom_component_code from langflow.interface.custom.schema import CallableCodeDetails, ClassCodeDetails @@ -268,15 +271,28 @@ class CodeParser: method = self.parse_callable_details(stmt) return (method, True) if stmt.name == "__init__" else (method, False) + def get_base_classes(self): + """ + Returns the base classes of the custom component class. + """ + try: + bases = self.execute_and_inspect_classes(self.code) + except Exception as e: + # If the code cannot be executed, return an empty list + logger.exception(e) + bases = [] + raise e + return bases + def parse_classes(self, node: ast.ClassDef) -> None: """ Extracts "classes" from the code, including inheritance and init methods. """ - + bases = self.get_base_classes() or [ast.unparse(b) for b in node.bases] class_details = ClassCodeDetails( name=node.name, doc=ast.get_docstring(node), - bases=[ast.unparse(base) for base in node.bases], + bases=bases, attributes=[], methods=[], init=None, @@ -308,6 +324,18 @@ class CodeParser: } self.data["global_vars"].append(global_var) + def execute_and_inspect_classes(self, code: str): + custom_component_class = eval_custom_component_code(code) + custom_component = custom_component_class() + dunder_class = custom_component.__class__ + # Get the base classes at two levels of inheritance + bases = [] + for base in dunder_class.__bases__: + bases.append(base.__name__) + for bases_base in base.__bases__: + bases.append(bases_base.__name__) + return bases + def parse_code(self) -> Dict[str, Any]: """ Runs all parsing operations and returns the resulting data. diff --git a/src/backend/langflow/interface/custom/custom_component/custom_component.py b/src/backend/langflow/interface/custom/custom_component/custom_component.py index 70087a98f..9364265c2 100644 --- a/src/backend/langflow/interface/custom/custom_component/custom_component.py +++ b/src/backend/langflow/interface/custom/custom_component/custom_component.py @@ -1,17 +1,30 @@ import operator from pathlib import Path -from typing import Any, Callable, ClassVar, List, Optional, Union +from typing import ( + TYPE_CHECKING, + Any, + Callable, + ClassVar, + List, + Optional, + Sequence, + Union, +) from uuid import UUID import yaml from cachetools import TTLCache, cachedmethod from fastapi import HTTPException +from langchain_core.documents import Document +from pydantic import BaseModel +from sqlmodel import select from langflow.interface.custom.code_parser.utils import ( extract_inner_type_from_generic_alias, extract_union_types_from_generic_alias, ) from langflow.interface.custom.custom_component.component import Component +from langflow.schema import Record from langflow.services.database.models.flow import Flow from langflow.services.database.utils import session_getter from langflow.services.deps import ( @@ -22,6 +35,10 @@ from langflow.services.deps import ( from langflow.services.storage.service import StorageService from langflow.utils import validate +if TYPE_CHECKING: + from langflow.graph.graph.base import Graph + from langflow.graph.vertex.base import Vertex + class CustomComponent(Component): display_name: Optional[str] = None @@ -30,6 +47,12 @@ class CustomComponent(Component): """The description of the component. Defaults to None.""" icon: Optional[str] = None """The icon of the component. It should be an emoji. Defaults to None.""" + is_input: Optional[bool] = None + """The input state of the component. Defaults to None. + If True, the component must have a field named 'input_value'.""" + is_output: Optional[bool] = None + """The output state of the component. Defaults to None. + If True, the component must have a field named 'input_value'.""" code: Optional[str] = None """The code of the component. Defaults to None.""" field_config: dict = {} @@ -38,6 +61,12 @@ class CustomComponent(Component): """The field order of the component. Defaults to an empty list.""" pinned: Optional[bool] = False """The default pinned state of the component. Defaults to False.""" + build_parameters: Optional[dict] = None + """The build parameters of the component. Defaults to None.""" + selected_output_type: Optional[str] = None + """The selected output type of the component. Defaults to None.""" + vertex: Optional["Vertex"] = None + """The edge target parameter of the component. Defaults to None.""" code_class_base_inheritance: ClassVar[str] = "CustomComponent" function_entrypoint_name: ClassVar[str] = "build" function: Optional[Callable] = None @@ -45,6 +74,7 @@ class CustomComponent(Component): user_id: Optional[Union[UUID, str]] = None status: Optional[Any] = None """The status of the component. This is displayed on the frontend. Defaults to None.""" + _tree: Optional[dict] = None def __init__(self, **data): @@ -67,6 +97,10 @@ class CustomComponent(Component): flow_id, file_name = path.split("/", 1) return storage_svc.build_full_path(flow_id, file_name) + @property + def graph(self): + return self.vertex.graph + def _get_field_order(self): return self.field_order or list(self.field_config.keys()) @@ -86,6 +120,77 @@ class CustomComponent(Component): def tree(self): return self.get_code_tree(self.code or "") + def to_records( + self, data: Any, text_key: str = "text", data_key: str = "data" + ) -> List[Record]: + """ + Converts input data into a list of Record objects. + + Args: + data (Any): The input data to be converted. It can be a single item or a sequence of items. + If the input data is a Langchain Document, text_key and data_key are ignored. + + text_key (str, optional): The key to access the text value in each item. Defaults to "text". + data_key (str, optional): The key to access the data value in each item. Defaults to "data". + + Returns: + List[Record]: A list of Record objects. + + Raises: + ValueError: If the input data is not of a valid type or if the specified keys are not found in the data. + + """ + records = [] + if not isinstance(data, Sequence): + data = [data] + for item in data: + if isinstance(item, Document): + item = {"text": item.page_content, "data": item.metadata} + elif isinstance(item, BaseModel): + model_dump = item.model_dump() + if text_key not in model_dump: + raise ValueError(f"Key '{text_key}' not found in BaseModel item.") + if data_key not in model_dump: + raise ValueError(f"Key '{data_key}' not found in BaseModel item.") + item = {"text": model_dump[text_key], "data": model_dump[data_key]} + elif isinstance(item, str): + item = {"text": item, "data": {}} + elif isinstance(item, dict): + if text_key not in item: + raise ValueError(f"Key '{text_key}' not found in dictionary item.") + if data_key not in item: + raise ValueError(f"Key '{data_key}' not found in dictionary item.") + item = {"text": item[text_key], "data": item[data_key]} + else: + raise ValueError(f"Invalid data type: {type(item)}") + + records.append(Record(**item)) + + return records + + def create_references_from_records( + self, records: List[Record], include_data: bool = False + ) -> str: + """ + Create references from a list of records. + + Args: + records (List[dict]): A list of records, where each record is a dictionary. + include_data (bool, optional): Whether to include data in the references. Defaults to False. + + Returns: + str: A string containing the references in markdown format. + """ + if not records: + return "" + markdown_string = "---\n" + for record in records: + markdown_string += f"- Text: {record.text}" + if include_data: + markdown_string += f" Data: {record.data}" + markdown_string += "\n" + return markdown_string + @property def get_function_entrypoint_args(self) -> list: build_method = self.get_build_method() @@ -100,7 +205,8 @@ class CustomComponent(Component): detail={ "error": "Type hint Error", "traceback": ( - "Prompt type is not supported in the build method." " Try using PromptTemplate instead." + "Prompt type is not supported in the build method." + " Try using PromptTemplate instead." ), }, ) @@ -114,14 +220,20 @@ class CustomComponent(Component): if not self.code: return {} - component_classes = [cls for cls in self.tree["classes"] if self.code_class_base_inheritance in cls["bases"]] + component_classes = [ + cls + for cls in self.tree["classes"] + if self.code_class_base_inheritance in cls["bases"] + ] if not component_classes: return {} # Assume the first Component class is the one we're interested in component_class = component_classes[0] build_methods = [ - method for method in component_class["methods"] if method["name"] == self.function_entrypoint_name + method + for method in component_class["methods"] + if method["name"] == self.function_entrypoint_name ] return build_methods[0] if build_methods else {} @@ -178,7 +290,9 @@ class CustomComponent(Component): # Retrieve and decrypt the credential by name for the current user db_service = get_db_service() with session_getter(db_service) as session: - return credential_service.get_credential(user_id=self._user_id or "", name=name, session=session) + return credential_service.get_credential( + user_id=self._user_id or "", name=name, session=session + ) return get_credential @@ -188,7 +302,9 @@ class CustomComponent(Component): credential_service = get_credential_service() db_service = get_db_service() with session_getter(db_service) as session: - return credential_service.list_credentials(user_id=self._user_id, session=session) + return credential_service.list_credentials( + user_id=self._user_id, session=session + ) def index(self, value: int = 0): """Returns a function that returns the value at the given index in the iterable.""" @@ -201,8 +317,9 @@ class CustomComponent(Component): def get_function(self): return validate.create_function(self.code, self.function_entrypoint_name) - async def load_flow(self, flow_id: str, tweaks: Optional[dict] = None) -> Any: - from langflow.processing.process import build_sorted_vertices, process_tweaks + async def load_flow(self, flow_id: str, tweaks: Optional[dict] = None) -> "Graph": + from langflow.graph.graph.base import Graph + from langflow.processing.process import process_tweaks db_service = get_db_service() with session_getter(db_service) as session: @@ -211,7 +328,18 @@ class CustomComponent(Component): raise ValueError(f"Flow {flow_id} not found") if tweaks: graph_data = process_tweaks(graph_data=graph_data, tweaks=tweaks) - return await build_sorted_vertices(graph_data, self.user_id) + graph = Graph.from_payload(graph_data, flow_id=flow_id) + return graph + + async def run_flow( + self, + input_value: Union[str, list[str]], + flow_id: str, + tweaks: Optional[dict] = None, + ) -> Any: + graph = await self.load_flow(flow_id, tweaks) + input_value_dict = {"input_value": input_value} + return await graph.run(input_value_dict, stream=False) def list_flows(self, *, get_session: Optional[Callable] = None) -> List[Flow]: if not self._user_id: @@ -220,32 +348,12 @@ class CustomComponent(Component): get_session = get_session or session_getter db_service = get_db_service() with get_session(db_service) as session: - flows = session.query(Flow).filter(Flow.user_id == self.user_id).all() + flows = session.exec( + select(Flow).where(Flow.user_id == self._user_id) + ).all() return flows except Exception as e: raise ValueError("Session is invalid") from e - async def get_flow( - self, - *, - flow_name: Optional[str] = None, - flow_id: Optional[str] = None, - tweaks: Optional[dict] = None, - get_session: Optional[Callable] = None, - ) -> Flow: - get_session = get_session or session_getter - db_service = get_db_service() - with get_session(db_service) as session: - if flow_id: - flow = session.query(Flow).get(flow_id) - elif flow_name: - flow = (session.query(Flow).filter(Flow.name == flow_name).filter(Flow.user_id == self.user_id)).first() - else: - raise ValueError("Either flow_name or flow_id must be provided") - - if not flow: - raise ValueError(f"Flow {flow_name or flow_id} not found") - return await self.load_flow(flow.id, tweaks) - def build(self, *args: Any, **kwargs: Any) -> Any: raise NotImplementedError diff --git a/src/backend/langflow/interface/custom/directory_reader/directory_reader.py b/src/backend/langflow/interface/custom/directory_reader/directory_reader.py index 57bacc9bc..448e3c485 100644 --- a/src/backend/langflow/interface/custom/directory_reader/directory_reader.py +++ b/src/backend/langflow/interface/custom/directory_reader/directory_reader.py @@ -1,6 +1,7 @@ import ast import os import zlib +from pathlib import Path from loguru import logger @@ -79,9 +80,13 @@ class DirectoryReader: except Exception as e: logger.error(f"Error while loading component: {e}") continue - items.append({"name": menu["name"], "path": menu["path"], "components": components}) + items.append( + {"name": menu["name"], "path": menu["path"], "components": components} + ) filtered = [menu for menu in items if menu["components"]] - logger.debug(f'Filtered components {"with errors" if with_errors else ""}: {len(filtered)}') + logger.debug( + f'Filtered components {"with errors" if with_errors else ""}: {len(filtered)}' + ) return {"menu": filtered} def validate_code(self, file_content): @@ -114,15 +119,24 @@ class DirectoryReader: Walk through the directory path and return a list of all .py files. """ if not (safe_path := self.get_safe_path()): - raise CustomComponentPathValueError(f"The path needs to start with '{self.base_path}'.") + raise CustomComponentPathValueError( + f"The path needs to start with '{self.base_path}'." + ) file_list = [] - for root, _, files in os.walk(safe_path): - file_list.extend( - os.path.join(root, filename) - for filename in files - if filename.endswith(".py") and not filename.startswith("__") - ) + safe_path_obj = Path(safe_path) + for file_path in safe_path_obj.rglob("*.py"): + # The other condtion is that it should be + # in the safe_path/[folder]/[file].py format + # any folders below [folder] will be ignored + # basically the parent folder of the file should be a + # folder in the safe_path + if ( + file_path.is_file() + and file_path.parent.parent == safe_path_obj + and not file_path.name.startswith("__") + ): + file_list.append(str(file_path)) return file_list def find_menu(self, response, menu_name): @@ -159,7 +173,9 @@ class DirectoryReader: for node in ast.walk(module): if isinstance(node, ast.FunctionDef): for arg in node.args.args: - if self._is_type_hint_in_arg_annotation(arg.annotation, type_hint_name): + if self._is_type_hint_in_arg_annotation( + arg.annotation, type_hint_name + ): return True except SyntaxError: # Returns False if the code is not valid Python @@ -177,14 +193,16 @@ class DirectoryReader: and annotation.value.id == type_hint_name ) - def is_type_hint_used_but_not_imported(self, type_hint_name: str, code: str) -> bool: + def is_type_hint_used_but_not_imported( + self, type_hint_name: str, code: str + ) -> bool: """ Check if a type hint is used but not imported in the given code. """ try: - return self._is_type_hint_used_in_args(type_hint_name, code) and not self._is_type_hint_imported( + return self._is_type_hint_used_in_args( type_hint_name, code - ) + ) and not self._is_type_hint_imported(type_hint_name, code) except SyntaxError: # Returns True if there's something wrong with the code # TODO : Find a better way to handle this @@ -205,9 +223,9 @@ class DirectoryReader: return False, "Syntax error" elif not self.validate_build(file_content): return False, "Missing build function" - elif self._is_type_hint_used_in_args("Optional", file_content) and not self._is_type_hint_imported( + elif self._is_type_hint_used_in_args( "Optional", file_content - ): + ) and not self._is_type_hint_imported("Optional", file_content): return ( False, "Type hint 'Optional' is used but not imported in the code.", @@ -223,14 +241,18 @@ class DirectoryReader: from the .py files in the directory. """ response = {"menu": []} - logger.debug("-------------------- Building component menu list --------------------") + logger.debug( + "-------------------- Building component menu list --------------------" + ) for file_path in file_paths: menu_name = os.path.basename(os.path.dirname(file_path)) - logger.debug(f"Menu name: {menu_name}") filename = os.path.basename(file_path) validation_result, result_content = self.process_file(file_path) - logger.debug(f"Validation result: {validation_result}") + if not validation_result: + logger.error( + f"Error while processing file {file_path}: {result_content}" + ) menu_result = self.find_menu(response, menu_name) or { "name": menu_name, @@ -243,7 +265,9 @@ class DirectoryReader: # first check if it's already CamelCase if "_" in component_name: - component_name_camelcase = " ".join(word.title() for word in component_name.split("_")) + component_name_camelcase = " ".join( + word.title() for word in component_name.split("_") + ) else: component_name_camelcase = component_name @@ -251,7 +275,9 @@ class DirectoryReader: try: output_types = self.get_output_types_from_code(result_content) except Exception as exc: - logger.exception(f"Error while getting output types from code: {str(exc)}") + logger.exception( + f"Error while getting output types from code: {str(exc)}" + ) output_types = [component_name_camelcase] else: output_types = [component_name_camelcase] @@ -267,7 +293,9 @@ class DirectoryReader: if menu_result not in response["menu"]: response["menu"].append(menu_result) - logger.debug("-------------------- Component menu list built --------------------") + logger.debug( + "-------------------- Component menu list built --------------------" + ) return response @staticmethod @@ -277,5 +305,6 @@ class DirectoryReader: """ custom_component = CustomComponent(code=code) types_list = custom_component.get_function_entrypoint_return_type + # Get the name of types classes return [type_.__name__ for type_ in types_list if hasattr(type_, "__name__")] diff --git a/src/backend/langflow/interface/custom/directory_reader/utils.py b/src/backend/langflow/interface/custom/directory_reader/utils.py index f7378b8d0..0936bd4dd 100644 --- a/src/backend/langflow/interface/custom/directory_reader/utils.py +++ b/src/backend/langflow/interface/custom/directory_reader/utils.py @@ -1,7 +1,10 @@ -from langflow.interface.custom.directory_reader import DirectoryReader -from langflow.template.frontend_node.custom_components import CustomComponentFrontendNode from loguru import logger +from langflow.interface.custom.directory_reader import DirectoryReader +from langflow.template.frontend_node.custom_components import ( + CustomComponentFrontendNode, +) + def merge_nested_dicts_with_renaming(dict1, dict2): for key, value in dict2.items(): @@ -136,12 +139,12 @@ def determine_component_name(component): def build_menu_items(menu_item): """Build menu items for a given menu.""" menu_items = {} + logger.debug(f"Building menu items for {menu_item['name']}") + logger.debug(f"Loading {len(menu_item['components'])} components") for component_name, component_template, component in menu_item["components"]: try: menu_items[component_name] = component_template - logger.debug(f"Added {component_name} to valid menu.") except Exception as exc: logger.error(f"Error loading Component: {component['output_types']}") logger.exception(f"Error while building custom component {component['output_types']}: {exc}") return menu_items - return menu_items diff --git a/src/backend/langflow/interface/custom/utils.py b/src/backend/langflow/interface/custom/utils.py index 45e81d151..2f7257417 100644 --- a/src/backend/langflow/interface/custom/utils.py +++ b/src/backend/langflow/interface/custom/utils.py @@ -7,8 +7,6 @@ from typing import Any, Dict, List, Optional, Union from uuid import UUID from fastapi import HTTPException -from loguru import logger - from langflow.field_typing.range_spec import RangeSpec from langflow.interface.custom.attributes import ATTR_FUNC_MAPPING from langflow.interface.custom.code_parser.utils import extract_inner_type @@ -25,20 +23,27 @@ from langflow.template.frontend_node.custom_components import ( ) from langflow.utils import validate from langflow.utils.util import get_base_classes +from loguru import logger -def add_output_types(frontend_node: CustomComponentFrontendNode, return_types: List[str]): +def add_output_types( + frontend_node: CustomComponentFrontendNode, return_types: List[str] +): """Add output types to the frontend node""" for return_type in return_types: if return_type is None: raise HTTPException( status_code=400, detail={ - "error": ("Invalid return type. Please check your code and try again."), + "error": ( + "Invalid return type. Please check your code and try again." + ), "traceback": traceback.format_exc(), }, ) - if hasattr(return_type, "__name__"): + if return_type == str: + return_type = "Text" + elif hasattr(return_type, "__name__"): return_type = return_type.__name__ elif hasattr(return_type, "__class__"): return_type = return_type.__class__.__name__ @@ -63,19 +68,25 @@ def reorder_fields(frontend_node: CustomComponentFrontendNode, field_order: List frontend_node.template.fields = reordered_fields -def add_base_classes(frontend_node: CustomComponentFrontendNode, return_types: List[str]): +def add_base_classes( + frontend_node: CustomComponentFrontendNode, return_types: List[str] +): """Add base classes to the frontend node""" for return_type_instance in return_types: if return_type_instance is None: raise HTTPException( status_code=400, detail={ - "error": ("Invalid return type. Please check your code and try again."), + "error": ( + "Invalid return type. Please check your code and try again." + ), "traceback": traceback.format_exc(), }, ) base_classes = get_base_classes(return_type_instance) + if return_type_instance == str: + base_classes.append("Text") for base_class in base_classes: frontend_node.add_base_class(base_class) @@ -145,10 +156,14 @@ def add_new_custom_field( # If options is a list, then it's a dropdown # If options is None, then it's a list of strings is_list = isinstance(field_config.get("options"), list) - field_config["is_list"] = is_list or field_config.get("is_list", False) or field_contains_list + field_config["is_list"] = ( + is_list or field_config.get("is_list", False) or field_contains_list + ) if "name" in field_config: - warnings.warn("The 'name' key in field_config is used to build the object and can't be changed.") + warnings.warn( + "The 'name' key in field_config is used to build the object and can't be changed." + ) required = field_config.pop("required", field_required) placeholder = field_config.pop("placeholder", "") @@ -179,7 +194,9 @@ def add_extra_fields(frontend_node, field_config, function_args): if "name" not in extra_field or extra_field["name"] == "self": continue - field_name, field_type, field_value, field_required = get_field_properties(extra_field) + field_name, field_type, field_value, field_required = get_field_properties( + extra_field + ) config = field_config.get(field_name, {}) frontend_node = add_new_custom_field( frontend_node, @@ -217,7 +234,9 @@ def run_build_config( raise HTTPException( status_code=400, detail={ - "error": ("Invalid type convertion. Please check your code and try again."), + "error": ( + "Invalid type convertion. Please check your code and try again." + ), "traceback": traceback.format_exc(), }, ) from exc @@ -245,7 +264,9 @@ def run_build_config( raise HTTPException( status_code=400, detail={ - "error": ("Invalid type convertion. Please check your code and try again."), + "error": ( + "Invalid type convertion. Please check your code and try again." + ), "traceback": traceback.format_exc(), }, ) from exc @@ -296,21 +317,26 @@ def build_custom_component_template( ) -> Optional[Dict[str, Any]]: """Build a custom component template for the langchain""" try: - logger.debug("Building custom component template") frontend_node = build_frontend_node(custom_component.template_config) - logger.debug("Updated attributes") - field_config, custom_instance = run_build_config(custom_component, user_id=user_id, update_field=update_field) - logger.debug("Built field config") + field_config, custom_instance = run_build_config( + custom_component, user_id=user_id, update_field=update_field + ) + entrypoint_args = custom_component.get_function_entrypoint_args add_extra_fields(frontend_node, field_config, entrypoint_args) - frontend_node = add_code_field(frontend_node, custom_component.code, field_config.get("code", {})) + frontend_node = add_code_field( + frontend_node, custom_component.code, field_config.get("code", {}) + ) - add_base_classes(frontend_node, custom_component.get_function_entrypoint_return_type) - add_output_types(frontend_node, custom_component.get_function_entrypoint_return_type) - logger.debug("Added base classes") + add_base_classes( + frontend_node, custom_component.get_function_entrypoint_return_type + ) + add_output_types( + frontend_node, custom_component.get_function_entrypoint_return_type + ) reorder_fields(frontend_node, custom_instance._get_field_order()) @@ -321,7 +347,9 @@ def build_custom_component_template( raise HTTPException( status_code=400, detail={ - "error": ("Invalid type convertion. Please check your code and try again."), + "error": ( + "Invalid type convertion. Please check your code and try again." + ), "traceback": traceback.format_exc(), }, ) from exc @@ -331,11 +359,13 @@ def create_component_template(component): """Create a template for a component.""" component_code = component["code"] component_output_types = component["output_types"] + # remove component_extractor = CustomComponent(code=component_code) component_template = build_custom_component_template(component_extractor) - component_template["output_types"] = component_output_types + if not component_template["output_types"] and component_output_types: + component_template["output_types"] = component_output_types return component_template @@ -345,7 +375,9 @@ def build_custom_components(settings_service): if not settings_service.settings.COMPONENTS_PATH: return {} - logger.info(f"Building custom components from {settings_service.settings.COMPONENTS_PATH}") + logger.info( + f"Building custom components from {settings_service.settings.COMPONENTS_PATH}" + ) custom_components_from_file = {} processed_paths = set() for path in settings_service.settings.COMPONENTS_PATH: @@ -356,7 +388,9 @@ def build_custom_components(settings_service): custom_component_dict = build_custom_component_list_from_path(path_str) if custom_component_dict: category = next(iter(custom_component_dict)) - logger.info(f"Loading {len(custom_component_dict[category])} component(s) from category {category}") + logger.info( + f"Loading {len(custom_component_dict[category])} component(s) from category {category}" + ) custom_components_from_file = merge_nested_dicts_with_renaming( custom_components_from_file, custom_component_dict ) @@ -373,7 +407,7 @@ def update_field_dict(field_dict): field_dict["refresh"] = True if "value" in field_dict and callable(field_dict["value"]): - field_dict["value"] = field_dict["value"](field_dict.get("options", [])) + field_dict["value"] = field_dict["value"]() field_dict["refresh"] = True # Let's check if "range_spec" is a RangeSpec object @@ -401,7 +435,7 @@ def build_component(component): """Build a single component.""" component_name = determine_component_name(component) component_template = create_component_template(component) - logger.debug(f"Building component: {component_name, component.get('output_types')}") + return component_name, component_template diff --git a/src/backend/langflow/interface/importing/utils.py b/src/backend/langflow/interface/importing/utils.py index 62e1b5e42..d9d9198b6 100644 --- a/src/backend/langflow/interface/importing/utils.py +++ b/src/backend/langflow/interface/importing/utils.py @@ -35,7 +35,7 @@ def import_by_type(_type: str, name: str) -> Any: func_dict = { "agents": import_agent, "prompts": import_prompt, - "llms": {"llm": import_llm, "chat": import_chat_llm}, + "models": {"llm": import_llm, "chat": import_chat_llm}, "tools": import_tool, "chains": import_chain, "toolkits": import_toolkit, @@ -50,7 +50,7 @@ def import_by_type(_type: str, name: str) -> Any: "retrievers": import_retriever, "custom_components": import_custom_component, } - if _type == "llms": + if _type == "models": key = "chat" if "chat" in name.lower() else "llm" loaded_func = func_dict[_type][key] # type: ignore else: diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py index b18f8c658..d9b678639 100644 --- a/src/backend/langflow/interface/initialize/loading.py +++ b/src/backend/langflow/interface/initialize/loading.py @@ -1,6 +1,6 @@ import inspect import json -from typing import TYPE_CHECKING, Any, Callable, Dict, Sequence, Type +from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Sequence, Type import orjson from langchain.agents import agent as agent_module @@ -19,7 +19,11 @@ from langflow.interface.custom.utils import get_function from langflow.interface.custom_lists import CUSTOM_NODES from langflow.interface.importing.utils import import_by_type from langflow.interface.initialize.llm import initialize_vertexai -from langflow.interface.initialize.utils import handle_format_kwargs, handle_node_type, handle_partial_variables +from langflow.interface.initialize.utils import ( + handle_format_kwargs, + handle_node_type, + handle_partial_variables, +) from langflow.interface.initialize.vector_store import vecstore_initializer from langflow.interface.output_parsers.base import output_parser_creator from langflow.interface.retrievers.base import retriever_creator @@ -30,16 +34,16 @@ from langflow.utils import validate if TYPE_CHECKING: from langflow import CustomComponent - - -def build_vertex_in_params(params: Dict) -> Dict: from langflow.graph.vertex.base import Vertex - # If any of the values in params is a Vertex, we will build it - return {key: value.build() if isinstance(value, Vertex) else value for key, value in params.items()} - -async def instantiate_class(node_type: str, base_type: str, params: Dict, user_id=None) -> Any: +async def instantiate_class( + node_type: str, + base_type: str, + params: Dict, + user_id=None, + vertex: Optional["Vertex"] = None, +) -> Any: """Instantiate class from module type and key, and params""" params = convert_params_to_sets(params) params = convert_kwargs(params) @@ -51,7 +55,14 @@ async def instantiate_class(node_type: str, base_type: str, params: Dict, user_i return custom_node(**params) logger.debug(f"Instantiating {node_type} of type {base_type}") class_object = import_by_type(_type=base_type, name=node_type) - return await instantiate_based_on_type(class_object, base_type, node_type, params, user_id=user_id) + return await instantiate_based_on_type( + class_object=class_object, + base_type=base_type, + node_type=node_type, + params=params, + user_id=user_id, + vertex=vertex, + ) def convert_params_to_sets(params): @@ -78,7 +89,14 @@ def convert_kwargs(params): return params -async def instantiate_based_on_type(class_object, base_type, node_type, params, user_id): +async def instantiate_based_on_type( + class_object, + base_type, + node_type, + params, + user_id, + vertex, +): if base_type == "agents": return instantiate_agent(node_type, class_object, params) elif base_type == "prompts": @@ -105,24 +123,35 @@ async def instantiate_based_on_type(class_object, base_type, node_type, params, return instantiate_chains(node_type, class_object, params) elif base_type == "output_parsers": return instantiate_output_parser(node_type, class_object, params) - elif base_type == "llms": + elif base_type == "models": return instantiate_llm(node_type, class_object, params) elif base_type == "retrievers": return instantiate_retriever(node_type, class_object, params) elif base_type == "memory": return instantiate_memory(node_type, class_object, params) elif base_type == "custom_components": - return await instantiate_custom_component(node_type, class_object, params, user_id) + return await instantiate_custom_component( + node_type, + class_object, + params, + user_id, + vertex, + ) elif base_type == "wrappers": return instantiate_wrapper(node_type, class_object, params) else: return class_object(**params) -async def instantiate_custom_component(node_type, class_object, params, user_id): +async def instantiate_custom_component(node_type, class_object, params, user_id, vertex): params_copy = params.copy() class_object: Type["CustomComponent"] = eval_custom_component_code(params_copy.pop("code")) - custom_component: "CustomComponent" = class_object(user_id=user_id) + custom_component: "CustomComponent" = class_object( + user_id=user_id, + parameters=params_copy, + vertex=vertex, + selected_output_type=vertex.selected_output_type, + ) if "retriever" in params_copy and hasattr(params_copy["retriever"], "as_retriever"): params_copy["retriever"] = params_copy["retriever"].as_retriever() @@ -137,7 +166,7 @@ async def instantiate_custom_component(node_type, class_object, params, user_id) # Call the build method directly if it's sync build_result = custom_component.build(**params_copy) - return build_result, {"repr": custom_component.custom_repr()} + return custom_component, build_result, {"repr": custom_component.custom_repr()} def instantiate_wrapper(node_type, class_object, params): diff --git a/src/backend/langflow/interface/llms/base.py b/src/backend/langflow/interface/llms/base.py index 4b0654a1a..ba611da8d 100644 --- a/src/backend/langflow/interface/llms/base.py +++ b/src/backend/langflow/interface/llms/base.py @@ -1,16 +1,16 @@ from typing import Dict, List, Optional, Type +from loguru import logger + from langflow.interface.base import LangChainTypeCreator from langflow.interface.custom_lists import llm_type_to_cls_dict from langflow.services.deps import get_settings_service - from langflow.template.frontend_node.llms import LLMFrontendNode -from loguru import logger from langflow.utils.util import build_template_from_class class LLMCreator(LangChainTypeCreator): - type_name: str = "llms" + type_name: str = "models" @property def frontend_node_class(self) -> Type[LLMFrontendNode]: diff --git a/src/backend/langflow/interface/run.py b/src/backend/langflow/interface/run.py index 94cd922eb..aec602ac7 100644 --- a/src/backend/langflow/interface/run.py +++ b/src/backend/langflow/interface/run.py @@ -1,25 +1,19 @@ -from typing import Dict, Optional, Tuple, Union -from uuid import UUID +from typing import Dict, Tuple from loguru import logger from langflow.graph import Graph -async def build_sorted_vertices(data_graph, user_id: Optional[Union[str, UUID]] = None) -> Tuple[Graph, Dict]: +async def build_sorted_vertices(data_graph, flow_id: str) -> Tuple[Graph, Dict]: """ Build langchain object from data_graph. """ logger.debug("Building langchain object") - graph = Graph.from_payload(data_graph) - sorted_vertices = graph.topological_sort() - artifacts = {} - for vertex in sorted_vertices: - await vertex.build(user_id=user_id) - if vertex.artifacts: - artifacts.update(vertex.artifacts) - return graph, artifacts + graph = Graph.from_payload(data_graph, flow_id=flow_id) + + return graph, {} def get_memory_key(langchain_object): diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index 39c68889f..3dcddf99f 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -9,7 +9,6 @@ from langflow.interface.embeddings.base import embedding_creator from langflow.interface.llms.base import llm_creator from langflow.interface.memories.base import memory_creator from langflow.interface.output_parsers.base import output_parser_creator -from langflow.interface.prompts.base import prompt_creator from langflow.interface.retrievers.base import retriever_creator from langflow.interface.text_splitters.base import textsplitter_creator from langflow.interface.toolkits.base import toolkits_creator @@ -39,7 +38,7 @@ def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union creators = [ chain_creator, agent_creator, - prompt_creator, + # prompt_creator, llm_creator, memory_creator, tool_creator, diff --git a/src/backend/langflow/interface/utils.py b/src/backend/langflow/interface/utils.py index ef29911f5..30c55f1ef 100644 --- a/src/backend/langflow/interface/utils.py +++ b/src/backend/langflow/interface/utils.py @@ -1,14 +1,14 @@ import base64 import json import os -from io import BytesIO import re - +from io import BytesIO import yaml from langchain.base_language import BaseLanguageModel -from PIL.Image import Image from loguru import logger +from PIL.Image import Image + from langflow.services.chat.config import ChatConfig from langflow.services.deps import get_settings_service @@ -43,7 +43,9 @@ def try_setting_streaming_options(langchain_object): llm = None if hasattr(langchain_object, "llm"): llm = langchain_object.llm - elif hasattr(langchain_object, "llm_chain") and hasattr(langchain_object.llm_chain, "llm"): + elif hasattr(langchain_object, "llm_chain") and hasattr( + langchain_object.llm_chain, "llm" + ): llm = langchain_object.llm_chain.llm if isinstance(llm, BaseLanguageModel): @@ -56,8 +58,37 @@ def try_setting_streaming_options(langchain_object): def extract_input_variables_from_prompt(prompt: str) -> list[str]: - """Extract input variables from prompt.""" - return re.findall(r"{(.*?)}", prompt) + variables = [] + remaining_text = prompt + + # Pattern to match single {var} and double {{var}} braces. + pattern = r"\{\{(.*?)\}\}|\{([^{}]+)\}" + + while True: + match = re.search(pattern, remaining_text) + if not match: + break + + # Extract the variable name from either the single or double brace match + if match.group(1): # Match found in double braces + variable_name = ( + "{{" + match.group(1) + "}}" + ) # Re-add single braces for JSON strings + else: # Match found in single braces + variable_name = match.group(2) + if variable_name is not None: + # This means there is a match + # but there is nothing inside the braces + variables.append(variable_name) + + # Remove the matched text from the remaining_text + start, end = match.span() + remaining_text = remaining_text[:start] + remaining_text[end:] + + # Proceed to the next match until no more matches are found + # No need to compare remaining "{}" instances because we are re-adding braces for JSON compatibility + + return variables def setup_llm_caching(): @@ -73,11 +104,14 @@ def setup_llm_caching(): def set_langchain_cache(settings): from langchain.globals import set_llm_cache + from langflow.interface.importing.utils import import_class if cache_type := os.getenv("LANGFLOW_LANGCHAIN_CACHE"): try: - cache_class = import_class(f"langchain.cache.{cache_type or settings.LANGCHAIN_CACHE}") + cache_class = import_class( + f"langchain.cache.{cache_type or settings.LANGCHAIN_CACHE}" + ) logger.debug(f"Setting up LLM caching with {cache_class.__name__}") set_llm_cache(cache_class()) diff --git a/src/backend/langflow/interface/wrappers/base.py b/src/backend/langflow/interface/wrappers/base.py index 469559ad9..204a5153e 100644 --- a/src/backend/langflow/interface/wrappers/base.py +++ b/src/backend/langflow/interface/wrappers/base.py @@ -1,35 +1,23 @@ -from typing import ClassVar, Dict, List, Optional +from typing import Dict, List, Optional -from langchain_community.utilities import requests, sql_database +from langchain_community.utilities import requests from loguru import logger from langflow.interface.base import LangChainTypeCreator -from langflow.utils.util import build_template_from_class, build_template_from_method +from langflow.utils.util import build_template_from_class class WrapperCreator(LangChainTypeCreator): type_name: str = "wrappers" - from_method_nodes: ClassVar[Dict] = {"SQLDatabase": "from_uri"} - @property def type_to_loader_dict(self) -> Dict: if self.type_dict is None: - self.type_dict = { - wrapper.__name__: wrapper for wrapper in [requests.TextRequestsWrapper, sql_database.SQLDatabase] - } + self.type_dict = {wrapper.__name__: wrapper for wrapper in [requests.TextRequestsWrapper]} return self.type_dict def get_signature(self, name: str) -> Optional[Dict]: try: - if name in self.from_method_nodes: - return build_template_from_method( - name, - type_to_cls_dict=self.type_to_loader_dict, - add_function=True, - method_name=self.from_method_nodes[name], - ) - return build_template_from_class(name, self.type_to_loader_dict) except ValueError as exc: raise ValueError("Wrapper not found") from exc diff --git a/src/backend/langflow/main.py b/src/backend/langflow/main.py index f07552cf6..4b4c19a25 100644 --- a/src/backend/langflow/main.py +++ b/src/backend/langflow/main.py @@ -3,7 +3,7 @@ from pathlib import Path from typing import Optional from urllib.parse import urlencode -import socketio +import socketio # type: ignore from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse diff --git a/src/backend/langflow/memory.py b/src/backend/langflow/memory.py index dbf46b24d..c8f73f25e 100644 --- a/src/backend/langflow/memory.py +++ b/src/backend/langflow/memory.py @@ -1,9 +1,10 @@ from typing import Optional, Union +from loguru import logger + from langflow.schema import Record from langflow.services.deps import get_monitor_service from langflow.services.monitor.schema import MessageModel -from loguru import logger def get_messages( diff --git a/src/backend/langflow/processing/base.py b/src/backend/langflow/processing/base.py index 26e0f396e..e11af0a44 100644 --- a/src/backend/langflow/processing/base.py +++ b/src/backend/langflow/processing/base.py @@ -4,7 +4,6 @@ from langchain.agents.agent import AgentExecutor from langchain.callbacks.base import BaseCallbackHandler from loguru import logger -from langflow.api.v1.callback import AsyncStreamingLLMCallbackHandler, StreamingLLMCallbackHandler from langflow.processing.process import fix_memory_inputs, format_actions from langflow.services.deps import get_plugins_service @@ -15,11 +14,6 @@ if TYPE_CHECKING: def setup_callbacks(sync, trace_id, **kwargs): """Setup callbacks for langchain object""" callbacks = [] - if sync: - callbacks.append(StreamingLLMCallbackHandler(**kwargs)) - else: - callbacks.append(AsyncStreamingLLMCallbackHandler(**kwargs)) - plugin_service = get_plugins_service() plugin_callbacks = plugin_service.get_callbacks(_id=trace_id) if plugin_callbacks: diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index ad4f8fb78..408db0a53 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -7,18 +7,14 @@ from langchain.schema import AgentAction, Document from langchain_community.vectorstores import VectorStore from langchain_core.messages import AIMessage from langchain_core.runnables.base import Runnable +from loguru import logger +from pydantic import BaseModel + from langflow.graph.graph.base import Graph from langflow.graph.vertex.base import Vertex from langflow.interface.custom.custom_component import CustomComponent -from langflow.interface.run import ( - build_sorted_vertices, - get_memory_key, - update_memory_keys, -) -from langflow.services.deps import get_session_service +from langflow.interface.run import get_memory_key, update_memory_keys from langflow.services.session.service import SessionService -from loguru import logger -from pydantic import BaseModel def fix_memory_inputs(langchain_object): @@ -97,22 +93,6 @@ def get_input_str_if_only_one_input(inputs: dict) -> Optional[str]: return list(inputs.values())[0] if len(inputs) == 1 else None -def get_build_result(data_graph, session_id): - # If session_id is provided, load the langchain_object from the session - # using build_sorted_vertices_with_caching.get_result_by_session_id - # if it returns something different than None, return it - # otherwise, build the graph and return the result - if session_id: - logger.debug(f"Loading LangChain object from session {session_id}") - result = build_sorted_vertices(data_graph=data_graph) - if result is not None: - logger.debug("Loaded LangChain object") - return result - - logger.debug("Building langchain object") - return build_sorted_vertices(data_graph) - - def process_inputs( inputs: Optional[Union[dict, List[dict]]] = None, artifacts: Optional[Dict[str, Any]] = None, @@ -212,50 +192,30 @@ class Result(BaseModel): session_id: str -async def process_graph_cached( - data_graph: Dict[str, Any], - inputs: Optional[Union[dict, List[dict]]] = None, - clear_cache=False, - session_id=None, -) -> Result: - session_service = get_session_service() - if clear_cache: - session_service.clear_session(session_id) - if session_id is None: - session_id = session_service.generate_key(session_id=session_id, data_graph=data_graph) - # Load the graph using SessionService - session = await session_service.load_session(session_id, data_graph) - graph, artifacts = session if session else (None, None) - if not graph: - raise ValueError("Graph not found in the session") - - result = await build_graph_and_generate_result( - graph=graph, - session_id=session_id, - inputs=inputs, - artifacts=artifacts, - session_service=session_service, - ) - - return result - - -async def build_graph_and_generate_result( - graph: "Graph", - session_id: str, - inputs: Optional[Union[dict, List[dict]]] = None, +async def run_graph( + graph: Union["Graph", dict], + flow_id: str, + stream: bool, + session_id: Optional[str] = None, + inputs: Optional[dict[str, Union[List[str], str]]] = None, artifacts: Optional[Dict[str, Any]] = None, session_service: Optional[SessionService] = None, ): - """Build the graph and generate the result""" - built_object = await graph.build() - processed_inputs = process_inputs(inputs, artifacts or {}) - result = await generate_result(built_object, processed_inputs) - # langchain_object is now updated with the new memory - # we need to update the cache with the updated langchain_object + """Run the graph and generate the result""" + if isinstance(graph, dict): + graph_data = graph + graph = Graph.from_payload(graph, flow_id=flow_id) + else: + graph_data = graph._graph_data + if not session_id and session_service is not None: + session_id = session_service.generate_key(session_id=flow_id, data_graph=graph_data) + if inputs is None: + inputs = {} + + outputs = await graph.run(inputs, stream=stream) if session_id and session_service: session_service.update_session(session_id, (graph, artifacts)) - return Result(result=result, session_id=session_id) + return outputs, session_id def validate_input(graph_data: Dict[str, Any], tweaks: Dict[str, Dict[str, Any]]) -> List[Dict[str, Any]]: diff --git a/src/backend/langflow/schema/__init__.py b/src/backend/langflow/schema/__init__.py new file mode 100644 index 000000000..8cd0af848 --- /dev/null +++ b/src/backend/langflow/schema/__init__.py @@ -0,0 +1,3 @@ +from .schema import Record + +__all__ = ["Record"] diff --git a/src/backend/langflow/schema.py b/src/backend/langflow/schema/schema.py similarity index 75% rename from src/backend/langflow/schema.py rename to src/backend/langflow/schema/schema.py index 053caf3a3..c99aaf127 100644 --- a/src/backend/langflow/schema.py +++ b/src/backend/langflow/schema/schema.py @@ -1,4 +1,4 @@ -from typing import Any, Optional +from typing import Any from langchain_core.documents import Document from pydantic import BaseModel @@ -14,7 +14,7 @@ class Record(BaseModel): """ text: str - data: Optional[dict] = None + data: dict = {} @classmethod def from_document(cls, document: Document) -> "Record": @@ -57,14 +57,3 @@ class Record(BaseModel): return self.text -def docs_to_records(documents: list[Document]) -> list[Record]: - """ - Converts a list of Documents to a list of Records. - - Args: - documents (list[Document]): The list of Documents to convert. - - Returns: - list[Record]: The converted list of Records. - """ - return [Record.from_document(document) for document in documents] diff --git a/src/backend/langflow/services/auth/utils.py b/src/backend/langflow/services/auth/utils.py index a47604b9a..23ce1e702 100644 --- a/src/backend/langflow/services/auth/utils.py +++ b/src/backend/langflow/services/auth/utils.py @@ -11,7 +11,11 @@ from starlette.websockets import WebSocket from langflow.services.database.models.api_key.model import ApiKey from langflow.services.database.models.api_key.crud import check_key -from langflow.services.database.models.user.crud import get_user_by_id, get_user_by_username, update_user_last_login_at +from langflow.services.database.models.user.crud import ( + get_user_by_id, + get_user_by_username, + update_user_last_login_at, +) from langflow.services.database.models.user.model import User from langflow.services.deps import get_session, get_settings_service @@ -323,7 +327,7 @@ def add_padding(s): def get_fernet(settings_service=Depends(get_settings_service)): SECRET_KEY = settings_service.auth_settings.SECRET_KEY - # It's important that your secret key is 32 url-safe base64-encoded bytes + # It's important that your secret key is 32 url-safe base64-encoded byte padded_secret_key = add_padding(SECRET_KEY) fernet = Fernet(padded_secret_key) return fernet diff --git a/src/backend/langflow/services/chat/utils.py b/src/backend/langflow/services/chat/utils.py index 85e6cdcd5..f0e584f4c 100644 --- a/src/backend/langflow/services/chat/utils.py +++ b/src/backend/langflow/services/chat/utils.py @@ -3,12 +3,10 @@ from typing import Any from langchain.agents import AgentExecutor from langchain.chains.base import Chain from langchain_core.runnables import Runnable -from loguru import logger - from langflow.api.v1.schemas import ChatMessage from langflow.interface.utils import try_setting_streaming_options from langflow.processing.base import get_result_and_steps -from langflow.utils.chat import ChatDefinition +from loguru import logger LANGCHAIN_RUNNABLES = (Chain, Runnable, AgentExecutor) @@ -24,7 +22,9 @@ async def process_graph( if build_result is None: # Raise user facing error - raise ValueError("There was an error loading the langchain_object. Please, check all the nodes and try again.") + raise ValueError( + "There was an error loading the langchain_object. Please, check all the nodes and try again." + ) # Generate result and thought try: @@ -40,20 +40,6 @@ async def process_graph( client_id=client_id, session_id=session_id, ) - elif isinstance(build_result, ChatDefinition): - raw_output = await run_build_result( - build_result, - chat_inputs, - client_id=client_id, - session_id=session_id, - ) - if isinstance(raw_output, dict): - if not build_result.output_key: - raise ValueError("No output key provided to ChatDefinition when returning a dict.") - result = raw_output[build_result.output_key] - else: - result = raw_output - intermediate_steps = [] else: raise TypeError(f"Unknown type {type(build_result)}") logger.debug("Generated result and intermediate_steps") @@ -64,5 +50,7 @@ async def process_graph( raise e -async def run_build_result(build_result: Any, chat_inputs: ChatMessage, client_id: str, session_id: str): +async def run_build_result( + build_result: Any, chat_inputs: ChatMessage, client_id: str, session_id: str +): return build_result(inputs=chat_inputs.message) diff --git a/src/backend/langflow/services/database/models/base.py b/src/backend/langflow/services/database/models/base.py index 17dd947d9..53ee2c37e 100644 --- a/src/backend/langflow/services/database/models/base.py +++ b/src/backend/langflow/services/database/models/base.py @@ -1,6 +1,4 @@ import orjson -from pydantic import ConfigDict -from sqlmodel import SQLModel def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True): @@ -17,7 +15,3 @@ def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True): if default is None: return orjson.dumps(v, option=option).decode() return orjson.dumps(v, default=default, option=option).decode() - - -class SQLModelSerializable(SQLModel): - model_config = ConfigDict(from_attributes=True) diff --git a/src/backend/langflow/services/database/service.py b/src/backend/langflow/services/database/service.py index 693da8143..3cecdd340 100644 --- a/src/backend/langflow/services/database/service.py +++ b/src/backend/langflow/services/database/service.py @@ -5,16 +5,17 @@ from typing import TYPE_CHECKING import sqlalchemy as sa from alembic import command, util from alembic.config import Config +from loguru import logger +from sqlalchemy import inspect +from sqlalchemy.exc import OperationalError +from sqlmodel import Session, SQLModel, create_engine, select, text + from langflow.services.base import Service from langflow.services.database import models # noqa from langflow.services.database.models.user.crud import get_user_by_username from langflow.services.database.utils import Result, TableResults from langflow.services.deps import get_settings_service from langflow.services.utils import teardown_superuser -from loguru import logger -from sqlalchemy import inspect -from sqlalchemy.exc import OperationalError -from sqlmodel import Session, SQLModel, create_engine, select, text if TYPE_CHECKING: from sqlalchemy.engine import Engine @@ -35,11 +36,14 @@ class DatabaseService(Service): def _create_engine(self) -> "Engine": """Create the engine for the database.""" settings_service = get_settings_service() - if settings_service.settings.DATABASE_URL and settings_service.settings.DATABASE_URL.startswith("sqlite"): + if ( + settings_service.settings.DATABASE_URL + and settings_service.settings.DATABASE_URL.startswith("sqlite") + ): connect_args = {"check_same_thread": False} else: connect_args = {} - return create_engine(self.database_url, connect_args=connect_args, max_overflow=-1) + return create_engine(self.database_url, connect_args=connect_args) def __enter__(self): self._session = Session(self.engine) @@ -47,7 +51,9 @@ class DatabaseService(Service): def __exit__(self, exc_type, exc_value, traceback): if exc_type is not None: # If an exception has been raised - logger.error(f"Session rollback because of exception: {exc_type.__name__} {exc_value}") + logger.error( + f"Session rollback because of exception: {exc_type.__name__} {exc_value}" + ) self._session.rollback() else: self._session.commit() @@ -64,7 +70,9 @@ class DatabaseService(Service): settings_service = get_settings_service() if settings_service.auth_settings.AUTO_LOGIN: with Session(self.engine) as session: - flows = session.exec(select(models.Flow).where(models.Flow.user_id is None)).all() + flows = session.exec( + select(models.Flow).where(models.Flow.user_id is None) + ).all() if flows: logger.debug("Migrating flows to default superuser") username = settings_service.auth_settings.SUPERUSER @@ -94,7 +102,9 @@ class DatabaseService(Service): expected_columns = list(model.model_fields.keys()) try: - available_columns = [col["name"] for col in inspector.get_columns(table)] + available_columns = [ + col["name"] for col in inspector.get_columns(table) + ] except sa.exc.NoSuchTableError: logger.error(f"Missing table: {table}") return False @@ -110,13 +120,11 @@ class DatabaseService(Service): return True - def init_alembic(self): + def init_alembic(self, alembic_cfg): logger.info("Initializing alembic") - alembic_cfg = Config() - alembic_cfg.set_main_option("script_location", str(self.script_location)) - alembic_cfg.set_main_option("sqlalchemy.url", self.database_url) - command.stamp(alembic_cfg, "head") - # command.upgrade(alembic_cfg, "head") + command.ensure_version(alembic_cfg) + # alembic_cfg.attributes["connection"].commit() + command.upgrade(alembic_cfg, "head") logger.info("Alembic initialized") def run_migrations(self, fix=False): @@ -125,6 +133,11 @@ class DatabaseService(Service): # if not self.script_location.exists(): # this is not the correct way to check if alembic has been initialized # We need to check if the alembic_version table exists # if not, we need to initialize alembic + alembic_cfg = Config() + # alembic_cfg.attributes["connection"] = session + alembic_cfg.set_main_option("script_location", str(self.script_location)) + alembic_cfg.set_main_option("sqlalchemy.url", self.database_url) + should_initialize_alembic = False with Session(self.engine) as session: # If the table does not exist it throws an error # so we need to catch it @@ -132,29 +145,32 @@ class DatabaseService(Service): session.exec(text("SELECT * FROM alembic_version")) except Exception: logger.info("Alembic not initialized") - try: - self.init_alembic() - except Exception as exc: - logger.error(f"Error initializing alembic: {exc}") - raise RuntimeError("Error initializing alembic") from exc + should_initialize_alembic = True + else: logger.info("Alembic already initialized") + if should_initialize_alembic: + try: + self.init_alembic(alembic_cfg) + except Exception as exc: + logger.error(f"Error initializing alembic: {exc}") + raise RuntimeError("Error initializing alembic") from exc logger.info(f"Running DB migrations in {self.script_location}") - alembic_cfg = Config() - alembic_cfg.set_main_option("script_location", str(self.script_location)) - alembic_cfg.set_main_option("sqlalchemy.url", self.database_url) + try: command.check(alembic_cfg) except Exception as exc: - if isinstance(exc, (util.exc.CommandError, util.exc.AutogenerateDiffsDetected)): + if isinstance( + exc, (util.exc.CommandError, util.exc.AutogenerateDiffsDetected) + ): command.upgrade(alembic_cfg, "head") time.sleep(3) try: command.check(alembic_cfg) except util.exc.AutogenerateDiffsDetected as e: - logger.exception("AutogenerateDiffsDetected: {exc}") + logger.error(f"AutogenerateDiffsDetected: {exc}") if not fix: raise RuntimeError( "Something went wrong running migrations. Please, run `langflow migration --fix`" @@ -183,7 +199,10 @@ class DatabaseService(Service): # We will check that all models are in the database # and that the database is up to date with all columns sql_models = [models.Flow, models.User, models.ApiKey] - return [TableResults(sql_model.__tablename__, self.check_table(sql_model)) for sql_model in sql_models] + return [ + TableResults(sql_model.__tablename__, self.check_table(sql_model)) + for sql_model in sql_models + ] def check_table(self, model): results = [] @@ -192,7 +211,9 @@ class DatabaseService(Service): expected_columns = list(model.__fields__.keys()) available_columns = [] try: - available_columns = [col["name"] for col in inspector.get_columns(table_name)] + available_columns = [ + col["name"] for col in inspector.get_columns(table_name) + ] results.append(Result(name=table_name, type="table", success=True)) except sa.exc.NoSuchTableError: logger.error(f"Missing table: {table_name}") @@ -223,7 +244,9 @@ class DatabaseService(Service): try: table.create(self.engine, checkfirst=True) except OperationalError as oe: - logger.warning(f"Table {table} already exists, skipping. Exception: {oe}") + logger.warning( + f"Table {table} already exists, skipping. Exception: {oe}" + ) except Exception as exc: logger.error(f"Error creating table {table}: {exc}") raise RuntimeError(f"Error creating table {table}") from exc @@ -235,7 +258,9 @@ class DatabaseService(Service): if table not in table_names: logger.error("Something went wrong creating the database and tables.") logger.error("Please check your database settings.") - raise RuntimeError("Something went wrong creating the database and tables.") + raise RuntimeError( + "Something went wrong creating the database and tables." + ) logger.debug("Database and tables created successfully") diff --git a/src/backend/langflow/services/monitor/schema.py b/src/backend/langflow/services/monitor/schema.py index 32e5e582f..2c1e34cd5 100644 --- a/src/backend/langflow/services/monitor/schema.py +++ b/src/backend/langflow/services/monitor/schema.py @@ -10,7 +10,9 @@ if TYPE_CHECKING: class TransactionModel(BaseModel): id: Optional[int] = Field(default=None, alias="id") - timestamp: Optional[datetime] = Field(default_factory=datetime.now, alias="timestamp") + timestamp: Optional[datetime] = Field( + default_factory=datetime.now, alias="timestamp" + ) source: str target: str target_args: dict @@ -51,8 +53,12 @@ class MessageModel(BaseModel): @classmethod def from_record(cls, record: "Record"): # first check if the record has all the required fields - if "sender" not in record.data and "sender_name" not in record.data: - raise ValueError("The record does not have the required fields 'sender' and 'sender_name' in the data.") + if not record.data or ( + "sender" not in record.data and "sender_name" not in record.data + ): + raise ValueError( + "The record does not have the required fields 'sender' and 'sender_name' in the data." + ) return cls( sender=record.data["sender"], sender_name=record.data["sender_name"], diff --git a/src/backend/langflow/services/monitor/service.py b/src/backend/langflow/services/monitor/service.py index 0aa14a081..6702a89eb 100644 --- a/src/backend/langflow/services/monitor/service.py +++ b/src/backend/langflow/services/monitor/service.py @@ -3,6 +3,9 @@ from pathlib import Path from typing import TYPE_CHECKING, Optional, Union import duckdb +from loguru import logger +from platformdirs import user_cache_dir + from langflow.services.base import Service from langflow.services.monitor.schema import ( MessageModel, @@ -13,8 +16,6 @@ from langflow.services.monitor.utils import ( add_row_to_table, drop_and_create_table_if_schema_mismatch, ) -from loguru import logger -from platformdirs import user_cache_dir if TYPE_CHECKING: from langflow.services.settings.manager import SettingsService diff --git a/src/backend/langflow/services/monitor/utils.py b/src/backend/langflow/services/monitor/utils.py index 87f58aa9f..18b6e5bde 100644 --- a/src/backend/langflow/services/monitor/utils.py +++ b/src/backend/langflow/services/monitor/utils.py @@ -1,12 +1,13 @@ from typing import TYPE_CHECKING, Any, Dict, Optional, Type, Union import duckdb -from langflow.services.deps import get_monitor_service from loguru import logger from pydantic import BaseModel +from langflow.services.deps import get_monitor_service + if TYPE_CHECKING: - from langflow.api.v1.schemas import ResultData + from langflow.api.v1.schemas import ResultDataResponse INDEX_KEY = "index" @@ -22,7 +23,7 @@ def get_table_schema_as_dict(conn: duckdb.DuckDBPyConnection, table_name: str) - def model_to_sql_column_definitions(model: Type[BaseModel]) -> dict: columns = {} for field_name, field_type in model.model_fields.items(): - if hasattr(field_type.annotation, "__args__"): + if hasattr(field_type.annotation, "__args__") and field_type.annotation is not None: field_args = field_type.annotation.__args__ else: field_args = [] @@ -75,7 +76,7 @@ def drop_and_create_table_if_schema_mismatch(db_path: str, table_name: str, mode def add_row_to_table( conn: duckdb.DuckDBPyConnection, table_name: str, - model: Type[BaseModel], + model: Type, monitor_data: Union[Dict[str, Any], BaseModel], ): # Validate the data with the Pydantic model @@ -138,7 +139,7 @@ async def log_vertex_build( vertex_id: str, valid: bool, params: Any, - data: "ResultData", + data: "ResultDataResponse", artifacts: Optional[dict] = None, ): try: diff --git a/src/backend/langflow/services/session/service.py b/src/backend/langflow/services/session/service.py index 059d82bec..68fec0430 100644 --- a/src/backend/langflow/services/session/service.py +++ b/src/backend/langflow/services/session/service.py @@ -14,7 +14,7 @@ class SessionService(Service): def __init__(self, cache_service): self.cache_service: "BaseCacheService" = cache_service - async def load_session(self, key, data_graph: Optional[dict] = None): + async def load_session(self, key, flow_id: str, data_graph: Optional[dict] = None): # Check if the data is cached if key in self.cache_service: return self.cache_service.get(key) @@ -24,7 +24,7 @@ class SessionService(Service): if data_graph is None: return (None, None) # If not cached, build the graph and cache it - graph, artifacts = await build_sorted_vertices(data_graph) + graph, artifacts = await build_sorted_vertices(data_graph, flow_id) self.cache_service.set(key, (graph, artifacts)) diff --git a/src/backend/langflow/services/settings/manager.py b/src/backend/langflow/services/settings/manager.py index e9e535911..f81c3f0c5 100644 --- a/src/backend/langflow/services/settings/manager.py +++ b/src/backend/langflow/services/settings/manager.py @@ -1,9 +1,11 @@ +import os + +import yaml +from loguru import logger + from langflow.services.base import Service from langflow.services.settings.auth import AuthSettings from langflow.services.settings.base import Settings -from loguru import logger -import os -import yaml class SettingsService(Service): @@ -28,7 +30,7 @@ class SettingsService(Service): settings_dict = {k.upper(): v for k, v in settings_dict.items()} for key in settings_dict: - if key not in Settings.__fields__.keys(): + if key not in Settings.model_fields.keys(): raise KeyError(f"Key {key} not found in settings") logger.debug(f"Loading {len(settings_dict[key])} {key} from {file_path}") diff --git a/src/backend/langflow/services/socket/service.py b/src/backend/langflow/services/socket/service.py index a84c9ca86..fd2c236d5 100644 --- a/src/backend/langflow/services/socket/service.py +++ b/src/backend/langflow/services/socket/service.py @@ -1,6 +1,6 @@ from typing import TYPE_CHECKING, Any -import socketio +import socketio # type: ignore from loguru import logger from langflow.services.base import Service @@ -25,7 +25,7 @@ class SocketIOService(Service): self.sio.on("message")(self.message) self.sio.on("get_vertices")(self.on_get_vertices) self.sio.on("build_vertex")(self.on_build_vertex) - self.sessions = {} + self.sessions = {} # type: dict[str, dict] async def emit_error(self, sid, error): await self.sio.emit("error", to=sid, data=error) diff --git a/src/backend/langflow/services/socket/utils.py b/src/backend/langflow/services/socket/utils.py index 64ffdc15c..4176d081c 100644 --- a/src/backend/langflow/services/socket/utils.py +++ b/src/backend/langflow/services/socket/utils.py @@ -1,15 +1,16 @@ import time from typing import Callable -import socketio +import socketio # type: ignore +from sqlmodel import select + from langflow.api.utils import format_elapsed_time -from langflow.api.v1.schemas import ResultData, VertexBuildResponse +from langflow.api.v1.schemas import ResultDataResponse, VertexBuildResponse from langflow.graph.graph.base import Graph from langflow.graph.vertex.base import StatelessVertex from langflow.services.database.models.flow.model import Flow from langflow.services.deps import get_session from langflow.services.monitor.utils import log_vertex_build -from sqlmodel import select def set_socketio_server(socketio_server): @@ -73,7 +74,7 @@ async def build_vertex( artifacts = vertex.artifacts timedelta = time.perf_counter() - start_time duration = format_elapsed_time(timedelta) - result_dict = ResultData( + result_dict = ResultDataResponse( results=result_dict, artifacts=artifacts, duration=duration, @@ -82,7 +83,7 @@ async def build_vertex( except Exception as exc: params = str(exc) valid = False - result_dict = ResultData(results={}) + result_dict = ResultDataResponse(results={}) artifacts = {} set_cache(flow_id, graph) await log_vertex_build( diff --git a/src/backend/langflow/services/storage/s3.py b/src/backend/langflow/services/storage/s3.py index afd39760a..4426f377c 100644 --- a/src/backend/langflow/services/storage/s3.py +++ b/src/backend/langflow/services/storage/s3.py @@ -1,5 +1,5 @@ -import boto3 -from botocore.exceptions import ClientError, NoCredentialsError +import boto3 # type: ignore +from botocore.exceptions import ClientError, NoCredentialsError # type: ignore from loguru import logger from .service import StorageService diff --git a/src/backend/langflow/services/storage/service.py b/src/backend/langflow/services/storage/service.py index 830557dbf..ac226bc31 100644 --- a/src/backend/langflow/services/storage/service.py +++ b/src/backend/langflow/services/storage/service.py @@ -17,26 +17,26 @@ class StorageService(Service): self.set_ready() def build_full_path(self, flow_id: str, file_name: str) -> str: - pass + raise NotImplementedError def set_ready(self): self.ready = True @abstractmethod async def save_file(self, flow_id: str, file_name: str, data) -> None: - pass + raise NotImplementedError @abstractmethod async def get_file(self, flow_id: str, file_name: str) -> bytes: - pass + raise NotImplementedError @abstractmethod async def list_files(self, flow_id: str) -> list[str]: - pass + raise NotImplementedError @abstractmethod async def delete_file(self, flow_id: str, file_name: str) -> bool: - pass + raise NotImplementedError def teardown(self): - pass + raise NotImplementedError diff --git a/src/backend/langflow/services/utils.py b/src/backend/langflow/services/utils.py index a3cd6fd3e..34f1a042d 100644 --- a/src/backend/langflow/services/utils.py +++ b/src/backend/langflow/services/utils.py @@ -5,7 +5,10 @@ from langflow.services.auth.utils import create_super_user, verify_password from langflow.services.database.utils import initialize_database from langflow.services.manager import service_manager from langflow.services.schema import ServiceType -from langflow.services.settings.constants import DEFAULT_SUPERUSER, DEFAULT_SUPERUSER_PASSWORD +from langflow.services.settings.constants import ( + DEFAULT_SUPERUSER, + DEFAULT_SUPERUSER_PASSWORD, +) from langflow.services.socket.utils import set_socketio_server from .deps import get_db_service, get_session, get_settings_service @@ -19,7 +22,9 @@ def get_factories_and_deps(): from langflow.services.database import factory as database_factory from langflow.services.monitor import factory as monitor_factory from langflow.services.plugins import factory as plugins_factory - from langflow.services.session import factory as session_service_factory # type: ignore + from langflow.services.session import ( + factory as session_service_factory, + ) # type: ignore from langflow.services.settings import factory as settings_factory from langflow.services.socket import factory as socket_factory from langflow.services.storage import factory as storage_factory @@ -48,8 +53,14 @@ def get_factories_and_deps(): ), (plugins_factory.PluginServiceFactory(), [ServiceType.SETTINGS_SERVICE]), (store_factory.StoreServiceFactory(), [ServiceType.SETTINGS_SERVICE]), - (credentials_factory.CredentialServiceFactory(), [ServiceType.SETTINGS_SERVICE]), - (storage_factory.StorageServiceFactory(), [ServiceType.SESSION_SERVICE, ServiceType.SETTINGS_SERVICE]), + ( + credentials_factory.CredentialServiceFactory(), + [ServiceType.SETTINGS_SERVICE], + ), + ( + storage_factory.StorageServiceFactory(), + [ServiceType.SESSION_SERVICE, ServiceType.SETTINGS_SERVICE], + ), (monitor_factory.MonitorServiceFactory(), [ServiceType.SETTINGS_SERVICE]), (socket_factory.SocketIOFactory(), [ServiceType.CACHE_SERVICE]), ] @@ -81,12 +92,16 @@ def get_or_create_super_user(session: Session, username, password, is_default): ) return None else: - logger.debug("User with superuser credentials exists but is not a superuser.") + logger.debug( + "User with superuser credentials exists but is not a superuser." + ) return None if user: if verify_password(password, user.password): - raise ValueError("User with superuser credentials exists but is not a superuser.") + raise ValueError( + "User with superuser credentials exists but is not a superuser." + ) else: raise ValueError("Incorrect superuser credentials") @@ -115,15 +130,21 @@ def setup_superuser(settings_service, session: Session): username = settings_service.auth_settings.SUPERUSER password = settings_service.auth_settings.SUPERUSER_PASSWORD - is_default = (username == DEFAULT_SUPERUSER) and (password == DEFAULT_SUPERUSER_PASSWORD) + is_default = (username == DEFAULT_SUPERUSER) and ( + password == DEFAULT_SUPERUSER_PASSWORD + ) try: - user = get_or_create_super_user(session=session, username=username, password=password, is_default=is_default) + user = get_or_create_super_user( + session=session, username=username, password=password, is_default=is_default + ) if user is not None: logger.debug("Superuser created successfully.") except Exception as exc: logger.exception(exc) - raise RuntimeError("Could not create superuser. Please create a superuser manually.") from exc + raise RuntimeError( + "Could not create superuser. Please create a superuser manually." + ) from exc finally: settings_service.auth_settings.reset_credentials() @@ -137,7 +158,9 @@ def teardown_superuser(settings_service, session): if not settings_service.auth_settings.AUTO_LOGIN: try: - logger.debug("AUTO_LOGIN is set to False. Removing default superuser if exists.") + logger.debug( + "AUTO_LOGIN is set to False. Removing default superuser if exists." + ) username = DEFAULT_SUPERUSER from langflow.services.database.models.user.model import User @@ -181,11 +204,15 @@ def initialize_session_service(): Initialize the session manager. """ from langflow.services.cache import factory as cache_factory - from langflow.services.session import factory as session_service_factory # type: ignore + from langflow.services.session import ( + factory as session_service_factory, + ) # type: ignore initialize_settings_service() - service_manager.register_factory(cache_factory.CacheServiceFactory(), dependencies=[ServiceType.SETTINGS_SERVICE]) + service_manager.register_factory( + cache_factory.CacheServiceFactory(), dependencies=[ServiceType.SETTINGS_SERVICE] + ) service_manager.register_factory( session_service_factory.SessionServiceFactory(), @@ -202,7 +229,9 @@ def initialize_services(fix_migration: bool = False, socketio_server=None): service_manager.register_factory(factory, dependencies=dependencies) except Exception as exc: logger.exception(exc) - raise RuntimeError("Could not initialize services. Please check your settings.") from exc + raise RuntimeError( + "Could not initialize services. Please check your settings." + ) from exc # Test cache connection service_manager.get(ServiceType.CACHE_SERVICE) @@ -210,9 +239,11 @@ def initialize_services(fix_migration: bool = False, socketio_server=None): try: initialize_database(fix_migration=fix_migration) except Exception as exc: - logger.exception(exc) + logger.error(exc) raise exc - setup_superuser(service_manager.get(ServiceType.SETTINGS_SERVICE), next(get_session())) + setup_superuser( + service_manager.get(ServiceType.SETTINGS_SERVICE), next(get_session()) + ) try: get_db_service().migrate_flows_if_auto_login() except Exception as exc: diff --git a/src/backend/langflow/template/field/base.py b/src/backend/langflow/template/field/base.py index 373869b87..455d5779b 100644 --- a/src/backend/langflow/template/field/base.py +++ b/src/backend/langflow/template/field/base.py @@ -1,7 +1,15 @@ from typing import Any, Callable, Optional, Union +from pydantic import ( + BaseModel, + ConfigDict, + Field, + field_serializer, + field_validator, + model_serializer, +) + from langflow.field_typing.range_spec import RangeSpec -from pydantic import BaseModel, ConfigDict, Field, field_serializer, model_serializer class TemplateField(BaseModel): @@ -28,7 +36,7 @@ class TemplateField(BaseModel): """The value of the field. Default is None.""" file_types: list[str] = Field(default=[], serialization_alias="fileTypes") - """List of file types associated with the field. Default is an empty list. (duplicate)""" + """List of file types associated with the field . Default is an empty list.""" file_path: Optional[str] = "" """The file path of the field if it is a file. Defaults to None.""" @@ -63,7 +71,7 @@ class TemplateField(BaseModel): range_spec: Optional[RangeSpec] = Field(default=None, serialization_alias="rangeSpec") """Range specification for the field. Defaults to None.""" - title_case: bool = True + title_case: bool = False """Specifies if the field should be displayed in title case. Defaults to True.""" def to_dict(self): @@ -73,11 +81,13 @@ class TemplateField(BaseModel): def serialize_model(self, handler): result = handler(self) # If the field is str, we add the Text input type - if self.field_type == "str": + if self.field_type in ["str", "Text"]: if "input_types" not in result: result["input_types"] = ["Text"] else: result["input_types"].append("Text") + if self.field_type == "Text": + result["type"] = "str" return result @field_serializer("file_path") @@ -101,3 +111,12 @@ class TemplateField(BaseModel): if self.title_case: value = value.title() return value + + @field_validator("file_types") + def validate_file_types(cls, value): + if not isinstance(value, list): + raise ValueError("file_types must be a list") + return [ + (f".{file_type}" if isinstance(file_type, str) and not file_type.startswith(".") else file_type) + for file_type in value + ] diff --git a/src/backend/langflow/template/frontend_node/base.py b/src/backend/langflow/template/frontend_node/base.py index 8b400b849..2a19ec9c9 100644 --- a/src/backend/langflow/template/frontend_node/base.py +++ b/src/backend/langflow/template/frontend_node/base.py @@ -47,6 +47,12 @@ class FrontendNode(BaseModel): """Description of the frontend node.""" icon: Optional[str] = None """Icon of the frontend node.""" + is_input: Optional[bool] = None + """Whether the frontend node is used as an input when processing the Graph. + If True, there should be a field named 'input_value'.""" + is_output: Optional[bool] = None + """Whether the frontend node is used as an output when processing the Graph. + If True, there should be a field named 'input_value'.""" is_composition: Optional[bool] = None """Whether the frontend node is used for composition.""" base_classes: List[str] diff --git a/src/backend/langflow/template/frontend_node/chains.py b/src/backend/langflow/template/frontend_node/chains.py index a40b29577..4ce23a316 100644 --- a/src/backend/langflow/template/frontend_node/chains.py +++ b/src/backend/langflow/template/frontend_node/chains.py @@ -59,7 +59,7 @@ class ChainFrontendNode(FrontendNode): field.required = False field.advanced = False - if "key" in field.name: + if "key" in str(field.name): field.password = False field.show = False if field.name in ["input_key", "output_key"]: diff --git a/src/backend/langflow/utils/chat.py b/src/backend/langflow/utils/chat.py deleted file mode 100644 index e1621bdab..000000000 --- a/src/backend/langflow/utils/chat.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Any, Callable, Optional, Union - -from langchain_core.prompts import PromptTemplate as LCPromptTemplate -from langflow.utils.prompt import GenericPromptTemplate -from llama_index.prompts import PromptTemplate as LIPromptTemplate - -PromptTemplate = Union[LCPromptTemplate, LIPromptTemplate] - - -class ChatDefinition: - def __init__( - self, - func: Callable, - inputs: list[str], - output_key: Optional[str] = None, - prompt_template: Optional[PromptTemplate] = None, - ): - self.func = func - self.input_keys = inputs - self.output_key = output_key - self.prompt_template = prompt_template - - @classmethod - def from_prompt_template(cls, prompt_template: PromptTemplate, func: Callable, output_key: Optional[str] = None): - prompt = GenericPromptTemplate(prompt_template) - return cls( - func=func, - inputs=prompt.input_keys, - output_key=output_key, - prompt_template=prompt_template, - ) - - def __call__(self, inputs: dict, callbacks: Optional[Any] = None) -> dict: - return self.func(inputs, callbacks) diff --git a/src/backend/langflow/utils/constants.py b/src/backend/langflow/utils/constants.py index 9b01f8c2d..ac0a03fdf 100644 --- a/src/backend/langflow/utils/constants.py +++ b/src/backend/langflow/utils/constants.py @@ -158,8 +158,8 @@ LOADERS_INFO: List[Dict[str, Any]] = [ "loader": "UnstructuredMarkdownLoader", "name": "Unstructured Markdown (.md)", "import": "langchain_community.document_loaders.UnstructuredMarkdownLoader", - "defaultFor": ["md"], - "allowdTypes": ["md"], + "defaultFor": ["md", "mdx"], + "allowdTypes": ["md", "mdx"], }, { "loader": "UnstructuredPowerPointLoader", diff --git a/src/backend/langflow/utils/logger.py b/src/backend/langflow/utils/logger.py index 060ad9731..5d9ec8406 100644 --- a/src/backend/langflow/utils/logger.py +++ b/src/backend/langflow/utils/logger.py @@ -25,7 +25,7 @@ def patching(record): def configure(log_level: Optional[str] = None, log_file: Optional[Path] = None): - if os.getenv("LANGFLOW_LOG_LEVEL") in VALID_LOG_LEVELS and log_level is None: + if os.getenv("LANGFLOW_LOG_LEVEL", "").upper() in VALID_LOG_LEVELS and log_level is None: log_level = os.getenv("LANGFLOW_LOG_LEVEL") if log_level is None: log_level = "INFO" diff --git a/src/backend/langflow/utils/prompt.py b/src/backend/langflow/utils/prompt.py deleted file mode 100644 index 871193f45..000000000 --- a/src/backend/langflow/utils/prompt.py +++ /dev/null @@ -1,58 +0,0 @@ -from typing import Any, Union - -from langchain_core.prompts import PromptTemplate as LCPromptTemplate -from llama_index.prompts import PromptTemplate as LIPromptTemplate - -PromptTemplateTypes = Union[LCPromptTemplate, LIPromptTemplate] - - -class GenericPromptTemplate: - def __init__(self, prompt_template: PromptTemplateTypes): - object.__setattr__(self, "prompt_template", prompt_template) - - @property - def input_keys(self): - prompt_template = object.__getattribute__(self, "prompt_template") - if isinstance(prompt_template, LCPromptTemplate): - return prompt_template.input_variables - elif isinstance(prompt_template, LIPromptTemplate): - return prompt_template.template_vars - else: - raise TypeError(f"Unknown prompt template type {type(prompt_template)}") - - def to_lc_prompt(self): - prompt_template = object.__getattribute__(self, "prompt_template") - if isinstance(prompt_template, LCPromptTemplate): - return prompt_template - elif isinstance(prompt_template, LIPromptTemplate): - return LCPromptTemplate.from_template(prompt_template.get_template()) - else: - raise TypeError(f"Unknown prompt template type {type(prompt_template)}") - - def to_li_prompt(self): - prompt_template = object.__getattribute__(self, "prompt_template") - if isinstance(prompt_template, LIPromptTemplate): - return prompt_template - elif isinstance(prompt_template, LCPromptTemplate): - return LIPromptTemplate(template=prompt_template.template) - else: - raise TypeError(f"Unknown prompt template type {type(prompt_template)}") - - def __or__(self, other): - prompt_template = object.__getattribute__(self, "prompt_template") - if isinstance(prompt_template, LIPromptTemplate): - return self.to_lc_prompt() | other - else: - raise TypeError(f"Unknown prompt template type {type(other)}") - - def __getattribute__(self, name: str) -> Any: - if name in { - "input_keys", - "to_lc_prompt", - "to_li_prompt", - "__or__", - "prompt_template", - }: - return object.__getattribute__(self, name) - prompt_template = object.__getattribute__(self, "prompt_template") - return getattr(prompt_template, name) diff --git a/src/backend/langflow/utils/schemas.py b/src/backend/langflow/utils/schemas.py index bcde2eb2f..354cb5949 100644 --- a/src/backend/langflow/utils/schemas.py +++ b/src/backend/langflow/utils/schemas.py @@ -1,3 +1,4 @@ +import enum from typing import Dict, List, Optional, Union from langchain_core.messages import BaseMessage @@ -10,6 +11,7 @@ class ChatOutputResponse(BaseModel): message: Union[str, List[Union[str, Dict]]] sender: Optional[str] = "Machine" sender_name: Optional[str] = "AI" + stream_url: Optional[str] = None @classmethod def from_message( @@ -39,3 +41,13 @@ class ChatOutputResponse(BaseModel): message = self.message.replace("\n\n", "\n") self.message = message.replace("\n", "\n\n") return self + + +class ContainsEnumMeta(enum.EnumMeta): + def __contains__(cls, item): + try: + cls(item) + except ValueError: + return False + else: + return True diff --git a/src/backend/langflow/utils/validate.py b/src/backend/langflow/utils/validate.py index a17eaba1a..21821538c 100644 --- a/src/backend/langflow/utils/validate.py +++ b/src/backend/langflow/utils/validate.py @@ -6,7 +6,6 @@ from typing import Dict, List, Optional, Union from langflow.field_typing.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES - PROMPT_INPUT_TYPES = ["Document", "BaseOutputParser", "Text", "Record"] @@ -204,7 +203,9 @@ def prepare_global_scope(code, module): for alias in node.names: exec_globals[alias.name] = getattr(imported_module, alias.name) except ModuleNotFoundError as e: - raise ModuleNotFoundError(f"Module {node.module} not found. Please install it and try again.") from e + raise ModuleNotFoundError( + f"Module {node.module} not found. Please install it and try again. Error: {repr(e)}" + ) return exec_globals diff --git a/src/backend/langflow/worker.py b/src/backend/langflow/worker.py index b3872bcd8..a5d1cf956 100644 --- a/src/backend/langflow/worker.py +++ b/src/backend/langflow/worker.py @@ -2,12 +2,8 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union from asgiref.sync import async_to_sync from celery.exceptions import SoftTimeLimitExceeded # type: ignore + from langflow.core.celery_app import celery_app -from langflow.processing.process import Result, generate_result, process_inputs -from langflow.services.deps import get_session_service -from langflow.services.manager import initialize_session_service -from loguru import logger -from rich import print if TYPE_CHECKING: from langflow.graph.vertex.base import Vertex @@ -38,38 +34,4 @@ def process_graph_cached_task( clear_cache=False, session_id=None, ) -> Dict[str, Any]: - try: - initialize_session_service() - session_service = get_session_service() - - if clear_cache: - session_service.clear_session(session_id) - - if session_id is None: - session_id = session_service.generate_key(session_id=session_id, data_graph=data_graph) - - # Use async_to_sync to handle the asynchronous part of the session service - session_data = async_to_sync(session_service.load_session, force_new_loop=True)(session_id, data_graph) - logger.warning(f"session_data: {session_data}") - graph, artifacts = session_data if session_data else (None, None) - - if not graph: - raise ValueError("Graph not found in the session") - - # Use async_to_sync for the asynchronous build method - built_object = async_to_sync(graph.build, force_new_loop=True)() - - logger.debug(f"Built object: {built_object}") - - processed_inputs = process_inputs(inputs, artifacts or {}) - result = async_to_sync(generate_result, force_new_loop=True)(built_object, processed_inputs) - - # Update the session with the new data - session_service.update_session(session_id, (graph, artifacts)) - result_object = Result(result=result, session_id=session_id).model_dump() - print(f"Result object: {result_object}") - return result_object - except Exception as e: - logger.error(f"Error in process_graph_cached_task: {e}") - # Handle the exception as needed, maybe re-raise or return an error message - raise + raise NotImplementedError("This task is not implemented yet") diff --git a/src/frontend/.gitignore b/src/frontend/.gitignore index 9dfae2bb0..a6dee659a 100644 --- a/src/frontend/.gitignore +++ b/src/frontend/.gitignore @@ -24,3 +24,7 @@ yarn-error.log* /test-results/ /playwright-report/*/ /playwright/.cache/ +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/src/frontend/harFiles/backend_12112023.har b/src/frontend/harFiles/backend_12112023.har deleted file mode 100644 index 63dbde94a..000000000 --- a/src/frontend/harFiles/backend_12112023.har +++ /dev/null @@ -1,599 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.39.0" - }, - "browser": { - "name": "chromium", - "version": "119.0.6045.9" - }, - "entries": [ - { - "startedDateTime": "2023-12-11T18:54:58.349Z", - "time": 1.142, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/store/check/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "16" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:57 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"enabled\":true}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.142 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.349Z", - "time": 0.484, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/store/check/api_key", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 403, - "statusText": "Forbidden", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "73" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:57 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"detail\":\"An API key as query or header, or a JWT token must be passed\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.484 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.349Z", - "time": 0.476, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/version", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "22" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:57 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"version\":\"0.6.0rc1\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.476 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.349Z", - "time": 0.59, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/auto_login", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "227" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:57 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"access_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20\",\"refresh_token\":null,\"token_type\":\"bearer\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.59 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.380Z", - "time": 0.762, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/store/check/api_key", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 403, - "statusText": "Forbidden", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "73" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:58 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"detail\":\"An API key as query or header, or a JWT token must be passed\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.762 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.423Z", - "time": 1.03, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/flows/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flows" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "375696" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:58 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[{\"name\":\"Awesome Euclid\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-m2yFu\",\"type\":\"genericNode\",\"position\":{\"x\":462.6456058272081,\"y\":1033.9314297130313},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"transcription\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"create an image prompt based on the song's lyrics to be used as the album cover of this song:\\n\\nlyrics:\\n{transcription}\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"transcription\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"transcription\",\"display_name\":\"transcription\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"PromptTemplate\",\"StringPromptTemplate\",\"BasePromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"transcription\"],\"template\":[\"transcription\",\"question\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-m2yFu\"},\"selected\":false,\"positionAbsolute\":{\"x\":462.6456058272081,\"y\":1033.9314297130313},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-urapv\",\"type\":\"genericNode\",\"position\":{\"x\":189.94856095084924,\"y\":-85.06556385338186},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-urapv\"},\"selected\":false,\"positionAbsolute\":{\"x\":189.94856095084924,\"y\":-85.06556385338186},\"dragging\":false},{\"width\":384,\"height\":806,\"id\":\"CustomComponent-IEIUl\",\"type\":\"genericNode\",\"position\":{\"x\":2364.865919667005,\"y\":88.43094097025096},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nfrom platformdirs import user_cache_dir\\nimport base64\\nfrom PIL import Image\\nfrom io import BytesIO\\nfrom openai import OpenAI\\nfrom pathlib import Path\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Image generator\\\"\\n description: str = \\\"generate images using Dall-E\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\",\\\"input_types\\\":[\\\"str\\\"]},\\n \\\"api_key\\\":{\\\"display_name\\\":\\\"OpenAI API key\\\",\\\"password\\\":True},\\n \\\"model\\\":{\\\"display_name\\\":\\\"Model name\\\",\\\"advanced\\\":True,\\\"options\\\":[\\\"dall-e-2\\\",\\\"dall-e-3\\\"], \\\"value\\\":\\\"dall-e-3\\\"},\\n \\\"file_name\\\":{\\\"display_name\\\":\\\"File Name\\\"},\\n \\\"output_format\\\":{\\\"display_name\\\":\\\"Output format\\\",\\\"options\\\":[\\\"jpeg\\\",\\\"png\\\"],\\\"value\\\":\\\"jpeg\\\"},\\n \\\"width\\\":{\\\"display_name\\\":\\\"Width\\\" ,\\\"value\\\":1024},\\n \\\"height\\\":{\\\"display_name\\\":\\\"Height\\\", \\\"value\\\":1024}\\n }\\n\\n def build(self, prompt:str,api_key:str,model:str,file_name:str,output_format:str,width:int,height:int):\\n client = OpenAI(api_key=api_key)\\n cache_dir = Path(user_cache_dir(\\\"langflow\\\"))\\n images_dir = cache_dir / \\\"images\\\"\\n images_dir.mkdir(parents=True, exist_ok=True)\\n image_path = images_dir / f\\\"{file_name}.{output_format}\\\"\\n response = client.images.generate(\\n model=model,\\n prompt=prompt,\\n size=f\\\"{height}x{width}\\\",\\n response_format=\\\"b64_json\\\",\\n n=1,\\n )\\n # Decode base64-encoded image string\\n binary_data = base64.b64decode(response.data[0].b64_json)\\n # Create PIL Image object from binary image data\\n image_pil = Image.open(BytesIO(binary_data))\\n image_pil.save(image_path, format=output_format.upper())\\n return \\\"\\\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_key\",\"display_name\":\"OpenAI API key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"file_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"file_name\",\"display_name\":\"File Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"album\"},\"height\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1024,\"password\":false,\"name\":\"height\",\"display_name\":\"Height\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"dall-e-3\",\"password\":false,\"options\":[\"dall-e-2\",\"dall-e-3\"],\"name\":\"model\",\"display_name\":\"Model name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"output_format\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"jpeg\",\"password\":false,\"options\":[\"jpeg\",\"png\"],\"name\":\"output_format\",\"display_name\":\"Output format\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"input_types\":[\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"width\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1024,\"password\":false,\"name\":\"width\",\"display_name\":\"Width\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false}},\"description\":\"generate images using Dall-E\",\"base_classes\":[\"Data\"],\"display_name\":\"Image generator\",\"custom_fields\":{\"api_key\":null,\"file_name\":null,\"height\":null,\"model\":null,\"output_format\":null,\"prompt\":null,\"width\":null},\"output_types\":[\"Data\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-IEIUl\"},\"selected\":false,\"positionAbsolute\":{\"x\":2364.865919667005,\"y\":88.43094097025096}},{\"width\":384,\"height\":338,\"id\":\"LLMChain-KlJb3\",\"type\":\"genericNode\",\"position\":{\"x\":1242.9851164540805,\"y\":-139.74634696823108},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-KlJb3\"},\"selected\":false,\"positionAbsolute\":{\"x\":1242.9851164540805,\"y\":-139.74634696823108},\"dragging\":false},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-bCuc0\",\"type\":\"genericNode\",\"position\":{\"x\":1747.8107777342625,\"y\":319.13729017446667},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Custom Component\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Chain) -> str:\\n result = param.run({})\\n self.status = result\\n return result\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"param\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Chain\",\"list\":false}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"str\"],\"display_name\":\"Custom Component\",\"custom_fields\":{\"param\":null},\"output_types\":[\"str\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-bCuc0\"},\"selected\":false,\"positionAbsolute\":{\"x\":1747.8107777342625,\"y\":319.13729017446667}}],\"edges\":[{\"source\":\"LLMChain-KlJb3\",\"target\":\"CustomComponent-bCuc0\",\"sourceHandle\":\"{œbaseClassesœ:[œChainœ,œCallableœ],œdataTypeœ:œLLMChainœ,œidœ:œLLMChain-KlJb3œ}\",\"targetHandle\":\"{œfieldNameœ:œparamœ,œidœ:œCustomComponent-bCuc0œ,œinputTypesœ:null,œtypeœ:œChainœ}\",\"id\":\"reactflow__edge-LLMChain-KlJb3{œbaseClassesœ:[œChainœ,œCallableœ],œdataTypeœ:œLLMChainœ,œidœ:œLLMChain-KlJb3œ}-CustomComponent-bCuc0{œfieldNameœ:œparamœ,œidœ:œCustomComponent-bCuc0œ,œinputTypesœ:null,œtypeœ:œChainœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"param\",\"id\":\"CustomComponent-bCuc0\",\"inputTypes\":null,\"type\":\"Chain\"},\"sourceHandle\":{\"baseClasses\":[\"Chain\",\"Callable\"],\"dataType\":\"LLMChain\",\"id\":\"LLMChain-KlJb3\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"ChatOpenAI-urapv\",\"target\":\"LLMChain-KlJb3\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-urapvœ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-urapv{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-urapvœ}-LLMChain-KlJb3{œfieldNameœ:œllmœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-KlJb3\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-urapv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"PromptTemplate-m2yFu\",\"target\":\"LLMChain-KlJb3\",\"sourceHandle\":\"{œbaseClassesœ:[œPromptTemplateœ,œStringPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-m2yFuœ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"id\":\"reactflow__edge-PromptTemplate-m2yFu{œbaseClassesœ:[œPromptTemplateœ,œStringPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-m2yFuœ}-LLMChain-KlJb3{œfieldNameœ:œpromptœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-KlJb3\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"PromptTemplate\",\"StringPromptTemplate\",\"BasePromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-m2yFu\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"CustomComponent-bCuc0\",\"target\":\"CustomComponent-IEIUl\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-bCuc0œ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œCustomComponent-IEIUlœ,œinputTypesœ:[œstrœ],œtypeœ:œstrœ}\",\"id\":\"reactflow__edge-CustomComponent-bCuc0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-bCuc0œ}-CustomComponent-IEIUl{œfieldNameœ:œpromptœ,œidœ:œCustomComponent-IEIUlœ,œinputTypesœ:[œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"CustomComponent-IEIUl\",\"inputTypes\":[\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-bCuc0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false}],\"viewport\":{\"x\":92.23454077990459,\"y\":183.8125619056221,\"zoom\":0.6070974421975234}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:33:18.503954\",\"folder\":null,\"id\":\"fe142ce5-32dc-4955-b186-672ced662f13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Darwin\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"OpenAI-3ZVDh\",\"type\":\"genericNode\",\"position\":{\"x\":-4.0041891741949485,\"y\":-114.02615182719649},\"data\":{\"type\":\"OpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":20,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"best_of\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"logit_bias\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":256,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-davinci-003\",\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"OpenAI\",\"BaseLLM\",\"BaseOpenAI\",\"BaseLanguageModel\"],\"display_name\":\"OpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAI-3ZVDh\"},\"selected\":true,\"positionAbsolute\":{\"x\":-4.0041891741949485,\"y\":-114.02615182719649},\"dragging\":false},{\"width\":384,\"height\":338,\"id\":\"LLMChain-RFYXY\",\"type\":\"genericNode\",\"position\":{\"x\":586.672100458868,\"y\":10.967049167706678},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-RFYXY\"},\"positionAbsolute\":{\"x\":586.672100458868,\"y\":10.967049167706678}},{\"width\":384,\"height\":242,\"id\":\"ChatPromptTemplate-ce1sg\",\"type\":\"genericNode\",\"position\":{\"x\":395.598984452791,\"y\":612.188491773035},\"data\":{\"type\":\"ChatPromptTemplate\",\"node\":{\"template\":{\"messages\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"messages\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseMessagePromptTemplate\",\"list\":true},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatPromptTemplate\"},\"description\":\"A prompt template for chat models.\",\"base_classes\":[\"ChatPromptTemplate\",\"BaseChatPromptTemplate\",\"BasePromptTemplate\"],\"display_name\":\"ChatPromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"beta\":false,\"error\":null},\"id\":\"ChatPromptTemplate-ce1sg\"},\"selected\":false,\"positionAbsolute\":{\"x\":395.598984452791,\"y\":612.188491773035},\"dragging\":false}],\"edges\":[{\"source\":\"OpenAI-3ZVDh\",\"sourceHandle\":\"{œbaseClassesœ:[œOpenAIœ,œBaseLLMœ,œBaseOpenAIœ,œBaseLanguageModelœ],œdataTypeœ:œOpenAIœ,œidœ:œOpenAI-3ZVDhœ}\",\"target\":\"LLMChain-RFYXY\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-RFYXY\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"OpenAI\",\"BaseLLM\",\"BaseOpenAI\",\"BaseLanguageModel\"],\"dataType\":\"OpenAI\",\"id\":\"OpenAI-3ZVDh\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-OpenAI-3ZVDh{œbaseClassesœ:[œOpenAIœ,œBaseLLMœ,œBaseOpenAIœ,œBaseLanguageModelœ],œdataTypeœ:œOpenAIœ,œidœ:œOpenAI-3ZVDhœ}-LLMChain-RFYXY{œfieldNameœ:œllmœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"ChatPromptTemplate-ce1sg\",\"sourceHandle\":\"{œbaseClassesœ:[œChatPromptTemplateœ,œBaseChatPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œChatPromptTemplateœ,œidœ:œChatPromptTemplate-ce1sgœ}\",\"target\":\"LLMChain-RFYXY\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-RFYXY\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"ChatPromptTemplate\",\"BaseChatPromptTemplate\",\"BasePromptTemplate\"],\"dataType\":\"ChatPromptTemplate\",\"id\":\"ChatPromptTemplate-ce1sg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatPromptTemplate-ce1sg{œbaseClassesœ:[œChatPromptTemplateœ,œBaseChatPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œChatPromptTemplateœ,œidœ:œChatPromptTemplate-ce1sgœ}-LLMChain-RFYXY{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":8.832868402772647,\"y\":189.85443326477025,\"zoom\":0.6070974421975235}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:50:19.584160\",\"folder\":null,\"id\":\"103766f0-1f50-427a-9ba7-2ab73343c524\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Easley\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-VPh47\",\"type\":\"genericNode\",\"position\":{\"x\":-328.5742193020408,\"y\":-420.1025929438987},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseChatModel\",\"ChatOpenAI\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-VPh47\"},\"selected\":false,\"positionAbsolute\":{\"x\":-328.5742193020408,\"y\":-420.1025929438987},\"dragging\":false},{\"width\":384,\"height\":338,\"id\":\"LLMChain-NgFyo\",\"type\":\"genericNode\",\"position\":{\"x\":225.3113389084088,\"y\":-193.3520019494289},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-NgFyo\"},\"selected\":false,\"positionAbsolute\":{\"x\":225.3113389084088,\"y\":-193.3520019494289},\"dragging\":false},{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-oAFjh\",\"type\":\"genericNode\",\"position\":{\"x\":-342.62522294052764,\"y\":391.20629510686103},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"links\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Answer everything with links\\n{links}\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"links\",\"display_name\":\"links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"BasePromptTemplate\",\"StringPromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"links\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-oAFjh\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-342.62522294052764,\"y\":391.20629510686103}}],\"edges\":[{\"source\":\"ChatOpenAI-VPh47\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseChatModelœ,œChatOpenAIœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VPh47œ}\",\"target\":\"LLMChain-NgFyo\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-NgFyo\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseChatModel\",\"ChatOpenAI\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-VPh47\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-VPh47{œbaseClassesœ:[œBaseChatModelœ,œChatOpenAIœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VPh47œ}-LLMChain-NgFyo{œfieldNameœ:œllmœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"PromptTemplate-oAFjh\",\"sourceHandle\":\"{œbaseClassesœ:[œBasePromptTemplateœ,œStringPromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-oAFjhœ}\",\"target\":\"LLMChain-NgFyo\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-NgFyo\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"BasePromptTemplate\",\"StringPromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-oAFjh\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptTemplate-oAFjh{œbaseClassesœ:[œBasePromptTemplateœ,œStringPromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-oAFjhœ}-LLMChain-NgFyo{œfieldNameœ:œpromptœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":338.6546182690814,\"y\":53.026340800283265,\"zoom\":0.7169776240079143}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:53:25.148460\",\"folder\":null,\"id\":\"a794fc48-5e9b-42a3-924f-7fe610500035\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"(D) Basic Chat (1) (4)\",\"description\":\"Simplest possible chat model\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-fBcfh\",\"type\":\"genericNode\",\"position\":{\"x\":228.87326389541306,\"y\":465.8628482073749},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k-0613\",\"gpt-3.5-turbo-16k\",\"gpt-4-0613\",\"gpt-4-32k-0613\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false,\"value\":60},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseChatModel\",\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\"},\"id\":\"ChatOpenAI-fBcfh\",\"value\":null},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":228.87326389541306,\"y\":465.8628482073749}},{\"width\":384,\"height\":310,\"id\":\"ConversationChain-bVNex\",\"type\":\"genericNode\",\"position\":{\"x\":806,\"y\":554},\"data\":{\"type\":\"ConversationChain\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"_type\":\"default\"},\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLMOutputParser\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"history\",\"input\"],\"output_parser\":null,\"partial_variables\":{},\"template\":\"The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\\n\\nCurrent conversation:\\n{history}\\nHuman: {input}\\nAI:\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"input\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"llm_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"response\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_final_only\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_final_only\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationChain\"},\"description\":\"Chain to have a conversation and load context from memory.\",\"base_classes\":[\"ConversationChain\",\"Chain\",\"LLMChain\",\"function\"],\"display_name\":\"ConversationChain\",\"documentation\":\"\"},\"id\":\"ConversationChain-bVNex\",\"value\":null},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":806,\"y\":554}}],\"edges\":[{\"source\":\"ChatOpenAI-fBcfh\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseChatModelœ,œBaseLanguageModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-fBcfhœ}\",\"target\":\"ConversationChain-bVNex\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œConversationChain-bVNexœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"className\":\"stroke-gray-900 stroke-connection\",\"id\":\"reactflow__edge-ChatOpenAI-fBcfh{œbaseClassesœ:[œBaseChatModelœ,œBaseLanguageModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-fBcfhœ}-ConversationChain-bVNex{œfieldNameœ:œllmœ,œidœ:œConversationChain-bVNexœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"BaseChatModel\",\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-fBcfh\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"ConversationChain-bVNex\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"}},\"style\":{\"stroke\":\"#555\"},\"animated\":false}],\"viewport\":{\"x\":-118.21416568593895,\"y\":-240.64815770363373,\"zoom\":0.7642485855675408}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:57:55.879806\",\"folder\":null,\"id\":\"bddebeea-b80a-4b28-8895-c4425687dcce\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Directory Loader\",\"description\":\"Generic File Loader\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"import os\\n\\nfrom langchain.schema import Document\\nfrom langflow import CustomComponent\\nimport glob\\n\\nclass DirectoryLoaderComponent(CustomComponent):\\n display_name: str = \\\"Directory Loader\\\"\\n description: str = \\\"Generic File Loader\\\"\\n beta = True\\n loaders_info = [\\n {\\n \\\"loader\\\": \\\"AirbyteJSONLoader\\\",\\n \\\"name\\\": \\\"Airbyte JSON (.jsonl)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.AirbyteJSONLoader\\\",\\n \\\"defaultFor\\\": [\\\"jsonl\\\"],\\n \\\"allowdTypes\\\": [\\\"jsonl\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"JSONLoader\\\",\\n \\\"name\\\": \\\"JSON (.json)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.JSONLoader\\\",\\n \\\"defaultFor\\\": [\\\"json\\\"],\\n \\\"allowdTypes\\\": [\\\"json\\\"],\\n \\\"kwargs\\\": {\\\"jq_schema\\\": \\\".\\\", \\\"text_content\\\": False}\\n },\\n {\\n \\\"loader\\\": \\\"BSHTMLLoader\\\",\\n \\\"name\\\": \\\"BeautifulSoup4 HTML (.html, .htm)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.BSHTMLLoader\\\",\\n \\\"allowdTypes\\\": [\\\"html\\\", \\\"htm\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"CSVLoader\\\",\\n \\\"name\\\": \\\"CSV (.csv)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.CSVLoader\\\",\\n \\\"defaultFor\\\": [\\\"csv\\\"],\\n \\\"allowdTypes\\\": [\\\"csv\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"CoNLLULoader\\\",\\n \\\"name\\\": \\\"CoNLL-U (.conllu)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.CoNLLULoader\\\",\\n \\\"defaultFor\\\": [\\\"conllu\\\"],\\n \\\"allowdTypes\\\": [\\\"conllu\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"EverNoteLoader\\\",\\n \\\"name\\\": \\\"EverNote (.enex)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.EverNoteLoader\\\",\\n \\\"defaultFor\\\": [\\\"enex\\\"],\\n \\\"allowdTypes\\\": [\\\"enex\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"FacebookChatLoader\\\",\\n \\\"name\\\": \\\"Facebook Chat (.json)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.FacebookChatLoader\\\",\\n \\\"allowdTypes\\\": [\\\"json\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"OutlookMessageLoader\\\",\\n \\\"name\\\": \\\"Outlook Message (.msg)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.OutlookMessageLoader\\\",\\n \\\"defaultFor\\\": [\\\"msg\\\"],\\n \\\"allowdTypes\\\": [\\\"msg\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"PyPDFLoader\\\",\\n \\\"name\\\": \\\"PyPDF (.pdf)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.PyPDFLoader\\\",\\n \\\"defaultFor\\\": [\\\"pdf\\\"],\\n \\\"allowdTypes\\\": [\\\"pdf\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"STRLoader\\\",\\n \\\"name\\\": \\\"Subtitle (.str)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.STRLoader\\\",\\n \\\"defaultFor\\\": [\\\"str\\\"],\\n \\\"allowdTypes\\\": [\\\"str\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"TextLoader\\\",\\n \\\"name\\\": \\\"Text (.txt)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.TextLoader\\\",\\n \\\"defaultFor\\\": [\\\"txt\\\"],\\n \\\"allowdTypes\\\": [\\\"txt\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredEmailLoader\\\",\\n \\\"name\\\": \\\"Unstructured Email (.eml)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredEmailLoader\\\",\\n \\\"defaultFor\\\": [\\\"eml\\\"],\\n \\\"allowdTypes\\\": [\\\"eml\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredHTMLLoader\\\",\\n \\\"name\\\": \\\"Unstructured HTML (.html, .htm)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredHTMLLoader\\\",\\n \\\"defaultFor\\\": [\\\"html\\\", \\\"htm\\\"],\\n \\\"allowdTypes\\\": [\\\"html\\\", \\\"htm\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredMarkdownLoader\\\",\\n \\\"name\\\": \\\"Unstructured Markdown (.md)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredMarkdownLoader\\\",\\n \\\"defaultFor\\\": [\\\"md\\\"],\\n \\\"allowdTypes\\\": [\\\"md\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredPowerPointLoader\\\",\\n \\\"name\\\": \\\"Unstructured PowerPoint (.pptx)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredPowerPointLoader\\\",\\n \\\"defaultFor\\\": [\\\"pptx\\\"],\\n \\\"allowdTypes\\\": [\\\"pptx\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredWordLoader\\\",\\n \\\"name\\\": \\\"Unstructured Word (.docx)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredWordLoader\\\",\\n \\\"defaultFor\\\": [\\\"docx\\\"],\\n \\\"allowdTypes\\\": [\\\"docx\\\"],\\n },\\n]\\n\\n\\n def build_config(self):\\n loader_options = [\\\"Automatic\\\"] + [\\n loader_info[\\\"name\\\"] for loader_info in self.loaders_info\\n ]\\n\\n file_types = []\\n suffixes = []\\n\\n for loader_info in self.loaders_info:\\n if \\\"allowedTypes\\\" in loader_info:\\n file_types.extend(loader_info[\\\"allowedTypes\\\"])\\n suffixes.extend([f\\\".{ext}\\\" for ext in loader_info[\\\"allowedTypes\\\"]])\\n\\n return {\\n \\\"directory_path\\\": {\\n \\\"display_name\\\": \\\"Directory Path\\\",\\n \\\"required\\\": True,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": loader_options,\\n \\\"value\\\": \\\"Automatic\\\",\\n },\\n }\\n\\n def build(self, directory_path: str, loader: str) -> Document:\\n # Verifique se o diretório existe\\n if not os.path.exists(directory_path):\\n raise ValueError(f\\\"Directory not found: {directory_path}\\\")\\n\\n files = glob.glob(directory_path + \\\"/*.*\\\")\\n\\n\\n loader_info = None\\n if loader == \\\"Automatic\\\":\\n for file in files:\\n file_type = file.split(\\\".\\\")[-1]\\n\\n\\n for info in self.loaders_info:\\n if \\\"defaultFor\\\" in info:\\n if file_type in info[\\\"defaultFor\\\"]:\\n loader_info = info\\n break\\n if loader_info:\\n break\\n\\n if not loader_info:\\n raise ValueError(\\n \\\"No default loader found for any file in the directory\\\"\\n )\\n\\n else:\\n for info in self.loaders_info:\\n if info[\\\"name\\\"] == loader:\\n loader_info = info\\n break\\n\\n if not loader_info:\\n raise ValueError(f\\\"Loader {loader} not found in the loader info list\\\")\\n\\n loader_import = loader_info[\\\"import\\\"]\\n module_name, class_name = loader_import.rsplit(\\\".\\\", 1)\\n\\n try:\\n # Importe o loader dinamicamente\\n loader_module = __import__(module_name, fromlist=[class_name])\\n loader_instance = getattr(loader_module, class_name)\\n except ImportError as e:\\n raise ValueError(\\n f\\\"Loader {loader} could not be imported\\\\nLoader info:\\\\n{loader_info}\\\"\\n ) from e\\n\\n results = []\\n for file in files:\\n file_path = os.path.join(directory_path, file)\\n kwargs = loader_info.get(\\\"kwargs\\\", {})\\n result = loader_instance(file_path=file_path, **kwargs).load()\\n results.append(result)\\n self.status = results\\n return results\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"directory_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"directory_path\",\"display_name\":\"Directory Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"/Users/ogabrielluiz/Projects/langflow2/docs\"},\"loader\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"Automatic\",\"password\":false,\"options\":[\"Automatic\",\"Airbyte JSON (.jsonl)\",\"JSON (.json)\",\"BeautifulSoup4 HTML (.html, .htm)\",\"CSV (.csv)\",\"CoNLL-U (.conllu)\",\"EverNote (.enex)\",\"Facebook Chat (.json)\",\"Outlook Message (.msg)\",\"PyPDF (.pdf)\",\"Subtitle (.str)\",\"Text (.txt)\",\"Unstructured Email (.eml)\",\"Unstructured HTML (.html, .htm)\",\"Unstructured Markdown (.md)\",\"Unstructured PowerPoint (.pptx)\",\"Unstructured Word (.docx)\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true}},\"description\":\"Generic File Loader\",\"base_classes\":[\"Document\"],\"display_name\":\"Directory Loader\",\"custom_fields\":{\"directory_path\":null,\"loader\":null},\"output_types\":[\"Document\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Ip6tG\"},\"id\":\"CustomComponent-Ip6tG\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-04T22:58:38.570303\",\"folder\":null,\"id\":\"5fe4debc-b6a7-45d4-a694-c02d8aa93b08\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Whisper Transcriber\",\"description\":\"Converts audio to text using OpenAI's Whisper.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Optional, List, Dict, Union\\nfrom langflow.field_typing import (\\n AgentExecutor,\\n BaseChatMemory,\\n BaseLanguageModel,\\n BaseLLM,\\n BaseLoader,\\n BaseMemory,\\n BaseOutputParser,\\n BasePromptTemplate,\\n BaseRetriever,\\n Callable,\\n Chain,\\n ChatPromptTemplate,\\n Data,\\n Document,\\n Embeddings,\\n NestedDict,\\n Object,\\n PromptTemplate,\\n TextSplitter,\\n Tool,\\n VectorStore,\\n)\\n\\nfrom openai import OpenAI\\nclass Component(CustomComponent):\\n display_name: str = \\\"Whisper Transcriber\\\"\\n description: str = \\\"Converts audio to text using OpenAI's Whisper.\\\"\\n\\n def build_config(self):\\n return {\\\"audio\\\":{\\\"field_type\\\":\\\"file\\\",\\\"suffixes\\\":[\\\".mp3\\\", \\\".mp4\\\", \\\".m4a\\\"]},\\\"OpenAIKey\\\":{\\\"field_type\\\":\\\"str\\\",\\\"password\\\":True}}\\n\\n def build(self, audio:str, OpenAIKey:str) -> str:\\n \\n # TODO: if output path, persist & load it instead\\n \\n client = OpenAI(api_key=OpenAIKey)\\n \\n audio_file= open(audio, \\\"rb\\\")\\n transcript = client.audio.transcriptions.create(\\n model=\\\"whisper-1\\\", \\n file=audio_file,\\n response_format=\\\"text\\\"\\n )\\n \\n \\n self.status = transcript\\n return transcript\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"OpenAIKey\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"OpenAIKey\",\"display_name\":\"OpenAIKey\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"audio\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"suffixes\":[\".mp3\",\".mp4\",\".m4a\"],\"password\":false,\"name\":\"audio\",\"display_name\":\"audio\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"file_path\":\"/Users/rodrigonader/Library/Caches/langflow/19b3e1c9-90bf-405f-898a-e982f47adf76/a3308ce7e9b10088fcd985aabb6d17b012c6b6e81ff8806356574474c9d10229.m4a\",\"value\":\"Audio Recording 2023-11-29 at 12.12.04.m4a\"}},\"description\":\"Converts audio to text using OpenAI's Whisper.\",\"base_classes\":[\"str\"],\"display_name\":\"Whisper Transcriber\",\"custom_fields\":{\"OpenAIKey\":null,\"audio\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-GJRrs\"},\"id\":\"CustomComponent-GJRrs\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-04T22:58:39.710502\",\"folder\":null,\"id\":\"bd9e911d-46bd-429f-aa75-dd740430695e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Youtube Conversation\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":589,\"id\":\"CustomComponent-h0NSI\",\"type\":\"genericNode\",\"position\":{\"x\":714.9531293402755,\"y\":0.4994374160582993},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"import requests\\nfrom langflow import CustomComponent\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.schema import Document\\nfrom langchain.document_loaders import YoutubeLoader\\n\\n# Example usage:\\n\\nclass YourComponent(CustomComponent):\\n display_name: str = \\\"YouTube Transcript\\\"\\n description: str = \\\"YouTube transcripts refer to the written text versions of the spoken content in a video uploaded to the YouTube platform.\\\"\\n\\n def build_config(self):\\n return {\\\"url\\\": {\\\"multiline\\\": True, \\\"required\\\": True}}\\n\\n def build(self, url: str, llm: BaseLLM, dependencies: Document, language: str = \\\"en\\\") -> Document:\\n dependencies\\n response = requests.get(url)\\n loader = YoutubeLoader.from_youtube_url(url, add_video_info=True, language=[language])\\n result = loader.load()\\n self.repr_value = str(result)\\n return result\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"dependencies\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"dependencies\",\"display_name\":\"dependencies\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"language\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"en\",\"password\":false,\"name\":\"language\",\"display_name\":\"language\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"YouTube transcripts refer to the written text versions of the spoken content in a video uploaded to the YouTube platform.\",\"base_classes\":[\"Document\"],\"display_name\":\"YouTube Transcript\",\"custom_fields\":{\"dependencies\":null,\"language\":null,\"llm\":null,\"url\":null},\"output_types\":[\"Document\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-h0NSI\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":714.9531293402755,\"y\":0.4994374160582993}},{\"width\":384,\"height\":629,\"id\":\"ChatOpenAI-q61Y2\",\"type\":\"genericNode\",\"position\":{\"x\":18,\"y\":625.5521045590924},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo-16k\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k-0613\",\"gpt-3.5-turbo-16k\",\"gpt-4-0613\",\"gpt-4-32k-0613\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-q61Y2\"},\"selected\":false,\"positionAbsolute\":{\"x\":18,\"y\":625.5521045590924},\"dragging\":false},{\"width\":384,\"height\":539,\"id\":\"Chroma-gVhy7\",\"type\":\"genericNode\",\"position\":{\"x\":2110.365967257855,\"y\":805.0149521868784},\"data\":{\"type\":\"Chroma\",\"node\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.Client\",\"list\":false},\"client_settings\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client_settings\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.config.Setting\",\"list\":true},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"chroma_server_cors_allow_origins\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_cors_allow_origins\",\"display_name\":\"Chroma Server CORS Allow Origins\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"chroma_server_grpc_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_grpc_port\",\"display_name\":\"Chroma Server GRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_host\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_host\",\"display_name\":\"Chroma Server Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_http_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_http_port\",\"display_name\":\"Chroma Server HTTP Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_ssl_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"chroma_server_ssl_enabled\",\"display_name\":\"Chroma Server SSL Enabled\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"collection_metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"collection_metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"collection_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"persist\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"persist\",\"display_name\":\"Persist\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"persist_directory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"persist_directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"_type\":\"Chroma\"},\"description\":\"Create a Chroma vectorstore from a raw documents.\",\"base_classes\":[\"VectorStore\",\"Chroma\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Chroma\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma\",\"beta\":false,\"error\":null},\"id\":\"Chroma-gVhy7\"},\"selected\":false,\"positionAbsolute\":{\"x\":2110.365967257855,\"y\":805.0149521868784},\"dragging\":false},{\"width\":384,\"height\":501,\"id\":\"RecursiveCharacterTextSplitter-1eaOX\",\"type\":\"genericNode\",\"position\":{\"x\":1409.2872773444874,\"y\":19.45456141103284},\"data\":{\"type\":\"RecursiveCharacterTextSplitter\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.utils.util import build_loader_repr_from_documents\\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 \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\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 documents: list[Document],\\n separators: Optional[list[str]] = None,\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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 = [x.encode().decode(\\\"unicode-escape\\\") 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\\n docs = splitter.split_documents(documents)\\n self.repr_value = build_loader_repr_from_documents(docs)\\n return docs\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"chunk_overlap\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"50\",\"password\":false,\"name\":\"chunk_overlap\",\"display_name\":\"Chunk Overlap\",\"advanced\":false,\"dynamic\":false,\"info\":\"The amount of overlap between chunks.\",\"type\":\"int\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"400\",\"password\":false,\"name\":\"chunk_size\",\"display_name\":\"Chunk Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum length of each chunk.\",\"type\":\"int\",\"list\":false},\"documents\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\",\"type\":\"Document\",\"list\":true},\"separators\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"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\\\", \\\" \\\", \\\"\\\"].\",\"type\":\"str\",\"list\":true,\"value\":[\" \"]}},\"description\":\"Split text into chunks of a specified length.\",\"base_classes\":[\"Document\"],\"display_name\":\"Recursive Character Text Splitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separators\":null},\"output_types\":[\"RecursiveCharacterTextSplitter\"],\"documentation\":\"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\",\"beta\":true,\"error\":null},\"id\":\"RecursiveCharacterTextSplitter-1eaOX\"},\"selected\":false,\"positionAbsolute\":{\"x\":1409.2872773444874,\"y\":19.45456141103284},\"dragging\":false},{\"width\":384,\"height\":367,\"id\":\"OpenAIEmbeddings-cduOO\",\"type\":\"genericNode\",\"position\":{\"x\":1405.1176670984544,\"y\":1029.459061269321},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{'Authorization': 'Bearer '}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"Embeddings\",\"OpenAIEmbeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-cduOO\"},\"selected\":false,\"positionAbsolute\":{\"x\":1405.1176670984544,\"y\":1029.459061269321}},{\"width\":384,\"height\":339,\"id\":\"RetrievalQA-4PmTB\",\"type\":\"genericNode\",\"position\":{\"x\":2711.7786966415715,\"y\":709.4450828605463},\"data\":{\"type\":\"RetrievalQA\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"combine_documents_chain\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseCombineDocumentsChain\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"query\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"result\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_source_documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"RetrievalQA\"},\"description\":\"Chain for question-answering against an index.\",\"base_classes\":[\"RetrievalQA\",\"Chain\",\"BaseRetrievalQA\",\"function\"],\"display_name\":\"RetrievalQA\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa\",\"beta\":false,\"error\":null},\"id\":\"RetrievalQA-4PmTB\"},\"selected\":false,\"positionAbsolute\":{\"x\":2711.7786966415715,\"y\":709.4450828605463}},{\"width\":384,\"height\":333,\"id\":\"CombineDocsChain-yk0JF\",\"type\":\"genericNode\",\"position\":{\"x\":2125.6202053356537,\"y\":199.07708924409633},\"data\":{\"type\":\"CombineDocsChain\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"chain_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"_type\":\"load_qa_chain\"},\"description\":\"Load question answering chain.\",\"base_classes\":[\"BaseCombineDocumentsChain\",\"function\"],\"display_name\":\"CombineDocsChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"id\":\"CombineDocsChain-yk0JF\"},\"selected\":false,\"positionAbsolute\":{\"x\":2125.6202053356537,\"y\":199.07708924409633},\"dragging\":false},{\"width\":384,\"height\":417,\"id\":\"CustomComponent-y6Wg0\",\"type\":\"genericNode\",\"position\":{\"x\":39.400034102832365,\"y\":-499.03551482195707},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nimport subprocess\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\nfrom typing import List\\n\\n\\nclass YourComponent(CustomComponent):\\n display_name: str = \\\"PIP Install\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n\\n def build(self, libs: List[str]) -> Document:\\n def install_package(package_name):\\n subprocess.check_call([\\\"pip\\\", \\\"install\\\", package_name])\\n for lib in libs:\\n install_package(lib)\\n return \\\"\\\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"libs\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"libs\",\"display_name\":\"libs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"requests\",\"pytube\"]}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"Document\"],\"display_name\":\"PIP Install\",\"custom_fields\":{\"libs\":null},\"output_types\":[],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-y6Wg0\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":39.400034102832365,\"y\":-499.03551482195707}}],\"edges\":[{\"source\":\"ChatOpenAI-q61Y2\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}\",\"target\":\"CustomComponent-h0NSI\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œBaseLLMœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-q61Y2{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}-CustomComponent-h0NSI{œfieldNameœ:œllmœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œBaseLLMœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-q61Y2\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"CustomComponent-h0NSI\",\"inputTypes\":null,\"type\":\"BaseLLM\"}}},{\"source\":\"CustomComponent-y6Wg0\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-y6Wg0œ}\",\"target\":\"CustomComponent-h0NSI\",\"targetHandle\":\"{œfieldNameœ:œdependenciesœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-y6Wg0{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-y6Wg0œ}-CustomComponent-h0NSI{œfieldNameœ:œdependenciesœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-y6Wg0\"},\"targetHandle\":{\"fieldName\":\"dependencies\",\"id\":\"CustomComponent-h0NSI\",\"inputTypes\":null,\"type\":\"Document\"}}},{\"source\":\"CustomComponent-h0NSI\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-h0NSIœ}\",\"target\":\"RecursiveCharacterTextSplitter-1eaOX\",\"targetHandle\":\"{œfieldNameœ:œdocumentsœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-h0NSI{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-h0NSIœ}-RecursiveCharacterTextSplitter-1eaOX{œfieldNameœ:œdocumentsœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-h0NSI\"},\"targetHandle\":{\"fieldName\":\"documents\",\"id\":\"RecursiveCharacterTextSplitter-1eaOX\",\"inputTypes\":null,\"type\":\"Document\"}},\"selected\":false},{\"source\":\"OpenAIEmbeddings-cduOO\",\"sourceHandle\":\"{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-cduOOœ}\",\"target\":\"Chroma-gVhy7\",\"targetHandle\":\"{œfieldNameœ:œembeddingœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-OpenAIEmbeddings-cduOO{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-cduOOœ}-Chroma-gVhy7{œfieldNameœ:œembeddingœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Embeddings\",\"OpenAIEmbeddings\"],\"dataType\":\"OpenAIEmbeddings\",\"id\":\"OpenAIEmbeddings-cduOO\"},\"targetHandle\":{\"fieldName\":\"embedding\",\"id\":\"Chroma-gVhy7\",\"inputTypes\":null,\"type\":\"Embeddings\"}}},{\"source\":\"RecursiveCharacterTextSplitter-1eaOX\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ}\",\"target\":\"Chroma-gVhy7\",\"targetHandle\":\"{œfieldNameœ:œdocumentsœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-RecursiveCharacterTextSplitter-1eaOX{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ}-Chroma-gVhy7{œfieldNameœ:œdocumentsœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"RecursiveCharacterTextSplitter\",\"id\":\"RecursiveCharacterTextSplitter-1eaOX\"},\"targetHandle\":{\"fieldName\":\"documents\",\"id\":\"Chroma-gVhy7\",\"inputTypes\":null,\"type\":\"Document\"}}},{\"source\":\"ChatOpenAI-q61Y2\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}\",\"target\":\"CombineDocsChain-yk0JF\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-yk0JFœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-q61Y2{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}-CombineDocsChain-yk0JF{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-yk0JFœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-q61Y2\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"CombineDocsChain-yk0JF\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"}}},{\"source\":\"CombineDocsChain-yk0JF\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œfunctionœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-yk0JFœ}\",\"target\":\"RetrievalQA-4PmTB\",\"targetHandle\":\"{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CombineDocsChain-yk0JF{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œfunctionœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-yk0JFœ}-RetrievalQA-4PmTB{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"BaseCombineDocumentsChain\",\"function\"],\"dataType\":\"CombineDocsChain\",\"id\":\"CombineDocsChain-yk0JF\"},\"targetHandle\":{\"fieldName\":\"combine_documents_chain\",\"id\":\"RetrievalQA-4PmTB\",\"inputTypes\":null,\"type\":\"BaseCombineDocumentsChain\"}}},{\"source\":\"Chroma-gVhy7\",\"sourceHandle\":\"{œbaseClassesœ:[œVectorStoreœ,œChromaœ,œBaseRetrieverœ,œVectorStoreRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-gVhy7œ}\",\"target\":\"RetrievalQA-4PmTB\",\"targetHandle\":\"{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-Chroma-gVhy7{œbaseClassesœ:[œVectorStoreœ,œChromaœ,œBaseRetrieverœ,œVectorStoreRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-gVhy7œ}-RetrievalQA-4PmTB{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"VectorStore\",\"Chroma\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"dataType\":\"Chroma\",\"id\":\"Chroma-gVhy7\"},\"targetHandle\":{\"fieldName\":\"retriever\",\"id\":\"RetrievalQA-4PmTB\",\"inputTypes\":null,\"type\":\"BaseRetriever\"}}}],\"viewport\":{\"x\":189.54413265004274,\"y\":259.89949657174975,\"zoom\":0.291027508374689}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:59:08.830269\",\"folder\":null,\"id\":\"bc7eb94b-6fc6-49cb-9b19-35347ba51afa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Web Scraper - Content & Links\",\"description\":\"Fetch and parse text and links from a given URL.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-H7PBy\",\"type\":\"genericNode\",\"position\":{\"x\":1682.494010974207,\"y\":275.5701585623092},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-H7PBy\"},\"selected\":false,\"positionAbsolute\":{\"x\":1682.494010974207,\"y\":275.5701585623092},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-VSAdc\",\"type\":\"genericNode\",\"position\":{\"x\":1002.4263147022411,\"y\":-198.2305006886859},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-VSAdc\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":1002.4263147022411,\"y\":-198.2305006886859}},{\"width\":384,\"height\":374,\"data\":{\"id\":\"GroupNode-WXPMk\",\"type\":\"PromptTemplate\",\"node\":{\"output_types\":[],\"display_name\":\"Web Scraper\",\"documentation\":\"\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"description\":\"Fetch and parse text and links from a given URL.\",\"template\":{\"code_CustomComponent-f6nOg\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"code\"},\"display_name\":\"Code\"},\"ignore_links_CustomComponent-f6nOg\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"ignore_links\"}},\"code_CustomComponent-FGzJJ\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-FGzJJ\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-0XtUN\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-0XtUN\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-ODIcp\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-ODIcp\",\"field\":\"code\"},\"display_name\":\"Code\"},\"output_parser_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"output_parser\"},\"display_name\":\"Output Parser\"},\"input_types_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_types\"},\"display_name\":\"Input Types\"},\"input_variables_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_variables\"},\"display_name\":\"Input Variables\"},\"partial_variables_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"partial_variables\"},\"display_name\":\"Partial Variables\"},\"template_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template\"},\"display_name\":\"Template\"},\"template_format_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template_format\"},\"display_name\":\"Template Format\"},\"validate_template_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"validate_template\"},\"display_name\":\"Validate Template\"},\"query_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"give me links\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"query\"}},\"code_CustomComponent-OACE0\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"code\"},\"display_name\":\"Code\"},\"url_CustomComponent-OACE0\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"url\"},\"value\":\"https://paperswithcode.com/\"},\"code_CustomComponent-whsQ5\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-whsQ5\",\"field\":\"code\"},\"display_name\":\"Code\"}},\"flow\":{\"data\":{\"nodes\":[{\"width\":384,\"height\":405,\"id\":\"CustomComponent-f6nOg\",\"type\":\"genericNode\",\"position\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-f6nOg\"},\"selected\":true,\"positionAbsolute\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"dragging\":false},{\"width\":384,\"height\":375,\"id\":\"CustomComponent-FGzJJ\",\"type\":\"genericNode\",\"position\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-FGzJJ\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-0XtUN\",\"type\":\"genericNode\",\"position\":{\"x\":214.00059169497604,\"y\":177.27071061129823},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-0XtUN\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":214.00059169497604,\"y\":177.27071061129823}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-ODIcp\",\"type\":\"genericNode\",\"position\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ODIcp\"},\"selected\":true,\"positionAbsolute\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"dragging\":false},{\"width\":384,\"height\":657,\"id\":\"PromptTemplate-H9Udy\",\"type\":\"genericNode\",\"position\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-H9Udy\"},\"selected\":true,\"positionAbsolute\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"dragging\":false},{\"width\":384,\"height\":347,\"id\":\"CustomComponent-OACE0\",\"type\":\"genericNode\",\"position\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-OACE0\"},\"selected\":true,\"positionAbsolute\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"dragging\":false},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-whsQ5\",\"type\":\"genericNode\",\"position\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-whsQ5\"},\"selected\":true,\"positionAbsolute\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"dragging\":false}],\"edges\":[{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-f6nOg\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-f6nOg\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-f6nOg{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-0XtUN\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-0XtUN\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-0XtUN{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-0XtUN\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}\",\"target\":\"CustomComponent-ODIcp\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-ODIcp\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-0XtUN\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-0XtUN{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}-CustomComponent-ODIcp{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"CustomComponent-FGzJJ\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-FGzJJ\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-CustomComponent-FGzJJ{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-PromptTemplate-H9Udy{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-ODIcp\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}\",\"target\":\"CustomComponent-whsQ5\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-whsQ5\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ODIcp\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ODIcp{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}-CustomComponent-whsQ5{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":true},{\"source\":\"CustomComponent-whsQ5\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-whsQ5\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-whsQ5{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-f6nOg\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-f6nOg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-f6nOg{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true}],\"viewport\":{\"x\":343.0346131188585,\"y\":341.89843948642147,\"zoom\":0.24148408223121196}},\"is_component\":false,\"name\":\"Fluffy Ptolemy\",\"description\":\"\",\"id\":\"W5oNW\"}}},\"id\":\"GroupNode-WXPMk\",\"position\":{\"x\":873.0737834322758,\"y\":598.8401015776466},\"type\":\"genericNode\",\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":873.0737834322758,\"y\":598.8401015776466}}],\"edges\":[{\"source\":\"ChatOpenAI-VSAdc\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VSAdcœ}\",\"target\":\"LLMChain-H7PBy\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-H7PBy\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-VSAdc\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-VSAdc{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VSAdcœ}-LLMChain-H7PBy{œfieldNameœ:œllmœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"GroupNode-WXPMk\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œGroupNode-WXPMkœ}\",\"target\":\"LLMChain-H7PBy\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-H7PBy\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"GroupNode-WXPMk\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-GroupNode-WXPMk{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œGroupNode-WXPMkœ}-LLMChain-H7PBy{œfieldNameœ:œpromptœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":-348.6161822813733,\"y\":121.40545291211492,\"zoom\":0.6801854262029781}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:22:27.784647\",\"folder\":null,\"id\":\"efc3bf27-3cf1-4561-9a83-3df347572440\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sad Joliot\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-RQsU1\",\"type\":\"genericNode\",\"position\":{\"x\":514.4440482813261,\"y\":528.164086188516},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-RQsU1\"},\"selected\":false,\"positionAbsolute\":{\"x\":514.4440482813261,\"y\":528.164086188516}},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-NTTcv\",\"type\":\"genericNode\",\"position\":{\"x\":-221.33853765781578,\"y\":-35.48749923706055},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-NTTcv\"},\"selected\":false,\"positionAbsolute\":{\"x\":-221.33853765781578,\"y\":-35.48749923706055}},{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-VELMV\",\"type\":\"genericNode\",\"position\":{\"x\":-222,\"y\":682.560723386973},\"data\":{\"id\":\"PromptTemplate-VELMV\",\"type\":\"PromptTemplate\",\"node\":{\"output_types\":[],\"display_name\":\"Web Scraper\",\"documentation\":\"\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"description\":\"Fetch and parse text and links from a given URL.\",\"template\":{\"code_CustomComponent-f6nOg\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"code\"},\"display_name\":\"Code\"},\"ignore_links_CustomComponent-f6nOg\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"ignore_links\"}},\"code_CustomComponent-FGzJJ\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-FGzJJ\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-0XtUN\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-0XtUN\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-ODIcp\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-ODIcp\",\"field\":\"code\"},\"display_name\":\"Code\"},\"output_parser_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"output_parser\"},\"display_name\":\"Output Parser\"},\"input_types_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_types\"},\"display_name\":\"Input Types\"},\"input_variables_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_variables\"},\"display_name\":\"Input Variables\"},\"partial_variables_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"partial_variables\"},\"display_name\":\"Partial Variables\"},\"template_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template\"},\"display_name\":\"Template\"},\"template_format_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template_format\"},\"display_name\":\"Template Format\"},\"validate_template_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"validate_template\"},\"display_name\":\"Validate Template\"},\"query_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"query\"}},\"code_CustomComponent-OACE0\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"code\"},\"display_name\":\"Code\"},\"url_CustomComponent-OACE0\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"url\"},\"value\":\"https://paperswithcode.com/\"},\"code_CustomComponent-whsQ5\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-whsQ5\",\"field\":\"code\"},\"display_name\":\"Code\"}},\"flow\":{\"data\":{\"nodes\":[{\"width\":384,\"height\":405,\"id\":\"CustomComponent-f6nOg\",\"type\":\"genericNode\",\"position\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-f6nOg\"},\"selected\":true,\"positionAbsolute\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"dragging\":false},{\"width\":384,\"height\":375,\"id\":\"CustomComponent-FGzJJ\",\"type\":\"genericNode\",\"position\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-FGzJJ\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-0XtUN\",\"type\":\"genericNode\",\"position\":{\"x\":214.00059169497604,\"y\":177.27071061129823},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-0XtUN\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":214.00059169497604,\"y\":177.27071061129823}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-ODIcp\",\"type\":\"genericNode\",\"position\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ODIcp\"},\"selected\":true,\"positionAbsolute\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"dragging\":false},{\"width\":384,\"height\":657,\"id\":\"PromptTemplate-H9Udy\",\"type\":\"genericNode\",\"position\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-H9Udy\"},\"selected\":true,\"positionAbsolute\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"dragging\":false},{\"width\":384,\"height\":347,\"id\":\"CustomComponent-OACE0\",\"type\":\"genericNode\",\"position\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-OACE0\"},\"selected\":true,\"positionAbsolute\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"dragging\":false},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-whsQ5\",\"type\":\"genericNode\",\"position\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-whsQ5\"},\"selected\":true,\"positionAbsolute\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"dragging\":false}],\"edges\":[{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-f6nOg\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-f6nOg\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-f6nOg{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-0XtUN\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-0XtUN\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-0XtUN{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-0XtUN\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}\",\"target\":\"CustomComponent-ODIcp\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-ODIcp\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-0XtUN\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-0XtUN{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}-CustomComponent-ODIcp{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"CustomComponent-FGzJJ\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-FGzJJ\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-CustomComponent-FGzJJ{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-PromptTemplate-H9Udy{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-ODIcp\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}\",\"target\":\"CustomComponent-whsQ5\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-whsQ5\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ODIcp\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ODIcp{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}-CustomComponent-whsQ5{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":true},{\"source\":\"CustomComponent-whsQ5\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-whsQ5\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-whsQ5{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-f6nOg\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-f6nOg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-f6nOg{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true}],\"viewport\":{\"x\":343.0346131188585,\"y\":341.89843948642147,\"zoom\":0.24148408223121196}},\"is_component\":false,\"name\":\"Fluffy Ptolemy\",\"description\":\"\",\"id\":\"W5oNW\"}}},\"selected\":false,\"positionAbsolute\":{\"x\":-222,\"y\":682.560723386973}}],\"edges\":[{\"source\":\"ChatOpenAI-NTTcv\",\"target\":\"LLMChain-RQsU1\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-NTTcvœ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-NTTcv{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-NTTcvœ}-LLMChain-RQsU1{œfieldNameœ:œllmœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-RQsU1\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-NTTcv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 \",\"animated\":false,\"selected\":false},{\"source\":\"PromptTemplate-VELMV\",\"target\":\"LLMChain-RQsU1\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-VELMVœ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"id\":\"reactflow__edge-PromptTemplate-VELMV{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-VELMVœ}-LLMChain-RQsU1{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-RQsU1\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-VELMV\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 \",\"animated\":false,\"selected\":false}],\"viewport\":{\"x\":298.29888454238517,\"y\":96.95765543775741,\"zoom\":0.5140569133280332}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:23:08.584967\",\"folder\":null,\"id\":\"5df79f1d-f592-4d59-8c0f-9f3c2f6465b1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Pasteur\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-cHel8\",\"type\":\"genericNode\",\"position\":{\"x\":547.3876889720291,\"y\":299.2057833881307},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-cHel8\"},\"selected\":false,\"positionAbsolute\":{\"x\":547.3876889720291,\"y\":299.2057833881307},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-LA6y0\",\"type\":\"genericNode\",\"position\":{\"x\":-272.94405331278074,\"y\":-603.148171441675},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-LA6y0\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-272.94405331278074,\"y\":-603.148171441675}},{\"width\":384,\"height\":404,\"id\":\"CustomComponent-ZNoRM\",\"type\":\"genericNode\",\"position\":{\"x\":-103.65741264289085,\"y\":134.62332404764658},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ZNoRM\"},\"selected\":false,\"positionAbsolute\":{\"x\":-103.65741264289085,\"y\":134.62332404764658},\"dragging\":false},{\"width\":384,\"height\":374,\"id\":\"CustomComponent-zNSTv\",\"type\":\"genericNode\",\"position\":{\"x\":-1233.3963469933499,\"y\":280.77850809220325},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-zNSTv\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-1233.3963469933499,\"y\":280.77850809220325}},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-Ihm2o\",\"type\":\"genericNode\",\"position\":{\"x\":-554.9404152016002,\"y\":683.6763775860567},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-Ihm2o\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-554.9404152016002,\"y\":683.6763775860567}},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-6ST9l\",\"type\":\"genericNode\",\"position\":{\"x\":76.10921262566495,\"y\":872.9491114949525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-6ST9l\"},\"selected\":false,\"positionAbsolute\":{\"x\":76.10921262566495,\"y\":872.9491114949525},\"dragging\":false},{\"width\":384,\"height\":654,\"id\":\"PromptTemplate-l35W1\",\"type\":\"genericNode\",\"position\":{\"x\":1461.4487148097069,\"y\":1090.896175351284},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"display_name\":\"output_parser\"},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"display_name\":\"input_types\"},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"display_name\":\"input_variables\"},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"display_name\":\"partial_variables\"},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"display_name\":\"template\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"display_name\":\"template_format\"},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"display_name\":\"validate_template\"},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-l35W1\"},\"selected\":false,\"positionAbsolute\":{\"x\":1461.4487148097069,\"y\":1090.896175351284},\"dragging\":false},{\"width\":384,\"height\":346,\"id\":\"CustomComponent-iTLf4\",\"type\":\"genericNode\",\"position\":{\"x\":-1924.8908014123388,\"y\":704.5414990162741},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"https://paperswithcode.com/\"}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-iTLf4\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1924.8908014123388,\"y\":704.5414990162741},\"dragging\":false},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-jWLUz\",\"type\":\"genericNode\",\"position\":{\"x\":627.6164007410564,\"y\":1201.2365384322047},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-jWLUz\"},\"selected\":false,\"positionAbsolute\":{\"x\":627.6164007410564,\"y\":1201.2365384322047},\"dragging\":false}],\"edges\":[{\"source\":\"ChatOpenAI-LA6y0\",\"target\":\"LLMChain-cHel8\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-LA6y0œ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-LA6y0{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-LA6y0œ}-LLMChain-cHel8{œfieldNameœ:œllmœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-cHel8\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-LA6y0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"CustomComponent-zNSTv\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}\",\"target\":\"CustomComponent-ZNoRM\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-ZNoRMœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-ZNoRM\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-zNSTv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-zNSTv{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}-CustomComponent-ZNoRM{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-ZNoRMœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-zNSTv\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}\",\"target\":\"CustomComponent-Ihm2o\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-Ihm2oœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-Ihm2o\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-zNSTv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-zNSTv{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}-CustomComponent-Ihm2o{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-Ihm2oœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-Ihm2o\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-Ihm2oœ}\",\"target\":\"CustomComponent-6ST9l\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-6ST9lœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-6ST9l\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-Ihm2o\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-Ihm2o{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-Ihm2oœ}-CustomComponent-6ST9l{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-6ST9lœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-iTLf4\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}\",\"target\":\"CustomComponent-zNSTv\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-zNSTvœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-zNSTv\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-iTLf4\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-iTLf4{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}-CustomComponent-zNSTv{œfieldNameœ:œurlœ,œidœ:œCustomComponent-zNSTvœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-iTLf4\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-iTLf4\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-iTLf4{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}-PromptTemplate-l35W1{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-6ST9l\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-6ST9lœ}\",\"target\":\"CustomComponent-jWLUz\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-jWLUzœ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-jWLUz\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-6ST9l\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-6ST9l{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-6ST9lœ}-CustomComponent-jWLUz{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-jWLUzœ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":false},{\"source\":\"CustomComponent-jWLUz\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-jWLUzœ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-jWLUz\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-jWLUz{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-jWLUzœ}-PromptTemplate-l35W1{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-ZNoRM\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ZNoRMœ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ZNoRM\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ZNoRM{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ZNoRMœ}-PromptTemplate-l35W1{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"PromptTemplate-l35W1\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-l35W1œ}\",\"target\":\"LLMChain-cHel8\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-cHel8\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-l35W1\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptTemplate-mJqEg{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-mJqEgœ}-LLMChain-cHel8{œfieldNameœ:œpromptœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":206.6159172940935,\"y\":79.94375811155385,\"zoom\":0.5140569133280333}},\"is_component\":false,\"updated_at\":\"2023-12-06T00:23:04.515144\",\"folder\":null,\"id\":\"ecfb377a-7e88-405d-8d66-7560735ce446\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Lovelace\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:43:25.925753\",\"folder\":null,\"id\":\"30e71767-6128-40e4-9a6d-b9197b679971\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Custom Component\",\"description\":\"Create any custom component you want!\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Custom Component\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Data) -> Data:\\n return param\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"param\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"Data\"],\"display_name\":\"Custom Component\",\"custom_fields\":{\"param\":null},\"output_types\":[\"CustomComponent\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-IxJqc\"},\"id\":\"CustomComponent-IxJqc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-05T22:08:27.080204\",\"folder\":null,\"id\":\"f3c56abb-96d8-4a09-80d3-f60181661b3c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazing Wilson\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-05T23:49:58.272677\",\"folder\":null,\"id\":\"324499a6-17a6-49de-96b1-b88955ed2c3d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nauseous Kowalevski\",\"description\":\"Create, Curate, Communicate with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:27.084387\",\"folder\":null,\"id\":\"e3168485-d31b-472a-907f-faf833bf7824\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Fermi\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.134463\",\"folder\":null,\"id\":\"d0ecea5d-bcf9-4b8e-88f0-3c243d309336\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Friendly Ardinghelli\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.138184\",\"folder\":null,\"id\":\"a406912d-b0e2-4954-bef3-ee80c29eca3c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Easley\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.162908\",\"folder\":null,\"id\":\"57b32155-4c6e-4823-ad03-8dd09d8abc62\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Varahamihira\",\"description\":\"Create, Chain, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.135644\",\"folder\":null,\"id\":\"18daa0ff-2e5d-457a-95d7-710affec5c4d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Joliot\",\"description\":\"Language Architect at Work!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.139496\",\"folder\":null,\"id\":\"9255e938-280e-4ce7-91cd-8622126a7d02\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Carroll\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.162240\",\"folder\":null,\"id\":\"a7a680b9-30b1-4438-ac24-da597de443aa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Herschel\",\"description\":\"Your Hub for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:46:02.593504\",\"folder\":null,\"id\":\"37a439b0-7b1d-45e3-b4fa-5c73669bae3b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Joliot\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:04.845238\",\"folder\":null,\"id\":\"4d23fd0a-8ad5-46b9-bb99-eed4138e7426\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Happy Babbage\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:41.899665\",\"folder\":null,\"id\":\"1c8ad5b9-5524-41fe-a762-52c75126b832\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Brown\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.702031\",\"folder\":null,\"id\":\"9d4c8e79-4904-4a51-a4bb-146c3d8db10e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Mahavira\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.786331\",\"folder\":null,\"id\":\"4ba370d1-1f8e-4a23-99aa-99e2cd9b7cbf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mad Gates\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.838989\",\"folder\":null,\"id\":\"992c3cd3-1d79-4986-8c04-88a34130fa30\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Mcclintock\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.932723\",\"folder\":null,\"id\":\"a65bfd13-44df-4090-aca0-5057e21e9997\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Feynman\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.931359\",\"folder\":null,\"id\":\"7a05dac5-c005-411d-9994-19d61e71ce78\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Perlman\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:43.054687\",\"folder\":null,\"id\":\"6db24541-7211-48e6-a792-1a4a99a0ef90\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jolly Colden\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:43.078384\",\"folder\":null,\"id\":\"13ac42e8-9124-4bf4-9ea2-28671ef2d9a4\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Kaku\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:50:33.156776\",\"folder\":null,\"id\":\"79262d75-5c62-4b14-b067-f4297f5c912f\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jovial Khayyam\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:13.295375\",\"folder\":null,\"id\":\"3b397e74-d8be-4728-9d6c-05f7c78106a7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Mccarthy\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:27.632685\",\"folder\":null,\"id\":\"13f4e1fd-45eb-4271-92fd-0d70a31c61d2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Lalande\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:54.628983\",\"folder\":null,\"id\":\"9cfd60d8-9311-47b0-b71b-f488f1940bc7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Romantic Mirzakhani\",\"description\":\"Innovation in Interaction with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:52:52.622698\",\"folder\":null,\"id\":\"0d849403-0f75-455d-b4e4-0d622ee3305a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Brown\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:06.056636\",\"folder\":null,\"id\":\"8643ba14-52d6-4d36-9981-5fd37de5dd76\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Kickass Watt\",\"description\":\"Transform Your Business with Smart Dialogues.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:23.338727\",\"folder\":null,\"id\":\"818d3066-bf08-4bf9-adcd-739f8abbfa5d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bose\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:41.218861\",\"folder\":null,\"id\":\"28eff43e-0ecf-47bf-9851-f1492589978e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Optimistic Jennings\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:55:03.681106\",\"folder\":null,\"id\":\"68f59069-bc2a-464f-a983-4b61e32e01af\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pedantic Mirzakhani\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:55:31.761949\",\"folder\":null,\"id\":\"5d981c0e-81b3-44cc-a5be-8f55b92bfed5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Murdock\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:56:45.548598\",\"folder\":null,\"id\":\"e812ad47-47e8-422b-b94c-84fd0263c9c8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Fermat\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:58:50.234270\",\"folder\":null,\"id\":\"82aaf449-e737-4699-9360-929ab6108dc7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Albattani\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:59:53.946035\",\"folder\":null,\"id\":\"097cb080-274b-40ca-8dde-7900a949568a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Kirch\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:00:51.745350\",\"folder\":null,\"id\":\"837d7b5f-8495-46a9-b00e-ad1b7ebb52f4\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Kowalevski\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:02:53.336102\",\"folder\":null,\"id\":\"3ff079c2-d9f9-4da6-a22a-423fa35670ff\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Stallman\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:03:28.268357\",\"folder\":null,\"id\":\"c8b204dd-3d57-4bc8-aa13-1d559672e75b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Swirles\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:03:51.194455\",\"folder\":null,\"id\":\"a097f083-5880-4cf7-986b-51898bc68e11\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dreamy Williams\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:04:36.678251\",\"folder\":null,\"id\":\"d9585f63-ce76-42ce-87bc-8e69601ea5c6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zany Hawking\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:05:13.672479\",\"folder\":null,\"id\":\"612a01d5-8c8d-4cc1-8c54-35626b7f4a6d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazing Kilby\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:10:37.047955\",\"folder\":null,\"id\":\"2d05a598-3cdf-452a-bd5d-b0e569e562e3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Insane Cori\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:18:12.426578\",\"folder\":null,\"id\":\"d1769a4a-c1e9-4d74-9273-1e76cfcf21f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Compassionate Tesla\",\"description\":\"Graph Your Way to Great Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:18:52.806238\",\"folder\":null,\"id\":\"28c5d9dd-0466-4c80-9e58-b1e061cd358d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Goldstine\",\"description\":\"Harness the Power of Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:21:44.488510\",\"folder\":null,\"id\":\"b3c57e4f-28a1-4580-bf08-a9484bdd66e8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elegant Curie\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:23:47.610237\",\"folder\":null,\"id\":\"28fb024e-6ba1-4f5b-83b3-4742b3b8117c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Chandrasekhar\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:24:29.824530\",\"folder\":null,\"id\":\"d2b87cf7-9167-4030-8e9f-b8d9aa0cadee\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Nobel\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:26:51.210699\",\"folder\":null,\"id\":\"c2c9fbac-7d97-40c2-8055-dff608df9414\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Edison\",\"description\":\"Advanced NLP for Groundbreaking Business Solutions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:27:35.822482\",\"folder\":null,\"id\":\"a55561cd-4b25-473f-bde5-884cbabb0d24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Lichterman\",\"description\":\"Building Linguistic Labyrinths.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:29:09.259381\",\"folder\":null,\"id\":\"9c6fe6d4-8311-4fc6-8b02-2a816d7c059d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Bhaskara\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:31:36.053452\",\"folder\":null,\"id\":\"ef6fc1ab-aff8-45a1-8cd5-bc8e38565e4d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Watt\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:32:26.765250\",\"folder\":null,\"id\":\"499b5351-9c09-4934-9f9d-a24be2fd8b24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jolly Wien\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:33:23.648859\",\"folder\":null,\"id\":\"a57eda91-7f6e-410d-9990-385fe0c724f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Spence\",\"description\":\"Mapping Meaningful Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:34:22.576407\",\"folder\":null,\"id\":\"685f685e-8a1b-4b7e-9e21-6cdd72163c91\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Comical Fermat\",\"description\":\"Create, Connect, Converse.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:35:44.920540\",\"folder\":null,\"id\":\"3e061766-b834-4fa4-ba9c-b060925d9703\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Volta\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:36:33.001572\",\"folder\":null,\"id\":\"135f2fd9-e005-40bc-a9bf-c25107388415\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Davinci\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:37:16.208823\",\"folder\":null,\"id\":\"167cdb24-7e1c-475b-893a-cca2f125426c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Sinoussi\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:38:07.215401\",\"folder\":null,\"id\":\"48113cab-2c04-493f-8c2e-c8d067826aa2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Sagan\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:39:19.479656\",\"folder\":null,\"id\":\"28d292dc-e094-4ffe-a657-178892933267\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Hoover\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:40:02.895859\",\"folder\":null,\"id\":\"0c9849b7-b2d6-4d0e-8334-abfb3ae183dd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Mendeleev\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:40:27.867247\",\"folder\":null,\"id\":\"d78c52e9-1941-4555-9bb9-abd01f176705\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Dubinsky\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:41:23.177402\",\"folder\":null,\"id\":\"5277a04c-b5da-4597-aaa2-a6b66ea11d02\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Poitras\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:42:08.731865\",\"folder\":null,\"id\":\"b0d0c8de-4eea-484a-a068-b13e63f7e71c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pedantic Ptolemy\",\"description\":\"Crafting Conversations, One Node at a Time.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:42:25.658996\",\"folder\":null,\"id\":\"b6f155e2-03eb-4232-9bab-145463382fe9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Loving Cray\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:43:57.530112\",\"folder\":null,\"id\":\"b75c10ca-9ecb-432b-88ab-e1847e836e22\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Pasteur\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:44:58.979393\",\"folder\":null,\"id\":\"3710eccb-e7a7-41d5-9339-d9c301515d17\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Gates\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:45:42.744174\",\"folder\":null,\"id\":\"fdd2271e-92f6-4349-8c01-2ec0e9e73f13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Determined Khorana\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:46:10.084684\",\"folder\":null,\"id\":\"88b49a97-0888-4fea-8d9b-6ac2cc6d158e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Booth\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:46:41.577750\",\"folder\":null,\"id\":\"629afe54-8796-45be-a570-e3ac79c60792\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Mendeleev\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:47:22.631243\",\"folder\":null,\"id\":\"7bf481b0-73fe-4f5b-a3d4-1263d9d8e827\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Clever Varahamihira\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:49:51.026960\",\"folder\":null,\"id\":\"df9e86b6-56c9-4848-9010-102615314766\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Stallman\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:50:14.932236\",\"folder\":null,\"id\":\"3e66994c-9b7a-4b85-a917-65d1959d7352\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Modest Wozniak\",\"description\":\"Advanced NLP for Groundbreaking Business Solutions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:51:13.811894\",\"folder\":null,\"id\":\"d10f924a-5780-4255-9f41-3e102ae03e84\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hopeful Mirzakhani\",\"description\":\"Graph Your Way to Great Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:52:23.906908\",\"folder\":null,\"id\":\"f3378fa8-ccaf-4a3b-90d6-b8ab0c4e481f\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Joule\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:52:43.863440\",\"folder\":null,\"id\":\"deaa50e7-a8b1-46b1-856c-334ee781e1c2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Shockley\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:53:43.299699\",\"folder\":null,\"id\":\"c72eac2c-d924-40c6-a102-da524216d090\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zany Dewey\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:54:18.848827\",\"folder\":null,\"id\":\"d9425324-bb60-462e-b431-90a536f2bc76\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gloomy Joliot\",\"description\":\"Language Engineering Excellence.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:12.348608\",\"folder\":null,\"id\":\"621ba134-3fac-487c-98cd-96941439f1be\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Backstabbing Franklin\",\"description\":\"Craft Language Connections Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.491824\",\"folder\":null,\"id\":\"86ca9773-c7b7-4a1a-859a-6cbe0ddff206\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sharp Swartz\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.524414\",\"folder\":null,\"id\":\"da1c02b7-d608-4498-9946-7d02f55fa103\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Volta\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.641432\",\"folder\":null,\"id\":\"8d5dd998-6b51-4f65-8331-086a7f3b11d7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Lichterman\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.746120\",\"folder\":null,\"id\":\"942027d3-e2ea-48c6-8279-0a41b54e8862\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Einstein\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.746904\",\"folder\":null,\"id\":\"9e9b6298-1073-4297-8ecc-3c620b432e70\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Planck\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.747420\",\"folder\":null,\"id\":\"7cd60c83-b797-4e60-af6d-cbc540657943\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Zobell\",\"description\":\"Innovation in Interaction, Revolution in Revenue.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.749951\",\"folder\":null,\"id\":\"dab08306-9521-4e15-aa11-e6a6a4e210f8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Knuth\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:16.772119\",\"folder\":null,\"id\":\"c9149590-636a-44f5-aaae-45a4e78fe4df\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Wright\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:52.954568\",\"folder\":null,\"id\":\"6b23b2ad-c07c-46f6-b9ad-268783d1712e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Vibrant Lalande\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.656156\",\"folder\":null,\"id\":\"ece3bcf6-a147-4559-862e-cacff9db5f48\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Happy Gauss\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.717991\",\"folder\":null,\"id\":\"252b6021-ecad-4eaf-9e2f-106c4c89c496\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gigantic Rosalind\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.736261\",\"folder\":null,\"id\":\"b8cb6d8d-c0fb-4e8d-a46e-2c608dc8a714\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Hubble\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.769546\",\"folder\":null,\"id\":\"553a67db-7225-474c-978e-8a40cde2bfb2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Mclean\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.981063\",\"folder\":null,\"id\":\"e0865007-4d80-4edf-87ab-9e8d2892d719\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Trusting Murdock\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.982286\",\"folder\":null,\"id\":\"1021cd20-66e0-4b81-9c79-bfe729774d20\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Riemann\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.983216\",\"folder\":null,\"id\":\"089074d3-8a1e-4d85-a59d-b4717090e4d3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Tesla\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:00:35.704142\",\"folder\":null,\"id\":\"beb49d88-255e-4db4-931b-4ab4358f1097\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Boyd\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:01:13.569507\",\"folder\":null,\"id\":\"75b5ab8d-e0c0-43cf-912b-8578550e198a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Babbage\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:01:27.944868\",\"folder\":null,\"id\":\"503edd55-8f70-43e5-87fb-2324eaf62336\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Bose\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:02:40.122079\",\"folder\":null,\"id\":\"ae4f2992-1a23-4a43-bec6-68b823935762\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Coulomb\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.263237\",\"folder\":null,\"id\":\"a2a464db-b02a-4440-ad9e-7b552ee6c027\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Drunk Newton\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.883766\",\"folder\":null,\"id\":\"1a5d9af7-5a96-4035-a09c-e15741785828\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jovial Pasteur\",\"description\":\"Your Hub for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.933083\",\"folder\":null,\"id\":\"04b94873-0828-41dc-a850-fd4132c9b9f1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Playful Spence\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.967685\",\"folder\":null,\"id\":\"47003dc2-7884-48a3-aa66-e4185079f4d9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Noyce\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.983198\",\"folder\":null,\"id\":\"13769cb4-2e15-4d54-a28a-c97dc15db58c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Edison\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.018879\",\"folder\":null,\"id\":\"453dacde-6b10-406b-a5b3-f90f44be6899\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Upbeat Snyder\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.205689\",\"folder\":null,\"id\":\"9544fac9-3002-47aa-86b9-102844fe9649\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Khorana\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.243434\",\"folder\":null,\"id\":\"90498ef6-34f9-45c8-8cd0-fe6a36a26f41\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Albattani\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:05:07.775497\",\"folder\":null,\"id\":\"9577c416-8ce8-48f6-ad6d-ab2e003bb415\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Charming Goodall\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:07:52.139318\",\"folder\":null,\"id\":\"f10dc08e-b9c7-44b3-8837-b95aee2f6dbb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Ramanujan\",\"description\":\"Harness the Power of Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:08:22.448480\",\"folder\":null,\"id\":\"c864bd8c-67cd-465f-bf7d-7a35c7df37f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Mclean\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:09:56.507826\",\"folder\":null,\"id\":\"f0c13b19-ae23-40e6-88d6-d135897ee100\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Hawking\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:10:27.169757\",\"folder\":null,\"id\":\"0afb91b4-8f41-4270-900a-f5de647d45ad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gloomy Lovelace\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:11:02.292233\",\"folder\":null,\"id\":\"0f1e5dcf-8769-4157-b495-5f215b490107\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fervent Kilby\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:11:46.960966\",\"folder\":null,\"id\":\"310d03d9-dd50-4946-9a27-38ee06906212\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Admiring Almeida\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:12:24.475101\",\"folder\":null,\"id\":\"3cbc8fc2-a86f-4177-9a1c-a833b2a24283\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Roentgen\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:06.753571\",\"folder\":null,\"id\":\"c508e922-29e9-4234-84ae-505c5bdf41c1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Poitras\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.754605\",\"folder\":null,\"id\":\"1431df05-1b6f-41af-a063-a18d26a946ef\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Khayyam\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.791627\",\"folder\":null,\"id\":\"344e03fb-fd49-4e87-be67-7dce04ba655b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zealous Mayer\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.803889\",\"folder\":null,\"id\":\"8b3ff1cb-3a6c-46ee-b09a-0e9f9f13a8b9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Ramanujan\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.822583\",\"folder\":null,\"id\":\"18961e76-f4b1-4968-926a-fed22cb04f69\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Franklin\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.854440\",\"folder\":null,\"id\":\"0e0ee854-ab46-4333-a848-2e1239a24334\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Swirles\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.988932\",\"folder\":null,\"id\":\"cc7b8238-3d15-4f78-bd0c-8311691c9ff8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Swartz\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:08.028688\",\"folder\":null,\"id\":\"123369f9-c83c-4ed3-93b6-78ca29c271cf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Kowalevski\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.097607\",\"folder\":null,\"id\":\"ed4b1490-e9e5-46bf-b337-166b48eaadd6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Golick\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.617772\",\"folder\":null,\"id\":\"9d1be311-c618-4e3e-aeb1-4161ab37850e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Newton\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.646124\",\"folder\":null,\"id\":\"63a75f99-1745-40d3-9e27-3d19a143be45\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Noyce\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.685781\",\"folder\":null,\"id\":\"b418ca87-eb17-42e8-b789-3fcb0cab3ddb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fluffy Fermat\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.705984\",\"folder\":null,\"id\":\"93802b07-eee9-4a2b-8691-7d9a231bd67e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Stoic Payne\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.723990\",\"folder\":null,\"id\":\"d62df661-0ae5-4b41-a9fb-71cb2e46ad52\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Darwin\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.818343\",\"folder\":null,\"id\":\"d1f62248-415c-474a-bfa6-3509a528a33b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Thompson\",\"description\":\"Transform Your Business with Smart Dialogues.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.925999\",\"folder\":null,\"id\":\"d2267176-f020-4c52-90a4-7f944d7c1749\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Admiring Dewey\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:07.400402\",\"folder\":null,\"id\":\"8cf1ac8d-d34d-4e8a-a9da-be44672e1dfb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Prickly Zuse\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.384611\",\"folder\":null,\"id\":\"bae3cb5b-0f1b-4e95-bf58-7eab38da3d73\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hungry Zuse\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.436591\",\"folder\":null,\"id\":\"4dfafe3e-e9ef-405d-be72-550084411d69\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Khayyam\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.435958\",\"folder\":null,\"id\":\"e0f81215-dc55-4b5a-b8cf-6e2fcbf297a7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Big Mendel\",\"description\":\"Innovation in Interaction with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.470080\",\"folder\":null,\"id\":\"5022a71c-da47-4975-a4d0-6d2d9e760d3d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Inquisitive Poitras\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.484430\",\"folder\":null,\"id\":\"4f1ff9e3-3500-404c-80af-2010bc46cdcb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Joyous Jones\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.661306\",\"folder\":null,\"id\":\"77af3e47-c2cc-42f6-99e1-78589439a447\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Khayyam\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.662877\",\"folder\":null,\"id\":\"6f3e2e56-b329-47e3-86cc-024c29203016\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Visvesvaraya\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.092917\",\"folder\":null,\"id\":\"449ac0ee-ee29-4a9f-9aff-fd6a86624457\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Tesla\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.630382\",\"folder\":null,\"id\":\"a2136ed3-dc75-4a8f-ab34-6887ff955b23\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Noether\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.652058\",\"folder\":null,\"id\":\"fd1080f8-db07-481a-b2ba-60f67fcb20a6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Pasteur\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.688661\",\"folder\":null,\"id\":\"d534d5e1-92aa-4fb2-a795-7071c4feba47\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Comical Sinoussi\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.741385\",\"folder\":null,\"id\":\"85323170-c066-4d8f-acb0-1b142241389e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Ramanujan\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.790086\",\"folder\":null,\"id\":\"b0d18432-21ab-404b-acb6-57ef97353fad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sick Joliot\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":442,\"id\":\"OpenAIEmbeddings-rVj1B\",\"type\":\"genericNode\",\"position\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":true,\"name\":\"tiktoken_enabled\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-rVj1B\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187}}],\"edges\":[],\"viewport\":{\"x\":267.7156633365312,\"y\":716.9644817529361,\"zoom\":0.7169776240079139}},\"is_component\":false,\"updated_at\":\"2023-12-08T18:52:26.999440\",\"folder\":null,\"id\":\"be39958a-ef42-4fa8-8e54-b611e56b5c97\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Graceful Lumiere\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:11.012069\",\"folder\":null,\"id\":\"f7dcecfd-533c-4f40-9dcb-f213962ed1a2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"aaaaa\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":442,\"id\":\"OpenAIEmbeddings-P6Z0D\",\"type\":\"genericNode\",\"position\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":true,\"name\":\"tiktoken_enabled\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-P6Z0D\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187}}],\"edges\":[],\"viewport\":{\"x\":266.7156633365312,\"y\":657.9644817529361,\"zoom\":0.7169776240079139}},\"is_component\":false,\"updated_at\":\"2023-12-08T19:05:14.503144\",\"folder\":null,\"id\":\"c2411a20-57c6-44cc-a0d0-2c857453633d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Aryabhata\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":459,\"id\":\"CustomComponent-Qhbd7\",\"type\":\"genericNode\",\"position\":{\"x\":-224.36198532285903,\"y\":-39.03047722134913},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nfrom openai import OpenAI\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"OpenAI STT english translator\\\"\\n description: str = \\\"Transcript and translate any audio to english\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"audio_path\\\":{\\\"display_name\\\":\\\"Audio path\\\",\\\"input_types\\\":[\\\"str\\\"]},\\\"openAI_key\\\":{\\\"display_name\\\":\\\"OpenAI key\\\",\\\"password\\\":True}}\\n\\n def build(self,audio_path:str,openAI_key:str) -> str:\\n client = OpenAI(api_key=openAI_key)\\n audio_file= open(audio_path, \\\"rb\\\")\\n transcript = client.audio.translations.create(\\n model=\\\"whisper-1\\\", \\n file=audio_file\\n )\\n self.status = transcript.text\\n return transcript.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"audio_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"audio_path\",\"display_name\":\"Audio path\",\"advanced\":false,\"input_types\":[\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"aaaaa\"},\"openAI_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openAI_key\",\"display_name\":\"OpenAI key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Transcript and translate any audio to english\",\"base_classes\":[\"str\"],\"display_name\":\"OpenAI STT english tra\",\"custom_fields\":{\"audio_path\":null,\"openAI_key\":null},\"output_types\":[\"str\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Qhbd7\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-224.36198532285903,\"y\":-39.03047722134913}}],\"edges\":[],\"viewport\":{\"x\":433.8372868055629,\"y\":250.9611989970935,\"zoom\":0.8467453123625275}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:16:56.971879\",\"folder\":null,\"id\":\"122eee5d-9734-4e51-9da5-b39bead64a8d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Wing\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:23.227017\",\"folder\":null,\"id\":\"171d0063-6446-4c6a-8f5b-786a38951d44\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mad Boyd\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.063781\",\"folder\":null,\"id\":\"3a7af50c-6555-4004-a86e-1ea37e477900\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Dewey\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.065404\",\"folder\":null,\"id\":\"dc4b4235-a550-41e2-9ddb-bcb352a1bc03\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nauseous Carroll\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.087501\",\"folder\":null,\"id\":\"9550e2bf-db7a-41f5-84e5-177a181bbeda\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Engelbart\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.112543\",\"folder\":null,\"id\":\"6a3a24bb-01cb-4d8e-8d17-0dc92d257322\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sassy Khayyam\",\"description\":\"Innovation in Interaction, Revolution in Revenue.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.147631\",\"folder\":null,\"id\":\"8d372f5e-ca12-4ea8-a1a1-8846afa72692\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Bell\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.212921\",\"folder\":null,\"id\":\"800f8785-0f41-4db3-aef8-9e3de5250526\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Bassi\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.395729\",\"folder\":null,\"id\":\"4589607a-065b-4a8f-ba52-5045d7b04086\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Volhard\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.263971\",\"folder\":null,\"id\":\"b2440ed8-44fa-4684-adf7-b5e84bff6577\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Ecstatic Poincare\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.377270\",\"folder\":null,\"id\":\"b996f514-e0b8-432f-969b-7276630a8f4b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Zuse\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.406385\",\"folder\":null,\"id\":\"6e2e9c12-0afc-499e-acdd-adf4b5f7d4fc\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Big Hopper\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.413014\",\"folder\":null,\"id\":\"e020f1a5-aa12-45e7-ba50-6eb64a735e60\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Jang\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.433045\",\"folder\":null,\"id\":\"ee58f892-b7b2-408e-b4b9-9d862fc315aa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Ohm\",\"description\":\"Promptly Ingenious!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.403404\",\"folder\":null,\"id\":\"023a1fc3-8807-4167-b6b2-f4e5daf036f1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Degrasse\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.411655\",\"folder\":null,\"id\":\"085f106f-c1e9-4a0f-ba31-d2fafe685d9c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Volta\",\"description\":\"Catalyzing Business Growth through Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.408697\",\"folder\":null,\"id\":\"14481bb5-1353-452f-9359-d38c9419d79c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bose\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:21.774940\",\"folder\":null,\"id\":\"e9316292-4ee1-441b-8327-0b09a7831fe9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Thirsty Easley\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.416556\",\"folder\":null,\"id\":\"668806ba-3efa-44de-aeb7-4ac082ba9172\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Joyous Mestorf\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.484048\",\"folder\":null,\"id\":\"3fc0a371-aada-4450-9d17-33d3cc05c870\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Playful Franklin\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.509095\",\"folder\":null,\"id\":\"af967c98-5f08-4ee2-b1ce-6c16b4f9ebe2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bhaskara\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.508465\",\"folder\":null,\"id\":\"758c4164-b521-45d0-a15f-d49480e312eb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Funky Edison\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.602296\",\"folder\":null,\"id\":\"f9d3d30f-8859-433f-bafc-ccf1a7196e35\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Ride\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.604061\",\"folder\":null,\"id\":\"0142bca5-eb61-42ed-9917-70c4c0f54eb0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Noyce\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.603113\",\"folder\":null,\"id\":\"0b63d036-4669-4ceb-8ea4-34035340df77\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Bhabha\",\"description\":\"Language Engineering Excellence.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.345767\",\"folder\":null,\"id\":\"8b9a66d4-a924-4b84-a2b5-5dd0645ac07a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Thirsty Zobell\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.722319\",\"folder\":null,\"id\":\"c912fd6b-b32d-409f-a0e5-c6249b066429\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fervent Shaw\",\"description\":\"Language Architect at Work!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.750779\",\"folder\":null,\"id\":\"9d755cd4-c652-43e0-a68d-75a5475ce7a3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Giggly Newton\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.786602\",\"folder\":null,\"id\":\"0d3af7de-1ada-4c43-a69f-1bfad370ccfc\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Modest Yalow\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.792245\",\"folder\":null,\"id\":\"b6444376-4162-436b-8b40-f5a6afc850db\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sad Bhabha\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.890349\",\"folder\":null,\"id\":\"d90af439-fb34-4d27-98f2-06f7f9a9ed8c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Spirited Hoover\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.905750\",\"folder\":null,\"id\":\"31597ce2-de3c-490b-9ead-3f702f63cfd9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Trusting Davinci\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:08.001400\",\"folder\":null,\"id\":\"b43c63e9-a257-4a53-8acc-049e13706ac2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"23\",\"description\":\"23\",\"data\":{\"nodes\":[{\"width\":384,\"height\":467,\"id\":\"PromptTemplate-K7xiS\",\"type\":\"genericNode\",\"position\":{\"x\":-658.2250903773149,\"y\":809.352046606987},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"dasdas\",\"dasdasd\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"{dasdas}\\n{dasdasd}\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"dasdas\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"dasdas\",\"display_name\":\"dasdas\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"dasdasd\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"dasdasd\",\"display_name\":\"dasdasd\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"PromptTemplate\",\"BasePromptTemplate\",\"StringPromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"dasdas\",\"dasdasd\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-K7xiS\"},\"selected\":false,\"positionAbsolute\":{\"x\":-658.2250903773149,\"y\":809.352046606987},\"dragging\":false},{\"width\":384,\"height\":366,\"id\":\"AirbyteJSONLoader-DXfcM\",\"type\":\"genericNode\",\"position\":{\"x\":-1110.8267574563533,\"y\":569.1107380883907},\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-DXfcM\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1110.8267574563533,\"y\":569.1107380883907},\"dragging\":false},{\"width\":384,\"height\":376,\"id\":\"PromptRunner-ckWMH\",\"type\":\"genericNode\",\"position\":{\"x\":-1149.4746387825978,\"y\":992.3970573758324},\"data\":{\"type\":\"PromptRunner\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\n\\nclass PromptRunner(CustomComponent):\\n display_name: str = \\\"Prompt Runner\\\"\\n description: str = \\\"Run a Chain with the given PromptTemplate\\\"\\n beta: bool = True\\n field_config = {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt Template\\\",\\n \\\"info\\\": \\\"Make sure the prompt has all variables filled.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}) -> Document:\\n chain = prompt | llm\\n # The input is an empty dict because the prompt is already filled\\n result = chain.invoke(input=inputs)\\n if hasattr(result, \\\"content\\\"):\\n result = result.content\\n self.repr_value = result\\n return Document(page_content=str(result))\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"inputs\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"inputs\",\"display_name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt Template\",\"advanced\":false,\"dynamic\":false,\"info\":\"Make sure the prompt has all variables filled.\",\"type\":\"PromptTemplate\",\"list\":false}},\"description\":\"Run a Chain with the given PromptTemplate\",\"base_classes\":[\"Document\"],\"display_name\":\"Prompt Runner\",\"custom_fields\":{\"inputs\":null,\"llm\":null,\"prompt\":null},\"output_types\":[\"PromptRunner\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"PromptRunner-ckWMH\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1149.4746387825978,\"y\":992.3970573758324},\"dragging\":false}],\"edges\":[{\"source\":\"PromptRunner-ckWMH\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œPromptRunnerœ,œidœ:œPromptRunner-ckWMHœ}\",\"target\":\"PromptTemplate-K7xiS\",\"targetHandle\":\"{œfieldNameœ:œdasdasdœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"dasdasd\",\"id\":\"PromptTemplate-K7xiS\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"PromptRunner\",\"id\":\"PromptRunner-ckWMH\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptRunner-ckWMH{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œPromptRunnerœ,œidœ:œPromptRunner-ckWMHœ}-PromptTemplate-K7xiS{œfieldNameœ:œdasdasdœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\"},{\"source\":\"AirbyteJSONLoader-DXfcM\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œAirbyteJSONLoaderœ,œidœ:œAirbyteJSONLoader-DXfcMœ}\",\"target\":\"PromptTemplate-K7xiS\",\"targetHandle\":\"{œfieldNameœ:œdasdasœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"dasdas\",\"id\":\"PromptTemplate-K7xiS\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"AirbyteJSONLoader\",\"id\":\"AirbyteJSONLoader-DXfcM\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-AirbyteJSONLoader-DXfcM{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œAirbyteJSONLoaderœ,œidœ:œAirbyteJSONLoader-DXfcMœ}-PromptTemplate-K7xiS{œfieldNameœ:œdasdasœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\"}],\"viewport\":{\"x\":721.09842496776,\"y\":-303.59762799439625,\"zoom\":0.6417129487814537}},\"is_component\":false,\"updated_at\":\"2023-12-08T22:52:14.560323\",\"folder\":null,\"id\":\"8533c46e-21fd-4b92-b68e-1086ea86c72d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Stonebraker\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:26:42.332360\",\"folder\":null,\"id\":\"92bc0875-4a73-44f2-9410-3b8342e404bf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search (1)\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-dMB5d\"},\"id\":\"CustomComponent-dMB5d\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:43.668665\",\"folder\":null,\"id\":\"912265df-9b87-4b30-a585-1ca59b944391\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search (2)\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-ipifC\"},\"id\":\"CustomComponent-ipifC\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:49.799612\",\"folder\":null,\"id\":\"ca83ee08-2f93-427d-9897-80fef6dd5447\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Y4qL7\"},\"id\":\"CustomComponent-Y4qL7\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:53.719960\",\"folder\":null,\"id\":\"5847602b-769a-4a82-82e8-a70f54a59929\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Williams\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:27:45.691254\",\"folder\":null,\"id\":\"0e3bdba9-127a-4399-81a4-2865b70a4a47\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Shared Component\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":328,\"id\":\"CSVAgent-TK9Ea\",\"type\":\"genericNode\",\"position\":{\"x\":251.25514772667083,\"y\":160.7424529887874},\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVAgent-TK9Ea\"},\"positionAbsolute\":{\"x\":251.25514772667083,\"y\":160.7424529887874}}],\"edges\":[],\"viewport\":{\"x\":104.85568116317398,\"y\":88.26375874183478,\"zoom\":0.7169776240079145}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:28:34.119070\",\"folder\":null,\"id\":\"29c1a247-47b0-457b-8666-7c0a67dc72b0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"teste cristhian\",\"description\":\"11111\",\"data\":{\"nodes\":[{\"width\":384,\"height\":328,\"id\":\"CSVAgent-P5wrB\",\"type\":\"genericNode\",\"position\":{\"x\":251.25514772667083,\"y\":160.7424529887874},\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVAgent-P5wrB\"},\"positionAbsolute\":{\"x\":251.25514772667083,\"y\":160.7424529887874}},{\"width\":384,\"height\":626,\"id\":\"OpenAI-zpihD\",\"type\":\"genericNode\",\"position\":{\"x\":-56.983202536768374,\"y\":61.715652677908665},\"data\":{\"type\":\"OpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":20,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"best_of\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"logit_bias\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-babbage-001\",\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false,\"value\":\"dasdasdasdsadasdas\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"1.4\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"OpenAI\",\"BaseLanguageModel\",\"BaseLLM\",\"BaseOpenAI\"],\"display_name\":\"OpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAI-zpihD\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-56.983202536768374,\"y\":61.715652677908665}}],\"edges\":[],\"viewport\":{\"x\":104.85568116317398,\"y\":88.26375874183478,\"zoom\":0.7169776240079145}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:40:48.453096\",\"folder\":null,\"id\":\"2e59d013-2acb-49a6-915b-9231a7e6eb58\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVAgent (1)\",\"description\":\"Construct a CSV agent from a CSV and tools.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVAgent-jsHqy\"},\"id\":\"CSVAgent-jsHqy\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:31:17.317322\",\"folder\":null,\"id\":\"ab1034a9-9b5b-4c65-bf6e-9f098a403942\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Wilsonfasdfsd\",\"description\":\"Building Linguistic Labyrinths.fasdfads\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:43:45.298121\",\"folder\":null,\"id\":\"7d91c0c5-fba6-4c60-b4d1-11d430ef357a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (1)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-pAHh6\"},\"id\":\"AirbyteJSONLoader-pAHh6\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:47:58.573137\",\"folder\":null,\"id\":\"f0cc4292-97cc-4748-803d-949e30dcf661\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"ff2\":\"d3bbd\"},{\"w\":\"bvd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-0zU2Q\"},\"id\":\"AirbyteJSONLoader-0zU2Q\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:09.035318\",\"folder\":null,\"id\":\"5e3c0d55-1a00-4e15-9821-0c625c6415ff\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVAgent\",\"description\":\"Construct a CSV agent from a CSV and tools.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVAgent-Ub1Xe\"},\"id\":\"CSVAgent-Ub1Xe\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:16.985419\",\"folder\":null,\"id\":\"baee8061-4788-4ce6-928f-c6ce1ecb443c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Heisenberg\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":366,\"id\":\"CSVLoader-RMUx9\",\"type\":\"genericNode\",\"position\":{\"x\":111,\"y\":345.51250076293945},\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"z2b\":\"z9\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVLoader-RMUx9\"},\"positionAbsolute\":{\"x\":111,\"y\":345.51250076293945}}],\"edges\":[],\"viewport\":{\"x\":0,\"y\":0,\"zoom\":1}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:38:40.291137\",\"folder\":null,\"id\":\"109e9629-d569-4555-9d40-42203a5ed035\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CohereEmbeddings\",\"description\":\"Cohere embedding models.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CohereEmbeddings\",\"node\":{\"template\":{\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cohere_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"embed-english-v2.0\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"truncate\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"truncate\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"user_agent\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"password\":false,\"name\":\"user_agent\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"CohereEmbeddings\"},\"description\":\"Cohere embedding models.\",\"base_classes\":[\"CohereEmbeddings\",\"Embeddings\"],\"display_name\":\"CohereEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/cohere\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CohereEmbeddings-HFUAf\"},\"id\":\"CohereEmbeddings-HFUAf\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:46.172344\",\"folder\":null,\"id\":\"662d8040-d47c-40db-bda1-66489a1c9d24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (1)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-3wrib\"},\"id\":\"CSVLoader-3wrib\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:56:11.662526\",\"folder\":null,\"id\":\"4fae6aec-ddbd-498d-a4d1-ca0290f6a5ad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (2)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-VEjyx\"},\"id\":\"CSVLoader-VEjyx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:57:37.560784\",\"folder\":null,\"id\":\"d80635ee-966c-41f2-981c-afa2c388ac6e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (3)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-PIhOc\"},\"id\":\"CSVLoader-PIhOc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:00:27.991966\",\"folder\":null,\"id\":\"c5cc4c32-77c8-4889-a9f8-2632466b7366\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (4)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-deB43\"},\"id\":\"CSVLoader-deB43\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:00:42.509243\",\"folder\":null,\"id\":\"0ab59938-ccf4-4bb9-b285-1f5da38648f0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-mdkLm\"},\"id\":\"CSVLoader-mdkLm\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:02:17.458354\",\"folder\":null,\"id\":\"f127b7e7-4149-492e-8998-6b1b35ec4153\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (5)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-FRc6Y\"},\"id\":\"CSVLoader-FRc6Y\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:02:26.958867\",\"folder\":null,\"id\":\"a870a096-725c-4914-add0-8d57d710b7e5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (2)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-Z0uol\"},\"id\":\"AirbyteJSONLoader-Z0uol\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:03:33.764117\",\"folder\":null,\"id\":\"2a37c76c-65c8-4c01-a72d-eb46f3d41a56\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-28ASv\"},\"id\":\"AmazonBedrockEmbeddings-28ASv\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:03:41.066618\",\"folder\":null,\"id\":\"850ba4e6-96ca-49a7-9b0c-4b7048fd52c8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"ConversationBufferMemory\",\"description\":\"Buffer for storing conversation memory.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"ConversationBufferMemory\",\"node\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationBufferMemory\"},\"description\":\"Buffer for storing conversation memory.\",\"base_classes\":[\"BaseMemory\",\"BaseChatMemory\",\"ConversationBufferMemory\"],\"display_name\":\"ConversationBufferMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"ConversationBufferMemory-WaoLx\"},\"id\":\"ConversationBufferMemory-WaoLx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:04:46.058568\",\"folder\":null,\"id\":\"be650940-0449-4eb0-a708-056310f924fd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (1)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-Bs5PG\"},\"id\":\"AmazonBedrockEmbeddings-Bs5PG\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:05:50.570800\",\"folder\":null,\"id\":\"53ad1fe2-f3af-4354-86e0-eb141ce12859\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (2)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-zSZ4t\"},\"id\":\"AmazonBedrockEmbeddings-zSZ4t\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:06:11.415088\",\"folder\":null,\"id\":\"e9ed1c90-146e-452d-8ccd-ebf2e0da4331\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (3)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-Bxhlt\"},\"id\":\"AmazonBedrockEmbeddings-Bxhlt\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:07:06.411108\",\"folder\":null,\"id\":\"83783c57-64e3-41a6-aa7e-ed82f80f1e53\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (6)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"z2b\":\"z9\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-2pn2o\"},\"id\":\"CSVLoader-2pn2o\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:38:30.706258\",\"folder\":null,\"id\":\"c4ae9de6-9df3-4d3c-afc9-1752af4fecd7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Agent Initializer\",\"description\":\"Initialize a Langchain Agent.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AgentInitializer\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n }\\n\\n def build(\\n self, agent: str, llm: BaseLanguageModel, memory: BaseChatMemory, tools: List[Tool], max_iterations: int\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"AgentInitializer\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"max_iterations\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true}},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"Chain\",\"AgentExecutor\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"max_iterations\":null,\"memory\":null,\"tools\":null},\"output_types\":[\"AgentInitializer\"],\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AgentInitializer-MJrAC\"},\"id\":\"AgentInitializer-MJrAC\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:42:54.715163\",\"folder\":null,\"id\":\"ff84b5f9-5680-4084-a9f1-7d94fe675486\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Agent Initializer (1)\",\"description\":\"Initialize a Langchain Agent.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AgentInitializer\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n }\\n\\n def build(\\n self, agent: str, llm: BaseLanguageModel, memory: BaseChatMemory, tools: List[Tool], max_iterations: int\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"AgentInitializer\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"max_iterations\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true}},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"Chain\",\"AgentExecutor\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"max_iterations\":null,\"memory\":null,\"tools\":null},\"output_types\":[\"AgentInitializer\"],\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AgentInitializer-3lcZ4\"},\"id\":\"AgentInitializer-3lcZ4\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:43:20.819934\",\"folder\":null,\"id\":\"97f5db9f-d6cc-4555-88fb-3be102c67814\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Banach\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:52:49.951416\",\"folder\":null,\"id\":\"a600acd1-213a-4ce7-8648-ab2ee59f5918\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (3)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-JhQtx\"},\"id\":\"AirbyteJSONLoader-JhQtx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:44:49.587337\",\"folder\":null,\"id\":\"07c52ad7-ca52-4cdd-ab40-74a91dbad0dd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (4)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-bIvDc\"},\"id\":\"AirbyteJSONLoader-bIvDc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:45:13.458500\",\"folder\":null,\"id\":\"53e4d256-3653-444b-b8e0-fb97b3ae5c7e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (5)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-2BLS8\"},\"id\":\"AirbyteJSONLoader-2BLS8\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:45:44.461699\",\"folder\":null,\"id\":\"b5158cc1-c6b8-4e25-907a-bc7e7637aa38\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (4)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-NsBzN\"},\"id\":\"AmazonBedrockEmbeddings-NsBzN\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:50:29.791575\",\"folder\":null,\"id\":\"3fb77f72-1be7-4ce0-ae89-a82b0eee9acf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Golick\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.707854\",\"folder\":null,\"id\":\"9c5d21c2-ea82-4cf4-a591-c3d3fd3f13e6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Davinci (1)\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.761150\",\"folder\":null,\"id\":\"f8e2e16e-129c-4116-9626-2c6b524d97b7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Degrasse\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.764440\",\"folder\":null,\"id\":\"d7f4f7b5-effe-4834-8cab-4f2fc4f6e9de\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Prickly Archimedes\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.767546\",\"folder\":null,\"id\":\"2265d813-4a87-410f-b06a-65e35db8219e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Heyrovsky\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.765105\",\"folder\":null,\"id\":\"10bfd881-e67e-4c33-965d-ee041695edce\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Carroll\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.811794\",\"folder\":null,\"id\":\"63fa5653-4513-47f2-8dfa-baeb1d981f93\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Perlman\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.814993\",\"folder\":null,\"id\":\"f4bc5945-20d9-4703-a5bb-6a4a3ef7fc8e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Stallman\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.813144\",\"folder\":null,\"id\":\"8d8b80f9-4b74-4cd5-bc5c-08a32c4d2b95\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Einstein\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:19.518262\",\"folder\":null,\"id\":\"21808fd7-a492-4e29-8863-301c2785f542\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Funky Swanson\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.185637\",\"folder\":null,\"id\":\"7752299a-4aa9-44db-8d9c-5c4a2ac1b071\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Romantic Pascal\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.223064\",\"folder\":null,\"id\":\"78f48a13-6a9f-42ce-9d58-ec9b63b381d2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Bartik\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.239758\",\"folder\":null,\"id\":\"38074091-3d7c-4d42-b61b-ae195c1b8a4e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Condescending Joliot\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.271996\",\"folder\":null,\"id\":\"773020aa-5c2d-4632-ad9e-21276861ab93\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Kalam\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.283929\",\"folder\":null,\"id\":\"0092d077-6d31-401f-a739-b164476b90ed\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Bhabha\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.467739\",\"folder\":null,\"id\":\"4a395211-712d-4dd2-b3bb-e6b19200f15d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Babbage\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.742990\",\"folder\":null,\"id\":\"3f086a82-3e29-4328-9da8-e02dc9201744\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Volta\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:18.594247\",\"folder\":null,\"id\":\"659b8289-c8e8-413d-9b2b-51e68411f170\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Jennings\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:42.640309\",\"folder\":null,\"id\":\"f55f0640-d47e-4471-b1ba-3411d38ecac5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Shaw\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:58.376247\",\"folder\":null,\"id\":\"a039811e-449a-4244-83ed-4ddd731a0921\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Murdock (1)\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:25:14.674524\",\"folder\":null,\"id\":\"0faf6144-6ca6-4f64-a343-665ae54774ef\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Volta\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:26:50.418029\",\"folder\":null,\"id\":\"c5d149d0-c401-4f5e-b79f-2abcc7b8d98d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Bubbly Curie\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:27:10.900899\",\"folder\":null,\"id\":\"7bb2d226-9740-433d-861f-a499632c5a13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Nobel\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:29:11.541630\",\"folder\":null,\"id\":\"947906d8-75ea-470c-a8e2-cc80c5d3bdbb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Northcutt\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:29:37.169791\",\"folder\":null,\"id\":\"56f109fd-2c18-42ed-a9b2-089a678a0c11\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Khayyam\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:30:24.686359\",\"folder\":null,\"id\":\"551d7bfa-49aa-43f1-a779-e47eabc2aaf2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Spence\",\"description\":\"Create, Curate, Communicate with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:30:47.738472\",\"folder\":null,\"id\":\"12aef128-130e-492e-bf84-62d4cb4cd456\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Lavoisier\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:31:43.272365\",\"folder\":null,\"id\":\"9952c044-6903-4fba-a270-6ed0b90c93c9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Upbeat Bose\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:32:23.972035\",\"folder\":null,\"id\":\"65f49582-c9fa-4c67-a2bc-4e8fa73ca731\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Perlman\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:33:26.984083\",\"folder\":null,\"id\":\"9ae57fe2-c677-47fa-a059-7d3d915a1178\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sharp Cori\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:33:52.377359\",\"folder\":null,\"id\":\"2920dde2-5c24-4fe0-9c06-ef86b5a16a99\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"}]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.03 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.423Z", - "time": 0.901, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/all", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flows" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "331584" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:58 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"chains\":{\"ConversationalRetrievalChain\":{\"template\":{\"callbacks\":{\"type\":\"Callbacks\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"condense_question_llm\":{\"type\":\"BaseLanguageModel\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"condense_question_llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"condense_question_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"chat_history\",\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\\n\\nChat History:\\n{chat_history}\\nFollow Up Input: {question}\\nStandalone question:\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"condense_question_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chain_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"combine_docs_chain_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"combine_docs_chain_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_source_documents\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_source_documents\",\"display_name\":\"Return source documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationalRetrievalChain\"},\"description\":\"Convenience method to load chain from LLM and retriever.\",\"base_classes\":[\"BaseConversationalRetrievalChain\",\"ConversationalRetrievalChain\",\"Chain\",\"Callable\"],\"display_name\":\"ConversationalRetrievalChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/chat_vector_db\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"LLMCheckerChain\":{\"template\":{\"check_assertions_prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"assertions\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Here is a bullet point list of assertions:\\n{assertions}\\nFor each assertion, determine whether it is true or false. If it is false, explain why.\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"check_assertions_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"create_draft_answer_prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"{question}\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"create_draft_answer_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"list_assertions_prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"statement\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Here is a statement:\\n{statement}\\nMake a bullet point list of the assumptions you made when producing the above statement.\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"list_assertions_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"revised_answer_prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"checked_assertions\",\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"{checked_assertions}\\n\\nQuestion: In light of the above assertions and checks, how would you answer the question '{question}'?\\n\\nAnswer:\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"revised_answer_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"LLMCheckerChain\"},\"description\":\"\",\"base_classes\":[\"Chain\",\"LLMCheckerChain\",\"Callable\"],\"display_name\":\"LLMCheckerChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_checker\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"LLMMathChain\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm_chain\":{\"type\":\"LLMChain\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Translate a math problem into a expression that can be executed using Python's numexpr library. Use the output of running this code to answer the question.\\n\\nQuestion: ${{Question with math problem.}}\\n```text\\n${{single line mathematical expression that solves the problem}}\\n```\\n...numexpr.evaluate(text)...\\n```output\\n${{Output of running the code}}\\n```\\nAnswer: ${{Answer}}\\n\\nBegin.\\n\\nQuestion: What is 37593 * 67?\\n```text\\n37593 * 67\\n```\\n...numexpr.evaluate(\\\"37593 * 67\\\")...\\n```output\\n2518731\\n```\\nAnswer: 2518731\\n\\nQuestion: 37593^(1/5)\\n```text\\n37593**(1/5)\\n```\\n...numexpr.evaluate(\\\"37593**(1/5)\\\")...\\n```output\\n8.222831614237718\\n```\\nAnswer: 8.222831614237718\\n\\nQuestion: {question}\\n\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"question\",\"fileTypes\":[],\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"answer\",\"fileTypes\":[],\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"LLMMathChain\"},\"description\":\"Chain that interprets a prompt and executes python code to do math.\",\"base_classes\":[\"Chain\",\"LLMMathChain\",\"Callable\"],\"display_name\":\"LLMMathChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_math\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RetrievalQA\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"combine_documents_chain\":{\"type\":\"BaseCombineDocumentsChain\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"query\",\"fileTypes\":[],\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"result\",\"fileTypes\":[],\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"return_source_documents\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RetrievalQA\"},\"description\":\"Chain for question-answering against an index.\",\"base_classes\":[\"RetrievalQA\",\"BaseRetrievalQA\",\"Chain\",\"Callable\"],\"display_name\":\"RetrievalQA\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RetrievalQAWithSourcesChain\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"combine_documents_chain\":{\"type\":\"BaseCombineDocumentsChain\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"answer_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"answer\",\"fileTypes\":[],\"password\":false,\"name\":\"answer_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_docs_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"docs\",\"fileTypes\":[],\"password\":false,\"name\":\"input_docs_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_tokens_limit\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":3375,\"fileTypes\":[],\"password\":false,\"name\":\"max_tokens_limit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"question_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"question\",\"fileTypes\":[],\"password\":false,\"name\":\"question_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"reduce_k_below_max_tokens\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"reduce_k_below_max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_source_documents\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"sources_answer_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"sources\",\"fileTypes\":[],\"password\":false,\"name\":\"sources_answer_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RetrievalQAWithSourcesChain\"},\"description\":\"Question-answering with sources over an index.\",\"base_classes\":[\"RetrievalQAWithSourcesChain\",\"BaseQAWithSourcesChain\",\"Chain\",\"Callable\"],\"display_name\":\"RetrievalQAWithSourcesChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SQLDatabaseChain\":{\"template\":{\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SQLDatabaseChain\"},\"description\":\"Create a SQLDatabaseChain from an LLM and a database connection.\",\"base_classes\":[\"SQLDatabaseChain\",\"Chain\",\"Callable\"],\"display_name\":\"SQLDatabaseChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"CombineDocsChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chain_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"load_qa_chain\"},\"description\":\"Load question answering chain.\",\"base_classes\":[\"BaseCombineDocumentsChain\",\"Callable\"],\"display_name\":\"CombineDocsChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SeriesCharacterChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"character\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"character\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"series\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"series\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SeriesCharacterChain\"},\"description\":\"SeriesCharacterChain is a chain you can use to have a conversation with a character from a series.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"Chain\",\"ConversationChain\",\"SeriesCharacterChain\",\"Callable\"],\"display_name\":\"SeriesCharacterChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"MidJourneyPromptChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"MidJourneyPromptChain\"},\"description\":\"MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"Chain\",\"ConversationChain\",\"MidJourneyPromptChain\"],\"display_name\":\"MidJourneyPromptChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"TimeTravelGuideChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"TimeTravelGuideChain\"},\"description\":\"Time travel guide chain.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"TimeTravelGuideChain\",\"Chain\",\"ConversationChain\"],\"display_name\":\"TimeTravelGuideChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"LLMChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"field_formatters\":{},\"beta\":true},\"ConversationChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"Memory to load context from. If none is provided, a ConversationBufferMemory will be used.\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.chains import ConversationChain\\nfrom typing import Optional, Union, Callable\\nfrom langflow.field_typing import BaseLanguageModel, BaseMemory, Chain\\n\\n\\nclass ConversationChainComponent(CustomComponent):\\n display_name = \\\"ConversationChain\\\"\\n description = \\\"Chain to have a conversation and load context from memory.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\n \\\"display_name\\\": \\\"Memory\\\",\\n \\\"info\\\": \\\"Memory to load context from. If none is provided, a ConversationBufferMemory will be used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n if memory is None:\\n return ConversationChain(llm=llm)\\n return ConversationChain(llm=llm, memory=memory)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Chain to have a conversation and load context from memory.\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"ConversationChain\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"memory\":null},\"output_types\":[\"ConversationChain\"],\"field_formatters\":{},\"beta\":true},\"PromptRunner\":{\"template\":{\"llm\":{\"type\":\"BaseLLM\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"PromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt Template\",\"advanced\":false,\"dynamic\":false,\"info\":\"Make sure the prompt has all variables filled.\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\n\\nclass PromptRunner(CustomComponent):\\n display_name: str = \\\"Prompt Runner\\\"\\n description: str = \\\"Run a Chain with the given PromptTemplate\\\"\\n beta: bool = True\\n field_config = {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt Template\\\",\\n \\\"info\\\": \\\"Make sure the prompt has all variables filled.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}) -> Document:\\n chain = prompt | llm\\n # The input is an empty dict because the prompt is already filled\\n result = chain.invoke(input=inputs)\\n if hasattr(result, \\\"content\\\"):\\n result = result.content\\n self.repr_value = result\\n return Document(page_content=str(result))\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"inputs\":{\"type\":\"dict\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Run a Chain with the given PromptTemplate\",\"base_classes\":[\"Document\"],\"display_name\":\"Prompt Runner\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"llm\":null,\"prompt\":null},\"output_types\":[\"PromptRunner\"],\"field_formatters\":{},\"beta\":true}},\"agents\":{\"ZeroShotAgent\":{\"template\":{\"callback_manager\":{\"type\":\"BaseCallbackManager\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callback_manager\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_parser\":{\"type\":\"AgentOutputParser\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tools\":{\"type\":\"BaseTool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"format_instructions\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":true,\"value\":\"Use the following format:\\n\\nQuestion: the input question you must answer\\nThought: you should always think about what to do\\nAction: the action to take, should be one of [{tool_names}]\\nAction Input: the input to the action\\nObservation: the result of the action\\n... (this Thought/Action/Action Input/Observation can repeat N times)\\nThought: I now know the final answer\\nFinal Answer: the final answer to the original input question\",\"fileTypes\":[],\"password\":false,\"name\":\"format_instructions\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_variables\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"Answer the following questions as best you can. You have access to the following tools:\",\"fileTypes\":[],\"password\":false,\"name\":\"prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"Begin!\\n\\nQuestion: {input}\\nThought:{agent_scratchpad}\",\"fileTypes\":[],\"password\":false,\"name\":\"suffix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ZeroShotAgent\"},\"description\":\"Construct an agent from an LLM and tools.\",\"base_classes\":[\"ZeroShotAgent\",\"BaseSingleActionAgent\",\"Agent\",\"Callable\"],\"display_name\":\"ZeroShotAgent\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"JsonAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"toolkit\":{\"type\":\"BaseToolkit\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"json_agent\"},\"description\":\"Construct a json agent from an LLM and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"JsonAgent\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/openapi\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"CSVAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectorstoreinfo\":{\"type\":\"VectorStoreInfo\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstoreinfo\",\"display_name\":\"Vector Store Info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"vectorstore_agent\"},\"description\":\"Construct an agent from a Vector Store.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"VectorStoreAgent\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreRouterAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectorstoreroutertoolkit\":{\"type\":\"VectorStoreRouterToolkit\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstoreroutertoolkit\",\"display_name\":\"Vector Store Router Toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"vectorstorerouter_agent\"},\"description\":\"Construct an agent from a Vector Store Router.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"VectorStoreRouterAgent\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SQLAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"database_uri\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"database_uri\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"sql_agent\"},\"description\":\"Construct an SQL agent from an LLM and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"SQLAgent\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"AgentInitializer\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tools\":{\"type\":\"Tool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"agent\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"AgentInitializer\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n }\\n\\n def build(\\n self, agent: str, llm: BaseLanguageModel, memory: BaseChatMemory, tools: List[Tool], max_iterations: int\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"max_iterations\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"AgentExecutor\",\"Chain\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"max_iterations\":null,\"memory\":null,\"tools\":null},\"output_types\":[\"AgentInitializer\"],\"field_formatters\":{},\"beta\":true},\"OpenAIConversationalAgent\":{\"template\":{\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"system_message\":{\"type\":\"SystemMessagePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"system_message\",\"display_name\":\"System Message\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tools\":{\"type\":\"Tool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langchain.agents.agent import AgentExecutor\\nfrom langchain.agents.agent_toolkits.conversational_retrieval.openai_functions import _get_default_system_message\\nfrom langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent\\nfrom langchain.chat_models import ChatOpenAI\\nfrom langchain.memory.token_buffer import ConversationTokenBufferMemory\\nfrom langchain.prompts import SystemMessagePromptTemplate\\nfrom langchain.prompts.chat import MessagesPlaceholder\\nfrom langchain.schema.memory import BaseMemory\\nfrom langchain.tools import Tool\\nfrom langflow import CustomComponent\\n\\n\\nclass ConversationalAgent(CustomComponent):\\n display_name: str = \\\"OpenAI Conversational Agent\\\"\\n description: str = \\\"Conversational Agent that can use OpenAI's function calling API\\\"\\n\\n def build_config(self):\\n openai_function_models = [\\n \\\"gpt-4-1106-preview\\\",\\n \\\"gpt-3.5-turbo\\\",\\n \\\"gpt-3.5-turbo-16k\\\",\\n \\\"gpt-4\\\",\\n \\\"gpt-4-32k\\\",\\n ]\\n return {\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"system_message\\\": {\\\"display_name\\\": \\\"System Message\\\"},\\n \\\"max_token_limit\\\": {\\\"display_name\\\": \\\"Max Token Limit\\\"},\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": openai_function_models,\\n \\\"value\\\": openai_function_models[0],\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_name: str,\\n openai_api_key: str,\\n tools: List[Tool],\\n openai_api_base: Optional[str] = None,\\n memory: Optional[BaseMemory] = None,\\n system_message: Optional[SystemMessagePromptTemplate] = None,\\n max_token_limit: int = 2000,\\n ) -> AgentExecutor:\\n llm = ChatOpenAI(\\n model=model_name,\\n api_key=openai_api_key,\\n base_url=openai_api_base,\\n )\\n if not memory:\\n memory_key = \\\"chat_history\\\"\\n memory = ConversationTokenBufferMemory(\\n memory_key=memory_key,\\n return_messages=True,\\n output_key=\\\"output\\\",\\n llm=llm,\\n max_token_limit=max_token_limit,\\n )\\n else:\\n memory_key = memory.memory_key # type: ignore\\n\\n _system_message = system_message or _get_default_system_message()\\n prompt = OpenAIFunctionsAgent.create_prompt(\\n system_message=_system_message, # type: ignore\\n extra_prompt_messages=[MessagesPlaceholder(variable_name=memory_key)],\\n )\\n agent = OpenAIFunctionsAgent(\\n llm=llm,\\n tools=tools,\\n prompt=prompt, # type: ignore\\n )\\n return AgentExecutor(\\n agent=agent,\\n tools=tools, # type: ignore\\n memory=memory,\\n verbose=True,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"max_token_limit\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":2000,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"max_token_limit\",\"display_name\":\"Max Token Limit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"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\":false,\"dynamic\":false,\"info\":\"\"},\"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\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Conversational Agent that can use OpenAI's function calling API\",\"base_classes\":[\"AgentExecutor\",\"Chain\"],\"display_name\":\"OpenAI Conversational Agent\",\"documentation\":\"\",\"custom_fields\":{\"max_token_limit\":null,\"memory\":null,\"model_name\":null,\"openai_api_base\":null,\"openai_api_key\":null,\"system_message\":null,\"tools\":null},\"output_types\":[\"OpenAIConversationalAgent\"],\"field_formatters\":{},\"beta\":true}},\"prompts\":{\"ChatMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\"},\"prompt\":{\"type\":\"prompt\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"role\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"role\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"ChatMessagePromptTemplate\"},\"description\":\"Chat message prompt template.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"ChatMessagePromptTemplate\",\"BaseMessagePromptTemplate\"],\"display_name\":\"ChatMessagePromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ChatPromptTemplate\":{\"template\":{\"messages\":{\"type\":\"BaseMessagePromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"messages\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"output_parser\":{\"type\":\"BaseOutputParser\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"input_types\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"input_variables\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"partial_variables\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"validate_template\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"ChatPromptTemplate\"},\"description\":\"A prompt template for chat models.\",\"base_classes\":[\"BaseChatPromptTemplate\",\"BasePromptTemplate\",\"ChatPromptTemplate\"],\"display_name\":\"ChatPromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"HumanMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\"},\"prompt\":{\"type\":\"prompt\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"HumanMessagePromptTemplate\"},\"description\":\"Human message prompt template. This is a message sent from the user.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"HumanMessagePromptTemplate\",\"BaseMessagePromptTemplate\"],\"display_name\":\"HumanMessagePromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"PromptTemplate\":{\"template\":{\"output_parser\":{\"type\":\"BaseOutputParser\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"input_types\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"input_variables\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"partial_variables\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"template\":{\"type\":\"prompt\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"template_format\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"fileTypes\":[],\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"validate_template\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"PromptTemplate\"},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"BasePromptTemplate\",\"PromptTemplate\",\"StringPromptTemplate\"],\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SystemMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\"},\"prompt\":{\"type\":\"prompt\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"SystemMessagePromptTemplate\"},\"description\":\"System message prompt template.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"SystemMessagePromptTemplate\",\"BaseMessagePromptTemplate\"],\"display_name\":\"SystemMessagePromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false}},\"llms\":{\"Anthropic\":{\"template\":{\"anthropic_api_key\":{\"type\":\"SecretStr\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"anthropic_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"count_tokens\":{\"type\":\"Callable[[str], int]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"count_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"AI_PROMPT\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"AI_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"HUMAN_PROMPT\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"HUMAN_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"anthropic_api_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"anthropic_api_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"max_tokens_to_sample\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"password\":false,\"name\":\"max_tokens_to_sample\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"claude-2\",\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Anthropic\"},\"description\":\"Anthropic large language models.\",\"base_classes\":[\"LLM\",\"BaseLanguageModel\",\"_AnthropicCommon\",\"BaseLLM\",\"Anthropic\"],\"display_name\":\"Anthropic\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Cohere\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cohere_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"frequency_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"p\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"presence_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.75,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"truncate\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"truncate\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"user_agent\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"langchain\",\"fileTypes\":[],\"password\":false,\"name\":\"user_agent\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Cohere\"},\"description\":\"Cohere large language models.\",\"base_classes\":[\"LLM\",\"BaseLanguageModel\",\"Cohere\",\"BaseLLM\",\"BaseCohere\"],\"display_name\":\"Cohere\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"CTransformers\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"config\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{\\n \\\"top_k\\\": 40,\\n \\\"top_p\\\": 0.95,\\n \\\"temperature\\\": 0.8,\\n \\\"repetition_penalty\\\": 1.1,\\n \\\"last_n_tokens\\\": 64,\\n \\\"seed\\\": -1,\\n \\\"max_new_tokens\\\": 256,\\n \\\"stop\\\": null,\\n \\\"stream\\\": false,\\n \\\"reset\\\": true,\\n \\\"batch_size\\\": 8,\\n \\\"threads\\\": -1,\\n \\\"context_length\\\": -1,\\n \\\"gpu_layers\\\": 0\\n}\",\"fileTypes\":[],\"password\":false,\"name\":\"config\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"lib\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"lib\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_file\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_file\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CTransformers\"},\"description\":\"C Transformers LLM models.\",\"base_classes\":[\"LLM\",\"BaseLanguageModel\",\"BaseLLM\",\"CTransformers\"],\"display_name\":\"CTransformers\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"HuggingFaceHub\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"huggingfacehub_api_token\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"HuggingFace Hub API Token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"repo_id\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"gpt2\",\"fileTypes\":[],\"password\":false,\"name\":\"repo_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"task\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"text-generation\",\"fileTypes\":[],\"password\":false,\"options\":[\"text-generation\",\"text2text-generation\",\"summarization\"],\"name\":\"task\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"HuggingFaceHub\"},\"description\":\"HuggingFaceHub models.\",\"base_classes\":[\"LLM\",\"BaseLanguageModel\",\"HuggingFaceHub\",\"BaseLLM\"],\"display_name\":\"HuggingFaceHub\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/huggingface_hub\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"LlamaCpp\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"grammar\":{\"type\":\"ForwardRef('str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"grammar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"echo\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"echo\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"f16_kv\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"f16_kv\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"grammar_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"grammar_path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"last_n_tokens_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":64,\"fileTypes\":[],\"password\":false,\"name\":\"last_n_tokens_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"logits_all\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"logits_all\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"logprobs\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"logprobs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"lora_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"lora_base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"lora_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"lora_path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"password\":true,\"name\":\"max_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n_batch\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":8,\"fileTypes\":[],\"password\":false,\"name\":\"n_batch\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"n_ctx\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":512,\"fileTypes\":[],\"password\":false,\"name\":\"n_ctx\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"n_gpu_layers\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"n_gpu_layers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"n_parts\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"password\":false,\"name\":\"n_parts\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"n_threads\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"n_threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.1,\"fileTypes\":[],\"password\":false,\"name\":\"repeat_penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"rope_freq_base\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10000.0,\"fileTypes\":[],\"password\":false,\"name\":\"rope_freq_base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"rope_freq_scale\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"password\":false,\"name\":\"rope_freq_scale\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"seed\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"password\":false,\"name\":\"seed\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"password\":false,\"name\":\"stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"suffix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"use_mlock\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"use_mlock\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"use_mmap\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"use_mmap\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"vocab_only\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"vocab_only\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"LlamaCpp\"},\"description\":\"llama.cpp model.\",\"base_classes\":[\"LLM\",\"BaseLanguageModel\",\"LlamaCpp\",\"BaseLLM\"],\"display_name\":\"LlamaCpp\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"OpenAI\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"allowed_special\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"batch_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":20,\"fileTypes\":[],\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"best_of\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_query\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"disallowed_special\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"all\",\"fileTypes\":[],\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"frequency_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0,\"fileTypes\":[],\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"http_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"logit_bias\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":2,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"text-davinci-003\",\"fileTypes\":[],\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_api_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\"},\"openai_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_organization\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_proxy\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"presence_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0,\"fileTypes\":[],\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.7,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"tiktoken_model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"OpenAI\",\"BaseOpenAI\",\"BaseLLM\"],\"display_name\":\"OpenAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VertexAI\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client_preview\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client_preview\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"password\":false,\"name\":\"max_output_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text-bison\",\"fileTypes\":[],\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"project\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"request_parallelism\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"password\":false,\"name\":\"request_parallelism\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"tuned_model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tuned_model_name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"VertexAI\"},\"description\":\"Google Vertex AI large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"_VertexAIBase\",\"_VertexAICommon\",\"BaseLLM\",\"VertexAI\"],\"display_name\":\"VertexAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/google_vertex_ai_palm\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ChatAnthropic\":{\"template\":{\"anthropic_api_key\":{\"type\":\"SecretStr\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"anthropic_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"count_tokens\":{\"type\":\"Callable[[str], int]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"count_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"AI_PROMPT\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"AI_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"HUMAN_PROMPT\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"HUMAN_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"anthropic_api_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"anthropic_api_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"max_tokens_to_sample\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"password\":false,\"name\":\"max_tokens_to_sample\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"claude-2\",\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ChatAnthropic\"},\"description\":\"`Anthropic` chat large language models.\",\"base_classes\":[\"_AnthropicCommon\",\"BaseLanguageModel\",\"BaseChatModel\",\"ChatAnthropic\",\"BaseLLM\"],\"display_name\":\"ChatAnthropic\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ChatOpenAI\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"default_query\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"http_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":2,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"fileTypes\":[],\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4-vision-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_api_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\"},\"openai_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_organization\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_proxy\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.7,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"tiktoken_model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseChatModel\",\"ChatOpenAI\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ChatVertexAI\":{\"template\":{\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client_preview\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client_preview\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"examples\":{\"type\":\"BaseMessage\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"examples\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"password\":false,\"name\":\"max_output_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":6,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat-bison\",\"fileTypes\":[],\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"project\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"request_parallelism\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"password\":false,\"name\":\"request_parallelism\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ChatVertexAI\"},\"description\":\"`Vertex AI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseChatModel\",\"_VertexAIBase\",\"_VertexAICommon\",\"ChatVertexAI\",\"BaseLLM\"],\"display_name\":\"ChatVertexAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/google_vertex_ai_palm\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"AmazonBedrock\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.bedrock import Bedrock\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass AmazonBedrockComponent(CustomComponent):\\n display_name: str = \\\"Amazon Bedrock\\\"\\n description: str = \\\"LLM model from Amazon Bedrock.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\n \\\"ai21.j2-grande-instruct\\\",\\n \\\"ai21.j2-jumbo-instruct\\\",\\n \\\"ai21.j2-mid\\\",\\n \\\"ai21.j2-mid-v1\\\",\\n \\\"ai21.j2-ultra\\\",\\n \\\"ai21.j2-ultra-v1\\\",\\n \\\"anthropic.claude-instant-v1\\\",\\n \\\"anthropic.claude-v1\\\",\\n \\\"anthropic.claude-v2\\\",\\n \\\"cohere.command-text-v14\\\",\\n ],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"streaming\\\": {\\\"display_name\\\": \\\"Streaming\\\", \\\"field_type\\\": \\\"bool\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"anthropic.claude-instant-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = Bedrock(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"anthropic.claude-instant-v1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ai21.j2-grande-instruct\",\"ai21.j2-jumbo-instruct\",\"ai21.j2-mid\",\"ai21.j2-mid-v1\",\"ai21.j2-ultra\",\"ai21.j2-ultra-v1\",\"anthropic.claude-instant-v1\",\"anthropic.claude-v1\",\"anthropic.claude-v2\",\"cohere.command-text-v14\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"LLM model from Amazon Bedrock.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"Amazon Bedrock\",\"documentation\":\"\",\"custom_fields\":{\"credentials_profile_name\":null,\"model_id\":null},\"output_types\":[\"AmazonBedrock\"],\"field_formatters\":{},\"beta\":true},\"AnthropicLLM\":{\"template\":{\"anthropic_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"anthropic_api_key\",\"display_name\":\"Anthropic API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Anthropic API key.\"},\"api_endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_endpoint\",\"display_name\":\"API Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.chat_models.anthropic import ChatAnthropic\\nfrom langchain.llms.base import BaseLanguageModel\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AnthropicLLM(CustomComponent):\\n display_name: str = \\\"AnthropicLLM\\\"\\n description: str = \\\"Anthropic Chat&Completion large language models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"claude-2.1\\\",\\n \\\"claude-2.0\\\",\\n \\\"claude-instant-1.2\\\",\\n \\\"claude-instant-1\\\",\\n # Add more models as needed\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/anthropic\\\",\\n \\\"required\\\": True,\\n \\\"value\\\": \\\"claude-2.1\\\",\\n },\\n \\\"anthropic_api_key\\\": {\\n \\\"display_name\\\": \\\"Anthropic API Key\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"Your Anthropic API key.\\\",\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 256,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.7,\\n },\\n \\\"api_endpoint\\\": {\\n \\\"display_name\\\": \\\"API Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str,\\n anthropic_api_key: Optional[str] = None,\\n max_tokens: Optional[int] = None,\\n temperature: Optional[float] = None,\\n api_endpoint: Optional[str] = None,\\n ) -> BaseLanguageModel:\\n # Set default API endpoint if not provided\\n if not api_endpoint:\\n api_endpoint = \\\"https://api.anthropic.com\\\"\\n\\n try:\\n output = ChatAnthropic(\\n model_name=model,\\n anthropic_api_key=SecretStr(anthropic_api_key) if anthropic_api_key else None,\\n max_tokens_to_sample=max_tokens, # type: ignore\\n temperature=temperature,\\n anthropic_api_url=api_endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Anthropic API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"max_tokens\",\"display_name\":\"Max Tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"claude-2.1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"claude-2.1\",\"claude-2.0\",\"claude-instant-1.2\",\"claude-instant-1\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/anthropic\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"_type\":\"CustomComponent\"},\"description\":\"Anthropic Chat&Completion large language models.\",\"base_classes\":[\"BaseLanguageModel\"],\"display_name\":\"AnthropicLLM\",\"documentation\":\"\",\"custom_fields\":{\"anthropic_api_key\":null,\"api_endpoint\":null,\"max_tokens\":null,\"model\":null,\"temperature\":null},\"output_types\":[\"AnthropicLLM\"],\"field_formatters\":{},\"beta\":true},\"HuggingFaceEndpoints\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.huggingface_endpoint import HuggingFaceEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass HuggingFaceEndpointsComponent(CustomComponent):\\n display_name: str = \\\"Hugging Face Inference API\\\"\\n description: str = \\\"LLM model from Hugging Face Inference API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\", \\\"password\\\": True},\\n \\\"task\\\": {\\n \\\"display_name\\\": \\\"Task\\\",\\n \\\"options\\\": [\\\"text2text-generation\\\", \\\"text-generation\\\", \\\"summarization\\\"],\\n },\\n \\\"huggingfacehub_api_token\\\": {\\\"display_name\\\": \\\"API token\\\", \\\"password\\\": True},\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Keyword Arguments\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n endpoint_url: str,\\n task: str = \\\"text2text-generation\\\",\\n huggingfacehub_api_token: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n ) -> BaseLLM:\\n try:\\n output = HuggingFaceEndpoint(\\n endpoint_url=endpoint_url,\\n task=task,\\n huggingfacehub_api_token=huggingfacehub_api_token,\\n model_kwargs=model_kwargs,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to HuggingFace Endpoints API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"endpoint_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"huggingfacehub_api_token\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"API token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Keyword Arguments\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"task\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"text2text-generation\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"text2text-generation\",\"text-generation\",\"summarization\"],\"name\":\"task\",\"display_name\":\"Task\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"LLM model from Hugging Face Inference API.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"Hugging Face Inference API\",\"documentation\":\"\",\"custom_fields\":{\"endpoint_url\":null,\"huggingfacehub_api_token\":null,\"model_kwargs\":null,\"task\":null},\"output_types\":[\"HuggingFaceEndpoints\"],\"field_formatters\":{},\"beta\":true},\"BaiduQianfanChatEndpoints\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint\\nfrom langchain.llms.base import BaseLLM\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass QianfanChatEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanChatEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan chat models. Get more detail from \\\"\\n \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanChatEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=SecretStr(qianfan_ak) if qianfan_ak else None,\\n qianfan_sk=SecretStr(qianfan_sk) if qianfan_sk else None,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\"},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\"},\"penalty_score\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"qianfan_ak\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\"},\"qianfan_sk\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"_type\":\"CustomComponent\"},\"description\":\"Baidu Qianfan chat models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"QianfanChatEndpoint\",\"documentation\":\"\",\"custom_fields\":{\"endpoint\":null,\"model\":null,\"penalty_score\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"temperature\":null,\"top_p\":null},\"output_types\":[\"BaiduQianfanChatEndpoints\"],\"field_formatters\":{},\"beta\":true},\"BaiduQianfanLLMEndpoints\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.baidu_qianfan_endpoint import QianfanLLMEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass QianfanLLMEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanLLMEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan hosted open source or customized models. \\\"\\n \\\"Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanLLMEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=qianfan_ak,\\n qianfan_sk=qianfan_sk,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\"},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\"},\"penalty_score\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"qianfan_ak\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\"},\"qianfan_sk\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"_type\":\"CustomComponent\"},\"description\":\"Baidu Qianfan hosted open source or customized models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"QianfanLLMEndpoint\",\"documentation\":\"\",\"custom_fields\":{\"endpoint\":null,\"model\":null,\"penalty_score\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"temperature\":null,\"top_p\":null},\"output_types\":[\"BaiduQianfanLLMEndpoints\"],\"field_formatters\":{},\"beta\":true}},\"memories\":{\"ConversationBufferMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationBufferMemory\"},\"description\":\"Buffer for storing conversation memory.\",\"base_classes\":[\"BaseChatMemory\",\"BaseMemory\",\"ConversationBufferMemory\"],\"display_name\":\"ConversationBufferMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ConversationBufferWindowMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationBufferWindowMemory\"},\"description\":\"Buffer for storing conversation memory inside a limited size window.\",\"base_classes\":[\"BaseChatMemory\",\"ConversationBufferWindowMemory\",\"BaseMemory\"],\"display_name\":\"ConversationBufferWindowMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer_window\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ConversationEntityMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"entity_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"entity_store\":{\"type\":\"BaseEntityStore\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_store\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"entity_summarization_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_summarization_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chat_history_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"history\",\"fileTypes\":[],\"password\":false,\"name\":\"chat_history_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"entity_cache\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationEntityMemory\"},\"description\":\"Entity extractor & summarizer memory.\",\"base_classes\":[\"BaseChatMemory\",\"BaseMemory\",\"ConversationEntityMemory\"],\"display_name\":\"ConversationEntityMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/entity_memory_with_sqlite\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ConversationKGMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"entity_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"kg\":{\"type\":\"NetworkxEntityGraph\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"kg\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"knowledge_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"knowledge_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"summary_message_cls\":{\"type\":\"Type[langchain_core.messages.base.BaseMessage]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationKGMemory\"},\"description\":\"Knowledge graph conversation memory.\",\"base_classes\":[\"BaseChatMemory\",\"ConversationKGMemory\",\"BaseMemory\"],\"display_name\":\"ConversationKGMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/kg\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ConversationSummaryMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"summary_message_cls\":{\"type\":\"Type[langchain_core.messages.base.BaseMessage]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"buffer\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":false,\"name\":\"buffer\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ConversationSummaryMemory\"},\"description\":\"Conversation summarizer to chat memory.\",\"base_classes\":[\"BaseChatMemory\",\"ConversationSummaryMemory\",\"BaseMemory\",\"SummarizerMixin\"],\"display_name\":\"ConversationSummaryMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/summary\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"MongoDBChatMessageHistory\":{\"template\":{\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"connection_string\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"MongoDB connection string (e.g mongodb://mongo_user:password123@mongo:27017)\"},\"database_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"database_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"MongoDBChatMessageHistory\"},\"description\":\"Memory store with MongoDB\",\"base_classes\":[\"MongoDBChatMessageHistory\",\"BaseChatMessageHistory\"],\"display_name\":\"MongoDBChatMessageHistory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"MotorheadMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client_id\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"context\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"context\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"timeout\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"https://api.getmetal.io/v1/motorhead\",\"fileTypes\":[],\"password\":false,\"name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"MotorheadMemory\"},\"description\":\"Chat message memory backed by Motorhead service.\",\"base_classes\":[\"BaseChatMemory\",\"MotorheadMemory\",\"BaseMemory\"],\"display_name\":\"MotorheadMemory\",\"documentation\":\"https://python.langchain.com/docs/integrations/memory/motorhead_memory\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"PostgresChatMessageHistory\":{\"template\":{\"connection_string\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"postgresql://postgres:mypassword@localhost/chat_history\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"table_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"table_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"PostgresChatMessageHistory\"},\"description\":\"Memory store with Postgres\",\"base_classes\":[\"PostgresChatMessageHistory\",\"BaseChatMessageHistory\"],\"display_name\":\"PostgresChatMessageHistory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/postgres_chat_message_history\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreRetrieverMemory\":{\"template\":{\"retriever\":{\"type\":\"VectorStoreRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"exclude_input_keys\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"exclude_input_keys\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\"},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_docs\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"return_docs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"VectorStoreRetrieverMemory\"},\"description\":\"VectorStoreRetriever-backed memory.\",\"base_classes\":[\"BaseMemory\",\"VectorStoreRetrieverMemory\"],\"display_name\":\"VectorStoreRetrieverMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false}},\"tools\":{\"Calculator\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Calculator\"},\"description\":\"Useful for when you need to answer questions about math.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Calculator\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Search\":{\"template\":{\"aiosession\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"serpapi_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"serpapi_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Search\"},\"description\":\"A search engine. Useful for when you need to answer questions about current events. Input should be a search query.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Search\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Tool\":{\"template\":{\"func\":{\"type\":\"Callable\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"func\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_direct\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Tool\"},\"description\":\"Converts a chain, agent or function into a tool.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Tool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"PythonFunctionTool\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"return_direct\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"PythonFunctionTool\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"PythonFunctionTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"PythonFunction\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"PythonFunction\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"Callable\"],\"display_name\":\"PythonFunction\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"JsonSpec\":{\"template\":{\"path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\",\".yaml\",\".yml\"],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_value_length\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_value_length\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"JsonSpec\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"JsonSpec\"],\"display_name\":\"JsonSpec\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"BingSearchRun\":{\"template\":{\"api_wrapper\":{\"type\":\"BingSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"BingSearchRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseTool\",\"BingSearchRun\"],\"display_name\":\"BingSearchRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GoogleSearchResults\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"num_results\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":4,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GoogleSearchResults\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"GoogleSearchResults\",\"BaseTool\"],\"display_name\":\"GoogleSearchResults\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GoogleSearchRun\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GoogleSearchRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseTool\",\"GoogleSearchRun\"],\"display_name\":\"GoogleSearchRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GoogleSerperRun\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSerperAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GoogleSerperRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseTool\",\"GoogleSerperRun\"],\"display_name\":\"GoogleSerperRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"InfoSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"InfoSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"BaseTool\",\"InfoSQLDatabaseTool\"],\"display_name\":\"InfoSQLDatabaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"JsonGetValueTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"JsonGetValueTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseTool\",\"JsonGetValueTool\"],\"display_name\":\"JsonGetValueTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"JsonListKeysTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"JsonListKeysTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"JsonListKeysTool\",\"BaseTool\"],\"display_name\":\"JsonListKeysTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"ListSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ListSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"ListSQLDatabaseTool\",\"BaseTool\"],\"display_name\":\"ListSQLDatabaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"QuerySQLDataBaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"QuerySQLDataBaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"BaseTool\",\"QuerySQLDataBaseTool\"],\"display_name\":\"QuerySQLDataBaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RequestsDeleteTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RequestsDeleteTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsDeleteTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsDeleteTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RequestsGetTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RequestsGetTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsGetTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsGetTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RequestsPatchTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RequestsPatchTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsPatchTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsPatchTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RequestsPostTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RequestsPostTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsPostTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsPostTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"RequestsPutTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"RequestsPutTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseRequestsTool\",\"BaseTool\",\"RequestsPutTool\"],\"display_name\":\"RequestsPutTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"WikipediaQueryRun\":{\"template\":{\"api_wrapper\":{\"type\":\"WikipediaAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"WikipediaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"WikipediaQueryRun\",\"BaseTool\"],\"display_name\":\"WikipediaQueryRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"WolframAlphaQueryRun\":{\"template\":{\"api_wrapper\":{\"type\":\"WolframAlphaAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"WolframAlphaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseTool\",\"WolframAlphaQueryRun\"],\"display_name\":\"WolframAlphaQueryRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false}},\"toolkits\":{\"JsonToolkit\":{\"template\":{\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"JsonToolkit\"},\"description\":\"Toolkit for interacting with a JSON spec.\",\"base_classes\":[\"JsonToolkit\",\"BaseToolkit\",\"Tool\"],\"display_name\":\"JsonToolkit\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"OpenAPIToolkit\":{\"template\":{\"json_agent\":{\"type\":\"AgentExecutor\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"json_agent\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"OpenAPIToolkit\"},\"description\":\"Toolkit for interacting with an OpenAPI API.\",\"base_classes\":[\"OpenAPIToolkit\",\"BaseToolkit\",\"Tool\"],\"display_name\":\"OpenAPIToolkit\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreInfo\":{\"template\":{\"vectorstore\":{\"type\":\"VectorStore\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"vectorstore\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"VectorStoreInfo\"},\"description\":\"Information about a VectorStore.\",\"base_classes\":[\"VectorStoreInfo\"],\"display_name\":\"VectorStoreInfo\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreRouterToolkit\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectorstores\":{\"type\":\"VectorStoreInfo\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"vectorstores\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"VectorStoreRouterToolkit\"},\"description\":\"Toolkit for routing between Vector Stores.\",\"base_classes\":[\"VectorStoreRouterToolkit\",\"BaseToolkit\",\"Tool\"],\"display_name\":\"VectorStoreRouterToolkit\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VectorStoreToolkit\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectorstore_info\":{\"type\":\"VectorStoreInfo\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"vectorstore_info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"VectorStoreToolkit\"},\"description\":\"Toolkit for interacting with a Vector Store.\",\"base_classes\":[\"VectorStoreToolkit\",\"BaseToolkit\",\"Tool\"],\"display_name\":\"VectorStoreToolkit\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Metaphor\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Union\\n\\nfrom langchain.agents import tool\\nfrom langchain.agents.agent_toolkits.base import BaseToolkit\\nfrom langchain.tools import Tool\\nfrom metaphor_python import Metaphor # type: ignore\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass MetaphorToolkit(CustomComponent):\\n display_name: str = \\\"Metaphor\\\"\\n description: str = \\\"Metaphor Toolkit\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/tools/metaphor_search\\\"\\n beta: bool = True\\n # api key should be password = True\\n field_config = {\\n \\\"metaphor_api_key\\\": {\\\"display_name\\\": \\\"Metaphor API Key\\\", \\\"password\\\": True},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n metaphor_api_key: str,\\n use_autoprompt: bool = True,\\n search_num_results: int = 5,\\n similar_num_results: int = 5,\\n ) -> Union[Tool, BaseToolkit]:\\n # If documents, then we need to create a Vectara instance using .from_documents\\n client = Metaphor(api_key=metaphor_api_key)\\n\\n @tool\\n def search(query: str):\\n \\\"\\\"\\\"Call search engine with a query.\\\"\\\"\\\"\\n return client.search(query, use_autoprompt=use_autoprompt, num_results=search_num_results)\\n\\n @tool\\n def get_contents(ids: List[str]):\\n \\\"\\\"\\\"Get contents of a webpage.\\n\\n The ids passed in should be a list of ids as fetched from `search`.\\n \\\"\\\"\\\"\\n return client.get_contents(ids)\\n\\n @tool\\n def find_similar(url: str):\\n \\\"\\\"\\\"Get search results similar to a given URL.\\n\\n The url passed in should be a URL returned from `search`\\n \\\"\\\"\\\"\\n return client.find_similar(url, num_results=similar_num_results)\\n\\n return [search, get_contents, find_similar] # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\"},\"metaphor_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"metaphor_api_key\",\"display_name\":\"Metaphor API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_num_results\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"search_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"similar_num_results\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"similar_num_results\",\"display_name\":\"similar_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"use_autoprompt\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"use_autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Metaphor Toolkit\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseToolkit\"],\"display_name\":\"Metaphor\",\"documentation\":\"https://python.langchain.com/docs/integrations/tools/metaphor_search\",\"custom_fields\":{\"metaphor_api_key\":null,\"search_num_results\":null,\"similar_num_results\":null,\"use_autoprompt\":null},\"output_types\":[\"Metaphor\"],\"field_formatters\":{},\"beta\":true}},\"wrappers\":{\"TextRequestsWrapper\":{\"template\":{\"aiosession\":{\"type\":\"ClientSession\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"auth\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"auth\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"password\":false,\"name\":\"headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"TextRequestsWrapper\"},\"description\":\"Lightweight wrapper around requests library.\",\"base_classes\":[\"TextRequestsWrapper\"],\"display_name\":\"TextRequestsWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SQLDatabase\":{\"template\":{\"database_uri\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"database_uri\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"engine_args\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"engine_args\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SQLDatabase\"},\"description\":\"Construct a SQLAlchemy engine from URI.\",\"base_classes\":[\"SQLDatabase\",\"Callable\"],\"display_name\":\"SQLDatabase\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false}},\"embeddings\":{\"OpenAIEmbeddings\":{\"template\":{\"allowed_special\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"chunk_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1000,\"fileTypes\":[],\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"default_headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"default_query\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"default_query\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"deployment\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"fileTypes\":[],\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"disallowed_special\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"all\",\"fileTypes\":[],\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"embedding_ctx_length\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":8191,\"fileTypes\":[],\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"headers\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"http_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"http_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":2,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"openai_api_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"openai_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"openai_api_type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"openai_api_version\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"openai_organization\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"openai_proxy\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"retry_max_seconds\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":20,\"fileTypes\":[],\"password\":false,\"name\":\"retry_max_seconds\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"retry_min_seconds\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":4,\"fileTypes\":[],\"password\":false,\"name\":\"retry_min_seconds\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"show_progress_bar\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"skip_empty\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"tiktoken_enabled\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"password\":true,\"name\":\"tiktoken_enabled\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tiktoken_model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"CohereEmbeddings\":{\"template\":{\"async_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"cohere_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"embed-english-v2.0\",\"fileTypes\":[],\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"request_timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"truncate\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"truncate\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"user_agent\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"fileTypes\":[],\"password\":false,\"name\":\"user_agent\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CohereEmbeddings\"},\"description\":\"Cohere embedding models.\",\"base_classes\":[\"Embeddings\",\"CohereEmbeddings\"],\"display_name\":\"CohereEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/cohere\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"HuggingFaceEmbeddings\":{\"template\":{\"cache_folder\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"cache_folder\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"encode_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"encode_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"sentence-transformers/all-mpnet-base-v2\",\"fileTypes\":[],\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"multi_process\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"multi_process\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"HuggingFaceEmbeddings\"},\"description\":\"HuggingFace sentence_transformers embedding models.\",\"base_classes\":[\"Embeddings\",\"HuggingFaceEmbeddings\"],\"display_name\":\"HuggingFaceEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"VertexAIEmbeddings\":{\"template\":{\"client\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"client_preview\":{\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client_preview\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"password\":false,\"name\":\"location\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"password\":true,\"name\":\"max_output_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6,\"fileTypes\":[],\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"textembedding-gecko\",\"fileTypes\":[],\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"password\":false,\"name\":\"n\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"project\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"project\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"request_parallelism\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"password\":false,\"name\":\"request_parallelism\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"_type\":\"VertexAIEmbeddings\"},\"description\":\"Google Cloud VertexAI embedding models.\",\"base_classes\":[\"_VertexAIBase\",\"_VertexAICommon\",\"Embeddings\",\"VertexAIEmbeddings\"],\"display_name\":\"VertexAIEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/google_vertex_ai_palm\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"AmazonBedrockEmbeddings\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"endpoint_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"model_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"field_formatters\":{},\"beta\":true}},\"vectorstores\":{\"FAISS\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"folder_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"folder_path\",\"display_name\":\"Local Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ids\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"FAISS\"},\"description\":\"Construct FAISS wrapper from raw documents.\",\"base_classes\":[\"VectorStore\",\"FAISS\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"FAISS\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"MongoDBAtlasVectorSearch\":{\"template\":{\"collection\":{\"type\":\"Collection[MongoDBDocumentType]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"collection\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"collection_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"db_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db_name\",\"display_name\":\"Database Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"mongodb_atlas_cluster_uri\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mongodb_atlas_cluster_uri\",\"display_name\":\"MongoDB Atlas Cluster URI\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"MongoDBAtlasVectorSearch\"},\"description\":\"Construct a `MongoDB Atlas Vector Search` vector store from raw documents.\",\"base_classes\":[\"VectorStore\",\"MongoDBAtlasVectorSearch\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"MongoDB Atlas\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Pinecone\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1000,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"batch_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":32,\"fileTypes\":[],\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ids\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"index_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"namespace\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"namespace\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"pinecone_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pinecone_api_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"pinecone_env\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pinecone_env\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"pool_threads\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":4,\"fileTypes\":[],\"password\":false,\"name\":\"pool_threads\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"text_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"text\",\"fileTypes\":[],\"password\":true,\"name\":\"text_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"upsert_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"upsert_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Pinecone\"},\"description\":\"Construct Pinecone wrapper from raw documents.\",\"base_classes\":[\"VectorStore\",\"Pinecone\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Pinecone\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/pinecone\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Qdrant\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"hnsw_config\":{\"type\":\"common_types.HnswConfigDiff\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"hnsw_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"init_from\":{\"type\":\"common_types.InitFrom\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"init_from\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"optimizers_config\":{\"type\":\"common_types.OptimizersConfigDiff\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"optimizers_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"quantization_config\":{\"type\":\"common_types.QuantizationConfig\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"quantization_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"wal_config\":{\"type\":\"common_types.WalConfigDiff\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"wal_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"batch_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":64,\"fileTypes\":[],\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"collection_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"content_payload_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"page_content\",\"fileTypes\":[],\"password\":false,\"name\":\"content_payload_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"distance_func\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"Cosine\",\"fileTypes\":[],\"password\":false,\"name\":\"distance_func\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"force_recreate\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"force_recreate\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"grpc_port\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6334,\"fileTypes\":[],\"password\":false,\"name\":\"grpc_port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"host\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"https\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"https\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"ids\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\":memory:\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\":memory:\",\"fileTypes\":[],\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata_payload_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"metadata\",\"fileTypes\":[],\"password\":false,\"name\":\"metadata_payload_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"on_disk\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"on_disk\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"on_disk_payload\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"on_disk_payload\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"port\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6333,\"fileTypes\":[],\"password\":false,\"name\":\"port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"prefer_grpc\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"prefer_grpc\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"prefix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"replication_factor\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"replication_factor\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"shard_number\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"shard_number\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"timeout\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1}},\"url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"url\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"vector_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"vector_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"write_consistency_factor\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"write_consistency_factor\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Qdrant\"},\"description\":\"Construct Qdrant wrapper from a list of texts.\",\"base_classes\":[\"VectorStore\",\"Qdrant\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Qdrant\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/qdrant\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SupabaseVectorStore\":{\"template\":{\"client\":{\"type\":\"supabase.client.Client\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chunk_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":500,\"fileTypes\":[],\"password\":false,\"name\":\"chunk_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"ids\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"query_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"query_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"supabase_service_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"supabase_service_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"supabase_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"supabase_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"table_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"table_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SupabaseVectorStore\"},\"description\":\"Return VectorStore initialized from texts and embeddings.\",\"base_classes\":[\"VectorStore\",\"SupabaseVectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Supabase\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/supabase\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Weaviate\":{\"template\":{\"client\":{\"type\":\"weaviate.Client\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"relevance_score_fn\":{\"type\":\"Callable[[float], float]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"password\":false,\"name\":\"relevance_score_fn\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"batch_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"by_text\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"by_text\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client_kwargs\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"client_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"index_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadatas\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"text_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"text\",\"fileTypes\":[],\"password\":true,\"name\":\"text_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"weaviate_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"weaviate_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"weaviate_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"http://localhost:8080\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"http://localhost:8080\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"weaviate_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"Weaviate\"},\"description\":\"Construct Weaviate wrapper from raw documents.\",\"base_classes\":[\"VectorStore\",\"Weaviate\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Weaviate\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/weaviate\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"Redis\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"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\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\n\\nfrom langchain.vectorstores.redis import Redis\\nfrom langchain.schema import Document\\nfrom langchain.vectorstores.base import VectorStore\\nfrom langchain.embeddings.base import Embeddings\\n\\n\\nclass RedisComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using Redis.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Redis\\\"\\n description: str = \\\"Implementation of Vector Store using Redis\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/redis\\\"\\n beta = True\\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 \\\"index_name\\\": {\\\"display_name\\\": \\\"Index Name\\\", \\\"value\\\": \\\"your_index\\\"},\\n \\\"code\\\": {\\\"show\\\": False, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"redis_server_url\\\": {\\n \\\"display_name\\\": \\\"Redis Server Connection String\\\",\\n \\\"advanced\\\": False,\\n },\\n \\\"redis_index_name\\\": {\\\"display_name\\\": \\\"Redis Index\\\", \\\"advanced\\\": False},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n redis_server_url: str,\\n redis_index_name: str,\\n documents: Optional[Document] = None,\\n ) -> VectorStore:\\n \\\"\\\"\\\"\\n Builds the Vector Store or BaseRetriever object.\\n\\n Args:\\n - embedding (Embeddings): The embeddings to use for the Vector Store.\\n - documents (Optional[Document]): The documents to use for the Vector Store.\\n - redis_index_name (str): The name of the Redis index.\\n - redis_server_url (str): The URL for the Redis server.\\n\\n Returns:\\n - VectorStore: The Vector Store object.\\n \\\"\\\"\\\"\\n\\n return Redis.from_documents(\\n documents=documents, # type: ignore\\n embedding=embedding,\\n redis_url=redis_server_url,\\n index_name=redis_index_name,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"redis_index_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"redis_index_name\",\"display_name\":\"Redis Index\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"redis_server_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"redis_server_url\",\"display_name\":\"Redis Server Connection String\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Redis\",\"base_classes\":[\"VectorStore\"],\"display_name\":\"Redis\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/redis\",\"custom_fields\":{\"documents\":null,\"embedding\":null,\"redis_index_name\":null,\"redis_server_url\":null},\"output_types\":[\"Redis\"],\"field_formatters\":{},\"beta\":true},\"Chroma\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"embedding\":{\"type\":\"Embeddings\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chroma_server_cors_allow_origins\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"chroma_server_cors_allow_origins\",\"display_name\":\"Server CORS Allow Origins\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"chroma_server_grpc_port\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"chroma_server_grpc_port\",\"display_name\":\"Server gRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"chroma_server_host\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"chroma_server_host\",\"display_name\":\"Server Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"chroma_server_port\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"chroma_server_port\",\"display_name\":\"Server Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"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\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\nfrom langflow import CustomComponent\\n\\nfrom langchain.vectorstores import Chroma\\nfrom langchain.schema import Document\\nfrom langchain.vectorstores.base import VectorStore\\nfrom langchain.schema import BaseRetriever\\nfrom langchain.embeddings.base import Embeddings\\nimport chromadb # type: ignore\\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 beta: bool = True\\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 \\\"persist\\\": {\\\"display_name\\\": \\\"Persist\\\"},\\n \\\"persist_directory\\\": {\\\"display_name\\\": \\\"Persist Directory\\\"},\\n \\\"code\\\": {\\\"show\\\": False, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\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 persist: bool,\\n chroma_server_ssl_enabled: bool,\\n persist_directory: Optional[str] = None,\\n embedding: Optional[Embeddings] = None,\\n documents: Optional[Document] = 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 - persist_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 - persist (bool): Whether to persist the Vector Store or not.\\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 if documents is not None and embedding is not None:\\n return Chroma.from_documents(\\n documents=documents, # type: ignore\\n persist_directory=persist_directory if persist else None,\\n collection_name=collection_name,\\n embedding=embedding,\\n client_settings=chroma_settings,\\n )\\n\\n return Chroma(persist_directory=persist_directory, client_settings=chroma_settings)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"langflow\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"persist\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"persist\",\"display_name\":\"Persist\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"persist_directory\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"persist_directory\",\"display_name\":\"Persist Directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Chroma\",\"base_classes\":[\"VectorStore\",\"BaseRetriever\"],\"display_name\":\"Chroma\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/chroma\",\"custom_fields\":{\"chroma_server_cors_allow_origins\":null,\"chroma_server_grpc_port\":null,\"chroma_server_host\":null,\"chroma_server_port\":null,\"chroma_server_ssl_enabled\":null,\"collection_name\":null,\"documents\":null,\"embedding\":null,\"persist\":null,\"persist_directory\":null},\"output_types\":[\"Chroma\"],\"field_formatters\":{},\"beta\":true},\"pgvector\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"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\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, List\\nfrom langflow import CustomComponent\\n\\nfrom langchain.vectorstores.pgvector import PGVector\\nfrom langchain.schema import Document\\nfrom langchain.vectorstores.base import VectorStore\\nfrom langchain.embeddings.base import Embeddings\\n\\n\\nclass PostgresqlVectorComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using PostgreSQL.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"PGVector\\\"\\n description: str = \\\"Implementation of Vector Store using PostgreSQL\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/pgvector\\\"\\n beta = True\\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 \\\"index_name\\\": {\\\"display_name\\\": \\\"Index Name\\\", \\\"value\\\": \\\"your_index\\\"},\\n \\\"code\\\": {\\\"show\\\": True, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"pg_server_url\\\": {\\n \\\"display_name\\\": \\\"PostgreSQL Server Connection String\\\",\\n \\\"advanced\\\": False,\\n },\\n \\\"collection_name\\\": {\\\"display_name\\\": \\\"Table\\\", \\\"advanced\\\": False},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n pg_server_url: str,\\n collection_name: str,\\n documents: Optional[List[Document]] = None,\\n ) -> VectorStore:\\n \\\"\\\"\\\"\\n Builds the Vector Store or BaseRetriever object.\\n\\n Args:\\n - embedding (Embeddings): The embeddings to use for the Vector Store.\\n - documents (Optional[Document]): The documents to use for the Vector Store.\\n - collection_name (str): The name of the PG table.\\n - pg_server_url (str): The URL for the PG server.\\n\\n Returns:\\n - VectorStore: The Vector Store object.\\n \\\"\\\"\\\"\\n\\n try:\\n if documents is None:\\n return PGVector.from_existing_index(\\n embedding=embedding,\\n collection_name=collection_name,\\n connection_string=pg_server_url,\\n )\\n\\n return PGVector.from_documents(\\n embedding=embedding,\\n documents=documents,\\n collection_name=collection_name,\\n connection_string=pg_server_url,\\n )\\n except Exception as e:\\n raise RuntimeError(f\\\"Failed to build PGVector: {e}\\\")\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Table\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"pg_server_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pg_server_url\",\"display_name\":\"PostgreSQL Server Connection String\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using PostgreSQL\",\"base_classes\":[],\"display_name\":\"PGVector\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/pgvector\",\"custom_fields\":{\"collection_name\":null,\"documents\":null,\"embedding\":null,\"pg_server_url\":null},\"output_types\":[\"pgvector\"],\"field_formatters\":{},\"beta\":true},\"Vectara\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langchain.schema import BaseRetriever, Document\\nfrom langchain.vectorstores import Vectara\\nfrom langchain.vectorstores.base import VectorStore\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass VectaraComponent(CustomComponent):\\n display_name: str = \\\"Vectara\\\"\\n description: str = \\\"Implementation of Vector Store using Vectara\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/vectara\\\"\\n beta = True\\n # api key should be password = True\\n field_config = {\\n \\\"vectara_customer_id\\\": {\\\"display_name\\\": \\\"Vectara Customer ID\\\"},\\n \\\"vectara_corpus_id\\\": {\\\"display_name\\\": \\\"Vectara Corpus ID\\\"},\\n \\\"vectara_api_key\\\": {\\\"display_name\\\": \\\"Vectara API Key\\\", \\\"password\\\": True},\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n }\\n\\n def build(\\n self,\\n vectara_customer_id: str,\\n vectara_corpus_id: str,\\n vectara_api_key: str,\\n documents: Optional[Document] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n # If documents, then we need to create a Vectara instance using .from_documents\\n if documents is not None:\\n return Vectara.from_documents(\\n documents=documents, # type: ignore\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=\\\"langflow\\\",\\n )\\n\\n return Vectara(\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=\\\"langflow\\\",\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"vectara_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"vectara_api_key\",\"display_name\":\"Vectara API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectara_corpus_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectara_corpus_id\",\"display_name\":\"Vectara Corpus ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"vectara_customer_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectara_customer_id\",\"display_name\":\"Vectara Customer ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Vectara\",\"base_classes\":[\"VectorStore\",\"BaseRetriever\"],\"display_name\":\"Vectara\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/vectara\",\"custom_fields\":{\"documents\":null,\"vectara_api_key\":null,\"vectara_corpus_id\":null,\"vectara_customer_id\":null},\"output_types\":[\"Vectara\"],\"field_formatters\":{},\"beta\":true}},\"documentloaders\":{\"AZLyricsLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"AZLyricsLoader\"},\"description\":\"Load `AZLyrics` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"AZLyricsLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/azlyrics\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"AirbyteJSONLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"BSHTMLLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".html\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"BSHTMLLoader\"},\"description\":\"Load `HTML` files and parse them with `beautiful soup`.\",\"base_classes\":[\"Document\"],\"display_name\":\"BSHTMLLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"CSVLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"CoNLLULoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CoNLLULoader\"},\"description\":\"Load `CoNLL-U` files.\",\"base_classes\":[\"Document\"],\"display_name\":\"CoNLLULoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/conll-u\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"CollegeConfidentialLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CollegeConfidentialLoader\"},\"description\":\"Load `College Confidential` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"CollegeConfidentialLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/college_confidential\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"DirectoryLoader\":{\"template\":{\"glob\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"**/*.txt\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"glob\",\"display_name\":\"glob\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"load_hidden\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"False\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"load_hidden\",\"display_name\":\"Load hidden files\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"max_concurrency\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_concurrency\",\"display_name\":\"Max concurrency\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"recursive\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"True\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"recursive\",\"display_name\":\"Recursive\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"silent_errors\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"False\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"silent_errors\",\"display_name\":\"Silent errors\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"use_multithreading\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"True\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_multithreading\",\"display_name\":\"Use multithreading\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"DirectoryLoader\"},\"description\":\"Load from a directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"DirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/file_directory\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"EverNoteLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".xml\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"EverNoteLoader\"},\"description\":\"Load from `EverNote`.\",\"base_classes\":[\"Document\"],\"display_name\":\"EverNoteLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/evernote\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"FacebookChatLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"FacebookChatLoader\"},\"description\":\"Load `Facebook Chat` messages directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"FacebookChatLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/facebook_chat\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"GitLoader\":{\"template\":{\"branch\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"branch\",\"display_name\":\"Branch\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"clone_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"clone_url\",\"display_name\":\"Clone URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"file_filter\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"file_filter\",\"display_name\":\"File extensions (comma-separated)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"repo_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repo_path\",\"display_name\":\"Path to repository\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GitLoader\"},\"description\":\"Load `Git` repository files.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/git\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"GitbookLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_page\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_page\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GitbookLoader\"},\"description\":\"Load `GitBook` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitbookLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gitbook\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"GutenbergLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GutenbergLoader\"},\"description\":\"Load from `Gutenberg.org`.\",\"base_classes\":[\"Document\"],\"display_name\":\"GutenbergLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gutenberg\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"HNLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"HNLoader\"},\"description\":\"Load `Hacker News` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"HNLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/hacker_news\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"IFixitLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"IFixitLoader\"},\"description\":\"Load `iFixit` repair guides, device wikis and answers.\",\"base_classes\":[\"Document\"],\"display_name\":\"IFixitLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/ifixit\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"IMSDbLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"IMSDbLoader\"},\"description\":\"Load `IMSDb` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"IMSDbLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/imsdb\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"NotionDirectoryLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"NotionDirectoryLoader\"},\"description\":\"Load `Notion directory` dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"NotionDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/notion\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"PyPDFLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".pdf\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"PyPDFLoader\"},\"description\":\"Load PDF using pypdf into list of documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"PyPDFDirectoryLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"PyPDFDirectoryLoader\"},\"description\":\"Load a directory with `PDF` files using `pypdf` and chunks at character level.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"ReadTheDocsLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ReadTheDocsLoader\"},\"description\":\"Load `ReadTheDocs` documentation directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"ReadTheDocsLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/readthedocs_documentation\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"SRTLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".srt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SRTLoader\"},\"description\":\"Load `.srt` (subtitle) files.\",\"base_classes\":[\"Document\"],\"display_name\":\"SRTLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/subtitle\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"SlackDirectoryLoader\":{\"template\":{\"zip_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".zip\"],\"file_path\":\"\",\"password\":false,\"name\":\"zip_path\",\"display_name\":\"Path to zip file\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"workspace_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"workspace_url\",\"display_name\":\"Workspace URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SlackDirectoryLoader\"},\"description\":\"Load from a `Slack` directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"SlackDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/slack\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"TextLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".txt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"TextLoader\"},\"description\":\"Load text file.\",\"base_classes\":[\"Document\"],\"display_name\":\"TextLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"UnstructuredEmailLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".eml\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"UnstructuredEmailLoader\"},\"description\":\"Load email files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredEmailLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/email\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"UnstructuredHTMLLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".html\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"UnstructuredHTMLLoader\"},\"description\":\"Load `HTML` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredHTMLLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"UnstructuredMarkdownLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".md\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"UnstructuredMarkdownLoader\"},\"description\":\"Load `Markdown` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredMarkdownLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/markdown\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"UnstructuredPowerPointLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".pptx\",\".ppt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"UnstructuredPowerPointLoader\"},\"description\":\"Load `Microsoft PowerPoint` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredPowerPointLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_powerpoint\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"UnstructuredWordDocumentLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".docx\",\".doc\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"UnstructuredWordDocumentLoader\"},\"description\":\"Load `Microsoft Word` file using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredWordDocumentLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_word\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"WebBaseLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"WebBaseLoader\"},\"description\":\"Load HTML pages using `urllib` and parse them with `BeautifulSoup'.\",\"base_classes\":[\"Document\"],\"display_name\":\"WebBaseLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"FileLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\"json\",\"txt\",\"csv\",\"jsonl\",\"html\",\"htm\",\"conllu\",\"enex\",\"msg\",\"pdf\",\"srt\",\"eml\",\"md\",\"pptx\",\"docx\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"display_name\":\"File Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain.schema import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.utils.constants import LOADERS_INFO\\n\\n\\nclass FileLoaderComponent(CustomComponent):\\n display_name: str = \\\"File Loader\\\"\\n description: str = \\\"Generic File Loader\\\"\\n beta = True\\n\\n def build_config(self):\\n loader_options = [\\\"Automatic\\\"] + [loader_info[\\\"name\\\"] for loader_info in LOADERS_INFO]\\n\\n file_types = []\\n suffixes = []\\n\\n for loader_info in LOADERS_INFO:\\n if \\\"allowedTypes\\\" in loader_info:\\n file_types.extend(loader_info[\\\"allowedTypes\\\"])\\n suffixes.extend([f\\\".{ext}\\\" for ext in loader_info[\\\"allowedTypes\\\"]])\\n\\n return {\\n \\\"file_path\\\": {\\n \\\"display_name\\\": \\\"File Path\\\",\\n \\\"required\\\": True,\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\n \\\"json\\\",\\n \\\"txt\\\",\\n \\\"csv\\\",\\n \\\"jsonl\\\",\\n \\\"html\\\",\\n \\\"htm\\\",\\n \\\"conllu\\\",\\n \\\"enex\\\",\\n \\\"msg\\\",\\n \\\"pdf\\\",\\n \\\"srt\\\",\\n \\\"eml\\\",\\n \\\"md\\\",\\n \\\"pptx\\\",\\n \\\"docx\\\",\\n ],\\n \\\"suffixes\\\": [\\n \\\".json\\\",\\n \\\".txt\\\",\\n \\\".csv\\\",\\n \\\".jsonl\\\",\\n \\\".html\\\",\\n \\\".htm\\\",\\n \\\".conllu\\\",\\n \\\".enex\\\",\\n \\\".msg\\\",\\n \\\".pdf\\\",\\n \\\".srt\\\",\\n \\\".eml\\\",\\n \\\".md\\\",\\n \\\".pptx\\\",\\n \\\".docx\\\",\\n ],\\n # \\\"file_types\\\" : file_types,\\n # \\\"suffixes\\\": suffixes,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": loader_options,\\n \\\"value\\\": \\\"Automatic\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, file_path: str, loader: str) -> Document:\\n file_type = file_path.split(\\\".\\\")[-1]\\n\\n # Mapeie o nome do loader selecionado para suas informações\\n selected_loader_info = None\\n for loader_info in LOADERS_INFO:\\n if loader_info[\\\"name\\\"] == loader:\\n selected_loader_info = loader_info\\n break\\n\\n if selected_loader_info is None and loader != \\\"Automatic\\\":\\n raise ValueError(f\\\"Loader {loader} not found in the loader info list\\\")\\n\\n if loader == \\\"Automatic\\\":\\n # Determine o loader automaticamente com base na extensão do arquivo\\n default_loader_info = None\\n for info in LOADERS_INFO:\\n if \\\"defaultFor\\\" in info and file_type in info[\\\"defaultFor\\\"]:\\n default_loader_info = info\\n break\\n\\n if default_loader_info is None:\\n raise ValueError(f\\\"No default loader found for file type: {file_type}\\\")\\n\\n selected_loader_info = default_loader_info\\n if isinstance(selected_loader_info, dict):\\n loader_import: str = selected_loader_info[\\\"import\\\"]\\n else:\\n raise ValueError(f\\\"Loader info for {loader} is not a dict\\\\nLoader info:\\\\n{selected_loader_info}\\\")\\n module_name, class_name = loader_import.rsplit(\\\".\\\", 1)\\n\\n try:\\n # Importe o loader dinamicamente\\n loader_module = __import__(module_name, fromlist=[class_name])\\n loader_instance = getattr(loader_module, class_name)\\n except ImportError as e:\\n raise ValueError(f\\\"Loader {loader} could not be imported\\\\nLoader info:\\\\n{selected_loader_info}\\\") from e\\n\\n result = loader_instance(file_path=file_path)\\n return result.load()\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"loader\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Automatic\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Automatic\",\"Airbyte JSON (.jsonl)\",\"JSON (.json)\",\"BeautifulSoup4 HTML (.html, .htm)\",\"CSV (.csv)\",\"CoNLL-U (.conllu)\",\"EverNote (.enex)\",\"Facebook Chat (.json)\",\"Outlook Message (.msg)\",\"PyPDF (.pdf)\",\"Subtitle (.str)\",\"Text (.txt)\",\"Unstructured Email (.eml)\",\"Unstructured HTML (.html, .htm)\",\"Unstructured Markdown (.md)\",\"Unstructured PowerPoint (.pptx)\",\"Unstructured Word (.docx)\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Generic File Loader\",\"base_classes\":[\"Document\"],\"display_name\":\"File Loader\",\"documentation\":\"\",\"custom_fields\":{\"file_path\":null,\"loader\":null},\"output_types\":[\"FileLoader\"],\"field_formatters\":{},\"beta\":true},\"UrlLoader\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List\\n\\nfrom langchain import document_loaders\\nfrom langchain.schema import Document\\nfrom langflow import CustomComponent\\n\\n\\nclass UrlLoaderComponent(CustomComponent):\\n display_name: str = \\\"Url Loader\\\"\\n description: str = \\\"Generic Url Loader Component\\\"\\n\\n def build_config(self):\\n return {\\n \\\"web_path\\\": {\\n \\\"display_name\\\": \\\"Url\\\",\\n \\\"required\\\": True,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": [\\n \\\"AZLyricsLoader\\\",\\n \\\"CollegeConfidentialLoader\\\",\\n \\\"GitbookLoader\\\",\\n \\\"HNLoader\\\",\\n \\\"IFixitLoader\\\",\\n \\\"IMSDbLoader\\\",\\n \\\"WebBaseLoader\\\",\\n ],\\n \\\"value\\\": \\\"WebBaseLoader\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, web_path: str, loader: str) -> List[Document]:\\n try:\\n loader_instance = getattr(document_loaders, loader)(web_path=web_path)\\n except Exception as e:\\n raise ValueError(f\\\"No loader found for: {web_path}\\\") from e\\n docs = loader_instance.load()\\n avg_length = sum(len(doc.page_content) for doc in docs if hasattr(doc, \\\"page_content\\\")) / len(docs)\\n self.status = f\\\"\\\"\\\"{len(docs)} documents)\\n \\\\nAvg. Document Length (characters): {int(avg_length)}\\n Documents: {docs[:3]}...\\\"\\\"\\\"\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"loader\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"WebBaseLoader\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"AZLyricsLoader\",\"CollegeConfidentialLoader\",\"GitbookLoader\",\"HNLoader\",\"IFixitLoader\",\"IMSDbLoader\",\"WebBaseLoader\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Generic Url Loader Component\",\"base_classes\":[\"Document\"],\"display_name\":\"Url Loader\",\"documentation\":\"\",\"custom_fields\":{\"loader\":null,\"web_path\":null},\"output_types\":[\"UrlLoader\"],\"field_formatters\":{},\"beta\":true}},\"textsplitters\":{\"CharacterTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"chunk_overlap\":{\"type\":\"int\",\"required\":true,\"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\":\"\"},\"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\":false,\"dynamic\":false,\"info\":\"\"},\"separator\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\\\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"separator\",\"display_name\":\"Separator\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CharacterTextSplitter\"},\"description\":\"Splitting text that looks at characters.\",\"base_classes\":[\"Document\"],\"display_name\":\"CharacterTextSplitter\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"beta\":false},\"LanguageRecursiveTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\"},\"chunk_overlap\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"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.\"},\"chunk_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"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.\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.text_splitter import Language\\nfrom langchain.schema import Document\\n\\n\\nclass LanguageRecursiveTextSplitterComponent(CustomComponent):\\n display_name: str = \\\"Language Recursive Text Splitter\\\"\\n description: str = \\\"Split text into chunks of a specified length based on language.\\\"\\n documentation: str = \\\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\\\"\\n\\n def build_config(self):\\n options = [x.value for x in Language]\\n return {\\n \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\n },\\n \\\"separator_type\\\": {\\n \\\"display_name\\\": \\\"Separator Type\\\",\\n \\\"info\\\": \\\"The type of separator to use.\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"options\\\": options,\\n \\\"value\\\": \\\"Python\\\",\\n },\\n \\\"separators\\\": {\\n \\\"display_name\\\": \\\"Separators\\\",\\n \\\"info\\\": \\\"The characters to split on.\\\",\\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 documents: list[Document],\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n separator_type: Optional[str] = \\\"Python\\\",\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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\\n splitter = RecursiveCharacterTextSplitter.from_language(\\n language=Language(separator_type),\\n chunk_size=chunk_size,\\n chunk_overlap=chunk_overlap,\\n )\\n\\n docs = splitter.split_documents(documents)\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"separator_type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"value\":\"Python\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"cpp\",\"go\",\"java\",\"kotlin\",\"js\",\"ts\",\"php\",\"proto\",\"python\",\"rst\",\"ruby\",\"rust\",\"scala\",\"swift\",\"markdown\",\"latex\",\"html\",\"sol\",\"csharp\",\"cobol\"],\"name\":\"separator_type\",\"display_name\":\"Separator Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"The type of separator to use.\"},\"_type\":\"CustomComponent\"},\"description\":\"Split text into chunks of a specified length based on language.\",\"base_classes\":[\"Document\"],\"display_name\":\"Language Recursive Text Splitter\",\"documentation\":\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separator_type\":null},\"output_types\":[\"LanguageRecursiveTextSplitter\"],\"field_formatters\":{},\"beta\":true},\"RecursiveCharacterTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\"},\"chunk_overlap\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"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.\"},\"chunk_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"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.\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.utils.util import build_loader_repr_from_documents\\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 \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\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 documents: list[Document],\\n separators: Optional[list[str]] = None,\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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 = [x.encode().decode(\\\"unicode-escape\\\") 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\\n docs = splitter.split_documents(documents)\\n self.repr_value = build_loader_repr_from_documents(docs)\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"separators\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"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\\\", \\\" \\\", \\\"\\\"].\"},\"_type\":\"CustomComponent\"},\"description\":\"Split text into chunks of a specified length.\",\"base_classes\":[\"Document\"],\"display_name\":\"Recursive Character Text Splitter\",\"documentation\":\"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separators\":null},\"output_types\":[\"RecursiveCharacterTextSplitter\"],\"field_formatters\":{},\"beta\":true}},\"utilities\":{\"BingSearchAPIWrapper\":{\"template\":{\"bing_search_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"bing_search_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"bing_subscription_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"bing_subscription_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\"},\"_type\":\"BingSearchAPIWrapper\"},\"description\":\"Wrapper for Bing Search API.\",\"base_classes\":[\"BingSearchAPIWrapper\"],\"display_name\":\"BingSearchAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GoogleSearchAPIWrapper\":{\"template\":{\"google_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"google_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"google_cse_id\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"google_cse_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_engine\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"search_engine\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"siterestrict\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"siterestrict\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GoogleSearchAPIWrapper\"},\"description\":\"Wrapper for Google Search API.\",\"base_classes\":[\"GoogleSearchAPIWrapper\"],\"display_name\":\"GoogleSearchAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GoogleSerperAPIWrapper\":{\"template\":{\"aiosession\":{\"type\":\"ClientSession\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"gl\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"us\",\"fileTypes\":[],\"password\":false,\"name\":\"gl\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"hl\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"en\",\"fileTypes\":[],\"password\":false,\"name\":\"hl\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"result_key_for_type\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{\\n \\\"news\\\": \\\"news\\\",\\n \\\"places\\\": \\\"places\\\",\\n \\\"images\\\": \\\"images\\\",\\n \\\"search\\\": \\\"organic\\\"\\n}\",\"fileTypes\":[],\"password\":true,\"name\":\"result_key_for_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"serper_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"serper_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"tbs\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tbs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"search\",\"fileTypes\":[],\"password\":false,\"name\":\"type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"GoogleSerperAPIWrapper\"},\"description\":\"Wrapper around the Serper.dev Google Search API.\",\"base_classes\":[\"GoogleSerperAPIWrapper\"],\"display_name\":\"GoogleSerperAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SearxSearchWrapper\":{\"template\":{\"aiosession\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"categories\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"password\":false,\"name\":\"categories\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"engines\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"password\":false,\"name\":\"engines\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"password\":false,\"name\":\"headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"params\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"params\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"query_suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":false,\"name\":\"query_suffix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"searx_host\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":false,\"name\":\"searx_host\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"unsecure\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"unsecure\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SearxSearchWrapper\"},\"description\":\"Wrapper for Searx API.\",\"base_classes\":[\"SearxSearchWrapper\"],\"display_name\":\"SearxSearchWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"SerpAPIWrapper\":{\"template\":{\"aiosession\":{\"type\":\"ClientSession\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"params\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"{\\n \\\"engine\\\": \\\"google\\\",\\n \\\"google_domain\\\": \\\"google.com\\\",\\n \\\"gl\\\": \\\"us\\\",\\n \\\"hl\\\": \\\"en\\\"\\n}\",\"fileTypes\":[],\"password\":false,\"name\":\"params\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"search_engine\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"search_engine\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"serpapi_api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":true,\"name\":\"serpapi_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"SerpAPIWrapper\"},\"description\":\"Wrapper around SerpAPI.\",\"base_classes\":[\"SerpAPIWrapper\"],\"display_name\":\"SerpAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"WikipediaAPIWrapper\":{\"template\":{\"doc_content_chars_max\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":4000,\"fileTypes\":[],\"password\":false,\"name\":\"doc_content_chars_max\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"lang\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"en\",\"fileTypes\":[],\"password\":false,\"name\":\"lang\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"load_all_available_meta\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"load_all_available_meta\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"top_k_results\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":3,\"fileTypes\":[],\"password\":false,\"name\":\"top_k_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"wiki_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"wiki_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"WikipediaAPIWrapper\"},\"description\":\"Wrapper around WikipediaAPI.\",\"base_classes\":[\"WikipediaAPIWrapper\"],\"display_name\":\"WikipediaAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"WolframAlphaAPIWrapper\":{\"template\":{\"wolfram_alpha_appid\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"wolfram_alpha_appid\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"wolfram_client\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"wolfram_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"WolframAlphaAPIWrapper\"},\"description\":\"Wrapper for Wolfram Alpha.\",\"base_classes\":[\"WolframAlphaAPIWrapper\"],\"display_name\":\"WolframAlphaAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"GetRequest\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\nimport requests\\nfrom typing import Optional\\n\\n\\nclass GetRequest(CustomComponent):\\n display_name: str = \\\"GET Request\\\"\\n description: str = \\\"Make a GET request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#get-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\n \\\"display_name\\\": \\\"URL\\\",\\n \\\"info\\\": \\\"The URL to make the request to\\\",\\n \\\"is_list\\\": True,\\n },\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"timeout\\\": {\\n \\\"display_name\\\": \\\"Timeout\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"The timeout to use for the request.\\\",\\n \\\"value\\\": 5,\\n },\\n }\\n\\n def get_document(self, session: requests.Session, url: str, headers: Optional[dict], timeout: int) -> Document:\\n try:\\n response = session.get(url, headers=headers, timeout=int(timeout))\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except requests.Timeout:\\n return Document(\\n page_content=\\\"Request Timed Out\\\",\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 408},\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n url: str,\\n headers: Optional[dict] = None,\\n timeout: int = 5,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n urls = url if isinstance(url, list) else [url]\\n with requests.Session() as session:\\n documents = [self.get_document(session, u, headers, timeout) for u in urls]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\"},\"timeout\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"The timeout to use for the request.\"},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to\"},\"_type\":\"CustomComponent\"},\"description\":\"Make a GET request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"GET Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#get-request\",\"custom_fields\":{\"headers\":null,\"timeout\":null,\"url\":null},\"output_types\":[\"GetRequest\"],\"field_formatters\":{},\"beta\":true},\"JSONDocumentBuilder\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"### JSON Document Builder\\n\\n# Build a Document containing a JSON object using a key and another Document page content.\\n\\n# **Params**\\n\\n# - **Key:** The key to use for the JSON object.\\n# - **Document:** The Document page to use for the JSON object.\\n\\n# **Output**\\n\\n# - **Document:** The Document containing the JSON object.\\n\\nfrom langchain.schema import Document\\nfrom langflow import CustomComponent\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass JSONDocumentBuilder(CustomComponent):\\n display_name: str = \\\"JSON Document Builder\\\"\\n description: str = \\\"Build a Document containing a JSON object using a key and another Document page content.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n beta = True\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#json-document-builder\\\"\\n\\n field_config = {\\n \\\"key\\\": {\\\"display_name\\\": \\\"Key\\\"},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def build(\\n self,\\n key: str,\\n document: Document,\\n ) -> Document:\\n documents = None\\n if isinstance(document, list):\\n documents = [\\n Document(page_content=orjson_dumps({key: doc.page_content}, indent_2=False)) for doc in document\\n ]\\n elif isinstance(document, Document):\\n documents = Document(page_content=orjson_dumps({key: document.page_content}, indent_2=False))\\n else:\\n raise TypeError(f\\\"Expected Document or list of Documents, got {type(document)}\\\")\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"key\",\"display_name\":\"Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Build a Document containing a JSON object using a key and another Document page content.\",\"base_classes\":[\"Document\"],\"display_name\":\"JSON Document Builder\",\"documentation\":\"https://docs.langflow.org/components/utilities#json-document-builder\",\"custom_fields\":{\"document\":null,\"key\":null},\"output_types\":[\"JSONDocumentBuilder\"],\"field_formatters\":{},\"beta\":true},\"UpdateRequest\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\nimport requests\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass UpdateRequest(CustomComponent):\\n display_name: str = \\\"Update Request\\\"\\n description: str = \\\"Make a PATCH request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#update-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"field_type\\\": \\\"NestedDict\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n \\\"method\\\": {\\n \\\"display_name\\\": \\\"Method\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"The HTTP method to use.\\\",\\n \\\"options\\\": [\\\"PATCH\\\", \\\"PUT\\\"],\\n \\\"value\\\": \\\"PATCH\\\",\\n },\\n }\\n\\n def update_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n method: str = \\\"PATCH\\\",\\n ) -> Document:\\n try:\\n if method == \\\"PATCH\\\":\\n response = session.patch(url, headers=headers, data=document.page_content)\\n elif method == \\\"PUT\\\":\\n response = session.put(url, headers=headers, data=document.page_content)\\n else:\\n raise ValueError(f\\\"Unsupported method: {method}\\\")\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n method: str,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> List[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(isinstance(doc, Document) for doc in document):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [self.update_document(session, doc, url, headers, method) for doc in documents]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"headers\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\"},\"method\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"PATCH\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"PATCH\",\"PUT\"],\"name\":\"method\",\"display_name\":\"Method\",\"advanced\":false,\"dynamic\":false,\"info\":\"The HTTP method to use.\"},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\"},\"_type\":\"CustomComponent\"},\"description\":\"Make a PATCH request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"Update Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#update-request\",\"custom_fields\":{\"document\":null,\"headers\":null,\"method\":null,\"url\":null},\"output_types\":[\"UpdateRequest\"],\"field_formatters\":{},\"beta\":true},\"PostRequest\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\nimport requests\\nfrom typing import Optional\\n\\n\\nclass PostRequest(CustomComponent):\\n display_name: str = \\\"POST Request\\\"\\n description: str = \\\"Make a POST request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#post-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def post_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> Document:\\n try:\\n response = session.post(url, headers=headers, data=document.page_content)\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": 500,\\n },\\n )\\n\\n def build(\\n self,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(isinstance(doc, Document) for doc in document):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [self.post_document(session, doc, url, headers) for doc in documents]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\"},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\"},\"_type\":\"CustomComponent\"},\"description\":\"Make a POST request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"POST Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#post-request\",\"custom_fields\":{\"document\":null,\"headers\":null,\"url\":null},\"output_types\":[\"PostRequest\"],\"field_formatters\":{},\"beta\":true}},\"output_parsers\":{\"ResponseSchema\":{\"template\":{\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"string\",\"fileTypes\":[],\"password\":false,\"name\":\"type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"ResponseSchema\"},\"description\":\"A schema for a response from a structured output parser.\",\"base_classes\":[\"ResponseSchema\"],\"display_name\":\"ResponseSchema\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"StructuredOutputParser\":{\"template\":{\"response_schemas\":{\"type\":\"ResponseSchema\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"response_schemas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"StructuredOutputParser\"},\"description\":\"\",\"base_classes\":[\"BaseLLMOutputParser\",\"BaseOutputParser\",\"StructuredOutputParser\"],\"display_name\":\"StructuredOutputParser\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false}},\"retrievers\":{\"MultiQueryRetriever\":{\"template\":{\"llm\":{\"type\":\"BaseLLM\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"You are an AI language model assistant. Your task is \\n to generate 3 different versions of the given user \\n question to retrieve relevant documents from a vector database. \\n By generating multiple perspectives on the user question, \\n your goal is to help the user overcome some of the limitations \\n of distance-based similarity search. Provide these alternative \\n questions separated by newlines. Original question: {question}\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"include_original\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"include_original\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"parser_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"lines\",\"fileTypes\":[],\"password\":false,\"name\":\"parser_key\",\"display_name\":\"Parser Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"MultiQueryRetriever\"},\"description\":\"Initialize from llm using default template.\",\"base_classes\":[\"MultiQueryRetriever\",\"BaseRetriever\"],\"display_name\":\"MultiQueryRetriever\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"beta\":false},\"AmazonKendra\":{\"template\":{\"attribute_filter\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"attribute_filter\",\"display_name\":\"Attribute Filter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.retrievers import AmazonKendraRetriever\\nfrom langchain.schema import BaseRetriever\\n\\n\\nclass AmazonKendraRetrieverComponent(CustomComponent):\\n display_name: str = \\\"Amazon Kendra Retriever\\\"\\n description: str = \\\"Retriever that uses the Amazon Kendra API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"index_id\\\": {\\\"display_name\\\": \\\"Index ID\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"Region Name\\\"},\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"attribute_filter\\\": {\\n \\\"display_name\\\": \\\"Attribute Filter\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"field_type\\\": \\\"int\\\"},\\n \\\"user_context\\\": {\\n \\\"display_name\\\": \\\"User Context\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n index_id: str,\\n top_k: int = 3,\\n region_name: Optional[str] = None,\\n credentials_profile_name: Optional[str] = None,\\n attribute_filter: Optional[dict] = None,\\n user_context: Optional[dict] = None,\\n ) -> BaseRetriever:\\n try:\\n output = AmazonKendraRetriever(\\n index_id=index_id,\\n top_k=top_k,\\n region_name=region_name,\\n credentials_profile_name=credentials_profile_name,\\n attribute_filter=attribute_filter,\\n user_context=user_context,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonKendra API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"index_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_id\",\"display_name\":\"Index ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"Region Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":3,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"user_context\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"user_context\",\"display_name\":\"User Context\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Retriever that uses the Amazon Kendra API.\",\"base_classes\":[\"BaseRetriever\"],\"display_name\":\"Amazon Kendra Retriever\",\"documentation\":\"\",\"custom_fields\":{\"attribute_filter\":null,\"credentials_profile_name\":null,\"index_id\":null,\"region_name\":null,\"top_k\":null,\"user_context\":null},\"output_types\":[\"AmazonKendra\"],\"field_formatters\":{},\"beta\":true},\"MetalRetriever\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"client_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"client_id\",\"display_name\":\"Client ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.retrievers import MetalRetriever\\nfrom langchain.schema import BaseRetriever\\nfrom metal_sdk.metal import Metal # type: ignore\\n\\n\\nclass MetalRetrieverComponent(CustomComponent):\\n display_name: str = \\\"Metal Retriever\\\"\\n description: str = \\\"Retriever that uses the Metal API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"password\\\": True},\\n \\\"client_id\\\": {\\\"display_name\\\": \\\"Client ID\\\", \\\"password\\\": True},\\n \\\"index_id\\\": {\\\"display_name\\\": \\\"Index ID\\\"},\\n \\\"params\\\": {\\\"display_name\\\": \\\"Parameters\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, api_key: str, client_id: str, index_id: str, params: Optional[dict] = None) -> BaseRetriever:\\n try:\\n metal = Metal(api_key=api_key, client_id=client_id, index_id=index_id)\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Metal API.\\\") from e\\n return MetalRetriever(client=metal, params=params or {})\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"index_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_id\",\"display_name\":\"Index ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"params\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"params\",\"display_name\":\"Parameters\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"description\":\"Retriever that uses the Metal API.\",\"base_classes\":[\"BaseRetriever\"],\"display_name\":\"Metal Retriever\",\"documentation\":\"\",\"custom_fields\":{\"api_key\":null,\"client_id\":null,\"index_id\":null,\"params\":null},\"output_types\":[\"MetalRetriever\"],\"field_formatters\":{},\"beta\":true}},\"custom_components\":{\"CustomComponent\":{\"template\":{\"param\":{\"type\":\"Data\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\"},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Data) -> Data:\\n return param\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\"},\"_type\":\"CustomComponent\"},\"base_classes\":[\"Data\"],\"display_name\":\"CustomComponent\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"param\":null},\"output_types\":[\"CustomComponent\"],\"field_formatters\":{},\"beta\":true}}}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.901 } - }, - { - "startedDateTime": "2023-12-11T18:54:58.423Z", - "time": 0.527, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/auto_login", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flows" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "227" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:54:58 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"access_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20\",\"refresh_token\":null,\"token_type\":\"bearer\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.527 } - }, - { - "startedDateTime": "2023-12-11T18:55:08.881Z", - "time": 0.635, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/build/2920dde2-5c24-4fe0-9c06-ef86b5a16a99/status", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flow/2920dde2-5c24-4fe0-9c06-ef86b5a16a99" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "15" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:55:08 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"built\":false}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.635 } - }, - { - "startedDateTime": "2023-12-11T18:55:08.881Z", - "time": 1.309, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/flows/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flow/2920dde2-5c24-4fe0-9c06-ef86b5a16a99" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "375696" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:55:08 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[{\"name\":\"Awesome Euclid\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-m2yFu\",\"type\":\"genericNode\",\"position\":{\"x\":462.6456058272081,\"y\":1033.9314297130313},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"transcription\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"create an image prompt based on the song's lyrics to be used as the album cover of this song:\\n\\nlyrics:\\n{transcription}\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"transcription\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"transcription\",\"display_name\":\"transcription\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"PromptTemplate\",\"StringPromptTemplate\",\"BasePromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"transcription\"],\"template\":[\"transcription\",\"question\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-m2yFu\"},\"selected\":false,\"positionAbsolute\":{\"x\":462.6456058272081,\"y\":1033.9314297130313},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-urapv\",\"type\":\"genericNode\",\"position\":{\"x\":189.94856095084924,\"y\":-85.06556385338186},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-urapv\"},\"selected\":false,\"positionAbsolute\":{\"x\":189.94856095084924,\"y\":-85.06556385338186},\"dragging\":false},{\"width\":384,\"height\":806,\"id\":\"CustomComponent-IEIUl\",\"type\":\"genericNode\",\"position\":{\"x\":2364.865919667005,\"y\":88.43094097025096},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nfrom platformdirs import user_cache_dir\\nimport base64\\nfrom PIL import Image\\nfrom io import BytesIO\\nfrom openai import OpenAI\\nfrom pathlib import Path\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Image generator\\\"\\n description: str = \\\"generate images using Dall-E\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\",\\\"input_types\\\":[\\\"str\\\"]},\\n \\\"api_key\\\":{\\\"display_name\\\":\\\"OpenAI API key\\\",\\\"password\\\":True},\\n \\\"model\\\":{\\\"display_name\\\":\\\"Model name\\\",\\\"advanced\\\":True,\\\"options\\\":[\\\"dall-e-2\\\",\\\"dall-e-3\\\"], \\\"value\\\":\\\"dall-e-3\\\"},\\n \\\"file_name\\\":{\\\"display_name\\\":\\\"File Name\\\"},\\n \\\"output_format\\\":{\\\"display_name\\\":\\\"Output format\\\",\\\"options\\\":[\\\"jpeg\\\",\\\"png\\\"],\\\"value\\\":\\\"jpeg\\\"},\\n \\\"width\\\":{\\\"display_name\\\":\\\"Width\\\" ,\\\"value\\\":1024},\\n \\\"height\\\":{\\\"display_name\\\":\\\"Height\\\", \\\"value\\\":1024}\\n }\\n\\n def build(self, prompt:str,api_key:str,model:str,file_name:str,output_format:str,width:int,height:int):\\n client = OpenAI(api_key=api_key)\\n cache_dir = Path(user_cache_dir(\\\"langflow\\\"))\\n images_dir = cache_dir / \\\"images\\\"\\n images_dir.mkdir(parents=True, exist_ok=True)\\n image_path = images_dir / f\\\"{file_name}.{output_format}\\\"\\n response = client.images.generate(\\n model=model,\\n prompt=prompt,\\n size=f\\\"{height}x{width}\\\",\\n response_format=\\\"b64_json\\\",\\n n=1,\\n )\\n # Decode base64-encoded image string\\n binary_data = base64.b64decode(response.data[0].b64_json)\\n # Create PIL Image object from binary image data\\n image_pil = Image.open(BytesIO(binary_data))\\n image_pil.save(image_path, format=output_format.upper())\\n return \\\"\\\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_key\",\"display_name\":\"OpenAI API key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"file_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"file_name\",\"display_name\":\"File Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"album\"},\"height\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1024,\"password\":false,\"name\":\"height\",\"display_name\":\"Height\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"dall-e-3\",\"password\":false,\"options\":[\"dall-e-2\",\"dall-e-3\"],\"name\":\"model\",\"display_name\":\"Model name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"output_format\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"jpeg\",\"password\":false,\"options\":[\"jpeg\",\"png\"],\"name\":\"output_format\",\"display_name\":\"Output format\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"input_types\":[\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"width\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1024,\"password\":false,\"name\":\"width\",\"display_name\":\"Width\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false}},\"description\":\"generate images using Dall-E\",\"base_classes\":[\"Data\"],\"display_name\":\"Image generator\",\"custom_fields\":{\"api_key\":null,\"file_name\":null,\"height\":null,\"model\":null,\"output_format\":null,\"prompt\":null,\"width\":null},\"output_types\":[\"Data\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-IEIUl\"},\"selected\":false,\"positionAbsolute\":{\"x\":2364.865919667005,\"y\":88.43094097025096}},{\"width\":384,\"height\":338,\"id\":\"LLMChain-KlJb3\",\"type\":\"genericNode\",\"position\":{\"x\":1242.9851164540805,\"y\":-139.74634696823108},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-KlJb3\"},\"selected\":false,\"positionAbsolute\":{\"x\":1242.9851164540805,\"y\":-139.74634696823108},\"dragging\":false},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-bCuc0\",\"type\":\"genericNode\",\"position\":{\"x\":1747.8107777342625,\"y\":319.13729017446667},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Custom Component\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Chain) -> str:\\n result = param.run({})\\n self.status = result\\n return result\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"param\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Chain\",\"list\":false}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"str\"],\"display_name\":\"Custom Component\",\"custom_fields\":{\"param\":null},\"output_types\":[\"str\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-bCuc0\"},\"selected\":false,\"positionAbsolute\":{\"x\":1747.8107777342625,\"y\":319.13729017446667}}],\"edges\":[{\"source\":\"LLMChain-KlJb3\",\"target\":\"CustomComponent-bCuc0\",\"sourceHandle\":\"{œbaseClassesœ:[œChainœ,œCallableœ],œdataTypeœ:œLLMChainœ,œidœ:œLLMChain-KlJb3œ}\",\"targetHandle\":\"{œfieldNameœ:œparamœ,œidœ:œCustomComponent-bCuc0œ,œinputTypesœ:null,œtypeœ:œChainœ}\",\"id\":\"reactflow__edge-LLMChain-KlJb3{œbaseClassesœ:[œChainœ,œCallableœ],œdataTypeœ:œLLMChainœ,œidœ:œLLMChain-KlJb3œ}-CustomComponent-bCuc0{œfieldNameœ:œparamœ,œidœ:œCustomComponent-bCuc0œ,œinputTypesœ:null,œtypeœ:œChainœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"param\",\"id\":\"CustomComponent-bCuc0\",\"inputTypes\":null,\"type\":\"Chain\"},\"sourceHandle\":{\"baseClasses\":[\"Chain\",\"Callable\"],\"dataType\":\"LLMChain\",\"id\":\"LLMChain-KlJb3\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"ChatOpenAI-urapv\",\"target\":\"LLMChain-KlJb3\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-urapvœ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-urapv{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-urapvœ}-LLMChain-KlJb3{œfieldNameœ:œllmœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-KlJb3\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-urapv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"PromptTemplate-m2yFu\",\"target\":\"LLMChain-KlJb3\",\"sourceHandle\":\"{œbaseClassesœ:[œPromptTemplateœ,œStringPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-m2yFuœ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"id\":\"reactflow__edge-PromptTemplate-m2yFu{œbaseClassesœ:[œPromptTemplateœ,œStringPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-m2yFuœ}-LLMChain-KlJb3{œfieldNameœ:œpromptœ,œidœ:œLLMChain-KlJb3œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-KlJb3\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"PromptTemplate\",\"StringPromptTemplate\",\"BasePromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-m2yFu\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"CustomComponent-bCuc0\",\"target\":\"CustomComponent-IEIUl\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-bCuc0œ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œCustomComponent-IEIUlœ,œinputTypesœ:[œstrœ],œtypeœ:œstrœ}\",\"id\":\"reactflow__edge-CustomComponent-bCuc0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-bCuc0œ}-CustomComponent-IEIUl{œfieldNameœ:œpromptœ,œidœ:œCustomComponent-IEIUlœ,œinputTypesœ:[œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"CustomComponent-IEIUl\",\"inputTypes\":[\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-bCuc0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false}],\"viewport\":{\"x\":92.23454077990459,\"y\":183.8125619056221,\"zoom\":0.6070974421975234}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:33:18.503954\",\"folder\":null,\"id\":\"fe142ce5-32dc-4955-b186-672ced662f13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Darwin\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"OpenAI-3ZVDh\",\"type\":\"genericNode\",\"position\":{\"x\":-4.0041891741949485,\"y\":-114.02615182719649},\"data\":{\"type\":\"OpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":20,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"best_of\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"logit_bias\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":256,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-davinci-003\",\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"OpenAI\",\"BaseLLM\",\"BaseOpenAI\",\"BaseLanguageModel\"],\"display_name\":\"OpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAI-3ZVDh\"},\"selected\":true,\"positionAbsolute\":{\"x\":-4.0041891741949485,\"y\":-114.02615182719649},\"dragging\":false},{\"width\":384,\"height\":338,\"id\":\"LLMChain-RFYXY\",\"type\":\"genericNode\",\"position\":{\"x\":586.672100458868,\"y\":10.967049167706678},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-RFYXY\"},\"positionAbsolute\":{\"x\":586.672100458868,\"y\":10.967049167706678}},{\"width\":384,\"height\":242,\"id\":\"ChatPromptTemplate-ce1sg\",\"type\":\"genericNode\",\"position\":{\"x\":395.598984452791,\"y\":612.188491773035},\"data\":{\"type\":\"ChatPromptTemplate\",\"node\":{\"template\":{\"messages\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"messages\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseMessagePromptTemplate\",\"list\":true},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatPromptTemplate\"},\"description\":\"A prompt template for chat models.\",\"base_classes\":[\"ChatPromptTemplate\",\"BaseChatPromptTemplate\",\"BasePromptTemplate\"],\"display_name\":\"ChatPromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"beta\":false,\"error\":null},\"id\":\"ChatPromptTemplate-ce1sg\"},\"selected\":false,\"positionAbsolute\":{\"x\":395.598984452791,\"y\":612.188491773035},\"dragging\":false}],\"edges\":[{\"source\":\"OpenAI-3ZVDh\",\"sourceHandle\":\"{œbaseClassesœ:[œOpenAIœ,œBaseLLMœ,œBaseOpenAIœ,œBaseLanguageModelœ],œdataTypeœ:œOpenAIœ,œidœ:œOpenAI-3ZVDhœ}\",\"target\":\"LLMChain-RFYXY\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-RFYXY\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"OpenAI\",\"BaseLLM\",\"BaseOpenAI\",\"BaseLanguageModel\"],\"dataType\":\"OpenAI\",\"id\":\"OpenAI-3ZVDh\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-OpenAI-3ZVDh{œbaseClassesœ:[œOpenAIœ,œBaseLLMœ,œBaseOpenAIœ,œBaseLanguageModelœ],œdataTypeœ:œOpenAIœ,œidœ:œOpenAI-3ZVDhœ}-LLMChain-RFYXY{œfieldNameœ:œllmœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"ChatPromptTemplate-ce1sg\",\"sourceHandle\":\"{œbaseClassesœ:[œChatPromptTemplateœ,œBaseChatPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œChatPromptTemplateœ,œidœ:œChatPromptTemplate-ce1sgœ}\",\"target\":\"LLMChain-RFYXY\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-RFYXY\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"ChatPromptTemplate\",\"BaseChatPromptTemplate\",\"BasePromptTemplate\"],\"dataType\":\"ChatPromptTemplate\",\"id\":\"ChatPromptTemplate-ce1sg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatPromptTemplate-ce1sg{œbaseClassesœ:[œChatPromptTemplateœ,œBaseChatPromptTemplateœ,œBasePromptTemplateœ],œdataTypeœ:œChatPromptTemplateœ,œidœ:œChatPromptTemplate-ce1sgœ}-LLMChain-RFYXY{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RFYXYœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":8.832868402772647,\"y\":189.85443326477025,\"zoom\":0.6070974421975235}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:50:19.584160\",\"folder\":null,\"id\":\"103766f0-1f50-427a-9ba7-2ab73343c524\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Easley\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-VPh47\",\"type\":\"genericNode\",\"position\":{\"x\":-328.5742193020408,\"y\":-420.1025929438987},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseChatModel\",\"ChatOpenAI\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-VPh47\"},\"selected\":false,\"positionAbsolute\":{\"x\":-328.5742193020408,\"y\":-420.1025929438987},\"dragging\":false},{\"width\":384,\"height\":338,\"id\":\"LLMChain-NgFyo\",\"type\":\"genericNode\",\"position\":{\"x\":225.3113389084088,\"y\":-193.3520019494289},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-NgFyo\"},\"selected\":false,\"positionAbsolute\":{\"x\":225.3113389084088,\"y\":-193.3520019494289},\"dragging\":false},{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-oAFjh\",\"type\":\"genericNode\",\"position\":{\"x\":-342.62522294052764,\"y\":391.20629510686103},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"links\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Answer everything with links\\n{links}\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"links\",\"display_name\":\"links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"BasePromptTemplate\",\"StringPromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"links\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-oAFjh\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-342.62522294052764,\"y\":391.20629510686103}}],\"edges\":[{\"source\":\"ChatOpenAI-VPh47\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseChatModelœ,œChatOpenAIœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VPh47œ}\",\"target\":\"LLMChain-NgFyo\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-NgFyo\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseChatModel\",\"ChatOpenAI\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-VPh47\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-VPh47{œbaseClassesœ:[œBaseChatModelœ,œChatOpenAIœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VPh47œ}-LLMChain-NgFyo{œfieldNameœ:œllmœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"PromptTemplate-oAFjh\",\"sourceHandle\":\"{œbaseClassesœ:[œBasePromptTemplateœ,œStringPromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-oAFjhœ}\",\"target\":\"LLMChain-NgFyo\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-NgFyo\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"BasePromptTemplate\",\"StringPromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-oAFjh\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptTemplate-oAFjh{œbaseClassesœ:[œBasePromptTemplateœ,œStringPromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-oAFjhœ}-LLMChain-NgFyo{œfieldNameœ:œpromptœ,œidœ:œLLMChain-NgFyoœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":338.6546182690814,\"y\":53.026340800283265,\"zoom\":0.7169776240079143}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:53:25.148460\",\"folder\":null,\"id\":\"a794fc48-5e9b-42a3-924f-7fe610500035\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"(D) Basic Chat (1) (4)\",\"description\":\"Simplest possible chat model\",\"data\":{\"nodes\":[{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-fBcfh\",\"type\":\"genericNode\",\"position\":{\"x\":228.87326389541306,\"y\":465.8628482073749},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k-0613\",\"gpt-3.5-turbo-16k\",\"gpt-4-0613\",\"gpt-4-32k-0613\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false,\"value\":60},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseChatModel\",\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\"},\"id\":\"ChatOpenAI-fBcfh\",\"value\":null},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":228.87326389541306,\"y\":465.8628482073749}},{\"width\":384,\"height\":310,\"id\":\"ConversationChain-bVNex\",\"type\":\"genericNode\",\"position\":{\"x\":806,\"y\":554},\"data\":{\"type\":\"ConversationChain\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"_type\":\"default\"},\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLMOutputParser\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"history\",\"input\"],\"output_parser\":null,\"partial_variables\":{},\"template\":\"The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\\n\\nCurrent conversation:\\n{history}\\nHuman: {input}\\nAI:\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"input\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"llm_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"response\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_final_only\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_final_only\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationChain\"},\"description\":\"Chain to have a conversation and load context from memory.\",\"base_classes\":[\"ConversationChain\",\"Chain\",\"LLMChain\",\"function\"],\"display_name\":\"ConversationChain\",\"documentation\":\"\"},\"id\":\"ConversationChain-bVNex\",\"value\":null},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":806,\"y\":554}}],\"edges\":[{\"source\":\"ChatOpenAI-fBcfh\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseChatModelœ,œBaseLanguageModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-fBcfhœ}\",\"target\":\"ConversationChain-bVNex\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œConversationChain-bVNexœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"className\":\"stroke-gray-900 stroke-connection\",\"id\":\"reactflow__edge-ChatOpenAI-fBcfh{œbaseClassesœ:[œBaseChatModelœ,œBaseLanguageModelœ,œChatOpenAIœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-fBcfhœ}-ConversationChain-bVNex{œfieldNameœ:œllmœ,œidœ:œConversationChain-bVNexœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"BaseChatModel\",\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-fBcfh\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"ConversationChain-bVNex\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"}},\"style\":{\"stroke\":\"#555\"},\"animated\":false}],\"viewport\":{\"x\":-118.21416568593895,\"y\":-240.64815770363373,\"zoom\":0.7642485855675408}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:57:55.879806\",\"folder\":null,\"id\":\"bddebeea-b80a-4b28-8895-c4425687dcce\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Directory Loader\",\"description\":\"Generic File Loader\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"import os\\n\\nfrom langchain.schema import Document\\nfrom langflow import CustomComponent\\nimport glob\\n\\nclass DirectoryLoaderComponent(CustomComponent):\\n display_name: str = \\\"Directory Loader\\\"\\n description: str = \\\"Generic File Loader\\\"\\n beta = True\\n loaders_info = [\\n {\\n \\\"loader\\\": \\\"AirbyteJSONLoader\\\",\\n \\\"name\\\": \\\"Airbyte JSON (.jsonl)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.AirbyteJSONLoader\\\",\\n \\\"defaultFor\\\": [\\\"jsonl\\\"],\\n \\\"allowdTypes\\\": [\\\"jsonl\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"JSONLoader\\\",\\n \\\"name\\\": \\\"JSON (.json)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.JSONLoader\\\",\\n \\\"defaultFor\\\": [\\\"json\\\"],\\n \\\"allowdTypes\\\": [\\\"json\\\"],\\n \\\"kwargs\\\": {\\\"jq_schema\\\": \\\".\\\", \\\"text_content\\\": False}\\n },\\n {\\n \\\"loader\\\": \\\"BSHTMLLoader\\\",\\n \\\"name\\\": \\\"BeautifulSoup4 HTML (.html, .htm)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.BSHTMLLoader\\\",\\n \\\"allowdTypes\\\": [\\\"html\\\", \\\"htm\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"CSVLoader\\\",\\n \\\"name\\\": \\\"CSV (.csv)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.CSVLoader\\\",\\n \\\"defaultFor\\\": [\\\"csv\\\"],\\n \\\"allowdTypes\\\": [\\\"csv\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"CoNLLULoader\\\",\\n \\\"name\\\": \\\"CoNLL-U (.conllu)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.CoNLLULoader\\\",\\n \\\"defaultFor\\\": [\\\"conllu\\\"],\\n \\\"allowdTypes\\\": [\\\"conllu\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"EverNoteLoader\\\",\\n \\\"name\\\": \\\"EverNote (.enex)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.EverNoteLoader\\\",\\n \\\"defaultFor\\\": [\\\"enex\\\"],\\n \\\"allowdTypes\\\": [\\\"enex\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"FacebookChatLoader\\\",\\n \\\"name\\\": \\\"Facebook Chat (.json)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.FacebookChatLoader\\\",\\n \\\"allowdTypes\\\": [\\\"json\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"OutlookMessageLoader\\\",\\n \\\"name\\\": \\\"Outlook Message (.msg)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.OutlookMessageLoader\\\",\\n \\\"defaultFor\\\": [\\\"msg\\\"],\\n \\\"allowdTypes\\\": [\\\"msg\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"PyPDFLoader\\\",\\n \\\"name\\\": \\\"PyPDF (.pdf)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.PyPDFLoader\\\",\\n \\\"defaultFor\\\": [\\\"pdf\\\"],\\n \\\"allowdTypes\\\": [\\\"pdf\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"STRLoader\\\",\\n \\\"name\\\": \\\"Subtitle (.str)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.STRLoader\\\",\\n \\\"defaultFor\\\": [\\\"str\\\"],\\n \\\"allowdTypes\\\": [\\\"str\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"TextLoader\\\",\\n \\\"name\\\": \\\"Text (.txt)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.TextLoader\\\",\\n \\\"defaultFor\\\": [\\\"txt\\\"],\\n \\\"allowdTypes\\\": [\\\"txt\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredEmailLoader\\\",\\n \\\"name\\\": \\\"Unstructured Email (.eml)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredEmailLoader\\\",\\n \\\"defaultFor\\\": [\\\"eml\\\"],\\n \\\"allowdTypes\\\": [\\\"eml\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredHTMLLoader\\\",\\n \\\"name\\\": \\\"Unstructured HTML (.html, .htm)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredHTMLLoader\\\",\\n \\\"defaultFor\\\": [\\\"html\\\", \\\"htm\\\"],\\n \\\"allowdTypes\\\": [\\\"html\\\", \\\"htm\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredMarkdownLoader\\\",\\n \\\"name\\\": \\\"Unstructured Markdown (.md)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredMarkdownLoader\\\",\\n \\\"defaultFor\\\": [\\\"md\\\"],\\n \\\"allowdTypes\\\": [\\\"md\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredPowerPointLoader\\\",\\n \\\"name\\\": \\\"Unstructured PowerPoint (.pptx)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredPowerPointLoader\\\",\\n \\\"defaultFor\\\": [\\\"pptx\\\"],\\n \\\"allowdTypes\\\": [\\\"pptx\\\"],\\n },\\n {\\n \\\"loader\\\": \\\"UnstructuredWordLoader\\\",\\n \\\"name\\\": \\\"Unstructured Word (.docx)\\\",\\n \\\"import\\\": \\\"langchain.document_loaders.UnstructuredWordLoader\\\",\\n \\\"defaultFor\\\": [\\\"docx\\\"],\\n \\\"allowdTypes\\\": [\\\"docx\\\"],\\n },\\n]\\n\\n\\n def build_config(self):\\n loader_options = [\\\"Automatic\\\"] + [\\n loader_info[\\\"name\\\"] for loader_info in self.loaders_info\\n ]\\n\\n file_types = []\\n suffixes = []\\n\\n for loader_info in self.loaders_info:\\n if \\\"allowedTypes\\\" in loader_info:\\n file_types.extend(loader_info[\\\"allowedTypes\\\"])\\n suffixes.extend([f\\\".{ext}\\\" for ext in loader_info[\\\"allowedTypes\\\"]])\\n\\n return {\\n \\\"directory_path\\\": {\\n \\\"display_name\\\": \\\"Directory Path\\\",\\n \\\"required\\\": True,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": loader_options,\\n \\\"value\\\": \\\"Automatic\\\",\\n },\\n }\\n\\n def build(self, directory_path: str, loader: str) -> Document:\\n # Verifique se o diretório existe\\n if not os.path.exists(directory_path):\\n raise ValueError(f\\\"Directory not found: {directory_path}\\\")\\n\\n files = glob.glob(directory_path + \\\"/*.*\\\")\\n\\n\\n loader_info = None\\n if loader == \\\"Automatic\\\":\\n for file in files:\\n file_type = file.split(\\\".\\\")[-1]\\n\\n\\n for info in self.loaders_info:\\n if \\\"defaultFor\\\" in info:\\n if file_type in info[\\\"defaultFor\\\"]:\\n loader_info = info\\n break\\n if loader_info:\\n break\\n\\n if not loader_info:\\n raise ValueError(\\n \\\"No default loader found for any file in the directory\\\"\\n )\\n\\n else:\\n for info in self.loaders_info:\\n if info[\\\"name\\\"] == loader:\\n loader_info = info\\n break\\n\\n if not loader_info:\\n raise ValueError(f\\\"Loader {loader} not found in the loader info list\\\")\\n\\n loader_import = loader_info[\\\"import\\\"]\\n module_name, class_name = loader_import.rsplit(\\\".\\\", 1)\\n\\n try:\\n # Importe o loader dinamicamente\\n loader_module = __import__(module_name, fromlist=[class_name])\\n loader_instance = getattr(loader_module, class_name)\\n except ImportError as e:\\n raise ValueError(\\n f\\\"Loader {loader} could not be imported\\\\nLoader info:\\\\n{loader_info}\\\"\\n ) from e\\n\\n results = []\\n for file in files:\\n file_path = os.path.join(directory_path, file)\\n kwargs = loader_info.get(\\\"kwargs\\\", {})\\n result = loader_instance(file_path=file_path, **kwargs).load()\\n results.append(result)\\n self.status = results\\n return results\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"directory_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"directory_path\",\"display_name\":\"Directory Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"/Users/ogabrielluiz/Projects/langflow2/docs\"},\"loader\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"Automatic\",\"password\":false,\"options\":[\"Automatic\",\"Airbyte JSON (.jsonl)\",\"JSON (.json)\",\"BeautifulSoup4 HTML (.html, .htm)\",\"CSV (.csv)\",\"CoNLL-U (.conllu)\",\"EverNote (.enex)\",\"Facebook Chat (.json)\",\"Outlook Message (.msg)\",\"PyPDF (.pdf)\",\"Subtitle (.str)\",\"Text (.txt)\",\"Unstructured Email (.eml)\",\"Unstructured HTML (.html, .htm)\",\"Unstructured Markdown (.md)\",\"Unstructured PowerPoint (.pptx)\",\"Unstructured Word (.docx)\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true}},\"description\":\"Generic File Loader\",\"base_classes\":[\"Document\"],\"display_name\":\"Directory Loader\",\"custom_fields\":{\"directory_path\":null,\"loader\":null},\"output_types\":[\"Document\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Ip6tG\"},\"id\":\"CustomComponent-Ip6tG\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-04T22:58:38.570303\",\"folder\":null,\"id\":\"5fe4debc-b6a7-45d4-a694-c02d8aa93b08\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Whisper Transcriber\",\"description\":\"Converts audio to text using OpenAI's Whisper.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Optional, List, Dict, Union\\nfrom langflow.field_typing import (\\n AgentExecutor,\\n BaseChatMemory,\\n BaseLanguageModel,\\n BaseLLM,\\n BaseLoader,\\n BaseMemory,\\n BaseOutputParser,\\n BasePromptTemplate,\\n BaseRetriever,\\n Callable,\\n Chain,\\n ChatPromptTemplate,\\n Data,\\n Document,\\n Embeddings,\\n NestedDict,\\n Object,\\n PromptTemplate,\\n TextSplitter,\\n Tool,\\n VectorStore,\\n)\\n\\nfrom openai import OpenAI\\nclass Component(CustomComponent):\\n display_name: str = \\\"Whisper Transcriber\\\"\\n description: str = \\\"Converts audio to text using OpenAI's Whisper.\\\"\\n\\n def build_config(self):\\n return {\\\"audio\\\":{\\\"field_type\\\":\\\"file\\\",\\\"suffixes\\\":[\\\".mp3\\\", \\\".mp4\\\", \\\".m4a\\\"]},\\\"OpenAIKey\\\":{\\\"field_type\\\":\\\"str\\\",\\\"password\\\":True}}\\n\\n def build(self, audio:str, OpenAIKey:str) -> str:\\n \\n # TODO: if output path, persist & load it instead\\n \\n client = OpenAI(api_key=OpenAIKey)\\n \\n audio_file= open(audio, \\\"rb\\\")\\n transcript = client.audio.transcriptions.create(\\n model=\\\"whisper-1\\\", \\n file=audio_file,\\n response_format=\\\"text\\\"\\n )\\n \\n \\n self.status = transcript\\n return transcript\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"OpenAIKey\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"OpenAIKey\",\"display_name\":\"OpenAIKey\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"audio\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"suffixes\":[\".mp3\",\".mp4\",\".m4a\"],\"password\":false,\"name\":\"audio\",\"display_name\":\"audio\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"file_path\":\"/Users/rodrigonader/Library/Caches/langflow/19b3e1c9-90bf-405f-898a-e982f47adf76/a3308ce7e9b10088fcd985aabb6d17b012c6b6e81ff8806356574474c9d10229.m4a\",\"value\":\"Audio Recording 2023-11-29 at 12.12.04.m4a\"}},\"description\":\"Converts audio to text using OpenAI's Whisper.\",\"base_classes\":[\"str\"],\"display_name\":\"Whisper Transcriber\",\"custom_fields\":{\"OpenAIKey\":null,\"audio\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-GJRrs\"},\"id\":\"CustomComponent-GJRrs\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-04T22:58:39.710502\",\"folder\":null,\"id\":\"bd9e911d-46bd-429f-aa75-dd740430695e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Youtube Conversation\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":589,\"id\":\"CustomComponent-h0NSI\",\"type\":\"genericNode\",\"position\":{\"x\":714.9531293402755,\"y\":0.4994374160582993},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"import requests\\nfrom langflow import CustomComponent\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.schema import Document\\nfrom langchain.document_loaders import YoutubeLoader\\n\\n# Example usage:\\n\\nclass YourComponent(CustomComponent):\\n display_name: str = \\\"YouTube Transcript\\\"\\n description: str = \\\"YouTube transcripts refer to the written text versions of the spoken content in a video uploaded to the YouTube platform.\\\"\\n\\n def build_config(self):\\n return {\\\"url\\\": {\\\"multiline\\\": True, \\\"required\\\": True}}\\n\\n def build(self, url: str, llm: BaseLLM, dependencies: Document, language: str = \\\"en\\\") -> Document:\\n dependencies\\n response = requests.get(url)\\n loader = YoutubeLoader.from_youtube_url(url, add_video_info=True, language=[language])\\n result = loader.load()\\n self.repr_value = str(result)\\n return result\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"dependencies\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"dependencies\",\"display_name\":\"dependencies\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"language\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"en\",\"password\":false,\"name\":\"language\",\"display_name\":\"language\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"YouTube transcripts refer to the written text versions of the spoken content in a video uploaded to the YouTube platform.\",\"base_classes\":[\"Document\"],\"display_name\":\"YouTube Transcript\",\"custom_fields\":{\"dependencies\":null,\"language\":null,\"llm\":null,\"url\":null},\"output_types\":[\"Document\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-h0NSI\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":714.9531293402755,\"y\":0.4994374160582993}},{\"width\":384,\"height\":629,\"id\":\"ChatOpenAI-q61Y2\",\"type\":\"genericNode\",\"position\":{\"x\":18,\"y\":625.5521045590924},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo-16k\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k-0613\",\"gpt-3.5-turbo-16k\",\"gpt-4-0613\",\"gpt-4-32k-0613\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-q61Y2\"},\"selected\":false,\"positionAbsolute\":{\"x\":18,\"y\":625.5521045590924},\"dragging\":false},{\"width\":384,\"height\":539,\"id\":\"Chroma-gVhy7\",\"type\":\"genericNode\",\"position\":{\"x\":2110.365967257855,\"y\":805.0149521868784},\"data\":{\"type\":\"Chroma\",\"node\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.Client\",\"list\":false},\"client_settings\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client_settings\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.config.Setting\",\"list\":true},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"chroma_server_cors_allow_origins\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_cors_allow_origins\",\"display_name\":\"Chroma Server CORS Allow Origins\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"chroma_server_grpc_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_grpc_port\",\"display_name\":\"Chroma Server GRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_host\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_host\",\"display_name\":\"Chroma Server Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_http_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_http_port\",\"display_name\":\"Chroma Server HTTP Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_ssl_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"chroma_server_ssl_enabled\",\"display_name\":\"Chroma Server SSL Enabled\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"collection_metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"collection_metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"collection_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"persist\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"persist\",\"display_name\":\"Persist\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"persist_directory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"persist_directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"_type\":\"Chroma\"},\"description\":\"Create a Chroma vectorstore from a raw documents.\",\"base_classes\":[\"VectorStore\",\"Chroma\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Chroma\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma\",\"beta\":false,\"error\":null},\"id\":\"Chroma-gVhy7\"},\"selected\":false,\"positionAbsolute\":{\"x\":2110.365967257855,\"y\":805.0149521868784},\"dragging\":false},{\"width\":384,\"height\":501,\"id\":\"RecursiveCharacterTextSplitter-1eaOX\",\"type\":\"genericNode\",\"position\":{\"x\":1409.2872773444874,\"y\":19.45456141103284},\"data\":{\"type\":\"RecursiveCharacterTextSplitter\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.utils.util import build_loader_repr_from_documents\\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 \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\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 documents: list[Document],\\n separators: Optional[list[str]] = None,\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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 = [x.encode().decode(\\\"unicode-escape\\\") 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\\n docs = splitter.split_documents(documents)\\n self.repr_value = build_loader_repr_from_documents(docs)\\n return docs\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"chunk_overlap\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"50\",\"password\":false,\"name\":\"chunk_overlap\",\"display_name\":\"Chunk Overlap\",\"advanced\":false,\"dynamic\":false,\"info\":\"The amount of overlap between chunks.\",\"type\":\"int\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"400\",\"password\":false,\"name\":\"chunk_size\",\"display_name\":\"Chunk Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum length of each chunk.\",\"type\":\"int\",\"list\":false},\"documents\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\",\"type\":\"Document\",\"list\":true},\"separators\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"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\\\", \\\" \\\", \\\"\\\"].\",\"type\":\"str\",\"list\":true,\"value\":[\" \"]}},\"description\":\"Split text into chunks of a specified length.\",\"base_classes\":[\"Document\"],\"display_name\":\"Recursive Character Text Splitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separators\":null},\"output_types\":[\"RecursiveCharacterTextSplitter\"],\"documentation\":\"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\",\"beta\":true,\"error\":null},\"id\":\"RecursiveCharacterTextSplitter-1eaOX\"},\"selected\":false,\"positionAbsolute\":{\"x\":1409.2872773444874,\"y\":19.45456141103284},\"dragging\":false},{\"width\":384,\"height\":367,\"id\":\"OpenAIEmbeddings-cduOO\",\"type\":\"genericNode\",\"position\":{\"x\":1405.1176670984544,\"y\":1029.459061269321},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{'Authorization': 'Bearer '}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"Embeddings\",\"OpenAIEmbeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-cduOO\"},\"selected\":false,\"positionAbsolute\":{\"x\":1405.1176670984544,\"y\":1029.459061269321}},{\"width\":384,\"height\":339,\"id\":\"RetrievalQA-4PmTB\",\"type\":\"genericNode\",\"position\":{\"x\":2711.7786966415715,\"y\":709.4450828605463},\"data\":{\"type\":\"RetrievalQA\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"combine_documents_chain\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseCombineDocumentsChain\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"query\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"result\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_source_documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"RetrievalQA\"},\"description\":\"Chain for question-answering against an index.\",\"base_classes\":[\"RetrievalQA\",\"Chain\",\"BaseRetrievalQA\",\"function\"],\"display_name\":\"RetrievalQA\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa\",\"beta\":false,\"error\":null},\"id\":\"RetrievalQA-4PmTB\"},\"selected\":false,\"positionAbsolute\":{\"x\":2711.7786966415715,\"y\":709.4450828605463}},{\"width\":384,\"height\":333,\"id\":\"CombineDocsChain-yk0JF\",\"type\":\"genericNode\",\"position\":{\"x\":2125.6202053356537,\"y\":199.07708924409633},\"data\":{\"type\":\"CombineDocsChain\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"chain_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"_type\":\"load_qa_chain\"},\"description\":\"Load question answering chain.\",\"base_classes\":[\"BaseCombineDocumentsChain\",\"function\"],\"display_name\":\"CombineDocsChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"id\":\"CombineDocsChain-yk0JF\"},\"selected\":false,\"positionAbsolute\":{\"x\":2125.6202053356537,\"y\":199.07708924409633},\"dragging\":false},{\"width\":384,\"height\":417,\"id\":\"CustomComponent-y6Wg0\",\"type\":\"genericNode\",\"position\":{\"x\":39.400034102832365,\"y\":-499.03551482195707},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nimport subprocess\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\nfrom typing import List\\n\\n\\nclass YourComponent(CustomComponent):\\n display_name: str = \\\"PIP Install\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n\\n def build(self, libs: List[str]) -> Document:\\n def install_package(package_name):\\n subprocess.check_call([\\\"pip\\\", \\\"install\\\", package_name])\\n for lib in libs:\\n install_package(lib)\\n return \\\"\\\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"libs\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"libs\",\"display_name\":\"libs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"requests\",\"pytube\"]}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"Document\"],\"display_name\":\"PIP Install\",\"custom_fields\":{\"libs\":null},\"output_types\":[],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-y6Wg0\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":39.400034102832365,\"y\":-499.03551482195707}}],\"edges\":[{\"source\":\"ChatOpenAI-q61Y2\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}\",\"target\":\"CustomComponent-h0NSI\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œBaseLLMœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-q61Y2{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}-CustomComponent-h0NSI{œfieldNameœ:œllmœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œBaseLLMœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-q61Y2\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"CustomComponent-h0NSI\",\"inputTypes\":null,\"type\":\"BaseLLM\"}}},{\"source\":\"CustomComponent-y6Wg0\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-y6Wg0œ}\",\"target\":\"CustomComponent-h0NSI\",\"targetHandle\":\"{œfieldNameœ:œdependenciesœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-y6Wg0{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-y6Wg0œ}-CustomComponent-h0NSI{œfieldNameœ:œdependenciesœ,œidœ:œCustomComponent-h0NSIœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-y6Wg0\"},\"targetHandle\":{\"fieldName\":\"dependencies\",\"id\":\"CustomComponent-h0NSI\",\"inputTypes\":null,\"type\":\"Document\"}}},{\"source\":\"CustomComponent-h0NSI\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-h0NSIœ}\",\"target\":\"RecursiveCharacterTextSplitter-1eaOX\",\"targetHandle\":\"{œfieldNameœ:œdocumentsœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-h0NSI{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-h0NSIœ}-RecursiveCharacterTextSplitter-1eaOX{œfieldNameœ:œdocumentsœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-h0NSI\"},\"targetHandle\":{\"fieldName\":\"documents\",\"id\":\"RecursiveCharacterTextSplitter-1eaOX\",\"inputTypes\":null,\"type\":\"Document\"}},\"selected\":false},{\"source\":\"OpenAIEmbeddings-cduOO\",\"sourceHandle\":\"{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-cduOOœ}\",\"target\":\"Chroma-gVhy7\",\"targetHandle\":\"{œfieldNameœ:œembeddingœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-OpenAIEmbeddings-cduOO{œbaseClassesœ:[œEmbeddingsœ,œOpenAIEmbeddingsœ],œdataTypeœ:œOpenAIEmbeddingsœ,œidœ:œOpenAIEmbeddings-cduOOœ}-Chroma-gVhy7{œfieldNameœ:œembeddingœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œEmbeddingsœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Embeddings\",\"OpenAIEmbeddings\"],\"dataType\":\"OpenAIEmbeddings\",\"id\":\"OpenAIEmbeddings-cduOO\"},\"targetHandle\":{\"fieldName\":\"embedding\",\"id\":\"Chroma-gVhy7\",\"inputTypes\":null,\"type\":\"Embeddings\"}}},{\"source\":\"RecursiveCharacterTextSplitter-1eaOX\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ}\",\"target\":\"Chroma-gVhy7\",\"targetHandle\":\"{œfieldNameœ:œdocumentsœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-RecursiveCharacterTextSplitter-1eaOX{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œRecursiveCharacterTextSplitterœ,œidœ:œRecursiveCharacterTextSplitter-1eaOXœ}-Chroma-gVhy7{œfieldNameœ:œdocumentsœ,œidœ:œChroma-gVhy7œ,œinputTypesœ:null,œtypeœ:œDocumentœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"RecursiveCharacterTextSplitter\",\"id\":\"RecursiveCharacterTextSplitter-1eaOX\"},\"targetHandle\":{\"fieldName\":\"documents\",\"id\":\"Chroma-gVhy7\",\"inputTypes\":null,\"type\":\"Document\"}}},{\"source\":\"ChatOpenAI-q61Y2\",\"sourceHandle\":\"{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}\",\"target\":\"CombineDocsChain-yk0JF\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-yk0JFœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-q61Y2{œbaseClassesœ:[œChatOpenAIœ,œBaseChatModelœ,œBaseLanguageModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-q61Y2œ}-CombineDocsChain-yk0JF{œfieldNameœ:œllmœ,œidœ:œCombineDocsChain-yk0JFœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-q61Y2\"},\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"CombineDocsChain-yk0JF\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"}}},{\"source\":\"CombineDocsChain-yk0JF\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œfunctionœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-yk0JFœ}\",\"target\":\"RetrievalQA-4PmTB\",\"targetHandle\":\"{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CombineDocsChain-yk0JF{œbaseClassesœ:[œBaseCombineDocumentsChainœ,œfunctionœ],œdataTypeœ:œCombineDocsChainœ,œidœ:œCombineDocsChain-yk0JFœ}-RetrievalQA-4PmTB{œfieldNameœ:œcombine_documents_chainœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseCombineDocumentsChainœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"BaseCombineDocumentsChain\",\"function\"],\"dataType\":\"CombineDocsChain\",\"id\":\"CombineDocsChain-yk0JF\"},\"targetHandle\":{\"fieldName\":\"combine_documents_chain\",\"id\":\"RetrievalQA-4PmTB\",\"inputTypes\":null,\"type\":\"BaseCombineDocumentsChain\"}}},{\"source\":\"Chroma-gVhy7\",\"sourceHandle\":\"{œbaseClassesœ:[œVectorStoreœ,œChromaœ,œBaseRetrieverœ,œVectorStoreRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-gVhy7œ}\",\"target\":\"RetrievalQA-4PmTB\",\"targetHandle\":\"{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}\",\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-Chroma-gVhy7{œbaseClassesœ:[œVectorStoreœ,œChromaœ,œBaseRetrieverœ,œVectorStoreRetrieverœ],œdataTypeœ:œChromaœ,œidœ:œChroma-gVhy7œ}-RetrievalQA-4PmTB{œfieldNameœ:œretrieverœ,œidœ:œRetrievalQA-4PmTBœ,œinputTypesœ:null,œtypeœ:œBaseRetrieverœ}\",\"data\":{\"sourceHandle\":{\"baseClasses\":[\"VectorStore\",\"Chroma\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"dataType\":\"Chroma\",\"id\":\"Chroma-gVhy7\"},\"targetHandle\":{\"fieldName\":\"retriever\",\"id\":\"RetrievalQA-4PmTB\",\"inputTypes\":null,\"type\":\"BaseRetriever\"}}}],\"viewport\":{\"x\":189.54413265004274,\"y\":259.89949657174975,\"zoom\":0.291027508374689}},\"is_component\":false,\"updated_at\":\"2023-12-04T22:59:08.830269\",\"folder\":null,\"id\":\"bc7eb94b-6fc6-49cb-9b19-35347ba51afa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Web Scraper - Content & Links\",\"description\":\"Fetch and parse text and links from a given URL.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-H7PBy\",\"type\":\"genericNode\",\"position\":{\"x\":1682.494010974207,\"y\":275.5701585623092},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-H7PBy\"},\"selected\":false,\"positionAbsolute\":{\"x\":1682.494010974207,\"y\":275.5701585623092},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-VSAdc\",\"type\":\"genericNode\",\"position\":{\"x\":1002.4263147022411,\"y\":-198.2305006886859},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false,\"value\":\"\"},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-VSAdc\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":1002.4263147022411,\"y\":-198.2305006886859}},{\"width\":384,\"height\":374,\"data\":{\"id\":\"GroupNode-WXPMk\",\"type\":\"PromptTemplate\",\"node\":{\"output_types\":[],\"display_name\":\"Web Scraper\",\"documentation\":\"\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"description\":\"Fetch and parse text and links from a given URL.\",\"template\":{\"code_CustomComponent-f6nOg\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"code\"},\"display_name\":\"Code\"},\"ignore_links_CustomComponent-f6nOg\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"ignore_links\"}},\"code_CustomComponent-FGzJJ\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-FGzJJ\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-0XtUN\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-0XtUN\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-ODIcp\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-ODIcp\",\"field\":\"code\"},\"display_name\":\"Code\"},\"output_parser_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"output_parser\"},\"display_name\":\"Output Parser\"},\"input_types_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_types\"},\"display_name\":\"Input Types\"},\"input_variables_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_variables\"},\"display_name\":\"Input Variables\"},\"partial_variables_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"partial_variables\"},\"display_name\":\"Partial Variables\"},\"template_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template\"},\"display_name\":\"Template\"},\"template_format_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template_format\"},\"display_name\":\"Template Format\"},\"validate_template_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"validate_template\"},\"display_name\":\"Validate Template\"},\"query_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"give me links\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"query\"}},\"code_CustomComponent-OACE0\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"code\"},\"display_name\":\"Code\"},\"url_CustomComponent-OACE0\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"url\"},\"value\":\"https://paperswithcode.com/\"},\"code_CustomComponent-whsQ5\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-whsQ5\",\"field\":\"code\"},\"display_name\":\"Code\"}},\"flow\":{\"data\":{\"nodes\":[{\"width\":384,\"height\":405,\"id\":\"CustomComponent-f6nOg\",\"type\":\"genericNode\",\"position\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-f6nOg\"},\"selected\":true,\"positionAbsolute\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"dragging\":false},{\"width\":384,\"height\":375,\"id\":\"CustomComponent-FGzJJ\",\"type\":\"genericNode\",\"position\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-FGzJJ\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-0XtUN\",\"type\":\"genericNode\",\"position\":{\"x\":214.00059169497604,\"y\":177.27071061129823},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-0XtUN\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":214.00059169497604,\"y\":177.27071061129823}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-ODIcp\",\"type\":\"genericNode\",\"position\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ODIcp\"},\"selected\":true,\"positionAbsolute\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"dragging\":false},{\"width\":384,\"height\":657,\"id\":\"PromptTemplate-H9Udy\",\"type\":\"genericNode\",\"position\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-H9Udy\"},\"selected\":true,\"positionAbsolute\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"dragging\":false},{\"width\":384,\"height\":347,\"id\":\"CustomComponent-OACE0\",\"type\":\"genericNode\",\"position\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-OACE0\"},\"selected\":true,\"positionAbsolute\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"dragging\":false},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-whsQ5\",\"type\":\"genericNode\",\"position\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-whsQ5\"},\"selected\":true,\"positionAbsolute\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"dragging\":false}],\"edges\":[{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-f6nOg\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-f6nOg\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-f6nOg{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-0XtUN\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-0XtUN\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-0XtUN{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-0XtUN\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}\",\"target\":\"CustomComponent-ODIcp\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-ODIcp\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-0XtUN\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-0XtUN{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}-CustomComponent-ODIcp{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"CustomComponent-FGzJJ\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-FGzJJ\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-CustomComponent-FGzJJ{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-PromptTemplate-H9Udy{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-ODIcp\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}\",\"target\":\"CustomComponent-whsQ5\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-whsQ5\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ODIcp\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ODIcp{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}-CustomComponent-whsQ5{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":true},{\"source\":\"CustomComponent-whsQ5\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-whsQ5\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-whsQ5{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-f6nOg\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-f6nOg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-f6nOg{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true}],\"viewport\":{\"x\":343.0346131188585,\"y\":341.89843948642147,\"zoom\":0.24148408223121196}},\"is_component\":false,\"name\":\"Fluffy Ptolemy\",\"description\":\"\",\"id\":\"W5oNW\"}}},\"id\":\"GroupNode-WXPMk\",\"position\":{\"x\":873.0737834322758,\"y\":598.8401015776466},\"type\":\"genericNode\",\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":873.0737834322758,\"y\":598.8401015776466}}],\"edges\":[{\"source\":\"ChatOpenAI-VSAdc\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VSAdcœ}\",\"target\":\"LLMChain-H7PBy\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-H7PBy\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-VSAdc\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-ChatOpenAI-VSAdc{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-VSAdcœ}-LLMChain-H7PBy{œfieldNameœ:œllmœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\"},{\"source\":\"GroupNode-WXPMk\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œGroupNode-WXPMkœ}\",\"target\":\"LLMChain-H7PBy\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-H7PBy\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"GroupNode-WXPMk\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-GroupNode-WXPMk{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œGroupNode-WXPMkœ}-LLMChain-H7PBy{œfieldNameœ:œpromptœ,œidœ:œLLMChain-H7PByœ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":-348.6161822813733,\"y\":121.40545291211492,\"zoom\":0.6801854262029781}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:22:27.784647\",\"folder\":null,\"id\":\"efc3bf27-3cf1-4561-9a83-3df347572440\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sad Joliot\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-RQsU1\",\"type\":\"genericNode\",\"position\":{\"x\":514.4440482813261,\"y\":528.164086188516},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-RQsU1\"},\"selected\":false,\"positionAbsolute\":{\"x\":514.4440482813261,\"y\":528.164086188516}},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-NTTcv\",\"type\":\"genericNode\",\"position\":{\"x\":-221.33853765781578,\"y\":-35.48749923706055},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-NTTcv\"},\"selected\":false,\"positionAbsolute\":{\"x\":-221.33853765781578,\"y\":-35.48749923706055}},{\"width\":384,\"height\":374,\"id\":\"PromptTemplate-VELMV\",\"type\":\"genericNode\",\"position\":{\"x\":-222,\"y\":682.560723386973},\"data\":{\"id\":\"PromptTemplate-VELMV\",\"type\":\"PromptTemplate\",\"node\":{\"output_types\":[],\"display_name\":\"Web Scraper\",\"documentation\":\"\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"description\":\"Fetch and parse text and links from a given URL.\",\"template\":{\"code_CustomComponent-f6nOg\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"code\"},\"display_name\":\"Code\"},\"ignore_links_CustomComponent-f6nOg\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-f6nOg\",\"field\":\"ignore_links\"}},\"code_CustomComponent-FGzJJ\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-FGzJJ\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-0XtUN\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-0XtUN\",\"field\":\"code\"},\"display_name\":\"Code\"},\"code_CustomComponent-ODIcp\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-ODIcp\",\"field\":\"code\"},\"display_name\":\"Code\"},\"output_parser_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"output_parser\"},\"display_name\":\"Output Parser\"},\"input_types_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_types\"},\"display_name\":\"Input Types\"},\"input_variables_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"input_variables\"},\"display_name\":\"Input Variables\"},\"partial_variables_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"partial_variables\"},\"display_name\":\"Partial Variables\"},\"template_PromptTemplate-H9Udy\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template\"},\"display_name\":\"Template\"},\"template_format_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"template_format\"},\"display_name\":\"Template Format\"},\"validate_template_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"validate_template\"},\"display_name\":\"Validate Template\"},\"query_PromptTemplate-H9Udy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"PromptTemplate-H9Udy\",\"field\":\"query\"}},\"code_CustomComponent-OACE0\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"code\"},\"display_name\":\"Code\"},\"url_CustomComponent-OACE0\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-OACE0\",\"field\":\"url\"},\"value\":\"https://paperswithcode.com/\"},\"code_CustomComponent-whsQ5\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"proxy\":{\"id\":\"CustomComponent-whsQ5\",\"field\":\"code\"},\"display_name\":\"Code\"}},\"flow\":{\"data\":{\"nodes\":[{\"width\":384,\"height\":405,\"id\":\"CustomComponent-f6nOg\",\"type\":\"genericNode\",\"position\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-f6nOg\"},\"selected\":true,\"positionAbsolute\":{\"x\":665.2835942536854,\"y\":-371.7823429271119},\"dragging\":false},{\"width\":384,\"height\":375,\"id\":\"CustomComponent-FGzJJ\",\"type\":\"genericNode\",\"position\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-FGzJJ\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-464.4553400967736,\"y\":-225.62715888255525}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-0XtUN\",\"type\":\"genericNode\",\"position\":{\"x\":214.00059169497604,\"y\":177.27071061129823},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-0XtUN\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":214.00059169497604,\"y\":177.27071061129823}},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-ODIcp\",\"type\":\"genericNode\",\"position\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ODIcp\"},\"selected\":true,\"positionAbsolute\":{\"x\":845.0502195222412,\"y\":366.54344452019404},\"dragging\":false},{\"width\":384,\"height\":657,\"id\":\"PromptTemplate-H9Udy\",\"type\":\"genericNode\",\"position\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-H9Udy\"},\"selected\":true,\"positionAbsolute\":{\"x\":2230.389721706283,\"y\":584.4905083765256},\"dragging\":false},{\"width\":384,\"height\":347,\"id\":\"CustomComponent-OACE0\",\"type\":\"genericNode\",\"position\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-OACE0\"},\"selected\":true,\"positionAbsolute\":{\"x\":-1155.9497945157625,\"y\":198.13583204151553},\"dragging\":false},{\"width\":384,\"height\":329,\"id\":\"CustomComponent-whsQ5\",\"type\":\"genericNode\",\"position\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-whsQ5\"},\"selected\":true,\"positionAbsolute\":{\"x\":1396.5574076376327,\"y\":694.8308714574463},\"dragging\":false}],\"edges\":[{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-f6nOg\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-f6nOg\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-f6nOg{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-f6nOgœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-FGzJJ\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}\",\"target\":\"CustomComponent-0XtUN\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-0XtUN\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-FGzJJ\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-FGzJJ{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-FGzJJœ}-CustomComponent-0XtUN{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-0XtUNœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-0XtUN\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}\",\"target\":\"CustomComponent-ODIcp\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-ODIcp\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-0XtUN\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-0XtUN{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-0XtUNœ}-CustomComponent-ODIcp{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-ODIcpœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"CustomComponent-FGzJJ\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-FGzJJ\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-CustomComponent-FGzJJ{œfieldNameœ:œurlœ,œidœ:œCustomComponent-FGzJJœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-OACE0\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-OACE0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-OACE0{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-OACE0œ}-PromptTemplate-H9Udy{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-ODIcp\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}\",\"target\":\"CustomComponent-whsQ5\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-whsQ5\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ODIcp\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ODIcp{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ODIcpœ}-CustomComponent-whsQ5{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-whsQ5œ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":true},{\"source\":\"CustomComponent-whsQ5\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-whsQ5\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-whsQ5{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-whsQ5œ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true},{\"source\":\"CustomComponent-f6nOg\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}\",\"target\":\"PromptTemplate-H9Udy\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-H9Udy\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-f6nOg\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-foreground stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-f6nOg{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-f6nOgœ}-PromptTemplate-H9Udy{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-H9Udyœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":true}],\"viewport\":{\"x\":343.0346131188585,\"y\":341.89843948642147,\"zoom\":0.24148408223121196}},\"is_component\":false,\"name\":\"Fluffy Ptolemy\",\"description\":\"\",\"id\":\"W5oNW\"}}},\"selected\":false,\"positionAbsolute\":{\"x\":-222,\"y\":682.560723386973}}],\"edges\":[{\"source\":\"ChatOpenAI-NTTcv\",\"target\":\"LLMChain-RQsU1\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-NTTcvœ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-NTTcv{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-NTTcvœ}-LLMChain-RQsU1{œfieldNameœ:œllmœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-RQsU1\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-NTTcv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 \",\"animated\":false,\"selected\":false},{\"source\":\"PromptTemplate-VELMV\",\"target\":\"LLMChain-RQsU1\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-VELMVœ}\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"id\":\"reactflow__edge-PromptTemplate-VELMV{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-VELMVœ}-LLMChain-RQsU1{œfieldNameœ:œpromptœ,œidœ:œLLMChain-RQsU1œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-RQsU1\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-VELMV\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 \",\"animated\":false,\"selected\":false}],\"viewport\":{\"x\":298.29888454238517,\"y\":96.95765543775741,\"zoom\":0.5140569133280332}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:23:08.584967\",\"folder\":null,\"id\":\"5df79f1d-f592-4d59-8c0f-9f3c2f6465b1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Pasteur\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":338,\"id\":\"LLMChain-cHel8\",\"type\":\"genericNode\",\"position\":{\"x\":547.3876889720291,\"y\":299.2057833881307},\"data\":{\"type\":\"LLMChain\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Chain,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable]:\\n return LLMChain(prompt=prompt, llm=llm, memory=memory)\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false}},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Chain\",\"Callable\"],\"display_name\":\"LLMChain\",\"custom_fields\":{\"llm\":null,\"memory\":null,\"prompt\":null},\"output_types\":[\"LLMChain\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"LLMChain-cHel8\"},\"selected\":false,\"positionAbsolute\":{\"x\":547.3876889720291,\"y\":299.2057833881307},\"dragging\":false},{\"width\":384,\"height\":626,\"id\":\"ChatOpenAI-LA6y0\",\"type\":\"genericNode\",\"position\":{\"x\":-272.94405331278074,\"y\":-603.148171441675},\"data\":{\"type\":\"ChatOpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"password\":false,\"options\":[\"gpt-4-1106-preview\",\"gpt-4\",\"gpt-4-32k\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"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\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"0.1\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"ChatOpenAI-LA6y0\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-272.94405331278074,\"y\":-603.148171441675}},{\"width\":384,\"height\":404,\"id\":\"CustomComponent-ZNoRM\",\"type\":\"genericNode\",\"position\":{\"x\":-103.65741264289085,\"y\":134.62332404764658},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport html2text\\n\\nclass ConvertHTMLToMarkdown(CustomComponent):\\n display_name: str = \\\"HTML to Markdown\\\"\\n description: str = \\\"Converts HTML content to Markdown format.\\\"\\n\\n def build(self, html_content: Data, ignore_links: bool = False) -> str:\\n converter = html2text.HTML2Text()\\n converter.ignore_links = ignore_links\\n markdown_text = converter.handle(html_content)\\n self.status = markdown_text\\n return markdown_text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"ignore_links\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"ignore_links\",\"display_name\":\"ignore_links\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Converts HTML content to Markdown format.\",\"base_classes\":[\"str\"],\"display_name\":\"HTML to Markdown\",\"custom_fields\":{\"html_content\":null,\"ignore_links\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-ZNoRM\"},\"selected\":false,\"positionAbsolute\":{\"x\":-103.65741264289085,\"y\":134.62332404764658},\"dragging\":false},{\"width\":384,\"height\":374,\"id\":\"CustomComponent-zNSTv\",\"type\":\"genericNode\",\"position\":{\"x\":-1233.3963469933499,\"y\":280.77850809220325},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"Fetch HTML\\\"\\n description: str = \\\"Fetches HTML content from a specified URL.\\\"\\n \\n def build_config(self):\\n return {\\\"url\\\": {\\\"input_types\\\": [\\\"Data\\\", \\\"str\\\"]}} \\n\\n def build(self, url: str) -> Data:\\n response = requests.get(url)\\n self.status = str(response) + \\\"\\\\n\\\\n\\\" + response.text\\n return response.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Data\",\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Fetches HTML content from a specified URL.\",\"base_classes\":[\"Data\"],\"display_name\":\"Fetch HTML\",\"custom_fields\":{\"url\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-zNSTv\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-1233.3963469933499,\"y\":280.77850809220325}},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-Ihm2o\",\"type\":\"genericNode\",\"position\":{\"x\":-554.9404152016002,\"y\":683.6763775860567},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from bs4 import BeautifulSoup\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ParseHTMLContent(CustomComponent):\\n display_name: str = \\\"Parse HTML\\\"\\n description: str = \\\"Parses HTML content using Beautiful Soup.\\\"\\n\\n def build(self, html_content: Data) -> Data:\\n soup = BeautifulSoup(html_content, 'html.parser')\\n self.status = soup\\n return soup\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"html_content\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"html_content\",\"display_name\":\"html_content\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Parses HTML content using Beautiful Soup.\",\"base_classes\":[\"Data\"],\"display_name\":\"Parse HTML\",\"custom_fields\":{\"html_content\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-Ihm2o\"},\"selected\":false,\"dragging\":false,\"positionAbsolute\":{\"x\":-554.9404152016002,\"y\":683.6763775860567}},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-6ST9l\",\"type\":\"genericNode\",\"position\":{\"x\":76.10921262566495,\"y\":872.9491114949525},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\nclass ExtractHyperlinks(CustomComponent):\\n display_name: str = \\\"Extract Hyperlinks\\\"\\n description: str = \\\"Extracts hyperlinks from parsed HTML content.\\\"\\n\\n def build(self, soup: Data) -> list:\\n links = [link.get('href') for link in soup.find_all('a')]\\n self.status = links\\n return links\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"soup\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"soup\",\"display_name\":\"soup\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Extracts hyperlinks from parsed HTML content.\",\"base_classes\":[\"list\"],\"display_name\":\"Extract Hyperlinks\",\"custom_fields\":{\"soup\":null},\"output_types\":[\"list\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-6ST9l\"},\"selected\":false,\"positionAbsolute\":{\"x\":76.10921262566495,\"y\":872.9491114949525},\"dragging\":false},{\"width\":384,\"height\":654,\"id\":\"PromptTemplate-l35W1\",\"type\":\"genericNode\",\"position\":{\"x\":1461.4487148097069,\"y\":1090.896175351284},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false,\"display_name\":\"output_parser\"},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"display_name\":\"input_types\"},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"url\",\"html_markdown\",\"html_links\",\"query\"],\"display_name\":\"input_variables\"},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false,\"display_name\":\"partial_variables\"},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"Below is the HTML content (as markdown) and hyperlinks extracted from {url}\\n\\n---\\n\\nContent:\\n\\n{html_markdown}\\n\\n---\\n\\nLinks:\\n\\n{html_links}\\n\\n---\\n\\nAnswer the user query as best as possible.\\n\\nUser query:\\n\\n{query}\\n\\nAnswer:\\n\",\"display_name\":\"template\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false,\"display_name\":\"template_format\"},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false,\"display_name\":\"validate_template\"},\"_type\":\"PromptTemplate\",\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_markdown\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_markdown\",\"display_name\":\"html_markdown\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"html_links\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"html_links\",\"display_name\":\"html_links\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"url\",\"html_markdown\",\"html_links\",\"query\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-l35W1\"},\"selected\":false,\"positionAbsolute\":{\"x\":1461.4487148097069,\"y\":1090.896175351284},\"dragging\":false},{\"width\":384,\"height\":346,\"id\":\"CustomComponent-iTLf4\",\"type\":\"genericNode\",\"position\":{\"x\":-1924.8908014123388,\"y\":704.5414990162741},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nimport requests\\n\\nclass FetchHTMLContent(CustomComponent):\\n display_name: str = \\\"URL Input\\\"\\n\\n def build(self, url: str) -> str:\\n return url\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"https://paperswithcode.com/\"}},\"description\":null,\"base_classes\":[\"str\"],\"display_name\":\"URL Input\",\"custom_fields\":{\"url\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-iTLf4\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1924.8908014123388,\"y\":704.5414990162741},\"dragging\":false},{\"width\":384,\"height\":328,\"id\":\"CustomComponent-jWLUz\",\"type\":\"genericNode\",\"position\":{\"x\":627.6164007410564,\"y\":1201.2365384322047},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nclass ListToMarkdownBullets(CustomComponent):\\n display_name: str = \\\"List to Bullets\\\"\\n description: str = \\\"Converts a Python list into Markdown bullet points.\\\"\\n\\n def build(self, items: list) -> str:\\n markdown_bullets = '\\\\n'.join(f'* {item}' for item in items)\\n return markdown_bullets\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false,\"display_name\":\"code\"},\"_type\":\"CustomComponent\",\"items\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"items\",\"display_name\":\"items\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"list\",\"list\":true}},\"description\":\"Converts a Python list into Markdown bullet points.\",\"base_classes\":[\"str\"],\"display_name\":\"List to Bullets\",\"custom_fields\":{\"items\":null},\"output_types\":[\"str\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"CustomComponent-jWLUz\"},\"selected\":false,\"positionAbsolute\":{\"x\":627.6164007410564,\"y\":1201.2365384322047},\"dragging\":false}],\"edges\":[{\"source\":\"ChatOpenAI-LA6y0\",\"target\":\"LLMChain-cHel8\",\"sourceHandle\":\"{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-LA6y0œ}\",\"targetHandle\":\"{œfieldNameœ:œllmœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"id\":\"reactflow__edge-ChatOpenAI-LA6y0{œbaseClassesœ:[œBaseLanguageModelœ,œChatOpenAIœ,œBaseChatModelœ,œBaseLLMœ],œdataTypeœ:œChatOpenAIœ,œidœ:œChatOpenAI-LA6y0œ}-LLMChain-cHel8{œfieldNameœ:œllmœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBaseLanguageModelœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"llm\",\"id\":\"LLMChain-cHel8\",\"inputTypes\":null,\"type\":\"BaseLanguageModel\"},\"sourceHandle\":{\"baseClasses\":[\"BaseLanguageModel\",\"ChatOpenAI\",\"BaseChatModel\",\"BaseLLM\"],\"dataType\":\"ChatOpenAI\",\"id\":\"ChatOpenAI-LA6y0\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"selected\":false},{\"source\":\"CustomComponent-zNSTv\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}\",\"target\":\"CustomComponent-ZNoRM\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-ZNoRMœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-ZNoRM\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-zNSTv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-zNSTv{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}-CustomComponent-ZNoRM{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-ZNoRMœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-zNSTv\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}\",\"target\":\"CustomComponent-Ihm2o\",\"targetHandle\":\"{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-Ihm2oœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_content\",\"id\":\"CustomComponent-Ihm2o\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-zNSTv\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-zNSTv{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-zNSTvœ}-CustomComponent-Ihm2o{œfieldNameœ:œhtml_contentœ,œidœ:œCustomComponent-Ihm2oœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-Ihm2o\",\"sourceHandle\":\"{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-Ihm2oœ}\",\"target\":\"CustomComponent-6ST9l\",\"targetHandle\":\"{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-6ST9lœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"soup\",\"id\":\"CustomComponent-6ST9l\",\"inputTypes\":null,\"type\":\"Data\"},\"sourceHandle\":{\"baseClasses\":[\"Data\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-Ihm2o\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-Ihm2o{œbaseClassesœ:[œDataœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-Ihm2oœ}-CustomComponent-6ST9l{œfieldNameœ:œsoupœ,œidœ:œCustomComponent-6ST9lœ,œinputTypesœ:null,œtypeœ:œDataœ}\",\"selected\":false},{\"source\":\"CustomComponent-iTLf4\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}\",\"target\":\"CustomComponent-zNSTv\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œCustomComponent-zNSTvœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"CustomComponent-zNSTv\",\"inputTypes\":[\"Data\",\"str\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-iTLf4\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-iTLf4{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}-CustomComponent-zNSTv{œfieldNameœ:œurlœ,œidœ:œCustomComponent-zNSTvœ,œinputTypesœ:[œDataœ,œstrœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-iTLf4\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"url\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-iTLf4\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-iTLf4{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-iTLf4œ}-PromptTemplate-l35W1{œfieldNameœ:œurlœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-6ST9l\",\"sourceHandle\":\"{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-6ST9lœ}\",\"target\":\"CustomComponent-jWLUz\",\"targetHandle\":\"{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-jWLUzœ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"items\",\"id\":\"CustomComponent-jWLUz\",\"inputTypes\":null,\"type\":\"list\"},\"sourceHandle\":{\"baseClasses\":[\"list\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-6ST9l\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-6ST9l{œbaseClassesœ:[œlistœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-6ST9lœ}-CustomComponent-jWLUz{œfieldNameœ:œitemsœ,œidœ:œCustomComponent-jWLUzœ,œinputTypesœ:null,œtypeœ:œlistœ}\",\"selected\":false},{\"source\":\"CustomComponent-jWLUz\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-jWLUzœ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_links\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-jWLUz\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-jWLUz{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-jWLUzœ}-PromptTemplate-l35W1{œfieldNameœ:œhtml_linksœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"CustomComponent-ZNoRM\",\"sourceHandle\":\"{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ZNoRMœ}\",\"target\":\"PromptTemplate-l35W1\",\"targetHandle\":\"{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"html_markdown\",\"id\":\"PromptTemplate-l35W1\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"str\"],\"dataType\":\"CustomComponent\",\"id\":\"CustomComponent-ZNoRM\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-CustomComponent-ZNoRM{œbaseClassesœ:[œstrœ],œdataTypeœ:œCustomComponentœ,œidœ:œCustomComponent-ZNoRMœ}-PromptTemplate-l35W1{œfieldNameœ:œhtml_markdownœ,œidœ:œPromptTemplate-l35W1œ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"selected\":false},{\"source\":\"PromptTemplate-l35W1\",\"sourceHandle\":\"{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-l35W1œ}\",\"target\":\"LLMChain-cHel8\",\"targetHandle\":\"{œfieldNameœ:œpromptœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"prompt\",\"id\":\"LLMChain-cHel8\",\"inputTypes\":null,\"type\":\"BasePromptTemplate\"},\"sourceHandle\":{\"baseClasses\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"dataType\":\"PromptTemplate\",\"id\":\"PromptTemplate-l35W1\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptTemplate-mJqEg{œbaseClassesœ:[œStringPromptTemplateœ,œBasePromptTemplateœ,œPromptTemplateœ],œdataTypeœ:œPromptTemplateœ,œidœ:œPromptTemplate-mJqEgœ}-LLMChain-cHel8{œfieldNameœ:œpromptœ,œidœ:œLLMChain-cHel8œ,œinputTypesœ:null,œtypeœ:œBasePromptTemplateœ}\"}],\"viewport\":{\"x\":206.6159172940935,\"y\":79.94375811155385,\"zoom\":0.5140569133280333}},\"is_component\":false,\"updated_at\":\"2023-12-06T00:23:04.515144\",\"folder\":null,\"id\":\"ecfb377a-7e88-405d-8d66-7560735ce446\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Lovelace\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-04T23:43:25.925753\",\"folder\":null,\"id\":\"30e71767-6128-40e4-9a6d-b9197b679971\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Custom Component\",\"description\":\"Create any custom component you want!\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Custom Component\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Data) -> Data:\\n return param\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"param\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false}},\"description\":\"Create any custom component you want!\",\"base_classes\":[\"Data\"],\"display_name\":\"Custom Component\",\"custom_fields\":{\"param\":null},\"output_types\":[\"CustomComponent\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-IxJqc\"},\"id\":\"CustomComponent-IxJqc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-05T22:08:27.080204\",\"folder\":null,\"id\":\"f3c56abb-96d8-4a09-80d3-f60181661b3c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazing Wilson\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-05T23:49:58.272677\",\"folder\":null,\"id\":\"324499a6-17a6-49de-96b1-b88955ed2c3d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nauseous Kowalevski\",\"description\":\"Create, Curate, Communicate with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:27.084387\",\"folder\":null,\"id\":\"e3168485-d31b-472a-907f-faf833bf7824\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Fermi\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.134463\",\"folder\":null,\"id\":\"d0ecea5d-bcf9-4b8e-88f0-3c243d309336\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Friendly Ardinghelli\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.138184\",\"folder\":null,\"id\":\"a406912d-b0e2-4954-bef3-ee80c29eca3c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Easley\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.162908\",\"folder\":null,\"id\":\"57b32155-4c6e-4823-ad03-8dd09d8abc62\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Varahamihira\",\"description\":\"Create, Chain, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.135644\",\"folder\":null,\"id\":\"18daa0ff-2e5d-457a-95d7-710affec5c4d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Joliot\",\"description\":\"Language Architect at Work!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.139496\",\"folder\":null,\"id\":\"9255e938-280e-4ce7-91cd-8622126a7d02\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Carroll\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:45:57.162240\",\"folder\":null,\"id\":\"a7a680b9-30b1-4438-ac24-da597de443aa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Herschel\",\"description\":\"Your Hub for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:46:02.593504\",\"folder\":null,\"id\":\"37a439b0-7b1d-45e3-b4fa-5c73669bae3b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Joliot\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:04.845238\",\"folder\":null,\"id\":\"4d23fd0a-8ad5-46b9-bb99-eed4138e7426\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Happy Babbage\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:41.899665\",\"folder\":null,\"id\":\"1c8ad5b9-5524-41fe-a762-52c75126b832\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Brown\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.702031\",\"folder\":null,\"id\":\"9d4c8e79-4904-4a51-a4bb-146c3d8db10e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Mahavira\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.786331\",\"folder\":null,\"id\":\"4ba370d1-1f8e-4a23-99aa-99e2cd9b7cbf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mad Gates\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.838989\",\"folder\":null,\"id\":\"992c3cd3-1d79-4986-8c04-88a34130fa30\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Mcclintock\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.932723\",\"folder\":null,\"id\":\"a65bfd13-44df-4090-aca0-5057e21e9997\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Feynman\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:42.931359\",\"folder\":null,\"id\":\"7a05dac5-c005-411d-9994-19d61e71ce78\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Perlman\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:43.054687\",\"folder\":null,\"id\":\"6db24541-7211-48e6-a792-1a4a99a0ef90\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jolly Colden\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:47:43.078384\",\"folder\":null,\"id\":\"13ac42e8-9124-4bf4-9ea2-28671ef2d9a4\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Kaku\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:50:33.156776\",\"folder\":null,\"id\":\"79262d75-5c62-4b14-b067-f4297f5c912f\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jovial Khayyam\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:13.295375\",\"folder\":null,\"id\":\"3b397e74-d8be-4728-9d6c-05f7c78106a7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Mccarthy\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:27.632685\",\"folder\":null,\"id\":\"13f4e1fd-45eb-4271-92fd-0d70a31c61d2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Lalande\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:51:54.628983\",\"folder\":null,\"id\":\"9cfd60d8-9311-47b0-b71b-f488f1940bc7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Romantic Mirzakhani\",\"description\":\"Innovation in Interaction with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:52:52.622698\",\"folder\":null,\"id\":\"0d849403-0f75-455d-b4e4-0d622ee3305a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Brown\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:06.056636\",\"folder\":null,\"id\":\"8643ba14-52d6-4d36-9981-5fd37de5dd76\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Kickass Watt\",\"description\":\"Transform Your Business with Smart Dialogues.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:23.338727\",\"folder\":null,\"id\":\"818d3066-bf08-4bf9-adcd-739f8abbfa5d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bose\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:53:41.218861\",\"folder\":null,\"id\":\"28eff43e-0ecf-47bf-9851-f1492589978e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Optimistic Jennings\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:55:03.681106\",\"folder\":null,\"id\":\"68f59069-bc2a-464f-a983-4b61e32e01af\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pedantic Mirzakhani\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:55:31.761949\",\"folder\":null,\"id\":\"5d981c0e-81b3-44cc-a5be-8f55b92bfed5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Murdock\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:56:45.548598\",\"folder\":null,\"id\":\"e812ad47-47e8-422b-b94c-84fd0263c9c8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Berserk Fermat\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:58:50.234270\",\"folder\":null,\"id\":\"82aaf449-e737-4699-9360-929ab6108dc7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Albattani\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T22:59:53.946035\",\"folder\":null,\"id\":\"097cb080-274b-40ca-8dde-7900a949568a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Kirch\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:00:51.745350\",\"folder\":null,\"id\":\"837d7b5f-8495-46a9-b00e-ad1b7ebb52f4\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Kowalevski\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:02:53.336102\",\"folder\":null,\"id\":\"3ff079c2-d9f9-4da6-a22a-423fa35670ff\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Stallman\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:03:28.268357\",\"folder\":null,\"id\":\"c8b204dd-3d57-4bc8-aa13-1d559672e75b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Swirles\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:03:51.194455\",\"folder\":null,\"id\":\"a097f083-5880-4cf7-986b-51898bc68e11\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dreamy Williams\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:04:36.678251\",\"folder\":null,\"id\":\"d9585f63-ce76-42ce-87bc-8e69601ea5c6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zany Hawking\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:05:13.672479\",\"folder\":null,\"id\":\"612a01d5-8c8d-4cc1-8c54-35626b7f4a6d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazing Kilby\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:10:37.047955\",\"folder\":null,\"id\":\"2d05a598-3cdf-452a-bd5d-b0e569e562e3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Insane Cori\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:18:12.426578\",\"folder\":null,\"id\":\"d1769a4a-c1e9-4d74-9273-1e76cfcf21f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Compassionate Tesla\",\"description\":\"Graph Your Way to Great Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:18:52.806238\",\"folder\":null,\"id\":\"28c5d9dd-0466-4c80-9e58-b1e061cd358d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Goldstine\",\"description\":\"Harness the Power of Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-06T23:21:44.488510\",\"folder\":null,\"id\":\"b3c57e4f-28a1-4580-bf08-a9484bdd66e8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elegant Curie\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:23:47.610237\",\"folder\":null,\"id\":\"28fb024e-6ba1-4f5b-83b3-4742b3b8117c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Chandrasekhar\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:24:29.824530\",\"folder\":null,\"id\":\"d2b87cf7-9167-4030-8e9f-b8d9aa0cadee\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Nobel\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:26:51.210699\",\"folder\":null,\"id\":\"c2c9fbac-7d97-40c2-8055-dff608df9414\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Edison\",\"description\":\"Advanced NLP for Groundbreaking Business Solutions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:27:35.822482\",\"folder\":null,\"id\":\"a55561cd-4b25-473f-bde5-884cbabb0d24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Lichterman\",\"description\":\"Building Linguistic Labyrinths.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:29:09.259381\",\"folder\":null,\"id\":\"9c6fe6d4-8311-4fc6-8b02-2a816d7c059d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Bhaskara\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:31:36.053452\",\"folder\":null,\"id\":\"ef6fc1ab-aff8-45a1-8cd5-bc8e38565e4d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Watt\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:32:26.765250\",\"folder\":null,\"id\":\"499b5351-9c09-4934-9f9d-a24be2fd8b24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jolly Wien\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:33:23.648859\",\"folder\":null,\"id\":\"a57eda91-7f6e-410d-9990-385fe0c724f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Spence\",\"description\":\"Mapping Meaningful Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:34:22.576407\",\"folder\":null,\"id\":\"685f685e-8a1b-4b7e-9e21-6cdd72163c91\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Comical Fermat\",\"description\":\"Create, Connect, Converse.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:35:44.920540\",\"folder\":null,\"id\":\"3e061766-b834-4fa4-ba9c-b060925d9703\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Volta\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:36:33.001572\",\"folder\":null,\"id\":\"135f2fd9-e005-40bc-a9bf-c25107388415\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Davinci\",\"description\":\"Create Powerful Connections, Boost Business Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:37:16.208823\",\"folder\":null,\"id\":\"167cdb24-7e1c-475b-893a-cca2f125426c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Sinoussi\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:38:07.215401\",\"folder\":null,\"id\":\"48113cab-2c04-493f-8c2e-c8d067826aa2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Sagan\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:39:19.479656\",\"folder\":null,\"id\":\"28d292dc-e094-4ffe-a657-178892933267\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Hoover\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:40:02.895859\",\"folder\":null,\"id\":\"0c9849b7-b2d6-4d0e-8334-abfb3ae183dd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Mendeleev\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:40:27.867247\",\"folder\":null,\"id\":\"d78c52e9-1941-4555-9bb9-abd01f176705\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Dubinsky\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:41:23.177402\",\"folder\":null,\"id\":\"5277a04c-b5da-4597-aaa2-a6b66ea11d02\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Poitras\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:42:08.731865\",\"folder\":null,\"id\":\"b0d0c8de-4eea-484a-a068-b13e63f7e71c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pedantic Ptolemy\",\"description\":\"Crafting Conversations, One Node at a Time.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:42:25.658996\",\"folder\":null,\"id\":\"b6f155e2-03eb-4232-9bab-145463382fe9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Loving Cray\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:43:57.530112\",\"folder\":null,\"id\":\"b75c10ca-9ecb-432b-88ab-e1847e836e22\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Pasteur\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:44:58.979393\",\"folder\":null,\"id\":\"3710eccb-e7a7-41d5-9339-d9c301515d17\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Gates\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:45:42.744174\",\"folder\":null,\"id\":\"fdd2271e-92f6-4349-8c01-2ec0e9e73f13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Determined Khorana\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:46:10.084684\",\"folder\":null,\"id\":\"88b49a97-0888-4fea-8d9b-6ac2cc6d158e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Booth\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:46:41.577750\",\"folder\":null,\"id\":\"629afe54-8796-45be-a570-e3ac79c60792\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jubilant Mendeleev\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:47:22.631243\",\"folder\":null,\"id\":\"7bf481b0-73fe-4f5b-a3d4-1263d9d8e827\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Clever Varahamihira\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:49:51.026960\",\"folder\":null,\"id\":\"df9e86b6-56c9-4848-9010-102615314766\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Stallman\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:50:14.932236\",\"folder\":null,\"id\":\"3e66994c-9b7a-4b85-a917-65d1959d7352\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Modest Wozniak\",\"description\":\"Advanced NLP for Groundbreaking Business Solutions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:51:13.811894\",\"folder\":null,\"id\":\"d10f924a-5780-4255-9f41-3e102ae03e84\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hopeful Mirzakhani\",\"description\":\"Graph Your Way to Great Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:52:23.906908\",\"folder\":null,\"id\":\"f3378fa8-ccaf-4a3b-90d6-b8ab0c4e481f\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Joule\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:52:43.863440\",\"folder\":null,\"id\":\"deaa50e7-a8b1-46b1-856c-334ee781e1c2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Shockley\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:53:43.299699\",\"folder\":null,\"id\":\"c72eac2c-d924-40c6-a102-da524216d090\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zany Dewey\",\"description\":\"Flow into the Future of Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:54:18.848827\",\"folder\":null,\"id\":\"d9425324-bb60-462e-b431-90a536f2bc76\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gloomy Joliot\",\"description\":\"Language Engineering Excellence.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:12.348608\",\"folder\":null,\"id\":\"621ba134-3fac-487c-98cd-96941439f1be\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Backstabbing Franklin\",\"description\":\"Craft Language Connections Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.491824\",\"folder\":null,\"id\":\"86ca9773-c7b7-4a1a-859a-6cbe0ddff206\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sharp Swartz\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.524414\",\"folder\":null,\"id\":\"da1c02b7-d608-4498-9946-7d02f55fa103\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Volta\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.641432\",\"folder\":null,\"id\":\"8d5dd998-6b51-4f65-8331-086a7f3b11d7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Lichterman\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.746120\",\"folder\":null,\"id\":\"942027d3-e2ea-48c6-8279-0a41b54e8862\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Einstein\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.746904\",\"folder\":null,\"id\":\"9e9b6298-1073-4297-8ecc-3c620b432e70\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Planck\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.747420\",\"folder\":null,\"id\":\"7cd60c83-b797-4e60-af6d-cbc540657943\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Zobell\",\"description\":\"Innovation in Interaction, Revolution in Revenue.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:58:13.749951\",\"folder\":null,\"id\":\"dab08306-9521-4e15-aa11-e6a6a4e210f8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Knuth\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:16.772119\",\"folder\":null,\"id\":\"c9149590-636a-44f5-aaae-45a4e78fe4df\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Wright\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:52.954568\",\"folder\":null,\"id\":\"6b23b2ad-c07c-46f6-b9ad-268783d1712e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Vibrant Lalande\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.656156\",\"folder\":null,\"id\":\"ece3bcf6-a147-4559-862e-cacff9db5f48\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Happy Gauss\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.717991\",\"folder\":null,\"id\":\"252b6021-ecad-4eaf-9e2f-106c4c89c496\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gigantic Rosalind\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.736261\",\"folder\":null,\"id\":\"b8cb6d8d-c0fb-4e8d-a46e-2c608dc8a714\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Adoring Hubble\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.769546\",\"folder\":null,\"id\":\"553a67db-7225-474c-978e-8a40cde2bfb2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Mclean\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.981063\",\"folder\":null,\"id\":\"e0865007-4d80-4edf-87ab-9e8d2892d719\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Trusting Murdock\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.982286\",\"folder\":null,\"id\":\"1021cd20-66e0-4b81-9c79-bfe729774d20\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Riemann\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T00:59:53.983216\",\"folder\":null,\"id\":\"089074d3-8a1e-4d85-a59d-b4717090e4d3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Tesla\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:00:35.704142\",\"folder\":null,\"id\":\"beb49d88-255e-4db4-931b-4ab4358f1097\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Boyd\",\"description\":\"Smart Chains, Smarter Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:01:13.569507\",\"folder\":null,\"id\":\"75b5ab8d-e0c0-43cf-912b-8578550e198a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Babbage\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:01:27.944868\",\"folder\":null,\"id\":\"503edd55-8f70-43e5-87fb-2324eaf62336\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Bose\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:02:40.122079\",\"folder\":null,\"id\":\"ae4f2992-1a23-4a43-bec6-68b823935762\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Coulomb\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.263237\",\"folder\":null,\"id\":\"a2a464db-b02a-4440-ad9e-7b552ee6c027\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Drunk Newton\",\"description\":\"Craft Meaningful Interactions, Generate Value.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.883766\",\"folder\":null,\"id\":\"1a5d9af7-5a96-4035-a09c-e15741785828\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Jovial Pasteur\",\"description\":\"Your Hub for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.933083\",\"folder\":null,\"id\":\"04b94873-0828-41dc-a850-fd4132c9b9f1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Playful Spence\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.967685\",\"folder\":null,\"id\":\"47003dc2-7884-48a3-aa66-e4185079f4d9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Noyce\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:15.983198\",\"folder\":null,\"id\":\"13769cb4-2e15-4d54-a28a-c97dc15db58c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Edison\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.018879\",\"folder\":null,\"id\":\"453dacde-6b10-406b-a5b3-f90f44be6899\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Upbeat Snyder\",\"description\":\"Powerful Prompts, Perfectly Positioned.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.205689\",\"folder\":null,\"id\":\"9544fac9-3002-47aa-86b9-102844fe9649\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Khorana\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:03:16.243434\",\"folder\":null,\"id\":\"90498ef6-34f9-45c8-8cd0-fe6a36a26f41\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Albattani\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:05:07.775497\",\"folder\":null,\"id\":\"9577c416-8ce8-48f6-ad6d-ab2e003bb415\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Charming Goodall\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:07:52.139318\",\"folder\":null,\"id\":\"f10dc08e-b9c7-44b3-8837-b95aee2f6dbb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Ramanujan\",\"description\":\"Harness the Power of Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:08:22.448480\",\"folder\":null,\"id\":\"c864bd8c-67cd-465f-bf7d-7a35c7df37f3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Mclean\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:09:56.507826\",\"folder\":null,\"id\":\"f0c13b19-ae23-40e6-88d6-d135897ee100\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Hawking\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:10:27.169757\",\"folder\":null,\"id\":\"0afb91b4-8f41-4270-900a-f5de647d45ad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gloomy Lovelace\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:11:02.292233\",\"folder\":null,\"id\":\"0f1e5dcf-8769-4157-b495-5f215b490107\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fervent Kilby\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:11:46.960966\",\"folder\":null,\"id\":\"310d03d9-dd50-4946-9a27-38ee06906212\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Admiring Almeida\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:12:24.475101\",\"folder\":null,\"id\":\"3cbc8fc2-a86f-4177-9a1c-a833b2a24283\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Elated Roentgen\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:06.753571\",\"folder\":null,\"id\":\"c508e922-29e9-4234-84ae-505c5bdf41c1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Perky Poitras\",\"description\":\"Chain the Words, Master Language!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.754605\",\"folder\":null,\"id\":\"1431df05-1b6f-41af-a063-a18d26a946ef\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Khayyam\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.791627\",\"folder\":null,\"id\":\"344e03fb-fd49-4e87-be67-7dce04ba655b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Zealous Mayer\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.803889\",\"folder\":null,\"id\":\"8b3ff1cb-3a6c-46ee-b09a-0e9f9f13a8b9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Ramanujan\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.822583\",\"folder\":null,\"id\":\"18961e76-f4b1-4968-926a-fed22cb04f69\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Franklin\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.854440\",\"folder\":null,\"id\":\"0e0ee854-ab46-4333-a848-2e1239a24334\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Serene Swirles\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:07.988932\",\"folder\":null,\"id\":\"cc7b8238-3d15-4f78-bd0c-8311691c9ff8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Swartz\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:08.028688\",\"folder\":null,\"id\":\"123369f9-c83c-4ed3-93b6-78ca29c271cf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cranky Kowalevski\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.097607\",\"folder\":null,\"id\":\"ed4b1490-e9e5-46bf-b337-166b48eaadd6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Golick\",\"description\":\"Building Powerful Solutions with Language Models.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.617772\",\"folder\":null,\"id\":\"9d1be311-c618-4e3e-aeb1-4161ab37850e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Newton\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.646124\",\"folder\":null,\"id\":\"63a75f99-1745-40d3-9e27-3d19a143be45\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sprightly Noyce\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.685781\",\"folder\":null,\"id\":\"b418ca87-eb17-42e8-b789-3fcb0cab3ddb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fluffy Fermat\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.705984\",\"folder\":null,\"id\":\"93802b07-eee9-4a2b-8691-7d9a231bd67e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Stoic Payne\",\"description\":\"Beyond Text Generation - Unleashing Business Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.723990\",\"folder\":null,\"id\":\"d62df661-0ae5-4b41-a9fb-71cb2e46ad52\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Darwin\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.818343\",\"folder\":null,\"id\":\"d1f62248-415c-474a-bfa6-3509a528a33b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Focused Thompson\",\"description\":\"Transform Your Business with Smart Dialogues.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:13:59.925999\",\"folder\":null,\"id\":\"d2267176-f020-4c52-90a4-7f944d7c1749\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Admiring Dewey\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:07.400402\",\"folder\":null,\"id\":\"8cf1ac8d-d34d-4e8a-a9da-be44672e1dfb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Prickly Zuse\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.384611\",\"folder\":null,\"id\":\"bae3cb5b-0f1b-4e95-bf58-7eab38da3d73\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hungry Zuse\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.436591\",\"folder\":null,\"id\":\"4dfafe3e-e9ef-405d-be72-550084411d69\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Khayyam\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.435958\",\"folder\":null,\"id\":\"e0f81215-dc55-4b5a-b8cf-6e2fcbf297a7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Big Mendel\",\"description\":\"Innovation in Interaction with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.470080\",\"folder\":null,\"id\":\"5022a71c-da47-4975-a4d0-6d2d9e760d3d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Inquisitive Poitras\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.484430\",\"folder\":null,\"id\":\"4f1ff9e3-3500-404c-80af-2010bc46cdcb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Joyous Jones\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.661306\",\"folder\":null,\"id\":\"77af3e47-c2cc-42f6-99e1-78589439a447\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Khayyam\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:15:08.662877\",\"folder\":null,\"id\":\"6f3e2e56-b329-47e3-86cc-024c29203016\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Visvesvaraya\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.092917\",\"folder\":null,\"id\":\"449ac0ee-ee29-4a9f-9aff-fd6a86624457\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Tesla\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.630382\",\"folder\":null,\"id\":\"a2136ed3-dc75-4a8f-ab34-6887ff955b23\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Noether\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.652058\",\"folder\":null,\"id\":\"fd1080f8-db07-481a-b2ba-60f67fcb20a6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Dazzling Pasteur\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.688661\",\"folder\":null,\"id\":\"d534d5e1-92aa-4fb2-a795-7071c4feba47\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Comical Sinoussi\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.741385\",\"folder\":null,\"id\":\"85323170-c066-4d8f-acb0-1b142241389e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Small Ramanujan\",\"description\":\"Uncover Business Opportunities with NLP.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:10.790086\",\"folder\":null,\"id\":\"b0d18432-21ab-404b-acb6-57ef97353fad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sick Joliot\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":442,\"id\":\"OpenAIEmbeddings-rVj1B\",\"type\":\"genericNode\",\"position\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":true,\"name\":\"tiktoken_enabled\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-rVj1B\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187}}],\"edges\":[],\"viewport\":{\"x\":267.7156633365312,\"y\":716.9644817529361,\"zoom\":0.7169776240079139}},\"is_component\":false,\"updated_at\":\"2023-12-08T18:52:26.999440\",\"folder\":null,\"id\":\"be39958a-ef42-4fa8-8e54-b611e56b5c97\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Graceful Lumiere\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-07T01:16:11.012069\",\"folder\":null,\"id\":\"f7dcecfd-533c-4f40-9dcb-f213962ed1a2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"aaaaa\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":442,\"id\":\"OpenAIEmbeddings-P6Z0D\",\"type\":\"genericNode\",\"position\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187},\"data\":{\"type\":\"OpenAIEmbeddings\",\"node\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":true,\"name\":\"tiktoken_enabled\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAIEmbeddings-P6Z0D\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-100.23754663035719,\"y\":-718.7575880388187}}],\"edges\":[],\"viewport\":{\"x\":266.7156633365312,\"y\":657.9644817529361,\"zoom\":0.7169776240079139}},\"is_component\":false,\"updated_at\":\"2023-12-08T19:05:14.503144\",\"folder\":null,\"id\":\"c2411a20-57c6-44cc-a0d0-2c857453633d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Aryabhata\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":459,\"id\":\"CustomComponent-Qhbd7\",\"type\":\"genericNode\",\"position\":{\"x\":-224.36198532285903,\"y\":-39.03047722134913},\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\nfrom openai import OpenAI\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"OpenAI STT english translator\\\"\\n description: str = \\\"Transcript and translate any audio to english\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"audio_path\\\":{\\\"display_name\\\":\\\"Audio path\\\",\\\"input_types\\\":[\\\"str\\\"]},\\\"openAI_key\\\":{\\\"display_name\\\":\\\"OpenAI key\\\",\\\"password\\\":True}}\\n\\n def build(self,audio_path:str,openAI_key:str) -> str:\\n client = OpenAI(api_key=openAI_key)\\n audio_file= open(audio_path, \\\"rb\\\")\\n transcript = client.audio.translations.create(\\n model=\\\"whisper-1\\\", \\n file=audio_file\\n )\\n self.status = transcript.text\\n return transcript.text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"audio_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"audio_path\",\"display_name\":\"Audio path\",\"advanced\":false,\"input_types\":[\"str\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"aaaaa\"},\"openAI_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openAI_key\",\"display_name\":\"OpenAI key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"}},\"description\":\"Transcript and translate any audio to english\",\"base_classes\":[\"str\"],\"display_name\":\"OpenAI STT english tra\",\"custom_fields\":{\"audio_path\":null,\"openAI_key\":null},\"output_types\":[\"str\"],\"documentation\":\"http://docs.langflow.org/components/custom\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Qhbd7\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-224.36198532285903,\"y\":-39.03047722134913}}],\"edges\":[],\"viewport\":{\"x\":433.8372868055629,\"y\":250.9611989970935,\"zoom\":0.8467453123625275}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:16:56.971879\",\"folder\":null,\"id\":\"122eee5d-9734-4e51-9da5-b39bead64a8d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Wing\",\"description\":\"Your Toolkit for Text Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:23.227017\",\"folder\":null,\"id\":\"171d0063-6446-4c6a-8f5b-786a38951d44\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mad Boyd\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.063781\",\"folder\":null,\"id\":\"3a7af50c-6555-4004-a86e-1ea37e477900\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Dewey\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.065404\",\"folder\":null,\"id\":\"dc4b4235-a550-41e2-9ddb-bcb352a1bc03\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nauseous Carroll\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.087501\",\"folder\":null,\"id\":\"9550e2bf-db7a-41f5-84e5-177a181bbeda\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Engelbart\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.112543\",\"folder\":null,\"id\":\"6a3a24bb-01cb-4d8e-8d17-0dc92d257322\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sassy Khayyam\",\"description\":\"Innovation in Interaction, Revolution in Revenue.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.147631\",\"folder\":null,\"id\":\"8d372f5e-ca12-4ea8-a1a1-8846afa72692\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Bell\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.212921\",\"folder\":null,\"id\":\"800f8785-0f41-4db3-aef8-9e3de5250526\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sleepy Bassi\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:18:24.395729\",\"folder\":null,\"id\":\"4589607a-065b-4a8f-ba52-5045d7b04086\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lonely Volhard\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.263971\",\"folder\":null,\"id\":\"b2440ed8-44fa-4684-adf7-b5e84bff6577\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Ecstatic Poincare\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.377270\",\"folder\":null,\"id\":\"b996f514-e0b8-432f-969b-7276630a8f4b\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grave Zuse\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.406385\",\"folder\":null,\"id\":\"6e2e9c12-0afc-499e-acdd-adf4b5f7d4fc\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Big Hopper\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.413014\",\"folder\":null,\"id\":\"e020f1a5-aa12-45e7-ba50-6eb64a735e60\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Jang\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.433045\",\"folder\":null,\"id\":\"ee58f892-b7b2-408e-b4b9-9d862fc315aa\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Ohm\",\"description\":\"Promptly Ingenious!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.403404\",\"folder\":null,\"id\":\"023a1fc3-8807-4167-b6b2-f4e5daf036f1\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Degrasse\",\"description\":\"Bridging Prompts for Brilliance.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.411655\",\"folder\":null,\"id\":\"085f106f-c1e9-4a0f-ba31-d2fafe685d9c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Volta\",\"description\":\"Catalyzing Business Growth through Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:20:33.408697\",\"folder\":null,\"id\":\"14481bb5-1353-452f-9359-d38c9419d79c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bose\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:21.774940\",\"folder\":null,\"id\":\"e9316292-4ee1-441b-8327-0b09a7831fe9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Thirsty Easley\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.416556\",\"folder\":null,\"id\":\"668806ba-3efa-44de-aeb7-4ac082ba9172\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Joyous Mestorf\",\"description\":\"Generate, Innovate, Communicate.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.484048\",\"folder\":null,\"id\":\"3fc0a371-aada-4450-9d17-33d3cc05c870\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Playful Franklin\",\"description\":\"Empowering Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.509095\",\"folder\":null,\"id\":\"af967c98-5f08-4ee2-b1ce-6c16b4f9ebe2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Bhaskara\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.508465\",\"folder\":null,\"id\":\"758c4164-b521-45d0-a15f-d49480e312eb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Funky Edison\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.602296\",\"folder\":null,\"id\":\"f9d3d30f-8859-433f-bafc-ccf1a7196e35\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Silly Ride\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.604061\",\"folder\":null,\"id\":\"0142bca5-eb61-42ed-9917-70c4c0f54eb0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Goofy Noyce\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:22:22.603113\",\"folder\":null,\"id\":\"0b63d036-4669-4ceb-8ea4-34035340df77\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cocky Bhabha\",\"description\":\"Language Engineering Excellence.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.345767\",\"folder\":null,\"id\":\"8b9a66d4-a924-4b84-a2b5-5dd0645ac07a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Thirsty Zobell\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.722319\",\"folder\":null,\"id\":\"c912fd6b-b32d-409f-a0e5-c6249b066429\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Fervent Shaw\",\"description\":\"Language Architect at Work!\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.750779\",\"folder\":null,\"id\":\"9d755cd4-c652-43e0-a68d-75a5475ce7a3\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Giggly Newton\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.786602\",\"folder\":null,\"id\":\"0d3af7de-1ada-4c43-a69f-1bfad370ccfc\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Modest Yalow\",\"description\":\"Text Generation Meets Business Transformation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.792245\",\"folder\":null,\"id\":\"b6444376-4162-436b-8b40-f5a6afc850db\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sad Bhabha\",\"description\":\"Empowering Enterprises with Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.890349\",\"folder\":null,\"id\":\"d90af439-fb34-4d27-98f2-06f7f9a9ed8c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Spirited Hoover\",\"description\":\"The Pinnacle of Prompt Generation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:07.905750\",\"folder\":null,\"id\":\"31597ce2-de3c-490b-9ead-3f702f63cfd9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Trusting Davinci\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-08T21:23:08.001400\",\"folder\":null,\"id\":\"b43c63e9-a257-4a53-8acc-049e13706ac2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"23\",\"description\":\"23\",\"data\":{\"nodes\":[{\"width\":384,\"height\":467,\"id\":\"PromptTemplate-K7xiS\",\"type\":\"genericNode\",\"position\":{\"x\":-658.2250903773149,\"y\":809.352046606987},\"data\":{\"type\":\"PromptTemplate\",\"node\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true,\"value\":[\"dasdas\",\"dasdasd\"]},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false,\"value\":\"{dasdas}\\n{dasdasd}\\n\"},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\",\"dasdas\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"dasdas\",\"display_name\":\"dasdas\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"dasdasd\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"dasdasd\",\"display_name\":\"dasdasd\",\"advanced\":false,\"input_types\":[\"Document\",\"BaseOutputParser\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"PromptTemplate\",\"BasePromptTemplate\",\"StringPromptTemplate\"],\"name\":\"\",\"display_name\":\"PromptTemplate\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"custom_fields\":{\"\":[\"dasdas\",\"dasdasd\"]},\"output_types\":[],\"full_path\":null,\"field_formatters\":{},\"beta\":false,\"error\":null},\"id\":\"PromptTemplate-K7xiS\"},\"selected\":false,\"positionAbsolute\":{\"x\":-658.2250903773149,\"y\":809.352046606987},\"dragging\":false},{\"width\":384,\"height\":366,\"id\":\"AirbyteJSONLoader-DXfcM\",\"type\":\"genericNode\",\"position\":{\"x\":-1110.8267574563533,\"y\":569.1107380883907},\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-DXfcM\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1110.8267574563533,\"y\":569.1107380883907},\"dragging\":false},{\"width\":384,\"height\":376,\"id\":\"PromptRunner-ckWMH\",\"type\":\"genericNode\",\"position\":{\"x\":-1149.4746387825978,\"y\":992.3970573758324},\"data\":{\"type\":\"PromptRunner\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\n\\nclass PromptRunner(CustomComponent):\\n display_name: str = \\\"Prompt Runner\\\"\\n description: str = \\\"Run a Chain with the given PromptTemplate\\\"\\n beta: bool = True\\n field_config = {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt Template\\\",\\n \\\"info\\\": \\\"Make sure the prompt has all variables filled.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}) -> Document:\\n chain = prompt | llm\\n # The input is an empty dict because the prompt is already filled\\n result = chain.invoke(input=inputs)\\n if hasattr(result, \\\"content\\\"):\\n result = result.content\\n self.repr_value = result\\n return Document(page_content=str(result))\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"inputs\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"inputs\",\"display_name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt Template\",\"advanced\":false,\"dynamic\":false,\"info\":\"Make sure the prompt has all variables filled.\",\"type\":\"PromptTemplate\",\"list\":false}},\"description\":\"Run a Chain with the given PromptTemplate\",\"base_classes\":[\"Document\"],\"display_name\":\"Prompt Runner\",\"custom_fields\":{\"inputs\":null,\"llm\":null,\"prompt\":null},\"output_types\":[\"PromptRunner\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"id\":\"PromptRunner-ckWMH\"},\"selected\":false,\"positionAbsolute\":{\"x\":-1149.4746387825978,\"y\":992.3970573758324},\"dragging\":false}],\"edges\":[{\"source\":\"PromptRunner-ckWMH\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œPromptRunnerœ,œidœ:œPromptRunner-ckWMHœ}\",\"target\":\"PromptTemplate-K7xiS\",\"targetHandle\":\"{œfieldNameœ:œdasdasdœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"dasdasd\",\"id\":\"PromptTemplate-K7xiS\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"PromptRunner\",\"id\":\"PromptRunner-ckWMH\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-PromptRunner-ckWMH{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œPromptRunnerœ,œidœ:œPromptRunner-ckWMHœ}-PromptTemplate-K7xiS{œfieldNameœ:œdasdasdœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\"},{\"source\":\"AirbyteJSONLoader-DXfcM\",\"sourceHandle\":\"{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œAirbyteJSONLoaderœ,œidœ:œAirbyteJSONLoader-DXfcMœ}\",\"target\":\"PromptTemplate-K7xiS\",\"targetHandle\":\"{œfieldNameœ:œdasdasœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\",\"data\":{\"targetHandle\":{\"fieldName\":\"dasdas\",\"id\":\"PromptTemplate-K7xiS\",\"inputTypes\":[\"Document\",\"BaseOutputParser\"],\"type\":\"str\"},\"sourceHandle\":{\"baseClasses\":[\"Document\"],\"dataType\":\"AirbyteJSONLoader\",\"id\":\"AirbyteJSONLoader-DXfcM\"}},\"style\":{\"stroke\":\"#555\"},\"className\":\"stroke-gray-900 stroke-connection\",\"animated\":false,\"id\":\"reactflow__edge-AirbyteJSONLoader-DXfcM{œbaseClassesœ:[œDocumentœ],œdataTypeœ:œAirbyteJSONLoaderœ,œidœ:œAirbyteJSONLoader-DXfcMœ}-PromptTemplate-K7xiS{œfieldNameœ:œdasdasœ,œidœ:œPromptTemplate-K7xiSœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ],œtypeœ:œstrœ}\"}],\"viewport\":{\"x\":721.09842496776,\"y\":-303.59762799439625,\"zoom\":0.6417129487814537}},\"is_component\":false,\"updated_at\":\"2023-12-08T22:52:14.560323\",\"folder\":null,\"id\":\"8533c46e-21fd-4b92-b68e-1086ea86c72d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Stonebraker\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:26:42.332360\",\"folder\":null,\"id\":\"92bc0875-4a73-44f2-9410-3b8342e404bf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search (1)\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-dMB5d\"},\"id\":\"CustomComponent-dMB5d\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:43.668665\",\"folder\":null,\"id\":\"912265df-9b87-4b30-a585-1ca59b944391\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search (2)\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-ipifC\"},\"id\":\"CustomComponent-ipifC\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:49.799612\",\"folder\":null,\"id\":\"ca83ee08-2f93-427d-9897-80fef6dd5447\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Metaphor Search\",\"description\":\"Search in Metaphor with a custom string.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CustomComponent\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.chains import LLMChain\\nfrom langchain import PromptTemplate\\nfrom langchain.schema import Document\\nfrom metaphor_python import Metaphor\\nimport json\\n\\nfrom typing import List\\nfrom langflow.field_typing import Data\\n\\nclass MetaphorSearch(CustomComponent):\\n display_name: str = \\\"Metaphor Search\\\"\\n description: str = \\\"Search in Metaphor with a custom string.\\\"\\n beta = True\\n \\n def build_config(self):\\n return {\\n \\\"metaphor_client\\\": {\\\"display_name\\\": \\\"Metaphor Wrapper\\\"}, \\n \\\"search_num_results\\\": {\\\"display_name\\\": \\\"Number of Results (per domain)\\\"},\\n \\\"include_domains\\\": {\\\"display_name\\\": \\\"Include Domains\\\", \\\"is_list\\\": True},\\n \\\"start_date\\\": {\\\"display_name\\\": \\\"Start Date\\\"},\\n \\\"use_autoprompt\\\": {\\\"display_name\\\": \\\"Use Autoprompt\\\", \\\"type\\\": \\\"boolean\\\"},\\n \\\"search_type\\\": {\\\"display_name\\\": \\\"Search Type\\\", \\\"options\\\": [\\\"neural\\\", \\\"keyword\\\"]},\\n \\\"start_date\\\": {\\\"input_types\\\": [\\\"Data\\\"]}\\n }\\n\\n def build(\\n self,\\n methaphor_client: Data,\\n query: str,\\n search_type: str='keyword',\\n search_num_results: int = 5,\\n include_domains: List[str]= [\\\"youtube.com\\\"],\\n use_autoprompt: bool = False,\\n start_date: str=\\\"2023-01-01\\\",\\n \\n ) -> Data:\\n \\n results = []\\n for domain in include_domains:\\n response = methaphor_client.search(\\n query,\\n num_results=int(search_num_results),\\n include_domains=[domain],\\n use_autoprompt=use_autoprompt,\\n type=search_type,\\n # start_crawl_date=start_date,\\n start_published_date=start_date\\n )\\n results.extend(response.results)\\n \\n self.repr_value = results\\n\\n return results\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"include_domains\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[\"yout\"],\"password\":false,\"name\":\"include_domains\",\"display_name\":\"Include Domains\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"methaphor_client\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"methaphor_client\",\"display_name\":\"methaphor_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Data\",\"list\":false},\"query\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"query\",\"display_name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"pasteldasdasdas\"},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"Number of Results (per domain)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"keyword\",\"password\":false,\"options\":[\"neural\",\"keyword\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"start_date\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"start_date\",\"display_name\":\"start_date\",\"advanced\":false,\"input_types\":[\"Data\"],\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"Use Autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Search in Metaphor with a custom string.\",\"base_classes\":[\"Data\"],\"display_name\":\"Metaphor Search\",\"custom_fields\":{\"include_domains\":null,\"methaphor_client\":null,\"query\":null,\"search_num_results\":null,\"search_type\":null,\"start_date\":null,\"use_autoprompt\":null},\"output_types\":[\"Data\"],\"documentation\":\"\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"CustomComponent-Y4qL7\"},\"id\":\"CustomComponent-Y4qL7\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:26:53.719960\",\"folder\":null,\"id\":\"5847602b-769a-4a82-82e8-a70f54a59929\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Williams\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:27:45.691254\",\"folder\":null,\"id\":\"0e3bdba9-127a-4399-81a4-2865b70a4a47\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Shared Component\",\"description\":\"Conversational Cartography Unlocked.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":328,\"id\":\"CSVAgent-TK9Ea\",\"type\":\"genericNode\",\"position\":{\"x\":251.25514772667083,\"y\":160.7424529887874},\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVAgent-TK9Ea\"},\"positionAbsolute\":{\"x\":251.25514772667083,\"y\":160.7424529887874}}],\"edges\":[],\"viewport\":{\"x\":104.85568116317398,\"y\":88.26375874183478,\"zoom\":0.7169776240079145}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:28:34.119070\",\"folder\":null,\"id\":\"29c1a247-47b0-457b-8666-7c0a67dc72b0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"teste cristhian\",\"description\":\"11111\",\"data\":{\"nodes\":[{\"width\":384,\"height\":328,\"id\":\"CSVAgent-P5wrB\",\"type\":\"genericNode\",\"position\":{\"x\":251.25514772667083,\"y\":160.7424529887874},\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVAgent-P5wrB\"},\"positionAbsolute\":{\"x\":251.25514772667083,\"y\":160.7424529887874}},{\"width\":384,\"height\":626,\"id\":\"OpenAI-zpihD\",\"type\":\"genericNode\",\"position\":{\"x\":-56.983202536768374,\"y\":61.715652677908665},\"data\":{\"type\":\"OpenAI\",\"node\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"list\":true},\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":20,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"best_of\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"default_query\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"http_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"http_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"logit_bias\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":2,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-babbage-001\",\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false,\"value\":\"dasdasdasdsadasdas\"},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"1.4\",\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"OpenAI\",\"BaseLanguageModel\",\"BaseLLM\",\"BaseOpenAI\"],\"display_name\":\"OpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"beta\":false,\"error\":null},\"id\":\"OpenAI-zpihD\"},\"selected\":true,\"dragging\":false,\"positionAbsolute\":{\"x\":-56.983202536768374,\"y\":61.715652677908665}}],\"edges\":[],\"viewport\":{\"x\":104.85568116317398,\"y\":88.26375874183478,\"zoom\":0.7169776240079145}},\"is_component\":false,\"updated_at\":\"2023-12-09T13:40:48.453096\",\"folder\":null,\"id\":\"2e59d013-2acb-49a6-915b-9231a7e6eb58\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVAgent (1)\",\"description\":\"Construct a CSV agent from a CSV and tools.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVAgent-jsHqy\"},\"id\":\"CSVAgent-jsHqy\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:31:17.317322\",\"folder\":null,\"id\":\"ab1034a9-9b5b-4c65-bf6e-9f098a403942\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Wilsonfasdfsd\",\"description\":\"Building Linguistic Labyrinths.fasdfads\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:43:45.298121\",\"folder\":null,\"id\":\"7d91c0c5-fba6-4c60-b4d1-11d430ef357a\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (1)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-pAHh6\"},\"id\":\"AirbyteJSONLoader-pAHh6\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:47:58.573137\",\"folder\":null,\"id\":\"f0cc4292-97cc-4748-803d-949e30dcf661\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"ff2\":\"d3bbd\"},{\"w\":\"bvd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-0zU2Q\"},\"id\":\"AirbyteJSONLoader-0zU2Q\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:09.035318\",\"folder\":null,\"id\":\"5e3c0d55-1a00-4e15-9821-0c625c6415ff\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVAgent\",\"description\":\"Construct a CSV agent from a CSV and tools.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVAgent\",\"node\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVAgent-Ub1Xe\"},\"id\":\"CSVAgent-Ub1Xe\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:16.985419\",\"folder\":null,\"id\":\"baee8061-4788-4ce6-928f-c6ce1ecb443c\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Heisenberg\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[{\"width\":384,\"height\":366,\"id\":\"CSVLoader-RMUx9\",\"type\":\"genericNode\",\"position\":{\"x\":111,\"y\":345.51250076293945},\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"z2b\":\"z9\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null},\"id\":\"CSVLoader-RMUx9\"},\"positionAbsolute\":{\"x\":111,\"y\":345.51250076293945}}],\"edges\":[],\"viewport\":{\"x\":0,\"y\":0,\"zoom\":1}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:38:40.291137\",\"folder\":null,\"id\":\"109e9629-d569-4555-9d40-42203a5ed035\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CohereEmbeddings\",\"description\":\"Cohere embedding models.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CohereEmbeddings\",\"node\":{\"template\":{\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cohere_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false,\"value\":\"\"},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"embed-english-v2.0\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"truncate\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"truncate\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"user_agent\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"password\":false,\"name\":\"user_agent\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"CohereEmbeddings\"},\"description\":\"Cohere embedding models.\",\"base_classes\":[\"CohereEmbeddings\",\"Embeddings\"],\"display_name\":\"CohereEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/cohere\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CohereEmbeddings-HFUAf\"},\"id\":\"CohereEmbeddings-HFUAf\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:50:46.172344\",\"folder\":null,\"id\":\"662d8040-d47c-40db-bda1-66489a1c9d24\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (1)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-3wrib\"},\"id\":\"CSVLoader-3wrib\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:56:11.662526\",\"folder\":null,\"id\":\"4fae6aec-ddbd-498d-a4d1-ca0290f6a5ad\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (2)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-VEjyx\"},\"id\":\"CSVLoader-VEjyx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T13:57:37.560784\",\"folder\":null,\"id\":\"d80635ee-966c-41f2-981c-afa2c388ac6e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (3)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-PIhOc\"},\"id\":\"CSVLoader-PIhOc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:00:27.991966\",\"folder\":null,\"id\":\"c5cc4c32-77c8-4889-a9f8-2632466b7366\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (4)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-deB43\"},\"id\":\"CSVLoader-deB43\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:00:42.509243\",\"folder\":null,\"id\":\"0ab59938-ccf4-4bb9-b285-1f5da38648f0\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-mdkLm\"},\"id\":\"CSVLoader-mdkLm\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:02:17.458354\",\"folder\":null,\"id\":\"f127b7e7-4149-492e-8998-6b1b35ec4153\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (5)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"cddscz23\":\"aaqd\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-FRc6Y\"},\"id\":\"CSVLoader-FRc6Y\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:02:26.958867\",\"folder\":null,\"id\":\"a870a096-725c-4914-add0-8d57d710b7e5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (2)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-Z0uol\"},\"id\":\"AirbyteJSONLoader-Z0uol\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:03:33.764117\",\"folder\":null,\"id\":\"2a37c76c-65c8-4c01-a72d-eb46f3d41a56\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-28ASv\"},\"id\":\"AmazonBedrockEmbeddings-28ASv\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:03:41.066618\",\"folder\":null,\"id\":\"850ba4e6-96ca-49a7-9b0c-4b7048fd52c8\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"ConversationBufferMemory\",\"description\":\"Buffer for storing conversation memory.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"ConversationBufferMemory\",\"node\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationBufferMemory\"},\"description\":\"Buffer for storing conversation memory.\",\"base_classes\":[\"BaseMemory\",\"BaseChatMemory\",\"ConversationBufferMemory\"],\"display_name\":\"ConversationBufferMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"ConversationBufferMemory-WaoLx\"},\"id\":\"ConversationBufferMemory-WaoLx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:04:46.058568\",\"folder\":null,\"id\":\"be650940-0449-4eb0-a708-056310f924fd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (1)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-Bs5PG\"},\"id\":\"AmazonBedrockEmbeddings-Bs5PG\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:05:50.570800\",\"folder\":null,\"id\":\"53ad1fe2-f3af-4354-86e0-eb141ce12859\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (2)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-zSZ4t\"},\"id\":\"AmazonBedrockEmbeddings-zSZ4t\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:06:11.415088\",\"folder\":null,\"id\":\"e9ed1c90-146e-452d-8ccd-ebf2e0da4331\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (3)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-Bxhlt\"},\"id\":\"AmazonBedrockEmbeddings-Bxhlt\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:07:06.411108\",\"folder\":null,\"id\":\"83783c57-64e3-41a6-aa7e-ed82f80f1e53\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"CSVLoader (6)\",\"description\":\"Load a `CSV` file into a list of Documents.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"CSVLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"z2b\":\"z9\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"CSVLoader-2pn2o\"},\"id\":\"CSVLoader-2pn2o\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:38:30.706258\",\"folder\":null,\"id\":\"c4ae9de6-9df3-4d3c-afc9-1752af4fecd7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Agent Initializer\",\"description\":\"Initialize a Langchain Agent.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AgentInitializer\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n }\\n\\n def build(\\n self, agent: str, llm: BaseLanguageModel, memory: BaseChatMemory, tools: List[Tool], max_iterations: int\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"AgentInitializer\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"max_iterations\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true}},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"Chain\",\"AgentExecutor\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"max_iterations\":null,\"memory\":null,\"tools\":null},\"output_types\":[\"AgentInitializer\"],\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AgentInitializer-MJrAC\"},\"id\":\"AgentInitializer-MJrAC\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:42:54.715163\",\"folder\":null,\"id\":\"ff84b5f9-5680-4084-a9f1-7d94fe675486\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Agent Initializer (1)\",\"description\":\"Initialize a Langchain Agent.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AgentInitializer\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n }\\n\\n def build(\\n self, agent: str, llm: BaseLanguageModel, memory: BaseChatMemory, tools: List[Tool], max_iterations: int\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"AgentInitializer\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"max_iterations\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true}},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"Chain\",\"AgentExecutor\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"max_iterations\":null,\"memory\":null,\"tools\":null},\"output_types\":[\"AgentInitializer\"],\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AgentInitializer-3lcZ4\"},\"id\":\"AgentInitializer-3lcZ4\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:43:20.819934\",\"folder\":null,\"id\":\"97f5db9f-d6cc-4555-88fb-3be102c67814\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Exuberant Banach\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-09T14:52:49.951416\",\"folder\":null,\"id\":\"a600acd1-213a-4ce7-8648-ab2ee59f5918\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (3)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-JhQtx\"},\"id\":\"AirbyteJSONLoader-JhQtx\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:44:49.587337\",\"folder\":null,\"id\":\"07c52ad7-ca52-4cdd-ab40-74a91dbad0dd\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (4)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-bIvDc\"},\"id\":\"AirbyteJSONLoader-bIvDc\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:45:13.458500\",\"folder\":null,\"id\":\"53e4d256-3653-444b-b8e0-fb97b3ae5c7e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"AirbyteJSONLoader (5)\",\"description\":\"Load local `Airbyte` json files.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AirbyteJSONLoader\",\"node\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\".json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[{\"\":\"\"}],\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null,\"official\":false},\"id\":\"AirbyteJSONLoader-2BLS8\"},\"id\":\"AirbyteJSONLoader-2BLS8\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:45:44.461699\",\"folder\":null,\"id\":\"b5158cc1-c6b8-4e25-907a-bc7e7637aa38\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Amazon Bedrock Embeddings (4)\",\"description\":\"Embeddings model from Amazon Bedrock.\",\"data\":{\"edges\":[],\"nodes\":[{\"data\":{\"type\":\"AmazonBedrockEmbeddings\",\"node\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings import BedrockEmbeddings\\nfrom langchain.embeddings.base import Embeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"credentials_profile_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"endpoint_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"region_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"custom_fields\":{\"credentials_profile_name\":null,\"endpoint_url\":null,\"model_id\":null,\"region_name\":null},\"output_types\":[\"AmazonBedrockEmbeddings\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"beta\":true,\"error\":null,\"official\":false},\"id\":\"AmazonBedrockEmbeddings-NsBzN\"},\"id\":\"AmazonBedrockEmbeddings-NsBzN\",\"position\":{\"x\":0,\"y\":0},\"type\":\"genericNode\"}],\"viewport\":{\"x\":1,\"y\":1,\"zoom\":1}},\"is_component\":true,\"updated_at\":\"2023-12-09T14:50:29.791575\",\"folder\":null,\"id\":\"3fb77f72-1be7-4ce0-ae89-a82b0eee9acf\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Evil Golick\",\"description\":\"Where Language Meets Logic.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.707854\",\"folder\":null,\"id\":\"9c5d21c2-ea82-4cf4-a591-c3d3fd3f13e6\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Davinci (1)\",\"description\":\"Unleashing Linguistic Creativity.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.761150\",\"folder\":null,\"id\":\"f8e2e16e-129c-4116-9626-2c6b524d97b7\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Effervescent Degrasse\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.764440\",\"folder\":null,\"id\":\"d7f4f7b5-effe-4834-8cab-4f2fc4f6e9de\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Prickly Archimedes\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.767546\",\"folder\":null,\"id\":\"2265d813-4a87-410f-b06a-65e35db8219e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Boring Heyrovsky\",\"description\":\"Building Intelligent Interactions.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.765105\",\"folder\":null,\"id\":\"10bfd881-e67e-4c33-965d-ee041695edce\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Nostalgic Carroll\",\"description\":\"Unfolding Linguistic Possibilities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.811794\",\"folder\":null,\"id\":\"63fa5653-4513-47f2-8dfa-baeb1d981f93\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Pensive Perlman\",\"description\":\"Empowering Communication, Enabling Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.814993\",\"folder\":null,\"id\":\"f4bc5945-20d9-4703-a5bb-6a4a3ef7fc8e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Hilarious Stallman\",\"description\":\"Connect the Dots, Craft Language.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:19:02.813144\",\"folder\":null,\"id\":\"8d8b80f9-4b74-4cd5-bc5c-08a32c4d2b95\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Awesome Einstein\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:19.518262\",\"folder\":null,\"id\":\"21808fd7-a492-4e29-8863-301c2785f542\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Funky Swanson\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.185637\",\"folder\":null,\"id\":\"7752299a-4aa9-44db-8d9c-5c4a2ac1b071\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Romantic Pascal\",\"description\":\"Unlock the Power of AI in Your Business Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.223064\",\"folder\":null,\"id\":\"78f48a13-6a9f-42ce-9d58-ec9b63b381d2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Bartik\",\"description\":\"Sculpting Language with Precision.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.239758\",\"folder\":null,\"id\":\"38074091-3d7c-4d42-b61b-ae195c1b8a4e\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Condescending Joliot\",\"description\":\"Language Models, Unleashed.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.271996\",\"folder\":null,\"id\":\"773020aa-5c2d-4632-ad9e-21276861ab93\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Gleeful Kalam\",\"description\":\"The Power of Language at Your Fingertips.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.283929\",\"folder\":null,\"id\":\"0092d077-6d31-401f-a739-b164476b90ed\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Grinning Bhabha\",\"description\":\"Your Passport to Linguistic Landscapes.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.467739\",\"folder\":null,\"id\":\"4a395211-712d-4dd2-b3bb-e6b19200f15d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Babbage\",\"description\":\"Design Dialogues with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:20:20.742990\",\"folder\":null,\"id\":\"3f086a82-3e29-4328-9da8-e02dc9201744\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tiny Volta\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:18.594247\",\"folder\":null,\"id\":\"659b8289-c8e8-413d-9b2b-51e68411f170\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Jennings\",\"description\":\"Design, Develop, Dialogize.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:42.640309\",\"folder\":null,\"id\":\"f55f0640-d47e-4471-b1ba-3411d38ecac5\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Distracted Shaw\",\"description\":\"Interactive Language Weaving.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:24:58.376247\",\"folder\":null,\"id\":\"a039811e-449a-4244-83ed-4ddd731a0921\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Peppy Murdock (1)\",\"description\":\"Language Chainlink Master.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:25:14.674524\",\"folder\":null,\"id\":\"0faf6144-6ca6-4f64-a343-665ae54774ef\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Lively Volta\",\"description\":\"Language Models, Mapped and Mastered.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:26:50.418029\",\"folder\":null,\"id\":\"c5d149d0-c401-4f5e-b79f-2abcc7b8d98d\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Bubbly Curie\",\"description\":\"Navigate the Networks of Conversation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:27:10.900899\",\"folder\":null,\"id\":\"7bb2d226-9740-433d-861f-a499632c5a13\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Radiant Nobel\",\"description\":\"Navigate the Linguistic Landscape, Discover Opportunities.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:29:11.541630\",\"folder\":null,\"id\":\"947906d8-75ea-470c-a8e2-cc80c5d3bdbb\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Cheerful Northcutt\",\"description\":\"Unleashing Business Potential through Language Engineering.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:29:37.169791\",\"folder\":null,\"id\":\"56f109fd-2c18-42ed-a9b2-089a678a0c11\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Suspicious Khayyam\",\"description\":\"Crafting Dialogues that Drive Business Success.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:30:24.686359\",\"folder\":null,\"id\":\"551d7bfa-49aa-43f1-a779-e47eabc2aaf2\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Twinkly Spence\",\"description\":\"Create, Curate, Communicate with Langflow.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:30:47.738472\",\"folder\":null,\"id\":\"12aef128-130e-492e-bf84-62d4cb4cd456\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Mirthful Lavoisier\",\"description\":\"Nurture NLP Nodes Here.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:31:43.272365\",\"folder\":null,\"id\":\"9952c044-6903-4fba-a270-6ed0b90c93c9\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Upbeat Bose\",\"description\":\"Unravel the Art of Articulation.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:32:23.972035\",\"folder\":null,\"id\":\"65f49582-c9fa-4c67-a2bc-4e8fa73ca731\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Tender Perlman\",\"description\":\"Maximize Impact with Intelligent Conversations.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:33:26.984083\",\"folder\":null,\"id\":\"9ae57fe2-c677-47fa-a059-7d3d915a1178\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"},{\"name\":\"Sharp Cori\",\"description\":\"Conversation Catalyst Engine.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2023-12-11T18:33:52.377359\",\"folder\":null,\"id\":\"2920dde2-5c24-4fe0-9c06-ef86b5a16a99\",\"user_id\":\"d253bfba-6368-44dc-85f7-0d6da9e45968\"}]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.309 } - }, - { - "startedDateTime": "2023-12-11T18:55:08.950Z", - "time": 0.595, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/build/2920dde2-5c24-4fe0-9c06-ef86b5a16a99/status", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkMjUzYmZiYS02MzY4LTQ0ZGMtODVmNy0wZDZkYTllNDU5NjgiLCJleHAiOjE3MzM4NTY4OTh9.5MFFb0JCck3ITSKXbxhwO9yAscnXcwXNTV70ZYBRB20; refresh_tkn_lflw=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/flow/2920dde2-5c24-4fe0-9c06-ef86b5a16a99" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "15" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Mon, 11 Dec 2023 18:55:08 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"built\":false}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.595 } - } - ] - } -} \ No newline at end of file diff --git a/src/frontend/harFiles/langflow.har b/src/frontend/harFiles/langflow.har index edac6806e..d6fef50cd 100644 --- a/src/frontend/harFiles/langflow.har +++ b/src/frontend/harFiles/langflow.har @@ -1,229 +1,733 @@ { - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.37.1" + "log": { + "version": "1.2", + "creator": { + "name": "Playwright", + "version": "1.42.0" + }, + "browser": { + "name": "chromium", + "version": "123.0.6312.4" + }, + "entries": [ + { + "startedDateTime": "2024-02-28T14:32:30.858Z", + "time": 0.77, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/version", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "19" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"version\":\"0.6.7\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.77 } }, - "browser": { - "name": "chromium", - "version": "116.0.5845.82" + { + "startedDateTime": "2024-02-28T14:32:30.859Z", + "time": 0.894, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/auto_login", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "227" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" }, + { "name": "set-cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc; Path=/; SameSite=none; Secure" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"access_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc\",\"refresh_token\":null,\"token_type\":\"bearer\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.894 } }, - "entries": [ - { - "startedDateTime": "2023-08-31T14:55:35.502Z", - "time": 0.727, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/auto_login", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Not)A;Brand\";v=\"24\", \"Chromium\";v=\"116\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "227" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Thu, 31 Aug 2023 14:55:34 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"access_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk\",\"refresh_token\":null,\"token_type\":\"bearer\"}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.727 } + { + "startedDateTime": "2024-02-28T14:32:30.937Z", + "time": 0.944, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/users/whoami", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 }, - { - "startedDateTime": "2023-08-31T14:55:35.586Z", - "time": 0.719, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/flows/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk; refresh_token=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Not)A;Brand\";v=\"24\", \"Chromium\";v=\"116\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "253" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"id\":\"0389fb29-daa6-408c-b8cb-b8ff8d17343a\",\"username\":\"langflow\",\"profile_image\":null,\"is_active\":true,\"is_superuser\":true,\"create_at\":\"2024-02-28T14:31:41.362911\",\"updated_at\":\"2024-02-28T14:32:30.864882\",\"last_login_at\":\"2024-02-28T14:32:30.863748\"}" }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "2" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Thu, 31 Aug 2023 14:55:34 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.719 } + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" }, - { - "startedDateTime": "2023-08-31T14:55:35.586Z", - "time": 1.031, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/all", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk; refresh_token=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Not)A;Brand\";v=\"24\", \"Chromium\";v=\"116\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "251307" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Thu, 31 Aug 2023 14:55:34 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"chains\":{\"ConversationChain\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"_type\":\"default\"},\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLMOutputParser\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"history\",\"input\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.\\n\\nCurrent conversation:\\n{history}\\nHuman: {input}\\nAI:\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"input\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"llm_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"response\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_final_only\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_final_only\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationChain\"},\"description\":\"Chain to have a conversation and load context from memory.\",\"base_classes\":[\"LLMChain\",\"Chain\",\"ConversationChain\",\"function\"],\"display_name\":\"ConversationChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"ConversationalRetrievalChain\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Callbacks\",\"list\":false},\"condense_question_llm\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"condense_question_llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"condense_question_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"chat_history\",\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\\n\\nChat History:\\n{chat_history}\\nFollow Up Input: {question}\\nStandalone question:\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"condense_question_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"chain_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"combine_docs_chain_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"combine_docs_chain_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"return_source_documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_source_documents\",\"display_name\":\"Return source documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationalRetrievalChain\"},\"description\":\"Convenience method to load chain from LLM and retriever.\",\"base_classes\":[\"BaseConversationalRetrievalChain\",\"Chain\",\"ConversationalRetrievalChain\",\"function\"],\"display_name\":\"ConversationalRetrievalChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/chat_vector_db\",\"beta\":false,\"error\":null},\"LLMChain\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLMOutputParser\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"llm_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_final_only\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_final_only\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"LLMChain\"},\"description\":\"Chain to run queries against LLMs.\",\"base_classes\":[\"LLMChain\",\"Chain\",\"function\"],\"display_name\":\"LLMChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/foundational/llm_chain\",\"beta\":false,\"error\":null},\"LLMCheckerChain\":{\"template\":{\"check_assertions_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"assertions\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Here is a bullet point list of assertions:\\n{assertions}\\nFor each assertion, determine whether it is true or false. If it is false, explain why.\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"check_assertions_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PromptTemplate\",\"list\":false},\"create_draft_answer_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"{question}\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"create_draft_answer_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PromptTemplate\",\"list\":false},\"list_assertions_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"statement\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Here is a statement:\\n{statement}\\nMake a bullet point list of the assumptions you made when producing the above statement.\\n\\n\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"list_assertions_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PromptTemplate\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"revised_answer_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"checked_assertions\",\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"{checked_assertions}\\n\\nQuestion: In light of the above assertions and checks, how would you answer the question '{question}'?\\n\\nAnswer:\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"revised_answer_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PromptTemplate\",\"list\":false},\"_type\":\"LLMCheckerChain\"},\"description\":\"\",\"base_classes\":[\"Chain\",\"LLMCheckerChain\",\"function\"],\"display_name\":\"LLMCheckerChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_checker\",\"beta\":false,\"error\":null},\"LLMMathChain\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"llm_chain\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"LLMChain\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"Translate a math problem into a expression that can be executed using Python's numexpr library. Use the output of running this code to answer the question.\\n\\nQuestion: ${{Question with math problem.}}\\n```text\\n${{single line mathematical expression that solves the problem}}\\n```\\n...numexpr.evaluate(text)...\\n```output\\n${{Output of running the code}}\\n```\\nAnswer: ${{Answer}}\\n\\nBegin.\\n\\nQuestion: What is 37593 * 67?\\n```text\\n37593 * 67\\n```\\n...numexpr.evaluate(\\\"37593 * 67\\\")...\\n```output\\n2518731\\n```\\nAnswer: 2518731\\n\\nQuestion: 37593^(1/5)\\n```text\\n37593**(1/5)\\n```\\n...numexpr.evaluate(\\\"37593**(1/5)\\\")...\\n```output\\n8.222831614237718\\n```\\nAnswer: 8.222831614237718\\n\\nQuestion: {question}\\n\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"question\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"answer\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"LLMMathChain\"},\"description\":\"Chain that interprets a prompt and executes python code to do math.\",\"base_classes\":[\"Chain\",\"LLMMathChain\",\"function\"],\"display_name\":\"LLMMathChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_math\",\"beta\":false,\"error\":null},\"RetrievalQA\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"combine_documents_chain\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseCombineDocumentsChain\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"input_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"query\",\"password\":false,\"name\":\"input_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"output_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"result\",\"password\":false,\"name\":\"output_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_source_documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"RetrievalQA\"},\"description\":\"Chain for question-answering against an index.\",\"base_classes\":[\"Chain\",\"RetrievalQA\",\"BaseRetrievalQA\",\"function\"],\"display_name\":\"RetrievalQA\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/vector_db_qa\",\"beta\":false,\"error\":null},\"RetrievalQAWithSourcesChain\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"combine_documents_chain\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"combine_documents_chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseCombineDocumentsChain\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"answer_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"answer\",\"password\":false,\"name\":\"answer_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_docs_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"docs\",\"password\":false,\"name\":\"input_docs_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"max_tokens_limit\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":3375,\"password\":false,\"name\":\"max_tokens_limit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"question_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"question\",\"password\":false,\"name\":\"question_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"reduce_k_below_max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"reduce_k_below_max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"return_source_documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"return_source_documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"sources_answer_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"sources\",\"password\":false,\"name\":\"sources_answer_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"RetrievalQAWithSourcesChain\"},\"description\":\"Question-answering with sources over an index.\",\"base_classes\":[\"Chain\",\"BaseQAWithSourcesChain\",\"RetrievalQAWithSourcesChain\",\"function\"],\"display_name\":\"RetrievalQAWithSourcesChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SQLDatabaseChain\":{\"template\":{\"db\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SQLDatabase\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"_type\":\"SQLDatabaseChain\"},\"description\":\"\",\"base_classes\":[\"Chain\",\"SQLDatabaseChain\",\"function\"],\"display_name\":\"SQLDatabaseChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"CombineDocsChain\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"chain_type\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"_type\":\"load_qa_chain\"},\"description\":\"Load question answering chain.\",\"base_classes\":[\"BaseCombineDocumentsChain\",\"function\"],\"display_name\":\"CombineDocsChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SeriesCharacterChain\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"character\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"character\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"series\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"series\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"SeriesCharacterChain\"},\"description\":\"SeriesCharacterChain is a chain you can use to have a conversation with a character from a series.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"Chain\",\"ConversationChain\",\"SeriesCharacterChain\",\"function\"],\"display_name\":\"SeriesCharacterChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"MidJourneyPromptChain\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"_type\":\"MidJourneyPromptChain\"},\"description\":\"MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"Chain\",\"ConversationChain\",\"MidJourneyPromptChain\"],\"display_name\":\"MidJourneyPromptChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"TimeTravelGuideChain\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"_type\":\"TimeTravelGuideChain\"},\"description\":\"Time travel guide chain.\",\"base_classes\":[\"LLMChain\",\"BaseCustomChain\",\"TimeTravelGuideChain\",\"Chain\",\"ConversationChain\"],\"display_name\":\"TimeTravelGuideChain\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"PromptRunner\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.prompts import PromptTemplate\\nfrom langchain.schema import Document\\n\\n\\nclass PromptRunner(CustomComponent):\\n display_name: str = \\\"Prompt Runner\\\"\\n description: str = \\\"Run a Chain with the given PromptTemplate\\\"\\n beta = True\\n field_config = {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt Template\\\",\\n \\\"info\\\": \\\"Make sure the prompt has all variables filled.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}\\n ) -> Document:\\n chain = prompt | llm\\n # The input is an empty dict because the prompt is already filled\\n result = chain.invoke(input=inputs)\\n if hasattr(result, \\\"content\\\"):\\n result = result.content\\n self.repr_value = result\\n return Document(page_content=str(result))\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"inputs\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"inputs\",\"display_name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt Template\",\"advanced\":false,\"dynamic\":false,\"info\":\"Make sure the prompt has all variables filled.\",\"type\":\"PromptTemplate\",\"list\":false}},\"description\":\"Run a Chain with the given PromptTemplate\",\"base_classes\":[\"Document\"],\"display_name\":\"Prompt Runner\",\"custom_fields\":{\"inputs\":null,\"llm\":null,\"prompt\":null},\"output_types\":[\"PromptRunner\"],\"documentation\":\"\",\"beta\":true,\"error\":null}},\"agents\":{\"ZeroShotAgent\":{\"template\":{\"callback_manager\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callback_manager\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseCallbackManager\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"AgentOutputParser\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseTool\",\"list\":true},\"format_instructions\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"Use the following format:\\n\\nQuestion: the input question you must answer\\nThought: you should always think about what to do\\nAction: the action to take, should be one of [{tool_names}]\\nAction Input: the input to the action\\nObservation: the result of the action\\n... (this Thought/Action/Action Input/Observation can repeat N times)\\nThought: I now know the final answer\\nFinal Answer: the final answer to the original input question\",\"password\":false,\"name\":\"format_instructions\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"Answer the following questions as best you can. You have access to the following tools:\",\"password\":false,\"name\":\"prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"suffix\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"Begin!\\n\\nQuestion: {input}\\nThought:{agent_scratchpad}\",\"password\":false,\"name\":\"suffix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"ZeroShotAgent\"},\"description\":\"Construct an agent from an LLM and tools.\",\"base_classes\":[\"Agent\",\"BaseSingleActionAgent\",\"ZeroShotAgent\",\"function\"],\"display_name\":\"ZeroShotAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent\",\"beta\":false,\"error\":null},\"JsonAgent\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"toolkit\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseToolkit\",\"list\":false},\"_type\":\"json_agent\"},\"description\":\"Construct a json agent from an LLM and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"JsonAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/openapi\",\"beta\":false,\"error\":null},\"CSVAgent\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".csv\"],\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"csv\"],\"file_path\":null},\"_type\":\"csv_agent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"CSVAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"beta\":false,\"error\":null},\"AgentInitializer\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMemory\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true},\"agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"openai-functions\",\"openai-multi-functions\"],\"name\":\"agent\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"_type\":\"initialize_agent\"},\"description\":\"Construct a zero shot agent from an LLM and tools.\",\"base_classes\":[\"AgentExecutor\",\"function\"],\"display_name\":\"AgentInitializer\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"beta\":false,\"error\":null},\"VectorStoreAgent\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"vectorstoreinfo\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectorstoreinfo\",\"display_name\":\"Vector Store Info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStoreInfo\",\"list\":false},\"_type\":\"vectorstore_agent\"},\"description\":\"Construct an agent from a Vector Store.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"VectorStoreAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"VectorStoreRouterAgent\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"vectorstoreroutertoolkit\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectorstoreroutertoolkit\",\"display_name\":\"Vector Store Router Toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStoreRouterToolkit\",\"list\":false},\"_type\":\"vectorstorerouter_agent\"},\"description\":\"Construct an agent from a Vector Store Router.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"VectorStoreRouterAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SQLAgent\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"database_uri\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"database_uri\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"sql_agent\"},\"description\":\"Construct an SQL agent from an LLM and tools.\",\"base_classes\":[\"AgentExecutor\"],\"display_name\":\"SQLAgent\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"OpenAIConversationalAgent\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Optional\\nfrom langchain.prompts import SystemMessagePromptTemplate\\nfrom langchain.tools import Tool\\nfrom langchain.schema.memory import BaseMemory\\nfrom langchain.chat_models import ChatOpenAI\\n\\nfrom langchain.agents.agent import AgentExecutor\\nfrom langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent\\nfrom langchain.memory.token_buffer import ConversationTokenBufferMemory\\nfrom langchain.prompts.chat import MessagesPlaceholder\\nfrom langchain.agents.agent_toolkits.conversational_retrieval.openai_functions import (\\n _get_default_system_message,\\n)\\n\\n\\nclass ConversationalAgent(CustomComponent):\\n display_name: str = \\\"OpenAI Conversational Agent\\\"\\n description: str = \\\"Conversational Agent that can use OpenAI's function calling API\\\"\\n\\n def build_config(self):\\n openai_function_models = [\\n \\\"gpt-3.5-turbo-0613\\\",\\n \\\"gpt-3.5-turbo-16k-0613\\\",\\n \\\"gpt-4-0613\\\",\\n \\\"gpt-4-32k-0613\\\",\\n ]\\n return {\\n \\\"tools\\\": {\\\"is_list\\\": True, \\\"display_name\\\": \\\"Tools\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"system_message\\\": {\\\"display_name\\\": \\\"System Message\\\"},\\n \\\"max_token_limit\\\": {\\\"display_name\\\": \\\"Max Token Limit\\\"},\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": openai_function_models,\\n \\\"value\\\": openai_function_models[0],\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_name: str,\\n openai_api_key: str,\\n tools: Tool,\\n openai_api_base: Optional[str] = None,\\n memory: Optional[BaseMemory] = None,\\n system_message: Optional[SystemMessagePromptTemplate] = None,\\n max_token_limit: int = 2000,\\n ) -> AgentExecutor:\\n llm = ChatOpenAI(\\n model=model_name,\\n openai_api_key=openai_api_key,\\n openai_api_base=openai_api_base,\\n )\\n if not memory:\\n memory_key = \\\"chat_history\\\"\\n memory = ConversationTokenBufferMemory(\\n memory_key=memory_key,\\n return_messages=True,\\n output_key=\\\"output\\\",\\n llm=llm,\\n max_token_limit=max_token_limit,\\n )\\n else:\\n memory_key = memory.memory_key # type: ignore\\n\\n _system_message = system_message or _get_default_system_message()\\n prompt = OpenAIFunctionsAgent.create_prompt(\\n system_message=_system_message, # type: ignore\\n extra_prompt_messages=[MessagesPlaceholder(variable_name=memory_key)],\\n )\\n agent = OpenAIFunctionsAgent(\\n llm=llm, tools=tools, prompt=prompt # type: ignore\\n )\\n return AgentExecutor(\\n agent=agent,\\n tools=tools, # type: ignore\\n memory=memory,\\n verbose=True,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"max_token_limit\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":2000,\"password\":false,\"name\":\"max_token_limit\",\"display_name\":\"Max Token Limit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseMemory\",\"list\":false},\"model_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo-0613\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo-16k-0613\",\"gpt-4-0613\",\"gpt-4-32k-0613\"],\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"openai_api_base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_key\",\"display_name\":\"openai_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"system_message\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"system_message\",\"display_name\":\"System Message\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SystemMessagePromptTemplate\",\"list\":false},\"tools\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Tool\",\"list\":true}},\"description\":\"Conversational Agent that can use OpenAI's function calling API\",\"base_classes\":[\"Chain\",\"AgentExecutor\"],\"display_name\":\"OpenAI Conversational Agent\",\"custom_fields\":{\"max_token_limit\":null,\"memory\":null,\"model_name\":null,\"openai_api_base\":null,\"openai_api_key\":null,\"system_message\":null,\"tools\":null},\"output_types\":[\"OpenAIConversationalAgent\"],\"documentation\":\"\",\"beta\":true,\"error\":null}},\"prompts\":{\"ChatMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false},\"role\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"role\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"ChatMessagePromptTemplate\"},\"description\":\"Chat message prompt template.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"ChatMessagePromptTemplate\",\"BaseMessagePromptTemplate\"],\"display_name\":\"ChatMessagePromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates\",\"beta\":false,\"error\":null},\"ChatPromptTemplate\":{\"template\":{\"messages\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"messages\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseMessagePromptTemplate\",\"list\":true},\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"ChatPromptTemplate\"},\"description\":\"A prompt template for chat models.\",\"base_classes\":[\"BaseChatPromptTemplate\",\"BasePromptTemplate\",\"ChatPromptTemplate\"],\"display_name\":\"ChatPromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"beta\":false,\"error\":null},\"HumanMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false},\"_type\":\"HumanMessagePromptTemplate\"},\"description\":\"Human message prompt template. This is a message sent from the user.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"HumanMessagePromptTemplate\",\"BaseMessagePromptTemplate\"],\"display_name\":\"HumanMessagePromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"beta\":false,\"error\":null},\"PromptTemplate\":{\"template\":{\"output_parser\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"BaseOutputParser\",\"list\":false},\"input_types\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_types\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"input_variables\":{\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":true},\"partial_variables\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"partial_variables\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"template\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false},\"template_format\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"f-string\",\"password\":false,\"name\":\"template_format\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"str\",\"list\":false},\"validate_template\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"validate_template\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PromptTemplate\"},\"description\":\"A prompt template for a language model.\",\"base_classes\":[\"StringPromptTemplate\",\"BasePromptTemplate\",\"PromptTemplate\"],\"display_name\":\"PromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/\",\"beta\":false,\"error\":null},\"SystemMessagePromptTemplate\":{\"template\":{\"additional_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"additional_kwargs\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"prompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\\nYou are a helpful assistant that talks casually about life in general.\\nYou are a good listener and you can talk about anything.\\n\",\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"prompt\",\"list\":false},\"_type\":\"SystemMessagePromptTemplate\"},\"description\":\"System message prompt template.\",\"base_classes\":[\"BaseStringMessagePromptTemplate\",\"BaseMessagePromptTemplate\",\"SystemMessagePromptTemplate\"],\"display_name\":\"SystemMessagePromptTemplate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/how_to/prompts\",\"beta\":false,\"error\":null}},\"llms\":{\"Anthropic\":{\"template\":{\"anthropic_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"anthropic_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SecretStr\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"count_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"count_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Callable[[str], int]\",\"list\":false},\"AI_PROMPT\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"AI_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"HUMAN_PROMPT\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"HUMAN_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"anthropic_api_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"anthropic_api_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"max_tokens_to_sample\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":256,\"password\":false,\"name\":\"max_tokens_to_sample\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"claude-2\",\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"top_k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"Anthropic\"},\"description\":\"Anthropic large language models.\",\"base_classes\":[\"_AnthropicCommon\",\"BaseLanguageModel\",\"Anthropic\",\"BaseLLM\",\"LLM\"],\"display_name\":\"Anthropic\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"Cohere\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cohere_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0.0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":256,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0.0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"stop\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.75,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"truncate\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"truncate\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"Cohere\"},\"description\":\"Cohere large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\",\"LLM\",\"BaseCohere\",\"Cohere\"],\"display_name\":\"Cohere\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\",\"beta\":false,\"error\":null},\"CTransformers\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"config\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{\\n \\\"top_k\\\": 40,\\n \\\"top_p\\\": 0.95,\\n \\\"temperature\\\": 0.8,\\n \\\"repetition_penalty\\\": 1.1,\\n \\\"last_n_tokens\\\": 64,\\n \\\"seed\\\": -1,\\n \\\"max_new_tokens\\\": 256,\\n \\\"stop\\\": null,\\n \\\"stream\\\": false,\\n \\\"reset\\\": true,\\n \\\"batch_size\\\": 8,\\n \\\"threads\\\": -1,\\n \\\"context_length\\\": -1,\\n \\\"gpu_layers\\\": 0\\n}\",\"password\":false,\"name\":\"config\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"lib\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"lib\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_file\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_file\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"CTransformers\"},\"description\":\"C Transformers LLM models.\",\"base_classes\":[\"CTransformers\",\"BaseLanguageModel\",\"BaseLLM\",\"LLM\"],\"display_name\":\"CTransformers\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\",\"beta\":false,\"error\":null},\"HuggingFaceHub\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"huggingfacehub_api_token\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"HuggingFace Hub API Token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"repo_id\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt2\",\"password\":false,\"name\":\"repo_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"task\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-generation\",\"password\":false,\"options\":[\"text-generation\",\"text2text-generation\",\"summarization\"],\"name\":\"task\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"HuggingFaceHub\"},\"description\":\"HuggingFaceHub models.\",\"base_classes\":[\"HuggingFaceHub\",\"BaseLanguageModel\",\"BaseLLM\",\"LLM\"],\"display_name\":\"HuggingFaceHub\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/huggingface_hub\",\"beta\":false,\"error\":null},\"LlamaCpp\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"grammar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"grammar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"ForwardRef('str\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"echo\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"echo\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"f16_kv\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"f16_kv\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"grammar_path\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"grammar_path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"last_n_tokens_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":64,\"password\":false,\"name\":\"last_n_tokens_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"logits_all\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"logits_all\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"logprobs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"logprobs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"lora_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"lora_base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"lora_path\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"lora_path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":256,\"password\":true,\"name\":\"max_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"n_batch\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8,\"password\":false,\"name\":\"n_batch\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"n_ctx\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":512,\"password\":false,\"name\":\"n_ctx\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"n_gpu_layers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"n_gpu_layers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"n_parts\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":-1,\"password\":false,\"name\":\"n_parts\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"n_threads\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"n_threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"repeat_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1.1,\"password\":false,\"name\":\"repeat_penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"rope_freq_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10000.0,\"password\":false,\"name\":\"rope_freq_base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"rope_freq_scale\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1.0,\"password\":false,\"name\":\"rope_freq_scale\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"seed\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":-1,\"password\":false,\"name\":\"seed\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"stop\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"suffix\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"suffix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.8,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":40,\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"use_mlock\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"use_mlock\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"use_mmap\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"use_mmap\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"vocab_only\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"vocab_only\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"LlamaCpp\"},\"description\":\"llama.cpp model.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\",\"LLM\",\"LlamaCpp\"],\"display_name\":\"LlamaCpp\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\",\"beta\":false,\"error\":null},\"OpenAI\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":20,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"best_of\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"best_of\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"frequency_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"frequency_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"logit_bias\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"logit_bias\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":256,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-davinci-003\",\"password\":false,\"options\":[\"text-davinci-003\",\"text-davinci-002\",\"text-curie-001\",\"text-babbage-001\",\"text-ada-001\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"presence_penalty\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":0,\"password\":false,\"name\":\"presence_penalty\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"OpenAI\"},\"description\":\"OpenAI large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\",\"BaseOpenAI\",\"OpenAI\"],\"display_name\":\"OpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/openai\",\"beta\":false,\"error\":null},\"VertexAI\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"list\":false},\"credentials\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"location\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"max_output_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":128,\"password\":false,\"name\":\"max_output_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-bison\",\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"project\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_parallelism\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"request_parallelism\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"stop\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.0,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":40,\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tuned_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"tuned_model_name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"VertexAI\"},\"description\":\"Google Vertex AI large language models.\",\"base_classes\":[\"_VertexAICommon\",\"VertexAI\",\"BaseLanguageModel\",\"BaseLLM\",\"_VertexAIBase\"],\"display_name\":\"VertexAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/google_vertex_ai_palm\",\"beta\":false,\"error\":null},\"ChatAnthropic\":{\"template\":{\"anthropic_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"anthropic_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SecretStr\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"count_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"count_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Callable[[str], int]\",\"list\":false},\"AI_PROMPT\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"AI_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"HUMAN_PROMPT\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"HUMAN_PROMPT\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"anthropic_api_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"anthropic_api_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"default_request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"default_request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"max_tokens_to_sample\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":256,\"password\":false,\"name\":\"max_tokens_to_sample\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"claude-2\",\"password\":false,\"name\":\"model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"top_k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"top_p\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatAnthropic\"},\"description\":\"`Anthropic` chat large language models.\",\"base_classes\":[\"_AnthropicCommon\",\"BaseLanguageModel\",\"BaseChatModel\",\"ChatAnthropic\",\"BaseLLM\"],\"display_name\":\"ChatAnthropic\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic\",\"beta\":false,\"error\":null},\"ChatOpenAI\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"max_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"gpt-3.5-turbo-0613\",\"password\":false,\"options\":[\"gpt-3.5-turbo-0613\",\"gpt-3.5-turbo\",\"gpt-3.5-turbo-16k-0613\",\"gpt-3.5-turbo-16k\",\"gpt-4-0613\",\"gpt-4-32k-0613\",\"gpt-4\",\"gpt-4-32k\"],\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"n\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":1,\"password\":false,\"name\":\"n\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":false,\"dynamic\":false,\"info\":\"\\nThe 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.\\n\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.7,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatOpenAI\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseChatModel\",\"ChatOpenAI\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai\",\"beta\":false,\"error\":null},\"ChatVertexAI\":{\"template\":{\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":true},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"list\":false},\"credentials\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"location\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"max_output_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":128,\"password\":false,\"name\":\"max_output_tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat-bison\",\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"project\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_parallelism\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"request_parallelism\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"stop\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"stop\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.0,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":40,\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"verbose\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ChatVertexAI\"},\"description\":\"`Vertex AI` Chat large language models API.\",\"base_classes\":[\"_VertexAICommon\",\"BaseChatModel\",\"BaseLanguageModel\",\"_VertexAIBase\",\"ChatVertexAI\",\"BaseLLM\"],\"display_name\":\"ChatVertexAI\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/google_vertex_ai_palm\",\"beta\":false,\"error\":null},\"HuggingFaceEndpoints\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.huggingface_endpoint import HuggingFaceEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass HuggingFaceEndpointsComponent(CustomComponent):\\n display_name: str = \\\"Hugging Face Inference API\\\"\\n description: str = \\\"LLM model from Hugging Face Inference API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\", \\\"password\\\": True},\\n \\\"task\\\": {\\n \\\"display_name\\\": \\\"Task\\\",\\n \\\"options\\\": [\\\"text2text-generation\\\", \\\"text-generation\\\", \\\"summarization\\\"],\\n },\\n \\\"huggingfacehub_api_token\\\": {\\\"display_name\\\": \\\"API token\\\", \\\"password\\\": True},\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Keyword Arguments\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n endpoint_url: str,\\n task: str = \\\"text2text-generation\\\",\\n huggingfacehub_api_token: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n ) -> BaseLLM:\\n try:\\n output = HuggingFaceEndpoint(\\n endpoint_url=endpoint_url,\\n task=task,\\n huggingfacehub_api_token=huggingfacehub_api_token,\\n model_kwargs=model_kwargs,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to HuggingFace Endpoints API.\\\") from e\\n return output\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"endpoint_url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"huggingfacehub_api_token\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"API token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Keyword Arguments\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"code\",\"list\":false},\"task\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text2text-generation\",\"password\":false,\"options\":[\"text2text-generation\",\"text-generation\",\"summarization\"],\"name\":\"task\",\"display_name\":\"Task\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true}},\"description\":\"LLM model from Hugging Face Inference API.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"Hugging Face Inference API\",\"custom_fields\":{\"endpoint_url\":null,\"huggingfacehub_api_token\":null,\"model_kwargs\":null,\"task\":null},\"output_types\":[\"HuggingFaceEndpoints\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"BaiduQianfanChatEndpoints\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass QianfanChatEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanChatEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan chat models. Get more detail from \\\"\\n \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanChatEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=qianfan_ak,\\n qianfan_sk=qianfan_sk,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"endpoint\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\",\"type\":\"str\",\"list\":false},\"model\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"type\":\"str\",\"list\":true},\"penalty_score\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1.0,\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false},\"qianfan_ak\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"type\":\"str\",\"list\":false},\"qianfan_sk\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"type\":\"str\",\"list\":false},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.8,\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false}},\"description\":\"Baidu Qianfan chat models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"QianfanChatEndpoint\",\"custom_fields\":{\"endpoint\":null,\"model\":null,\"penalty_score\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"temperature\":null,\"top_p\":null},\"output_types\":[\"BaiduQianfanChatEndpoints\"],\"documentation\":\"\",\"beta\":true,\"error\":null},\"BaiduQianfanLLMEndpoints\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.baidu_qianfan_endpoint import QianfanLLMEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass QianfanLLMEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanLLMEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan hosted open source or customized models. \\\"\\n \\\"Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanLLMEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=qianfan_ak,\\n qianfan_sk=qianfan_sk,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"endpoint\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\",\"type\":\"str\",\"list\":false},\"model\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"type\":\"str\",\"list\":true},\"penalty_score\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1.0,\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false},\"qianfan_ak\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"type\":\"str\",\"list\":false},\"qianfan_sk\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"type\":\"str\",\"list\":false},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.8,\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"type\":\"float\",\"list\":false}},\"description\":\"Baidu Qianfan hosted open source or customized models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"base_classes\":[\"BaseLanguageModel\",\"BaseLLM\"],\"display_name\":\"QianfanLLMEndpoint\",\"custom_fields\":{\"endpoint\":null,\"model\":null,\"penalty_score\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"temperature\":null,\"top_p\":null},\"output_types\":[\"BaiduQianfanLLMEndpoints\"],\"documentation\":\"\",\"beta\":true,\"error\":null}},\"memories\":{\"ConversationBufferMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationBufferMemory\"},\"description\":\"Buffer for storing conversation memory.\",\"base_classes\":[\"BaseMemory\",\"BaseChatMemory\",\"ConversationBufferMemory\"],\"display_name\":\"ConversationBufferMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer\",\"beta\":false,\"error\":null},\"ConversationBufferWindowMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationBufferWindowMemory\"},\"description\":\"Buffer for storing conversation memory inside a limited size window.\",\"base_classes\":[\"BaseMemory\",\"ConversationBufferWindowMemory\",\"BaseChatMemory\"],\"display_name\":\"ConversationBufferWindowMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer_window\",\"beta\":false,\"error\":null},\"ConversationEntityMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"entity_extraction_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"entity_store\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"entity_store\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseEntityStore\",\"list\":false},\"entity_summarization_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"entity_summarization_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chat_history_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"history\",\"password\":false,\"name\":\"chat_history_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"entity_cache\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"entity_cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationEntityMemory\"},\"description\":\"Entity extractor & summarizer memory.\",\"base_classes\":[\"BaseMemory\",\"ConversationEntityMemory\",\"BaseChatMemory\"],\"display_name\":\"ConversationEntityMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/entity_memory_with_sqlite\",\"beta\":false,\"error\":null},\"ConversationKGMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"entity_extraction_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"kg\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"kg\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"NetworkxEntityGraph\",\"list\":false},\"knowledge_extraction_prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"knowledge_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"summary_message_cls\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[langchain.schema.messages.BaseMessage]\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationKGMemory\"},\"description\":\"Knowledge graph conversation memory.\",\"base_classes\":[\"ConversationKGMemory\",\"BaseMemory\",\"BaseChatMemory\"],\"display_name\":\"ConversationKGMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/kg\",\"beta\":false,\"error\":null},\"ConversationSummaryMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BasePromptTemplate\",\"list\":false},\"summary_message_cls\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[langchain.schema.messages.BaseMessage]\",\"list\":false},\"ai_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"AI\",\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"buffer\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"buffer\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"human_prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"Human\",\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"ConversationSummaryMemory\"},\"description\":\"Conversation summarizer to chat memory.\",\"base_classes\":[\"SummarizerMixin\",\"ConversationSummaryMemory\",\"BaseChatMemory\",\"BaseMemory\"],\"display_name\":\"ConversationSummaryMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/summary\",\"beta\":false,\"error\":null},\"MongoDBChatMessageHistory\":{\"template\":{\"collection_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"connection_string\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"MongoDB connection string (e.g mongodb://mongo_user:password123@mongo:27017)\",\"type\":\"str\",\"list\":false},\"database_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"database_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"session_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"MongoDBChatMessageHistory\"},\"description\":\"Memory store with MongoDB\",\"base_classes\":[\"MongoDBChatMessageHistory\",\"BaseChatMessageHistory\"],\"display_name\":\"MongoDBChatMessageHistory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history\",\"beta\":false,\"error\":null},\"MotorheadMemory\":{\"template\":{\"chat_memory\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseChatMessageHistory\",\"list\":false},\"api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"client_id\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"context\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"context\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"output_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"type\":\"str\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"session_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"https://api.getmetal.io/v1/motorhead\",\"password\":false,\"name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"MotorheadMemory\"},\"description\":\"Chat message memory backed by Motorhead service.\",\"base_classes\":[\"BaseMemory\",\"BaseChatMemory\",\"MotorheadMemory\"],\"display_name\":\"MotorheadMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/integrations/memory/motorhead_memory\",\"beta\":false,\"error\":null},\"PostgresChatMessageHistory\":{\"template\":{\"connection_string\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"postgresql://postgres:mypassword@localhost/chat_history\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"session_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"table_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"password\":false,\"name\":\"table_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"PostgresChatMessageHistory\"},\"description\":\"Memory store with Postgres\",\"base_classes\":[\"PostgresChatMessageHistory\",\"BaseChatMessageHistory\"],\"display_name\":\"PostgresChatMessageHistory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/postgres_chat_message_history\",\"beta\":false,\"error\":null},\"VectorStoreRetrieverMemory\":{\"template\":{\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStoreRetriever\",\"list\":false},\"exclude_input_keys\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"exclude_input_keys\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"input_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"type\":\"str\",\"list\":false},\"memory_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_docs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"return_docs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"return_messages\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"VectorStoreRetrieverMemory\"},\"description\":\"VectorStoreRetriever-backed memory.\",\"base_classes\":[\"BaseMemory\",\"VectorStoreRetrieverMemory\"],\"display_name\":\"VectorStoreRetrieverMemory\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory\",\"beta\":false,\"error\":null}},\"tools\":{\"Calculator\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"_type\":\"Calculator\"},\"description\":\"Useful for when you need to answer questions about math.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Calculator\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"News API\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"news_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"news_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"News API\"},\"description\":\"Use this when you want to get information about the top headlines of current news stories. The input should be a question in natural language that this API can answer.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"News API\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"TMDB API\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"tmdb_bearer_token\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"tmdb_bearer_token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"TMDB API\"},\"description\":\"Useful for when you want to get information from The Movie Database. The input should be a question in natural language that this API can answer.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"TMDB API\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"Podcast API\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"listen_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"listen_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"Podcast API\"},\"description\":\"Use the Listen Notes Podcast API to search all podcasts or episodes. The input should be a question in natural language that this API can answer.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Podcast API\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"Search\":{\"template\":{\"aiosession\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"serpapi_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"serpapi_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"Search\"},\"description\":\"A search engine. Useful for when you need to answer questions about current events. Input should be a search query.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Search\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"Tool\":{\"template\":{\"func\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"func\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"function\",\"list\":false},\"description\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_direct\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"Tool\"},\"description\":\"Converts a chain, agent or function into a tool.\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Tool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"PythonFunctionTool\":{\"template\":{\"code\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"code\",\"list\":false},\"description\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"return_direct\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"PythonFunctionTool\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"PythonFunctionTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"PythonFunction\":{\"template\":{\"code\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"code\",\"list\":false},\"_type\":\"PythonFunction\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"function\"],\"display_name\":\"PythonFunction\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"JsonSpec\":{\"template\":{\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\",\".yaml\",\".yml\"],\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\",\"yaml\",\"yml\"],\"file_path\":null},\"max_value_length\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"max_value_length\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"_type\":\"JsonSpec\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"JsonSpec\"],\"display_name\":\"JsonSpec\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"BingSearchRun\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BingSearchAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"BingSearchRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BingSearchRun\",\"BaseTool\"],\"display_name\":\"BingSearchRun\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GoogleSearchResults\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"GoogleSearchAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"num_results\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":4,\"password\":false,\"name\":\"num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GoogleSearchResults\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"GoogleSearchResults\",\"BaseTool\"],\"display_name\":\"GoogleSearchResults\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GoogleSearchRun\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"GoogleSearchAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GoogleSearchRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"GoogleSearchRun\",\"BaseTool\"],\"display_name\":\"GoogleSearchRun\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GoogleSerperRun\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"GoogleSerperAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GoogleSerperRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"GoogleSerperRun\",\"BaseTool\"],\"display_name\":\"GoogleSerperRun\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"InfoSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"db\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SQLDatabase\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"InfoSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"InfoSQLDatabaseTool\",\"BaseTool\"],\"display_name\":\"InfoSQLDatabaseTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"JsonGetValueTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"spec\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"JsonSpec\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"JsonGetValueTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"JsonGetValueTool\",\"BaseTool\"],\"display_name\":\"JsonGetValueTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"JsonListKeysTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"spec\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"JsonSpec\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"JsonListKeysTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"JsonListKeysTool\",\"BaseTool\"],\"display_name\":\"JsonListKeysTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"ListSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"db\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SQLDatabase\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"ListSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"BaseTool\",\"ListSQLDatabaseTool\"],\"display_name\":\"ListSQLDatabaseTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"PythonAstREPLTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"globals\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"globals\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"locals\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"locals\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"sanitize_input\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"sanitize_input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"PythonAstREPLTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"PythonAstREPLTool\",\"BaseTool\"],\"display_name\":\"PythonAstREPLTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"PythonREPLTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"python_repl\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"python_repl\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PythonREPL\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"sanitize_input\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"sanitize_input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"PythonREPLTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"PythonREPLTool\",\"BaseTool\"],\"display_name\":\"PythonREPLTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"QuerySQLDataBaseTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"db\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"SQLDatabase\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"QuerySQLDataBaseTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseSQLDatabaseTool\",\"QuerySQLDataBaseTool\",\"BaseTool\"],\"display_name\":\"QuerySQLDataBaseTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"RequestsDeleteTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"RequestsDeleteTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsDeleteTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsDeleteTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"RequestsGetTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"RequestsGetTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsGetTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsGetTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"RequestsPatchTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"RequestsPatchTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseRequestsTool\",\"BaseTool\",\"RequestsPatchTool\"],\"display_name\":\"RequestsPatchTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"RequestsPostTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"RequestsPostTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"RequestsPostTool\",\"BaseRequestsTool\",\"BaseTool\"],\"display_name\":\"RequestsPostTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"RequestsPutTool\":{\"template\":{\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"RequestsPutTool\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"BaseRequestsTool\",\"BaseTool\",\"RequestsPutTool\"],\"display_name\":\"RequestsPutTool\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"WikipediaQueryRun\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"WikipediaAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"WikipediaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"WikipediaQueryRun\",\"BaseTool\"],\"display_name\":\"WikipediaQueryRun\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"WolframAlphaQueryRun\":{\"template\":{\"api_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"WolframAlphaAPIWrapper\",\"list\":false},\"args_schema\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Type[pydantic.main.BaseModel]\",\"list\":false},\"callbacks\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"langchain.callbacks.base.BaseCallbackHandler\",\"list\":false},\"handle_tool_error\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"tags\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"WolframAlphaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Tool\",\"BaseTool\",\"WolframAlphaQueryRun\",\"BaseTool\"],\"display_name\":\"WolframAlphaQueryRun\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null}},\"toolkits\":{\"JsonToolkit\":{\"template\":{\"spec\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"JsonSpec\",\"list\":false},\"_type\":\"JsonToolkit\"},\"description\":\"Toolkit for interacting with a JSON spec.\",\"base_classes\":[\"BaseToolkit\",\"JsonToolkit\",\"Tool\"],\"display_name\":\"JsonToolkit\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"OpenAPIToolkit\":{\"template\":{\"json_agent\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"json_agent\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"AgentExecutor\",\"list\":false},\"requests_wrapper\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"TextRequestsWrapper\",\"list\":false},\"_type\":\"OpenAPIToolkit\"},\"description\":\"Toolkit for interacting with an OpenAPI API.\",\"base_classes\":[\"BaseToolkit\",\"OpenAPIToolkit\",\"Tool\"],\"display_name\":\"OpenAPIToolkit\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"VectorStoreInfo\":{\"template\":{\"vectorstore\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectorstore\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStore\",\"list\":false},\"description\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"VectorStoreInfo\"},\"description\":\"Information about a VectorStore.\",\"base_classes\":[\"VectorStoreInfo\"],\"display_name\":\"VectorStoreInfo\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"VectorStoreRouterToolkit\":{\"template\":{\"llm\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"vectorstores\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectorstores\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStoreInfo\",\"list\":true},\"_type\":\"VectorStoreRouterToolkit\"},\"description\":\"Toolkit for routing between Vector Stores.\",\"base_classes\":[\"BaseToolkit\",\"VectorStoreRouterToolkit\",\"Tool\"],\"display_name\":\"VectorStoreRouterToolkit\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"VectorStoreToolkit\":{\"template\":{\"llm\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLanguageModel\",\"list\":false},\"vectorstore_info\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectorstore_info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"VectorStoreInfo\",\"list\":false},\"_type\":\"VectorStoreToolkit\"},\"description\":\"Toolkit for interacting with a Vector Store.\",\"base_classes\":[\"BaseToolkit\",\"VectorStoreToolkit\",\"Tool\"],\"display_name\":\"VectorStoreToolkit\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"Metaphor\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Union\\nfrom langflow import CustomComponent\\n\\nfrom metaphor_python import Metaphor # type: ignore\\nfrom langchain.tools import Tool\\nfrom langchain.agents import tool\\nfrom langchain.agents.agent_toolkits.base import BaseToolkit\\n\\n\\nclass MetaphorToolkit(CustomComponent):\\n display_name: str = \\\"Metaphor\\\"\\n description: str = \\\"Metaphor Toolkit\\\"\\n documentation = (\\n \\\"https://python.langchain.com/docs/integrations/tools/metaphor_search\\\"\\n )\\n beta = True\\n # api key should be password = True\\n field_config = {\\n \\\"metaphor_api_key\\\": {\\\"display_name\\\": \\\"Metaphor API Key\\\", \\\"password\\\": True},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n metaphor_api_key: str,\\n use_autoprompt: bool = True,\\n search_num_results: int = 5,\\n similar_num_results: int = 5,\\n ) -> Union[Tool, BaseToolkit]:\\n # If documents, then we need to create a Vectara instance using .from_documents\\n client = Metaphor(api_key=metaphor_api_key)\\n\\n @tool\\n def search(query: str):\\n \\\"\\\"\\\"Call search engine with a query.\\\"\\\"\\\"\\n return client.search(\\n query, use_autoprompt=use_autoprompt, num_results=search_num_results\\n )\\n\\n @tool\\n def get_contents(ids: List[str]):\\n \\\"\\\"\\\"Get contents of a webpage.\\n\\n The ids passed in should be a list of ids as fetched from `search`.\\n \\\"\\\"\\\"\\n return client.get_contents(ids)\\n\\n @tool\\n def find_similar(url: str):\\n \\\"\\\"\\\"Get search results similar to a given URL.\\n\\n The url passed in should be a URL returned from `search`\\n \\\"\\\"\\\"\\n return client.find_similar(url, num_results=similar_num_results)\\n\\n return [search, get_contents, find_similar] # type: ignore\\n\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"metaphor_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"metaphor_api_key\",\"display_name\":\"Metaphor API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"search_num_results\",\"display_name\":\"search_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"similar_num_results\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"similar_num_results\",\"display_name\":\"similar_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"use_autoprompt\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":true,\"password\":false,\"name\":\"use_autoprompt\",\"display_name\":\"use_autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false}},\"description\":\"Metaphor Toolkit\",\"base_classes\":[\"Tool\",\"BaseTool\"],\"display_name\":\"Metaphor\",\"custom_fields\":{\"metaphor_api_key\":null,\"search_num_results\":null,\"similar_num_results\":null,\"use_autoprompt\":null},\"output_types\":[\"Metaphor\"],\"documentation\":\"https://python.langchain.com/docs/integrations/tools/metaphor_search\",\"beta\":true,\"error\":null}},\"wrappers\":{\"TextRequestsWrapper\":{\"template\":{\"aiosession\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ClientSession\",\"list\":false},\"auth\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"auth\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"TextRequestsWrapper\"},\"description\":\"Lightweight wrapper around requests library.\",\"base_classes\":[\"TextRequestsWrapper\"],\"display_name\":\"TextRequestsWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SQLDatabase\":{\"template\":{\"database_uri\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"database_uri\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"engine_args\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"engine_args\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"SQLDatabase\"},\"description\":\"Construct a SQLAlchemy engine from URI.\",\"base_classes\":[\"SQLDatabase\",\"function\"],\"display_name\":\"SQLDatabase\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null}},\"embeddings\":{\"OpenAIEmbeddings\":{\"template\":{\"allowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":[],\"password\":false,\"name\":\"allowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"disallowed_special\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"all\",\"password\":false,\"name\":\"disallowed_special\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Literal'all'\",\"list\":true},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"deployment\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"deployment\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"embedding_ctx_length\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":8191,\"password\":false,\"name\":\"embedding_ctx_length\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"text-embedding-ada-002\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"openai_api_base\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_base\",\"display_name\":\"OpenAI API Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"openai_api_key\",\"display_name\":\"OpenAI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_type\",\"display_name\":\"OpenAI API Type\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_api_version\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"openai_api_version\",\"display_name\":\"OpenAI API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_organization\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_organization\",\"display_name\":\"OpenAI Organization\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"openai_proxy\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"openai_proxy\",\"display_name\":\"OpenAI Proxy\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"request_timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"show_progress_bar\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"show_progress_bar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"skip_empty\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"skip_empty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"tiktoken_model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"tiktoken_model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"OpenAIEmbeddings\"},\"description\":\"OpenAI embedding models.\",\"base_classes\":[\"OpenAIEmbeddings\",\"Embeddings\"],\"display_name\":\"OpenAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/openai\",\"beta\":false,\"error\":null},\"CohereEmbeddings\":{\"template\":{\"async_client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"async_client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"cohere_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"cohere_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"model\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"embed-english-v2.0\",\"password\":false,\"name\":\"model\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"truncate\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"truncate\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"CohereEmbeddings\"},\"description\":\"Cohere embedding models.\",\"base_classes\":[\"CohereEmbeddings\",\"Embeddings\"],\"display_name\":\"CohereEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/cohere\",\"beta\":false,\"error\":null},\"HuggingFaceEmbeddings\":{\"template\":{\"cache_folder\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"cache_folder\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"encode_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"encode_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"model_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"sentence-transformers/all-mpnet-base-v2\",\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"multi_process\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"multi_process\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"HuggingFaceEmbeddings\"},\"description\":\"HuggingFace sentence_transformers embedding models.\",\"base_classes\":[\"HuggingFaceEmbeddings\",\"Embeddings\"],\"display_name\":\"HuggingFaceEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers\",\"beta\":false,\"error\":null},\"VertexAIEmbeddings\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"ForwardRef(\\\"'_LanguageModel'\\\")\",\"list\":false},\"credentials\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"location\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"password\":false,\"name\":\"location\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"max_output_tokens\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":128,\"password\":true,\"name\":\"max_output_tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"max_retries\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6,\"password\":false,\"name\":\"max_retries\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"model_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"textembedding-gecko\",\"password\":false,\"name\":\"model_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"project\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"project\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"request_parallelism\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"request_parallelism\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"stop\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"streaming\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"temperature\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.0,\"password\":false,\"name\":\"temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"top_k\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":40,\"password\":false,\"name\":\"top_k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"top_p\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":0.95,\"password\":false,\"name\":\"top_p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"_type\":\"VertexAIEmbeddings\"},\"description\":\"Google Cloud VertexAI embedding models.\",\"base_classes\":[\"_VertexAICommon\",\"VertexAIEmbeddings\",\"Embeddings\",\"_VertexAIBase\"],\"display_name\":\"VertexAIEmbeddings\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/google_vertex_ai_palm\",\"beta\":false,\"error\":null}},\"vectorstores\":{\"Chroma\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.Client\",\"list\":false},\"client_settings\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client_settings\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"chromadb.config.Setting\",\"list\":true},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"chroma_server_cors_allow_origins\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_cors_allow_origins\",\"display_name\":\"Chroma Server CORS Allow Origins\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"chroma_server_grpc_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_grpc_port\",\"display_name\":\"Chroma Server GRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_host\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_host\",\"display_name\":\"Chroma Server Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_http_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_http_port\",\"display_name\":\"Chroma Server HTTP Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_ssl_enabled\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"chroma_server_ssl_enabled\",\"display_name\":\"Chroma Server SSL Enabled\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"collection_metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"collection_metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"collection_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"persist\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"persist\",\"display_name\":\"Persist\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"persist_directory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"persist_directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"_type\":\"Chroma\"},\"description\":\"Create a Chroma vectorstore from a raw documents.\",\"base_classes\":[\"VectorStore\",\"Chroma\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Chroma\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/chroma\",\"beta\":false,\"error\":null},\"FAISS\":{\"template\":{\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"folder_path\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"folder_path\",\"display_name\":\"Local Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"index_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"_type\":\"FAISS\"},\"description\":\"Construct FAISS wrapper from raw documents.\",\"base_classes\":[\"FAISS\",\"VectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"FAISS\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss\",\"beta\":false,\"error\":null},\"MongoDBAtlasVectorSearch\":{\"template\":{\"collection\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"collection\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Collection[MongoDBDocumentType]\",\"list\":false},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"collection_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"db_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"db_name\",\"display_name\":\"Database Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"index_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"mongodb_atlas_cluster_uri\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"mongodb_atlas_cluster_uri\",\"display_name\":\"MongoDB Atlas Cluster URI\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"_type\":\"MongoDBAtlasVectorSearch\"},\"description\":\"Construct a `MongoDB Atlas Vector Search` vector store from raw documents.\",\"base_classes\":[\"MongoDBAtlasVectorSearch\",\"VectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"MongoDB Atlas\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas\",\"beta\":false,\"error\":null},\"Pinecone\":{\"template\":{\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":32,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"index_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"index_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"namespace\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"namespace\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"pinecone_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"pinecone_api_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"pinecone_env\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"pinecone_env\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"pool_threads\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":4,\"password\":false,\"name\":\"pool_threads\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"text_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"text\",\"password\":true,\"name\":\"text_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"upsert_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"upsert_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"Pinecone\"},\"description\":\"Construct Pinecone wrapper from raw documents.\",\"base_classes\":[\"Pinecone\",\"VectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Pinecone\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/pinecone\",\"beta\":false,\"error\":null},\"Qdrant\":{\"template\":{\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"hnsw_config\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"hnsw_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"common_types.HnswConfigDiff\",\"list\":false},\"init_from\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"init_from\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"common_types.InitFrom\",\"list\":false},\"optimizers_config\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"optimizers_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"common_types.OptimizersConfigDiff\",\"list\":false},\"quantization_config\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"quantization_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"common_types.QuantizationConfig\",\"list\":false},\"wal_config\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"wal_config\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"common_types.WalConfigDiff\",\"list\":false},\"api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":64,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"collection_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"content_payload_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"page_content\",\"password\":false,\"name\":\"content_payload_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"distance_func\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"Cosine\",\"password\":false,\"name\":\"distance_func\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"force_recreate\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"force_recreate\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"grpc_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6334,\"password\":false,\"name\":\"grpc_port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"host\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"https\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"https\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"location\":{\"required\":false,\"placeholder\":\":memory:\",\"show\":true,\"multiline\":false,\"value\":\":memory:\",\"password\":false,\"name\":\"location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata_payload_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"metadata\",\"password\":false,\"name\":\"metadata_payload_key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"on_disk\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"on_disk\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"on_disk_payload\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"on_disk_payload\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"path\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":6333,\"password\":false,\"name\":\"port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"prefer_grpc\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"prefer_grpc\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"prefix\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"prefix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"replication_factor\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"replication_factor\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"shard_number\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"shard_number\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"timeout\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"float\",\"list\":false},\"url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"vector_name\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"vector_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"write_consistency_factor\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"write_consistency_factor\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"_type\":\"Qdrant\"},\"description\":\"Construct Qdrant wrapper from a list of texts.\",\"base_classes\":[\"VectorStore\",\"Qdrant\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Qdrant\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/qdrant\",\"beta\":false,\"error\":null},\"SupabaseVectorStore\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"supabase.client.Client\",\"list\":false},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"ids\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"ids\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"query_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"query_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"supabase_service_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":true,\"name\":\"supabase_service_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"supabase_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"supabase_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"table_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"table_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"SupabaseVectorStore\"},\"description\":\"Return VectorStore initialized from texts and embeddings.\",\"base_classes\":[\"SupabaseVectorStore\",\"VectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Supabase\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/supabase\",\"beta\":false,\"error\":null},\"Weaviate\":{\"template\":{\"client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"weaviate.Client\",\"list\":false},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"relevance_score_fn\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"relevance_score_fn\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Callable[[float], float]\",\"list\":false},\"batch_size\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"batch_size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"by_text\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"by_text\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"client_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"client_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"code\",\"list\":false},\"index_name\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"index_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadatas\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"metadatas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":true},\"search_kwargs\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{}\",\"password\":false,\"name\":\"search_kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"NestedDict\",\"list\":false},\"text_key\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"text\",\"password\":true,\"name\":\"text_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"weaviate_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"weaviate_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"weaviate_url\":{\"required\":true,\"placeholder\":\"http://localhost:8080\",\"show\":true,\"multiline\":false,\"value\":\"http://localhost:8080\",\"password\":false,\"name\":\"weaviate_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"Weaviate\"},\"description\":\"Construct Weaviate wrapper from raw documents.\",\"base_classes\":[\"Weaviate\",\"VectorStore\",\"BaseRetriever\",\"VectorStoreRetriever\"],\"display_name\":\"Weaviate\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/weaviate\",\"beta\":false,\"error\":null},\"Vectara\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional, Union\\nfrom langflow import CustomComponent\\n\\nfrom langchain.vectorstores import Vectara\\nfrom langchain.schema import Document\\nfrom langchain.vectorstores.base import VectorStore\\nfrom langchain.schema import BaseRetriever\\n\\n\\nclass VectaraComponent(CustomComponent):\\n display_name: str = \\\"Vectara\\\"\\n description: str = \\\"Implementation of Vector Store using Vectara\\\"\\n documentation = (\\n \\\"https://python.langchain.com/docs/integrations/vectorstores/vectara\\\"\\n )\\n beta = True\\n # api key should be password = True\\n field_config = {\\n \\\"vectara_customer_id\\\": {\\\"display_name\\\": \\\"Vectara Customer ID\\\"},\\n \\\"vectara_corpus_id\\\": {\\\"display_name\\\": \\\"Vectara Corpus ID\\\"},\\n \\\"vectara_api_key\\\": {\\\"display_name\\\": \\\"Vectara API Key\\\", \\\"password\\\": True},\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n }\\n\\n def build(\\n self,\\n vectara_customer_id: str,\\n vectara_corpus_id: str,\\n vectara_api_key: str,\\n documents: Optional[Document] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n # If documents, then we need to create a Vectara instance using .from_documents\\n if documents is not None:\\n return Vectara.from_documents(\\n documents=documents, # type: ignore\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=\\\"langflow\\\",\\n )\\n\\n return Vectara(\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=\\\"langflow\\\",\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"vectara_api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"vectara_api_key\",\"display_name\":\"Vectara API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"vectara_corpus_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectara_corpus_id\",\"display_name\":\"Vectara Corpus ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"vectara_customer_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"vectara_customer_id\",\"display_name\":\"Vectara Customer ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Implementation of Vector Store using Vectara\",\"base_classes\":[\"VectorStore\",\"BaseRetriever\"],\"display_name\":\"Vectara\",\"custom_fields\":{\"documents\":null,\"vectara_api_key\":null,\"vectara_corpus_id\":null,\"vectara_customer_id\":null},\"output_types\":[\"Vectara\"],\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/vectara\",\"beta\":true,\"error\":null},\"Chroma (1)\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional, Union\\nfrom langflow import CustomComponent\\n\\nfrom langchain.vectorstores import Chroma\\nfrom langchain.schema import Document\\nfrom langchain.vectorstores.base import VectorStore\\nfrom langchain.schema import BaseRetriever\\nfrom langchain.embeddings.base import Embeddings\\nimport chromadb # type: ignore\\n\\n\\nclass ChromaComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using Chroma.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Chroma (Custom Component)\\\"\\n description: str = \\\"Implementation of Vector Store using Chroma\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/chroma\\\"\\n beta = True\\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 \\\"persist\\\": {\\\"display_name\\\": \\\"Persist\\\"},\\n \\\"persist_directory\\\": {\\\"display_name\\\": \\\"Persist Directory\\\"},\\n \\\"code\\\": {\\\"show\\\": False, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\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 persist: bool,\\n chroma_server_ssl_enabled: bool,\\n persist_directory: Optional[str] = None,\\n embedding: Optional[Embeddings] = None,\\n documents: Optional[Document] = 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 - persist_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 - persist (bool): Whether to persist the Vector Store or not.\\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\\n 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 if documents is not None and embedding is not None:\\n return Chroma.from_documents(\\n documents=documents, # type: ignore\\n persist_directory=persist_directory if persist else None,\\n collection_name=collection_name,\\n embedding=embedding,\\n client_settings=chroma_settings,\\n )\\n\\n return Chroma(\\n persist_directory=persist_directory, client_settings=chroma_settings\\n )\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"chroma_server_cors_allow_origins\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_cors_allow_origins\",\"display_name\":\"Server CORS Allow Origins\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_grpc_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_grpc_port\",\"display_name\":\"Server gRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"chroma_server_host\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_host\",\"display_name\":\"Server Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"chroma_server_port\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"chroma_server_port\",\"display_name\":\"Server Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"chroma_server_ssl_enabled\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"chroma_server_ssl_enabled\",\"display_name\":\"Server SSL Enabled\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"collection_name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"langflow\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"documents\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"embedding\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"embedding\",\"display_name\":\"Embedding\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Embeddings\",\"list\":false},\"persist\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"persist\",\"display_name\":\"Persist\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"persist_directory\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"persist_directory\",\"display_name\":\"Persist Directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Implementation of Vector Store using Chroma\",\"base_classes\":[\"VectorStore\",\"BaseRetriever\"],\"display_name\":\"Chroma (Custom Component)\",\"custom_fields\":{\"chroma_server_cors_allow_origins\":null,\"chroma_server_grpc_port\":null,\"chroma_server_host\":null,\"chroma_server_port\":null,\"chroma_server_ssl_enabled\":null,\"collection_name\":null,\"documents\":null,\"embedding\":null,\"persist\":null,\"persist_directory\":null},\"output_types\":[\"Chroma\"],\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/chroma\",\"beta\":true,\"error\":null}},\"documentloaders\":{\"AZLyricsLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"AZLyricsLoader\"},\"description\":\"Load `AZLyrics` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"AZLyricsLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/azlyrics\",\"beta\":false,\"error\":null},\"AirbyteJSONLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"beta\":false,\"error\":null},\"BSHTMLLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".html\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"html\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"BSHTMLLoader\"},\"description\":\"Load `HTML` files and parse them with `beautiful soup`.\",\"base_classes\":[\"Document\"],\"display_name\":\"BSHTMLLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"beta\":false,\"error\":null},\"CSVLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".csv\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"beta\":false,\"error\":null},\"CoNLLULoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".csv\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"csv\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"CoNLLULoader\"},\"description\":\"Load `CoNLL-U` files.\",\"base_classes\":[\"Document\"],\"display_name\":\"CoNLLULoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/conll-u\",\"beta\":false,\"error\":null},\"CollegeConfidentialLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"CollegeConfidentialLoader\"},\"description\":\"Load `College Confidential` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"CollegeConfidentialLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/college_confidential\",\"beta\":false,\"error\":null},\"DirectoryLoader\":{\"template\":{\"glob\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"**/*.txt\",\"password\":false,\"name\":\"glob\",\"display_name\":\"glob\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"load_hidden\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"False\",\"password\":false,\"name\":\"load_hidden\",\"display_name\":\"Load hidden files\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"max_concurrency\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"max_concurrency\",\"display_name\":\"Max concurrency\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"recursive\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"True\",\"password\":false,\"name\":\"recursive\",\"display_name\":\"Recursive\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"silent_errors\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"False\",\"password\":false,\"name\":\"silent_errors\",\"display_name\":\"Silent errors\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"use_multithreading\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"True\",\"password\":false,\"name\":\"use_multithreading\",\"display_name\":\"Use multithreading\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"DirectoryLoader\"},\"description\":\"Load from a directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"DirectoryLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/file_directory\",\"beta\":false,\"error\":null},\"EverNoteLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".xml\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"xml\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"EverNoteLoader\"},\"description\":\"Load from `EverNote`.\",\"base_classes\":[\"Document\"],\"display_name\":\"EverNoteLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/evernote\",\"beta\":false,\"error\":null},\"FacebookChatLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".json\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"json\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"FacebookChatLoader\"},\"description\":\"Load `Facebook Chat` messages directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"FacebookChatLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/facebook_chat\",\"beta\":false,\"error\":null},\"GitLoader\":{\"template\":{\"branch\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"branch\",\"display_name\":\"Branch\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"clone_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"clone_url\",\"display_name\":\"Clone URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"file_filter\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"file_filter\",\"display_name\":\"File extensions (comma-separated)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"repo_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"repo_path\",\"display_name\":\"Path to repository\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GitLoader\"},\"description\":\"Load `Git` repository files.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/git\",\"beta\":false,\"error\":null},\"GitbookLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_page\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_page\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GitbookLoader\"},\"description\":\"Load `GitBook` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitbookLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gitbook\",\"beta\":false,\"error\":null},\"GutenbergLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"GutenbergLoader\"},\"description\":\"Load from `Gutenberg.org`.\",\"base_classes\":[\"Document\"],\"display_name\":\"GutenbergLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gutenberg\",\"beta\":false,\"error\":null},\"HNLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"HNLoader\"},\"description\":\"Load `Hacker News` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"HNLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/hacker_news\",\"beta\":false,\"error\":null},\"IFixitLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"IFixitLoader\"},\"description\":\"Load `iFixit` repair guides, device wikis and answers.\",\"base_classes\":[\"Document\"],\"display_name\":\"IFixitLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/ifixit\",\"beta\":false,\"error\":null},\"IMSDbLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"IMSDbLoader\"},\"description\":\"Load `IMSDb` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"IMSDbLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/imsdb\",\"beta\":false,\"error\":null},\"NotionDirectoryLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"NotionDirectoryLoader\"},\"description\":\"Load `Notion directory` dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"NotionDirectoryLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/notion\",\"beta\":false,\"error\":null},\"PyPDFLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".pdf\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"pdf\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"PyPDFLoader\"},\"description\":\"Load PDF using pypdf into list of documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"beta\":false,\"error\":null},\"PyPDFDirectoryLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"PyPDFDirectoryLoader\"},\"description\":\"Load a directory with `PDF` files using `pypdf` and chunks at character level.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFDirectoryLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"beta\":false,\"error\":null},\"ReadTheDocsLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"ReadTheDocsLoader\"},\"description\":\"Load `ReadTheDocs` documentation directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"ReadTheDocsLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/readthedocs_documentation\",\"beta\":false,\"error\":null},\"SRTLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".srt\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"srt\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"SRTLoader\"},\"description\":\"Load `.srt` (subtitle) files.\",\"base_classes\":[\"Document\"],\"display_name\":\"SRTLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/subtitle\",\"beta\":false,\"error\":null},\"SlackDirectoryLoader\":{\"template\":{\"zip_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".zip\"],\"password\":false,\"name\":\"zip_path\",\"display_name\":\"Path to zip file\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"zip\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"workspace_url\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"workspace_url\",\"display_name\":\"Workspace URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"SlackDirectoryLoader\"},\"description\":\"Load from a `Slack` directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"SlackDirectoryLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/slack\",\"beta\":false,\"error\":null},\"TextLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".txt\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"txt\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"TextLoader\"},\"description\":\"Load text file.\",\"base_classes\":[\"Document\"],\"display_name\":\"TextLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/\",\"beta\":false,\"error\":null},\"UnstructuredEmailLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".eml\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"eml\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"UnstructuredEmailLoader\"},\"description\":\"Load email files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredEmailLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/email\",\"beta\":false,\"error\":null},\"UnstructuredHTMLLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".html\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"html\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"UnstructuredHTMLLoader\"},\"description\":\"Load `HTML` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredHTMLLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"beta\":false,\"error\":null},\"UnstructuredMarkdownLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".md\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"md\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"UnstructuredMarkdownLoader\"},\"description\":\"Load `Markdown` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredMarkdownLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/markdown\",\"beta\":false,\"error\":null},\"UnstructuredPowerPointLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".pptx\",\".ppt\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"pptx\",\"ppt\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"UnstructuredPowerPointLoader\"},\"description\":\"Load `Microsoft PowerPoint` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredPowerPointLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_powerpoint\",\"beta\":false,\"error\":null},\"UnstructuredWordDocumentLoader\":{\"template\":{\"file_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"suffixes\":[\".docx\",\".doc\"],\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"file\",\"list\":false,\"fileTypes\":[\"docx\",\"doc\"],\"file_path\":null},\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"_type\":\"UnstructuredWordDocumentLoader\"},\"description\":\"Load `Microsoft Word` file using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredWordDocumentLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_word\",\"beta\":false,\"error\":null},\"WebBaseLoader\":{\"template\":{\"metadata\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{},\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"web_path\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"WebBaseLoader\"},\"description\":\"Load HTML pages using `urllib` and parse them with `BeautifulSoup'.\",\"base_classes\":[\"Document\"],\"display_name\":\"WebBaseLoader\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base\",\"beta\":false,\"error\":null}},\"textsplitters\":{\"CharacterTextSplitter\":{\"template\":{\"documents\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":true},\"chunk_overlap\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":200,\"password\":false,\"name\":\"chunk_overlap\",\"display_name\":\"Chunk Overlap\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"chunk_size\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"display_name\":\"Chunk Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"separator\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"\\\\n\",\"password\":false,\"name\":\"separator\",\"display_name\":\"Separator\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"CharacterTextSplitter\"},\"description\":\"Splitting text that looks at characters.\",\"base_classes\":[\"Document\"],\"display_name\":\"CharacterTextSplitter\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/character_text_splitter\",\"beta\":false,\"error\":null},\"LanguageRecursiveTextSplitter\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.text_splitter import Language\\nfrom langchain.schema import Document\\n\\n\\nclass LanguageRecursiveTextSplitterComponent(CustomComponent):\\n display_name: str = \\\"Language Recursive Text Splitter\\\"\\n description: str = \\\"Split text into chunks of a specified length based on language.\\\"\\n documentation: str = \\\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\\\"\\n\\n def build_config(self):\\n options = [x.value for x in Language]\\n return {\\n \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\n },\\n \\\"separator_type\\\": {\\n \\\"display_name\\\": \\\"Separator Type\\\",\\n \\\"info\\\": \\\"The type of separator to use.\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"options\\\": options,\\n \\\"value\\\": \\\"Python\\\",\\n },\\n \\\"separators\\\": {\\n \\\"display_name\\\": \\\"Separators\\\",\\n \\\"info\\\": \\\"The characters to split on.\\\",\\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 documents: list[Document],\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n separator_type: Optional[str] = \\\"Python\\\",\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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\\n splitter = RecursiveCharacterTextSplitter.from_language(\\n language=Language(separator_type),\\n chunk_size=chunk_size,\\n chunk_overlap=chunk_overlap,\\n )\\n\\n docs = splitter.split_documents(documents)\\n return docs\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"chunk_overlap\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":200,\"password\":false,\"name\":\"chunk_overlap\",\"display_name\":\"Chunk Overlap\",\"advanced\":false,\"dynamic\":false,\"info\":\"The amount of overlap between chunks.\",\"type\":\"int\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"display_name\":\"Chunk Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum length of each chunk.\",\"type\":\"int\",\"list\":false},\"documents\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\",\"type\":\"Document\",\"list\":true},\"separator_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"Python\",\"password\":false,\"options\":[\"cpp\",\"go\",\"java\",\"kotlin\",\"js\",\"ts\",\"php\",\"proto\",\"python\",\"rst\",\"ruby\",\"rust\",\"scala\",\"swift\",\"markdown\",\"latex\",\"html\",\"sol\",\"csharp\"],\"name\":\"separator_type\",\"display_name\":\"Separator Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"The type of separator to use.\",\"type\":\"str\",\"list\":true}},\"description\":\"Split text into chunks of a specified length based on language.\",\"base_classes\":[\"Document\"],\"display_name\":\"Language Recursive Text Splitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separator_type\":null},\"output_types\":[\"LanguageRecursiveTextSplitter\"],\"documentation\":\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\",\"beta\":true,\"error\":null},\"RecursiveCharacterTextSplitter\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.utils.util import build_loader_repr_from_documents\\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 \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\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 documents: list[Document],\\n separators: Optional[list[str]] = None,\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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 = [x.encode().decode(\\\"unicode-escape\\\") 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\\n docs = splitter.split_documents(documents)\\n self.repr_value = build_loader_repr_from_documents(docs)\\n return docs\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"chunk_overlap\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":200,\"password\":false,\"name\":\"chunk_overlap\",\"display_name\":\"Chunk Overlap\",\"advanced\":false,\"dynamic\":false,\"info\":\"The amount of overlap between chunks.\",\"type\":\"int\",\"list\":false},\"chunk_size\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":1000,\"password\":false,\"name\":\"chunk_size\",\"display_name\":\"Chunk Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum length of each chunk.\",\"type\":\"int\",\"list\":false},\"documents\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents to split.\",\"type\":\"Document\",\"list\":true},\"separators\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"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\\\", \\\" \\\", \\\"\\\"].\",\"type\":\"str\",\"list\":true}},\"description\":\"Split text into chunks of a specified length.\",\"base_classes\":[\"Document\"],\"display_name\":\"Recursive Character Text Splitter\",\"custom_fields\":{\"chunk_overlap\":null,\"chunk_size\":null,\"documents\":null,\"separators\":null},\"output_types\":[\"RecursiveCharacterTextSplitter\"],\"documentation\":\"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\",\"beta\":true,\"error\":null}},\"utilities\":{\"BingSearchAPIWrapper\":{\"template\":{\"bing_search_url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"bing_search_url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"bing_subscription_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"bing_subscription_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"_type\":\"BingSearchAPIWrapper\"},\"description\":\"Wrapper for Bing Search API.\",\"base_classes\":[\"BingSearchAPIWrapper\"],\"display_name\":\"BingSearchAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GoogleSearchAPIWrapper\":{\"template\":{\"google_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"google_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"google_cse_id\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"google_cse_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"search_engine\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"search_engine\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"siterestrict\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"siterestrict\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"GoogleSearchAPIWrapper\"},\"description\":\"Wrapper for Google Search API.\",\"base_classes\":[\"GoogleSearchAPIWrapper\"],\"display_name\":\"GoogleSearchAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GoogleSerperAPIWrapper\":{\"template\":{\"aiosession\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ClientSession\",\"list\":false},\"gl\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"us\",\"password\":false,\"name\":\"gl\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"hl\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"en\",\"password\":false,\"name\":\"hl\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"result_key_for_type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"{\\n \\\"news\\\": \\\"news\\\",\\n \\\"places\\\": \\\"places\\\",\\n \\\"images\\\": \\\"images\\\",\\n \\\"search\\\": \\\"organic\\\"\\n}\",\"password\":true,\"name\":\"result_key_for_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"serper_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"serper_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"tbs\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"tbs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"type\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"search\",\"password\":false,\"options\":[\"news\",\"search\",\"places\",\"images\"],\"name\":\"type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"_type\":\"GoogleSerperAPIWrapper\"},\"description\":\"Wrapper around the Serper.dev Google Search API.\",\"base_classes\":[\"GoogleSerperAPIWrapper\"],\"display_name\":\"GoogleSerperAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SearxSearchWrapper\":{\"template\":{\"aiosession\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"categories\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"categories\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"engines\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"engines\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":true},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"password\":false,\"name\":\"headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"k\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":10,\"password\":false,\"name\":\"k\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"params\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"params\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"query_suffix\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"query_suffix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"searx_host\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"\",\"password\":false,\"name\":\"searx_host\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"unsecure\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"unsecure\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"_type\":\"SearxSearchWrapper\"},\"description\":\"Wrapper for Searx API.\",\"base_classes\":[\"SearxSearchWrapper\"],\"display_name\":\"SearxSearchWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"SerpAPIWrapper\":{\"template\":{\"aiosession\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ClientSession\",\"list\":false},\"params\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"{\\n \\\"engine\\\": \\\"google\\\",\\n \\\"google_domain\\\": \\\"google.com\\\",\\n \\\"gl\\\": \\\"us\\\",\\n \\\"hl\\\": \\\"en\\\"\\n}\",\"password\":false,\"name\":\"params\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false},\"search_engine\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"search_engine\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"serpapi_api_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"serpapi_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"SerpAPIWrapper\"},\"description\":\"Wrapper around SerpAPI.\",\"base_classes\":[\"SerpAPIWrapper\"],\"display_name\":\"SerpAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"WikipediaAPIWrapper\":{\"template\":{\"doc_content_chars_max\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":4000,\"password\":false,\"name\":\"doc_content_chars_max\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"lang\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":\"en\",\"password\":false,\"name\":\"lang\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"load_all_available_meta\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":false,\"password\":false,\"name\":\"load_all_available_meta\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"bool\",\"list\":false},\"top_k_results\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"value\":3,\"password\":false,\"name\":\"top_k_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"int\",\"list\":false},\"wiki_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"wiki_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"_type\":\"WikipediaAPIWrapper\"},\"description\":\"Wrapper around WikipediaAPI.\",\"base_classes\":[\"WikipediaAPIWrapper\"],\"display_name\":\"WikipediaAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"WolframAlphaAPIWrapper\":{\"template\":{\"wolfram_alpha_appid\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"wolfram_alpha_appid\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"wolfram_client\":{\"required\":false,\"placeholder\":\"\",\"show\":false,\"multiline\":false,\"password\":false,\"name\":\"wolfram_client\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Any\",\"list\":false},\"_type\":\"WolframAlphaAPIWrapper\"},\"description\":\"Wrapper for Wolfram Alpha.\",\"base_classes\":[\"WolframAlphaAPIWrapper\"],\"display_name\":\"WolframAlphaAPIWrapper\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":false,\"error\":null},\"GetRequest\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\nimport requests\\nfrom typing import Optional\\n\\n\\nclass GetRequest(CustomComponent):\\n display_name: str = \\\"GET Request\\\"\\n description: str = \\\"Make a GET request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#get-request\\\"\\n beta = True\\n field_config = {\\n \\\"url\\\": {\\n \\\"display_name\\\": \\\"URL\\\",\\n \\\"info\\\": \\\"The URL to make the request to\\\",\\n \\\"is_list\\\": True,\\n },\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"timeout\\\": {\\n \\\"display_name\\\": \\\"Timeout\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"The timeout to use for the request.\\\",\\n \\\"value\\\": 5,\\n },\\n }\\n\\n def get_document(\\n self, session: requests.Session, url: str, headers: Optional[dict], timeout: int\\n ) -> Document:\\n try:\\n response = session.get(url, headers=headers, timeout=int(timeout))\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except requests.Timeout:\\n return Document(\\n page_content=\\\"Request Timed Out\\\",\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 408},\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n url: str,\\n headers: Optional[dict] = None,\\n timeout: int = 5,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n urls = url if isinstance(url, list) else [url]\\n with requests.Session() as session:\\n documents = [self.get_document(session, u, headers, timeout) for u in urls]\\n self.repr_value = documents\\n return documents\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"type\":\"dict\",\"list\":false},\"timeout\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":5,\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"The timeout to use for the request.\",\"type\":\"int\",\"list\":false},\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to\",\"type\":\"str\",\"list\":true}},\"description\":\"Make a GET request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"GET Request\",\"custom_fields\":{\"headers\":null,\"timeout\":null,\"url\":null},\"output_types\":[\"GetRequest\"],\"documentation\":\"https://docs.langflow.org/components/utilities#get-request\",\"beta\":true,\"error\":null},\"PostRequest\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\nimport requests\\nfrom typing import Optional\\n\\n\\nclass PostRequest(CustomComponent):\\n display_name: str = \\\"POST Request\\\"\\n description: str = \\\"Make a POST request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#post-request\\\"\\n beta = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def post_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> Document:\\n try:\\n response = session.post(url, headers=headers, data=document.page_content)\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": 500,\\n },\\n )\\n\\n def build(\\n self,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(\\n isinstance(doc, Document) for doc in document\\n ):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [\\n self.post_document(session, doc, url, headers) for doc in documents\\n ]\\n self.repr_value = documents\\n return documents\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"document\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"type\":\"dict\",\"list\":false},\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\",\"type\":\"str\",\"list\":false}},\"description\":\"Make a POST request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"POST Request\",\"custom_fields\":{\"document\":null,\"headers\":null,\"url\":null},\"output_types\":[\"PostRequest\"],\"documentation\":\"https://docs.langflow.org/components/utilities#post-request\",\"beta\":true,\"error\":null},\"UpdateRequest\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import List, Optional\\nimport requests\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass UpdateRequest(CustomComponent):\\n display_name: str = \\\"Update Request\\\"\\n description: str = \\\"Make a PATCH request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#update-request\\\"\\n beta = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"field_type\\\": \\\"NestedDict\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n \\\"method\\\": {\\n \\\"display_name\\\": \\\"Method\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"The HTTP method to use.\\\",\\n \\\"options\\\": [\\\"PATCH\\\", \\\"PUT\\\"],\\n \\\"value\\\": \\\"PATCH\\\",\\n },\\n }\\n\\n def update_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n method: str = \\\"PATCH\\\",\\n ) -> Document:\\n try:\\n if method == \\\"PATCH\\\":\\n response = session.patch(\\n url, headers=headers, data=document.page_content\\n )\\n elif method == \\\"PUT\\\":\\n response = session.put(url, headers=headers, data=document.page_content)\\n else:\\n raise ValueError(f\\\"Unsupported method: {method}\\\")\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n method: str,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> List[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(\\n isinstance(doc, Document) for doc in document\\n ):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [\\n self.update_document(session, doc, url, headers, method)\\n for doc in documents\\n ]\\n self.repr_value = documents\\n return documents\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"document\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"headers\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"type\":\"NestedDict\",\"list\":false},\"method\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"PATCH\",\"password\":false,\"options\":[\"PATCH\",\"PUT\"],\"name\":\"method\",\"display_name\":\"Method\",\"advanced\":false,\"dynamic\":false,\"info\":\"The HTTP method to use.\",\"type\":\"str\",\"list\":true},\"url\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\",\"type\":\"str\",\"list\":false}},\"description\":\"Make a PATCH request to the given URL.\",\"base_classes\":[\"Document\"],\"display_name\":\"Update Request\",\"custom_fields\":{\"document\":null,\"headers\":null,\"method\":null,\"url\":null},\"output_types\":[\"UpdateRequest\"],\"documentation\":\"https://docs.langflow.org/components/utilities#update-request\",\"beta\":true,\"error\":null},\"JSONDocumentBuilder\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"### JSON Document Builder\\n\\n# Build a Document containing a JSON object using a key and another Document page content.\\n\\n# **Params**\\n\\n# - **Key:** The key to use for the JSON object.\\n# - **Document:** The Document page to use for the JSON object.\\n\\n# **Output**\\n\\n# - **Document:** The Document containing the JSON object.\\n\\nfrom langflow import CustomComponent\\nfrom langchain.schema import Document\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass JSONDocumentBuilder(CustomComponent):\\n display_name: str = \\\"JSON Document Builder\\\"\\n description: str = \\\"Build a Document containing a JSON object using a key and another Document page content.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n beta = True\\n documentation: str = (\\n \\\"https://docs.langflow.org/components/utilities#json-document-builder\\\"\\n )\\n\\n field_config = {\\n \\\"key\\\": {\\\"display_name\\\": \\\"Key\\\"},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def build(\\n self,\\n key: str,\\n document: Document,\\n ) -> Document:\\n documents = None\\n if isinstance(document, list):\\n documents = [\\n Document(\\n page_content=orjson_dumps({key: doc.page_content}, indent_2=False)\\n )\\n for doc in document\\n ]\\n elif isinstance(document, Document):\\n documents = Document(\\n page_content=orjson_dumps({key: document.page_content}, indent_2=False)\\n )\\n else:\\n raise TypeError(\\n f\\\"Expected Document or list of Documents, got {type(document)}\\\"\\n )\\n self.repr_value = documents\\n return documents\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"document\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"Document\",\"list\":false},\"key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"key\",\"display_name\":\"Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false}},\"description\":\"Build a Document containing a JSON object using a key and another Document page content.\",\"base_classes\":[\"Document\"],\"display_name\":\"JSON Document Builder\",\"custom_fields\":{\"document\":null,\"key\":null},\"output_types\":[\"JSONDocumentBuilder\"],\"documentation\":\"https://docs.langflow.org/components/utilities#json-document-builder\",\"beta\":true,\"error\":null}},\"output_parsers\":{\"ResponseSchema\":{\"template\":{\"description\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"name\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"type\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"string\",\"password\":false,\"name\":\"type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"ResponseSchema\"},\"description\":\"A schema for a response from a structured output parser.\",\"base_classes\":[\"ResponseSchema\"],\"display_name\":\"ResponseSchema\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"beta\":false,\"error\":null},\"StructuredOutputParser\":{\"template\":{\"response_schemas\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"response_schemas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"ResponseSchema\",\"list\":true},\"_type\":\"StructuredOutputParser\"},\"description\":\"\",\"base_classes\":[\"BaseLLMOutputParser\",\"BaseOutputParser\",\"StructuredOutputParser\"],\"display_name\":\"StructuredOutputParser\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"beta\":false,\"error\":null}},\"retrievers\":{\"MultiQueryRetriever\":{\"template\":{\"llm\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseLLM\",\"list\":false},\"prompt\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":{\"input_variables\":[\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"template\":\"You are an AI language model assistant. Your task is \\n to generate 3 different versions of the given user \\n question to retrieve relevant documents from a vector database. \\n By generating multiple perspectives on the user question, \\n your goal is to help the user overcome some of the limitations \\n of distance-based similarity search. Provide these alternative \\n questions separated by newlines. Original question: {question}\",\"template_format\":\"f-string\",\"validate_template\":true,\"_type\":\"prompt\"},\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"PromptTemplate\",\"list\":false},\"retriever\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"BaseRetriever\",\"list\":false},\"parser_key\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"value\":\"lines\",\"password\":false,\"name\":\"parser_key\",\"display_name\":\"Parser Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"_type\":\"MultiQueryRetriever\"},\"description\":\"Initialize from llm using default template.\",\"base_classes\":[\"MultiQueryRetriever\",\"BaseRetriever\"],\"display_name\":\"MultiQueryRetriever\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever\",\"beta\":false,\"error\":null},\"MetalRetriever\":{\"template\":{\"code\":{\"dynamic\":true,\"required\":true,\"placeholder\":\"\",\"show\":false,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.retrievers import MetalRetriever\\nfrom langchain.schema import BaseRetriever\\nfrom metal_sdk.metal import Metal # type: ignore\\n\\n\\nclass MetalRetrieverComponent(CustomComponent):\\n display_name: str = \\\"Metal Retriever\\\"\\n description: str = \\\"Retriever that uses the Metal API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"password\\\": True},\\n \\\"client_id\\\": {\\\"display_name\\\": \\\"Client ID\\\", \\\"password\\\": True},\\n \\\"index_id\\\": {\\\"display_name\\\": \\\"Index ID\\\"},\\n \\\"params\\\": {\\\"display_name\\\": \\\"Parameters\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self, api_key: str, client_id: str, index_id: str, params: Optional[dict] = None\\n ) -> BaseRetriever:\\n try:\\n metal = Metal(api_key=api_key, client_id=client_id, index_id=index_id)\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Metal API.\\\") from e\\n return MetalRetriever(client=metal, params=params or {})\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\",\"api_key\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"client_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":true,\"name\":\"client_id\",\"display_name\":\"Client ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"index_id\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"index_id\",\"display_name\":\"Index ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"str\",\"list\":false},\"params\":{\"required\":false,\"placeholder\":\"\",\"show\":true,\"multiline\":false,\"password\":false,\"name\":\"params\",\"display_name\":\"Parameters\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"type\":\"dict\",\"list\":false}},\"description\":\"Retriever that uses the Metal API.\",\"base_classes\":[\"BaseRetriever\"],\"display_name\":\"Metal Retriever\",\"custom_fields\":{\"api_key\":null,\"client_id\":null,\"index_id\":null,\"params\":null},\"output_types\":[\"MetalRetriever\"],\"documentation\":\"\",\"beta\":true,\"error\":null}},\"custom_components\":{\"CustomComponent\":{\"template\":{\"code\":{\"required\":true,\"placeholder\":\"\",\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\nfrom langflow.field_typing import (\\n Tool,\\n PromptTemplate,\\n Chain,\\n BaseChatMemory,\\n BaseLLM,\\n BaseLoader,\\n BaseMemory,\\n BaseOutputParser,\\n BaseRetriever,\\n VectorStore,\\n Embeddings,\\n TextSplitter,\\n Document,\\n AgentExecutor,\\n NestedDict,\\n Data,\\n)\\n\\n\\nclass Component(CustomComponent):\\n display_name: str = \\\"Custom Component\\\"\\n description: str = \\\"Create any custom component you want!\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Data) -> Data:\\n return param\\n\\n\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"type\":\"code\",\"list\":false},\"_type\":\"CustomComponent\"},\"description\":null,\"base_classes\":[],\"display_name\":\"Custom Component\",\"custom_fields\":{},\"output_types\":[],\"documentation\":\"\",\"beta\":true,\"error\":null}}}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.031 } + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.944 } + }, + { + "startedDateTime": "2024-02-28T14:32:30.976Z", + "time": 0.697, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/version", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 }, - { - "startedDateTime": "2023-08-31T14:55:36.131Z", - "time": 0.743, - "request": { - "method": "GET", - "url": "http://localhost:3000/api/v1/flows/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json, text/plain, */*" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, - { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Cookie", "value": "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJiNWIxYjFhZC05M2VjLTRjMjgtYWMxNy01OGMxNDQ0MWI1ZGQiLCJleHAiOjE3MjUwMjk3MzV9.8qhEtryWqA9RbwEP2s20umKdVE7J7jHGoogXZqxLNWk; refresh_token=auto" }, - { "name": "Host", "value": "localhost:3000" }, - { "name": "Referer", "value": "http://localhost:3000/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-origin" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" }, - { "name": "sec-ch-ua", "value": "\"Not)A;Brand\";v=\"24\", \"Chromium\";v=\"116\"" }, - { "name": "sec-ch-ua-mobile", "value": "?0" }, - { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "19" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"version\":\"0.6.7\"}" }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "*" }, - { "name": "connection", "value": "close" }, - { "name": "content-length", "value": "2" }, - { "name": "content-type", "value": "application/json" }, - { "name": "date", "value": "Thu, 31 Aug 2023 14:55:35 GMT" }, - { "name": "server", "value": "uvicorn" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.697 } + }, + { + "startedDateTime": "2024-02-28T14:32:30.976Z", + "time": 2.771, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/all", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "633593" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"chains\":{\"ConversationalRetrievalChain\":{\"template\":{\"callbacks\":{\"type\":\"Callbacks\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"condense_question_llm\":{\"type\":\"BaseLanguageModel\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"condense_question_llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"condense_question_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":{\"name\":null,\"input_variables\":[\"chat_history\",\"question\"],\"input_types\":{},\"output_parser\":null,\"partial_variables\":{},\"metadata\":null,\"tags\":null,\"template\":\"Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.\\n\\nChat History:\\n{chat_history}\\nFollow Up Input: {question}\\nStandalone question:\",\"template_format\":\"f-string\",\"validate_template\":false},\"fileTypes\":[],\"password\":false,\"name\":\"condense_question_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"chain_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"combine_docs_chain_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"combine_docs_chain_kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"return_source_documents\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_source_documents\",\"display_name\":\"Return source documents\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"password\":false,\"name\":\"verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationalRetrievalChain\"},\"description\":\"Convenience method to load chain from LLM and retriever.\",\"base_classes\":[\"BaseConversationalRetrievalChain\",\"Runnable\",\"Chain\",\"Generic\",\"Text\",\"RunnableSerializable\",\"Serializable\",\"object\",\"ConversationalRetrievalChain\",\"Callable\"],\"display_name\":\"ConversationalRetrievalChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/popular/chat_vector_db\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"LLMCheckerChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain.chains import LLMCheckerChain\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, Chain\\n\\n\\nclass LLMCheckerChainComponent(CustomComponent):\\n display_name = \\\"LLMCheckerChain\\\"\\n description = \\\"\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/chains/additional/llm_checker\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n ) -> Union[Chain, Callable]:\\n return LLMCheckerChain.from_llm(llm=llm)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"LLMCheckerChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_checker\",\"custom_fields\":{\"llm\":null},\"output_types\":[\"Chain\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"LLMMathChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm_chain\":{\"type\":\"LLMChain\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm_chain\",\"display_name\":\"LLM Chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import LLMChain, LLMMathChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, BaseMemory, Chain\\n\\n\\nclass LLMMathChainComponent(CustomComponent):\\n display_name = \\\"LLMMathChain\\\"\\n description = \\\"Chain that interprets a prompt and executes python code to do math.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/chains/additional/llm_math\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"llm_chain\\\": {\\\"display_name\\\": \\\"LLM Chain\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"input_key\\\": {\\\"display_name\\\": \\\"Input Key\\\"},\\n \\\"output_key\\\": {\\\"display_name\\\": \\\"Output Key\\\"},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n llm_chain: LLMChain,\\n input_key: str = \\\"question\\\",\\n output_key: str = \\\"answer\\\",\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[LLMMathChain, Callable, Chain]:\\n return LLMMathChain(llm=llm, llm_chain=llm_chain, input_key=input_key, output_key=output_key, memory=memory)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"input_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"question\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"display_name\":\"Input Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"answer\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"display_name\":\"Output Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Chain that interprets a prompt and executes python code to do math.\",\"base_classes\":[\"LLMMathChain\",\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"LLMMathChain\",\"documentation\":\"https://python.langchain.com/docs/modules/chains/additional/llm_math\",\"custom_fields\":{\"llm\":null,\"llm_chain\":null,\"input_key\":null,\"output_key\":null,\"memory\":null},\"output_types\":[\"LLMMathChain\",\"Callable\",\"Chain\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"RetrievalQA\":{\"template\":{\"combine_documents_chain\":{\"type\":\"BaseCombineDocumentsChain\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"combine_documents_chain\",\"display_name\":\"Combine Documents Chain\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"retriever\",\"display_name\":\"Retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains.combine_documents.base import BaseCombineDocumentsChain\\nfrom langchain.chains.retrieval_qa.base import BaseRetrievalQA, RetrievalQA\\nfrom langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseMemory, BaseRetriever, Text\\n\\n\\nclass RetrievalQAComponent(CustomComponent):\\n display_name = \\\"Retrieval QA\\\"\\n description = \\\"Chain for question-answering against an index.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"combine_documents_chain\\\": {\\\"display_name\\\": \\\"Combine Documents Chain\\\"},\\n \\\"retriever\\\": {\\\"display_name\\\": \\\"Retriever\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\", \\\"required\\\": False},\\n \\\"input_key\\\": {\\\"display_name\\\": \\\"Input Key\\\", \\\"advanced\\\": True},\\n \\\"output_key\\\": {\\\"display_name\\\": \\\"Output Key\\\", \\\"advanced\\\": True},\\n \\\"return_source_documents\\\": {\\\"display_name\\\": \\\"Return Source Documents\\\"},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\", \\\"input_types\\\": [\\\"Text\\\", \\\"Document\\\"]},\\n }\\n\\n def build(\\n self,\\n combine_documents_chain: BaseCombineDocumentsChain,\\n retriever: BaseRetriever,\\n inputs: str = \\\"\\\",\\n memory: Optional[BaseMemory] = None,\\n input_key: str = \\\"query\\\",\\n output_key: str = \\\"result\\\",\\n return_source_documents: bool = True,\\n ) -> Union[BaseRetrievalQA, Callable, Text]:\\n runnable = RetrievalQA(\\n combine_documents_chain=combine_documents_chain,\\n retriever=retriever,\\n memory=memory,\\n input_key=input_key,\\n output_key=output_key,\\n return_source_documents=return_source_documents,\\n )\\n if isinstance(inputs, Document):\\n inputs = inputs.page_content\\n self.status = runnable\\n result = runnable.invoke({input_key: inputs})\\n result = result.content if hasattr(result, \\\"content\\\") else result\\n # Result is a dict with keys \\\"query\\\", \\\"result\\\" and \\\"source_documents\\\"\\n # for now we just return the result\\n records = self.to_records(result.get(\\\"source_documents\\\"))\\n references_str = \\\"\\\"\\n if return_source_documents:\\n references_str = self.create_references_from_records(records)\\n result_str = result.get(\\\"result\\\")\\n final_result = \\\"\\\\n\\\".join([result_str, references_str])\\n self.status = final_result\\n return final_result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"input_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"query\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"display_name\":\"Input Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"input_types\":[\"Text\",\"Document\",\"Text\"],\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"output_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"result\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"display_name\":\"Output Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_source_documents\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_source_documents\",\"display_name\":\"Return Source Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Chain for question-answering against an index.\",\"base_classes\":[\"Runnable\",\"Chain\",\"BaseRetrievalQA\",\"Generic\",\"Text\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"Retrieval QA\",\"documentation\":\"\",\"custom_fields\":{\"combine_documents_chain\":null,\"retriever\":null,\"inputs\":null,\"memory\":null,\"input_key\":null,\"output_key\":null,\"return_source_documents\":null},\"output_types\":[\"BaseRetrievalQA\",\"Callable\",\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"RetrievalQAWithSourcesChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"retriever\",\"display_name\":\"Retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"chain_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"display_name\":\"Chain Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"The type of chain to use to combined Documents.\",\"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.chains import RetrievalQAWithSourcesChain\\nfrom langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, BaseMemory, BaseRetriever, Text\\n\\n\\nclass RetrievalQAWithSourcesChainComponent(CustomComponent):\\n display_name = \\\"RetrievalQAWithSourcesChain\\\"\\n description = \\\"Question-answering with sources over an index.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"chain_type\\\": {\\n \\\"display_name\\\": \\\"Chain Type\\\",\\n \\\"options\\\": [\\\"stuff\\\", \\\"map_reduce\\\", \\\"map_rerank\\\", \\\"refine\\\"],\\n \\\"info\\\": \\\"The type of chain to use to combined Documents.\\\",\\n },\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"return_source_documents\\\": {\\\"display_name\\\": \\\"Return Source Documents\\\"},\\n \\\"retriever\\\": {\\\"display_name\\\": \\\"Retriever\\\"},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n retriever: BaseRetriever,\\n llm: BaseLanguageModel,\\n chain_type: str,\\n memory: Optional[BaseMemory] = None,\\n return_source_documents: Optional[bool] = True,\\n ) -> Text:\\n runnable = RetrievalQAWithSourcesChain.from_chain_type(\\n llm=llm,\\n chain_type=chain_type,\\n memory=memory,\\n return_source_documents=return_source_documents,\\n retriever=retriever,\\n )\\n if isinstance(inputs, Document):\\n inputs = inputs.page_content\\n self.status = runnable\\n input_key = runnable.input_keys[0]\\n result = runnable.invoke({input_key: inputs})\\n result = result.content if hasattr(result, \\\"content\\\") else result\\n # Result is a dict with keys \\\"query\\\", \\\"result\\\" and \\\"source_documents\\\"\\n # for now we just return the result\\n records = self.to_records(result.get(\\\"source_documents\\\"))\\n references_str = \\\"\\\"\\n if return_source_documents:\\n references_str = self.create_references_from_records(records)\\n result_str = result.get(\\\"answer\\\")\\n final_result = \\\"\\\\n\\\".join([result_str, references_str])\\n self.status = final_result\\n return final_result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_source_documents\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_source_documents\",\"display_name\":\"Return Source Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Question-answering with sources over an index.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"RetrievalQAWithSourcesChain\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"retriever\":null,\"llm\":null,\"chain_type\":null,\"memory\":null,\"return_source_documents\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SQLDatabaseChain\":{\"template\":{\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"SQLDatabaseChain\"},\"description\":\"Create a SQLDatabaseChain from an LLM and a database connection.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"Text\",\"RunnableSerializable\",\"Serializable\",\"object\",\"SQLDatabaseChain\",\"Callable\"],\"display_name\":\"SQLDatabaseChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"CombineDocsChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"chain_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"stuff\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"stuff\",\"map_reduce\",\"map_rerank\",\"refine\"],\"name\":\"chain_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"load_qa_chain\"},\"description\":\"Load question answering chain.\",\"base_classes\":[\"function\",\"BaseCombineDocumentsChain\"],\"display_name\":\"CombineDocsChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"SeriesCharacterChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"character\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"character\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"series\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"series\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"SeriesCharacterChain\"},\"description\":\"SeriesCharacterChain is a chain you can use to have a conversation with a character from a series.\",\"base_classes\":[\"Chain\",\"BaseCustomChain\",\"ConversationChain\",\"function\",\"SeriesCharacterChain\",\"LLMChain\"],\"display_name\":\"SeriesCharacterChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"MidJourneyPromptChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"MidJourneyPromptChain\"},\"description\":\"MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts.\",\"base_classes\":[\"Chain\",\"BaseCustomChain\",\"MidJourneyPromptChain\",\"ConversationChain\",\"LLMChain\"],\"display_name\":\"MidJourneyPromptChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"TimeTravelGuideChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"TimeTravelGuideChain\"},\"description\":\"Time travel guide chain.\",\"base_classes\":[\"Chain\",\"BaseCustomChain\",\"ConversationChain\",\"TimeTravelGuideChain\",\"LLMChain\"],\"display_name\":\"TimeTravelGuideChain\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false,\"output_type\":\"Chain\"},\"LLMChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.chains import LLMChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n BaseMemory,\\n BasePromptTemplate,\\n Text,\\n)\\n\\n\\nclass LLMChainComponent(CustomComponent):\\n display_name = \\\"LLMChain\\\"\\n description = \\\"Chain to run queries against LLMs\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n prompt: BasePromptTemplate,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Text:\\n runnable = LLMChain(prompt=prompt, llm=llm, memory=memory)\\n result_dict = runnable.invoke({})\\n output_key = runnable.output_key\\n result = result_dict[output_key]\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Chain to run queries against LLMs\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"LLMChain\",\"documentation\":\"\",\"custom_fields\":{\"prompt\":null,\"llm\":null,\"memory\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SQLGenerator\":{\"template\":{\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"display_name\":\"Database\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"Text\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"The prompt must contain `{question}`.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.chains import create_sql_query_chain\\nfrom langchain_community.utilities.sql_database import SQLDatabase\\nfrom langchain_core.prompts import PromptTemplate\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, Text\\n\\n\\nclass SQLGeneratorComponent(CustomComponent):\\n display_name = \\\"Natural Language to SQL\\\"\\n description = \\\"Generate SQL from natural language.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"db\\\": {\\\"display_name\\\": \\\"Database\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt\\\",\\n \\\"info\\\": \\\"The prompt must contain `{question}`.\\\",\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"info\\\": \\\"The number of results per select statement to return. If 0, no limit.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n inputs: Text,\\n db: SQLDatabase,\\n llm: BaseLanguageModel,\\n top_k: int = 5,\\n prompt: Optional[PromptTemplate] = None,\\n ) -> Text:\\n if top_k > 0:\\n kwargs = {\\n \\\"k\\\": top_k,\\n }\\n if not prompt:\\n sql_query_chain = create_sql_query_chain(llm=llm, db=db, **kwargs)\\n else:\\n template = prompt.template if hasattr(prompt, \\\"template\\\") else prompt\\n # Check if {question} is in the prompt\\n if \\\"{question}\\\" not in template or \\\"question\\\" not in template.input_variables:\\n raise ValueError(\\\"Prompt must contain `{question}` to be used with Natural Language to SQL.\\\")\\n sql_query_chain = create_sql_query_chain(llm=llm, db=db, prompt=prompt, **kwargs)\\n query_writer = sql_query_chain | {\\\"query\\\": lambda x: x.replace(\\\"SQLQuery:\\\", \\\"\\\").strip()}\\n response = query_writer.invoke({\\\"question\\\": inputs})\\n query = response.get(\\\"query\\\")\\n self.status = query\\n return query\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":false,\"dynamic\":false,\"info\":\"The number of results per select statement to return. If 0, no limit.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate SQL from natural language.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Natural Language to SQL\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"db\":null,\"llm\":null,\"top_k\":null,\"prompt\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ConversationChain\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"Memory to load context from. If none is provided, a ConversationBufferMemory will be used.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.chains import ConversationChain\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, BaseMemory, Chain, Text\\n\\n\\nclass ConversationChainComponent(CustomComponent):\\n display_name = \\\"ConversationChain\\\"\\n description = \\\"Chain to have a conversation and load context from memory.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\\"display_name\\\": \\\"Prompt\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"memory\\\": {\\n \\\"display_name\\\": \\\"Memory\\\",\\n \\\"info\\\": \\\"Memory to load context from. If none is provided, a ConversationBufferMemory will be used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n llm: BaseLanguageModel,\\n memory: Optional[BaseMemory] = None,\\n ) -> Union[Chain, Callable, Text]:\\n if memory is None:\\n chain = ConversationChain(llm=llm)\\n else:\\n chain = ConversationChain(llm=llm, memory=memory)\\n result = chain.invoke(inputs)\\n # result is an AIMessage which is a subclass of BaseMessage\\n # We need to check if it is a string or a BaseMessage\\n if hasattr(result, \\\"content\\\") and isinstance(result.content, str):\\n self.status = \\\"is message\\\"\\n result = result.content\\n elif isinstance(result, str):\\n self.status = \\\"is_string\\\"\\n result = result\\n else:\\n # is dict\\n result = result.get(\\\"response\\\")\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Chain to have a conversation and load context from memory.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"Text\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"ConversationChain\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"llm\":null,\"memory\":null},\"output_types\":[\"Chain\",\"Callable\",\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"agents\":{\"ZeroShotAgent\":{\"template\":{\"callback_manager\":{\"type\":\"BaseCallbackManager\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"callback_manager\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"output_parser\":{\"type\":\"AgentOutputParser\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"output_parser\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tools\":{\"type\":\"BaseTool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"format_instructions\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":true,\"value\":\"Use the following format:\\n\\nQuestion: the input question you must answer\\nThought: you should always think about what to do\\nAction: the action to take, should be one of [{tool_names}]\\nAction Input: the input to the action\\nObservation: the result of the action\\n... (this Thought/Action/Action Input/Observation can repeat N times)\\nThought: I now know the final answer\\nFinal Answer: the final answer to the original input question\",\"fileTypes\":[],\"password\":false,\"name\":\"format_instructions\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_variables\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"input_variables\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"Answer the following questions as best you can. You have access to the following tools:\",\"fileTypes\":[],\"password\":false,\"name\":\"prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"Begin!\\n\\nQuestion: {input}\\nThought:{agent_scratchpad}\",\"fileTypes\":[],\"password\":false,\"name\":\"suffix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"ZeroShotAgent\"},\"description\":\"Construct an agent from an LLM and tools.\",\"base_classes\":[\"ZeroShotAgent\",\"Callable\",\"BaseSingleActionAgent\",\"Agent\"],\"display_name\":\"ZeroShotAgent\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"JsonAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"toolkit\":{\"type\":\"JsonToolkit\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"toolkit\",\"display_name\":\"Toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.agents import AgentExecutor, create_json_agent\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n)\\nfrom langchain_community.agent_toolkits.json.toolkit import JsonToolkit\\n\\n\\nclass JsonAgentComponent(CustomComponent):\\n display_name = \\\"JsonAgent\\\"\\n description = \\\"Construct a json agent from an LLM and tools.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"toolkit\\\": {\\\"display_name\\\": \\\"Toolkit\\\"},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n toolkit: JsonToolkit,\\n ) -> AgentExecutor:\\n return create_json_agent(llm=llm, toolkit=toolkit)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct a json agent from an LLM and tools.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\"],\"display_name\":\"JsonAgent\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"toolkit\":null},\"output_types\":[\"AgentExecutor\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"CSVAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, AgentExecutor\\nfrom langchain_experimental.agents.agent_toolkits.csv.base import create_csv_agent\\n\\n\\nclass CSVAgentComponent(CustomComponent):\\n display_name = \\\"CSVAgent\\\"\\n description = \\\"Construct a CSV agent from a CSV and tools.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/agents/toolkits/csv\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\", \\\"type\\\": BaseLanguageModel},\\n \\\"path\\\": {\\\"display_name\\\": \\\"Path\\\", \\\"field_type\\\": \\\"file\\\", \\\"suffixes\\\": [\\\".csv\\\"], \\\"file_types\\\": [\\\".csv\\\"]},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n path: str,\\n ) -> AgentExecutor:\\n # Instantiate and return the CSV agent class with the provided llm and path\\n return create_csv_agent(llm=llm, path=path)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct a CSV agent from a CSV and tools.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\"],\"display_name\":\"CSVAgent\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/toolkits/csv\",\"custom_fields\":{\"llm\":null,\"path\":null},\"output_types\":[\"AgentExecutor\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectorStoreAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vector_store_toolkit\":{\"type\":\"VectorStoreToolkit\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vector_store_toolkit\",\"display_name\":\"Vector Store Info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.agents import AgentExecutor, create_vectorstore_agent\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit\\nfrom typing import Union, Callable\\nfrom langflow.field_typing import BaseLanguageModel\\n\\n\\nclass VectorStoreAgentComponent(CustomComponent):\\n display_name = \\\"VectorStoreAgent\\\"\\n description = \\\"Construct an agent from a Vector Store.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"vector_store_toolkit\\\": {\\\"display_name\\\": \\\"Vector Store Info\\\"},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n vector_store_toolkit: VectorStoreToolkit,\\n ) -> Union[AgentExecutor, Callable]:\\n return create_vectorstore_agent(llm=llm, toolkit=vector_store_toolkit)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct an agent from a Vector Store.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\",\"Callable\"],\"display_name\":\"VectorStoreAgent\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"vector_store_toolkit\":null},\"output_types\":[\"AgentExecutor\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectorStoreRouterAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vectorstoreroutertoolkit\":{\"type\":\"VectorStoreRouterToolkit\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstoreroutertoolkit\",\"display_name\":\"Vector Store Router Toolkit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain_core.language_models.base import BaseLanguageModel\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreRouterToolkit\\nfrom langchain.agents import create_vectorstore_router_agent\\nfrom typing import Callable\\n\\n\\nclass VectorStoreRouterAgentComponent(CustomComponent):\\n display_name = \\\"VectorStoreRouterAgent\\\"\\n description = \\\"Construct an agent from a Vector Store Router.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"vectorstoreroutertoolkit\\\": {\\\"display_name\\\": \\\"Vector Store Router Toolkit\\\"},\\n }\\n\\n def build(self, llm: BaseLanguageModel, vectorstoreroutertoolkit: VectorStoreRouterToolkit) -> Callable:\\n return create_vectorstore_router_agent(llm=llm, toolkit=vectorstoreroutertoolkit)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct an agent from a Vector Store Router.\",\"base_classes\":[\"Callable\"],\"display_name\":\"VectorStoreRouterAgent\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"vectorstoreroutertoolkit\":null},\"output_types\":[\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SQLAgent\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Union, Callable\\nfrom langchain.agents import AgentExecutor\\nfrom langflow.field_typing import BaseLanguageModel\\nfrom langchain_community.agent_toolkits.sql.base import create_sql_agent\\nfrom langchain.sql_database import SQLDatabase\\nfrom langchain_community.agent_toolkits import SQLDatabaseToolkit\\n\\n\\nclass SQLAgentComponent(CustomComponent):\\n display_name = \\\"SQLAgent\\\"\\n description = \\\"Construct an SQL agent from an LLM and tools.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"database_uri\\\": {\\\"display_name\\\": \\\"Database URI\\\"},\\n \\\"verbose\\\": {\\\"display_name\\\": \\\"Verbose\\\", \\\"value\\\": False, \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n llm: BaseLanguageModel,\\n database_uri: str,\\n verbose: bool = False,\\n ) -> Union[AgentExecutor, Callable]:\\n db = SQLDatabase.from_uri(database_uri)\\n toolkit = SQLDatabaseToolkit(db=db, llm=llm)\\n return create_sql_agent(llm=llm, toolkit=toolkit)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"database_uri\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"database_uri\",\"display_name\":\"Database URI\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"verbose\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct an SQL agent from an LLM and tools.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\",\"Callable\"],\"display_name\":\"SQLAgent\",\"documentation\":\"\",\"custom_fields\":{\"llm\":null,\"database_uri\":null,\"verbose\":null},\"output_types\":[\"AgentExecutor\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OpenAIConversationalAgent\":{\"template\":{\"memory\":{\"type\":\"BaseMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"system_message\":{\"type\":\"SystemMessagePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"system_message\",\"display_name\":\"System Message\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tools\":{\"type\":\"Tool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langchain.agents.agent import AgentExecutor\\nfrom langchain.agents.agent_toolkits.conversational_retrieval.openai_functions import _get_default_system_message\\nfrom langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent\\nfrom langchain.memory.token_buffer import ConversationTokenBufferMemory\\nfrom langchain.prompts import SystemMessagePromptTemplate\\nfrom langchain.prompts.chat import MessagesPlaceholder\\nfrom langchain.schema.memory import BaseMemory\\nfrom langchain.tools import Tool\\nfrom langchain_community.chat_models import ChatOpenAI\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing.range_spec import RangeSpec\\n\\n\\nclass ConversationalAgent(CustomComponent):\\n display_name: str = \\\"OpenAI Conversational Agent\\\"\\n description: str = \\\"Conversational Agent that can use OpenAI's function calling API\\\"\\n\\n def build_config(self):\\n openai_function_models = [\\n \\\"gpt-4-turbo-preview\\\",\\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 return {\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"system_message\\\": {\\\"display_name\\\": \\\"System Message\\\"},\\n \\\"max_token_limit\\\": {\\\"display_name\\\": \\\"Max Token Limit\\\"},\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": openai_function_models,\\n \\\"value\\\": openai_function_models[0],\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"value\\\": 0.2,\\n \\\"range_spec\\\": RangeSpec(min=0, max=2, step=0.1),\\n },\\n }\\n\\n def build(\\n self,\\n model_name: str,\\n openai_api_key: str,\\n tools: List[Tool],\\n openai_api_base: Optional[str] = None,\\n memory: Optional[BaseMemory] = None,\\n system_message: Optional[SystemMessagePromptTemplate] = None,\\n max_token_limit: int = 2000,\\n temperature: float = 0.9,\\n ) -> AgentExecutor:\\n llm = ChatOpenAI(\\n model=model_name,\\n api_key=openai_api_key,\\n base_url=openai_api_base,\\n max_tokens=max_token_limit,\\n temperature=temperature,\\n )\\n if not memory:\\n memory_key = \\\"chat_history\\\"\\n memory = ConversationTokenBufferMemory(\\n memory_key=memory_key,\\n return_messages=True,\\n output_key=\\\"output\\\",\\n llm=llm,\\n max_token_limit=max_token_limit,\\n )\\n else:\\n memory_key = memory.memory_key # type: ignore\\n\\n _system_message = system_message or _get_default_system_message()\\n prompt = OpenAIFunctionsAgent.create_prompt(\\n system_message=_system_message, # type: ignore\\n extra_prompt_messages=[MessagesPlaceholder(variable_name=memory_key)],\\n )\\n agent = OpenAIFunctionsAgent(\\n llm=llm,\\n tools=tools,\\n prompt=prompt, # type: ignore\\n )\\n return AgentExecutor(\\n agent=agent,\\n tools=tools, # type: ignore\\n memory=memory,\\n verbose=True,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"max_token_limit\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":2000,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_token_limit\",\"display_name\":\"Max Token Limit\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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-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\":\"\",\"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\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"openai_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"openai_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.2,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":0.0,\"max\":2.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Conversational Agent that can use OpenAI's function calling API\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\"],\"display_name\":\"OpenAI Conversational Agent\",\"documentation\":\"\",\"custom_fields\":{\"model_name\":null,\"openai_api_key\":null,\"tools\":null,\"openai_api_base\":null,\"memory\":null,\"system_message\":null,\"max_token_limit\":null,\"temperature\":null},\"output_types\":[\"AgentExecutor\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AgentInitializer\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"Language Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory\":{\"type\":\"BaseChatMemory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"memory\",\"display_name\":\"Memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tools\":{\"type\":\"Tool\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tools\",\"display_name\":\"Tools\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"agent\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"zero-shot-react-description\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"zero-shot-react-description\",\"react-docstore\",\"self-ask-with-search\",\"conversational-react-description\",\"chat-zero-shot-react-description\",\"chat-conversational-react-description\",\"structured-chat-zero-shot-react-description\",\"openai-functions\",\"openai-multi-functions\",\"JsonAgent\",\"CSVAgent\",\"VectorStoreAgent\",\"VectorStoreRouterAgent\",\"SQLAgent\"],\"name\":\"agent\",\"display_name\":\"Agent Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, List, Optional, Union\\n\\nfrom langchain.agents import AgentExecutor, AgentType, initialize_agent, types\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseChatMemory, BaseLanguageModel, Tool\\n\\n\\nclass AgentInitializerComponent(CustomComponent):\\n display_name: str = \\\"Agent Initializer\\\"\\n description: str = \\\"Initialize a Langchain Agent.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/modules/agents/agent_types/\\\"\\n\\n def build_config(self):\\n agents = list(types.AGENT_TO_CLASS.keys())\\n # field_type and required are optional\\n return {\\n \\\"agent\\\": {\\\"options\\\": agents, \\\"value\\\": agents[0], \\\"display_name\\\": \\\"Agent Type\\\"},\\n \\\"max_iterations\\\": {\\\"display_name\\\": \\\"Max Iterations\\\", \\\"value\\\": 10},\\n \\\"memory\\\": {\\\"display_name\\\": \\\"Memory\\\"},\\n \\\"tools\\\": {\\\"display_name\\\": \\\"Tools\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"Language Model\\\"},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n agent: str,\\n llm: BaseLanguageModel,\\n tools: List[Tool],\\n max_iterations: int,\\n memory: Optional[BaseChatMemory] = None,\\n ) -> Union[AgentExecutor, Callable]:\\n agent = AgentType(agent)\\n if memory:\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n memory=memory,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n return initialize_agent(\\n tools=tools,\\n llm=llm,\\n agent=agent,\\n return_intermediate_steps=True,\\n handle_parsing_errors=True,\\n max_iterations=max_iterations,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"max_iterations\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_iterations\",\"display_name\":\"Max Iterations\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Initialize a Langchain Agent.\",\"base_classes\":[\"Runnable\",\"Chain\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"AgentExecutor\",\"object\",\"Callable\"],\"display_name\":\"Agent Initializer\",\"documentation\":\"https://python.langchain.com/docs/modules/agents/agent_types/\",\"custom_fields\":{\"agent\":null,\"llm\":null,\"tools\":null,\"max_iterations\":null,\"memory\":null},\"output_types\":[\"AgentExecutor\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"memories\":{\"ConversationBufferMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationBufferMemory\"},\"description\":\"Buffer for storing conversation memory.\",\"base_classes\":[\"BaseMemory\",\"BaseChatMemory\",\"ConversationBufferMemory\",\"Serializable\"],\"display_name\":\"ConversationBufferMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"ConversationBufferWindowMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationBufferWindowMemory\"},\"description\":\"Buffer for storing conversation memory inside a limited size window.\",\"base_classes\":[\"ConversationBufferWindowMemory\",\"BaseMemory\",\"BaseChatMemory\",\"Serializable\"],\"display_name\":\"ConversationBufferWindowMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/buffer_window\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"ConversationEntityMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"entity_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"entity_store\":{\"type\":\"BaseEntityStore\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_store\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"entity_summarization_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_summarization_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"chat_history_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"history\",\"fileTypes\":[],\"password\":false,\"name\":\"chat_history_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"entity_cache\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationEntityMemory\"},\"description\":\"Entity extractor & summarizer memory.\",\"base_classes\":[\"ConversationEntityMemory\",\"BaseMemory\",\"BaseChatMemory\",\"Serializable\"],\"display_name\":\"ConversationEntityMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/entity_memory_with_sqlite\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"ConversationKGMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"entity_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"entity_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"kg\":{\"type\":\"NetworkxEntityGraph\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"kg\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"knowledge_extraction_prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"knowledge_extraction_prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"summary_message_cls\":{\"type\":\"Type[langchain_core.messages.base.BaseMessage]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"password\":false,\"name\":\"k\",\"display_name\":\"Memory Size\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationKGMemory\"},\"description\":\"Knowledge graph conversation memory.\",\"base_classes\":[\"BaseChatMemory\",\"BaseMemory\",\"ConversationKGMemory\",\"Serializable\"],\"display_name\":\"ConversationKGMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/kg\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"ConversationSummaryMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prompt\":{\"type\":\"BasePromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"summary_message_cls\":{\"type\":\"Type[langchain_core.messages.base.BaseMessage]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"summary_message_cls\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"ai_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"AI\",\"fileTypes\":[],\"password\":false,\"name\":\"ai_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"buffer\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"password\":false,\"name\":\"buffer\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"human_prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"Human\",\"fileTypes\":[],\"password\":false,\"name\":\"human_prefix\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"ConversationSummaryMemory\"},\"description\":\"Conversation summarizer to chat memory.\",\"base_classes\":[\"BaseChatMemory\",\"Serializable\",\"ConversationSummaryMemory\",\"BaseMemory\",\"SummarizerMixin\"],\"display_name\":\"ConversationSummaryMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/summary\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"MongoDBChatMessageHistory\":{\"template\":{\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"connection_string\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"MongoDB connection string (e.g mongodb://mongo_user:password123@mongo:27017)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"database_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"database_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"MongoDBChatMessageHistory\"},\"description\":\"Memory store with MongoDB\",\"base_classes\":[\"BaseChatMessageHistory\",\"MongoDBChatMessageHistory\"],\"display_name\":\"MongoDBChatMessageHistory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"MotorheadMemory\":{\"template\":{\"chat_memory\":{\"type\":\"BaseChatMessageHistory\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"chat_memory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"client_id\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"client_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"context\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"context\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Output (e.g. answer in a ConversationalRetrievalChain)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"timeout\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"https://api.getmetal.io/v1/motorhead\",\"fileTypes\":[],\"password\":false,\"name\":\"url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"MotorheadMemory\"},\"description\":\"Chat message memory backed by Motorhead service.\",\"base_classes\":[\"MotorheadMemory\",\"BaseChatMemory\",\"BaseMemory\",\"Serializable\"],\"display_name\":\"MotorheadMemory\",\"documentation\":\"https://python.langchain.com/docs/integrations/memory/motorhead_memory\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"PostgresChatMessageHistory\":{\"template\":{\"connection_string\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"postgresql://postgres:mypassword@localhost/chat_history\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"connection_string\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"session_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"session_id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"table_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"message_store\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"table_name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"PostgresChatMessageHistory\"},\"description\":\"Memory store with Postgres\",\"base_classes\":[\"BaseChatMessageHistory\",\"PostgresChatMessageHistory\"],\"display_name\":\"PostgresChatMessageHistory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/integrations/postgres_chat_message_history\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false},\"VectorStoreRetrieverMemory\":{\"template\":{\"retriever\":{\"type\":\"VectorStoreRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"exclude_input_keys\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"exclude_input_keys\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"input_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The variable to be used as Chat Input when more than one variable is available.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"memory_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat_history\",\"fileTypes\":[],\"password\":false,\"name\":\"memory_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_docs\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"return_docs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"return_messages\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"VectorStoreRetrieverMemory\"},\"description\":\"VectorStoreRetriever-backed memory.\",\"base_classes\":[\"BaseMemory\",\"VectorStoreRetrieverMemory\",\"Serializable\"],\"display_name\":\"VectorStoreRetrieverMemory\",\"documentation\":\"https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":true,\"beta\":false}},\"tools\":{\"Calculator\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"Calculator\"},\"description\":\"Useful for when you need to answer questions about math.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"Calculator\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"Search\":{\"template\":{\"aiosession\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"serpapi_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"serpapi_api_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"Search\"},\"description\":\"A search engine. Useful for when you need to answer questions about current events. Input should be a search query.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"Search\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"Tool\":{\"template\":{\"func\":{\"type\":\"Callable\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"func\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_direct\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"Tool\"},\"description\":\"Converts a chain, agent or function into a tool.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"Tool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"PythonFunctionTool\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"return_direct\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"return_direct\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"PythonFunctionTool\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"BaseTool\",\"Tool\"],\"display_name\":\"PythonFunctionTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"PythonFunction\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"\\ndef python_function(text: str) -> str:\\n \\\"\\\"\\\"This is a default python function that returns the input text\\\"\\\"\\\"\\n return text\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"PythonFunction\"},\"description\":\"Python function to be executed.\",\"base_classes\":[\"Callable\"],\"display_name\":\"PythonFunction\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"JsonSpec\":{\"template\":{\"path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\",\".yaml\",\".yml\"],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"max_value_length\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_value_length\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"JsonSpec\"},\"description\":\"\",\"base_classes\":[\"JsonSpec\",\"BaseTool\",\"Tool\"],\"display_name\":\"JsonSpec\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"BingSearchRun\":{\"template\":{\"api_wrapper\":{\"type\":\"BingSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"BingSearchRun\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"BingSearchRun\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"BingSearchRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GoogleSearchResults\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"num_results\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":4,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GoogleSearchResults\"},\"description\":\"\",\"base_classes\":[\"GoogleSearchResults\",\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"GoogleSearchResults\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GoogleSearchRun\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSearchAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GoogleSearchRun\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"GoogleSearchRun\",\"Serializable\",\"object\"],\"display_name\":\"GoogleSearchRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GoogleSerperRun\":{\"template\":{\"api_wrapper\":{\"type\":\"GoogleSerperAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GoogleSerperRun\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"GoogleSerperRun\",\"object\"],\"display_name\":\"GoogleSerperRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"InfoSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"InfoSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"InfoSQLDatabaseTool\",\"Runnable\",\"BaseSQLDatabaseTool\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"InfoSQLDatabaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"JsonGetValueTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"JsonGetValueTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"JsonGetValueTool\"],\"display_name\":\"JsonGetValueTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"JsonListKeysTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"JsonListKeysTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"JsonListKeysTool\"],\"display_name\":\"JsonListKeysTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"ListSQLDatabaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"ListSQLDatabaseTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"BaseSQLDatabaseTool\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"ListSQLDatabaseTool\"],\"display_name\":\"ListSQLDatabaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"QuerySQLDataBaseTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"db\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"QuerySQLDataBaseTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"BaseSQLDatabaseTool\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"QuerySQLDataBaseTool\",\"Serializable\",\"object\"],\"display_name\":\"QuerySQLDataBaseTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"RequestsDeleteTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"GenericRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"RequestsDeleteTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"RequestsDeleteTool\",\"BaseRequestsTool\"],\"display_name\":\"RequestsDeleteTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"RequestsGetTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"GenericRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"RequestsGetTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"RequestsGetTool\",\"BaseRequestsTool\"],\"display_name\":\"RequestsGetTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"RequestsPatchTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"GenericRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"RequestsPatchTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"RequestsPatchTool\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"BaseRequestsTool\"],\"display_name\":\"RequestsPatchTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"RequestsPostTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"GenericRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"RequestsPostTool\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"RequestsPostTool\",\"object\",\"BaseRequestsTool\"],\"display_name\":\"RequestsPostTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"RequestsPutTool\":{\"template\":{\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"GenericRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"RequestsPutTool\"},\"description\":\"\",\"base_classes\":[\"RequestsPutTool\",\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"BaseRequestsTool\"],\"display_name\":\"RequestsPutTool\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"WikipediaQueryRun\":{\"template\":{\"api_wrapper\":{\"type\":\"WikipediaAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"WikipediaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"WikipediaQueryRun\",\"Serializable\",\"object\"],\"display_name\":\"WikipediaQueryRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"WolframAlphaQueryRun\":{\"template\":{\"api_wrapper\":{\"type\":\"WolframAlphaAPIWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"args_schema\":{\"type\":\"Type[pydantic.v1.main.BaseModel]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"args_schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"callbacks\":{\"type\":\"langchain_core.callbacks.base.BaseCallbackHandler\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"callbacks\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_tool_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_tool_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"handle_validation_error\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"handle_validation_error\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"WolframAlphaQueryRun\"},\"description\":\"\",\"base_classes\":[\"Runnable\",\"WolframAlphaQueryRun\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"WolframAlphaQueryRun\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false}},\"toolkits\":{\"JsonToolkit\":{\"template\":{\"spec\":{\"type\":\"JsonSpec\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"spec\",\"display_name\":\"Spec\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain_community.tools.json.tool import JsonSpec\\nfrom langchain_community.agent_toolkits.json.toolkit import JsonToolkit\\n\\n\\nclass JsonToolkitComponent(CustomComponent):\\n display_name = \\\"JsonToolkit\\\"\\n description = \\\"Toolkit for interacting with a JSON spec.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"spec\\\": {\\\"display_name\\\": \\\"Spec\\\", \\\"type\\\": JsonSpec},\\n }\\n\\n def build(self, spec: JsonSpec) -> JsonToolkit:\\n return JsonToolkit(spec=spec)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Toolkit for interacting with a JSON spec.\",\"base_classes\":[\"BaseToolkit\",\"JsonToolkit\"],\"display_name\":\"JsonToolkit\",\"documentation\":\"\",\"custom_fields\":{\"spec\":null},\"output_types\":[\"JsonToolkit\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OpenAPIToolkit\":{\"template\":{\"json_agent\":{\"type\":\"AgentExecutor\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"json_agent\",\"display_name\":\"JSON Agent\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"requests_wrapper\":{\"type\":\"TextRequestsWrapper\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"requests_wrapper\",\"display_name\":\"Text Requests Wrapper\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_community.agent_toolkits.openapi.toolkit import BaseToolkit, OpenAPIToolkit\\nfrom langchain_community.utilities.requests import TextRequestsWrapper\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import AgentExecutor\\n\\n\\nclass OpenAPIToolkitComponent(CustomComponent):\\n display_name = \\\"OpenAPIToolkit\\\"\\n description = \\\"Toolkit for interacting with an OpenAPI API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"json_agent\\\": {\\\"display_name\\\": \\\"JSON Agent\\\"},\\n \\\"requests_wrapper\\\": {\\\"display_name\\\": \\\"Text Requests Wrapper\\\"},\\n }\\n\\n def build(\\n self,\\n json_agent: AgentExecutor,\\n requests_wrapper: TextRequestsWrapper,\\n ) -> BaseToolkit:\\n return OpenAPIToolkit(json_agent=json_agent, requests_wrapper=requests_wrapper)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Toolkit for interacting with an OpenAPI API.\",\"base_classes\":[\"BaseToolkit\"],\"display_name\":\"OpenAPIToolkit\",\"documentation\":\"\",\"custom_fields\":{\"json_agent\":null,\"requests_wrapper\":null},\"output_types\":[\"BaseToolkit\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectorStoreInfo\":{\"template\":{\"vectorstore\":{\"type\":\"VectorStore\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstore\",\"display_name\":\"VectorStore\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo\\nfrom langchain_community.vectorstores import VectorStore\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass VectorStoreInfoComponent(CustomComponent):\\n display_name = \\\"VectorStoreInfo\\\"\\n description = \\\"Information about a VectorStore\\\"\\n\\n def build_config(self):\\n return {\\n \\\"vectorstore\\\": {\\\"display_name\\\": \\\"VectorStore\\\"},\\n \\\"description\\\": {\\\"display_name\\\": \\\"Description\\\", \\\"multiline\\\": True},\\n \\\"name\\\": {\\\"display_name\\\": \\\"Name\\\"},\\n }\\n\\n def build(\\n self,\\n vectorstore: VectorStore,\\n description: str,\\n name: str,\\n ) -> Union[VectorStoreInfo, Callable]:\\n return VectorStoreInfo(vectorstore=vectorstore, description=description, name=name)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"description\",\"display_name\":\"Description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"display_name\":\"Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Information about a VectorStore\",\"base_classes\":[\"Callable\",\"VectorStoreInfo\"],\"display_name\":\"VectorStoreInfo\",\"documentation\":\"\",\"custom_fields\":{\"vectorstore\":null,\"description\":null,\"name\":null},\"output_types\":[\"VectorStoreInfo\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectorStoreRouterToolkit\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vectorstores\":{\"type\":\"VectorStoreInfo\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstores\",\"display_name\":\"Vector Stores\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import List, Union\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreRouterToolkit\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo\\nfrom langflow.field_typing import BaseLanguageModel, Tool\\n\\n\\nclass VectorStoreRouterToolkitComponent(CustomComponent):\\n display_name = \\\"VectorStoreRouterToolkit\\\"\\n description = \\\"Toolkit for routing between Vector Stores.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"vectorstores\\\": {\\\"display_name\\\": \\\"Vector Stores\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n }\\n\\n def build(\\n self, vectorstores: List[VectorStoreInfo], llm: BaseLanguageModel\\n ) -> Union[Tool, VectorStoreRouterToolkit]:\\n print(\\\"vectorstores\\\", vectorstores)\\n print(\\\"llm\\\", llm)\\n return VectorStoreRouterToolkit(vectorstores=vectorstores, llm=llm)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Toolkit for routing between Vector Stores.\",\"base_classes\":[\"Runnable\",\"BaseToolkit\",\"Generic\",\"VectorStoreRouterToolkit\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"VectorStoreRouterToolkit\",\"documentation\":\"\",\"custom_fields\":{\"vectorstores\":null,\"llm\":null},\"output_types\":[\"Tool\",\"VectorStoreRouterToolkit\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectorStoreToolkit\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vectorstore_info\":{\"type\":\"VectorStoreInfo\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstore_info\",\"display_name\":\"Vector Store Info\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit\\nfrom langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo\\nfrom langflow.field_typing import (\\n BaseLanguageModel,\\n)\\nfrom langflow.field_typing import (\\n Tool,\\n)\\nfrom typing import Union\\n\\n\\nclass VectorStoreToolkitComponent(CustomComponent):\\n display_name = \\\"VectorStoreToolkit\\\"\\n description = \\\"Toolkit for interacting with a Vector Store.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"vectorstore_info\\\": {\\\"display_name\\\": \\\"Vector Store Info\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n }\\n\\n def build(\\n self,\\n vectorstore_info: VectorStoreInfo,\\n llm: BaseLanguageModel,\\n ) -> Union[Tool, VectorStoreToolkit]:\\n return VectorStoreToolkit(vectorstore_info=vectorstore_info, llm=llm)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Toolkit for interacting with a Vector Store.\",\"base_classes\":[\"Runnable\",\"BaseToolkit\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\",\"VectorStoreToolkit\"],\"display_name\":\"VectorStoreToolkit\",\"documentation\":\"\",\"custom_fields\":{\"vectorstore_info\":null,\"llm\":null},\"output_types\":[\"Tool\",\"VectorStoreToolkit\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Metaphor\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Union\\n\\nfrom langchain.agents import tool\\nfrom langchain.agents.agent_toolkits.base import BaseToolkit\\nfrom langchain.tools import Tool\\nfrom metaphor_python import Metaphor # type: ignore\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass MetaphorToolkit(CustomComponent):\\n display_name: str = \\\"Metaphor\\\"\\n description: str = \\\"Metaphor Toolkit\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/tools/metaphor_search\\\"\\n beta: bool = True\\n # api key should be password = True\\n field_config = {\\n \\\"metaphor_api_key\\\": {\\\"display_name\\\": \\\"Metaphor API Key\\\", \\\"password\\\": True},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n metaphor_api_key: str,\\n use_autoprompt: bool = True,\\n search_num_results: int = 5,\\n similar_num_results: int = 5,\\n ) -> Union[Tool, BaseToolkit]:\\n # If documents, then we need to create a Vectara instance using .from_documents\\n client = Metaphor(api_key=metaphor_api_key)\\n\\n @tool\\n def search(query: str):\\n \\\"\\\"\\\"Call search engine with a query.\\\"\\\"\\\"\\n return client.search(query, use_autoprompt=use_autoprompt, num_results=search_num_results)\\n\\n @tool\\n def get_contents(ids: List[str]):\\n \\\"\\\"\\\"Get contents of a webpage.\\n\\n The ids passed in should be a list of ids as fetched from `search`.\\n \\\"\\\"\\\"\\n return client.get_contents(ids)\\n\\n @tool\\n def find_similar(url: str):\\n \\\"\\\"\\\"Get search results similar to a given URL.\\n\\n The url passed in should be a URL returned from `search`\\n \\\"\\\"\\\"\\n return client.find_similar(url, num_results=similar_num_results)\\n\\n return [search, get_contents, find_similar] # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"metaphor_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"metaphor_api_key\",\"display_name\":\"Metaphor API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_num_results\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"similar_num_results\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"similar_num_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"use_autoprompt\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_autoprompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Metaphor Toolkit\",\"base_classes\":[\"Runnable\",\"BaseToolkit\",\"Generic\",\"BaseTool\",\"RunnableSerializable\",\"Tool\",\"Serializable\",\"object\"],\"display_name\":\"Metaphor\",\"documentation\":\"https://python.langchain.com/docs/integrations/tools/metaphor_search\",\"custom_fields\":{\"metaphor_api_key\":null,\"use_autoprompt\":null,\"search_num_results\":null,\"similar_num_results\":null},\"output_types\":[\"Tool\",\"BaseToolkit\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"wrappers\":{\"TextRequestsWrapper\":{\"template\":{\"aiosession\":{\"type\":\"ClientSession\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"aiosession\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"auth\":{\"type\":\"Any\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"auth\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"password\":false,\"name\":\"headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"response_content_type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":false,\"multiline\":false,\"value\":\"text\",\"fileTypes\":[],\"password\":false,\"name\":\"response_content_type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"TextRequestsWrapper\"},\"description\":\"Lightweight wrapper around requests library, with async support.\",\"base_classes\":[\"TextRequestsWrapper\",\"GenericRequestsWrapper\"],\"display_name\":\"TextRequestsWrapper\",\"documentation\":\"\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false}},\"embeddings\":{\"OpenAIEmbeddings\":{\"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 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\"]},\"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\"]},\"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.0,\"max\":1.0,\"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\":{},\"pinned\":false,\"beta\":true},\"CohereEmbeddings\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_community.embeddings.cohere import CohereEmbeddings\\nfrom langflow import CustomComponent\\n\\n\\nclass CohereEmbeddingsComponent(CustomComponent):\\n display_name = \\\"CohereEmbeddings\\\"\\n description = \\\"Cohere embedding models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"cohere_api_key\\\": {\\\"display_name\\\": \\\"Cohere API Key\\\", \\\"password\\\": True},\\n \\\"model\\\": {\\\"display_name\\\": \\\"Model\\\", \\\"default\\\": \\\"embed-english-v2.0\\\", \\\"advanced\\\": True},\\n \\\"truncate\\\": {\\\"display_name\\\": \\\"Truncate\\\", \\\"advanced\\\": True},\\n \\\"max_retries\\\": {\\\"display_name\\\": \\\"Max Retries\\\", \\\"advanced\\\": True},\\n \\\"user_agent\\\": {\\\"display_name\\\": \\\"User Agent\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n request_timeout: Optional[float] = None,\\n cohere_api_key: str = \\\"\\\",\\n max_retries: Optional[int] = None,\\n model: str = \\\"embed-english-v2.0\\\",\\n truncate: Optional[str] = None,\\n user_agent: str = \\\"langchain\\\",\\n ) -> CohereEmbeddings:\\n return CohereEmbeddings( # type: ignore\\n max_retries=max_retries,\\n user_agent=user_agent,\\n request_timeout=request_timeout,\\n cohere_api_key=cohere_api_key,\\n model=model,\\n truncate=truncate,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"cohere_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"cohere_api_key\",\"display_name\":\"Cohere API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_retries\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"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\":false,\"show\":true,\"multiline\":false,\"value\":\"embed-english-v2.0\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model\",\"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\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"truncate\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"truncate\",\"display_name\":\"Truncate\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"user_agent\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"langchain\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"user_agent\",\"display_name\":\"User Agent\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Cohere embedding models.\",\"base_classes\":[\"Embeddings\",\"CohereEmbeddings\"],\"display_name\":\"CohereEmbeddings\",\"documentation\":\"\",\"custom_fields\":{\"request_timeout\":null,\"cohere_api_key\":null,\"max_retries\":null,\"model\":null,\"truncate\":null,\"user_agent\":null},\"output_types\":[\"CohereEmbeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"HuggingFaceEmbeddings\":{\"template\":{\"cache_folder\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache_folder\",\"display_name\":\"Cache Folder\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Optional, Dict\\nfrom langchain_community.embeddings.huggingface import HuggingFaceEmbeddings\\n\\n\\nclass HuggingFaceEmbeddingsComponent(CustomComponent):\\n display_name = \\\"HuggingFaceEmbeddings\\\"\\n description = \\\"HuggingFace sentence_transformers embedding models.\\\"\\n documentation = (\\n \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"cache_folder\\\": {\\\"display_name\\\": \\\"Cache Folder\\\", \\\"advanced\\\": True},\\n \\\"encode_kwargs\\\": {\\\"display_name\\\": \\\"Encode Kwargs\\\", \\\"advanced\\\": True, \\\"field_type\\\": \\\"dict\\\"},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\", \\\"field_type\\\": \\\"dict\\\", \\\"advanced\\\": True},\\n \\\"model_name\\\": {\\\"display_name\\\": \\\"Model Name\\\"},\\n \\\"multi_process\\\": {\\\"display_name\\\": \\\"Multi Process\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n cache_folder: Optional[str] = None,\\n encode_kwargs: Optional[Dict] = {},\\n model_kwargs: Optional[Dict] = {},\\n model_name: str = \\\"sentence-transformers/all-mpnet-base-v2\\\",\\n multi_process: bool = False,\\n ) -> HuggingFaceEmbeddings:\\n return HuggingFaceEmbeddings(\\n cache_folder=cache_folder,\\n encode_kwargs=encode_kwargs,\\n model_kwargs=model_kwargs,\\n model_name=model_name,\\n multi_process=multi_process,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"encode_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"encode_kwargs\",\"display_name\":\"Encode Kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_kwargs\":{\"type\":\"dict\",\"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\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"sentence-transformers/all-mpnet-base-v2\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"multi_process\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"multi_process\",\"display_name\":\"Multi Process\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"HuggingFace sentence_transformers embedding models.\",\"base_classes\":[\"Embeddings\",\"HuggingFaceEmbeddings\"],\"display_name\":\"HuggingFaceEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers\",\"custom_fields\":{\"cache_folder\":null,\"encode_kwargs\":null,\"model_kwargs\":null,\"model_name\":null,\"multi_process\":null},\"output_types\":[\"HuggingFaceEmbeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VertexAIEmbeddings\":{\"template\":{\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"credentials\",\"display_name\":\"Credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain_community.embeddings import VertexAIEmbeddings\\nfrom typing import Optional, List\\n\\n\\nclass VertexAIEmbeddingsComponent(CustomComponent):\\n display_name = \\\"VertexAIEmbeddings\\\"\\n description = \\\"Google Cloud VertexAI embedding models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"credentials\\\": {\\n \\\"display_name\\\": \\\"Credentials\\\",\\n \\\"value\\\": \\\"\\\",\\n \\\"file_types\\\": [\\\".json\\\"],\\n \\\"field_type\\\": \\\"file\\\",\\n },\\n \\\"instance\\\": {\\n \\\"display_name\\\": \\\"instance\\\",\\n \\\"advanced\\\": True,\\n \\\"field_type\\\": \\\"dict\\\",\\n },\\n \\\"location\\\": {\\n \\\"display_name\\\": \\\"Location\\\",\\n \\\"value\\\": \\\"us-central1\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"max_output_tokens\\\": {\\\"display_name\\\": \\\"Max Output Tokens\\\", \\\"value\\\": 128},\\n \\\"max_retries\\\": {\\n \\\"display_name\\\": \\\"Max Retries\\\",\\n \\\"value\\\": 6,\\n \\\"advanced\\\": True,\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"textembedding-gecko\\\",\\n },\\n \\\"n\\\": {\\\"display_name\\\": \\\"N\\\", \\\"value\\\": 1, \\\"advanced\\\": True},\\n \\\"project\\\": {\\\"display_name\\\": \\\"Project\\\", \\\"advanced\\\": True},\\n \\\"request_parallelism\\\": {\\n \\\"display_name\\\": \\\"Request Parallelism\\\",\\n \\\"value\\\": 5,\\n \\\"advanced\\\": True,\\n },\\n \\\"stop\\\": {\\\"display_name\\\": \\\"Stop\\\", \\\"advanced\\\": True},\\n \\\"streaming\\\": {\\n \\\"display_name\\\": \\\"Streaming\\\",\\n \\\"value\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"temperature\\\": {\\\"display_name\\\": \\\"Temperature\\\", \\\"value\\\": 0.0},\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"value\\\": 40, \\\"advanced\\\": True},\\n \\\"top_p\\\": {\\\"display_name\\\": \\\"Top P\\\", \\\"value\\\": 0.95, \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n instance: Optional[str] = None,\\n credentials: Optional[str] = None,\\n location: str = \\\"us-central1\\\",\\n max_output_tokens: int = 128,\\n max_retries: int = 6,\\n model_name: str = \\\"textembedding-gecko\\\",\\n n: int = 1,\\n project: Optional[str] = None,\\n request_parallelism: int = 5,\\n stop: Optional[List[str]] = None,\\n streaming: bool = False,\\n temperature: float = 0.0,\\n top_k: int = 40,\\n top_p: float = 0.95,\\n ) -> VertexAIEmbeddings:\\n return VertexAIEmbeddings(\\n instance=instance,\\n credentials=credentials,\\n location=location,\\n max_output_tokens=max_output_tokens,\\n max_retries=max_retries,\\n model_name=model_name,\\n n=n,\\n project=project,\\n request_parallelism=request_parallelism,\\n stop=stop,\\n streaming=streaming,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"instance\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"instance\",\"display_name\":\"instance\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"location\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"location\",\"display_name\":\"Location\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":false,\"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_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"textembedding-gecko\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"n\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n\",\"display_name\":\"N\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"project\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"project\",\"display_name\":\"Project\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"request_parallelism\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"request_parallelism\",\"display_name\":\"Request Parallelism\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Google Cloud VertexAI embedding models.\",\"base_classes\":[\"_VertexAICommon\",\"Embeddings\",\"_VertexAIBase\",\"VertexAIEmbeddings\"],\"display_name\":\"VertexAIEmbeddings\",\"documentation\":\"\",\"custom_fields\":{\"instance\":null,\"credentials\":null,\"location\":null,\"max_output_tokens\":null,\"max_retries\":null,\"model_name\":null,\"n\":null,\"project\":null,\"request_parallelism\":null,\"stop\":null,\"streaming\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null},\"output_types\":[\"VertexAIEmbeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OllamaEmbeddings\":{\"template\":{\"base_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"http://localhost:11434\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"base_url\",\"display_name\":\"Ollama Base URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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 langflow import CustomComponent\\nfrom langchain.embeddings.base import Embeddings\\nfrom langchain_community.embeddings import OllamaEmbeddings\\n\\n\\nclass OllamaEmbeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Ollama.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Ollama Embeddings\\\"\\n description: str = \\\"Embeddings model from Ollama.\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/text_embedding/ollama\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Ollama Model\\\",\\n },\\n \\\"base_url\\\": {\\\"display_name\\\": \\\"Ollama Base URL\\\"},\\n \\\"temperature\\\": {\\\"display_name\\\": \\\"Model Temperature\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"llama2\\\",\\n base_url: str = \\\"http://localhost:11434\\\",\\n temperature: Optional[float] = None,\\n ) -> Embeddings:\\n try:\\n output = OllamaEmbeddings(model=model, base_url=base_url, temperature=temperature) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Ollama API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"llama2\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Ollama Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Model Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Embeddings model from Ollama.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Ollama Embeddings\",\"documentation\":\"https://python.langchain.com/docs/integrations/text_embedding/ollama\",\"custom_fields\":{\"model\":null,\"base_url\":null,\"temperature\":null},\"output_types\":[\"Embeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AmazonBedrockEmbeddings\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.embeddings.base import Embeddings\\nfrom langchain_community.embeddings import BedrockEmbeddings\\n\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockEmeddingsComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing an Embeddings Model using Amazon Bedrock.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Amazon Bedrock Embeddings\\\"\\n description: str = \\\"Embeddings model from Amazon Bedrock.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\\"amazon.titan-embed-text-v1\\\"],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Bedrock Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"AWS Region\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"amazon.titan-embed-text-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n endpoint_url: Optional[str] = None,\\n region_name: Optional[str] = None,\\n ) -> Embeddings:\\n try:\\n output = BedrockEmbeddings(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n endpoint_url=endpoint_url,\\n region_name=region_name,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"endpoint_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Bedrock Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"amazon.titan-embed-text-v1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"amazon.titan-embed-text-v1\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"AWS Region\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Embeddings model from Amazon Bedrock.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"Amazon Bedrock Embeddings\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/bedrock\",\"custom_fields\":{\"model_id\":null,\"credentials_profile_name\":null,\"endpoint_url\":null,\"region_name\":null},\"output_types\":[\"Embeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AzureOpenAIEmbeddings\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_version\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"2023-08-01-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"2022-12-01\",\"2023-03-15-preview\",\"2023-05-15\",\"2023-06-01-preview\",\"2023-07-01-preview\",\"2023-08-01-preview\"],\"name\":\"api_version\",\"display_name\":\"API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_deployment\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_deployment\",\"display_name\":\"Deployment Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_endpoint\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_endpoint\",\"display_name\":\"Azure Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain.embeddings.base import Embeddings\\nfrom langchain_community.embeddings import AzureOpenAIEmbeddings\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AzureOpenAIEmbeddingsComponent(CustomComponent):\\n display_name: str = \\\"AzureOpenAIEmbeddings\\\"\\n description: str = \\\"Embeddings model from Azure OpenAI.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/integrations/text_embedding/azureopenai\\\"\\n beta = False\\n\\n API_VERSION_OPTIONS = [\\n \\\"2022-12-01\\\",\\n \\\"2023-03-15-preview\\\",\\n \\\"2023-05-15\\\",\\n \\\"2023-06-01-preview\\\",\\n \\\"2023-07-01-preview\\\",\\n \\\"2023-08-01-preview\\\",\\n ]\\n\\n def build_config(self):\\n return {\\n \\\"azure_endpoint\\\": {\\n \\\"display_name\\\": \\\"Azure Endpoint\\\",\\n \\\"required\\\": True,\\n \\\"info\\\": \\\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\\\",\\n },\\n \\\"azure_deployment\\\": {\\n \\\"display_name\\\": \\\"Deployment Name\\\",\\n \\\"required\\\": True,\\n },\\n \\\"api_version\\\": {\\n \\\"display_name\\\": \\\"API Version\\\",\\n \\\"options\\\": self.API_VERSION_OPTIONS,\\n \\\"value\\\": self.API_VERSION_OPTIONS[-1],\\n \\\"advanced\\\": True,\\n },\\n \\\"api_key\\\": {\\n \\\"display_name\\\": \\\"API Key\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n azure_endpoint: str,\\n azure_deployment: str,\\n api_version: str,\\n api_key: str,\\n ) -> Embeddings:\\n try:\\n embeddings = AzureOpenAIEmbeddings(\\n azure_endpoint=azure_endpoint,\\n azure_deployment=azure_deployment,\\n api_version=api_version,\\n api_key=api_key,\\n )\\n\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AzureOpenAIEmbeddings API.\\\") from e\\n\\n return embeddings\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Embeddings model from Azure OpenAI.\",\"base_classes\":[\"Embeddings\"],\"display_name\":\"AzureOpenAIEmbeddings\",\"documentation\":\"https://python.langchain.com/docs/integrations/text_embedding/azureopenai\",\"custom_fields\":{\"azure_endpoint\":null,\"azure_deployment\":null,\"api_version\":null,\"api_key\":null},\"output_types\":[\"Embeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"HuggingFaceInferenceAPIEmbeddings\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"http://localhost:8080\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"api_url\",\"display_name\":\"API URL\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"cache_folder\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache_folder\",\"display_name\":\"Cache Folder\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Dict, Optional\\n\\nfrom langchain_community.embeddings.huggingface import HuggingFaceInferenceAPIEmbeddings\\nfrom langflow import CustomComponent\\nfrom pydantic.v1.types import SecretStr\\n\\n\\nclass HuggingFaceInferenceAPIEmbeddingsComponent(CustomComponent):\\n display_name = \\\"HuggingFaceInferenceAPIEmbeddings\\\"\\n description = \\\"HuggingFace sentence_transformers embedding models, API version.\\\"\\n documentation = \\\"https://github.com/huggingface/text-embeddings-inference\\\"\\n\\n def build_config(self):\\n return {\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"password\\\": True, \\\"advanced\\\": True},\\n \\\"api_url\\\": {\\\"display_name\\\": \\\"API URL\\\", \\\"advanced\\\": True},\\n \\\"model_name\\\": {\\\"display_name\\\": \\\"Model Name\\\"},\\n \\\"cache_folder\\\": {\\\"display_name\\\": \\\"Cache Folder\\\", \\\"advanced\\\": True},\\n \\\"encode_kwargs\\\": {\\\"display_name\\\": \\\"Encode Kwargs\\\", \\\"advanced\\\": True, \\\"field_type\\\": \\\"dict\\\"},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\", \\\"field_type\\\": \\\"dict\\\", \\\"advanced\\\": True},\\n \\\"multi_process\\\": {\\\"display_name\\\": \\\"Multi Process\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n api_key: Optional[str] = \\\"\\\",\\n api_url: str = \\\"http://localhost:8080\\\",\\n model_name: str = \\\"BAAI/bge-large-en-v1.5\\\",\\n cache_folder: Optional[str] = None,\\n encode_kwargs: Optional[Dict] = {},\\n model_kwargs: Optional[Dict] = {},\\n multi_process: bool = False,\\n ) -> HuggingFaceInferenceAPIEmbeddings:\\n if api_key:\\n secret_api_key = SecretStr(api_key)\\n else:\\n raise ValueError(\\\"API Key is required\\\")\\n return HuggingFaceInferenceAPIEmbeddings(\\n api_key=secret_api_key,\\n api_url=api_url,\\n model_name=model_name,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"encode_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"encode_kwargs\",\"display_name\":\"Encode Kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_kwargs\":{\"type\":\"dict\",\"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\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"BAAI/bge-large-en-v1.5\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"multi_process\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"multi_process\",\"display_name\":\"Multi Process\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"HuggingFace sentence_transformers embedding models, API version.\",\"base_classes\":[\"Embeddings\",\"HuggingFaceInferenceAPIEmbeddings\"],\"display_name\":\"HuggingFaceInferenceAPIEmbeddings\",\"documentation\":\"https://github.com/huggingface/text-embeddings-inference\",\"custom_fields\":{\"api_key\":null,\"api_url\":null,\"model_name\":null,\"cache_folder\":null,\"encode_kwargs\":null,\"model_kwargs\":null,\"multi_process\":null},\"output_types\":[\"HuggingFaceInferenceAPIEmbeddings\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"documentloaders\":{\"AZLyricsLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"AZLyricsLoader\"},\"description\":\"Load `AZLyrics` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"AZLyricsLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/azlyrics\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"AirbyteJSONLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"AirbyteJSONLoader\"},\"description\":\"Load local `Airbyte` json files.\",\"base_classes\":[\"Document\"],\"display_name\":\"AirbyteJSONLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/airbyte_json\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"BSHTMLLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".html\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"BSHTMLLoader\"},\"description\":\"Load `HTML` files and parse them with `beautiful soup`.\",\"base_classes\":[\"Document\"],\"display_name\":\"BSHTMLLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"CSVLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CSVLoader\"},\"description\":\"Load a `CSV` file into a list of Documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"CSVLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/csv\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"CoNLLULoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".csv\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CoNLLULoader\"},\"description\":\"Load `CoNLL-U` files.\",\"base_classes\":[\"Document\"],\"display_name\":\"CoNLLULoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/conll-u\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"CollegeConfidentialLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CollegeConfidentialLoader\"},\"description\":\"Load `College Confidential` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"CollegeConfidentialLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/college_confidential\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"DirectoryLoader\":{\"template\":{\"glob\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"**/*.txt\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"glob\",\"display_name\":\"glob\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"load_hidden\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"False\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"load_hidden\",\"display_name\":\"Load hidden files\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"max_concurrency\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_concurrency\",\"display_name\":\"Max concurrency\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"recursive\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"True\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"recursive\",\"display_name\":\"Recursive\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"silent_errors\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"False\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"silent_errors\",\"display_name\":\"Silent errors\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"use_multithreading\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"True\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_multithreading\",\"display_name\":\"Use multithreading\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"DirectoryLoader\"},\"description\":\"Load from a directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"DirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/file_directory\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"EverNoteLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".xml\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"EverNoteLoader\"},\"description\":\"Load from `EverNote`.\",\"base_classes\":[\"Document\"],\"display_name\":\"EverNoteLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/evernote\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"FacebookChatLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"FacebookChatLoader\"},\"description\":\"Load `Facebook Chat` messages directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"FacebookChatLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/facebook_chat\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GitLoader\":{\"template\":{\"branch\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"branch\",\"display_name\":\"Branch\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"clone_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"clone_url\",\"display_name\":\"Clone URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"file_filter\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"file_filter\",\"display_name\":\"File extensions (comma-separated)\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"repo_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repo_path\",\"display_name\":\"Path to repository\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GitLoader\"},\"description\":\"Load `Git` repository files.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/git\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GitbookLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_page\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_page\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GitbookLoader\"},\"description\":\"Load `GitBook` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"GitbookLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gitbook\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"GutenbergLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"GutenbergLoader\"},\"description\":\"Load from `Gutenberg.org`.\",\"base_classes\":[\"Document\"],\"display_name\":\"GutenbergLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/gutenberg\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"HNLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"HNLoader\"},\"description\":\"Load `Hacker News` data.\",\"base_classes\":[\"Document\"],\"display_name\":\"HNLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/hacker_news\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"IFixitLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"IFixitLoader\"},\"description\":\"Load `iFixit` repair guides, device wikis and answers.\",\"base_classes\":[\"Document\"],\"display_name\":\"IFixitLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/ifixit\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"IMSDbLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"IMSDbLoader\"},\"description\":\"Load `IMSDb` webpages.\",\"base_classes\":[\"Document\"],\"display_name\":\"IMSDbLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/imsdb\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"NotionDirectoryLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"NotionDirectoryLoader\"},\"description\":\"Load `Notion directory` dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"NotionDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/notion\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"PyPDFLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".pdf\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"PyPDFLoader\"},\"description\":\"Load PDF using pypdf into list of documents.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"PyPDFDirectoryLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"PyPDFDirectoryLoader\"},\"description\":\"Load a directory with `PDF` files using `pypdf` and chunks at character level.\",\"base_classes\":[\"Document\"],\"display_name\":\"PyPDFDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/pdf\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"ReadTheDocsLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"ReadTheDocsLoader\"},\"description\":\"Load `ReadTheDocs` documentation directory.\",\"base_classes\":[\"Document\"],\"display_name\":\"ReadTheDocsLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/readthedocs_documentation\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"SRTLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".srt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"SRTLoader\"},\"description\":\"Load `.srt` (subtitle) files.\",\"base_classes\":[\"Document\"],\"display_name\":\"SRTLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/subtitle\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"SlackDirectoryLoader\":{\"template\":{\"zip_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".zip\"],\"file_path\":\"\",\"password\":false,\"name\":\"zip_path\",\"display_name\":\"Path to zip file\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"workspace_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"workspace_url\",\"display_name\":\"Workspace URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"SlackDirectoryLoader\"},\"description\":\"Load from a `Slack` directory dump.\",\"base_classes\":[\"Document\"],\"display_name\":\"SlackDirectoryLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/slack\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"TextLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".txt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"TextLoader\"},\"description\":\"Load text file.\",\"base_classes\":[\"Document\"],\"display_name\":\"TextLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"UnstructuredEmailLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".eml\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"UnstructuredEmailLoader\"},\"description\":\"Load email files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredEmailLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/email\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"UnstructuredHTMLLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".html\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"UnstructuredHTMLLoader\"},\"description\":\"Load `HTML` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredHTMLLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/html\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"UnstructuredMarkdownLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".md\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"UnstructuredMarkdownLoader\"},\"description\":\"Load `Markdown` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredMarkdownLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/how_to/markdown\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"UnstructuredPowerPointLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".pptx\",\".ppt\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"UnstructuredPowerPointLoader\"},\"description\":\"Load `Microsoft PowerPoint` files using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredPowerPointLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_powerpoint\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"UnstructuredWordDocumentLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[\".docx\",\".doc\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"UnstructuredWordDocumentLoader\"},\"description\":\"Load `Microsoft Word` file using `Unstructured`.\",\"base_classes\":[\"Document\"],\"display_name\":\"UnstructuredWordDocumentLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/microsoft_word\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"WebBaseLoader\":{\"template\":{\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Web Page\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"WebBaseLoader\"},\"description\":\"Load HTML pages using `urllib` and parse them with `BeautifulSoup'.\",\"base_classes\":[\"Document\"],\"display_name\":\"WebBaseLoader\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/web_base\",\"custom_fields\":{},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"FileLoader\":{\"template\":{\"file_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".json\",\".txt\",\".csv\",\".jsonl\",\".html\",\".htm\",\".conllu\",\".enex\",\".msg\",\".pdf\",\".srt\",\".eml\",\".md\",\".mdx\",\".pptx\",\".docx\"],\"file_path\":\"\",\"password\":false,\"name\":\"file_path\",\"display_name\":\"File Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.utils.constants import LOADERS_INFO\\n\\n\\nclass FileLoaderComponent(CustomComponent):\\n display_name: str = \\\"File Loader\\\"\\n description: str = \\\"Generic File Loader\\\"\\n beta = True\\n\\n def build_config(self):\\n loader_options = [\\\"Automatic\\\"] + [loader_info[\\\"name\\\"] for loader_info in LOADERS_INFO]\\n\\n file_types = []\\n suffixes = []\\n\\n for loader_info in LOADERS_INFO:\\n if \\\"allowedTypes\\\" in loader_info:\\n file_types.extend(loader_info[\\\"allowedTypes\\\"])\\n suffixes.extend([f\\\".{ext}\\\" for ext in loader_info[\\\"allowedTypes\\\"]])\\n\\n return {\\n \\\"file_path\\\": {\\n \\\"display_name\\\": \\\"File Path\\\",\\n \\\"required\\\": True,\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\n \\\"json\\\",\\n \\\"txt\\\",\\n \\\"csv\\\",\\n \\\"jsonl\\\",\\n \\\"html\\\",\\n \\\"htm\\\",\\n \\\"conllu\\\",\\n \\\"enex\\\",\\n \\\"msg\\\",\\n \\\"pdf\\\",\\n \\\"srt\\\",\\n \\\"eml\\\",\\n \\\"md\\\",\\n \\\"mdx\\\",\\n \\\"pptx\\\",\\n \\\"docx\\\",\\n ],\\n \\\"suffixes\\\": [\\n \\\".json\\\",\\n \\\".txt\\\",\\n \\\".csv\\\",\\n \\\".jsonl\\\",\\n \\\".html\\\",\\n \\\".htm\\\",\\n \\\".conllu\\\",\\n \\\".enex\\\",\\n \\\".msg\\\",\\n \\\".pdf\\\",\\n \\\".srt\\\",\\n \\\".eml\\\",\\n \\\".md\\\",\\n \\\".mdx\\\",\\n \\\".pptx\\\",\\n \\\".docx\\\",\\n ],\\n # \\\"file_types\\\" : file_types,\\n # \\\"suffixes\\\": suffixes,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": loader_options,\\n \\\"value\\\": \\\"Automatic\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, file_path: str, loader: str) -> Document:\\n file_type = file_path.split(\\\".\\\")[-1]\\n\\n # Map the loader to the correct loader class\\n selected_loader_info = None\\n for loader_info in LOADERS_INFO:\\n if loader_info[\\\"name\\\"] == loader:\\n selected_loader_info = loader_info\\n break\\n\\n if selected_loader_info is None and loader != \\\"Automatic\\\":\\n raise ValueError(f\\\"Loader {loader} not found in the loader info list\\\")\\n\\n if loader == \\\"Automatic\\\":\\n # Determine the loader based on the file type\\n default_loader_info = None\\n for info in LOADERS_INFO:\\n if \\\"defaultFor\\\" in info and file_type in info[\\\"defaultFor\\\"]:\\n default_loader_info = info\\n break\\n\\n if default_loader_info is None:\\n raise ValueError(f\\\"No default loader found for file type: {file_type}\\\")\\n\\n selected_loader_info = default_loader_info\\n if isinstance(selected_loader_info, dict):\\n loader_import: str = selected_loader_info[\\\"import\\\"]\\n else:\\n raise ValueError(f\\\"Loader info for {loader} is not a dict\\\\nLoader info:\\\\n{selected_loader_info}\\\")\\n module_name, class_name = loader_import.rsplit(\\\".\\\", 1)\\n\\n try:\\n # Import the loader class\\n loader_module = __import__(module_name, fromlist=[class_name])\\n loader_instance = getattr(loader_module, class_name)\\n except ImportError as e:\\n raise ValueError(f\\\"Loader {loader} could not be imported\\\\nLoader info:\\\\n{selected_loader_info}\\\") from e\\n\\n result = loader_instance(file_path=file_path)\\n return result.load()\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"loader\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Automatic\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Automatic\",\"Airbyte JSON (.jsonl)\",\"JSON (.json)\",\"BeautifulSoup4 HTML (.html, .htm)\",\"CSV (.csv)\",\"CoNLL-U (.conllu)\",\"EverNote (.enex)\",\"Facebook Chat (.json)\",\"Outlook Message (.msg)\",\"PyPDF (.pdf)\",\"Subtitle (.str)\",\"Text (.txt)\",\"Unstructured Email (.eml)\",\"Unstructured HTML (.html, .htm)\",\"Unstructured Markdown (.md)\",\"Unstructured PowerPoint (.pptx)\",\"Unstructured Word (.docx)\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Generic File Loader\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"File Loader\",\"documentation\":\"\",\"custom_fields\":{\"file_path\":null,\"loader\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"UrlLoader\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List\\n\\nfrom langchain import document_loaders\\nfrom langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass UrlLoaderComponent(CustomComponent):\\n display_name: str = \\\"Url Loader\\\"\\n description: str = \\\"Generic Url Loader Component\\\"\\n\\n def build_config(self):\\n return {\\n \\\"web_path\\\": {\\n \\\"display_name\\\": \\\"Url\\\",\\n \\\"required\\\": True,\\n },\\n \\\"loader\\\": {\\n \\\"display_name\\\": \\\"Loader\\\",\\n \\\"is_list\\\": True,\\n \\\"required\\\": True,\\n \\\"options\\\": [\\n \\\"AZLyricsLoader\\\",\\n \\\"CollegeConfidentialLoader\\\",\\n \\\"GitbookLoader\\\",\\n \\\"HNLoader\\\",\\n \\\"IFixitLoader\\\",\\n \\\"IMSDbLoader\\\",\\n \\\"WebBaseLoader\\\",\\n ],\\n \\\"value\\\": \\\"WebBaseLoader\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, web_path: str, loader: str) -> List[Document]:\\n try:\\n loader_instance = getattr(document_loaders, loader)(web_path=web_path)\\n except Exception as e:\\n raise ValueError(f\\\"No loader found for: {web_path}\\\") from e\\n docs = loader_instance.load()\\n avg_length = sum(len(doc.page_content) for doc in docs if hasattr(doc, \\\"page_content\\\")) / len(docs)\\n self.status = f\\\"\\\"\\\"{len(docs)} documents)\\n \\\\nAvg. Document Length (characters): {int(avg_length)}\\n Documents: {docs[:3]}...\\\"\\\"\\\"\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"loader\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"WebBaseLoader\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"AZLyricsLoader\",\"CollegeConfidentialLoader\",\"GitbookLoader\",\"HNLoader\",\"IFixitLoader\",\"IMSDbLoader\",\"WebBaseLoader\"],\"name\":\"loader\",\"display_name\":\"Loader\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"web_path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"web_path\",\"display_name\":\"Url\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Generic Url Loader Component\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"Url Loader\",\"documentation\":\"\",\"custom_fields\":{\"web_path\":null,\"loader\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GatherRecords\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from concurrent import futures\\nfrom pathlib import Path\\nfrom typing import Any, Dict, List\\n\\nfrom langflow import CustomComponent\\nfrom langflow.schema import Record\\n\\n\\nclass GatherRecordsComponent(CustomComponent):\\n display_name = \\\"Gather Records\\\"\\n description = \\\"Gather records from a directory.\\\"\\n\\n def build_config(self) -> Dict[str, Any]:\\n return {\\n \\\"load_hidden\\\": {\\n \\\"display_name\\\": \\\"Load Hidden Files\\\",\\n \\\"value\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"max_concurrency\\\": {\\n \\\"display_name\\\": \\\"Max Concurrency\\\",\\n \\\"value\\\": 10,\\n \\\"advanced\\\": True,\\n },\\n \\\"path\\\": {\\\"display_name\\\": \\\"Local Directory\\\"},\\n \\\"recursive\\\": {\\\"display_name\\\": \\\"Recursive\\\", \\\"value\\\": True, \\\"advanced\\\": True},\\n \\\"use_multithreading\\\": {\\n \\\"display_name\\\": \\\"Use Multithreading\\\",\\n \\\"value\\\": True,\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def is_hidden(self, path: Path) -> bool:\\n return path.name.startswith(\\\".\\\")\\n\\n def retrieve_file_paths(\\n self,\\n path: str,\\n types: List[str],\\n load_hidden: bool,\\n recursive: bool,\\n depth: int,\\n ) -> List[str]:\\n path_obj = Path(path)\\n if not path_obj.exists() or not path_obj.is_dir():\\n raise ValueError(f\\\"Path {path} must exist and be a directory.\\\")\\n\\n def match_types(p: Path) -> bool:\\n return any(p.suffix == f\\\".{t}\\\" for t in types) if types else True\\n\\n def is_not_hidden(p: Path) -> bool:\\n return not self.is_hidden(p) or load_hidden\\n\\n def walk_level(directory: Path, max_depth: int):\\n directory = directory.resolve()\\n prefix_length = len(directory.parts)\\n for p in directory.rglob(\\\"*\\\" if recursive else \\\"[!.]*\\\"):\\n if len(p.parts) - prefix_length <= max_depth:\\n yield p\\n\\n glob = \\\"**/*\\\" if recursive else \\\"*\\\"\\n paths = walk_level(path_obj, depth) if depth else path_obj.glob(glob)\\n file_paths = [str(p) for p in paths if p.is_file() and match_types(p) and is_not_hidden(p)]\\n\\n return file_paths\\n\\n def parse_file_to_record(self, file_path: str, silent_errors: bool) -> Record:\\n # Use the partition function to load the file\\n from unstructured.partition.auto import partition\\n\\n try:\\n elements = partition(file_path)\\n except Exception as e:\\n if not silent_errors:\\n raise ValueError(f\\\"Error loading file {file_path}: {e}\\\") from e\\n return None\\n\\n # Create a Record\\n text = \\\"\\\\n\\\\n\\\".join([str(el) for el in elements])\\n metadata = elements.metadata if hasattr(elements, \\\"metadata\\\") else {}\\n metadata[\\\"file_path\\\"] = file_path\\n record = Record(text=text, data=metadata)\\n return record\\n\\n def get_elements(\\n self,\\n file_paths: List[str],\\n silent_errors: bool,\\n max_concurrency: int,\\n use_multithreading: bool,\\n ) -> List[Record]:\\n if use_multithreading:\\n records = self.parallel_load_records(file_paths, silent_errors, max_concurrency)\\n else:\\n records = [self.parse_file_to_record(file_path, silent_errors) for file_path in file_paths]\\n records = list(filter(None, records))\\n return records\\n\\n def parallel_load_records(self, file_paths: List[str], silent_errors: bool, max_concurrency: int) -> List[Record]:\\n with futures.ThreadPoolExecutor(max_workers=max_concurrency) as executor:\\n loaded_files = executor.map(\\n lambda file_path: self.parse_file_to_record(file_path, silent_errors),\\n file_paths,\\n )\\n return loaded_files\\n\\n def build(\\n self,\\n path: str,\\n types: List[str] = None,\\n depth: int = 0,\\n max_concurrency: int = 2,\\n load_hidden: bool = False,\\n recursive: bool = True,\\n silent_errors: bool = False,\\n use_multithreading: bool = True,\\n ) -> List[Record]:\\n resolved_path = self.resolve_path(path)\\n file_paths = self.retrieve_file_paths(resolved_path, types, load_hidden, recursive, depth)\\n loaded_records = []\\n\\n if use_multithreading:\\n loaded_records = self.parallel_load_records(file_paths, silent_errors, max_concurrency)\\n else:\\n loaded_records = [self.parse_file_to_record(file_path, silent_errors) for file_path in file_paths]\\n loaded_records = list(filter(None, loaded_records))\\n self.status = loaded_records\\n return loaded_records\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"depth\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"depth\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"load_hidden\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"load_hidden\",\"display_name\":\"Load Hidden Files\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"max_concurrency\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_concurrency\",\"display_name\":\"Max Concurrency\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"path\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Local Directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"recursive\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"recursive\",\"display_name\":\"Recursive\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"silent_errors\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"silent_errors\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"types\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"types\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"use_multithreading\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_multithreading\",\"display_name\":\"Use Multithreading\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Gather records from a directory.\",\"base_classes\":[\"Record\"],\"display_name\":\"Gather Records\",\"documentation\":\"\",\"custom_fields\":{\"path\":null,\"types\":null,\"depth\":null,\"max_concurrency\":null,\"load_hidden\":null,\"recursive\":null,\"silent_errors\":null,\"use_multithreading\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"textsplitters\":{\"CharacterTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"chunk_overlap\":{\"type\":\"int\",\"required\":true,\"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\":\"\",\"title_case\":false},\"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\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List\\n\\nfrom langchain.text_splitter import CharacterTextSplitter\\nfrom langchain_core.documents.base import Document\\nfrom langflow import CustomComponent\\n\\n\\nclass CharacterTextSplitterComponent(CustomComponent):\\n display_name = \\\"CharacterTextSplitter\\\"\\n description = \\\"Splitting text that looks at characters.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"chunk_overlap\\\": {\\\"display_name\\\": \\\"Chunk Overlap\\\", \\\"default\\\": 200},\\n \\\"chunk_size\\\": {\\\"display_name\\\": \\\"Chunk Size\\\", \\\"default\\\": 1000},\\n \\\"separator\\\": {\\\"display_name\\\": \\\"Separator\\\", \\\"default\\\": \\\"\\\\n\\\"},\\n }\\n\\n def build(\\n self,\\n documents: List[Document],\\n chunk_overlap: int = 200,\\n chunk_size: int = 1000,\\n separator: str = \\\"\\\\n\\\",\\n ) -> List[Document]:\\n # separator may come escaped from the frontend\\n separator = separator.encode().decode(\\\"unicode_escape\\\")\\n docs = CharacterTextSplitter(\\n chunk_overlap=chunk_overlap,\\n chunk_size=chunk_size,\\n separator=separator,\\n ).split_documents(documents)\\n self.status = docs\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"separator\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\\\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"separator\",\"display_name\":\"Separator\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Splitting text that looks at characters.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"CharacterTextSplitter\",\"documentation\":\"\",\"custom_fields\":{\"documents\":null,\"chunk_overlap\":null,\"chunk_size\":null,\"separator\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"RecursiveCharacterTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents 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_core.documents import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.utils.util import build_loader_repr_from_documents\\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\\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 \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\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 documents: list[Document],\\n separators: Optional[list[str]] = None,\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n ) -> list[Document]:\\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 = [x.encode().decode(\\\"unicode-escape\\\") 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\\n docs = splitter.split_documents(documents)\\n self.repr_value = build_loader_repr_from_documents(docs)\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"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\"]},\"_type\":\"CustomComponent\"},\"description\":\"Split text into chunks of a specified length.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"Recursive Character Text Splitter\",\"documentation\":\"https://docs.langflow.org/components/text-splitters#recursivecharactertextsplitter\",\"custom_fields\":{\"documents\":null,\"separators\":null,\"chunk_size\":null,\"chunk_overlap\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"LanguageRecursiveTextSplitter\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"The documents 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 Language\\nfrom langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass LanguageRecursiveTextSplitterComponent(CustomComponent):\\n display_name: str = \\\"Language Recursive Text Splitter\\\"\\n description: str = \\\"Split text into chunks of a specified length based on language.\\\"\\n documentation: str = \\\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\\\"\\n\\n def build_config(self):\\n options = [x.value for x in Language]\\n return {\\n \\\"documents\\\": {\\n \\\"display_name\\\": \\\"Documents\\\",\\n \\\"info\\\": \\\"The documents to split.\\\",\\n },\\n \\\"separator_type\\\": {\\n \\\"display_name\\\": \\\"Separator Type\\\",\\n \\\"info\\\": \\\"The type of separator to use.\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"options\\\": options,\\n \\\"value\\\": \\\"Python\\\",\\n },\\n \\\"separators\\\": {\\n \\\"display_name\\\": \\\"Separators\\\",\\n \\\"info\\\": \\\"The characters to split on.\\\",\\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 documents: list[Document],\\n chunk_size: Optional[int] = 1000,\\n chunk_overlap: Optional[int] = 200,\\n separator_type: str = \\\"Python\\\",\\n ) -> list[Document]:\\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 from langchain.text_splitter import RecursiveCharacterTextSplitter\\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\\n splitter = RecursiveCharacterTextSplitter.from_language(\\n language=Language(separator_type),\\n chunk_size=chunk_size,\\n chunk_overlap=chunk_overlap,\\n )\\n\\n docs = splitter.split_documents(documents)\\n return docs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"separator_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Python\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"cpp\",\"go\",\"java\",\"kotlin\",\"js\",\"ts\",\"php\",\"proto\",\"python\",\"rst\",\"ruby\",\"rust\",\"scala\",\"swift\",\"markdown\",\"latex\",\"html\",\"sol\",\"csharp\",\"cobol\",\"c\",\"lua\",\"perl\"],\"name\":\"separator_type\",\"display_name\":\"Separator Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"The type of separator to use.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Split text into chunks of a specified length based on language.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"Language Recursive Text Splitter\",\"documentation\":\"https://docs.langflow.org/components/text-splitters#languagerecursivetextsplitter\",\"custom_fields\":{\"documents\":null,\"chunk_size\":null,\"chunk_overlap\":null,\"separator_type\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"utilities\":{\"BingSearchAPIWrapper\":{\"template\":{\"bing_search_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"bing_search_url\",\"display_name\":\"Bing Search URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"bing_subscription_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"bing_subscription_key\",\"display_name\":\"Bing Subscription Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\n\\n# Assuming `BingSearchAPIWrapper` is a class that exists in the context\\n# and has the appropriate methods and attributes.\\n# We need to make sure this class is importable from the context where this code will be running.\\nfrom langchain_community.utilities.bing_search import BingSearchAPIWrapper\\n\\n\\nclass BingSearchAPIWrapperComponent(CustomComponent):\\n display_name = \\\"BingSearchAPIWrapper\\\"\\n description = \\\"Wrapper for Bing Search API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"bing_search_url\\\": {\\\"display_name\\\": \\\"Bing Search URL\\\"},\\n \\\"bing_subscription_key\\\": {\\n \\\"display_name\\\": \\\"Bing Subscription Key\\\",\\n \\\"password\\\": True,\\n },\\n \\\"k\\\": {\\\"display_name\\\": \\\"Number of results\\\", \\\"advanced\\\": True},\\n # 'k' is not included as it is not shown (show=False)\\n }\\n\\n def build(\\n self,\\n bing_search_url: str,\\n bing_subscription_key: str,\\n k: int = 10,\\n ) -> BingSearchAPIWrapper:\\n # 'k' has a default value and is not shown (show=False), so it is hardcoded here\\n return BingSearchAPIWrapper(bing_search_url=bing_search_url, bing_subscription_key=bing_subscription_key, k=k)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"k\",\"display_name\":\"Number of results\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper for Bing Search API.\",\"base_classes\":[\"BingSearchAPIWrapper\"],\"display_name\":\"BingSearchAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"bing_search_url\":null,\"bing_subscription_key\":null,\"k\":null},\"output_types\":[\"BingSearchAPIWrapper\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GoogleSearchAPIWrapper\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain_community.utilities.google_search import GoogleSearchAPIWrapper\\nfrom langflow import CustomComponent\\n\\n\\nclass GoogleSearchAPIWrapperComponent(CustomComponent):\\n display_name = \\\"GoogleSearchAPIWrapper\\\"\\n description = \\\"Wrapper for Google Search API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"google_api_key\\\": {\\\"display_name\\\": \\\"Google API Key\\\", \\\"password\\\": True},\\n \\\"google_cse_id\\\": {\\\"display_name\\\": \\\"Google CSE ID\\\", \\\"password\\\": True},\\n }\\n\\n def build(\\n self,\\n google_api_key: str,\\n google_cse_id: str,\\n ) -> Union[GoogleSearchAPIWrapper, Callable]:\\n return GoogleSearchAPIWrapper(google_api_key=google_api_key, google_cse_id=google_cse_id) # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"google_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"google_api_key\",\"display_name\":\"Google API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"google_cse_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"google_cse_id\",\"display_name\":\"Google CSE ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper for Google Search API.\",\"base_classes\":[\"GoogleSearchAPIWrapper\",\"Callable\"],\"display_name\":\"GoogleSearchAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"google_api_key\":null,\"google_cse_id\":null},\"output_types\":[\"GoogleSearchAPIWrapper\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GoogleSerperAPIWrapper\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Dict\\n\\n# Assuming the existence of GoogleSerperAPIWrapper class in the serper module\\n# If this class does not exist, you would need to create it or import the appropriate class from another module\\nfrom langchain_community.utilities.google_serper import GoogleSerperAPIWrapper\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass GoogleSerperAPIWrapperComponent(CustomComponent):\\n display_name = \\\"GoogleSerperAPIWrapper\\\"\\n description = \\\"Wrapper around the Serper.dev Google Search API.\\\"\\n\\n def build_config(self) -> Dict[str, Dict]:\\n return {\\n \\\"result_key_for_type\\\": {\\n \\\"display_name\\\": \\\"Result Key for Type\\\",\\n \\\"show\\\": True,\\n \\\"multiline\\\": False,\\n \\\"password\\\": False,\\n \\\"advanced\\\": False,\\n \\\"dynamic\\\": False,\\n \\\"info\\\": \\\"\\\",\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"list\\\": False,\\n \\\"value\\\": {\\n \\\"news\\\": \\\"news\\\",\\n \\\"places\\\": \\\"places\\\",\\n \\\"images\\\": \\\"images\\\",\\n \\\"search\\\": \\\"organic\\\",\\n },\\n },\\n \\\"serper_api_key\\\": {\\n \\\"display_name\\\": \\\"Serper API Key\\\",\\n \\\"show\\\": True,\\n \\\"multiline\\\": False,\\n \\\"password\\\": True,\\n \\\"advanced\\\": False,\\n \\\"dynamic\\\": False,\\n \\\"info\\\": \\\"\\\",\\n \\\"type\\\": \\\"str\\\",\\n \\\"list\\\": False,\\n },\\n }\\n\\n def build(\\n self,\\n serper_api_key: str,\\n ) -> GoogleSerperAPIWrapper:\\n return GoogleSerperAPIWrapper(serper_api_key=serper_api_key)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"serper_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"serper_api_key\",\"display_name\":\"Serper API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper around the Serper.dev Google Search API.\",\"base_classes\":[\"GoogleSerperAPIWrapper\"],\"display_name\":\"GoogleSerperAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"serper_api_key\":null},\"output_types\":[\"GoogleSerperAPIWrapper\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SearxSearchWrapper\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom typing import Optional, Dict\\nfrom langchain_community.utilities.searx_search import SearxSearchWrapper\\n\\n\\nclass SearxSearchWrapperComponent(CustomComponent):\\n display_name = \\\"SearxSearchWrapper\\\"\\n description = \\\"Wrapper for Searx API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"headers\\\": {\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"multiline\\\": True,\\n \\\"value\\\": '{\\\"Authorization\\\": \\\"Bearer \\\"}',\\n },\\n \\\"k\\\": {\\\"display_name\\\": \\\"k\\\", \\\"advanced\\\": True, \\\"field_type\\\": \\\"int\\\", \\\"value\\\": 10},\\n \\\"searx_host\\\": {\\n \\\"display_name\\\": \\\"Searx Host\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"value\\\": \\\"https://searx.example.com\\\",\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def build(\\n self,\\n k: int = 10,\\n headers: Optional[Dict[str, str]] = None,\\n searx_host: str = \\\"https://searx.example.com\\\",\\n ) -> SearxSearchWrapper:\\n return SearxSearchWrapper(headers=headers, k=k, searx_host=searx_host)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"Authorization\\\": \\\"Bearer \\\"}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"k\",\"display_name\":\"k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"searx_host\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"https://searx.example.com\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"searx_host\",\"display_name\":\"Searx Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper for Searx API.\",\"base_classes\":[\"SearxSearchWrapper\"],\"display_name\":\"SearxSearchWrapper\",\"documentation\":\"\",\"custom_fields\":{\"k\":null,\"headers\":null,\"searx_host\":null},\"output_types\":[\"SearxSearchWrapper\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SerpAPIWrapper\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain_community.utilities.serpapi import SerpAPIWrapper\\nfrom langflow import CustomComponent\\n\\n\\nclass SerpAPIWrapperComponent(CustomComponent):\\n display_name = \\\"SerpAPIWrapper\\\"\\n description = \\\"Wrapper around SerpAPI\\\"\\n\\n def build_config(self):\\n return {\\n \\\"serpapi_api_key\\\": {\\\"display_name\\\": \\\"SerpAPI API Key\\\", \\\"type\\\": \\\"str\\\", \\\"password\\\": True},\\n \\\"params\\\": {\\n \\\"display_name\\\": \\\"Parameters\\\",\\n \\\"type\\\": \\\"dict\\\",\\n \\\"advanced\\\": True,\\n \\\"multiline\\\": True,\\n \\\"value\\\": '{\\\"engine\\\": \\\"google\\\",\\\"google_domain\\\": \\\"google.com\\\",\\\"gl\\\": \\\"us\\\",\\\"hl\\\": \\\"en\\\"}',\\n },\\n }\\n\\n def build(\\n self,\\n serpapi_api_key: str,\\n params: dict,\\n ) -> Union[SerpAPIWrapper, Callable]: # Removed quotes around SerpAPIWrapper\\n return SerpAPIWrapper( # type: ignore\\n serpapi_api_key=serpapi_api_key,\\n params=params,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"params\":{\"type\":\"dict\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"{\\\"engine\\\": \\\"google\\\",\\\"google_domain\\\": \\\"google.com\\\",\\\"gl\\\": \\\"us\\\",\\\"hl\\\": \\\"en\\\"}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"params\",\"display_name\":\"Parameters\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"serpapi_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"serpapi_api_key\",\"display_name\":\"SerpAPI API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper around SerpAPI\",\"base_classes\":[\"Callable\",\"SerpAPIWrapper\"],\"display_name\":\"SerpAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"serpapi_api_key\":null,\"params\":null},\"output_types\":[\"SerpAPIWrapper\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"WikipediaAPIWrapper\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain_community.utilities.wikipedia import WikipediaAPIWrapper\\nfrom langflow import CustomComponent\\n\\n# Assuming WikipediaAPIWrapper is a class that needs to be imported.\\n# The import statement is not included as it is not provided in the JSON\\n# and the actual implementation details are unknown.\\n\\n\\nclass WikipediaAPIWrapperComponent(CustomComponent):\\n display_name = \\\"WikipediaAPIWrapper\\\"\\n description = \\\"Wrapper around WikipediaAPI.\\\"\\n\\n def build_config(self):\\n return {}\\n\\n def build(\\n self,\\n top_k_results: int = 3,\\n lang: str = \\\"en\\\",\\n load_all_available_meta: bool = False,\\n doc_content_chars_max: int = 4000,\\n ) -> Union[WikipediaAPIWrapper, Callable]:\\n return WikipediaAPIWrapper( # type: ignore\\n top_k_results=top_k_results,\\n lang=lang,\\n load_all_available_meta=load_all_available_meta,\\n doc_content_chars_max=doc_content_chars_max,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"doc_content_chars_max\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":4000,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"doc_content_chars_max\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"lang\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"en\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"lang\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"load_all_available_meta\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"load_all_available_meta\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_k_results\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":3,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k_results\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper around WikipediaAPI.\",\"base_classes\":[\"WikipediaAPIWrapper\",\"Callable\"],\"display_name\":\"WikipediaAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"top_k_results\":null,\"lang\":null,\"load_all_available_meta\":null,\"doc_content_chars_max\":null},\"output_types\":[\"WikipediaAPIWrapper\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"WolframAlphaAPIWrapper\":{\"template\":{\"appid\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"appid\",\"display_name\":\"App ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Union\\n\\nfrom langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper\\nfrom langflow import CustomComponent\\n\\n# Since all the fields in the JSON have show=False, we will only create a basic component\\n# without any configurable fields.\\n\\n\\nclass WolframAlphaAPIWrapperComponent(CustomComponent):\\n display_name = \\\"WolframAlphaAPIWrapper\\\"\\n description = \\\"Wrapper for Wolfram Alpha.\\\"\\n\\n def build_config(self):\\n return {\\\"appid\\\": {\\\"display_name\\\": \\\"App ID\\\", \\\"type\\\": \\\"str\\\", \\\"password\\\": True}}\\n\\n def build(self, appid: str) -> Union[Callable, WolframAlphaAPIWrapper]:\\n return WolframAlphaAPIWrapper(wolfram_alpha_appid=appid) # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Wrapper for Wolfram Alpha.\",\"base_classes\":[\"WolframAlphaAPIWrapper\",\"Callable\"],\"display_name\":\"WolframAlphaAPIWrapper\",\"documentation\":\"\",\"custom_fields\":{\"appid\":null},\"output_types\":[\"Callable\",\"WolframAlphaAPIWrapper\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"RunnableExecutor\":{\"template\":{\"runnable\":{\"type\":\"Runnable\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"runnable\",\"display_name\":\"Runnable\",\"advanced\":false,\"dynamic\":false,\"info\":\"The runnable to execute.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_core.runnables import Runnable\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass RunnableExecComponent(CustomComponent):\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n display_name = \\\"Runnable Executor\\\"\\n beta = True\\n\\n def build_config(self):\\n return {\\n \\\"input_key\\\": {\\n \\\"display_name\\\": \\\"Input Key\\\",\\n \\\"info\\\": \\\"The key to use for the input.\\\",\\n },\\n \\\"inputs\\\": {\\n \\\"display_name\\\": \\\"Inputs\\\",\\n \\\"info\\\": \\\"The inputs to pass to the runnable.\\\",\\n },\\n \\\"runnable\\\": {\\n \\\"display_name\\\": \\\"Runnable\\\",\\n \\\"info\\\": \\\"The runnable to execute.\\\",\\n },\\n \\\"output_key\\\": {\\n \\\"display_name\\\": \\\"Output Key\\\",\\n \\\"info\\\": \\\"The key to use for the output.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n input_key: str,\\n inputs: str,\\n runnable: Runnable,\\n output_key: str = \\\"output\\\",\\n ) -> Text:\\n result = runnable.invoke({input_key: inputs})\\n result = result.get(output_key)\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"input_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"input_key\",\"display_name\":\"Input Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The key to use for the input.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Inputs\",\"advanced\":false,\"dynamic\":false,\"info\":\"The inputs to pass to the runnable.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"output_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"output\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"output_key\",\"display_name\":\"Output Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The key to use for the output.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Runnable Executor\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"input_key\":null,\"inputs\":null,\"runnable\":null,\"output_key\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"DocumentToRecord\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List\\n\\nfrom langchain_core.documents import Document\\n\\nfrom langflow import CustomComponent\\nfrom langflow.schema import Record\\n\\n\\nclass DocumentToRecordComponent(CustomComponent):\\n display_name = \\\"Documents to Records\\\"\\n description = \\\"Convert documents to records.\\\"\\n\\n field_config = {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n }\\n\\n def build(self, documents: List[Document]) -> List[Record]:\\n if isinstance(documents, Document):\\n documents = [documents]\\n records = [Record.from_document(document) for document in documents]\\n self.status = records\\n return records\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Convert documents to records.\",\"base_classes\":[\"Record\"],\"display_name\":\"Documents to Records\",\"documentation\":\"\",\"custom_fields\":{\"documents\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GetRequest\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nimport requests\\nfrom langchain_core.documents import Document\\nfrom langflow import CustomComponent\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass GetRequest(CustomComponent):\\n display_name: str = \\\"GET Request\\\"\\n description: str = \\\"Make a GET request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#get-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\n \\\"display_name\\\": \\\"URL\\\",\\n \\\"info\\\": \\\"The URL to make the request to\\\",\\n \\\"is_list\\\": True,\\n },\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"timeout\\\": {\\n \\\"display_name\\\": \\\"Timeout\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"The timeout to use for the request.\\\",\\n \\\"value\\\": 5,\\n },\\n }\\n\\n def get_document(self, session: requests.Session, url: str, headers: Optional[dict], timeout: int) -> Document:\\n try:\\n response = session.get(url, headers=headers, timeout=int(timeout))\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except requests.Timeout:\\n return Document(\\n page_content=\\\"Request Timed Out\\\",\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 408},\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n url: str,\\n headers: Optional[dict] = None,\\n timeout: int = 5,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n urls = url if isinstance(url, list) else [url]\\n with requests.Session() as session:\\n documents = [self.get_document(session, u, headers, timeout) for u in urls]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"title_case\":false},\"timeout\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":false,\"dynamic\":false,\"info\":\"The timeout to use for the request.\",\"title_case\":false},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Make a GET request to the given URL.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"GET Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#get-request\",\"custom_fields\":{\"url\":null,\"headers\":null,\"timeout\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SQLExecutor\":{\"template\":{\"database\":{\"type\":\"SQLDatabase\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"database\",\"display_name\":\"Database\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"add_error\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"add_error\",\"display_name\":\"Add Error\",\"advanced\":false,\"dynamic\":false,\"info\":\"Add the error to the result.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool\\nfrom langchain_experimental.sql.base import SQLDatabase\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass SQLExecutorComponent(CustomComponent):\\n display_name = \\\"SQL Executor\\\"\\n description = \\\"Execute SQL query.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"database\\\": {\\\"display_name\\\": \\\"Database\\\"},\\n \\\"include_columns\\\": {\\n \\\"display_name\\\": \\\"Include Columns\\\",\\n \\\"info\\\": \\\"Include columns in the result.\\\",\\n },\\n \\\"passthrough\\\": {\\n \\\"display_name\\\": \\\"Passthrough\\\",\\n \\\"info\\\": \\\"If an error occurs, return the query instead of raising an exception.\\\",\\n },\\n \\\"add_error\\\": {\\n \\\"display_name\\\": \\\"Add Error\\\",\\n \\\"info\\\": \\\"Add the error to the result.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n query: str,\\n database: SQLDatabase,\\n include_columns: bool = False,\\n passthrough: bool = False,\\n add_error: bool = False,\\n ) -> Text:\\n error = None\\n try:\\n tool = QuerySQLDataBaseTool(db=database)\\n result = tool.run(query, include_columns=include_columns)\\n self.status = result\\n except Exception as e:\\n result = str(e)\\n self.status = result\\n if not passthrough:\\n raise e\\n error = repr(e)\\n\\n if add_error and error is not None:\\n result = f\\\"{result}\\\\n\\\\nError: {error}\\\\n\\\\nQuery: {query}\\\"\\n elif error is not None:\\n # Then we won't add the error to the result\\n # but since we are in passthrough mode, we will return the query\\n result = query\\n\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"include_columns\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"include_columns\",\"display_name\":\"Include Columns\",\"advanced\":false,\"dynamic\":false,\"info\":\"Include columns in the result.\",\"title_case\":false},\"passthrough\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"passthrough\",\"display_name\":\"Passthrough\",\"advanced\":false,\"dynamic\":false,\"info\":\"If an error occurs, return the query instead of raising an exception.\",\"title_case\":false},\"query\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"query\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Execute SQL query.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"SQL Executor\",\"documentation\":\"\",\"custom_fields\":{\"query\":null,\"database\":null,\"include_columns\":null,\"passthrough\":null,\"add_error\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ShouldRunNext\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"The language model to use for the decision.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"# Implement ShouldRunNext component\\nfrom langchain_core.prompts import PromptTemplate\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, Prompt\\n\\n\\nclass ShouldRunNext(CustomComponent):\\n display_name = \\\"Should Run Next\\\"\\n description = \\\"Decides whether to run the next component.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt\\\",\\n \\\"info\\\": \\\"The prompt to use for the decision. It should generate a boolean response (True or False).\\\",\\n },\\n \\\"llm\\\": {\\n \\\"display_name\\\": \\\"LLM\\\",\\n \\\"info\\\": \\\"The language model to use for the decision.\\\",\\n },\\n }\\n\\n def build(self, template: Prompt, llm: BaseLanguageModel, **kwargs) -> dict:\\n # This is a simple component that always returns True\\n prompt_template = PromptTemplate.from_template(template)\\n\\n attributes_to_check = [\\\"text\\\", \\\"page_content\\\"]\\n for key, value in kwargs.items():\\n for attribute in attributes_to_check:\\n if hasattr(value, attribute):\\n kwargs[key] = getattr(value, attribute)\\n\\n chain = prompt_template | llm\\n result = chain.invoke(kwargs)\\n if hasattr(result, \\\"content\\\") and isinstance(result.content, str):\\n result = result.content\\n elif isinstance(result, str):\\n result = result\\n else:\\n result = result.get(\\\"response\\\")\\n\\n if result.lower() not in [\\\"true\\\", \\\"false\\\"]:\\n raise ValueError(\\\"The prompt should generate a boolean response (True or False).\\\")\\n # The string should be the words true or false\\n # if not raise an error\\n bool_result = result.lower() == \\\"true\\\"\\n return {\\\"condition\\\": bool_result, \\\"result\\\": kwargs}\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"template\":{\"type\":\"prompt\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"template\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Decides whether to run the next component.\",\"base_classes\":[\"object\",\"dict\"],\"display_name\":\"Should Run Next\",\"documentation\":\"\",\"custom_fields\":{\"template\":null,\"llm\":null},\"output_types\":[\"dict\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"PythonFunction\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Code\\nfrom langflow.interface.custom.utils import get_function\\n\\n\\nclass PythonFunctionComponent(CustomComponent):\\n display_name = \\\"Python Function\\\"\\n description = \\\"Define a Python function.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"function_code\\\": {\\n \\\"display_name\\\": \\\"Code\\\",\\n \\\"info\\\": \\\"The code for the function.\\\",\\n \\\"show\\\": True,\\n },\\n }\\n\\n def build(self, function_code: Code) -> Callable:\\n self.status = function_code\\n func = get_function(function_code)\\n return func\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"function_code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"function_code\",\"display_name\":\"Code\",\"advanced\":false,\"dynamic\":false,\"info\":\"The code for the function.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Define a Python function.\",\"base_classes\":[\"Callable\"],\"display_name\":\"Python Function\",\"documentation\":\"\",\"custom_fields\":{\"function_code\":null},\"output_types\":[\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"PostRequest\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nimport requests\\nfrom langchain_core.documents import Document\\nfrom langflow import CustomComponent\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass PostRequest(CustomComponent):\\n display_name: str = \\\"POST Request\\\"\\n description: str = \\\"Make a POST request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#post-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def post_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> Document:\\n try:\\n response = session.post(url, headers=headers, data=document.page_content)\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": 500,\\n },\\n )\\n\\n def build(\\n self,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> list[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(isinstance(doc, Document) for doc in document):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [self.post_document(session, doc, url, headers) for doc in documents]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"headers\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"title_case\":false},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Make a POST request to the given URL.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"POST Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#post-request\",\"custom_fields\":{\"document\":null,\"url\":null,\"headers\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"IDGenerator\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"import uuid\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass UUIDGeneratorComponent(CustomComponent):\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n display_name = \\\"Unique ID Generator\\\"\\n description = \\\"Generates a unique ID.\\\"\\n\\n def generate(self, *args, **kwargs):\\n return str(uuid.uuid4().hex)\\n\\n def build_config(self):\\n return {\\\"unique_id\\\": {\\\"display_name\\\": \\\"Value\\\", \\\"value\\\": self.generate}}\\n\\n def build(self, unique_id: str) -> str:\\n return unique_id\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"unique_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"a62d43140aba4c799af4ddc400295790\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"unique_id\",\"display_name\":\"Value\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"refresh\":true,\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Generates a unique ID.\",\"base_classes\":[\"object\",\"str\"],\"display_name\":\"Unique ID Generator\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"unique_id\":null},\"output_types\":[\"str\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"SQLDatabase\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_experimental.sql.base import SQLDatabase\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass SQLDatabaseComponent(CustomComponent):\\n display_name = \\\"SQLDatabase\\\"\\n description = \\\"SQL Database\\\"\\n\\n def build_config(self):\\n return {\\n \\\"uri\\\": {\\\"display_name\\\": \\\"URI\\\", \\\"info\\\": \\\"URI to the database.\\\"},\\n }\\n\\n def clean_up_uri(self, uri: str) -> str:\\n if uri.startswith(\\\"postgresql://\\\"):\\n uri = uri.replace(\\\"postgresql://\\\", \\\"postgres://\\\")\\n return uri.strip()\\n\\n def build(self, uri: str) -> SQLDatabase:\\n uri = self.clean_up_uri(uri)\\n return SQLDatabase.from_uri(uri)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"uri\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"uri\",\"display_name\":\"URI\",\"advanced\":false,\"dynamic\":false,\"info\":\"URI to the database.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"SQL Database\",\"base_classes\":[\"object\",\"SQLDatabase\"],\"display_name\":\"SQLDatabase\",\"documentation\":\"\",\"custom_fields\":{\"uri\":null},\"output_types\":[\"SQLDatabase\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"RecordsAsText\":{\"template\":{\"records\":{\"type\":\"Record\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"records\",\"display_name\":\"Records\",\"advanced\":false,\"dynamic\":false,\"info\":\"The records to convert to text.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Text\\nfrom langflow.schema import Record\\n\\n\\nclass RecordsAsTextComponent(CustomComponent):\\n display_name = \\\"Records to Text\\\"\\n description = \\\"Converts Records a list of Records to text using a template.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"records\\\": {\\n \\\"display_name\\\": \\\"Records\\\",\\n \\\"info\\\": \\\"The records to convert to text.\\\",\\n },\\n \\\"template\\\": {\\n \\\"display_name\\\": \\\"Template\\\",\\n \\\"info\\\": \\\"The template to use for formatting the records. It must contain the keys {text} and {data}.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n records: list[Record],\\n template: str = \\\"Text: {text}\\\\nData: {data}\\\",\\n ) -> Text:\\n if isinstance(records, Record):\\n records = [records]\\n\\n formated_records = [\\n template.format(text=record.text, data=record.data, **record.data)\\n for record in records\\n ]\\n result_string = \\\"\\\\n\\\".join(formated_records)\\n self.status = result_string\\n return result_string\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"template\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"Text: {text}\\\\nData: {data}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"template\",\"display_name\":\"Template\",\"advanced\":false,\"dynamic\":false,\"info\":\"The template to use for formatting the records. It must contain the keys {text} and {data}.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Converts Records a list of Records to text using a template.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Records to Text\",\"documentation\":\"\",\"custom_fields\":{\"records\":null,\"template\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"UpdateRequest\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nimport requests\\nfrom langchain_core.documents import Document\\nfrom langflow import CustomComponent\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass UpdateRequest(CustomComponent):\\n display_name: str = \\\"Update Request\\\"\\n description: str = \\\"Make a PATCH request to the given URL.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#update-request\\\"\\n beta: bool = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"info\\\": \\\"The URL to make the request to.\\\"},\\n \\\"headers\\\": {\\n \\\"display_name\\\": \\\"Headers\\\",\\n \\\"field_type\\\": \\\"NestedDict\\\",\\n \\\"info\\\": \\\"The headers to send with the request.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n \\\"method\\\": {\\n \\\"display_name\\\": \\\"Method\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"The HTTP method to use.\\\",\\n \\\"options\\\": [\\\"PATCH\\\", \\\"PUT\\\"],\\n \\\"value\\\": \\\"PATCH\\\",\\n },\\n }\\n\\n def update_document(\\n self,\\n session: requests.Session,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n method: str = \\\"PATCH\\\",\\n ) -> Document:\\n try:\\n if method == \\\"PATCH\\\":\\n response = session.patch(url, headers=headers, data=document.page_content)\\n elif method == \\\"PUT\\\":\\n response = session.put(url, headers=headers, data=document.page_content)\\n else:\\n raise ValueError(f\\\"Unsupported method: {method}\\\")\\n try:\\n response_json = response.json()\\n result = orjson_dumps(response_json, indent_2=False)\\n except Exception:\\n result = response.text\\n self.repr_value = result\\n return Document(\\n page_content=result,\\n metadata={\\n \\\"source\\\": url,\\n \\\"headers\\\": headers,\\n \\\"status_code\\\": response.status_code,\\n },\\n )\\n except Exception as exc:\\n return Document(\\n page_content=str(exc),\\n metadata={\\\"source\\\": url, \\\"headers\\\": headers, \\\"status_code\\\": 500},\\n )\\n\\n def build(\\n self,\\n method: str,\\n document: Document,\\n url: str,\\n headers: Optional[dict] = None,\\n ) -> List[Document]:\\n if headers is None:\\n headers = {}\\n\\n if not isinstance(document, list) and isinstance(document, Document):\\n documents: list[Document] = [document]\\n elif isinstance(document, list) and all(isinstance(doc, Document) for doc in document):\\n documents = document\\n else:\\n raise ValueError(\\\"document must be a Document or a list of Documents\\\")\\n\\n with requests.Session() as session:\\n documents = [self.update_document(session, doc, url, headers, method) for doc in documents]\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"headers\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"headers\",\"display_name\":\"Headers\",\"advanced\":false,\"dynamic\":false,\"info\":\"The headers to send with the request.\",\"title_case\":false},\"method\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"PATCH\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"PATCH\",\"PUT\"],\"name\":\"method\",\"display_name\":\"Method\",\"advanced\":false,\"dynamic\":false,\"info\":\"The HTTP method to use.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"The URL to make the request to.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Make a PATCH request to the given URL.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"Update Request\",\"documentation\":\"https://docs.langflow.org/components/utilities#update-request\",\"custom_fields\":{\"method\":null,\"document\":null,\"url\":null,\"headers\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"JSONDocumentBuilder\":{\"template\":{\"document\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document\",\"display_name\":\"Document\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"### JSON Document Builder\\n\\n# Build a Document containing a JSON object using a key and another Document page content.\\n\\n# **Params**\\n\\n# - **Key:** The key to use for the JSON object.\\n# - **Document:** The Document page to use for the JSON object.\\n\\n# **Output**\\n\\n# - **Document:** The Document containing the JSON object.\\n\\nfrom langchain_core.documents import Document\\nfrom langflow import CustomComponent\\nfrom langflow.services.database.models.base import orjson_dumps\\n\\n\\nclass JSONDocumentBuilder(CustomComponent):\\n display_name: str = \\\"JSON Document Builder\\\"\\n description: str = \\\"Build a Document containing a JSON object using a key and another Document page content.\\\"\\n output_types: list[str] = [\\\"Document\\\"]\\n beta = True\\n documentation: str = \\\"https://docs.langflow.org/components/utilities#json-document-builder\\\"\\n\\n field_config = {\\n \\\"key\\\": {\\\"display_name\\\": \\\"Key\\\"},\\n \\\"document\\\": {\\\"display_name\\\": \\\"Document\\\"},\\n }\\n\\n def build(\\n self,\\n key: str,\\n document: Document,\\n ) -> Document:\\n documents = None\\n if isinstance(document, list):\\n documents = [\\n Document(page_content=orjson_dumps({key: doc.page_content}, indent_2=False)) for doc in document\\n ]\\n elif isinstance(document, Document):\\n documents = Document(page_content=orjson_dumps({key: document.page_content}, indent_2=False))\\n else:\\n raise TypeError(f\\\"Expected Document or list of Documents, got {type(document)}\\\")\\n self.repr_value = documents\\n return documents\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"key\",\"display_name\":\"Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Build a Document containing a JSON object using a key and another Document page content.\",\"base_classes\":[\"Serializable\",\"Document\"],\"display_name\":\"JSON Document Builder\",\"documentation\":\"https://docs.langflow.org/components/utilities#json-document-builder\",\"custom_fields\":{\"key\":null,\"document\":null},\"output_types\":[\"Document\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"output_parsers\":{\"ResponseSchema\":{\"template\":{\"description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"password\":false,\"name\":\"description\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"type\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"string\",\"fileTypes\":[],\"password\":false,\"name\":\"type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"ResponseSchema\"},\"description\":\"A schema for a response from a structured output parser.\",\"base_classes\":[\"ResponseSchema\"],\"display_name\":\"ResponseSchema\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"StructuredOutputParser\":{\"template\":{\"response_schemas\":{\"type\":\"ResponseSchema\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"password\":false,\"name\":\"response_schemas\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"StructuredOutputParser\"},\"description\":\"\",\"base_classes\":[\"BaseOutputParser\",\"Runnable\",\"BaseLLMOutputParser\",\"Generic\",\"RunnableSerializable\",\"StructuredOutputParser\",\"Serializable\",\"object\"],\"display_name\":\"StructuredOutputParser\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/output_parsers/structured\",\"custom_fields\":{},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":false}},\"retrievers\":{\"AmazonKendra\":{\"template\":{\"attribute_filter\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"attribute_filter\",\"display_name\":\"Attribute Filter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.schema import BaseRetriever\\nfrom langchain_community.retrievers import AmazonKendraRetriever\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonKendraRetrieverComponent(CustomComponent):\\n display_name: str = \\\"Amazon Kendra Retriever\\\"\\n description: str = \\\"Retriever that uses the Amazon Kendra API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"index_id\\\": {\\\"display_name\\\": \\\"Index ID\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"Region Name\\\"},\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"attribute_filter\\\": {\\n \\\"display_name\\\": \\\"Attribute Filter\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"field_type\\\": \\\"int\\\"},\\n \\\"user_context\\\": {\\n \\\"display_name\\\": \\\"User Context\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n index_id: str,\\n top_k: int = 3,\\n region_name: Optional[str] = None,\\n credentials_profile_name: Optional[str] = None,\\n attribute_filter: Optional[dict] = None,\\n user_context: Optional[dict] = None,\\n ) -> BaseRetriever:\\n try:\\n output = AmazonKendraRetriever(\\n index_id=index_id,\\n top_k=top_k,\\n region_name=region_name,\\n credentials_profile_name=credentials_profile_name,\\n attribute_filter=attribute_filter,\\n user_context=user_context,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonKendra API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"index_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_id\",\"display_name\":\"Index ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"Region Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":3,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"user_context\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"user_context\",\"display_name\":\"User Context\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Retriever that uses the Amazon Kendra API.\",\"base_classes\":[\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Amazon Kendra Retriever\",\"documentation\":\"\",\"custom_fields\":{\"index_id\":null,\"top_k\":null,\"region_name\":null,\"credentials_profile_name\":null,\"attribute_filter\":null,\"user_context\":null},\"output_types\":[\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VectaraSelfQueryRetriver\":{\"template\":{\"llm\":{\"type\":\"BaseLanguageModel\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"For self query retriever\",\"title_case\":false},\"vectorstore\":{\"type\":\"VectorStore\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectorstore\",\"display_name\":\"Vector Store\",\"advanced\":false,\"dynamic\":false,\"info\":\"Input Vectara Vectore Store\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List\\nfrom langflow import CustomComponent\\nimport json\\nfrom langchain.schema import BaseRetriever\\nfrom langchain.schema.vectorstore import VectorStore\\nfrom langchain.base_language import BaseLanguageModel\\nfrom langchain.retrievers.self_query.base import SelfQueryRetriever\\nfrom langchain.chains.query_constructor.base import AttributeInfo\\n\\n\\nclass VectaraSelfQueryRetriverComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing Vectara Self Query Retriever using a vector store.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Vectara Self Query Retriever for Vectara Vector Store\\\"\\n description: str = \\\"Implementation of Vectara Self Query Retriever\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query\\\"\\n beta = True\\n\\n field_config = {\\n \\\"code\\\": {\\\"show\\\": True},\\n \\\"vectorstore\\\": {\\\"display_name\\\": \\\"Vector Store\\\", \\\"info\\\": \\\"Input Vectara Vectore Store\\\"},\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\", \\\"info\\\": \\\"For self query retriever\\\"},\\n \\\"document_content_description\\\": {\\n \\\"display_name\\\": \\\"Document Content Description\\\",\\n \\\"info\\\": \\\"For self query retriever\\\",\\n },\\n \\\"metadata_field_info\\\": {\\n \\\"display_name\\\": \\\"Metadata Field Info\\\",\\n \\\"info\\\": 'Each metadata field info is a string in the form of key value pair dictionary containing additional search metadata.\\\\nExample input: {\\\"name\\\":\\\"speech\\\",\\\"description\\\":\\\"what name of the speech\\\",\\\"type\\\":\\\"string or list[string]\\\"}.\\\\nThe keys should remain constant(name, description, type)',\\n },\\n }\\n\\n def build(\\n self,\\n vectorstore: VectorStore,\\n document_content_description: str,\\n llm: BaseLanguageModel,\\n metadata_field_info: List[str],\\n ) -> BaseRetriever:\\n metadata_field_obj = []\\n\\n for meta in metadata_field_info:\\n meta_obj = json.loads(meta)\\n if \\\"name\\\" not in meta_obj or \\\"description\\\" not in meta_obj or \\\"type\\\" not in meta_obj:\\n raise Exception(\\\"Incorrect metadata field info format.\\\")\\n attribute_info = AttributeInfo(\\n name=meta_obj[\\\"name\\\"],\\n description=meta_obj[\\\"description\\\"],\\n type=meta_obj[\\\"type\\\"],\\n )\\n metadata_field_obj.append(attribute_info)\\n\\n return SelfQueryRetriever.from_llm(\\n llm, vectorstore, document_content_description, metadata_field_obj, verbose=True\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"document_content_description\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"document_content_description\",\"display_name\":\"Document Content Description\",\"advanced\":false,\"dynamic\":false,\"info\":\"For self query retriever\",\"title_case\":false,\"input_types\":[\"Text\"]},\"metadata_field_info\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata_field_info\",\"display_name\":\"Metadata Field Info\",\"advanced\":false,\"dynamic\":false,\"info\":\"Each metadata field info is a string in the form of key value pair dictionary containing additional search metadata.\\nExample input: {\\\"name\\\":\\\"speech\\\",\\\"description\\\":\\\"what name of the speech\\\",\\\"type\\\":\\\"string or list[string]\\\"}.\\nThe keys should remain constant(name, description, type)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vectara Self Query Retriever\",\"base_classes\":[\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Vectara Self Query Retriever for Vectara Vector Store\",\"documentation\":\"https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query\",\"custom_fields\":{\"vectorstore\":null,\"document_content_description\":null,\"llm\":null,\"metadata_field_info\":null},\"output_types\":[\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"MultiQueryRetriever\":{\"template\":{\"llm\":{\"type\":\"BaseLLM\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"llm\",\"display_name\":\"LLM\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prompt\":{\"type\":\"PromptTemplate\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prompt\",\"display_name\":\"Prompt\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"retriever\":{\"type\":\"BaseRetriever\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"retriever\",\"display_name\":\"Retriever\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Callable, Optional, Union\\n\\nfrom langchain.retrievers import MultiQueryRetriever\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLLM, BaseRetriever, PromptTemplate\\n\\n\\nclass MultiQueryRetrieverComponent(CustomComponent):\\n display_name = \\\"MultiQueryRetriever\\\"\\n description = \\\"Initialize from llm using default template.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever\\\"\\n\\n def build_config(self):\\n return {\\n \\\"llm\\\": {\\\"display_name\\\": \\\"LLM\\\"},\\n \\\"prompt\\\": {\\n \\\"display_name\\\": \\\"Prompt\\\",\\n \\\"default\\\": {\\n \\\"input_variables\\\": [\\\"question\\\"],\\n \\\"input_types\\\": {},\\n \\\"output_parser\\\": None,\\n \\\"partial_variables\\\": {},\\n \\\"template\\\": \\\"You are an AI language model assistant. Your task is \\\\n\\\"\\n \\\"to generate 3 different versions of the given user \\\\n\\\"\\n \\\"question to retrieve relevant documents from a vector database. \\\\n\\\"\\n \\\"By generating multiple perspectives on the user question, \\\\n\\\"\\n \\\"your goal is to help the user overcome some of the limitations \\\\n\\\"\\n \\\"of distance-based similarity search. Provide these alternative \\\\n\\\"\\n \\\"questions separated by newlines. Original question: {question}\\\",\\n \\\"template_format\\\": \\\"f-string\\\",\\n \\\"validate_template\\\": False,\\n \\\"_type\\\": \\\"prompt\\\",\\n },\\n },\\n \\\"retriever\\\": {\\\"display_name\\\": \\\"Retriever\\\"},\\n \\\"parser_key\\\": {\\\"display_name\\\": \\\"Parser Key\\\", \\\"default\\\": \\\"lines\\\"},\\n }\\n\\n def build(\\n self,\\n llm: BaseLLM,\\n retriever: BaseRetriever,\\n prompt: Optional[PromptTemplate] = None,\\n parser_key: str = \\\"lines\\\",\\n ) -> Union[Callable, MultiQueryRetriever]:\\n if not prompt:\\n return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, parser_key=parser_key)\\n else:\\n return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, prompt=prompt, parser_key=parser_key)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"parser_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"lines\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"parser_key\",\"display_name\":\"Parser Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Initialize from llm using default template.\",\"base_classes\":[],\"display_name\":\"MultiQueryRetriever\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever\",\"custom_fields\":{\"llm\":null,\"retriever\":null,\"prompt\":null,\"parser_key\":null},\"output_types\":[],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"MetalRetriever\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"client_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"client_id\",\"display_name\":\"Client ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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.schema import BaseRetriever\\nfrom langchain_community.retrievers import MetalRetriever\\nfrom metal_sdk.metal import Metal # type: ignore\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass MetalRetrieverComponent(CustomComponent):\\n display_name: str = \\\"Metal Retriever\\\"\\n description: str = \\\"Retriever that uses the Metal API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"password\\\": True},\\n \\\"client_id\\\": {\\\"display_name\\\": \\\"Client ID\\\", \\\"password\\\": True},\\n \\\"index_id\\\": {\\\"display_name\\\": \\\"Index ID\\\"},\\n \\\"params\\\": {\\\"display_name\\\": \\\"Parameters\\\"},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(self, api_key: str, client_id: str, index_id: str, params: Optional[dict] = None) -> BaseRetriever:\\n try:\\n metal = Metal(api_key=api_key, client_id=client_id, index_id=index_id)\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Metal API.\\\") from e\\n return MetalRetriever(client=metal, params=params or {})\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"index_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_id\",\"display_name\":\"Index ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"params\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"params\",\"display_name\":\"Parameters\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Retriever that uses the Metal API.\",\"base_classes\":[\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Metal Retriever\",\"documentation\":\"\",\"custom_fields\":{\"api_key\":null,\"client_id\":null,\"index_id\":null,\"params\":null},\"output_types\":[\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"custom_components\":{\"CustomComponent\":{\"template\":{\"param\":{\"type\":\"Data\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"param\",\"display_name\":\"Parameter\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langflow.field_typing import Data\\n\\n\\nclass Component(CustomComponent):\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\\"param\\\": {\\\"display_name\\\": \\\"Parameter\\\"}}\\n\\n def build(self, param: Data) -> Data:\\n return param\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"base_classes\":[\"object\",\"Data\"],\"display_name\":\"CustomComponent\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"param\":null},\"output_types\":[\"Data\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"vectorstores\":{\"Weaviate\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"embedding\":{\"type\":\"Embeddings\",\"required\":false,\"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},\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"attributes\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"attributes\",\"display_name\":\"Attributes\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nimport weaviate # type: ignore\\nfrom langchain.embeddings.base import Embeddings\\nfrom langchain.schema import BaseRetriever, Document\\nfrom langchain_community.vectorstores import VectorStore, Weaviate\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass WeaviateVectorStore(CustomComponent):\\n display_name: str = \\\"Weaviate\\\"\\n description: str = \\\"Implementation of Vector Store using Weaviate\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/weaviate\\\"\\n beta = True\\n field_config = {\\n \\\"url\\\": {\\\"display_name\\\": \\\"Weaviate URL\\\", \\\"value\\\": \\\"http://localhost:8080\\\"},\\n \\\"api_key\\\": {\\n \\\"display_name\\\": \\\"API Key\\\",\\n \\\"password\\\": True,\\n \\\"required\\\": False,\\n },\\n \\\"index_name\\\": {\\n \\\"display_name\\\": \\\"Index name\\\",\\n \\\"required\\\": False,\\n },\\n \\\"text_key\\\": {\\\"display_name\\\": \\\"Text Key\\\", \\\"required\\\": False, \\\"advanced\\\": True, \\\"value\\\": \\\"text\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"attributes\\\": {\\n \\\"display_name\\\": \\\"Attributes\\\",\\n \\\"required\\\": False,\\n \\\"is_list\\\": True,\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"search_by_text\\\": {\\\"display_name\\\": \\\"Search By Text\\\", \\\"field_type\\\": \\\"bool\\\", \\\"advanced\\\": True},\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n url: str,\\n search_by_text: bool = False,\\n api_key: Optional[str] = None,\\n index_name: Optional[str] = None,\\n text_key: str = \\\"text\\\",\\n embedding: Optional[Embeddings] = None,\\n documents: Optional[Document] = None,\\n attributes: Optional[list] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n if api_key:\\n auth_config = weaviate.AuthApiKey(api_key=api_key)\\n client = weaviate.Client(url=url, auth_client_secret=auth_config)\\n else:\\n client = weaviate.Client(url=url)\\n\\n def _to_pascal_case(word: str):\\n if word and not word[0].isupper():\\n word = word.capitalize()\\n\\n if word.isidentifier():\\n return word\\n\\n word = word.replace(\\\"-\\\", \\\" \\\").replace(\\\"_\\\", \\\" \\\")\\n parts = word.split()\\n pascal_case_word = \\\"\\\".join([part.capitalize() for part in parts])\\n\\n return pascal_case_word\\n\\n index_name = _to_pascal_case(index_name) if index_name else None\\n\\n if documents is not None and embedding is not None:\\n return Weaviate.from_documents(\\n client=client,\\n index_name=index_name,\\n documents=documents,\\n embedding=embedding,\\n by_text=search_by_text,\\n )\\n\\n return Weaviate(\\n client=client,\\n index_name=index_name,\\n text_key=text_key,\\n embedding=embedding,\\n by_text=search_by_text,\\n attributes=attributes if attributes is not None else [],\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_by_text\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_by_text\",\"display_name\":\"Search By Text\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"text_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"text_key\",\"display_name\":\"Text Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"http://localhost:8080\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"Weaviate URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Weaviate\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Weaviate\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/weaviate\",\"custom_fields\":{\"url\":null,\"search_by_text\":null,\"api_key\":null,\"index_name\":null,\"text_key\":null,\"embedding\":null,\"documents\":null,\"attributes\":null},\"output_types\":[\"VectorStore\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Vectara\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"If provided, will be upserted to corpus (optional)\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"import tempfile\\nimport urllib\\nimport urllib.request\\nfrom typing import List, Optional, Union\\n\\nfrom langchain_community.embeddings import FakeEmbeddings\\nfrom langchain_community.vectorstores.vectara import Vectara\\nfrom langchain_core.vectorstores import VectorStore\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseRetriever, Document\\n\\n\\nclass VectaraComponent(CustomComponent):\\n display_name: str = \\\"Vectara\\\"\\n description: str = \\\"Implementation of Vector Store using Vectara\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/vectara\\\"\\n beta = True\\n field_config = {\\n \\\"vectara_customer_id\\\": {\\n \\\"display_name\\\": \\\"Vectara Customer ID\\\",\\n },\\n \\\"vectara_corpus_id\\\": {\\n \\\"display_name\\\": \\\"Vectara Corpus ID\\\",\\n },\\n \\\"vectara_api_key\\\": {\\n \\\"display_name\\\": \\\"Vectara API Key\\\",\\n \\\"password\\\": True,\\n },\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"info\\\": \\\"If provided, will be upserted to corpus (optional)\\\"},\\n \\\"files_url\\\": {\\n \\\"display_name\\\": \\\"Files Url\\\",\\n \\\"info\\\": \\\"Make vectara object using url of files (optional)\\\",\\n },\\n }\\n\\n def build(\\n self,\\n vectara_customer_id: str,\\n vectara_corpus_id: str,\\n vectara_api_key: str,\\n files_url: Optional[List[str]] = None,\\n documents: Optional[Document] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n source = \\\"Langflow\\\"\\n\\n if documents is not None:\\n return Vectara.from_documents(\\n documents=documents, # type: ignore\\n embedding=FakeEmbeddings(size=768),\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=source,\\n )\\n\\n if files_url is not None:\\n files_list = []\\n for url in files_url:\\n name = tempfile.NamedTemporaryFile().name\\n urllib.request.urlretrieve(url, name)\\n files_list.append(name)\\n\\n return Vectara.from_files(\\n files=files_list,\\n embedding=FakeEmbeddings(size=768),\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=source,\\n )\\n\\n return Vectara(\\n vectara_customer_id=vectara_customer_id,\\n vectara_corpus_id=vectara_corpus_id,\\n vectara_api_key=vectara_api_key,\\n source=source,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"files_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"files_url\",\"display_name\":\"Files Url\",\"advanced\":false,\"dynamic\":false,\"info\":\"Make vectara object using url of files (optional)\",\"title_case\":false,\"input_types\":[\"Text\"]},\"vectara_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"vectara_api_key\",\"display_name\":\"Vectara API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"vectara_corpus_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectara_corpus_id\",\"display_name\":\"Vectara Corpus ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"vectara_customer_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vectara_customer_id\",\"display_name\":\"Vectara Customer ID\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Vectara\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Vectara\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/vectara\",\"custom_fields\":{\"vectara_customer_id\":null,\"vectara_corpus_id\":null,\"vectara_api_key\":null,\"files_url\":null,\"documents\":null},\"output_types\":[\"VectorStore\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Chroma\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"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, Document\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.chroma import Chroma\\n\\nfrom langflow import CustomComponent\\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 beta: bool = True\\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 \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\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 documents: Optional[List[Document]] = 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\\n 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\\n index_directory = self.resolve_path(index_directory)\\n\\n if documents is not None and embedding is not None:\\n if len(documents) == 0:\\n raise ValueError(\\n \\\"If documents are provided, there must be at least one document.\\\"\\n )\\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\":\"\",\"title_case\":false},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"langflow\",\"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\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Chroma\",\"icon\":\"Chroma\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"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,\"documents\":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\":{},\"pinned\":false,\"beta\":true},\"SupabaseVectorStore\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Union\\n\\nfrom langchain.schema import BaseRetriever\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.supabase import SupabaseVectorStore\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Document, Embeddings, NestedDict\\nfrom supabase.client import Client, create_client\\n\\n\\nclass SupabaseComponent(CustomComponent):\\n display_name = \\\"Supabase\\\"\\n description = \\\"Return VectorStore initialized from texts and embeddings.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"query_name\\\": {\\\"display_name\\\": \\\"Query Name\\\"},\\n \\\"search_kwargs\\\": {\\\"display_name\\\": \\\"Search Kwargs\\\", \\\"advanced\\\": True},\\n \\\"supabase_service_key\\\": {\\\"display_name\\\": \\\"Supabase Service Key\\\"},\\n \\\"supabase_url\\\": {\\\"display_name\\\": \\\"Supabase URL\\\"},\\n \\\"table_name\\\": {\\\"display_name\\\": \\\"Table Name\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n documents: List[Document],\\n query_name: str = \\\"\\\",\\n search_kwargs: NestedDict = {},\\n supabase_service_key: str = \\\"\\\",\\n supabase_url: str = \\\"\\\",\\n table_name: str = \\\"\\\",\\n ) -> Union[VectorStore, SupabaseVectorStore, BaseRetriever]:\\n supabase: Client = create_client(supabase_url, supabase_key=supabase_service_key)\\n return SupabaseVectorStore.from_documents(\\n documents=documents,\\n embedding=embedding,\\n query_name=query_name,\\n search_kwargs=search_kwargs,\\n client=supabase,\\n table_name=table_name,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"query_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"query_name\",\"display_name\":\"Query Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"display_name\":\"Search Kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"supabase_service_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"supabase_service_key\",\"display_name\":\"Supabase Service Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"supabase_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"supabase_url\",\"display_name\":\"Supabase URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"table_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"table_name\",\"display_name\":\"Table Name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Return VectorStore initialized from texts and embeddings.\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"SupabaseVectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Supabase\",\"documentation\":\"\",\"custom_fields\":{\"embedding\":null,\"documents\":null,\"query_name\":null,\"search_kwargs\":null,\"supabase_service_key\":null,\"supabase_url\":null,\"table_name\":null},\"output_types\":[\"VectorStore\",\"SupabaseVectorStore\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Redis\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langchain.embeddings.base import Embeddings\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.redis import Redis\\nfrom langchain_core.documents import Document\\nfrom langchain_core.retrievers import BaseRetriever\\nfrom langflow import CustomComponent\\n\\n\\nclass RedisComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using Redis.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Redis\\\"\\n description: str = \\\"Implementation of Vector Store using Redis\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/redis\\\"\\n beta = True\\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 \\\"index_name\\\": {\\\"display_name\\\": \\\"Index Name\\\", \\\"value\\\": \\\"your_index\\\"},\\n \\\"code\\\": {\\\"show\\\": False, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"schema\\\": {\\\"display_name\\\": \\\"Schema\\\", \\\"file_types\\\": [\\\".yaml\\\"]},\\n \\\"redis_server_url\\\": {\\n \\\"display_name\\\": \\\"Redis Server Connection String\\\",\\n \\\"advanced\\\": False,\\n },\\n \\\"redis_index_name\\\": {\\\"display_name\\\": \\\"Redis Index\\\", \\\"advanced\\\": False},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n redis_server_url: str,\\n redis_index_name: str,\\n schema: Optional[str] = None,\\n documents: Optional[Document] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n \\\"\\\"\\\"\\n Builds the Vector Store or BaseRetriever object.\\n\\n Args:\\n - embedding (Embeddings): The embeddings to use for the Vector Store.\\n - documents (Optional[Document]): The documents to use for the Vector Store.\\n - redis_index_name (str): The name of the Redis index.\\n - redis_server_url (str): The URL for the Redis server.\\n\\n Returns:\\n - VectorStore: The Vector Store object.\\n \\\"\\\"\\\"\\n if documents is None:\\n if schema is None:\\n raise ValueError(\\\"If no documents are provided, a schema must be provided.\\\")\\n redis_vs = Redis.from_existing_index(\\n embedding=embedding,\\n index_name=redis_index_name,\\n schema=schema,\\n key_prefix=None,\\n redis_url=redis_server_url,\\n )\\n else:\\n redis_vs = Redis.from_documents(\\n documents=documents, # type: ignore\\n embedding=embedding,\\n redis_url=redis_server_url,\\n index_name=redis_index_name,\\n )\\n return redis_vs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"redis_index_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"redis_index_name\",\"display_name\":\"Redis Index\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"redis_server_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"redis_server_url\",\"display_name\":\"Redis Server Connection String\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"schema\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".yaml\"],\"file_path\":\"\",\"password\":false,\"name\":\"schema\",\"display_name\":\"Schema\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using Redis\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Redis\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/redis\",\"custom_fields\":{\"embedding\":null,\"redis_server_url\":null,\"redis_index_name\":null,\"schema\":null,\"documents\":null},\"output_types\":[\"VectorStore\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"pgvector\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langchain.embeddings.base import Embeddings\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.pgvector import PGVector\\nfrom langchain_core.documents import Document\\nfrom langchain_core.retrievers import BaseRetriever\\nfrom langflow import CustomComponent\\n\\n\\nclass PGVectorComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using PostgreSQL.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"PGVector\\\"\\n description: str = \\\"Implementation of Vector Store using PostgreSQL\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/vectorstores/pgvector\\\"\\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 \\\"code\\\": {\\\"show\\\": False},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"pg_server_url\\\": {\\n \\\"display_name\\\": \\\"PostgreSQL Server Connection String\\\",\\n \\\"advanced\\\": False,\\n },\\n \\\"collection_name\\\": {\\\"display_name\\\": \\\"Table\\\", \\\"advanced\\\": False},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n pg_server_url: str,\\n collection_name: str,\\n documents: Optional[Document] = None,\\n ) -> Union[VectorStore, BaseRetriever]:\\n \\\"\\\"\\\"\\n Builds the Vector Store or BaseRetriever object.\\n\\n Args:\\n - embedding (Embeddings): The embeddings to use for the Vector Store.\\n - documents (Optional[Document]): The documents to use for the Vector Store.\\n - collection_name (str): The name of the PG table.\\n - pg_server_url (str): The URL for the PG server.\\n\\n Returns:\\n - VectorStore: The Vector Store object.\\n \\\"\\\"\\\"\\n\\n try:\\n if documents is None:\\n vector_store = PGVector.from_existing_index(\\n embedding=embedding,\\n collection_name=collection_name,\\n connection_string=pg_server_url,\\n )\\n else:\\n vector_store = PGVector.from_documents(\\n embedding=embedding,\\n documents=documents, # type: ignore\\n collection_name=collection_name,\\n connection_string=pg_server_url,\\n )\\n except Exception as e:\\n raise RuntimeError(f\\\"Failed to build PGVector: {e}\\\")\\n return vector_store\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Table\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"pg_server_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pg_server_url\",\"display_name\":\"PostgreSQL Server Connection String\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Implementation of Vector Store using PostgreSQL\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"PGVector\",\"documentation\":\"https://python.langchain.com/docs/integrations/vectorstores/pgvector\",\"custom_fields\":{\"embedding\":null,\"pg_server_url\":null,\"collection_name\":null,\"documents\":null},\"output_types\":[\"VectorStore\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Pinecone\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"import os\\nfrom typing import List, Optional, Union\\n\\nimport pinecone # type: ignore\\nfrom langchain.schema import BaseRetriever\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.pinecone import Pinecone\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Document, Embeddings\\n\\n\\nclass PineconeComponent(CustomComponent):\\n display_name = \\\"Pinecone\\\"\\n description = \\\"Construct Pinecone wrapper from raw documents.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"index_name\\\": {\\\"display_name\\\": \\\"Index Name\\\"},\\n \\\"namespace\\\": {\\\"display_name\\\": \\\"Namespace\\\"},\\n \\\"pinecone_api_key\\\": {\\\"display_name\\\": \\\"Pinecone API Key\\\", \\\"default\\\": \\\"\\\", \\\"password\\\": True, \\\"required\\\": True},\\n \\\"pinecone_env\\\": {\\\"display_name\\\": \\\"Pinecone Environment\\\", \\\"default\\\": \\\"\\\", \\\"required\\\": True},\\n \\\"search_kwargs\\\": {\\\"display_name\\\": \\\"Search Kwargs\\\", \\\"default\\\": \\\"{}\\\"},\\n \\\"pool_threads\\\": {\\\"display_name\\\": \\\"Pool Threads\\\", \\\"default\\\": 1, \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n pinecone_env: str,\\n documents: List[Document],\\n text_key: str = \\\"text\\\",\\n pool_threads: int = 4,\\n index_name: Optional[str] = None,\\n pinecone_api_key: Optional[str] = None,\\n namespace: Optional[str] = \\\"default\\\",\\n ) -> Union[VectorStore, Pinecone, BaseRetriever]:\\n if pinecone_api_key is None or pinecone_env is None:\\n raise ValueError(\\\"Pinecone API Key and Environment are required.\\\")\\n if os.getenv(\\\"PINECONE_API_KEY\\\") is None and pinecone_api_key is None:\\n raise ValueError(\\\"Pinecone API Key is required.\\\")\\n\\n pinecone.init(api_key=pinecone_api_key, environment=pinecone_env) # type: ignore\\n if not index_name:\\n raise ValueError(\\\"Index Name is required.\\\")\\n if documents:\\n return Pinecone.from_documents(\\n documents=documents,\\n embedding=embedding,\\n index_name=index_name,\\n pool_threads=pool_threads,\\n namespace=namespace,\\n text_key=text_key,\\n )\\n\\n return Pinecone.from_existing_index(\\n index_name=index_name,\\n embedding=embedding,\\n text_key=text_key,\\n namespace=namespace,\\n pool_threads=pool_threads,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"index_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"namespace\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"default\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"namespace\",\"display_name\":\"Namespace\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"pinecone_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"pinecone_api_key\",\"display_name\":\"Pinecone API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"pinecone_env\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pinecone_env\",\"display_name\":\"Pinecone Environment\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"pool_threads\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":4,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"pool_threads\",\"display_name\":\"Pool Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"text_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"text_key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Construct Pinecone wrapper from raw documents.\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"Pinecone\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Pinecone\",\"documentation\":\"\",\"custom_fields\":{\"embedding\":null,\"pinecone_env\":null,\"documents\":null,\"text_key\":null,\"pool_threads\":null,\"index_name\":null,\"pinecone_api_key\":null,\"namespace\":null},\"output_types\":[\"VectorStore\",\"Pinecone\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"Qdrant\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langchain.schema import BaseRetriever\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.qdrant import Qdrant\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Document, Embeddings, NestedDict\\n\\n\\nclass QdrantComponent(CustomComponent):\\n display_name = \\\"Qdrant\\\"\\n description = \\\"Construct Qdrant wrapper from a list of texts.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"password\\\": True, \\\"advanced\\\": True},\\n \\\"collection_name\\\": {\\\"display_name\\\": \\\"Collection Name\\\"},\\n \\\"content_payload_key\\\": {\\\"display_name\\\": \\\"Content Payload Key\\\", \\\"advanced\\\": True},\\n \\\"distance_func\\\": {\\\"display_name\\\": \\\"Distance Function\\\", \\\"advanced\\\": True},\\n \\\"grpc_port\\\": {\\\"display_name\\\": \\\"gRPC Port\\\", \\\"advanced\\\": True},\\n \\\"host\\\": {\\\"display_name\\\": \\\"Host\\\", \\\"advanced\\\": True},\\n \\\"https\\\": {\\\"display_name\\\": \\\"HTTPS\\\", \\\"advanced\\\": True},\\n \\\"location\\\": {\\\"display_name\\\": \\\"Location\\\", \\\"advanced\\\": True},\\n \\\"metadata_payload_key\\\": {\\\"display_name\\\": \\\"Metadata Payload Key\\\", \\\"advanced\\\": True},\\n \\\"path\\\": {\\\"display_name\\\": \\\"Path\\\", \\\"advanced\\\": True},\\n \\\"port\\\": {\\\"display_name\\\": \\\"Port\\\", \\\"advanced\\\": True},\\n \\\"prefer_grpc\\\": {\\\"display_name\\\": \\\"Prefer gRPC\\\", \\\"advanced\\\": True},\\n \\\"prefix\\\": {\\\"display_name\\\": \\\"Prefix\\\", \\\"advanced\\\": True},\\n \\\"search_kwargs\\\": {\\\"display_name\\\": \\\"Search Kwargs\\\", \\\"advanced\\\": True},\\n \\\"timeout\\\": {\\\"display_name\\\": \\\"Timeout\\\", \\\"advanced\\\": True},\\n \\\"url\\\": {\\\"display_name\\\": \\\"URL\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n collection_name: str,\\n documents: Optional[Document] = None,\\n api_key: Optional[str] = None,\\n content_payload_key: str = \\\"page_content\\\",\\n distance_func: str = \\\"Cosine\\\",\\n grpc_port: int = 6334,\\n https: bool = False,\\n host: Optional[str] = None,\\n location: Optional[str] = None,\\n metadata_payload_key: str = \\\"metadata\\\",\\n path: Optional[str] = None,\\n port: Optional[int] = 6333,\\n prefer_grpc: bool = False,\\n prefix: Optional[str] = None,\\n search_kwargs: Optional[NestedDict] = None,\\n timeout: Optional[int] = None,\\n url: Optional[str] = None,\\n ) -> Union[VectorStore, Qdrant, BaseRetriever]:\\n if documents is None:\\n from qdrant_client import QdrantClient\\n\\n client = QdrantClient(\\n location=location,\\n url=host,\\n port=port,\\n grpc_port=grpc_port,\\n https=https,\\n prefix=prefix,\\n timeout=timeout,\\n prefer_grpc=prefer_grpc,\\n metadata_payload_key=metadata_payload_key,\\n content_payload_key=content_payload_key,\\n api_key=api_key,\\n collection_name=collection_name,\\n host=host,\\n path=path,\\n )\\n vs = Qdrant(\\n client=client,\\n collection_name=collection_name,\\n embeddings=embedding,\\n )\\n return vs\\n else:\\n vs = Qdrant.from_documents(\\n documents=documents, # type: ignore\\n embedding=embedding,\\n api_key=api_key,\\n collection_name=collection_name,\\n content_payload_key=content_payload_key,\\n distance_func=distance_func,\\n grpc_port=grpc_port,\\n host=host,\\n https=https,\\n location=location,\\n metadata_payload_key=metadata_payload_key,\\n path=path,\\n port=port,\\n prefer_grpc=prefer_grpc,\\n prefix=prefix,\\n search_kwargs=search_kwargs,\\n timeout=timeout,\\n url=url,\\n )\\n return vs\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"content_payload_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"page_content\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"content_payload_key\",\"display_name\":\"Content Payload Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"distance_func\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"Cosine\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"distance_func\",\"display_name\":\"Distance Function\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"grpc_port\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6334,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"grpc_port\",\"display_name\":\"gRPC Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"host\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"host\",\"display_name\":\"Host\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"https\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"https\",\"display_name\":\"HTTPS\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"location\",\"display_name\":\"Location\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"metadata_payload_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"metadata\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata_payload_key\",\"display_name\":\"Metadata Payload Key\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"path\",\"display_name\":\"Path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"port\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":6333,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"port\",\"display_name\":\"Port\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prefer_grpc\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prefer_grpc\",\"display_name\":\"Prefer gRPC\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"prefix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"prefix\",\"display_name\":\"Prefix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"display_name\":\"Search Kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"timeout\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"url\",\"display_name\":\"URL\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Construct Qdrant wrapper from a list of texts.\",\"base_classes\":[\"Runnable\",\"Generic\",\"VectorStore\",\"Qdrant\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"Qdrant\",\"documentation\":\"\",\"custom_fields\":{\"embedding\":null,\"collection_name\":null,\"documents\":null,\"api_key\":null,\"content_payload_key\":null,\"distance_func\":null,\"grpc_port\":null,\"https\":null,\"host\":null,\"location\":null,\"metadata_payload_key\":null,\"path\":null,\"port\":null,\"prefer_grpc\":null,\"prefix\":null,\"search_kwargs\":null,\"timeout\":null,\"url\":null},\"output_types\":[\"VectorStore\",\"Qdrant\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"MongoDBAtlasVectorSearch\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langchain_community.vectorstores import MongoDBAtlasVectorSearch\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import (\\n Document,\\n Embeddings,\\n NestedDict,\\n)\\n\\n\\nclass MongoDBAtlasComponent(CustomComponent):\\n display_name = \\\"MongoDB Atlas\\\"\\n description = \\\"Construct a `MongoDB Atlas Vector Search` vector store from raw documents.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n \\\"collection_name\\\": {\\\"display_name\\\": \\\"Collection Name\\\"},\\n \\\"db_name\\\": {\\\"display_name\\\": \\\"Database Name\\\"},\\n \\\"index_name\\\": {\\\"display_name\\\": \\\"Index Name\\\"},\\n \\\"mongodb_atlas_cluster_uri\\\": {\\\"display_name\\\": \\\"MongoDB Atlas Cluster URI\\\"},\\n \\\"search_kwargs\\\": {\\\"display_name\\\": \\\"Search Kwargs\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n documents: List[Document],\\n embedding: Embeddings,\\n collection_name: str = \\\"\\\",\\n db_name: str = \\\"\\\",\\n index_name: str = \\\"\\\",\\n mongodb_atlas_cluster_uri: str = \\\"\\\",\\n search_kwargs: Optional[NestedDict] = None,\\n ) -> MongoDBAtlasVectorSearch:\\n search_kwargs = search_kwargs or {}\\n return MongoDBAtlasVectorSearch(\\n documents=documents,\\n embedding=embedding,\\n collection_name=collection_name,\\n db_name=db_name,\\n index_name=index_name,\\n mongodb_atlas_cluster_uri=mongodb_atlas_cluster_uri,\\n search_kwargs=search_kwargs,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"collection_name\",\"display_name\":\"Collection Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"db_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"db_name\",\"display_name\":\"Database Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"index_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"index_name\",\"display_name\":\"Index Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mongodb_atlas_cluster_uri\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mongodb_atlas_cluster_uri\",\"display_name\":\"MongoDB Atlas Cluster URI\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_kwargs\":{\"type\":\"NestedDict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"search_kwargs\",\"display_name\":\"Search Kwargs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct a `MongoDB Atlas Vector Search` vector store from raw documents.\",\"base_classes\":[\"VectorStore\",\"MongoDBAtlasVectorSearch\"],\"display_name\":\"MongoDB Atlas\",\"documentation\":\"\",\"custom_fields\":{\"documents\":null,\"embedding\":null,\"collection_name\":null,\"db_name\":null,\"index_name\":null,\"mongodb_atlas_cluster_uri\":null,\"search_kwargs\":null},\"output_types\":[\"MongoDBAtlasVectorSearch\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChromaSearch\":{\"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\":\"Embedding model to vectorize inputs (make sure to use same as index)\",\"title_case\":false},\"inputs\":{\"type\":\"Text\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"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\\n\\nimport chromadb # type: ignore\\nfrom langchain_community.vectorstores.chroma import Chroma\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Embeddings, Text\\nfrom langflow.schema import Record, docs_to_records\\n\\n\\nclass ChromaSearchComponent(CustomComponent):\\n \\\"\\\"\\\"\\n A custom component for implementing a Vector Store using Chroma.\\n \\\"\\\"\\\"\\n\\n display_name: str = \\\"Chroma Search\\\"\\n description: str = \\\"Search a Chroma collection for similar documents.\\\"\\n beta: bool = True\\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 \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n \\\"search_type\\\": {\\n \\\"display_name\\\": \\\"Search Type\\\",\\n \\\"options\\\": [\\\"Similarity\\\", \\\"MMR\\\"],\\n },\\n \\\"collection_name\\\": {\\\"display_name\\\": \\\"Collection Name\\\", \\\"value\\\": \\\"langflow\\\"},\\n # \\\"persist\\\": {\\\"display_name\\\": \\\"Persist\\\"},\\n \\\"index_directory\\\": {\\\"display_name\\\": \\\"Index Directory\\\"},\\n \\\"code\\\": {\\\"show\\\": False, \\\"display_name\\\": \\\"Code\\\"},\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\", \\\"is_list\\\": True},\\n \\\"embedding\\\": {\\n \\\"display_name\\\": \\\"Embedding\\\",\\n \\\"info\\\": \\\"Embedding model to vectorize inputs (make sure to use same as index)\\\",\\n },\\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 inputs: Text,\\n search_type: str,\\n collection_name: str,\\n embedding: Embeddings,\\n chroma_server_ssl_enabled: bool,\\n index_directory: Optional[str] = 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 ) -> List[Record]:\\n \\\"\\\"\\\"\\n Builds the Vector Store or BaseRetriever object.\\n\\n Args:\\n - collection_name (str): The name of the collection.\\n - persist_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 - persist (bool): Whether to persist the Vector Store or not.\\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 index_directory = self.resolve_path(index_directory)\\n chroma = Chroma(\\n embedding_function=embedding,\\n collection_name=collection_name,\\n persist_directory=index_directory,\\n client_settings=chroma_settings,\\n )\\n\\n # Validate the inputs\\n docs = []\\n if inputs and isinstance(inputs, str):\\n docs = chroma.search(query=inputs, search_type=search_type.lower())\\n else:\\n raise ValueError(\\\"Invalid inputs provided.\\\")\\n return docs_to_records(docs)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"collection_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"langflow\",\"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\":\"Index Directory\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"search_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Similarity\",\"MMR\"],\"name\":\"search_type\",\"display_name\":\"Search Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Search a Chroma collection for similar documents.\",\"icon\":\"Chroma\",\"base_classes\":[\"Record\"],\"display_name\":\"Chroma Search\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"search_type\":null,\"collection_name\":null,\"embedding\":null,\"chroma_server_ssl_enabled\":null,\"index_directory\":null,\"chroma_server_cors_allow_origins\":null,\"chroma_server_host\":null,\"chroma_server_port\":null,\"chroma_server_grpc_port\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"FAISS\":{\"template\":{\"documents\":{\"type\":\"Document\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"documents\",\"display_name\":\"Documents\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Union\\n\\nfrom langchain.schema import BaseRetriever\\nfrom langchain_community.vectorstores import VectorStore\\nfrom langchain_community.vectorstores.faiss import FAISS\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Document, Embeddings\\n\\n\\nclass FAISSComponent(CustomComponent):\\n display_name = \\\"FAISS\\\"\\n description = \\\"Construct FAISS wrapper from raw documents.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss\\\"\\n\\n def build_config(self):\\n return {\\n \\\"documents\\\": {\\\"display_name\\\": \\\"Documents\\\"},\\n \\\"embedding\\\": {\\\"display_name\\\": \\\"Embedding\\\"},\\n }\\n\\n def build(\\n self,\\n embedding: Embeddings,\\n documents: List[Document],\\n ) -> Union[VectorStore, FAISS, BaseRetriever]:\\n return FAISS.from_documents(documents=documents, embedding=embedding)\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Construct FAISS wrapper from raw documents.\",\"base_classes\":[\"Runnable\",\"FAISS\",\"Generic\",\"VectorStore\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseRetriever\"],\"display_name\":\"FAISS\",\"documentation\":\"https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss\",\"custom_fields\":{\"embedding\":null,\"documents\":null},\"output_types\":[\"VectorStore\",\"FAISS\",\"BaseRetriever\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"models\":{\"LlamaCppModel\":{\"template\":{\"metadata\":{\"type\":\"Dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_kwargs\":{\"type\":\"Dict\",\"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},\"model_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".bin\"],\"file_path\":\"\",\"password\":false,\"name\":\"model_path\",\"display_name\":\"Model Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"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, Dict, List, Optional\\n\\nfrom langchain_community.llms.llamacpp import LlamaCpp\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass LlamaCppComponent(CustomComponent):\\n display_name = \\\"LlamaCppModel\\\"\\n description = \\\"Generate text using llama.cpp model.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\\\"\\n\\n def build_config(self):\\n return {\\n \\\"grammar\\\": {\\\"display_name\\\": \\\"Grammar\\\", \\\"advanced\\\": True},\\n \\\"cache\\\": {\\\"display_name\\\": \\\"Cache\\\", \\\"advanced\\\": True},\\n \\\"client\\\": {\\\"display_name\\\": \\\"Client\\\", \\\"advanced\\\": True},\\n \\\"echo\\\": {\\\"display_name\\\": \\\"Echo\\\", \\\"advanced\\\": True},\\n \\\"f16_kv\\\": {\\\"display_name\\\": \\\"F16 KV\\\", \\\"advanced\\\": True},\\n \\\"grammar_path\\\": {\\\"display_name\\\": \\\"Grammar Path\\\", \\\"advanced\\\": True},\\n \\\"last_n_tokens_size\\\": {\\n \\\"display_name\\\": \\\"Last N Tokens Size\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"logits_all\\\": {\\\"display_name\\\": \\\"Logits All\\\", \\\"advanced\\\": True},\\n \\\"logprobs\\\": {\\\"display_name\\\": \\\"Logprobs\\\", \\\"advanced\\\": True},\\n \\\"lora_base\\\": {\\\"display_name\\\": \\\"Lora Base\\\", \\\"advanced\\\": True},\\n \\\"lora_path\\\": {\\\"display_name\\\": \\\"Lora Path\\\", \\\"advanced\\\": True},\\n \\\"max_tokens\\\": {\\\"display_name\\\": \\\"Max Tokens\\\", \\\"advanced\\\": True},\\n \\\"metadata\\\": {\\\"display_name\\\": \\\"Metadata\\\", \\\"advanced\\\": True},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\", \\\"advanced\\\": True},\\n \\\"model_path\\\": {\\n \\\"display_name\\\": \\\"Model Path\\\",\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".bin\\\"],\\n \\\"required\\\": True,\\n },\\n \\\"n_batch\\\": {\\\"display_name\\\": \\\"N Batch\\\", \\\"advanced\\\": True},\\n \\\"n_ctx\\\": {\\\"display_name\\\": \\\"N Ctx\\\", \\\"advanced\\\": True},\\n \\\"n_gpu_layers\\\": {\\\"display_name\\\": \\\"N GPU Layers\\\", \\\"advanced\\\": True},\\n \\\"n_parts\\\": {\\\"display_name\\\": \\\"N Parts\\\", \\\"advanced\\\": True},\\n \\\"n_threads\\\": {\\\"display_name\\\": \\\"N Threads\\\", \\\"advanced\\\": True},\\n \\\"repeat_penalty\\\": {\\\"display_name\\\": \\\"Repeat Penalty\\\", \\\"advanced\\\": True},\\n \\\"rope_freq_base\\\": {\\\"display_name\\\": \\\"Rope Freq Base\\\", \\\"advanced\\\": True},\\n \\\"rope_freq_scale\\\": {\\\"display_name\\\": \\\"Rope Freq Scale\\\", \\\"advanced\\\": True},\\n \\\"seed\\\": {\\\"display_name\\\": \\\"Seed\\\", \\\"advanced\\\": True},\\n \\\"stop\\\": {\\\"display_name\\\": \\\"Stop\\\", \\\"advanced\\\": True},\\n \\\"streaming\\\": {\\\"display_name\\\": \\\"Streaming\\\", \\\"advanced\\\": True},\\n \\\"suffix\\\": {\\\"display_name\\\": \\\"Suffix\\\", \\\"advanced\\\": True},\\n \\\"tags\\\": {\\\"display_name\\\": \\\"Tags\\\", \\\"advanced\\\": True},\\n \\\"temperature\\\": {\\\"display_name\\\": \\\"Temperature\\\"},\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"advanced\\\": True},\\n \\\"top_p\\\": {\\\"display_name\\\": \\\"Top P\\\", \\\"advanced\\\": True},\\n \\\"use_mlock\\\": {\\\"display_name\\\": \\\"Use Mlock\\\", \\\"advanced\\\": True},\\n \\\"use_mmap\\\": {\\\"display_name\\\": \\\"Use Mmap\\\", \\\"advanced\\\": True},\\n \\\"verbose\\\": {\\\"display_name\\\": \\\"Verbose\\\", \\\"advanced\\\": True},\\n \\\"vocab_only\\\": {\\\"display_name\\\": \\\"Vocab Only\\\", \\\"advanced\\\": True},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n model_path: str,\\n inputs: str,\\n grammar: Optional[str] = None,\\n cache: Optional[bool] = None,\\n client: Optional[Any] = None,\\n echo: Optional[bool] = False,\\n f16_kv: bool = True,\\n grammar_path: Optional[str] = None,\\n last_n_tokens_size: Optional[int] = 64,\\n logits_all: bool = False,\\n logprobs: Optional[int] = None,\\n lora_base: Optional[str] = None,\\n lora_path: Optional[str] = None,\\n max_tokens: Optional[int] = 256,\\n metadata: Optional[Dict] = None,\\n model_kwargs: Dict = {},\\n n_batch: Optional[int] = 8,\\n n_ctx: int = 512,\\n n_gpu_layers: Optional[int] = 1,\\n n_parts: int = -1,\\n n_threads: Optional[int] = 1,\\n repeat_penalty: Optional[float] = 1.1,\\n rope_freq_base: float = 10000.0,\\n rope_freq_scale: float = 1.0,\\n seed: int = -1,\\n stop: Optional[List[str]] = [],\\n streaming: bool = True,\\n suffix: Optional[str] = \\\"\\\",\\n tags: Optional[List[str]] = [],\\n temperature: Optional[float] = 0.8,\\n top_k: Optional[int] = 40,\\n top_p: Optional[float] = 0.95,\\n use_mlock: bool = False,\\n use_mmap: Optional[bool] = True,\\n verbose: bool = True,\\n vocab_only: bool = False,\\n ) -> Text:\\n output = LlamaCpp(\\n model_path=model_path,\\n grammar=grammar,\\n cache=cache,\\n client=client,\\n echo=echo,\\n f16_kv=f16_kv,\\n grammar_path=grammar_path,\\n last_n_tokens_size=last_n_tokens_size,\\n logits_all=logits_all,\\n logprobs=logprobs,\\n lora_base=lora_base,\\n lora_path=lora_path,\\n max_tokens=max_tokens,\\n metadata=metadata,\\n model_kwargs=model_kwargs,\\n n_batch=n_batch,\\n n_ctx=n_ctx,\\n n_gpu_layers=n_gpu_layers,\\n n_parts=n_parts,\\n n_threads=n_threads,\\n repeat_penalty=repeat_penalty,\\n rope_freq_base=rope_freq_base,\\n rope_freq_scale=rope_freq_scale,\\n seed=seed,\\n stop=stop,\\n streaming=streaming,\\n suffix=suffix,\\n tags=tags,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n use_mlock=use_mlock,\\n use_mmap=use_mmap,\\n verbose=verbose,\\n vocab_only=vocab_only,\\n )\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"echo\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"echo\",\"display_name\":\"Echo\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"f16_kv\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"f16_kv\",\"display_name\":\"F16 KV\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"grammar\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"grammar\",\"display_name\":\"Grammar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"grammar_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"grammar_path\",\"display_name\":\"Grammar Path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"last_n_tokens_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":64,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"last_n_tokens_size\",\"display_name\":\"Last N Tokens Size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"logits_all\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"logits_all\",\"display_name\":\"Logits All\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"logprobs\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"logprobs\",\"display_name\":\"Logprobs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"lora_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"lora_base\",\"display_name\":\"Lora Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"lora_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"lora_path\",\"display_name\":\"Lora Path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"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\":\"\",\"title_case\":false},\"n_batch\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_batch\",\"display_name\":\"N Batch\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_ctx\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":512,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_ctx\",\"display_name\":\"N Ctx\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_gpu_layers\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_gpu_layers\",\"display_name\":\"N GPU Layers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_parts\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_parts\",\"display_name\":\"N Parts\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_threads\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_threads\",\"display_name\":\"N Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_penalty\",\"display_name\":\"Repeat Penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"rope_freq_base\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10000.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"rope_freq_base\",\"display_name\":\"Rope Freq Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"rope_freq_scale\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"rope_freq_scale\",\"display_name\":\"Rope Freq Scale\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"seed\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"seed\",\"display_name\":\"Seed\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"suffix\",\"display_name\":\"Suffix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"display_name\":\"Tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"use_mlock\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_mlock\",\"display_name\":\"Use Mlock\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"use_mmap\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_mmap\",\"display_name\":\"Use Mmap\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vocab_only\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vocab_only\",\"display_name\":\"Vocab Only\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using llama.cpp model.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"LlamaCppModel\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\",\"custom_fields\":{\"model_path\":null,\"inputs\":null,\"grammar\":null,\"cache\":null,\"client\":null,\"echo\":null,\"f16_kv\":null,\"grammar_path\":null,\"last_n_tokens_size\":null,\"logits_all\":null,\"logprobs\":null,\"lora_base\":null,\"lora_path\":null,\"max_tokens\":null,\"metadata\":null,\"model_kwargs\":null,\"n_batch\":null,\"n_ctx\":null,\"n_gpu_layers\":null,\"n_parts\":null,\"n_threads\":null,\"repeat_penalty\":null,\"rope_freq_base\":null,\"rope_freq_scale\":null,\"seed\":null,\"stop\":null,\"streaming\":null,\"suffix\":null,\"tags\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"use_mlock\":null,\"use_mmap\":null,\"verbose\":null,\"vocab_only\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"BaiduQianfanChatModel\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass QianfanChatEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanChat Model\\\"\\n description: str = (\\n \\\"Generate text using Baidu Qianfan chat models. Get more detail from \\\"\\n \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> Text:\\n try:\\n output = QianfanChatEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=SecretStr(qianfan_ak) if qianfan_ak else None,\\n qianfan_sk=SecretStr(qianfan_sk) if qianfan_sk else None,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"title_case\":false,\"input_types\":[\"Text\"]},\"penalty_score\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"qianfan_ak\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"qianfan_sk\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Baidu Qianfan chat models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"QianfanChat Model\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"model\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"top_p\":null,\"temperature\":null,\"penalty_score\":null,\"endpoint\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GoogleGenerativeAIModel\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_google_genai import ChatGoogleGenerativeAI # type: ignore\\nfrom pydantic.v1.types import SecretStr\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import RangeSpec, Text\\n\\n\\nclass GoogleGenerativeAIComponent(CustomComponent):\\n display_name: str = \\\"Google Generative AIModel\\\"\\n description: str = \\\"Generate text using Google Generative AI to generate text.\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\n \\\"google_api_key\\\": {\\n \\\"display_name\\\": \\\"Google API Key\\\",\\n \\\"info\\\": \\\"The Google API Key to use for the Google Generative AI.\\\",\\n },\\n \\\"max_output_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Output Tokens\\\",\\n \\\"info\\\": \\\"The maximum number of tokens to generate.\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"info\\\": \\\"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].\\\",\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"info\\\": \\\"Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive.\\\",\\n \\\"range_spec\\\": RangeSpec(min=0, max=2, step=0.1),\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"info\\\": \\\"The maximum cumulative probability of tokens to consider when sampling.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"n\\\": {\\n \\\"display_name\\\": \\\"N\\\",\\n \\\"info\\\": \\\"Number of chat completions to generate for each prompt. Note that the API may not return the full n completions if duplicates are generated.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model\\\",\\n \\\"info\\\": \\\"The name of the model to use. Supported examples: gemini-pro\\\",\\n \\\"options\\\": [\\\"gemini-pro\\\", \\\"gemini-pro-vision\\\"],\\n },\\n \\\"code\\\": {\\n \\\"advanced\\\": True,\\n },\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n google_api_key: str,\\n model: str,\\n inputs: str,\\n max_output_tokens: Optional[int] = None,\\n temperature: float = 0.1,\\n top_k: Optional[int] = None,\\n top_p: Optional[float] = None,\\n n: Optional[int] = 1,\\n ) -> Text:\\n output = ChatGoogleGenerativeAI(\\n model=model,\\n max_output_tokens=max_output_tokens or None, # type: ignore\\n temperature=temperature,\\n top_k=top_k or None,\\n top_p=top_p or None, # type: ignore\\n n=n or 1,\\n google_api_key=SecretStr(google_api_key),\\n )\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"google_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"google_api_key\",\"display_name\":\"Google API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The Google API Key to use for the Google Generative AI.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum number of tokens to generate.\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gemini-pro\",\"gemini-pro-vision\"],\"name\":\"model\",\"display_name\":\"Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"The name of the model to use. Supported examples: gemini-pro\",\"title_case\":false,\"input_types\":[\"Text\"]},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n\",\"display_name\":\"N\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of chat completions to generate for each prompt. Note that the API may not return the full n completions if duplicates are generated.\",\"title_case\":false},\"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\":\"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive.\",\"rangeSpec\":{\"min\":0.0,\"max\":2.0,\"step\":0.1},\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"The maximum cumulative probability of tokens to consider when sampling.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Google Generative AI to generate text.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Google Generative AIModel\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"google_api_key\":null,\"model\":null,\"inputs\":null,\"max_output_tokens\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"n\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"CTransformersModel\":{\"template\":{\"model_file\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".bin\"],\"file_path\":\"\",\"password\":false,\"name\":\"model_file\",\"display_name\":\"Model File\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Dict, Optional\\n\\nfrom langchain_community.llms.ctransformers import CTransformers\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass CTransformersComponent(CustomComponent):\\n display_name = \\\"CTransformersModel\\\"\\n description = \\\"Generate text using CTransformers LLM models\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\\"display_name\\\": \\\"Model\\\", \\\"required\\\": True},\\n \\\"model_file\\\": {\\n \\\"display_name\\\": \\\"Model File\\\",\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".bin\\\"],\\n },\\n \\\"model_type\\\": {\\\"display_name\\\": \\\"Model Type\\\", \\\"required\\\": True},\\n \\\"config\\\": {\\n \\\"display_name\\\": \\\"Config\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"value\\\": '{\\\"top_k\\\":40,\\\"top_p\\\":0.95,\\\"temperature\\\":0.8,\\\"repetition_penalty\\\":1.1,\\\"last_n_tokens\\\":64,\\\"seed\\\":-1,\\\"max_new_tokens\\\":256,\\\"stop\\\":\\\"\\\",\\\"stream\\\":\\\"False\\\",\\\"reset\\\":\\\"True\\\",\\\"batch_size\\\":8,\\\"threads\\\":-1,\\\"context_length\\\":-1,\\\"gpu_layers\\\":0}',\\n },\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n model: str,\\n model_file: str,\\n inputs: str,\\n model_type: str,\\n config: Optional[Dict] = None,\\n ) -> Text:\\n output = CTransformers(model=model, model_file=model_file, model_type=model_type, config=config)\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"config\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{\\\"top_k\\\":40,\\\"top_p\\\":0.95,\\\"temperature\\\":0.8,\\\"repetition_penalty\\\":1.1,\\\"last_n_tokens\\\":64,\\\"seed\\\":-1,\\\"max_new_tokens\\\":256,\\\"stop\\\":\\\"\\\",\\\"stream\\\":\\\"False\\\",\\\"reset\\\":\\\"True\\\",\\\"batch_size\\\":8,\\\"threads\\\":-1,\\\"context_length\\\":-1,\\\"gpu_layers\\\":0}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"config\",\"display_name\":\"Config\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_type\",\"display_name\":\"Model Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using CTransformers LLM models\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"CTransformersModel\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\",\"custom_fields\":{\"model\":null,\"model_file\":null,\"inputs\":null,\"model_type\":null,\"config\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VertexAiModel\":{\"template\":{\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".json\"],\"password\":false,\"name\":\"credentials\",\"display_name\":\"Credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"examples\":{\"type\":\"BaseMessage\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":true,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"examples\",\"display_name\":\"Examples\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langchain_core.messages.base import BaseMessage\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass ChatVertexAIComponent(CustomComponent):\\n display_name = \\\"ChatVertexAIModel\\\"\\n description = \\\"Generate text using Vertex AI Chat large language models API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"credentials\\\": {\\n \\\"display_name\\\": \\\"Credentials\\\",\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".json\\\"],\\n \\\"file_path\\\": None,\\n },\\n \\\"examples\\\": {\\n \\\"display_name\\\": \\\"Examples\\\",\\n \\\"multiline\\\": True,\\n },\\n \\\"location\\\": {\\n \\\"display_name\\\": \\\"Location\\\",\\n \\\"value\\\": \\\"us-central1\\\",\\n },\\n \\\"max_output_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Output Tokens\\\",\\n \\\"value\\\": 128,\\n \\\"advanced\\\": True,\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"chat-bison\\\",\\n },\\n \\\"project\\\": {\\n \\\"display_name\\\": \\\"Project\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"value\\\": 0.0,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"value\\\": 40,\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"value\\\": 0.95,\\n \\\"advanced\\\": True,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"value\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n credentials: Optional[str],\\n project: str,\\n examples: Optional[List[BaseMessage]] = [],\\n location: str = \\\"us-central1\\\",\\n max_output_tokens: int = 128,\\n model_name: str = \\\"chat-bison\\\",\\n temperature: float = 0.0,\\n top_k: int = 40,\\n top_p: float = 0.95,\\n verbose: bool = False,\\n ) -> Text:\\n try:\\n from langchain_google_vertexai import ChatVertexAI\\n except ImportError:\\n raise ImportError(\\n \\\"To use the ChatVertexAI model, you need to install the langchain-google-vertexai package.\\\"\\n )\\n output = ChatVertexAI(\\n credentials=credentials,\\n examples=examples,\\n location=location,\\n max_output_tokens=max_output_tokens,\\n model_name=model_name,\\n project=project,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n verbose=verbose,\\n )\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"location\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"location\",\"display_name\":\"Location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat-bison\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"project\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"project\",\"display_name\":\"Project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Vertex AI Chat large language models API.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"ChatVertexAIModel\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"credentials\":null,\"project\":null,\"examples\":null,\"location\":null,\"max_output_tokens\":null,\"model_name\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"verbose\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OllamaModel\":{\"template\":{\"metadata\":{\"type\":\"Dict[str, Any]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"Metadata to add to the run trace.\",\"title_case\":false},\"stop\":{\"type\":\"list\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"List of tokens to signal the model to stop generating text.\",\"title_case\":false},\"tags\":{\"type\":\"list\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"display_name\":\"Tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"Tags to add to the run trace.\",\"title_case\":false},\"base_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"base_url\",\"display_name\":\"Base URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"advanced\":true,\"dynamic\":false,\"info\":\"Enable or disable caching.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Any, Dict, List, Optional\\n\\n# from langchain_community.chat_models import ChatOllama\\nfrom langchain_community.chat_models import ChatOllama\\n\\n# from langchain.chat_models import ChatOllama\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n# whe When a callback component is added to Langflow, the comment must be uncommented.\\n# from langchain.callbacks.manager import CallbackManager\\n\\n\\nclass ChatOllamaComponent(CustomComponent):\\n display_name = \\\"ChatOllamaModel\\\"\\n description = \\\"Generate text using Local LLM for chat with Ollama.\\\"\\n\\n def build_config(self) -> dict:\\n return {\\n \\\"base_url\\\": {\\n \\\"display_name\\\": \\\"Base URL\\\",\\n \\\"info\\\": \\\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\\\",\\n },\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"llama2\\\",\\n \\\"info\\\": \\\"Refer to https://ollama.ai/library for more models.\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.8,\\n \\\"info\\\": \\\"Controls the creativity of model responses.\\\",\\n },\\n \\\"cache\\\": {\\n \\\"display_name\\\": \\\"Cache\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"info\\\": \\\"Enable or disable caching.\\\",\\n \\\"advanced\\\": True,\\n \\\"value\\\": False,\\n },\\n ### When a callback component is added to Langflow, the comment must be uncommented. ###\\n # \\\"callback_manager\\\": {\\n # \\\"display_name\\\": \\\"Callback Manager\\\",\\n # \\\"info\\\": \\\"Optional callback manager for additional functionality.\\\",\\n # \\\"advanced\\\": True,\\n # },\\n # \\\"callbacks\\\": {\\n # \\\"display_name\\\": \\\"Callbacks\\\",\\n # \\\"info\\\": \\\"Callbacks to execute during model runtime.\\\",\\n # \\\"advanced\\\": True,\\n # },\\n ########################################################################################\\n \\\"format\\\": {\\n \\\"display_name\\\": \\\"Format\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"Specify the format of the output (e.g., json).\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"metadata\\\": {\\n \\\"display_name\\\": \\\"Metadata\\\",\\n \\\"info\\\": \\\"Metadata to add to the run trace.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat\\\": {\\n \\\"display_name\\\": \\\"Mirostat\\\",\\n \\\"options\\\": [\\\"Disabled\\\", \\\"Mirostat\\\", \\\"Mirostat 2.0\\\"],\\n \\\"info\\\": \\\"Enable/disable Mirostat sampling for controlling perplexity.\\\",\\n \\\"value\\\": \\\"Disabled\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_eta\\\": {\\n \\\"display_name\\\": \\\"Mirostat Eta\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Learning rate for Mirostat algorithm. (Default: 0.1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_tau\\\": {\\n \\\"display_name\\\": \\\"Mirostat Tau\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Controls the balance between coherence and diversity of the output. (Default: 5.0)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_ctx\\\": {\\n \\\"display_name\\\": \\\"Context Window Size\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Size of the context window for generating tokens. (Default: 2048)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_gpu\\\": {\\n \\\"display_name\\\": \\\"Number of GPUs\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of GPUs to use for computation. (Default: 1 on macOS, 0 to disable)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_thread\\\": {\\n \\\"display_name\\\": \\\"Number of Threads\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of threads to use during computation. (Default: detected for optimal performance)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_last_n\\\": {\\n \\\"display_name\\\": \\\"Repeat Last N\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"How far back the model looks to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_penalty\\\": {\\n \\\"display_name\\\": \\\"Repeat Penalty\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Penalty for repetitions in generated text. (Default: 1.1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"tfs_z\\\": {\\n \\\"display_name\\\": \\\"TFS Z\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Tail free sampling value. (Default: 1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"timeout\\\": {\\n \\\"display_name\\\": \\\"Timeout\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Timeout for the request stream.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Limits token selection to top K. (Default: 40)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Works together with top-k. (Default: 0.9)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"info\\\": \\\"Whether to print out response text.\\\",\\n },\\n \\\"tags\\\": {\\n \\\"display_name\\\": \\\"Tags\\\",\\n \\\"field_type\\\": \\\"list\\\",\\n \\\"info\\\": \\\"Tags to add to the run trace.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"stop\\\": {\\n \\\"display_name\\\": \\\"Stop Tokens\\\",\\n \\\"field_type\\\": \\\"list\\\",\\n \\\"info\\\": \\\"List of tokens to signal the model to stop generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"system\\\": {\\n \\\"display_name\\\": \\\"System\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"System to use for generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"template\\\": {\\n \\\"display_name\\\": \\\"Template\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"Template to use for generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n base_url: Optional[str],\\n model: str,\\n inputs: str,\\n mirostat: Optional[str],\\n mirostat_eta: Optional[float] = None,\\n mirostat_tau: Optional[float] = None,\\n ### When a callback component is added to Langflow, the comment must be uncommented.###\\n # callback_manager: Optional[CallbackManager] = None,\\n # callbacks: Optional[List[Callbacks]] = None,\\n #######################################################################################\\n repeat_last_n: Optional[int] = None,\\n verbose: Optional[bool] = None,\\n cache: Optional[bool] = None,\\n num_ctx: Optional[int] = None,\\n num_gpu: Optional[int] = None,\\n format: Optional[str] = None,\\n metadata: Optional[Dict[str, Any]] = None,\\n num_thread: Optional[int] = None,\\n repeat_penalty: Optional[float] = None,\\n stop: Optional[List[str]] = None,\\n system: Optional[str] = None,\\n tags: Optional[List[str]] = None,\\n temperature: Optional[float] = None,\\n template: Optional[str] = None,\\n tfs_z: Optional[float] = None,\\n timeout: Optional[int] = None,\\n top_k: Optional[int] = None,\\n top_p: Optional[int] = None,\\n ) -> Text:\\n if not base_url:\\n base_url = \\\"http://localhost:11434\\\"\\n\\n # Mapping mirostat settings to their corresponding values\\n mirostat_options = {\\\"Mirostat\\\": 1, \\\"Mirostat 2.0\\\": 2}\\n\\n # Default to 0 for 'Disabled'\\n mirostat_value = mirostat_options.get(mirostat, 0) # type: ignore\\n\\n # Set mirostat_eta and mirostat_tau to None if mirostat is disabled\\n if mirostat_value == 0:\\n mirostat_eta = None\\n mirostat_tau = None\\n\\n # Mapping system settings to their corresponding values\\n llm_params = {\\n \\\"base_url\\\": base_url,\\n \\\"cache\\\": cache,\\n \\\"model\\\": model,\\n \\\"mirostat\\\": mirostat_value,\\n \\\"format\\\": format,\\n \\\"metadata\\\": metadata,\\n \\\"tags\\\": tags,\\n ## When a callback component is added to Langflow, the comment must be uncommented.##\\n # \\\"callback_manager\\\": callback_manager,\\n # \\\"callbacks\\\": callbacks,\\n #####################################################################################\\n \\\"mirostat_eta\\\": mirostat_eta,\\n \\\"mirostat_tau\\\": mirostat_tau,\\n \\\"num_ctx\\\": num_ctx,\\n \\\"num_gpu\\\": num_gpu,\\n \\\"num_thread\\\": num_thread,\\n \\\"repeat_last_n\\\": repeat_last_n,\\n \\\"repeat_penalty\\\": repeat_penalty,\\n \\\"temperature\\\": temperature,\\n \\\"stop\\\": stop,\\n \\\"system\\\": system,\\n \\\"template\\\": template,\\n \\\"tfs_z\\\": tfs_z,\\n \\\"timeout\\\": timeout,\\n \\\"top_k\\\": top_k,\\n \\\"top_p\\\": top_p,\\n \\\"verbose\\\": verbose,\\n }\\n\\n # None Value remove\\n llm_params = {k: v for k, v in llm_params.items() if v is not None}\\n\\n try:\\n output = ChatOllama(**llm_params) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not initialize Ollama LLM.\\\") from e\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"format\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"format\",\"display_name\":\"Format\",\"advanced\":true,\"dynamic\":false,\"info\":\"Specify the format of the output (e.g., json).\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mirostat\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Disabled\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Disabled\",\"Mirostat\",\"Mirostat 2.0\"],\"name\":\"mirostat\",\"display_name\":\"Mirostat\",\"advanced\":true,\"dynamic\":false,\"info\":\"Enable/disable Mirostat sampling for controlling perplexity.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mirostat_eta\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_eta\",\"display_name\":\"Mirostat Eta\",\"advanced\":true,\"dynamic\":false,\"info\":\"Learning rate for Mirostat algorithm. (Default: 0.1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"mirostat_tau\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_tau\",\"display_name\":\"Mirostat Tau\",\"advanced\":true,\"dynamic\":false,\"info\":\"Controls the balance between coherence and diversity of the output. (Default: 5.0)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"llama2\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"Refer to https://ollama.ai/library for more models.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"num_ctx\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_ctx\",\"display_name\":\"Context Window Size\",\"advanced\":true,\"dynamic\":false,\"info\":\"Size of the context window for generating tokens. (Default: 2048)\",\"title_case\":false},\"num_gpu\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_gpu\",\"display_name\":\"Number of GPUs\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of GPUs to use for computation. (Default: 1 on macOS, 0 to disable)\",\"title_case\":false},\"num_thread\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_thread\",\"display_name\":\"Number of Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of threads to use during computation. (Default: detected for optimal performance)\",\"title_case\":false},\"repeat_last_n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_last_n\",\"display_name\":\"Repeat Last N\",\"advanced\":true,\"dynamic\":false,\"info\":\"How far back the model looks to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)\",\"title_case\":false},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_penalty\",\"display_name\":\"Repeat Penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"Penalty for repetitions in generated text. (Default: 1.1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"system\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"system\",\"display_name\":\"System\",\"advanced\":true,\"dynamic\":false,\"info\":\"System to use for generating text.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Controls the creativity of model responses.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"template\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"template\",\"display_name\":\"Template\",\"advanced\":true,\"dynamic\":false,\"info\":\"Template to use for generating text.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"tfs_z\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tfs_z\",\"display_name\":\"TFS Z\",\"advanced\":true,\"dynamic\":false,\"info\":\"Tail free sampling value. (Default: 1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"timeout\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"Timeout for the request stream.\",\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"Limits token selection to top K. (Default: 40)\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"Works together with top-k. (Default: 0.9)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"Whether to print out response text.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Local LLM for chat with Ollama.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"ChatOllamaModel\",\"documentation\":\"\",\"custom_fields\":{\"base_url\":null,\"model\":null,\"inputs\":null,\"mirostat\":null,\"mirostat_eta\":null,\"mirostat_tau\":null,\"repeat_last_n\":null,\"verbose\":null,\"cache\":null,\"num_ctx\":null,\"num_gpu\":null,\"format\":null,\"metadata\":null,\"num_thread\":null,\"repeat_penalty\":null,\"stop\":null,\"system\":null,\"tags\":null,\"temperature\":null,\"template\":null,\"tfs_z\":null,\"timeout\":null,\"top_k\":null,\"top_p\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AnthropicModel\":{\"template\":{\"anthropic_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"anthropic_api_key\",\"display_name\":\"Anthropic API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Anthropic API key.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"api_endpoint\",\"display_name\":\"API Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\",\"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_community.chat_models.anthropic import ChatAnthropic\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass AnthropicLLM(CustomComponent):\\n display_name: str = \\\"AnthropicModel\\\"\\n description: str = \\\"Generate text using Anthropic Chat&Completion large language models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"claude-2.1\\\",\\n \\\"claude-2.0\\\",\\n \\\"claude-instant-1.2\\\",\\n \\\"claude-instant-1\\\",\\n # Add more models as needed\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/anthropic\\\",\\n \\\"required\\\": True,\\n \\\"value\\\": \\\"claude-2.1\\\",\\n },\\n \\\"anthropic_api_key\\\": {\\n \\\"display_name\\\": \\\"Anthropic API Key\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"Your Anthropic API key.\\\",\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 256,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.7,\\n },\\n \\\"api_endpoint\\\": {\\n \\\"display_name\\\": \\\"API Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n model: str,\\n inputs: str,\\n anthropic_api_key: Optional[str] = None,\\n max_tokens: Optional[int] = None,\\n temperature: Optional[float] = None,\\n api_endpoint: Optional[str] = None,\\n ) -> Text:\\n # Set default API endpoint if not provided\\n if not api_endpoint:\\n api_endpoint = \\\"https://api.anthropic.com\\\"\\n\\n try:\\n output = ChatAnthropic(\\n model_name=model,\\n anthropic_api_key=(SecretStr(anthropic_api_key) if anthropic_api_key else None),\\n max_tokens_to_sample=max_tokens, # type: ignore\\n temperature=temperature,\\n anthropic_api_url=api_endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Anthropic API.\\\") from e\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"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\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"claude-2.1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"claude-2.1\",\"claude-2.0\",\"claude-instant-1.2\",\"claude-instant-1\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/anthropic\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Anthropic Chat&Completion large language models.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"AnthropicModel\",\"documentation\":\"\",\"custom_fields\":{\"model\":null,\"inputs\":null,\"anthropic_api_key\":null,\"max_tokens\":null,\"temperature\":null,\"api_endpoint\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OpenAIModel\":{\"template\":{\"inputs\":{\"type\":\"Text\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_openai import ChatOpenAI\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import NestedDict, Text\\n\\n\\nclass OpenAIModelComponent(CustomComponent):\\n display_name = \\\"OpenAI Model\\\"\\n description = \\\"Generates text using OpenAI's models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n },\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Kwargs\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"options\\\": [\\n \\\"gpt-4-turbo-preview\\\",\\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 },\\n \\\"openai_api_base\\\": {\\n \\\"display_name\\\": \\\"OpenAI API Base\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\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 \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"password\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"value\\\": 0.7,\\n },\\n }\\n\\n def build(\\n self,\\n inputs: Text,\\n max_tokens: Optional[int] = 256,\\n model_kwargs: NestedDict = {},\\n model_name: str = \\\"gpt-4-1106-preview\\\",\\n openai_api_base: Optional[str] = None,\\n openai_api_key: Optional[str] = None,\\n temperature: float = 0.7,\\n ) -> Text:\\n if not openai_api_base:\\n openai_api_base = \\\"https://api.openai.com/v1\\\"\\n model = 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 message = model.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"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\":false,\"dynamic\":false,\"info\":\"\",\"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\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gpt-4-turbo-preview\",\"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\":\"\",\"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\":false,\"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.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"openai_api_key\":{\"type\":\"str\",\"required\":false,\"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\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generates text using OpenAI's models.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"OpenAI Model\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"max_tokens\":null,\"model_kwargs\":null,\"model_name\":null,\"openai_api_base\":null,\"openai_api_key\":null,\"temperature\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"HuggingFaceModel\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_community.chat_models.huggingface import ChatHuggingFace\\nfrom langchain_community.llms.huggingface_endpoint import HuggingFaceEndpoint\\n\\nfrom langflow import CustomComponent\\n\\nfrom langflow.field_typing import Text\\n\\n\\nclass HuggingFaceEndpointsComponent(CustomComponent):\\n display_name: str = \\\"Hugging Face Inference API models\\\"\\n description: str = \\\"Generate text using LLM model from Hugging Face Inference API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\", \\\"password\\\": True},\\n \\\"task\\\": {\\n \\\"display_name\\\": \\\"Task\\\",\\n \\\"options\\\": [\\\"text2text-generation\\\", \\\"text-generation\\\", \\\"summarization\\\"],\\n },\\n \\\"huggingfacehub_api_token\\\": {\\\"display_name\\\": \\\"API token\\\", \\\"password\\\": True},\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Keyword Arguments\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n endpoint_url: str,\\n task: str = \\\"text2text-generation\\\",\\n huggingfacehub_api_token: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n ) -> Text:\\n try:\\n llm = HuggingFaceEndpoint(\\n endpoint_url=endpoint_url,\\n task=task,\\n huggingfacehub_api_token=huggingfacehub_api_token,\\n model_kwargs=model_kwargs,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to HuggingFace Endpoints API.\\\") from e\\n output = ChatHuggingFace(llm=llm)\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"endpoint_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"huggingfacehub_api_token\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"API token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_kwargs\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Keyword Arguments\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"task\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"text2text-generation\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"text2text-generation\",\"text-generation\",\"summarization\"],\"name\":\"task\",\"display_name\":\"Task\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using LLM model from Hugging Face Inference API.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Hugging Face Inference API models\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"endpoint_url\":null,\"task\":null,\"huggingfacehub_api_token\":null,\"model_kwargs\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AzureOpenAIModel\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_version\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"2023-12-01-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"2023-03-15-preview\",\"2023-05-15\",\"2023-06-01-preview\",\"2023-07-01-preview\",\"2023-08-01-preview\",\"2023-09-01-preview\",\"2023-12-01-preview\"],\"name\":\"api_version\",\"display_name\":\"API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_deployment\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_deployment\",\"display_name\":\"Deployment Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_endpoint\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_endpoint\",\"display_name\":\"Azure Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\",\"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.llms.base import BaseLanguageModel\\nfrom langchain_openai import AzureChatOpenAI\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AzureChatOpenAIComponent(CustomComponent):\\n display_name: str = \\\"AzureOpenAI Model\\\"\\n description: str = \\\"Generate text using LLM model from Azure OpenAI.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/integrations/llms/azure_openai\\\"\\n beta = False\\n\\n AZURE_OPENAI_MODELS = [\\n \\\"gpt-35-turbo\\\",\\n \\\"gpt-35-turbo-16k\\\",\\n \\\"gpt-35-turbo-instruct\\\",\\n \\\"gpt-4\\\",\\n \\\"gpt-4-32k\\\",\\n \\\"gpt-4-vision\\\",\\n ]\\n\\n AZURE_OPENAI_API_VERSIONS = [\\n \\\"2023-03-15-preview\\\",\\n \\\"2023-05-15\\\",\\n \\\"2023-06-01-preview\\\",\\n \\\"2023-07-01-preview\\\",\\n \\\"2023-08-01-preview\\\",\\n \\\"2023-09-01-preview\\\",\\n \\\"2023-12-01-preview\\\",\\n ]\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": self.AZURE_OPENAI_MODELS[0],\\n \\\"options\\\": self.AZURE_OPENAI_MODELS,\\n \\\"required\\\": True,\\n },\\n \\\"azure_endpoint\\\": {\\n \\\"display_name\\\": \\\"Azure Endpoint\\\",\\n \\\"required\\\": True,\\n \\\"info\\\": \\\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\\\",\\n },\\n \\\"azure_deployment\\\": {\\n \\\"display_name\\\": \\\"Deployment Name\\\",\\n \\\"required\\\": True,\\n },\\n \\\"api_version\\\": {\\n \\\"display_name\\\": \\\"API Version\\\",\\n \\\"options\\\": self.AZURE_OPENAI_API_VERSIONS,\\n \\\"value\\\": self.AZURE_OPENAI_API_VERSIONS[-1],\\n \\\"required\\\": True,\\n \\\"advanced\\\": True,\\n },\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"required\\\": True, \\\"password\\\": True},\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"value\\\": 0.7,\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"required\\\": False,\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"value\\\": 1000,\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": True,\\n \\\"info\\\": \\\"Maximum number of tokens to generate.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n model: str,\\n azure_endpoint: str,\\n inputs: str,\\n azure_deployment: str,\\n api_key: str,\\n api_version: str,\\n temperature: float = 0.7,\\n max_tokens: Optional[int] = 1000,\\n ) -> BaseLanguageModel:\\n try:\\n output = AzureChatOpenAI(\\n model=model,\\n azure_endpoint=azure_endpoint,\\n azure_deployment=azure_deployment,\\n api_version=api_version,\\n api_key=api_key,\\n temperature=temperature,\\n max_tokens=max_tokens,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AzureOpenAI API.\\\") from e\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1000,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_tokens\",\"display_name\":\"Max Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"Maximum number of tokens to generate.\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-35-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gpt-35-turbo\",\"gpt-35-turbo-16k\",\"gpt-35-turbo-instruct\",\"gpt-4\",\"gpt-4-32k\",\"gpt-4-vision\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using LLM model from Azure OpenAI.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"AzureOpenAI Model\",\"documentation\":\"https://python.langchain.com/docs/integrations/llms/azure_openai\",\"custom_fields\":{\"model\":null,\"azure_endpoint\":null,\"inputs\":null,\"azure_deployment\":null,\"api_key\":null,\"api_version\":null,\"temperature\":null,\"max_tokens\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"AmazonBedrockModel\":{\"template\":{\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_community.chat_models.bedrock import BedrockChat\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass AmazonBedrockComponent(CustomComponent):\\n display_name: str = \\\"Amazon Bedrock Model\\\"\\n description: str = \\\"Generate text using LLM model from Amazon Bedrock.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\n \\\"ai21.j2-grande-instruct\\\",\\n \\\"ai21.j2-jumbo-instruct\\\",\\n \\\"ai21.j2-mid\\\",\\n \\\"ai21.j2-mid-v1\\\",\\n \\\"ai21.j2-ultra\\\",\\n \\\"ai21.j2-ultra-v1\\\",\\n \\\"anthropic.claude-instant-v1\\\",\\n \\\"anthropic.claude-v1\\\",\\n \\\"anthropic.claude-v2\\\",\\n \\\"cohere.command-text-v14\\\",\\n ],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"streaming\\\": {\\\"display_name\\\": \\\"Streaming\\\", \\\"field_type\\\": \\\"bool\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"Region Name\\\"},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\"},\\n \\\"cache\\\": {\\\"display_name\\\": \\\"Cache\\\"},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n inputs: str,\\n model_id: str = \\\"anthropic.claude-instant-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n region_name: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n endpoint_url: Optional[str] = None,\\n streaming: bool = False,\\n cache: Optional[bool] = None,\\n ) -> Text:\\n try:\\n output = BedrockChat(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n region_name=region_name,\\n model_kwargs=model_kwargs,\\n endpoint_url=endpoint_url,\\n streaming=streaming,\\n cache=cache,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"endpoint_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"anthropic.claude-instant-v1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ai21.j2-grande-instruct\",\"ai21.j2-jumbo-instruct\",\"ai21.j2-mid\",\"ai21.j2-mid-v1\",\"ai21.j2-ultra\",\"ai21.j2-ultra-v1\",\"anthropic.claude-instant-v1\",\"anthropic.claude-v1\",\"anthropic.claude-v2\",\"cohere.command-text-v14\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"Region Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using LLM model from Amazon Bedrock.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Amazon Bedrock Model\",\"documentation\":\"\",\"custom_fields\":{\"inputs\":null,\"model_id\":null,\"credentials_profile_name\":null,\"region_name\":null,\"model_kwargs\":null,\"endpoint_url\":null,\"streaming\":null,\"cache\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"CohereModel\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_community.chat_models.cohere import ChatCohere\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass CohereComponent(CustomComponent):\\n display_name = \\\"CohereModel\\\"\\n description = \\\"Generate text using Cohere large language models.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\\\"\\n\\n def build_config(self):\\n return {\\n \\\"cohere_api_key\\\": {\\n \\\"display_name\\\": \\\"Cohere API Key\\\",\\n \\\"type\\\": \\\"password\\\",\\n \\\"password\\\": True,\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"default\\\": 256,\\n \\\"type\\\": \\\"int\\\",\\n \\\"show\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"default\\\": 0.75,\\n \\\"type\\\": \\\"float\\\",\\n \\\"show\\\": True,\\n },\\n \\\"inputs\\\": {\\\"display_name\\\": \\\"Input\\\"},\\n }\\n\\n def build(\\n self,\\n cohere_api_key: str,\\n inputs: str,\\n max_tokens: int = 256,\\n temperature: float = 0.75,\\n ) -> Text:\\n output = ChatCohere(\\n cohere_api_key=cohere_api_key,\\n max_tokens=max_tokens,\\n temperature=temperature,\\n )\\n message = output.invoke(inputs)\\n result = message.content if hasattr(message, \\\"content\\\") else message\\n self.status = result\\n return result\\n return result\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"cohere_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"cohere_api_key\",\"display_name\":\"Cohere API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"inputs\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"inputs\",\"display_name\":\"Input\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_tokens\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_tokens\",\"display_name\":\"Max Tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.75,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Generate text using Cohere large language models.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"CohereModel\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\",\"custom_fields\":{\"cohere_api_key\":null,\"inputs\":null,\"max_tokens\":null,\"temperature\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"model_specs\":{\"AmazonBedrockSpecs\":{\"template\":{\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain_community.llms.bedrock import Bedrock\\n\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AmazonBedrockComponent(CustomComponent):\\n display_name: str = \\\"Amazon Bedrock\\\"\\n description: str = \\\"LLM model from Amazon Bedrock.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model_id\\\": {\\n \\\"display_name\\\": \\\"Model Id\\\",\\n \\\"options\\\": [\\n \\\"ai21.j2-grande-instruct\\\",\\n \\\"ai21.j2-jumbo-instruct\\\",\\n \\\"ai21.j2-mid\\\",\\n \\\"ai21.j2-mid-v1\\\",\\n \\\"ai21.j2-ultra\\\",\\n \\\"ai21.j2-ultra-v1\\\",\\n \\\"anthropic.claude-instant-v1\\\",\\n \\\"anthropic.claude-v1\\\",\\n \\\"anthropic.claude-v2\\\",\\n \\\"cohere.command-text-v14\\\",\\n ],\\n },\\n \\\"credentials_profile_name\\\": {\\\"display_name\\\": \\\"Credentials Profile Name\\\"},\\n \\\"streaming\\\": {\\\"display_name\\\": \\\"Streaming\\\", \\\"field_type\\\": \\\"bool\\\"},\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\"},\\n \\\"region_name\\\": {\\\"display_name\\\": \\\"Region Name\\\"},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\"},\\n \\\"cache\\\": {\\\"display_name\\\": \\\"Cache\\\"},\\n \\\"code\\\": {\\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n model_id: str = \\\"anthropic.claude-instant-v1\\\",\\n credentials_profile_name: Optional[str] = None,\\n region_name: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n endpoint_url: Optional[str] = None,\\n streaming: bool = False,\\n cache: Optional[bool] = None,\\n ) -> BaseLLM:\\n try:\\n output = Bedrock(\\n credentials_profile_name=credentials_profile_name,\\n model_id=model_id,\\n region_name=region_name,\\n model_kwargs=model_kwargs,\\n endpoint_url=endpoint_url,\\n streaming=streaming,\\n cache=cache,\\n ) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AmazonBedrock API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"credentials_profile_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"credentials_profile_name\",\"display_name\":\"Credentials Profile Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"endpoint_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_id\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"anthropic.claude-instant-v1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ai21.j2-grande-instruct\",\"ai21.j2-jumbo-instruct\",\"ai21.j2-mid\",\"ai21.j2-mid-v1\",\"ai21.j2-ultra\",\"ai21.j2-ultra-v1\",\"anthropic.claude-instant-v1\",\"anthropic.claude-v1\",\"anthropic.claude-v2\",\"cohere.command-text-v14\"],\"name\":\"model_id\",\"display_name\":\"Model Id\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_kwargs\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Kwargs\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"region_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"region_name\",\"display_name\":\"Region Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"LLM model from Amazon Bedrock.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"Amazon Bedrock\",\"documentation\":\"\",\"custom_fields\":{\"model_id\":null,\"credentials_profile_name\":null,\"region_name\":null,\"model_kwargs\":null,\"endpoint_url\":null,\"streaming\":null,\"cache\":null},\"output_types\":[\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChatVertexAISpecs\":{\"template\":{\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".json\"],\"password\":false,\"name\":\"credentials\",\"display_name\":\"Credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"examples\":{\"type\":\"BaseMessage\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":true,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"examples\",\"display_name\":\"Examples\",\"advanced\":false,\"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\\nfrom langchain.llms import BaseLLM\\nfrom langchain_community.chat_models.vertexai import ChatVertexAI\\nfrom langchain_core.messages.base import BaseMessage\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel\\n\\n\\nclass ChatVertexAIComponent(CustomComponent):\\n display_name = \\\"ChatVertexAI\\\"\\n description = \\\"`Vertex AI` Chat large language models API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"credentials\\\": {\\n \\\"display_name\\\": \\\"Credentials\\\",\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".json\\\"],\\n \\\"file_path\\\": None,\\n },\\n \\\"examples\\\": {\\n \\\"display_name\\\": \\\"Examples\\\",\\n \\\"multiline\\\": True,\\n },\\n \\\"location\\\": {\\n \\\"display_name\\\": \\\"Location\\\",\\n \\\"value\\\": \\\"us-central1\\\",\\n },\\n \\\"max_output_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Output Tokens\\\",\\n \\\"value\\\": 128,\\n \\\"advanced\\\": True,\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"chat-bison\\\",\\n },\\n \\\"project\\\": {\\n \\\"display_name\\\": \\\"Project\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"value\\\": 0.0,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"value\\\": 40,\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"value\\\": 0.95,\\n \\\"advanced\\\": True,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"value\\\": False,\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def build(\\n self,\\n credentials: Optional[str],\\n project: str,\\n examples: Optional[List[BaseMessage]] = [],\\n location: str = \\\"us-central1\\\",\\n max_output_tokens: int = 128,\\n model_name: str = \\\"chat-bison\\\",\\n temperature: float = 0.0,\\n top_k: int = 40,\\n top_p: float = 0.95,\\n verbose: bool = False,\\n ) -> Union[BaseLanguageModel, BaseLLM]:\\n return ChatVertexAI(\\n credentials=credentials,\\n examples=examples,\\n location=location,\\n max_output_tokens=max_output_tokens,\\n model_name=model_name,\\n project=project,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n verbose=verbose,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"location\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"location\",\"display_name\":\"Location\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"chat-bison\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"project\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"project\",\"display_name\":\"Project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"`Vertex AI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"ChatVertexAI\",\"documentation\":\"\",\"custom_fields\":{\"credentials\":null,\"project\":null,\"examples\":null,\"location\":null,\"max_output_tokens\":null,\"model_name\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"verbose\":null},\"output_types\":[\"BaseLanguageModel\",\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"VertexAISpecs\":{\"template\":{\"credentials\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".json\"],\"file_path\":\"\",\"password\":false,\"name\":\"credentials\",\"display_name\":\"Credentials\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langflow import CustomComponent\\nfrom langchain.llms import BaseLLM\\nfrom typing import Optional, Union, Callable, Dict\\nfrom langchain_community.llms.vertexai import VertexAI\\n\\n\\nclass VertexAIComponent(CustomComponent):\\n display_name = \\\"VertexAI\\\"\\n description = \\\"Google Vertex AI large language models\\\"\\n\\n def build_config(self):\\n return {\\n \\\"credentials\\\": {\\n \\\"display_name\\\": \\\"Credentials\\\",\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".json\\\"],\\n \\\"required\\\": False,\\n \\\"value\\\": None,\\n },\\n \\\"location\\\": {\\n \\\"display_name\\\": \\\"Location\\\",\\n \\\"type\\\": \\\"str\\\",\\n \\\"advanced\\\": True,\\n \\\"value\\\": \\\"us-central1\\\",\\n \\\"required\\\": False,\\n },\\n \\\"max_output_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Output Tokens\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 128,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"max_retries\\\": {\\n \\\"display_name\\\": \\\"Max Retries\\\",\\n \\\"type\\\": \\\"int\\\",\\n \\\"value\\\": 6,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"metadata\\\": {\\n \\\"display_name\\\": \\\"Metadata\\\",\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"required\\\": False,\\n \\\"default\\\": {},\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"type\\\": \\\"str\\\",\\n \\\"value\\\": \\\"text-bison\\\",\\n \\\"required\\\": False,\\n },\\n \\\"n\\\": {\\n \\\"advanced\\\": True,\\n \\\"display_name\\\": \\\"N\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 1,\\n \\\"required\\\": False,\\n },\\n \\\"project\\\": {\\n \\\"display_name\\\": \\\"Project\\\",\\n \\\"type\\\": \\\"str\\\",\\n \\\"required\\\": False,\\n \\\"default\\\": None,\\n },\\n \\\"request_parallelism\\\": {\\n \\\"display_name\\\": \\\"Request Parallelism\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 5,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"streaming\\\": {\\n \\\"display_name\\\": \\\"Streaming\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"value\\\": False,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.0,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"type\\\": \\\"int\\\", \\\"default\\\": 40, \\\"required\\\": False, \\\"advanced\\\": True},\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.95,\\n \\\"required\\\": False,\\n \\\"advanced\\\": True,\\n },\\n \\\"tuned_model_name\\\": {\\n \\\"display_name\\\": \\\"Tuned Model Name\\\",\\n \\\"type\\\": \\\"str\\\",\\n \\\"required\\\": False,\\n \\\"value\\\": None,\\n \\\"advanced\\\": True,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"value\\\": False,\\n \\\"required\\\": False,\\n },\\n \\\"name\\\": {\\\"display_name\\\": \\\"Name\\\", \\\"field_type\\\": \\\"str\\\"},\\n }\\n\\n def build(\\n self,\\n credentials: Optional[str] = None,\\n location: str = \\\"us-central1\\\",\\n max_output_tokens: int = 128,\\n max_retries: int = 6,\\n metadata: Dict = {},\\n model_name: str = \\\"text-bison\\\",\\n n: int = 1,\\n name: Optional[str] = None,\\n project: Optional[str] = None,\\n request_parallelism: int = 5,\\n streaming: bool = False,\\n temperature: float = 0.0,\\n top_k: int = 40,\\n top_p: float = 0.95,\\n tuned_model_name: Optional[str] = None,\\n verbose: bool = False,\\n ) -> Union[BaseLLM, Callable]:\\n return VertexAI(\\n credentials=credentials,\\n location=location,\\n max_output_tokens=max_output_tokens,\\n max_retries=max_retries,\\n metadata=metadata,\\n model_name=model_name,\\n n=n,\\n name=name,\\n project=project,\\n request_parallelism=request_parallelism,\\n streaming=streaming,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n tuned_model_name=tuned_model_name,\\n verbose=verbose,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"location\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"us-central1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"location\",\"display_name\":\"Location\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":128,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"max_retries\":{\"type\":\"int\",\"required\":false,\"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},\"metadata\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":{},\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"text-bison\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_name\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n\",\"display_name\":\"N\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"name\",\"display_name\":\"Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"project\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"project\",\"display_name\":\"Project\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"request_parallelism\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"request_parallelism\",\"display_name\":\"Request Parallelism\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"tuned_model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tuned_model_name\",\"display_name\":\"Tuned Model Name\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Google Vertex AI large language models\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\",\"Callable\"],\"display_name\":\"VertexAI\",\"documentation\":\"\",\"custom_fields\":{\"credentials\":null,\"location\":null,\"max_output_tokens\":null,\"max_retries\":null,\"metadata\":null,\"model_name\":null,\"n\":null,\"name\":null,\"project\":null,\"request_parallelism\":null,\"streaming\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"tuned_model_name\":null,\"verbose\":null},\"output_types\":[\"BaseLLM\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChatAnthropicSpecs\":{\"template\":{\"anthropic_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"anthropic_api_key\",\"display_name\":\"Anthropic API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"anthropic_api_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"anthropic_api_url\",\"display_name\":\"Anthropic API URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from pydantic.v1.types import SecretStr\\nfrom langflow import CustomComponent\\nfrom typing import Optional, Union, Callable\\nfrom langflow.field_typing import BaseLanguageModel\\nfrom langchain_community.chat_models.anthropic import ChatAnthropic\\n\\n\\nclass ChatAnthropicComponent(CustomComponent):\\n display_name = \\\"ChatAnthropic\\\"\\n description = \\\"`Anthropic` chat large language models.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic\\\"\\n\\n def build_config(self):\\n return {\\n \\\"anthropic_api_key\\\": {\\n \\\"display_name\\\": \\\"Anthropic API Key\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"password\\\": True,\\n },\\n \\\"anthropic_api_url\\\": {\\n \\\"display_name\\\": \\\"Anthropic API URL\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n },\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Kwargs\\\",\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n },\\n }\\n\\n def build(\\n self,\\n anthropic_api_key: str,\\n anthropic_api_url: Optional[str] = None,\\n model_kwargs: dict = {},\\n temperature: Optional[float] = None,\\n ) -> Union[BaseLanguageModel, Callable]:\\n return ChatAnthropic(\\n anthropic_api_key=SecretStr(anthropic_api_key),\\n anthropic_api_url=anthropic_api_url,\\n model_kwargs=model_kwargs,\\n temperature=temperature,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"model_kwargs\":{\"type\":\"dict\",\"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},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"`Anthropic` chat large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"ChatAnthropic\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic\",\"custom_fields\":{\"anthropic_api_key\":null,\"anthropic_api_url\":null,\"model_kwargs\":null,\"temperature\":null},\"output_types\":[\"BaseLanguageModel\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AzureChatOpenAISpecs\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_version\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"2023-12-01-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"2023-03-15-preview\",\"2023-05-15\",\"2023-06-01-preview\",\"2023-07-01-preview\",\"2023-08-01-preview\",\"2023-09-01-preview\",\"2023-12-01-preview\"],\"name\":\"api_version\",\"display_name\":\"API Version\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_deployment\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_deployment\",\"display_name\":\"Deployment Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"azure_endpoint\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"azure_endpoint\",\"display_name\":\"Azure Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\",\"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.llms.base import BaseLanguageModel\\nfrom langchain_community.chat_models.azure_openai import AzureChatOpenAI\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AzureChatOpenAISpecsComponent(CustomComponent):\\n display_name: str = \\\"AzureChatOpenAI\\\"\\n description: str = \\\"LLM model from Azure OpenAI.\\\"\\n documentation: str = \\\"https://python.langchain.com/docs/integrations/llms/azure_openai\\\"\\n beta = False\\n\\n AZURE_OPENAI_MODELS = [\\n \\\"gpt-35-turbo\\\",\\n \\\"gpt-35-turbo-16k\\\",\\n \\\"gpt-35-turbo-instruct\\\",\\n \\\"gpt-4\\\",\\n \\\"gpt-4-32k\\\",\\n \\\"gpt-4-vision\\\",\\n ]\\n\\n AZURE_OPENAI_API_VERSIONS = [\\n \\\"2023-03-15-preview\\\",\\n \\\"2023-05-15\\\",\\n \\\"2023-06-01-preview\\\",\\n \\\"2023-07-01-preview\\\",\\n \\\"2023-08-01-preview\\\",\\n \\\"2023-09-01-preview\\\",\\n \\\"2023-12-01-preview\\\",\\n ]\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": self.AZURE_OPENAI_MODELS[0],\\n \\\"options\\\": self.AZURE_OPENAI_MODELS,\\n \\\"required\\\": True,\\n },\\n \\\"azure_endpoint\\\": {\\n \\\"display_name\\\": \\\"Azure Endpoint\\\",\\n \\\"required\\\": True,\\n \\\"info\\\": \\\"Your Azure endpoint, including the resource.. Example: `https://example-resource.azure.openai.com/`\\\",\\n },\\n \\\"azure_deployment\\\": {\\n \\\"display_name\\\": \\\"Deployment Name\\\",\\n \\\"required\\\": True,\\n },\\n \\\"api_version\\\": {\\n \\\"display_name\\\": \\\"API Version\\\",\\n \\\"options\\\": self.AZURE_OPENAI_API_VERSIONS,\\n \\\"value\\\": self.AZURE_OPENAI_API_VERSIONS[-1],\\n \\\"required\\\": True,\\n \\\"advanced\\\": True,\\n },\\n \\\"api_key\\\": {\\\"display_name\\\": \\\"API Key\\\", \\\"required\\\": True, \\\"password\\\": True},\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"value\\\": 0.7,\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"required\\\": False,\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"value\\\": 1000,\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": True,\\n \\\"info\\\": \\\"Maximum number of tokens to generate.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str,\\n azure_endpoint: str,\\n azure_deployment: str,\\n api_key: str,\\n api_version: str,\\n temperature: float = 0.7,\\n max_tokens: Optional[int] = 1000,\\n ) -> BaseLanguageModel:\\n try:\\n llm = AzureChatOpenAI(\\n model=model,\\n azure_endpoint=azure_endpoint,\\n azure_deployment=azure_deployment,\\n api_version=api_version,\\n api_key=api_key,\\n temperature=temperature,\\n max_tokens=max_tokens,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to AzureOpenAI API.\\\") from e\\n return llm\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"max_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1000,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_tokens\",\"display_name\":\"Max Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"Maximum number of tokens to generate.\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-35-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gpt-35-turbo\",\"gpt-35-turbo-16k\",\"gpt-35-turbo-instruct\",\"gpt-4\",\"gpt-4-32k\",\"gpt-4-vision\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"LLM model from Azure OpenAI.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"AzureChatOpenAI\",\"documentation\":\"https://python.langchain.com/docs/integrations/llms/azure_openai\",\"custom_fields\":{\"model\":null,\"azure_endpoint\":null,\"azure_deployment\":null,\"api_key\":null,\"api_version\":null,\"temperature\":null,\"max_tokens\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":false},\"ChatOllamaEndpointSpecs\":{\"template\":{\"metadata\":{\"type\":\"Dict[str, Any]\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"Metadata to add to the run trace.\",\"title_case\":false},\"stop\":{\"type\":\"list\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"List of tokens to signal the model to stop generating text.\",\"title_case\":false},\"tags\":{\"type\":\"list\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"display_name\":\"Tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"Tags to add to the run trace.\",\"title_case\":false},\"base_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"base_url\",\"display_name\":\"Base URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"advanced\":true,\"dynamic\":false,\"info\":\"Enable or disable caching.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Any, Dict, List, Optional\\n\\n# from langchain_community.chat_models import ChatOllama\\nfrom langchain_community.chat_models import ChatOllama\\nfrom langchain_core.language_models.chat_models import BaseChatModel\\n\\n# from langchain.chat_models import ChatOllama\\nfrom langflow import CustomComponent\\n\\n# whe When a callback component is added to Langflow, the comment must be uncommented.\\n# from langchain.callbacks.manager import CallbackManager\\n\\n\\nclass ChatOllamaComponent(CustomComponent):\\n display_name = \\\"ChatOllama\\\"\\n description = \\\"Local LLM for chat with Ollama.\\\"\\n\\n def build_config(self) -> dict:\\n return {\\n \\\"base_url\\\": {\\n \\\"display_name\\\": \\\"Base URL\\\",\\n \\\"info\\\": \\\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\\\",\\n },\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"llama2\\\",\\n \\\"info\\\": \\\"Refer to https://ollama.ai/library for more models.\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.8,\\n \\\"info\\\": \\\"Controls the creativity of model responses.\\\",\\n },\\n \\\"cache\\\": {\\n \\\"display_name\\\": \\\"Cache\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"info\\\": \\\"Enable or disable caching.\\\",\\n \\\"advanced\\\": True,\\n \\\"value\\\": False,\\n },\\n ### When a callback component is added to Langflow, the comment must be uncommented. ###\\n # \\\"callback_manager\\\": {\\n # \\\"display_name\\\": \\\"Callback Manager\\\",\\n # \\\"info\\\": \\\"Optional callback manager for additional functionality.\\\",\\n # \\\"advanced\\\": True,\\n # },\\n # \\\"callbacks\\\": {\\n # \\\"display_name\\\": \\\"Callbacks\\\",\\n # \\\"info\\\": \\\"Callbacks to execute during model runtime.\\\",\\n # \\\"advanced\\\": True,\\n # },\\n ########################################################################################\\n \\\"format\\\": {\\n \\\"display_name\\\": \\\"Format\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"Specify the format of the output (e.g., json).\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"metadata\\\": {\\n \\\"display_name\\\": \\\"Metadata\\\",\\n \\\"info\\\": \\\"Metadata to add to the run trace.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat\\\": {\\n \\\"display_name\\\": \\\"Mirostat\\\",\\n \\\"options\\\": [\\\"Disabled\\\", \\\"Mirostat\\\", \\\"Mirostat 2.0\\\"],\\n \\\"info\\\": \\\"Enable/disable Mirostat sampling for controlling perplexity.\\\",\\n \\\"value\\\": \\\"Disabled\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_eta\\\": {\\n \\\"display_name\\\": \\\"Mirostat Eta\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Learning rate for Mirostat algorithm. (Default: 0.1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_tau\\\": {\\n \\\"display_name\\\": \\\"Mirostat Tau\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Controls the balance between coherence and diversity of the output. (Default: 5.0)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_ctx\\\": {\\n \\\"display_name\\\": \\\"Context Window Size\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Size of the context window for generating tokens. (Default: 2048)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_gpu\\\": {\\n \\\"display_name\\\": \\\"Number of GPUs\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of GPUs to use for computation. (Default: 1 on macOS, 0 to disable)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_thread\\\": {\\n \\\"display_name\\\": \\\"Number of Threads\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of threads to use during computation. (Default: detected for optimal performance)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_last_n\\\": {\\n \\\"display_name\\\": \\\"Repeat Last N\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"How far back the model looks to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_penalty\\\": {\\n \\\"display_name\\\": \\\"Repeat Penalty\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Penalty for repetitions in generated text. (Default: 1.1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"tfs_z\\\": {\\n \\\"display_name\\\": \\\"TFS Z\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Tail free sampling value. (Default: 1)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"timeout\\\": {\\n \\\"display_name\\\": \\\"Timeout\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Timeout for the request stream.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Limits token selection to top K. (Default: 40)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Works together with top-k. (Default: 0.9)\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"info\\\": \\\"Whether to print out response text.\\\",\\n },\\n \\\"tags\\\": {\\n \\\"display_name\\\": \\\"Tags\\\",\\n \\\"field_type\\\": \\\"list\\\",\\n \\\"info\\\": \\\"Tags to add to the run trace.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"stop\\\": {\\n \\\"display_name\\\": \\\"Stop Tokens\\\",\\n \\\"field_type\\\": \\\"list\\\",\\n \\\"info\\\": \\\"List of tokens to signal the model to stop generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"system\\\": {\\n \\\"display_name\\\": \\\"System\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"System to use for generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"template\\\": {\\n \\\"display_name\\\": \\\"Template\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"info\\\": \\\"Template to use for generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def build(\\n self,\\n base_url: Optional[str],\\n model: str,\\n mirostat: Optional[str],\\n mirostat_eta: Optional[float] = None,\\n mirostat_tau: Optional[float] = None,\\n ### When a callback component is added to Langflow, the comment must be uncommented.###\\n # callback_manager: Optional[CallbackManager] = None,\\n # callbacks: Optional[List[Callbacks]] = None,\\n #######################################################################################\\n repeat_last_n: Optional[int] = None,\\n verbose: Optional[bool] = None,\\n cache: Optional[bool] = None,\\n num_ctx: Optional[int] = None,\\n num_gpu: Optional[int] = None,\\n format: Optional[str] = None,\\n metadata: Optional[Dict[str, Any]] = None,\\n num_thread: Optional[int] = None,\\n repeat_penalty: Optional[float] = None,\\n stop: Optional[List[str]] = None,\\n system: Optional[str] = None,\\n tags: Optional[List[str]] = None,\\n temperature: Optional[float] = None,\\n template: Optional[str] = None,\\n tfs_z: Optional[float] = None,\\n timeout: Optional[int] = None,\\n top_k: Optional[int] = None,\\n top_p: Optional[int] = None,\\n ) -> BaseChatModel:\\n if not base_url:\\n base_url = \\\"http://localhost:11434\\\"\\n\\n # Mapping mirostat settings to their corresponding values\\n mirostat_options = {\\\"Mirostat\\\": 1, \\\"Mirostat 2.0\\\": 2}\\n\\n # Default to 0 for 'Disabled'\\n mirostat_value = mirostat_options.get(mirostat, 0) # type: ignore\\n\\n # Set mirostat_eta and mirostat_tau to None if mirostat is disabled\\n if mirostat_value == 0:\\n mirostat_eta = None\\n mirostat_tau = None\\n\\n # Mapping system settings to their corresponding values\\n llm_params = {\\n \\\"base_url\\\": base_url,\\n \\\"cache\\\": cache,\\n \\\"model\\\": model,\\n \\\"mirostat\\\": mirostat_value,\\n \\\"format\\\": format,\\n \\\"metadata\\\": metadata,\\n \\\"tags\\\": tags,\\n ## When a callback component is added to Langflow, the comment must be uncommented.##\\n # \\\"callback_manager\\\": callback_manager,\\n # \\\"callbacks\\\": callbacks,\\n #####################################################################################\\n \\\"mirostat_eta\\\": mirostat_eta,\\n \\\"mirostat_tau\\\": mirostat_tau,\\n \\\"num_ctx\\\": num_ctx,\\n \\\"num_gpu\\\": num_gpu,\\n \\\"num_thread\\\": num_thread,\\n \\\"repeat_last_n\\\": repeat_last_n,\\n \\\"repeat_penalty\\\": repeat_penalty,\\n \\\"temperature\\\": temperature,\\n \\\"stop\\\": stop,\\n \\\"system\\\": system,\\n \\\"template\\\": template,\\n \\\"tfs_z\\\": tfs_z,\\n \\\"timeout\\\": timeout,\\n \\\"top_k\\\": top_k,\\n \\\"top_p\\\": top_p,\\n \\\"verbose\\\": verbose,\\n }\\n\\n # None Value remove\\n llm_params = {k: v for k, v in llm_params.items() if v is not None}\\n\\n try:\\n output = ChatOllama(**llm_params) # type: ignore\\n except Exception as e:\\n raise ValueError(\\\"Could not initialize Ollama LLM.\\\") from e\\n\\n return output # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"format\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"format\",\"display_name\":\"Format\",\"advanced\":true,\"dynamic\":false,\"info\":\"Specify the format of the output (e.g., json).\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mirostat\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Disabled\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Disabled\",\"Mirostat\",\"Mirostat 2.0\"],\"name\":\"mirostat\",\"display_name\":\"Mirostat\",\"advanced\":true,\"dynamic\":false,\"info\":\"Enable/disable Mirostat sampling for controlling perplexity.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mirostat_eta\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_eta\",\"display_name\":\"Mirostat Eta\",\"advanced\":true,\"dynamic\":false,\"info\":\"Learning rate for Mirostat algorithm. (Default: 0.1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"mirostat_tau\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_tau\",\"display_name\":\"Mirostat Tau\",\"advanced\":true,\"dynamic\":false,\"info\":\"Controls the balance between coherence and diversity of the output. (Default: 5.0)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"llama2\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"Refer to https://ollama.ai/library for more models.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"num_ctx\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_ctx\",\"display_name\":\"Context Window Size\",\"advanced\":true,\"dynamic\":false,\"info\":\"Size of the context window for generating tokens. (Default: 2048)\",\"title_case\":false},\"num_gpu\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_gpu\",\"display_name\":\"Number of GPUs\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of GPUs to use for computation. (Default: 1 on macOS, 0 to disable)\",\"title_case\":false},\"num_thread\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_thread\",\"display_name\":\"Number of Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of threads to use during computation. (Default: detected for optimal performance)\",\"title_case\":false},\"repeat_last_n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_last_n\",\"display_name\":\"Repeat Last N\",\"advanced\":true,\"dynamic\":false,\"info\":\"How far back the model looks to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)\",\"title_case\":false},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_penalty\",\"display_name\":\"Repeat Penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"Penalty for repetitions in generated text. (Default: 1.1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"system\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"system\",\"display_name\":\"System\",\"advanced\":true,\"dynamic\":false,\"info\":\"System to use for generating text.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Controls the creativity of model responses.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"template\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"template\",\"display_name\":\"Template\",\"advanced\":true,\"dynamic\":false,\"info\":\"Template to use for generating text.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"tfs_z\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tfs_z\",\"display_name\":\"TFS Z\",\"advanced\":true,\"dynamic\":false,\"info\":\"Tail free sampling value. (Default: 1)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"timeout\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"timeout\",\"display_name\":\"Timeout\",\"advanced\":true,\"dynamic\":false,\"info\":\"Timeout for the request stream.\",\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"Limits token selection to top K. (Default: 40)\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"Works together with top-k. (Default: 0.9)\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":false,\"dynamic\":false,\"info\":\"Whether to print out response text.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Local LLM for chat with Ollama.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseChatModel\"],\"display_name\":\"ChatOllama\",\"documentation\":\"\",\"custom_fields\":{\"base_url\":null,\"model\":null,\"mirostat\":null,\"mirostat_eta\":null,\"mirostat_tau\":null,\"repeat_last_n\":null,\"verbose\":null,\"cache\":null,\"num_ctx\":null,\"num_gpu\":null,\"format\":null,\"metadata\":null,\"num_thread\":null,\"repeat_penalty\":null,\"stop\":null,\"system\":null,\"tags\":null,\"temperature\":null,\"template\":null,\"tfs_z\":null,\"timeout\":null,\"top_k\":null,\"top_p\":null},\"output_types\":[\"BaseChatModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"BaiduQianfanChatEndpointsSpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint\\nfrom langchain.llms.base import BaseLLM\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass QianfanChatEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanChatEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan chat models. Get more detail from \\\"\\n \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanChatEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=SecretStr(qianfan_ak) if qianfan_ak else None,\\n qianfan_sk=SecretStr(qianfan_sk) if qianfan_sk else None,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"title_case\":false,\"input_types\":[\"Text\"]},\"penalty_score\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"qianfan_ak\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"qianfan_sk\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Baidu Qianfan chat models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"QianfanChatEndpoint\",\"documentation\":\"\",\"custom_fields\":{\"model\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"top_p\":null,\"temperature\":null,\"penalty_score\":null,\"endpoint\":null},\"output_types\":[\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"LlamaCppSpecs\":{\"template\":{\"metadata\":{\"type\":\"Dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"metadata\",\"display_name\":\"Metadata\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model_kwargs\":{\"type\":\"Dict\",\"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},\"model_path\":{\"type\":\"file\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".bin\"],\"file_path\":\"\",\"password\":false,\"name\":\"model_path\",\"display_name\":\"Model Path\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"cache\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"cache\",\"display_name\":\"Cache\",\"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 Optional, List, Dict, Any\\nfrom langflow import CustomComponent\\nfrom langchain_community.llms.llamacpp import LlamaCpp\\n\\n\\nclass LlamaCppComponent(CustomComponent):\\n display_name = \\\"LlamaCpp\\\"\\n description = \\\"llama.cpp model.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\\\"\\n\\n def build_config(self):\\n return {\\n \\\"grammar\\\": {\\\"display_name\\\": \\\"Grammar\\\", \\\"advanced\\\": True},\\n \\\"cache\\\": {\\\"display_name\\\": \\\"Cache\\\", \\\"advanced\\\": True},\\n \\\"client\\\": {\\\"display_name\\\": \\\"Client\\\", \\\"advanced\\\": True},\\n \\\"echo\\\": {\\\"display_name\\\": \\\"Echo\\\", \\\"advanced\\\": True},\\n \\\"f16_kv\\\": {\\\"display_name\\\": \\\"F16 KV\\\", \\\"advanced\\\": True},\\n \\\"grammar_path\\\": {\\\"display_name\\\": \\\"Grammar Path\\\", \\\"advanced\\\": True},\\n \\\"last_n_tokens_size\\\": {\\\"display_name\\\": \\\"Last N Tokens Size\\\", \\\"advanced\\\": True},\\n \\\"logits_all\\\": {\\\"display_name\\\": \\\"Logits All\\\", \\\"advanced\\\": True},\\n \\\"logprobs\\\": {\\\"display_name\\\": \\\"Logprobs\\\", \\\"advanced\\\": True},\\n \\\"lora_base\\\": {\\\"display_name\\\": \\\"Lora Base\\\", \\\"advanced\\\": True},\\n \\\"lora_path\\\": {\\\"display_name\\\": \\\"Lora Path\\\", \\\"advanced\\\": True},\\n \\\"max_tokens\\\": {\\\"display_name\\\": \\\"Max Tokens\\\", \\\"advanced\\\": True},\\n \\\"metadata\\\": {\\\"display_name\\\": \\\"Metadata\\\", \\\"advanced\\\": True},\\n \\\"model_kwargs\\\": {\\\"display_name\\\": \\\"Model Kwargs\\\", \\\"advanced\\\": True},\\n \\\"model_path\\\": {\\n \\\"display_name\\\": \\\"Model Path\\\",\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".bin\\\"],\\n \\\"required\\\": True,\\n },\\n \\\"n_batch\\\": {\\\"display_name\\\": \\\"N Batch\\\", \\\"advanced\\\": True},\\n \\\"n_ctx\\\": {\\\"display_name\\\": \\\"N Ctx\\\", \\\"advanced\\\": True},\\n \\\"n_gpu_layers\\\": {\\\"display_name\\\": \\\"N GPU Layers\\\", \\\"advanced\\\": True},\\n \\\"n_parts\\\": {\\\"display_name\\\": \\\"N Parts\\\", \\\"advanced\\\": True},\\n \\\"n_threads\\\": {\\\"display_name\\\": \\\"N Threads\\\", \\\"advanced\\\": True},\\n \\\"repeat_penalty\\\": {\\\"display_name\\\": \\\"Repeat Penalty\\\", \\\"advanced\\\": True},\\n \\\"rope_freq_base\\\": {\\\"display_name\\\": \\\"Rope Freq Base\\\", \\\"advanced\\\": True},\\n \\\"rope_freq_scale\\\": {\\\"display_name\\\": \\\"Rope Freq Scale\\\", \\\"advanced\\\": True},\\n \\\"seed\\\": {\\\"display_name\\\": \\\"Seed\\\", \\\"advanced\\\": True},\\n \\\"stop\\\": {\\\"display_name\\\": \\\"Stop\\\", \\\"advanced\\\": True},\\n \\\"streaming\\\": {\\\"display_name\\\": \\\"Streaming\\\", \\\"advanced\\\": True},\\n \\\"suffix\\\": {\\\"display_name\\\": \\\"Suffix\\\", \\\"advanced\\\": True},\\n \\\"tags\\\": {\\\"display_name\\\": \\\"Tags\\\", \\\"advanced\\\": True},\\n \\\"temperature\\\": {\\\"display_name\\\": \\\"Temperature\\\"},\\n \\\"top_k\\\": {\\\"display_name\\\": \\\"Top K\\\", \\\"advanced\\\": True},\\n \\\"top_p\\\": {\\\"display_name\\\": \\\"Top P\\\", \\\"advanced\\\": True},\\n \\\"use_mlock\\\": {\\\"display_name\\\": \\\"Use Mlock\\\", \\\"advanced\\\": True},\\n \\\"use_mmap\\\": {\\\"display_name\\\": \\\"Use Mmap\\\", \\\"advanced\\\": True},\\n \\\"verbose\\\": {\\\"display_name\\\": \\\"Verbose\\\", \\\"advanced\\\": True},\\n \\\"vocab_only\\\": {\\\"display_name\\\": \\\"Vocab Only\\\", \\\"advanced\\\": True},\\n }\\n\\n def build(\\n self,\\n model_path: str,\\n grammar: Optional[str] = None,\\n cache: Optional[bool] = None,\\n client: Optional[Any] = None,\\n echo: Optional[bool] = False,\\n f16_kv: bool = True,\\n grammar_path: Optional[str] = None,\\n last_n_tokens_size: Optional[int] = 64,\\n logits_all: bool = False,\\n logprobs: Optional[int] = None,\\n lora_base: Optional[str] = None,\\n lora_path: Optional[str] = None,\\n max_tokens: Optional[int] = 256,\\n metadata: Optional[Dict] = None,\\n model_kwargs: Dict = {},\\n n_batch: Optional[int] = 8,\\n n_ctx: int = 512,\\n n_gpu_layers: Optional[int] = 1,\\n n_parts: int = -1,\\n n_threads: Optional[int] = 1,\\n repeat_penalty: Optional[float] = 1.1,\\n rope_freq_base: float = 10000.0,\\n rope_freq_scale: float = 1.0,\\n seed: int = -1,\\n stop: Optional[List[str]] = [],\\n streaming: bool = True,\\n suffix: Optional[str] = \\\"\\\",\\n tags: Optional[List[str]] = [],\\n temperature: Optional[float] = 0.8,\\n top_k: Optional[int] = 40,\\n top_p: Optional[float] = 0.95,\\n use_mlock: bool = False,\\n use_mmap: Optional[bool] = True,\\n verbose: bool = True,\\n vocab_only: bool = False,\\n ) -> LlamaCpp:\\n return LlamaCpp(\\n model_path=model_path,\\n grammar=grammar,\\n cache=cache,\\n client=client,\\n echo=echo,\\n f16_kv=f16_kv,\\n grammar_path=grammar_path,\\n last_n_tokens_size=last_n_tokens_size,\\n logits_all=logits_all,\\n logprobs=logprobs,\\n lora_base=lora_base,\\n lora_path=lora_path,\\n max_tokens=max_tokens,\\n metadata=metadata,\\n model_kwargs=model_kwargs,\\n n_batch=n_batch,\\n n_ctx=n_ctx,\\n n_gpu_layers=n_gpu_layers,\\n n_parts=n_parts,\\n n_threads=n_threads,\\n repeat_penalty=repeat_penalty,\\n rope_freq_base=rope_freq_base,\\n rope_freq_scale=rope_freq_scale,\\n seed=seed,\\n stop=stop,\\n streaming=streaming,\\n suffix=suffix,\\n tags=tags,\\n temperature=temperature,\\n top_k=top_k,\\n top_p=top_p,\\n use_mlock=use_mlock,\\n use_mmap=use_mmap,\\n verbose=verbose,\\n vocab_only=vocab_only,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"echo\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"echo\",\"display_name\":\"Echo\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"f16_kv\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"f16_kv\",\"display_name\":\"F16 KV\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"grammar\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"grammar\",\"display_name\":\"Grammar\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"grammar_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"grammar_path\",\"display_name\":\"Grammar Path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"last_n_tokens_size\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":64,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"last_n_tokens_size\",\"display_name\":\"Last N Tokens Size\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"logits_all\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"logits_all\",\"display_name\":\"Logits All\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"logprobs\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"logprobs\",\"display_name\":\"Logprobs\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"lora_base\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"lora_base\",\"display_name\":\"Lora Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"lora_path\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"lora_path\",\"display_name\":\"Lora Path\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"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\":\"\",\"title_case\":false},\"n_batch\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_batch\",\"display_name\":\"N Batch\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_ctx\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":512,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_ctx\",\"display_name\":\"N Ctx\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_gpu_layers\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_gpu_layers\",\"display_name\":\"N GPU Layers\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_parts\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_parts\",\"display_name\":\"N Parts\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"n_threads\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_threads\",\"display_name\":\"N Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_penalty\",\"display_name\":\"Repeat Penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"rope_freq_base\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":10000.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"rope_freq_base\",\"display_name\":\"Rope Freq Base\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"rope_freq_scale\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"rope_freq_scale\",\"display_name\":\"Rope Freq Scale\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"seed\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":-1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"seed\",\"display_name\":\"Seed\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"suffix\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"suffix\",\"display_name\":\"Suffix\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"tags\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":[],\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tags\",\"display_name\":\"Tags\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":40,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"use_mlock\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_mlock\",\"display_name\":\"Use Mlock\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"use_mmap\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"use_mmap\",\"display_name\":\"Use Mmap\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"vocab_only\":{\"type\":\"bool\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"vocab_only\",\"display_name\":\"Vocab Only\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"llama.cpp model.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"LlamaCpp\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\",\"LLM\"],\"display_name\":\"LlamaCpp\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp\",\"custom_fields\":{\"model_path\":null,\"grammar\":null,\"cache\":null,\"client\":null,\"echo\":null,\"f16_kv\":null,\"grammar_path\":null,\"last_n_tokens_size\":null,\"logits_all\":null,\"logprobs\":null,\"lora_base\":null,\"lora_path\":null,\"max_tokens\":null,\"metadata\":null,\"model_kwargs\":null,\"n_batch\":null,\"n_ctx\":null,\"n_gpu_layers\":null,\"n_parts\":null,\"n_threads\":null,\"repeat_penalty\":null,\"rope_freq_base\":null,\"rope_freq_scale\":null,\"seed\":null,\"stop\":null,\"streaming\":null,\"suffix\":null,\"tags\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"use_mlock\":null,\"use_mmap\":null,\"verbose\":null,\"vocab_only\":null},\"output_types\":[\"LlamaCpp\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AnthropicSpecs\":{\"template\":{\"anthropic_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"anthropic_api_key\",\"display_name\":\"Anthropic API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"anthropic_api_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"anthropic_api_url\",\"display_name\":\"Anthropic API URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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_community.llms.anthropic import Anthropic\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, NestedDict\\n\\n\\nclass AnthropicComponent(CustomComponent):\\n display_name = \\\"Anthropic\\\"\\n description = \\\"Anthropic large language models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"anthropic_api_key\\\": {\\n \\\"display_name\\\": \\\"Anthropic API Key\\\",\\n \\\"type\\\": str,\\n \\\"password\\\": True,\\n },\\n \\\"anthropic_api_url\\\": {\\n \\\"display_name\\\": \\\"Anthropic API URL\\\",\\n \\\"type\\\": str,\\n },\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Kwargs\\\",\\n \\\"field_type\\\": \\\"NestedDict\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n },\\n }\\n\\n def build(\\n self,\\n anthropic_api_key: str,\\n anthropic_api_url: str,\\n model_kwargs: NestedDict = {},\\n temperature: Optional[float] = None,\\n ) -> BaseLanguageModel:\\n return Anthropic(\\n anthropic_api_key=SecretStr(anthropic_api_key),\\n anthropic_api_url=anthropic_api_url,\\n model_kwargs=model_kwargs,\\n temperature=temperature,\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"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},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Anthropic large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"Anthropic\",\"documentation\":\"\",\"custom_fields\":{\"anthropic_api_key\":null,\"anthropic_api_url\":null,\"model_kwargs\":null,\"temperature\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"AnthropicLLMSpecs\":{\"template\":{\"anthropic_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"anthropic_api_key\",\"display_name\":\"Anthropic API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"Your Anthropic API key.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"api_endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"api_endpoint\",\"display_name\":\"API Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\",\"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_community.chat_models.anthropic import ChatAnthropic\\nfrom langchain.llms.base import BaseLanguageModel\\nfrom pydantic.v1 import SecretStr\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass AnthropicLLM(CustomComponent):\\n display_name: str = \\\"AnthropicLLM\\\"\\n description: str = \\\"Anthropic Chat&Completion large language models.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"claude-2.1\\\",\\n \\\"claude-2.0\\\",\\n \\\"claude-instant-1.2\\\",\\n \\\"claude-instant-1\\\",\\n # Add more models as needed\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/anthropic\\\",\\n \\\"required\\\": True,\\n \\\"value\\\": \\\"claude-2.1\\\",\\n },\\n \\\"anthropic_api_key\\\": {\\n \\\"display_name\\\": \\\"Anthropic API Key\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"Your Anthropic API key.\\\",\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"value\\\": 256,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.7,\\n },\\n \\\"api_endpoint\\\": {\\n \\\"display_name\\\": \\\"API Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Anthropic API. Defaults to 'https://api.anthropic.com' if not specified.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str,\\n anthropic_api_key: Optional[str] = None,\\n max_tokens: Optional[int] = None,\\n temperature: Optional[float] = None,\\n api_endpoint: Optional[str] = None,\\n ) -> BaseLanguageModel:\\n # Set default API endpoint if not provided\\n if not api_endpoint:\\n api_endpoint = \\\"https://api.anthropic.com\\\"\\n\\n try:\\n output = ChatAnthropic(\\n model_name=model,\\n anthropic_api_key=SecretStr(anthropic_api_key) if anthropic_api_key else None,\\n max_tokens_to_sample=max_tokens, # type: ignore\\n temperature=temperature,\\n anthropic_api_url=api_endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Anthropic API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"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\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"claude-2.1\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"claude-2.1\",\"claude-2.0\",\"claude-instant-1.2\",\"claude-instant-1\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/anthropic\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Anthropic Chat&Completion large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"AnthropicLLM\",\"documentation\":\"\",\"custom_fields\":{\"model\":null,\"anthropic_api_key\":null,\"max_tokens\":null,\"temperature\":null,\"api_endpoint\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"CohereSpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_community.llms.cohere import Cohere\\nfrom langchain_core.language_models.base import BaseLanguageModel\\nfrom langflow import CustomComponent\\n\\n\\nclass CohereComponent(CustomComponent):\\n display_name = \\\"Cohere\\\"\\n description = \\\"Cohere large language models.\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\\\"\\n\\n def build_config(self):\\n return {\\n \\\"cohere_api_key\\\": {\\\"display_name\\\": \\\"Cohere API Key\\\", \\\"type\\\": \\\"password\\\", \\\"password\\\": True},\\n \\\"max_tokens\\\": {\\\"display_name\\\": \\\"Max Tokens\\\", \\\"default\\\": 256, \\\"type\\\": \\\"int\\\", \\\"show\\\": True},\\n \\\"temperature\\\": {\\\"display_name\\\": \\\"Temperature\\\", \\\"default\\\": 0.75, \\\"type\\\": \\\"float\\\", \\\"show\\\": True},\\n }\\n\\n def build(\\n self,\\n cohere_api_key: str,\\n max_tokens: int = 256,\\n temperature: float = 0.75,\\n ) -> BaseLanguageModel:\\n return Cohere(cohere_api_key=cohere_api_key, max_tokens=max_tokens, temperature=temperature) # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"cohere_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"cohere_api_key\",\"display_name\":\"Cohere API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_tokens\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":256,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_tokens\",\"display_name\":\"Max Tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"temperature\":{\"type\":\"float\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.75,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Cohere large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"Cohere\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere\",\"custom_fields\":{\"cohere_api_key\":null,\"max_tokens\":null,\"temperature\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"GoogleGenerativeAISpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain_google_genai import ChatGoogleGenerativeAI # type: ignore\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, RangeSpec\\nfrom pydantic.v1.types import SecretStr\\n\\n\\nclass GoogleGenerativeAIComponent(CustomComponent):\\n display_name: str = \\\"Google Generative AI\\\"\\n description: str = \\\"A component that uses Google Generative AI to generate text.\\\"\\n documentation: str = \\\"http://docs.langflow.org/components/custom\\\"\\n\\n def build_config(self):\\n return {\\n \\\"google_api_key\\\": {\\n \\\"display_name\\\": \\\"Google API Key\\\",\\n \\\"info\\\": \\\"The Google API Key to use for the Google Generative AI.\\\",\\n },\\n \\\"max_output_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Output Tokens\\\",\\n \\\"info\\\": \\\"The maximum number of tokens to generate.\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"info\\\": \\\"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].\\\",\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"info\\\": \\\"Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive.\\\",\\n \\\"range_spec\\\": RangeSpec(min=0, max=2, step=0.1),\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"info\\\": \\\"The maximum cumulative probability of tokens to consider when sampling.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"n\\\": {\\n \\\"display_name\\\": \\\"N\\\",\\n \\\"info\\\": \\\"Number of chat completions to generate for each prompt. Note that the API may not return the full n completions if duplicates are generated.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model\\\",\\n \\\"info\\\": \\\"The name of the model to use. Supported examples: gemini-pro\\\",\\n \\\"options\\\": [\\\"gemini-pro\\\", \\\"gemini-pro-vision\\\"],\\n },\\n \\\"code\\\": {\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def build(\\n self,\\n google_api_key: str,\\n model: str,\\n max_output_tokens: Optional[int] = None,\\n temperature: float = 0.1,\\n top_k: Optional[int] = None,\\n top_p: Optional[float] = None,\\n n: Optional[int] = 1,\\n ) -> BaseLanguageModel:\\n return ChatGoogleGenerativeAI(\\n model=model,\\n max_output_tokens=max_output_tokens or None, # type: ignore\\n temperature=temperature,\\n top_k=top_k or None,\\n top_p=top_p or None, # type: ignore\\n n=n or 1,\\n google_api_key=SecretStr(google_api_key),\\n )\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"google_api_key\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"google_api_key\",\"display_name\":\"Google API Key\",\"advanced\":false,\"dynamic\":false,\"info\":\"The Google API Key to use for the Google Generative AI.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"max_output_tokens\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"max_output_tokens\",\"display_name\":\"Max Output Tokens\",\"advanced\":false,\"dynamic\":false,\"info\":\"The maximum number of tokens to generate.\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gemini-pro\",\"gemini-pro-vision\"],\"name\":\"model\",\"display_name\":\"Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"The name of the model to use. Supported examples: gemini-pro\",\"title_case\":false,\"input_types\":[\"Text\"]},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n\",\"display_name\":\"N\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of chat completions to generate for each prompt. Note that the API may not return the full n completions if duplicates are generated.\",\"title_case\":false},\"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\":\"Run inference with this temperature. Must by in the closed interval [0.0, 1.0].\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive.\",\"rangeSpec\":{\"min\":0.0,\"max\":2.0,\"step\":0.1},\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"The maximum cumulative probability of tokens to consider when sampling.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"A component that uses Google Generative AI to generate text.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\"],\"display_name\":\"Google Generative AI\",\"documentation\":\"http://docs.langflow.org/components/custom\",\"custom_fields\":{\"google_api_key\":null,\"model\":null,\"max_output_tokens\":null,\"temperature\":null,\"top_k\":null,\"top_p\":null,\"n\":null},\"output_types\":[\"BaseLanguageModel\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"BaiduQianfanLLMEndpointsSpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\nfrom langflow import CustomComponent\\nfrom langchain.llms.baidu_qianfan_endpoint import QianfanLLMEndpoint\\nfrom langchain.llms.base import BaseLLM\\n\\n\\nclass QianfanLLMEndpointComponent(CustomComponent):\\n display_name: str = \\\"QianfanLLMEndpoint\\\"\\n description: str = (\\n \\\"Baidu Qianfan hosted open source or customized models. \\\"\\n \\\"Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\"\\n )\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"options\\\": [\\n \\\"ERNIE-Bot\\\",\\n \\\"ERNIE-Bot-turbo\\\",\\n \\\"BLOOMZ-7B\\\",\\n \\\"Llama-2-7b-chat\\\",\\n \\\"Llama-2-13b-chat\\\",\\n \\\"Llama-2-70b-chat\\\",\\n \\\"Qianfan-BLOOMZ-7B-compressed\\\",\\n \\\"Qianfan-Chinese-Llama-2-7B\\\",\\n \\\"ChatGLM2-6B-32K\\\",\\n \\\"AquilaChat-7B\\\",\\n ],\\n \\\"info\\\": \\\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\\\",\\n \\\"required\\\": True,\\n },\\n \\\"qianfan_ak\\\": {\\n \\\"display_name\\\": \\\"Qianfan Ak\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"qianfan_sk\\\": {\\n \\\"display_name\\\": \\\"Qianfan Sk\\\",\\n \\\"required\\\": True,\\n \\\"password\\\": True,\\n \\\"info\\\": \\\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\\\",\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.8,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 0.95,\\n },\\n \\\"penalty_score\\\": {\\n \\\"display_name\\\": \\\"Penalty Score\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\\\",\\n \\\"value\\\": 1.0,\\n },\\n \\\"endpoint\\\": {\\n \\\"display_name\\\": \\\"Endpoint\\\",\\n \\\"info\\\": \\\"Endpoint of the Qianfan LLM, required if custom model used.\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n model: str = \\\"ERNIE-Bot-turbo\\\",\\n qianfan_ak: Optional[str] = None,\\n qianfan_sk: Optional[str] = None,\\n top_p: Optional[float] = None,\\n temperature: Optional[float] = None,\\n penalty_score: Optional[float] = None,\\n endpoint: Optional[str] = None,\\n ) -> BaseLLM:\\n try:\\n output = QianfanLLMEndpoint( # type: ignore\\n model=model,\\n qianfan_ak=qianfan_ak,\\n qianfan_sk=qianfan_sk,\\n top_p=top_p,\\n temperature=temperature,\\n penalty_score=penalty_score,\\n endpoint=endpoint,\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Baidu Qianfan API.\\\") from e\\n return output # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"endpoint\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"endpoint\",\"display_name\":\"Endpoint\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Qianfan LLM, required if custom model used.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"ERNIE-Bot-turbo\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"ERNIE-Bot\",\"ERNIE-Bot-turbo\",\"BLOOMZ-7B\",\"Llama-2-7b-chat\",\"Llama-2-13b-chat\",\"Llama-2-70b-chat\",\"Qianfan-BLOOMZ-7B-compressed\",\"Qianfan-Chinese-Llama-2-7B\",\"ChatGLM2-6B-32K\",\"AquilaChat-7B\"],\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"title_case\":false,\"input_types\":[\"Text\"]},\"penalty_score\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1.0,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"penalty_score\",\"display_name\":\"Penalty Score\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"qianfan_ak\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_ak\",\"display_name\":\"Qianfan Ak\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"qianfan_sk\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"qianfan_sk\",\"display_name\":\"Qianfan Sk\",\"advanced\":false,\"dynamic\":false,\"info\":\"which you could get from https://cloud.baidu.com/product/wenxinworkshop\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.95,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":false,\"dynamic\":false,\"info\":\"Model params, only supported in ERNIE-Bot and ERNIE-Bot-turbo\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Baidu Qianfan hosted open source or customized models. Get more detail from https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"QianfanLLMEndpoint\",\"documentation\":\"\",\"custom_fields\":{\"model\":null,\"qianfan_ak\":null,\"qianfan_sk\":null,\"top_p\":null,\"temperature\":null,\"penalty_score\":null,\"endpoint\":null},\"output_types\":[\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChatLiteLLMSpecs\":{\"template\":{\"api_key\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"api_key\",\"display_name\":\"API key\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Any, Callable, Dict, Optional, Union\\n\\nfrom langchain_community.chat_models.litellm import ChatLiteLLM, ChatLiteLLMException\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel\\n\\n\\nclass ChatLiteLLMComponent(CustomComponent):\\n display_name = \\\"ChatLiteLLM\\\"\\n description = \\\"`LiteLLM` collection of large language models.\\\"\\n documentation = \\\"https://python.langchain.com/docs/integrations/chat/litellm\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model name\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": True,\\n \\\"info\\\": \\\"The name of the model to use. For example, `gpt-3.5-turbo`.\\\",\\n },\\n \\\"api_key\\\": {\\n \\\"display_name\\\": \\\"API key\\\",\\n \\\"field_type\\\": \\\"str\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"password\\\": True,\\n },\\n \\\"provider\\\": {\\n \\\"display_name\\\": \\\"Provider\\\",\\n \\\"info\\\": \\\"The provider of the API key.\\\",\\n \\\"options\\\": [\\n \\\"OpenAI\\\",\\n \\\"Azure\\\",\\n \\\"Anthropic\\\",\\n \\\"Replicate\\\",\\n \\\"Cohere\\\",\\n \\\"OpenRouter\\\",\\n ],\\n },\\n \\\"streaming\\\": {\\n \\\"display_name\\\": \\\"Streaming\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"default\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"default\\\": 0.7,\\n },\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model kwargs\\\",\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"default\\\": {},\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top p\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top k\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n },\\n \\\"n\\\": {\\n \\\"display_name\\\": \\\"N\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"info\\\": \\\"Number of chat completions to generate for each prompt. \\\"\\n \\\"Note that the API may not return the full n completions if duplicates are generated.\\\",\\n \\\"default\\\": 1,\\n },\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max tokens\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"default\\\": 256,\\n \\\"info\\\": \\\"The maximum number of tokens to generate for each chat completion.\\\",\\n },\\n \\\"max_retries\\\": {\\n \\\"display_name\\\": \\\"Max retries\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"default\\\": 6,\\n },\\n \\\"verbose\\\": {\\n \\\"display_name\\\": \\\"Verbose\\\",\\n \\\"field_type\\\": \\\"bool\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"default\\\": False,\\n },\\n }\\n\\n def build(\\n self,\\n model: str,\\n provider: str,\\n api_key: Optional[str] = None,\\n streaming: bool = True,\\n temperature: Optional[float] = 0.7,\\n model_kwargs: Optional[Dict[str, Any]] = {},\\n top_p: Optional[float] = None,\\n top_k: Optional[int] = None,\\n n: int = 1,\\n max_tokens: int = 256,\\n max_retries: int = 6,\\n verbose: bool = False,\\n ) -> Union[BaseLanguageModel, Callable]:\\n try:\\n import litellm # type: ignore\\n\\n litellm.drop_params = True\\n litellm.set_verbose = verbose\\n except ImportError:\\n raise ChatLiteLLMException(\\n \\\"Could not import litellm python package. \\\" \\\"Please install it with `pip install litellm`\\\"\\n )\\n provider_map = {\\n \\\"OpenAI\\\": \\\"openai_api_key\\\",\\n \\\"Azure\\\": \\\"azure_api_key\\\",\\n \\\"Anthropic\\\": \\\"anthropic_api_key\\\",\\n \\\"Replicate\\\": \\\"replicate_api_key\\\",\\n \\\"Cohere\\\": \\\"cohere_api_key\\\",\\n \\\"OpenRouter\\\": \\\"openrouter_api_key\\\",\\n }\\n # Set the API key based on the provider\\n kwarg = {provider_map[provider]: api_key}\\n\\n LLM = ChatLiteLLM(\\n model=model,\\n client=None,\\n streaming=streaming,\\n temperature=temperature,\\n model_kwargs=model_kwargs if model_kwargs is not None else {},\\n top_p=top_p,\\n top_k=top_k,\\n n=n,\\n max_tokens=max_tokens,\\n max_retries=max_retries,\\n **kwarg,\\n )\\n return LLM\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"max_retries\":{\"type\":\"int\",\"required\":false,\"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},\"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\":false,\"dynamic\":false,\"info\":\"The maximum number of tokens to generate for each chat completion.\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model name\",\"advanced\":false,\"dynamic\":false,\"info\":\"The name of the model to use. For example, `gpt-3.5-turbo`.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_kwargs\":{\"type\":\"dict\",\"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\":\"\",\"title_case\":false},\"n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":1,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n\",\"display_name\":\"N\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of chat completions to generate for each prompt. Note that the API may not return the full n completions if duplicates are generated.\",\"title_case\":false},\"provider\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"OpenAI\",\"Azure\",\"Anthropic\",\"Replicate\",\"Cohere\",\"OpenRouter\"],\"name\":\"provider\",\"display_name\":\"Provider\",\"advanced\":false,\"dynamic\":false,\"info\":\"The provider of the API key.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"streaming\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"streaming\",\"display_name\":\"Streaming\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top k\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"top_p\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top p\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"verbose\":{\"type\":\"bool\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"verbose\",\"display_name\":\"Verbose\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"`LiteLLM` collection of large language models.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"Callable\"],\"display_name\":\"ChatLiteLLM\",\"documentation\":\"https://python.langchain.com/docs/integrations/chat/litellm\",\"custom_fields\":{\"model\":null,\"provider\":null,\"api_key\":null,\"streaming\":null,\"temperature\":null,\"model_kwargs\":null,\"top_p\":null,\"top_k\":null,\"n\":null,\"max_tokens\":null,\"max_retries\":null,\"verbose\":null},\"output_types\":[\"BaseLanguageModel\",\"Callable\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"CTransformersSpecs\":{\"template\":{\"model_file\":{\"type\":\"file\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[\".bin\"],\"file_path\":\"\",\"password\":false,\"name\":\"model_file\",\"display_name\":\"Model File\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Dict, Optional\\n\\nfrom langchain_community.llms.ctransformers import CTransformers\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass CTransformersComponent(CustomComponent):\\n display_name = \\\"CTransformers\\\"\\n description = \\\"C Transformers LLM models\\\"\\n documentation = \\\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\\\"\\n\\n def build_config(self):\\n return {\\n \\\"model\\\": {\\\"display_name\\\": \\\"Model\\\", \\\"required\\\": True},\\n \\\"model_file\\\": {\\n \\\"display_name\\\": \\\"Model File\\\",\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"file\\\",\\n \\\"file_types\\\": [\\\".bin\\\"],\\n },\\n \\\"model_type\\\": {\\\"display_name\\\": \\\"Model Type\\\", \\\"required\\\": True},\\n \\\"config\\\": {\\n \\\"display_name\\\": \\\"Config\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n \\\"field_type\\\": \\\"dict\\\",\\n \\\"value\\\": '{\\\"top_k\\\":40,\\\"top_p\\\":0.95,\\\"temperature\\\":0.8,\\\"repetition_penalty\\\":1.1,\\\"last_n_tokens\\\":64,\\\"seed\\\":-1,\\\"max_new_tokens\\\":256,\\\"stop\\\":\\\"\\\",\\\"stream\\\":\\\"False\\\",\\\"reset\\\":\\\"True\\\",\\\"batch_size\\\":8,\\\"threads\\\":-1,\\\"context_length\\\":-1,\\\"gpu_layers\\\":0}',\\n },\\n }\\n\\n def build(self, model: str, model_file: str, model_type: str, config: Optional[Dict] = None) -> CTransformers:\\n return CTransformers(model=model, model_file=model_file, model_type=model_type, config=config) # type: ignore\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"config\":{\"type\":\"dict\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"{\\\"top_k\\\":40,\\\"top_p\\\":0.95,\\\"temperature\\\":0.8,\\\"repetition_penalty\\\":1.1,\\\"last_n_tokens\\\":64,\\\"seed\\\":-1,\\\"max_new_tokens\\\":256,\\\"stop\\\":\\\"\\\",\\\"stream\\\":\\\"False\\\",\\\"reset\\\":\\\"True\\\",\\\"batch_size\\\":8,\\\"threads\\\":-1,\\\"context_length\\\":-1,\\\"gpu_layers\\\":0}\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"config\",\"display_name\":\"Config\",\"advanced\":true,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_type\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_type\",\"display_name\":\"Model Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"C Transformers LLM models\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"CTransformers\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\",\"LLM\"],\"display_name\":\"CTransformers\",\"documentation\":\"https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers\",\"custom_fields\":{\"model\":null,\"model_file\":null,\"model_type\":null,\"config\":null},\"output_types\":[\"CTransformers\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"HuggingFaceEndpointsSpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain.llms.huggingface_endpoint import HuggingFaceEndpoint\\nfrom langflow import CustomComponent\\n\\n\\nclass HuggingFaceEndpointsComponent(CustomComponent):\\n display_name: str = \\\"Hugging Face Inference API\\\"\\n description: str = \\\"LLM model from Hugging Face Inference API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"endpoint_url\\\": {\\\"display_name\\\": \\\"Endpoint URL\\\", \\\"password\\\": True},\\n \\\"task\\\": {\\n \\\"display_name\\\": \\\"Task\\\",\\n \\\"options\\\": [\\\"text2text-generation\\\", \\\"text-generation\\\", \\\"summarization\\\"],\\n },\\n \\\"huggingfacehub_api_token\\\": {\\\"display_name\\\": \\\"API token\\\", \\\"password\\\": True},\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Keyword Arguments\\\",\\n \\\"field_type\\\": \\\"code\\\",\\n },\\n \\\"code\\\": {\\\"show\\\": False},\\n }\\n\\n def build(\\n self,\\n endpoint_url: str,\\n task: str = \\\"text2text-generation\\\",\\n huggingfacehub_api_token: Optional[str] = None,\\n model_kwargs: Optional[dict] = None,\\n ) -> BaseLLM:\\n try:\\n output = HuggingFaceEndpoint( # type: ignore\\n endpoint_url=endpoint_url,\\n task=task,\\n huggingfacehub_api_token=huggingfacehub_api_token,\\n model_kwargs=model_kwargs or {},\\n )\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to HuggingFace Endpoints API.\\\") from e\\n return output\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"endpoint_url\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"endpoint_url\",\"display_name\":\"Endpoint URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"huggingfacehub_api_token\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":true,\"name\":\"huggingfacehub_api_token\",\"display_name\":\"API token\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"model_kwargs\":{\"type\":\"code\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model_kwargs\",\"display_name\":\"Model Keyword Arguments\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"task\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"text2text-generation\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"text2text-generation\",\"text-generation\",\"summarization\"],\"name\":\"task\",\"display_name\":\"Task\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"LLM model from Hugging Face Inference API.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"Hugging Face Inference API\",\"documentation\":\"\",\"custom_fields\":{\"endpoint_url\":null,\"task\":null,\"huggingfacehub_api_token\":null,\"model_kwargs\":null},\"output_types\":[\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChatOpenAISpecs\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langchain.llms import BaseLLM\\nfrom langchain_community.chat_models.openai import ChatOpenAI\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import BaseLanguageModel, NestedDict\\n\\n\\nclass ChatOpenAIComponent(CustomComponent):\\n display_name = \\\"ChatOpenAI\\\"\\n description = \\\"`OpenAI` Chat large language models API.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"max_tokens\\\": {\\n \\\"display_name\\\": \\\"Max Tokens\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n },\\n \\\"model_kwargs\\\": {\\n \\\"display_name\\\": \\\"Model Kwargs\\\",\\n \\\"advanced\\\": True,\\n \\\"required\\\": False,\\n },\\n \\\"model_name\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"options\\\": [\\n \\\"gpt-4-turbo-preview\\\",\\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 },\\n \\\"openai_api_base\\\": {\\n \\\"display_name\\\": \\\"OpenAI API Base\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\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 \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"password\\\": True,\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"advanced\\\": False,\\n \\\"required\\\": False,\\n \\\"value\\\": 0.7,\\n },\\n }\\n\\n def build(\\n self,\\n max_tokens: Optional[int] = 256,\\n model_kwargs: NestedDict = {},\\n model_name: str = \\\"gpt-4-1106-preview\\\",\\n openai_api_base: Optional[str] = None,\\n openai_api_key: Optional[str] = None,\\n temperature: float = 0.7,\\n ) -> Union[BaseLanguageModel, BaseLLM]:\\n if not openai_api_base:\\n openai_api_base = \\\"https://api.openai.com/v1\\\"\\n return 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\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"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\":false,\"dynamic\":false,\"info\":\"\",\"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\":\"\",\"title_case\":false},\"model_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"gpt-4-1106-preview\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"gpt-4-turbo-preview\",\"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\":\"\",\"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\":false,\"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.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"openai_api_key\":{\"type\":\"str\",\"required\":false,\"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\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"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\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"`OpenAI` Chat large language models API.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"ChatOpenAI\",\"documentation\":\"\",\"custom_fields\":{\"max_tokens\":null,\"model_kwargs\":null,\"model_name\":null,\"openai_api_base\":null,\"openai_api_key\":null,\"temperature\":null},\"output_types\":[\"BaseLanguageModel\",\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"OllamaLLMSpecs\":{\"template\":{\"base_url\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"base_url\",\"display_name\":\"Base URL\",\"advanced\":false,\"dynamic\":false,\"info\":\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langchain.llms.base import BaseLLM\\nfrom langchain_community.llms.ollama import Ollama\\n\\nfrom langflow import CustomComponent\\n\\n\\nclass OllamaLLM(CustomComponent):\\n display_name = \\\"Ollama\\\"\\n description = \\\"Local LLM with Ollama.\\\"\\n\\n def build_config(self) -> dict:\\n return {\\n \\\"base_url\\\": {\\n \\\"display_name\\\": \\\"Base URL\\\",\\n \\\"info\\\": \\\"Endpoint of the Ollama API. Defaults to 'http://localhost:11434' if not specified.\\\",\\n },\\n \\\"model\\\": {\\n \\\"display_name\\\": \\\"Model Name\\\",\\n \\\"value\\\": \\\"llama2\\\",\\n \\\"info\\\": \\\"Refer to https://ollama.ai/library for more models.\\\",\\n },\\n \\\"temperature\\\": {\\n \\\"display_name\\\": \\\"Temperature\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"value\\\": 0.8,\\n \\\"info\\\": \\\"Controls the creativity of model responses.\\\",\\n },\\n \\\"mirostat\\\": {\\n \\\"display_name\\\": \\\"Mirostat\\\",\\n \\\"options\\\": [\\\"Disabled\\\", \\\"Mirostat\\\", \\\"Mirostat 2.0\\\"],\\n \\\"info\\\": \\\"Enable/disable Mirostat sampling for controlling perplexity.\\\",\\n \\\"value\\\": \\\"Disabled\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_eta\\\": {\\n \\\"display_name\\\": \\\"Mirostat Eta\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Learning rate influencing the algorithm's response to feedback.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"mirostat_tau\\\": {\\n \\\"display_name\\\": \\\"Mirostat Tau\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Controls balance between coherence and diversity.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_ctx\\\": {\\n \\\"display_name\\\": \\\"Context Window Size\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Size of the context window for generating the next token.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_gpu\\\": {\\n \\\"display_name\\\": \\\"Number of GPUs\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of GPUs to use for computation.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"num_thread\\\": {\\n \\\"display_name\\\": \\\"Number of Threads\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Number of threads to use during computation.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_last_n\\\": {\\n \\\"display_name\\\": \\\"Repeat Last N\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Sets how far back the model looks to prevent repetition.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"repeat_penalty\\\": {\\n \\\"display_name\\\": \\\"Repeat Penalty\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Penalty for repetitions in generated text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"stop\\\": {\\n \\\"display_name\\\": \\\"Stop Tokens\\\",\\n \\\"info\\\": \\\"List of tokens to signal the model to stop generating text.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"tfs_z\\\": {\\n \\\"display_name\\\": \\\"TFS Z\\\",\\n \\\"field_type\\\": \\\"float\\\",\\n \\\"info\\\": \\\"Tail free sampling to reduce impact of less probable tokens.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_k\\\": {\\n \\\"display_name\\\": \\\"Top K\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Limits token selection to top K for reducing nonsense generation.\\\",\\n \\\"advanced\\\": True,\\n },\\n \\\"top_p\\\": {\\n \\\"display_name\\\": \\\"Top P\\\",\\n \\\"field_type\\\": \\\"int\\\",\\n \\\"info\\\": \\\"Works with top-k to control diversity of generated text.\\\",\\n \\\"advanced\\\": True,\\n },\\n }\\n\\n def build(\\n self,\\n base_url: Optional[str],\\n model: str,\\n temperature: Optional[float],\\n mirostat: Optional[str],\\n mirostat_eta: Optional[float] = None,\\n mirostat_tau: Optional[float] = None,\\n num_ctx: Optional[int] = None,\\n num_gpu: Optional[int] = None,\\n num_thread: Optional[int] = None,\\n repeat_last_n: Optional[int] = None,\\n repeat_penalty: Optional[float] = None,\\n stop: Optional[List[str]] = None,\\n tfs_z: Optional[float] = None,\\n top_k: Optional[int] = None,\\n top_p: Optional[int] = None,\\n ) -> BaseLLM:\\n if not base_url:\\n base_url = \\\"http://localhost:11434\\\"\\n\\n # Mapping mirostat settings to their corresponding values\\n mirostat_options = {\\\"Mirostat\\\": 1, \\\"Mirostat 2.0\\\": 2}\\n\\n # Default to 0 for 'Disabled'\\n mirostat_value = mirostat_options.get(mirostat, 0) # type: ignore\\n\\n # Set mirostat_eta and mirostat_tau to None if mirostat is disabled\\n if mirostat_value == 0:\\n mirostat_eta = None\\n mirostat_tau = None\\n\\n try:\\n llm = Ollama(\\n base_url=base_url,\\n model=model,\\n mirostat=mirostat_value,\\n mirostat_eta=mirostat_eta,\\n mirostat_tau=mirostat_tau,\\n num_ctx=num_ctx,\\n num_gpu=num_gpu,\\n num_thread=num_thread,\\n repeat_last_n=repeat_last_n,\\n repeat_penalty=repeat_penalty,\\n temperature=temperature,\\n stop=stop,\\n tfs_z=tfs_z,\\n top_k=top_k,\\n top_p=top_p,\\n )\\n\\n except Exception as e:\\n raise ValueError(\\\"Could not connect to Ollama.\\\") from e\\n\\n return llm\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"mirostat\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"Disabled\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Disabled\",\"Mirostat\",\"Mirostat 2.0\"],\"name\":\"mirostat\",\"display_name\":\"Mirostat\",\"advanced\":true,\"dynamic\":false,\"info\":\"Enable/disable Mirostat sampling for controlling perplexity.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"mirostat_eta\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_eta\",\"display_name\":\"Mirostat Eta\",\"advanced\":true,\"dynamic\":false,\"info\":\"Learning rate influencing the algorithm's response to feedback.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"mirostat_tau\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"mirostat_tau\",\"display_name\":\"Mirostat Tau\",\"advanced\":true,\"dynamic\":false,\"info\":\"Controls balance between coherence and diversity.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"model\":{\"type\":\"str\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"llama2\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"model\",\"display_name\":\"Model Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"Refer to https://ollama.ai/library for more models.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"num_ctx\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_ctx\",\"display_name\":\"Context Window Size\",\"advanced\":true,\"dynamic\":false,\"info\":\"Size of the context window for generating the next token.\",\"title_case\":false},\"num_gpu\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_gpu\",\"display_name\":\"Number of GPUs\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of GPUs to use for computation.\",\"title_case\":false},\"num_thread\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"num_thread\",\"display_name\":\"Number of Threads\",\"advanced\":true,\"dynamic\":false,\"info\":\"Number of threads to use during computation.\",\"title_case\":false},\"repeat_last_n\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_last_n\",\"display_name\":\"Repeat Last N\",\"advanced\":true,\"dynamic\":false,\"info\":\"Sets how far back the model looks to prevent repetition.\",\"title_case\":false},\"repeat_penalty\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"repeat_penalty\",\"display_name\":\"Repeat Penalty\",\"advanced\":true,\"dynamic\":false,\"info\":\"Penalty for repetitions in generated text.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"stop\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"stop\",\"display_name\":\"Stop Tokens\",\"advanced\":true,\"dynamic\":false,\"info\":\"List of tokens to signal the model to stop generating text.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"temperature\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":0.8,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"temperature\",\"display_name\":\"Temperature\",\"advanced\":false,\"dynamic\":false,\"info\":\"Controls the creativity of model responses.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"tfs_z\":{\"type\":\"float\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"tfs_z\",\"display_name\":\"TFS Z\",\"advanced\":true,\"dynamic\":false,\"info\":\"Tail free sampling to reduce impact of less probable tokens.\",\"rangeSpec\":{\"min\":-1.0,\"max\":1.0,\"step\":0.1},\"title_case\":false},\"top_k\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_k\",\"display_name\":\"Top K\",\"advanced\":true,\"dynamic\":false,\"info\":\"Limits token selection to top K for reducing nonsense generation.\",\"title_case\":false},\"top_p\":{\"type\":\"int\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"top_p\",\"display_name\":\"Top P\",\"advanced\":true,\"dynamic\":false,\"info\":\"Works with top-k to control diversity of generated text.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Local LLM with Ollama.\",\"base_classes\":[\"BaseLanguageModel\",\"Runnable\",\"Generic\",\"RunnableSerializable\",\"Serializable\",\"object\",\"BaseLLM\"],\"display_name\":\"Ollama\",\"documentation\":\"\",\"custom_fields\":{\"base_url\":null,\"model\":null,\"temperature\":null,\"mirostat\":null,\"mirostat_eta\":null,\"mirostat_tau\":null,\"num_ctx\":null,\"num_gpu\":null,\"num_thread\":null,\"repeat_last_n\":null,\"repeat_penalty\":null,\"stop\":null,\"tfs_z\":null,\"top_k\":null,\"top_p\":null},\"output_types\":[\"BaseLLM\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"io\":{\"ChatOutput\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional, Union\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\nfrom langflow.schema import Record\\n\\n\\nclass ChatOutput(CustomComponent):\\n display_name = \\\"Chat Output\\\"\\n description = \\\"Used to send a message to the chat.\\\"\\n\\n field_config = {\\n \\\"code\\\": {\\n \\\"show\\\": True,\\n }\\n }\\n\\n def build_config(self):\\n return {\\n \\\"message\\\": {\\\"input_types\\\": [\\\"Text\\\"], \\\"display_name\\\": \\\"Message\\\"},\\n \\\"sender\\\": {\\n \\\"options\\\": [\\\"Machine\\\", \\\"User\\\"],\\n \\\"display_name\\\": \\\"Sender Type\\\",\\n },\\n \\\"sender_name\\\": {\\\"display_name\\\": \\\"Sender Name\\\"},\\n \\\"session_id\\\": {\\n \\\"display_name\\\": \\\"Session ID\\\",\\n \\\"info\\\": \\\"Session ID of the chat history.\\\",\\n \\\"input_types\\\": [\\\"Text\\\"],\\n },\\n \\\"return_record\\\": {\\n \\\"display_name\\\": \\\"Return Record\\\",\\n \\\"info\\\": \\\"Return the message as a record containing the sender, sender_name, and session_id.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n sender: Optional[str] = \\\"Machine\\\",\\n sender_name: Optional[str] = \\\"AI\\\",\\n session_id: Optional[str] = None,\\n message: Optional[str] = None,\\n return_record: Optional[bool] = False,\\n ) -> Union[Text, Record]:\\n if return_record:\\n if isinstance(message, Record):\\n # Update the data of the record\\n message.data[\\\"sender\\\"] = sender\\n message.data[\\\"sender_name\\\"] = sender_name\\n message.data[\\\"session_id\\\"] = session_id\\n else:\\n message = Record(\\n text=message,\\n data={\\n \\\"sender\\\": sender,\\n \\\"sender_name\\\": sender_name,\\n \\\"session_id\\\": session_id,\\n },\\n )\\n if not message:\\n message = \\\"\\\"\\n self.status = message\\n return message\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"message\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"message\",\"display_name\":\"Message\",\"advanced\":false,\"input_types\":[\"Text\",\"Text\"],\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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\":false,\"dynamic\":false,\"info\":\"Return the message as a record containing the sender, sender_name, and session_id.\",\"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\":false,\"dynamic\":false,\"info\":\"\",\"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\":\"\",\"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\":false,\"input_types\":[\"Text\",\"Text\"],\"dynamic\":false,\"info\":\"Session ID of the chat history.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Used to send a message to the chat.\",\"base_classes\":[\"Text\",\"object\",\"Record\"],\"display_name\":\"Chat Output\",\"documentation\":\"\",\"custom_fields\":{\"sender\":null,\"sender_name\":null,\"session_id\":null,\"message\":null,\"return_record\":null},\"output_types\":[\"Text\",\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"MessageHistory\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langflow import CustomComponent\\nfrom langflow.memory import get_messages\\nfrom langflow.schema import Record\\n\\n\\nclass MessageHistoryComponent(CustomComponent):\\n display_name = \\\"Message History\\\"\\n description = \\\"Used to retrieve stored messages.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"sender\\\": {\\n \\\"options\\\": [\\\"Machine\\\", \\\"User\\\"],\\n \\\"display_name\\\": \\\"Sender Type\\\",\\n },\\n \\\"sender_name\\\": {\\\"display_name\\\": \\\"Sender Name\\\"},\\n \\\"file_path\\\": {\\n \\\"display_name\\\": \\\"File Path\\\",\\n \\\"info\\\": \\\"Path of the local JSON file to store the messages. It should be a unique path for each chat history.\\\",\\n },\\n \\\"n_messages\\\": {\\n \\\"display_name\\\": \\\"Number of Messages\\\",\\n \\\"info\\\": \\\"Number of messages to retrieve.\\\",\\n },\\n \\\"session_id\\\": {\\n \\\"display_name\\\": \\\"Session ID\\\",\\n \\\"info\\\": \\\"Session ID of the chat history.\\\",\\n \\\"input_types\\\": [\\\"Text\\\"],\\n },\\n }\\n\\n def build(\\n self,\\n sender: Optional[str] = None,\\n sender_name: Optional[str] = None,\\n session_id: Optional[str] = None,\\n n_messages: int = 5,\\n ) -> List[Record]:\\n messages = get_messages(\\n sender=sender,\\n sender_name=sender_name,\\n session_id=session_id,\\n limit=n_messages,\\n )\\n self.status = messages\\n return messages\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"n_messages\":{\"type\":\"int\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":5,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"n_messages\",\"display_name\":\"Number of Messages\",\"advanced\":false,\"dynamic\":false,\"info\":\"Number of messages to retrieve.\",\"title_case\":false},\"sender\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Machine\",\"User\"],\"name\":\"sender\",\"display_name\":\"Sender Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"sender_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"sender_name\",\"display_name\":\"Sender Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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\":false,\"input_types\":[\"Text\",\"Text\"],\"dynamic\":false,\"info\":\"Session ID of the chat history.\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"Used to retrieve stored messages.\",\"base_classes\":[\"Record\"],\"display_name\":\"Message History\",\"documentation\":\"\",\"custom_fields\":{\"sender\":null,\"sender_name\":null,\"session_id\":null,\"n_messages\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"TextOutput\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass TextOutput(CustomComponent):\\n display_name = \\\"Text Output\\\"\\n description = \\\"Used to pass text output to the next component.\\\"\\n\\n field_config = {\\n \\\"value\\\": {\\\"display_name\\\": \\\"Value\\\"},\\n }\\n\\n def build(self, value: Optional[str] = \\\"\\\") -> Text:\\n self.status = value\\n if not value:\\n value = \\\"\\\"\\n return value\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"value\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"value\",\"display_name\":\"Value\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Used to pass text output to the next component.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Text Output\",\"documentation\":\"\",\"custom_fields\":{\"value\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"StoreMessages\":{\"template\":{\"records\":{\"type\":\"Record\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"records\",\"display_name\":\"Records\",\"advanced\":false,\"dynamic\":false,\"info\":\"The list of records to store. Each record should contain the keys 'sender', 'sender_name', and 'session_id'.\",\"title_case\":false},\"texts\":{\"type\":\"Text\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"texts\",\"display_name\":\"Texts\",\"advanced\":false,\"dynamic\":false,\"info\":\"The list of texts to store. If records is not provided, texts must be provided.\",\"title_case\":false},\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import List, Optional\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\nfrom langflow.memory import add_messages\\nfrom langflow.schema import Record\\n\\n\\nclass StoreMessages(CustomComponent):\\n display_name = \\\"Store Messages\\\"\\n description = \\\"Used to store messages.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"records\\\": {\\n \\\"display_name\\\": \\\"Records\\\",\\n \\\"info\\\": \\\"The list of records to store. Each record should contain the keys 'sender', 'sender_name', and 'session_id'.\\\",\\n },\\n \\\"texts\\\": {\\n \\\"display_name\\\": \\\"Texts\\\",\\n \\\"info\\\": \\\"The list of texts to store. If records is not provided, texts must be provided.\\\",\\n },\\n \\\"session_id\\\": {\\n \\\"display_name\\\": \\\"Session ID\\\",\\n \\\"info\\\": \\\"The session ID to store.\\\",\\n },\\n \\\"sender\\\": {\\n \\\"display_name\\\": \\\"Sender\\\",\\n \\\"info\\\": \\\"The sender to store.\\\",\\n },\\n \\\"sender_name\\\": {\\n \\\"display_name\\\": \\\"Sender Name\\\",\\n \\\"info\\\": \\\"The sender name to store.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n records: Optional[List[Record]] = None,\\n texts: Optional[List[Text]] = None,\\n session_id: Optional[str] = None,\\n sender: Optional[str] = None,\\n sender_name: Optional[str] = None,\\n ) -> List[Record]:\\n # Records is the main way to store messages\\n # If records is not provided, we can use texts\\n # but we need to create the records from the texts\\n # and the other parameters\\n if not texts and not records:\\n raise ValueError(\\\"Either texts or records must be provided.\\\")\\n\\n if not records:\\n records = []\\n if not session_id or not sender or not sender_name:\\n raise ValueError(\\\"If passing texts, session_id, sender, and sender_name must be provided.\\\")\\n for text in texts:\\n record = Record(\\n text=text,\\n data={\\n \\\"session_id\\\": session_id,\\n \\\"sender\\\": sender,\\n \\\"sender_name\\\": sender_name,\\n },\\n )\\n records.append(record)\\n elif isinstance(records, Record):\\n records = [records]\\n\\n self.status = records\\n records = add_messages(records)\\n return records\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"sender\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"sender\",\"display_name\":\"Sender\",\"advanced\":false,\"dynamic\":false,\"info\":\"The sender to store.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"sender_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"sender_name\",\"display_name\":\"Sender Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"The sender name to store.\",\"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\":false,\"dynamic\":false,\"info\":\"The session ID to store.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Used to store messages.\",\"base_classes\":[\"Record\"],\"display_name\":\"Store Messages\",\"documentation\":\"\",\"custom_fields\":{\"records\":null,\"texts\":null,\"session_id\":null,\"sender\":null,\"sender_name\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"ChatInput\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langflow import CustomComponent\\nfrom langflow.schema import Record\\n\\n\\nclass ChatInput(CustomComponent):\\n display_name = \\\"Chat Input\\\"\\n description = \\\"Used to get user input from the chat.\\\"\\n\\n def build_config(self):\\n return {\\n \\\"message\\\": {\\n \\\"input_types\\\": [\\\"Text\\\"],\\n \\\"display_name\\\": \\\"Message\\\",\\n \\\"multiline\\\": True,\\n },\\n \\\"sender\\\": {\\n \\\"options\\\": [\\\"Machine\\\", \\\"User\\\"],\\n \\\"display_name\\\": \\\"Sender Type\\\",\\n },\\n \\\"sender_name\\\": {\\\"display_name\\\": \\\"Sender Name\\\"},\\n \\\"session_id\\\": {\\n \\\"display_name\\\": \\\"Session ID\\\",\\n \\\"info\\\": \\\"Session ID of the chat history.\\\",\\n },\\n \\\"return_record\\\": {\\n \\\"display_name\\\": \\\"Return Record\\\",\\n \\\"info\\\": \\\"Return the message as a record containing the sender, sender_name, and session_id.\\\",\\n },\\n }\\n\\n def build(\\n self,\\n sender: Optional[str] = \\\"User\\\",\\n sender_name: Optional[str] = \\\"User\\\",\\n message: Optional[str] = None,\\n session_id: Optional[str] = None,\\n return_record: Optional[bool] = False,\\n ) -> Record:\\n if return_record:\\n if isinstance(message, Record):\\n # Update the data of the record\\n message.data[\\\"sender\\\"] = sender\\n message.data[\\\"sender_name\\\"] = sender_name\\n message.data[\\\"session_id\\\"] = session_id\\n else:\\n message = Record(\\n text=message,\\n data={\\n \\\"sender\\\": sender,\\n \\\"sender_name\\\": sender_name,\\n \\\"session_id\\\": session_id,\\n },\\n )\\n if not message:\\n message = \\\"\\\"\\n self.status = message\\n return message\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"message\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"message\",\"display_name\":\"Message\",\"advanced\":false,\"input_types\":[\"Text\",\"Text\"],\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"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\":false,\"dynamic\":false,\"info\":\"Return the message as a record containing the sender, sender_name, and session_id.\",\"title_case\":false},\"sender\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":true,\"show\":true,\"multiline\":false,\"value\":\"User\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"options\":[\"Machine\",\"User\"],\"name\":\"sender\",\"display_name\":\"Sender Type\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"sender_name\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"User\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"sender_name\",\"display_name\":\"Sender Name\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"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\":false,\"dynamic\":false,\"info\":\"Session ID of the chat history.\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Used to get user input from the chat.\",\"base_classes\":[\"Record\"],\"display_name\":\"Chat Input\",\"documentation\":\"\",\"custom_fields\":{\"sender\":null,\"sender_name\":null,\"message\":null,\"session_id\":null,\"return_record\":null},\"output_types\":[\"Record\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true},\"TextInput\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from typing import Optional\\n\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Text\\n\\n\\nclass TextInput(CustomComponent):\\n display_name = \\\"Text Input\\\"\\n description = \\\"Used to pass text input to the next component.\\\"\\n\\n field_config = {\\n \\\"value\\\": {\\\"display_name\\\": \\\"Value\\\"},\\n }\\n\\n def build(self, value: Optional[str] = \\\"\\\") -> Text:\\n self.status = value\\n if not value:\\n value = \\\"\\\"\\n return value\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":false,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"value\":{\"type\":\"str\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"value\",\"display_name\":\"Value\",\"advanced\":false,\"dynamic\":false,\"info\":\"\",\"title_case\":false,\"input_types\":[\"Text\"]},\"_type\":\"CustomComponent\"},\"description\":\"Used to pass text input to the next component.\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Text Input\",\"documentation\":\"\",\"custom_fields\":{\"value\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}},\"prompts\":{\"Prompt\":{\"template\":{\"code\":{\"type\":\"code\",\"required\":true,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":true,\"value\":\"from langchain_core.prompts import PromptTemplate\\nfrom langflow import CustomComponent\\nfrom langflow.field_typing import Prompt, TemplateField, Text\\n\\n\\nclass PromptComponent(CustomComponent):\\n display_name: str = \\\"Prompt\\\"\\n description: str = \\\"A component for creating prompts using templates\\\"\\n beta = True\\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 prompt_template = PromptTemplate.from_template(template)\\n\\n attributes_to_check = [\\\"text\\\", \\\"page_content\\\"]\\n for key, value in kwargs.items():\\n for attribute in attributes_to_check:\\n if hasattr(value, attribute):\\n kwargs[key] = getattr(value, attribute)\\n\\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: \\\"{formated_prompt}\\\"'\\n return formated_prompt\\n\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"code\",\"advanced\":true,\"dynamic\":true,\"info\":\"\",\"title_case\":false},\"template\":{\"type\":\"prompt\",\"required\":false,\"placeholder\":\"\",\"list\":false,\"show\":true,\"multiline\":false,\"value\":\"\",\"fileTypes\":[],\"file_path\":\"\",\"password\":false,\"name\":\"template\",\"display_name\":\"Template\",\"advanced\":false,\"input_types\":[\"Text\"],\"dynamic\":false,\"info\":\"\",\"title_case\":false},\"_type\":\"CustomComponent\"},\"description\":\"A component for creating prompts using templates\",\"base_classes\":[\"Text\",\"object\"],\"display_name\":\"Prompt\",\"documentation\":\"\",\"custom_fields\":{\"template\":null},\"output_types\":[\"Text\"],\"field_formatters\":{},\"pinned\":false,\"beta\":true}}}" }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.743 } - } - ] - } - } \ No newline at end of file + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 2.771 } + }, + { + "startedDateTime": "2024-02-28T14:32:30.976Z", + "time": 0.753, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/store/check/", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "16" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"enabled\":true}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.753 } + }, + { + "startedDateTime": "2024-02-28T14:32:30.976Z", + "time": 0.525, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/store/check/api_key", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "38" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"has_api_key\":false,\"is_valid\":false}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.525 } + }, + { + "startedDateTime": "2024-02-28T14:32:30.976Z", + "time": 0.658, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/auto_login", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "227" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" }, + { "name": "set-cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc; Path=/; SameSite=none; Secure" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"access_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc\",\"refresh_token\":null,\"token_type\":\"bearer\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.658 } + }, + { + "startedDateTime": "2024-02-28T14:32:31.023Z", + "time": 0.787, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/users/whoami", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "253" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:30 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"id\":\"0389fb29-daa6-408c-b8cb-b8ff8d17343a\",\"username\":\"langflow\",\"profile_image\":null,\"is_active\":true,\"is_superuser\":true,\"create_at\":\"2024-02-28T14:31:41.362911\",\"updated_at\":\"2024-02-28T14:32:30.982826\",\"last_login_at\":\"2024-02-28T14:32:30.982478\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.787 } + }, + { + "startedDateTime": "2024-02-28T14:32:32.479Z", + "time": 0.836, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/flows/", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/flows" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "2" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:31 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "[]" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.836 } + }, + { + "startedDateTime": "2024-02-28T14:32:36.617Z", + "time": 1.679, + "request": { + "method": "POST", + "url": "http://localhost:3000/api/v1/flows/", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Content-Length", "value": "170" }, + { "name": "Content-Type", "value": "application/json" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Origin", "value": "http://localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/flows" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1, + "postData": { + "mimeType": "application/json", + "text": "{\"name\":\"Untitled document\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"description\":\"Harness the Power of Conversational AI.\",\"is_component\":false}", + "params": [] + } + }, + "response": { + "status": 201, + "statusText": "Created", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "access-control-allow-credentials", "value": "true" }, + { "name": "access-control-allow-origin", "value": "http://localhost:3000" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "319" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:35 GMT" }, + { "name": "server", "value": "uvicorn" }, + { "name": "vary", "value": "Origin" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"name\":\"Untitled document\",\"description\":\"Harness the Power of Conversational AI.\",\"data\":{\"nodes\":[],\"edges\":[],\"viewport\":{\"zoom\":1,\"x\":0,\"y\":0}},\"is_component\":false,\"updated_at\":\"2024-02-28T14:32:36.621261\",\"folder\":null,\"id\":\"b3aad40d-cf3b-49d2-804f-bfa33b70beef\",\"user_id\":\"0389fb29-daa6-408c-b8cb-b8ff8d17343a\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 1.679 } + }, + { + "startedDateTime": "2024-02-28T14:32:36.774Z", + "time": 1.023, + "request": { + "method": "GET", + "url": "http://localhost:3000/api/v1/monitor/builds?flow_id=b3aad40d-cf3b-49d2-804f-bfa33b70beef", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/flow/b3aad40d-cf3b-49d2-804f-bfa33b70beef" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [ + { + "name": "flow_id", + "value": "b3aad40d-cf3b-49d2-804f-bfa33b70beef" + } + ], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Access-Control-Allow-Origin", "value": "*" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "20" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:35 GMT" }, + { "name": "server", "value": "uvicorn" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"vertex_builds\":{}}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 1.023 } + }, + { + "startedDateTime": "2024-02-28T14:32:49.526Z", + "time": 0.977, + "request": { + "method": "DELETE", + "url": "http://localhost:3000/api/v1/flows/b3aad40d-cf3b-49d2-804f-bfa33b70beef", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "Accept", "value": "application/json, text/plain, */*" }, + { "name": "Accept-Encoding", "value": "gzip, deflate, br, zstd" }, + { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, + { "name": "Authorization", "value": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Connection", "value": "keep-alive" }, + { "name": "Cookie", "value": "access_token_lf=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMzg5ZmIyOS1kYWE2LTQwOGMtYjhjYi1iOGZmOGQxNzM0M2EiLCJleHAiOjE3NDA2NjY3NTB9.ef5W5jwNOeVzU3JZ7ylLYf2MLEJcVxC4-fF7EK9Ecdc" }, + { "name": "Host", "value": "localhost:3000" }, + { "name": "Origin", "value": "http://localhost:3000" }, + { "name": "Referer", "value": "http://localhost:3000/flow/b3aad40d-cf3b-49d2-804f-bfa33b70beef" }, + { "name": "Sec-Fetch-Dest", "value": "empty" }, + { "name": "Sec-Fetch-Mode", "value": "cors" }, + { "name": "Sec-Fetch-Site", "value": "same-origin" }, + { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"123\", \"Not:A-Brand\";v=\"8\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"Linux\"" } + ], + "queryString": [], + "headersSize": -1, + "bodySize": -1 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [], + "headers": [ + { "name": "access-control-allow-credentials", "value": "true" }, + { "name": "access-control-allow-origin", "value": "http://localhost:3000" }, + { "name": "connection", "value": "close" }, + { "name": "content-length", "value": "39" }, + { "name": "content-type", "value": "application/json" }, + { "name": "date", "value": "Wed, 28 Feb 2024 14:32:48 GMT" }, + { "name": "server", "value": "uvicorn" }, + { "name": "vary", "value": "Origin" } + ], + "content": { + "size": -1, + "mimeType": "application/json", + "text": "{\"message\":\"Flow deleted successfully\"}" + }, + "headersSize": -1, + "bodySize": -1, + "redirectURL": "" + }, + "cache": {}, + "timings": { "send": -1, "wait": -1, "receive": 0.977 } + } + ] + } +} \ No newline at end of file diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index 99e4eadd5..fed40b4f0 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -44,9 +44,11 @@ "clsx": "^1.2.1", "dompurify": "^3.0.5", "esbuild": "^0.17.19", + "framer-motion": "^11.0.6", "lodash": "^4.17.21", "lucide-react": "^0.331.0", "moment": "^2.29.4", + "playwright": "^1.42.0", "react": "^18.2.0", "react-ace": "^10.1.0", "react-cookie": "^4.1.1", @@ -76,7 +78,7 @@ "zustand": "^4.4.7" }, "devDependencies": { - "@playwright/test": "^1.38.0", + "@playwright/test": "^1.42.0", "@swc/cli": "^0.1.62", "@swc/core": "^1.3.80", "@tailwindcss/typography": "^0.5.9", @@ -1491,12 +1493,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.0.tgz", + "integrity": "sha512-2k1HzC28Fs+HiwbJOQDUwrWMttqSLUVdjCqitBOjdCD0svWOMQUVqrXX6iFD7POps6xXAojsX/dGBpKnjZctLA==", "dev": true, "dependencies": { - "playwright": "1.41.2" + "playwright": "1.42.0" }, "bin": { "playwright": "cli.js" @@ -5918,6 +5920,44 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.6.tgz", + "integrity": "sha512-BpO3mWF8UwxzO3Ca5AmSkrg14QYTeJa9vKgoLOoBdBdTPj0e81i1dMwnX6EQJXRieUx20uiDBXq8bA6y7N6b8Q==", + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", @@ -8680,12 +8720,11 @@ } }, "node_modules/playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", - "dev": true, + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.0.tgz", + "integrity": "sha512-Ko7YRUgj5xBHbntrgt4EIw/nE//XBHOKVKnBjO1KuZkmkhlbgyggTe5s9hjqQ1LpN+Xg+kHsQyt5Pa0Bw5XpvQ==", "dependencies": { - "playwright-core": "1.41.2" + "playwright-core": "1.42.0" }, "bin": { "playwright": "cli.js" @@ -8698,10 +8737,9 @@ } }, "node_modules/playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", - "dev": true, + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.0.tgz", + "integrity": "sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==", "bin": { "playwright-core": "cli.js" }, diff --git a/src/frontend/package.json b/src/frontend/package.json index 1d74df9a3..41c9fcd43 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -39,9 +39,11 @@ "clsx": "^1.2.1", "dompurify": "^3.0.5", "esbuild": "^0.17.19", + "framer-motion": "^11.0.6", "lodash": "^4.17.21", "lucide-react": "^0.331.0", "moment": "^2.29.4", + "playwright": "^1.42.0", "react": "^18.2.0", "react-ace": "^10.1.0", "react-cookie": "^4.1.1", @@ -98,7 +100,7 @@ }, "proxy": "http://127.0.0.1:7860", "devDependencies": { - "@playwright/test": "^1.38.0", + "@playwright/test": "^1.42.0", "@swc/cli": "^0.1.62", "@swc/core": "^1.3.80", "@tailwindcss/typography": "^0.5.9", diff --git a/src/frontend/playwright-report/index.html b/src/frontend/playwright-report/index.html index e634446de..131efdcae 100644 --- a/src/frontend/playwright-report/index.html +++ b/src/frontend/playwright-report/index.html @@ -10,9 +10,6 @@
  • e2e report
  • -
  • - frontEnd Only report -
  • diff --git a/src/frontend/run-tests.sh b/src/frontend/run-tests.sh index 76e2fd756..ac6117ad6 100755 --- a/src/frontend/run-tests.sh +++ b/src/frontend/run-tests.sh @@ -27,8 +27,16 @@ terminate_process_by_port() { echo "Process terminated." } +delete_temp() { + cd ../../ + echo "Deleting temp database" + rm temp + echo "Temp database deleted." +} + + # Trap signals to ensure cleanup on script termination -trap 'terminate_process_by_port 7860; terminate_process_by_port 3000' EXIT +trap 'terminate_process_by_port 7860; terminate_process_by_port 3000; delete_temp' EXIT # install playwright if there is not installed yet npx playwright install @@ -42,26 +50,16 @@ make frontend & # Give some time for the frontend to start (adjust sleep duration as needed) sleep 10 -# Navigate to the test directory -cd src/frontend - -# Run frontend only Playwright tests with or without UI based on the --ui flag -if [ "$ui" = true ]; then - PLAYWRIGHT_HTML_REPORT=playwright-report/onlyFront npx playwright test tests/onlyFront --ui --project=chromium -else - PLAYWRIGHT_HTML_REPORT=playwright-report/onlyFront npx playwright test tests/onlyFront --project=chromium -fi - -# Navigate back to the project root directory -cd ../../ +#install backend +poetry install --extras deploy # Start the backend using 'make backend' in the background -make backend & +LANGFLOW_DATABASE_URL=sqlite:///./temp LANGFLOW_AUTO_LOGIN=True poetry run langflow run --backend-only --port 7860 --host 0.0.0.0 --no-open-browser & # Give some time for the backend to start (adjust sleep duration as needed) sleep 25 -# Navigate back to the test directory +# Navigate to the test directory cd src/frontend # Run Playwright tests with or without UI based on the --ui flag diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index 91c455d1c..22fd6c5bb 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -18,7 +18,9 @@ import { getHealth } from "./controllers/API"; import Router from "./routes"; import useAlertStore from "./stores/alertStore"; import { useDarkStore } from "./stores/darkStore"; +import useFlowStore from "./stores/flowStore"; import useFlowsManagerStore from "./stores/flowsManagerStore"; +import { useStoreStore } from "./stores/storeStore"; import { useTypesStore } from "./stores/typesStore"; export default function App() { @@ -28,7 +30,6 @@ export default function App() { const tempNotificationList = useAlertStore( (state) => state.tempNotificationList ); - const loading = useAlertStore((state) => state.loading); const [fetchError, setFetchError] = useState(false); const isLoading = useFlowsManagerStore((state) => state.isLoading); @@ -38,9 +39,11 @@ export default function App() { const { isAuthenticated } = useContext(AuthContext); const refreshFlows = useFlowsManagerStore((state) => state.refreshFlows); + const fetchApiData = useStoreStore((state) => state.fetchApiData); const getTypes = useTypesStore((state) => state.getTypes); const refreshVersion = useDarkStore((state) => state.refreshVersion); const refreshStars = useDarkStore((state) => state.refreshStars); + const checkHasStore = useStoreStore((state) => state.checkHasStore); useEffect(() => { refreshStars(); @@ -52,6 +55,8 @@ export default function App() { getTypes().then(() => { refreshFlows(); }); + checkHasStore(); + fetchApiData(); } }, [isAuthenticated]); diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx index 79f5120c9..d26505d5e 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx @@ -19,6 +19,8 @@ import { Button } from "../../../../components/ui/button"; import { LANGFLOW_SUPPORTED_TYPES, TOOLTIP_EMPTY, + inputHandleHover, + outputHandleHover, } from "../../../../constants/constants"; import { postCustomComponentUpdate } from "../../../../controllers/API"; import useAlertStore from "../../../../stores/alertStore"; @@ -180,11 +182,7 @@ export default function ParameterComponent({ return (
    {index === 0 && ( - - {left - ? "Avaliable input components:" - : "Avaliable output components:"} - + {left ? inputHandleHover : outputHandleHover} )} 2 ? item.display_name.split(", ").map((el, index) => ( - + {index === item.display_name.split(", ").length - 1 @@ -231,7 +229,7 @@ export default function ParameterComponent({ {item.type === "" ? "" : " - "} {item.type.split(", ").length > 2 ? item.type.split(", ").map((el, index) => ( - + {index === item.type.split(", ").length - 1 ? el @@ -265,7 +263,7 @@ export default function ParameterComponent({
    @@ -324,7 +322,9 @@ export default function ParameterComponent({ ) : ( title )} - {required ? " *" : ""} + + {required ? " *" : ""} +
    {info !== "" && ( @@ -332,7 +332,7 @@ export default function ParameterComponent({
    @@ -409,7 +409,7 @@ export default function ParameterComponent({
    ) : left === true && type === "float" ? ( @@ -458,7 +459,7 @@ export default function ParameterComponent({ options={data.node.template[name].options} onSelect={handleOnNewValue} value={data.node.template[name].value ?? "Choose an option"} - id={"dropdown-" + index} + id={"dropdown-" + name} />
    {data.node?.template[name].refresh && ( @@ -486,7 +487,7 @@ export default function ParameterComponent({ disabled={disabled} value={data.node?.template[name].value ?? ""} onChange={handleOnNewValue} - id={"code-input-" + index} + id={"code-input-" + name} />
    ) : left === true && type === "file" ? ( @@ -507,7 +508,7 @@ export default function ParameterComponent({ disabled={disabled} value={data.node?.template[name].value ?? ""} onChange={handleOnNewValue} - id={"int-input-" + index} + id={"int-input-" + name} />
    ) : left === true && type === "prompt" ? ( @@ -520,8 +521,8 @@ export default function ParameterComponent({ disabled={disabled} value={data.node?.template[name].value ?? ""} onChange={handleOnNewValue} - id={"prompt-input-" + index} - data-testid={"prompt-input-" + index} + id={"prompt-input-" + name} + data-testid={"prompt-input-" + name} />
    ) : left === true && type === "NestedDict" ? ( diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index bfe90f23b..c9844a47d 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -1,15 +1,21 @@ import { useCallback, useEffect, useState } from "react"; import { NodeToolbar } from "reactflow"; import ShadTooltip from "../../components/ShadTooltipComponent"; -import Tooltip from "../../components/TooltipComponent"; import IconComponent from "../../components/genericIconComponent"; import InputComponent from "../../components/inputComponent"; import { Button } from "../../components/ui/button"; +import Checkmark from "../../components/ui/checkmark"; import Loading from "../../components/ui/loading"; import { Textarea } from "../../components/ui/textarea"; -import { priorityFields } from "../../constants/constants"; +import Xmark from "../../components/ui/xmark"; +import { + priorityFields, + statusBuild, + statusBuilding, +} from "../../constants/constants"; import { BuildStatus } from "../../constants/enums"; import NodeToolbarComponent from "../../pages/FlowPage/components/nodeToolbarComponent"; +import { useDarkStore } from "../../stores/darkStore"; import useFlowStore from "../../stores/flowStore"; import useFlowsManagerStore from "../../stores/flowsManagerStore"; import { useTypesStore } from "../../stores/typesStore"; @@ -43,6 +49,7 @@ export default function GenericNode({ const [nodeDescription, setNodeDescription] = useState( data.node?.description! ); + const buildStatus = useFlowStore((state) => state.flowBuildStatus[data.id]); const [validationStatus, setValidationStatus] = useState(null); const [handles, setHandles] = useState(0); @@ -89,14 +96,13 @@ export default function GenericNode({ // should be empty string if no duration // else should be `Duration: ${duration}` - const getDurationString = (duration: number | null): string => { - if (duration === null) { + const getDurationString = (duration: number | undefined): string => { + if (duration === undefined) { return ""; } else { return `Duration: ${duration}`; } }; - const durationString = getDurationString(validationStatus?.data.duration); useEffect(() => { @@ -118,12 +124,11 @@ export default function GenericNode({ } else { setValidationStatus(null); } - }, [flowPool, data.id]); + }, [flowPool[data.id], data.id]); const showNode = data.showNode ?? true; - const pinned = data.node?.pinned ?? false; - const nameEditable = data.node?.flow || data.type === "CustomComponent"; + const nameEditable = true; const emojiRegex = /\p{Emoji}/u; const isEmoji = emojiRegex.test(data?.node?.icon!); @@ -134,9 +139,8 @@ export default function GenericNode({ const iconName = iconElement || (data.node?.flow ? "group_components" : name); const iconClassName = `generic-node-icon ${ - !showNode ? "absolute inset-x-6 h-12 w-12" : "" + !showNode ? " absolute inset-x-6 h-12 w-12 " : "" }`; - if (iconElement && isEmoji) { return nodeIconFragment(iconElement); } else { @@ -158,36 +162,45 @@ export default function GenericNode({ ); }; - const getIconPlayOrPauseComponent = (name, className) => ( - - ); - - const getStatusClassName = ( - validationStatus: validationStatusType | null - ) => { - if (validationStatus && validationStatus.valid) { - return "green-status"; - } else if (validationStatus && !validationStatus.valid) { - return "red-status"; - } else if (!validationStatus) { - return "yellow-status"; - } else { - return "status-build-animation"; - } - }; - - const renderIconPlayOrPauseComponents = ( + const isDark = useDarkStore((state) => state.dark); + const renderIconStatus = ( buildStatus: BuildStatus | undefined, validationStatus: validationStatusType | null ) => { if (buildStatus === BuildStatus.BUILDING) { - return ; + return ; } else { - const className = getStatusClassName(validationStatus); - return <>{getIconPlayOrPauseComponent("Play", className)}; + return ( + <> + + {validationStatus && validationStatus.valid ? ( + + ) : validationStatus && + !validationStatus.valid && + buildStatus === BuildStatus.INACTIVE ? ( + + ) : validationStatus && !validationStatus.valid ? ( + + ) : ( + + )} + + ); } }; @@ -195,14 +208,16 @@ export default function GenericNode({ buildStatus: BuildStatus | undefined, validationStatus: validationStatusType | null ) => { - if ( - buildStatus === BuildStatus.BUILT && - validationStatus && - !validationStatus.valid - ) { - return "border-none ring ring-red-300"; + let isInvalid = validationStatus && !validationStatus.valid; + + if (buildStatus === BuildStatus.INACTIVE && isInvalid) { + // INACTIVE should have its own class + return "inactive-status"; + } + if (buildStatus === BuildStatus.BUILT && isInvalid) { + return isDark ? "built-invalid-status-dark" : "built-invalid-status"; } else if (buildStatus === BuildStatus.BUILDING) { - return "border-none ring"; + return "building-status"; } else { return ""; } @@ -214,11 +229,17 @@ export default function GenericNode({ buildStatus: BuildStatus | undefined, validationStatus: validationStatusType | null ) => { + const specificClassFromBuildStatus = getSpecificClassFromBuildStatus( + buildStatus, + validationStatus + ); + const baseBorderClass = getBaseBorderClass(selected); + const nodeSizeClass = getNodeSizeClass(showNode); return classNames( - getBaseBorderClass(selected), - getNodeSizeClass(showNode), + baseBorderClass, + nodeSizeClass, "generic-node-div", - getSpecificClassFromBuildStatus(buildStatus, validationStatus) + specificClassFromBuildStatus ); }; @@ -248,14 +269,14 @@ export default function GenericNode({ showNode={showNode} openAdvancedModal={false} onCloseAdvancedModal={() => {}} + selected={selected} > -
    @@ -277,7 +298,7 @@ export default function GenericNode({
    {iconNodeRender()} @@ -311,32 +332,39 @@ export default function GenericNode({ />
    ) : ( - -
    { - if (nameEditable) { - setInputName(true); - } - takeSnapshot(); - event.stopPropagation(); - event.preventDefault(); - }} - > +
    +
    { + if (nameEditable) { + setInputName(true); + } + takeSnapshot(); + event.stopPropagation(); + event.preventDefault(); + }} data-testid={"title-" + data.node?.display_name} className="generic-node-tooltip-div text-primary" > {data.node?.display_name}
    - {nameEditable && ( +
    + {nameEditable && ( +
    { + setInputName(true); + takeSnapshot(); + event.stopPropagation(); + event.preventDefault(); + }} + > - )} -
    - +
    + )} +
    )}
    )} @@ -431,60 +459,22 @@ export default function GenericNode({ {showNode && ( - )} - {showNode && ( - )} diff --git a/src/frontend/src/alerts/alertDropDown/index.tsx b/src/frontend/src/alerts/alertDropDown/index.tsx index 967d82174..617ba3e29 100644 --- a/src/frontend/src/alerts/alertDropDown/index.tsx +++ b/src/frontend/src/alerts/alertDropDown/index.tsx @@ -1,3 +1,4 @@ +import { Cross2Icon } from "@radix-ui/react-icons"; import { useState } from "react"; import IconComponent from "../../components/genericIconComponent"; import { @@ -5,6 +6,7 @@ import { PopoverContent, PopoverTrigger, } from "../../components/ui/popover"; +import { zeroNotifications } from "../../constants/constants"; import useAlertStore from "../../stores/alertStore"; import { AlertDropdownType } from "../../types/alerts"; import SingleAlert from "./components/singleAlertComponent"; @@ -45,15 +47,15 @@ export default function AlertDropdown({ setTimeout(clearNotificationList, 100); }} > - + @@ -68,7 +70,7 @@ export default function AlertDropdown({ )) ) : (
    - No new notifications + {zeroNotifications}
    )} diff --git a/src/frontend/src/components/AccordionComponent/index.tsx b/src/frontend/src/components/AccordionComponent/index.tsx index e00932c76..9a3c4a212 100644 --- a/src/frontend/src/components/AccordionComponent/index.tsx +++ b/src/frontend/src/components/AccordionComponent/index.tsx @@ -49,8 +49,10 @@ export default function AccordionComponent({ > {trigger} - - {children} + +
    + {children} +
    diff --git a/src/frontend/src/components/CrashErrorComponent/index.tsx b/src/frontend/src/components/CrashErrorComponent/index.tsx index f5018f885..0cf376195 100644 --- a/src/frontend/src/components/CrashErrorComponent/index.tsx +++ b/src/frontend/src/components/CrashErrorComponent/index.tsx @@ -1,36 +1,63 @@ +import { XCircle } from "lucide-react"; import { crashComponentPropsType } from "../../types/components"; +import { Button } from "../ui/button"; +import { Card, CardContent, CardFooter, CardHeader } from "../ui/card"; export default function CrashErrorComponent({ error, resetErrorBoundary, }: crashComponentPropsType): JSX.Element { return ( -
    -
    -

    - Oops! An unknown error has occurred. -

    -

    - Please click the 'Reset Application' button to restore the - application's state. If the error persists, please create an issue on - our GitHub page. We apologize for any inconvenience this may have - caused. -

    -
    - - - Create Issue - +
    +
    +
    + + +
    + +
    +
    +

    + Sorry, we found an unexpected error! +

    +
    +
    + + +
    +

    + Please report errors with detailed tracebacks on the{" "} + + GitHub Issues + {" "} + page. +

    + Thank you! +

    +
    +
    + + +
    + + + + + +
    +
    +
    diff --git a/src/frontend/src/components/IOInputField/index.tsx b/src/frontend/src/components/IOInputField/index.tsx index c499bd551..04610baeb 100644 --- a/src/frontend/src/components/IOInputField/index.tsx +++ b/src/frontend/src/components/IOInputField/index.tsx @@ -12,19 +12,20 @@ export default function IOInputField({ const setNode = useFlowStore((state) => state.setNode); const node = nodes.find((node) => node.id === inputId); function handleInputType() { - if (!node) return "no node found"; + if (!node) return <>"No node found!"; switch (inputType) { case "TextInput": return (