From 5cb7455400b9eb957db855867a41a462f643d119 Mon Sep 17 00:00:00 2001
From: "github-merge-queue[bot]"
Date: Wed, 23 Jul 2025 14:10:10 +0000
Subject: [PATCH] deploy: 78a2ff69b66a459203ffe5ee5e3c546452bb43f1
---
404.html | 2 +-
about-langflow.html | 2 +-
agent-tutorial.html | 2 +-
agents-tools.html | 2 +-
agents.html | 2 +-
api-build.html | 2 +-
api-files.html | 2 +-
api-flows-run.html | 2 +-
api-flows.html | 2 +-
api-logs.html | 2 +-
api-monitor.html | 2 +-
api-projects.html | 2 +-
api-reference-api-examples.html | 2 +-
api-users.html | 2 +-
api.html | 2 +-
api/add-server.html | 2 +-
api/add-user.html | 2 +-
api/auto-login.html | 2 +-
api/build-flow.html | 2 +-
api/build-public-tmp.html | 2 +-
api/build-vertex-stream.html | 2 +-
api/build-vertex.html | 2 +-
api/cancel-build.html | 2 +-
api/check-if-store-has-api-key.html | 2 +-
api/check-if-store-is-enabled.html | 2 +-
api/check-installed-mcp-servers.html | 2 +-
api/create-api-key-route.html | 2 +-
api/create-flow.html | 2 +-
api/create-flows.html | 2 +-
api/create-folder-redirect.html | 2 +-
api/create-project.html | 2 +-
api/create-upload-file.html | 2 +-
api/create-variable.html | 2 +-
api/custom-component-update.html | 2 +-
api/custom-component.html | 2 +-
api/delete-all-files-1.html | 2 +-
api/delete-all-files.html | 2 +-
api/delete-api-key-route.html | 2 +-
api/delete-file-1.html | 2 +-
api/delete-file.html | 2 +-
api/delete-files-batch.html | 2 +-
api/delete-flow.html | 2 +-
api/delete-folder-redirect.html | 2 +-
api/delete-messages-session.html | 2 +-
api/delete-messages.html | 2 +-
api/delete-multiple-flows.html | 2 +-
api/delete-project.html | 2 +-
api/delete-server.html | 2 +-
api/delete-user.html | 2 +-
api/delete-variable.html | 2 +-
api/delete-vertex-builds.html | 2 +-
api/download-component.html | 2 +-
api/download-file-1.html | 2 +-
api/download-file-2.html | 2 +-
api/download-file-redirect.html | 2 +-
api/download-file.html | 2 +-
api/download-files-batch.html | 2 +-
api/download-image.html | 2 +-
api/download-multiple-file.html | 2 +-
api/download-profile-picture.html | 2 +-
api/edit-file-name.html | 2 +-
api/experimental-run-flow.html | 2 +-
api/get-all.html | 2 +-
api/get-api-keys-route.html | 2 +-
api/get-build-events.html | 2 +-
api/get-components.html | 2 +-
api/get-config.html | 2 +-
api/get-elevenlabs-voice-ids.html | 2 +-
api/get-list-of-components-liked-by-user.html | 2 +-
api/get-message-sessions.html | 2 +-
api/get-messages.html | 2 +-
api/get-server-endpoint.html | 2 +-
api/get-servers.html | 2 +-
api/get-starter-projects.html | 2 +-
api/get-tags.html | 2 +-
api/get-task-status.html | 2 +-
api/get-transactions.html | 2 +-
api/get-version.html | 2 +-
api/get-vertex-builds.html | 2 +-
api/handle-messages-1.html | 2 +-
api/handle-messages.html | 2 +-
api/handle-project-messages-with-slash.html | 2 +-
api/handle-project-messages.html | 2 +-
api/handle-project-sse.html | 2 +-
api/handle-sse-1.html | 2 +-
api/handle-sse.html | 2 +-
api/health-check.html | 2 +-
api/health.html | 2 +-
api/install-mcp-config.html | 2 +-
api/like-component.html | 2 +-
api/list-files-1.html | 2 +-
api/list-files-2.html | 2 +-
api/list-files.html | 2 +-
api/list-profile-pictures.html | 2 +-
api/list-project-tools.html | 2 +-
api/login-to-get-access-token.html | 2 +-
api/logout.html | 2 +-
api/logs.html | 2 +-
api/patch-user.html | 2 +-
api/post-validate-code.html | 2 +-
api/post-validate-prompt.html | 2 +-
api/process-1.html | 2 +-
api/process.html | 2 +-
api/read-all-users.html | 2 +-
api/read-basic-examples.html | 2 +-
api/read-current-user.html | 2 +-
api/read-flow.html | 2 +-
api/read-flows.html | 2 +-
api/read-folder-redirect.html | 2 +-
api/read-folders-redirect.html | 2 +-
api/read-project.html | 2 +-
api/read-projects.html | 2 +-
api/read-public-flow.html | 2 +-
api/read-variables.html | 2 +-
api/refresh-token.html | 2 +-
api/reset-password.html | 2 +-
api/retrieve-vertices-order.html | 2 +-
api/save-store-api-key.html | 2 +-
api/share-component.html | 2 +-
api/simplified-run-flow.html | 2 +-
api/stream-logs.html | 2 +-
api/update-flow.html | 2 +-
api/update-folder-redirect.html | 2 +-
api/update-message.html | 2 +-
api/update-project-mcp-settings.html | 2 +-
api/update-project.html | 2 +-
api/update-server-endpoint.html | 2 +-
api/update-session-id.html | 2 +-
api/update-shared-component.html | 2 +-
api/update-variable.html | 2 +-
api/upload-file-1.html | 2 +-
api/upload-file-2.html | 2 +-
api/upload-file-redirect.html | 2 +-
api/upload-file.html | 2 +-
api/upload-user-file-1.html | 2 +-
api/upload-user-file.html | 2 +-
api/webhook-run-flow.html | 2 +-
assets/js/20177945.95b0ee32.js | 1 -
assets/js/20177945.a97a329f.js | 1 +
...0d4f5.8d4399d8.js => 2ab0d4f5.f87ed04d.js} | 2 +-
...6a4d2.8d3f3031.js => e6c6a4d2.694e66f6.js} | 2 +-
...n.7074028a.js => runtime~main.b7091036.js} | 2 +-
basic-prompting.html | 2 +-
blog-writer.html | 2 +-
chat-with-files.html | 2 +-
chat-with-rag.html | 2 +-
components-agents.html | 2 +-
components-bundle-components.html | 2 +-
components-custom-components.html | 35 ++++++++++++++++++-
components-data.html | 2 +-
components-embedding-models.html | 2 +-
components-helpers.html | 2 +-
components-io.html | 2 +-
components-logic.html | 2 +-
components-memories.html | 2 +-
components-models.html | 2 +-
components-processing.html | 2 +-
components-prompts.html | 2 +-
components-tools.html | 2 +-
components-vector-stores.html | 2 +-
concepts-components.html | 2 +-
concepts-file-management.html | 2 +-
concepts-flows-import.html | 2 +-
concepts-flows.html | 2 +-
concepts-overview.html | 2 +-
concepts-playground.html | 2 +-
concepts-publish.html | 2 +-
concepts-voice-mode.html | 2 +-
configuration-api-keys.html | 2 +-
configuration-authentication.html | 2 +-
configuration-cli.html | 2 +-
configuration-custom-database.html | 2 +-
configuration-global-variables.html | 2 +-
contributing-bundles.html | 2 +-
contributing-community.html | 2 +-
contributing-component-tests.html | 2 +-
contributing-components.html | 2 +-
contributing-github-issues.html | 2 +-
contributing-how-to-contribute.html | 2 +-
contributing-telemetry.html | 2 +-
contributing-templates.html | 2 +-
data-types.html | 2 +-
deployment-caddyfile.html | 2 +-
deployment-docker.html | 2 +-
deployment-gcp.html | 2 +-
deployment-hugging-face-spaces.html | 2 +-
deployment-kubernetes-dev.html | 2 +-
deployment-kubernetes-prod.html | 2 +-
deployment-overview.html | 2 +-
deployment-prod-best-practices.html | 2 +-
deployment-public-server.html | 2 +-
deployment-railway.html | 2 +-
deployment-render.html | 2 +-
develop-application.html | 2 +-
develop-overview.html | 2 +-
document-qa.html | 2 +-
environment-variables.html | 2 +-
financial-report-parser.html | 2 +-
get-started-installation.html | 2 +-
get-started-quickstart.html | 2 +-
index.html | 2 +-
install-custom-dependencies.html | 2 +-
integrations-apify.html | 2 +-
integrations-arize.html | 2 +-
integrations-assemblyai.html | 2 +-
integrations-cleanlab.html | 2 +-
integrations-composio.html | 2 +-
integrations-docling.html | 2 +-
integrations-google-big-query.html | 2 +-
integrations-langfuse.html | 2 +-
integrations-langsmith.html | 2 +-
integrations-langwatch.html | 2 +-
integrations-nvidia-g-assist.html | 2 +-
integrations-nvidia-ingest-wsl2.html | 2 +-
integrations-nvidia-ingest.html | 2 +-
integrations-opik.html | 2 +-
...setup-google-cloud-vertex-ai-langflow.html | 2 +-
.../notion/notion-agent-conversational.html | 2 +-
.../notion/notion-agent-meeting-notes.html | 2 +-
integrations/notion/setup.html | 2 +-
logging.html | 2 +-
luna-for-langflow.html | 2 +-
mcp-client.html | 2 +-
mcp-component-astra.html | 2 +-
mcp-server.html | 2 +-
mcp-tutorial.html | 2 +-
memory-chatbot.html | 2 +-
memory.html | 2 +-
release-notes.html | 2 +-
search.html | 2 +-
sequential-agent.html | 2 +-
session-id.html | 2 +-
simple-agent.html | 2 +-
sitemap.xml | 2 +-
travel-planning-agent.html | 2 +-
troubleshoot.html | 2 +-
typescript-client.html | 2 +-
vector-store-rag.html | 2 +-
webhook.html | 2 +-
239 files changed, 271 insertions(+), 238 deletions(-)
delete mode 100644 assets/js/20177945.95b0ee32.js
create mode 100644 assets/js/20177945.a97a329f.js
rename assets/js/{2ab0d4f5.8d4399d8.js => 2ab0d4f5.f87ed04d.js} (50%)
rename assets/js/{e6c6a4d2.8d3f3031.js => e6c6a4d2.694e66f6.js} (56%)
rename assets/js/{runtime~main.7074028a.js => runtime~main.b7091036.js} (98%)
diff --git a/404.html b/404.html
index a1d3a57aa8..b91feadf1c 100644
--- a/404.html
+++ b/404.html
@@ -23,7 +23,7 @@
-
+
diff --git a/about-langflow.html b/about-langflow.html
index f5e88e5819..9210e03ca0 100644
--- a/about-langflow.html
+++ b/about-langflow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/agent-tutorial.html b/agent-tutorial.html
index f24876efb4..31fe4dfb4c 100644
--- a/agent-tutorial.html
+++ b/agent-tutorial.html
@@ -23,7 +23,7 @@
-
+
diff --git a/agents-tools.html b/agents-tools.html
index 6d9e7b9280..54ccf3f863 100644
--- a/agents-tools.html
+++ b/agents-tools.html
@@ -23,7 +23,7 @@
-
+
diff --git a/agents.html b/agents.html
index c423ff89a0..8c0d4c21a2 100644
--- a/agents.html
+++ b/agents.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-build.html b/api-build.html
index 58c6a0fd14..edb0036ef9 100644
--- a/api-build.html
+++ b/api-build.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-files.html b/api-files.html
index 9b238188d7..4c52058073 100644
--- a/api-files.html
+++ b/api-files.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-flows-run.html b/api-flows-run.html
index d3f7acb341..97651dae7c 100644
--- a/api-flows-run.html
+++ b/api-flows-run.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-flows.html b/api-flows.html
index 904b65dcd4..55529d421a 100644
--- a/api-flows.html
+++ b/api-flows.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-logs.html b/api-logs.html
index 19459dfeca..721e7ae946 100644
--- a/api-logs.html
+++ b/api-logs.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-monitor.html b/api-monitor.html
index 0cbf4cee32..43c1b92e90 100644
--- a/api-monitor.html
+++ b/api-monitor.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-projects.html b/api-projects.html
index fda6a59993..0382ec3497 100644
--- a/api-projects.html
+++ b/api-projects.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html
index 35b57a664a..4800bf3570 100644
--- a/api-reference-api-examples.html
+++ b/api-reference-api-examples.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api-users.html b/api-users.html
index 291dfe100e..76dc3e8e8f 100644
--- a/api-users.html
+++ b/api-users.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api.html b/api.html
index d724080445..4719f12341 100644
--- a/api.html
+++ b/api.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/add-server.html b/api/add-server.html
index 49da7a365f..c929f75396 100644
--- a/api/add-server.html
+++ b/api/add-server.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/add-user.html b/api/add-user.html
index c9b7449f35..27e86660e1 100644
--- a/api/add-user.html
+++ b/api/add-user.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/auto-login.html b/api/auto-login.html
index 8155ee92a8..2919f42cf1 100644
--- a/api/auto-login.html
+++ b/api/auto-login.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/build-flow.html b/api/build-flow.html
index 2e64700b2d..f6ea10c935 100644
--- a/api/build-flow.html
+++ b/api/build-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/build-public-tmp.html b/api/build-public-tmp.html
index b1eb23a301..04ddc8c816 100644
--- a/api/build-public-tmp.html
+++ b/api/build-public-tmp.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/build-vertex-stream.html b/api/build-vertex-stream.html
index 20e3f09616..19a45523ee 100644
--- a/api/build-vertex-stream.html
+++ b/api/build-vertex-stream.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/build-vertex.html b/api/build-vertex.html
index 446ab2c61e..48e4fb4b0a 100644
--- a/api/build-vertex.html
+++ b/api/build-vertex.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/cancel-build.html b/api/cancel-build.html
index 04c3e6f419..7fa2c5cb60 100644
--- a/api/cancel-build.html
+++ b/api/cancel-build.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/check-if-store-has-api-key.html b/api/check-if-store-has-api-key.html
index 0f61e948c3..2f4ca140d2 100644
--- a/api/check-if-store-has-api-key.html
+++ b/api/check-if-store-has-api-key.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/check-if-store-is-enabled.html b/api/check-if-store-is-enabled.html
index b31e0d551a..9c28f7d461 100644
--- a/api/check-if-store-is-enabled.html
+++ b/api/check-if-store-is-enabled.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/check-installed-mcp-servers.html b/api/check-installed-mcp-servers.html
index d75b6c2393..eced53ec84 100644
--- a/api/check-installed-mcp-servers.html
+++ b/api/check-installed-mcp-servers.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-api-key-route.html b/api/create-api-key-route.html
index 5523ad3dfa..1c2eeaea41 100644
--- a/api/create-api-key-route.html
+++ b/api/create-api-key-route.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-flow.html b/api/create-flow.html
index cc9a326904..457bb26da3 100644
--- a/api/create-flow.html
+++ b/api/create-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-flows.html b/api/create-flows.html
index 42268f91e6..21cc4af827 100644
--- a/api/create-flows.html
+++ b/api/create-flows.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-folder-redirect.html b/api/create-folder-redirect.html
index 0eeb3a17e1..f286212bfc 100644
--- a/api/create-folder-redirect.html
+++ b/api/create-folder-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-project.html b/api/create-project.html
index 76726b5343..6a318ec356 100644
--- a/api/create-project.html
+++ b/api/create-project.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-upload-file.html b/api/create-upload-file.html
index 9dfb8cbba3..2f2c6f25d1 100644
--- a/api/create-upload-file.html
+++ b/api/create-upload-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/create-variable.html b/api/create-variable.html
index fc8399fa54..66e91c36e7 100644
--- a/api/create-variable.html
+++ b/api/create-variable.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/custom-component-update.html b/api/custom-component-update.html
index 46ac2f7ac0..ad1732054b 100644
--- a/api/custom-component-update.html
+++ b/api/custom-component-update.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/custom-component.html b/api/custom-component.html
index e05e25d13e..67b14fcc7d 100644
--- a/api/custom-component.html
+++ b/api/custom-component.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-all-files-1.html b/api/delete-all-files-1.html
index bfdcfd54ad..73f8f13657 100644
--- a/api/delete-all-files-1.html
+++ b/api/delete-all-files-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-all-files.html b/api/delete-all-files.html
index 30a85b5667..3f6f58e7dd 100644
--- a/api/delete-all-files.html
+++ b/api/delete-all-files.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-api-key-route.html b/api/delete-api-key-route.html
index ada89d7b3d..0ac4285c62 100644
--- a/api/delete-api-key-route.html
+++ b/api/delete-api-key-route.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-file-1.html b/api/delete-file-1.html
index 80d148e49e..07a8a619f4 100644
--- a/api/delete-file-1.html
+++ b/api/delete-file-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-file.html b/api/delete-file.html
index afdd2fa750..67e27114bb 100644
--- a/api/delete-file.html
+++ b/api/delete-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-files-batch.html b/api/delete-files-batch.html
index b9b8b824f2..19af4400ef 100644
--- a/api/delete-files-batch.html
+++ b/api/delete-files-batch.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-flow.html b/api/delete-flow.html
index 6d6392adca..25b7cafc5b 100644
--- a/api/delete-flow.html
+++ b/api/delete-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-folder-redirect.html b/api/delete-folder-redirect.html
index beed8f5247..b0ef53996a 100644
--- a/api/delete-folder-redirect.html
+++ b/api/delete-folder-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-messages-session.html b/api/delete-messages-session.html
index 7f08c583d0..cbac0ab2a2 100644
--- a/api/delete-messages-session.html
+++ b/api/delete-messages-session.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-messages.html b/api/delete-messages.html
index bd1d30b954..aa242ecf44 100644
--- a/api/delete-messages.html
+++ b/api/delete-messages.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-multiple-flows.html b/api/delete-multiple-flows.html
index fdaf1110de..b170ee9ff7 100644
--- a/api/delete-multiple-flows.html
+++ b/api/delete-multiple-flows.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-project.html b/api/delete-project.html
index 3bcf7a6f42..6740ec4356 100644
--- a/api/delete-project.html
+++ b/api/delete-project.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-server.html b/api/delete-server.html
index 11f91eb35e..bd50198a08 100644
--- a/api/delete-server.html
+++ b/api/delete-server.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-user.html b/api/delete-user.html
index eadd5dfa2e..a530cdf01d 100644
--- a/api/delete-user.html
+++ b/api/delete-user.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-variable.html b/api/delete-variable.html
index 481ee947d3..1fadad66f8 100644
--- a/api/delete-variable.html
+++ b/api/delete-variable.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/delete-vertex-builds.html b/api/delete-vertex-builds.html
index 44c616b211..f086f0df54 100644
--- a/api/delete-vertex-builds.html
+++ b/api/delete-vertex-builds.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-component.html b/api/download-component.html
index 1c9db5902e..19b8fb9d6f 100644
--- a/api/download-component.html
+++ b/api/download-component.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-file-1.html b/api/download-file-1.html
index a1d60638df..91815fa443 100644
--- a/api/download-file-1.html
+++ b/api/download-file-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-file-2.html b/api/download-file-2.html
index ac7979e9ad..93a4fdbd88 100644
--- a/api/download-file-2.html
+++ b/api/download-file-2.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-file-redirect.html b/api/download-file-redirect.html
index 11a52c9cb4..2c206ab45b 100644
--- a/api/download-file-redirect.html
+++ b/api/download-file-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-file.html b/api/download-file.html
index bf0c535e18..e6a3dcada0 100644
--- a/api/download-file.html
+++ b/api/download-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-files-batch.html b/api/download-files-batch.html
index 3b6a413a6e..f3d3c1ea81 100644
--- a/api/download-files-batch.html
+++ b/api/download-files-batch.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-image.html b/api/download-image.html
index 7718a67829..c83a8610a6 100644
--- a/api/download-image.html
+++ b/api/download-image.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-multiple-file.html b/api/download-multiple-file.html
index 43a2d0179a..22a5387c32 100644
--- a/api/download-multiple-file.html
+++ b/api/download-multiple-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/download-profile-picture.html b/api/download-profile-picture.html
index 5e5ab87a70..8f2c28d2ff 100644
--- a/api/download-profile-picture.html
+++ b/api/download-profile-picture.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/edit-file-name.html b/api/edit-file-name.html
index c584a327ad..6c362809bc 100644
--- a/api/edit-file-name.html
+++ b/api/edit-file-name.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/experimental-run-flow.html b/api/experimental-run-flow.html
index 5e421d938a..ba4a6da0fa 100644
--- a/api/experimental-run-flow.html
+++ b/api/experimental-run-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-all.html b/api/get-all.html
index b4863f27d9..61def83770 100644
--- a/api/get-all.html
+++ b/api/get-all.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-api-keys-route.html b/api/get-api-keys-route.html
index c94a20a3cb..8cbb6eec15 100644
--- a/api/get-api-keys-route.html
+++ b/api/get-api-keys-route.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-build-events.html b/api/get-build-events.html
index 8100d7eb5a..c7fdb5f804 100644
--- a/api/get-build-events.html
+++ b/api/get-build-events.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-components.html b/api/get-components.html
index b3efbc645d..6e5be6de40 100644
--- a/api/get-components.html
+++ b/api/get-components.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-config.html b/api/get-config.html
index c3d6e3482d..b047786787 100644
--- a/api/get-config.html
+++ b/api/get-config.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-elevenlabs-voice-ids.html b/api/get-elevenlabs-voice-ids.html
index b46e3a95db..dd70bc0534 100644
--- a/api/get-elevenlabs-voice-ids.html
+++ b/api/get-elevenlabs-voice-ids.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-list-of-components-liked-by-user.html b/api/get-list-of-components-liked-by-user.html
index b769d626f9..441cecda81 100644
--- a/api/get-list-of-components-liked-by-user.html
+++ b/api/get-list-of-components-liked-by-user.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-message-sessions.html b/api/get-message-sessions.html
index e01ce6dc1e..fc4455a451 100644
--- a/api/get-message-sessions.html
+++ b/api/get-message-sessions.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-messages.html b/api/get-messages.html
index caac26662a..3850e88439 100644
--- a/api/get-messages.html
+++ b/api/get-messages.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-server-endpoint.html b/api/get-server-endpoint.html
index 9cf4891ba2..8001612f7d 100644
--- a/api/get-server-endpoint.html
+++ b/api/get-server-endpoint.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-servers.html b/api/get-servers.html
index bc63df1efd..1d4aa9b0e2 100644
--- a/api/get-servers.html
+++ b/api/get-servers.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-starter-projects.html b/api/get-starter-projects.html
index ba95de3f3c..ac3211901e 100644
--- a/api/get-starter-projects.html
+++ b/api/get-starter-projects.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-tags.html b/api/get-tags.html
index e8da886f17..b9914a4f72 100644
--- a/api/get-tags.html
+++ b/api/get-tags.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-task-status.html b/api/get-task-status.html
index 3cabd73731..ad766dca16 100644
--- a/api/get-task-status.html
+++ b/api/get-task-status.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-transactions.html b/api/get-transactions.html
index 2fd8e2a913..2dbbe89160 100644
--- a/api/get-transactions.html
+++ b/api/get-transactions.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-version.html b/api/get-version.html
index 1891520ee5..0729421399 100644
--- a/api/get-version.html
+++ b/api/get-version.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/get-vertex-builds.html b/api/get-vertex-builds.html
index 196e1585f5..19e66f0bd8 100644
--- a/api/get-vertex-builds.html
+++ b/api/get-vertex-builds.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-messages-1.html b/api/handle-messages-1.html
index a41ced66c7..3e2b0ddd7d 100644
--- a/api/handle-messages-1.html
+++ b/api/handle-messages-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-messages.html b/api/handle-messages.html
index d25c6eabc5..90a17ddf17 100644
--- a/api/handle-messages.html
+++ b/api/handle-messages.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-project-messages-with-slash.html b/api/handle-project-messages-with-slash.html
index bff4a0a47e..e3bde7c585 100644
--- a/api/handle-project-messages-with-slash.html
+++ b/api/handle-project-messages-with-slash.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-project-messages.html b/api/handle-project-messages.html
index 60b9758928..83bcf43c1b 100644
--- a/api/handle-project-messages.html
+++ b/api/handle-project-messages.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-project-sse.html b/api/handle-project-sse.html
index 0e9c5f632b..ab6c2b57fc 100644
--- a/api/handle-project-sse.html
+++ b/api/handle-project-sse.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-sse-1.html b/api/handle-sse-1.html
index 9db3c39d04..3fa41e0bc4 100644
--- a/api/handle-sse-1.html
+++ b/api/handle-sse-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/handle-sse.html b/api/handle-sse.html
index 3ce8ddf730..123108f1ab 100644
--- a/api/handle-sse.html
+++ b/api/handle-sse.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/health-check.html b/api/health-check.html
index 54095992ab..bd847f4249 100644
--- a/api/health-check.html
+++ b/api/health-check.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/health.html b/api/health.html
index 68572f63fa..8b454d47a2 100644
--- a/api/health.html
+++ b/api/health.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/install-mcp-config.html b/api/install-mcp-config.html
index e84482fc9e..0a3055e5b5 100644
--- a/api/install-mcp-config.html
+++ b/api/install-mcp-config.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/like-component.html b/api/like-component.html
index 6f77ebe416..419b3771f1 100644
--- a/api/like-component.html
+++ b/api/like-component.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/list-files-1.html b/api/list-files-1.html
index 00656165ea..66b6ed8b6f 100644
--- a/api/list-files-1.html
+++ b/api/list-files-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/list-files-2.html b/api/list-files-2.html
index 1ea82a46b8..69f4128373 100644
--- a/api/list-files-2.html
+++ b/api/list-files-2.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/list-files.html b/api/list-files.html
index 6511cddc46..d3fe2b0fe5 100644
--- a/api/list-files.html
+++ b/api/list-files.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/list-profile-pictures.html b/api/list-profile-pictures.html
index fb9e6b9a70..207d286c46 100644
--- a/api/list-profile-pictures.html
+++ b/api/list-profile-pictures.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/list-project-tools.html b/api/list-project-tools.html
index 3584dfec29..e1b1926b44 100644
--- a/api/list-project-tools.html
+++ b/api/list-project-tools.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/login-to-get-access-token.html b/api/login-to-get-access-token.html
index fc708cb458..5c55ec8acf 100644
--- a/api/login-to-get-access-token.html
+++ b/api/login-to-get-access-token.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/logout.html b/api/logout.html
index a18377f1ac..1df10f1c19 100644
--- a/api/logout.html
+++ b/api/logout.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/logs.html b/api/logs.html
index b2c648b91f..b2c4ec876a 100644
--- a/api/logs.html
+++ b/api/logs.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/patch-user.html b/api/patch-user.html
index e875f378e0..e6d72413d6 100644
--- a/api/patch-user.html
+++ b/api/patch-user.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/post-validate-code.html b/api/post-validate-code.html
index f7bf3d90b9..10ec298af5 100644
--- a/api/post-validate-code.html
+++ b/api/post-validate-code.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/post-validate-prompt.html b/api/post-validate-prompt.html
index 35c1efc26c..8269f0d727 100644
--- a/api/post-validate-prompt.html
+++ b/api/post-validate-prompt.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/process-1.html b/api/process-1.html
index d5482ec760..014ce0dcd8 100644
--- a/api/process-1.html
+++ b/api/process-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/process.html b/api/process.html
index 9785fd5529..c445c2d17e 100644
--- a/api/process.html
+++ b/api/process.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-all-users.html b/api/read-all-users.html
index b7770c7039..3e518fa3b4 100644
--- a/api/read-all-users.html
+++ b/api/read-all-users.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-basic-examples.html b/api/read-basic-examples.html
index fa3e757d5f..b99b219c8f 100644
--- a/api/read-basic-examples.html
+++ b/api/read-basic-examples.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-current-user.html b/api/read-current-user.html
index 85d94e1b4f..c533095206 100644
--- a/api/read-current-user.html
+++ b/api/read-current-user.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-flow.html b/api/read-flow.html
index aa65c77187..daee42a2a7 100644
--- a/api/read-flow.html
+++ b/api/read-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-flows.html b/api/read-flows.html
index c48426fbf9..0f32b0d067 100644
--- a/api/read-flows.html
+++ b/api/read-flows.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-folder-redirect.html b/api/read-folder-redirect.html
index 128f68e457..22a492eb19 100644
--- a/api/read-folder-redirect.html
+++ b/api/read-folder-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-folders-redirect.html b/api/read-folders-redirect.html
index c946ecb153..47058eba66 100644
--- a/api/read-folders-redirect.html
+++ b/api/read-folders-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-project.html b/api/read-project.html
index 04552c5e7e..9389a34b9d 100644
--- a/api/read-project.html
+++ b/api/read-project.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-projects.html b/api/read-projects.html
index 71539d6349..39a227397d 100644
--- a/api/read-projects.html
+++ b/api/read-projects.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-public-flow.html b/api/read-public-flow.html
index b66dce8962..6839f38107 100644
--- a/api/read-public-flow.html
+++ b/api/read-public-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/read-variables.html b/api/read-variables.html
index e5d08bc5f4..b1d3d7e4da 100644
--- a/api/read-variables.html
+++ b/api/read-variables.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/refresh-token.html b/api/refresh-token.html
index 1d8483d875..b39e032d9f 100644
--- a/api/refresh-token.html
+++ b/api/refresh-token.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/reset-password.html b/api/reset-password.html
index 7740747654..7fac13ffd8 100644
--- a/api/reset-password.html
+++ b/api/reset-password.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/retrieve-vertices-order.html b/api/retrieve-vertices-order.html
index 1b778631d6..13a787f15a 100644
--- a/api/retrieve-vertices-order.html
+++ b/api/retrieve-vertices-order.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/save-store-api-key.html b/api/save-store-api-key.html
index d3a5c2d81c..ee3a2ac76a 100644
--- a/api/save-store-api-key.html
+++ b/api/save-store-api-key.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/share-component.html b/api/share-component.html
index dadd1d6960..5d2dee845a 100644
--- a/api/share-component.html
+++ b/api/share-component.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/simplified-run-flow.html b/api/simplified-run-flow.html
index 5406c87ec4..4d7ca9b410 100644
--- a/api/simplified-run-flow.html
+++ b/api/simplified-run-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/stream-logs.html b/api/stream-logs.html
index abc3b3f34e..d34ab0667f 100644
--- a/api/stream-logs.html
+++ b/api/stream-logs.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-flow.html b/api/update-flow.html
index 1d8ccacbbb..8e0bdfa8e0 100644
--- a/api/update-flow.html
+++ b/api/update-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-folder-redirect.html b/api/update-folder-redirect.html
index e5f4c93678..17cde9ccab 100644
--- a/api/update-folder-redirect.html
+++ b/api/update-folder-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-message.html b/api/update-message.html
index cf8b115754..4df9a6e964 100644
--- a/api/update-message.html
+++ b/api/update-message.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-project-mcp-settings.html b/api/update-project-mcp-settings.html
index f3a91e88bc..3751da2445 100644
--- a/api/update-project-mcp-settings.html
+++ b/api/update-project-mcp-settings.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-project.html b/api/update-project.html
index 1a3395a660..ef234f1f78 100644
--- a/api/update-project.html
+++ b/api/update-project.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-server-endpoint.html b/api/update-server-endpoint.html
index 6736f285c5..76fac5ad93 100644
--- a/api/update-server-endpoint.html
+++ b/api/update-server-endpoint.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-session-id.html b/api/update-session-id.html
index dc7cf81e21..6a64d97648 100644
--- a/api/update-session-id.html
+++ b/api/update-session-id.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-shared-component.html b/api/update-shared-component.html
index 7610235e75..20ad000349 100644
--- a/api/update-shared-component.html
+++ b/api/update-shared-component.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/update-variable.html b/api/update-variable.html
index 704dac6502..b9597941eb 100644
--- a/api/update-variable.html
+++ b/api/update-variable.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-file-1.html b/api/upload-file-1.html
index 10993a4cfb..063ac1b691 100644
--- a/api/upload-file-1.html
+++ b/api/upload-file-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-file-2.html b/api/upload-file-2.html
index e8ce661da6..ee4bb723c5 100644
--- a/api/upload-file-2.html
+++ b/api/upload-file-2.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-file-redirect.html b/api/upload-file-redirect.html
index cb35e90c65..d55d962053 100644
--- a/api/upload-file-redirect.html
+++ b/api/upload-file-redirect.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-file.html b/api/upload-file.html
index 63629ab432..6b4e9329f8 100644
--- a/api/upload-file.html
+++ b/api/upload-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-user-file-1.html b/api/upload-user-file-1.html
index 2caa10e3b4..583ced152f 100644
--- a/api/upload-user-file-1.html
+++ b/api/upload-user-file-1.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/upload-user-file.html b/api/upload-user-file.html
index adbd7011ee..865bb6d652 100644
--- a/api/upload-user-file.html
+++ b/api/upload-user-file.html
@@ -23,7 +23,7 @@
-
+
diff --git a/api/webhook-run-flow.html b/api/webhook-run-flow.html
index 895e86e29f..f763f7f3ee 100644
--- a/api/webhook-run-flow.html
+++ b/api/webhook-run-flow.html
@@ -23,7 +23,7 @@
-
+
diff --git a/assets/js/20177945.95b0ee32.js b/assets/js/20177945.95b0ee32.js
deleted file mode 100644
index 577d2e9f9b..0000000000
--- a/assets/js/20177945.95b0ee32.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8392],{58950:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>d,assets:()=>i,chCodeConfig:()=>a,contentTitle:()=>p,default:()=>u,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","source":"@site/docs/Components/components-custom-components.mdx","sourceDirName":"Components","slug":"/components-custom-components","permalink":"/components-custom-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create custom Python components","slug":"/components-custom-components"},"sidebar":"docs","previous":{"title":"Bundles","permalink":"/components-bundle-components"},"next":{"title":"Data","permalink":"/components-data"}}');var s=t(74848),r=t(28453),l=t(24754);const c={title:"Create custom Python components",slug:"/components-custom-components"},p=void 0,i={},d={annotations:l.hk,Code:l.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},h=[{value:"Class-level attributes",id:"class-level-attributes",level:2},{value:"Structure of a custom component",id:"structure-of-a-custom-component",level:3},{value:"Internal Lifecycle and Execution Flow",id:"internal-lifecycle-and-execution-flow",level:3},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Associated Methods",id:"associated-methods",level:3},{value:"Components with multiple outputs",id:"components-with-multiple-outputs",level:3},{value:"Common internal patterns",id:"common-internal-patterns",level:3},{value:"_pre_run_setup()",id:"_pre_run_setup",level:4},{value:"Override run or _run",id:"override-run-or-_run",level:4},{value:"Store data in self.ctx",id:"store-data-in-selfctx",level:4},{value:"Directory structure requirements",id:"directory-structure-requirements",level:2},{value:"Custom component inputs and outputs",id:"custom-component-inputs-and-outputs",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Tool mode",id:"tool-mode",level:3},{value:"Typed annotations",id:"typed-annotations",level:2},{value:"Common Return Types",id:"common-return-types",level:3},{value:"Tips for typed annotations",id:"tips-for-typed-annotations",level:3},{value:"Enable dynamic fields",id:"enable-dynamic-fields",level:2},{value:"Implement update_build_config",id:"implement-update_build_config",level:3},{value:"Additional Dynamic Field Controls",id:"additional-dynamic-field-controls",level:3},{value:"Tips for Managing Dynamic Fields",id:"tips-for-managing-dynamic-fields",level:3},{value:"Error handling and logging",id:"error-handling-and-logging",level:2},{value:"Error handling techniques",id:"error-handling-techniques",level:3},{value:"Improve debugging and flow management",id:"improve-debugging-and-flow-management",level:3},{value:"Tips for error handling and logging",id:"tips-for-error-handling-and-logging",level:3},{value:"Contribute custom components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function y(o){const e={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return d||F("CH",!1),d.Code||F("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,s.jsxs)(e.p,{children:["Custom components extend Langflow's functionality through Python classes that inherit from ",(0,s.jsx)(e.code,{children:"Component"}),". This enables integration of new features, data manipulation, external services, and specialized tools."]}),"\n",(0,s.jsx)(e.p,{children:'In Langflow\'s node-based environment, each node is a "component" that performs discrete functions. Custom components are Python classes which define:'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Inputs"})," \u2014 Data or parameters your component requires."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs"})," \u2014 Data your component provides to downstream nodes."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Logic"})," \u2014 How you process inputs to produce outputs."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The benefits of creating custom components include unlimited extensibility, reusability, automatic UI field generation based on inputs, and type-safe connections between nodes."}),"\n",(0,s.jsx)(e.p,{children:"Create custom components for performing specialized tasks, calling APIs, or adding advanced logic."}),"\n",(0,s.jsx)(e.p,{children:"Custom components in Langflow are built upon:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["The Python class that inherits from ",(0,s.jsx)(e.code,{children:"Component"}),"."]}),"\n",(0,s.jsx)(e.li,{children:"Class-level attributes that identify and describe the component."}),"\n",(0,s.jsx)(e.li,{children:"Input and output lists that determine data flow."}),"\n",(0,s.jsx)(e.li,{children:"Internal variables for logging and advanced logic."}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"class-level-attributes",children:"Class-level attributes"}),"\n",(0,s.jsx)(e.p,{children:"Define these attributes to control a custom component's appearance and behavior:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCsvReader",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSV Reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Shown in node header",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Reads CSV files" ',props:{style:{color:"#A5D6FF"}}},{content:"# Tooltip text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"file-text" ',props:{style:{color:"#A5D6FF"}}},{content:"# Visual identifier",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSVReader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Unique internal ID",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" documentation ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.example.com/csv_reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Optional",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"display_name"}),": A user-friendly label in the node header."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"description"}),": A brief summary shown in tooltips."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"icon"}),": A visual identifier from Langflow's icon library."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"name"}),": A unique internal identifier."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"documentation"}),": An optional link to external docs."]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{title:"Icon usage",type:"tip",children:(0,s.jsxs)(e.p,{children:["Langflow uses ",(0,s.jsx)(e.a,{href:"https://lucide.dev/icons",children:"Lucide"})," for icons. To assign an icon to your component, set the icon attribute to the name of a Lucide icon as a string, such as ",(0,s.jsx)(e.code,{children:'icon = "file-text"'}),". Langflow renders icons from the Lucide library automatically."]})}),"\n",(0,s.jsx)(e.h3,{id:"structure-of-a-custom-component",children:"Structure of a custom component"}),"\n",(0,s.jsxs)(e.p,{children:["A ",(0,s.jsx)(e.strong,{children:"Langflow custom component"})," goes beyond a simple class with inputs and outputs. It includes an internal structure with optional lifecycle steps, output generation, front-end interaction, and logic organization."]}),"\n",(0,s.jsx)(e.p,{children:"A basic component:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Inherits from ",(0,s.jsx)(e.code,{children:"langflow.custom.Component"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:["Declares metadata like ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"description"}),", ",(0,s.jsx)(e.code,{children:"icon"}),", and more."]}),"\n",(0,s.jsxs)(e.li,{children:["Defines ",(0,s.jsx)(e.code,{children:"inputs"})," and ",(0,s.jsx)(e.code,{children:"outputs"})," lists."]}),"\n",(0,s.jsx)(e.li,{children:"Implements methods matching output specifications."}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"A minimal custom component skeleton contains the following:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"My Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"A short summary."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"sparkles"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"MyComponent"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"some_output_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"...",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"internal-lifecycle-and-execution-flow",children:"Internal Lifecycle and Execution Flow"}),"\n",(0,s.jsx)(e.p,{children:"Langflow's engine manages:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Instantiation"}),": A component is created and internal structures are initialized."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Assigning Inputs"}),": Values from the UI or connections are assigned to component fields."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation and Setup"}),": Optional hooks like ",(0,s.jsx)(e.code,{children:"_pre_run_setup"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs Generation"}),": ",(0,s.jsx)(e.code,{children:"run()"})," or ",(0,s.jsx)(e.code,{children:"build_results()"})," triggers output methods."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Optional Hooks"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"initialize_data"})," or ",(0,s.jsx)(e.code,{children:"_pre_run_setup"})," can run setup logic before the component's main execution."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"__call__"}),", ",(0,s.jsx)(e.code,{children:"run()"}),", or ",(0,s.jsx)(e.code,{children:"_run()"})," can be overridden to customize how the component is called or to define custom execution logic."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"inputs-and-outputs",children:"Inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Custom component inputs are defined with properties like:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"}),", ",(0,s.jsx)(e.code,{children:"value"}),", ",(0,s.jsx)(e.code,{children:"advanced"}),", ",(0,s.jsx)(e.code,{children:"is_list"}),", ",(0,s.jsx)(e.code,{children:"tool_mode"}),", ",(0,s.jsx)(e.code,{children:"real_time_refresh"})]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"StrInput"}),": simple text input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"DropdownInput"}),": selectable options."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"HandleInput"}),": specialized connections."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Custom component ",(0,s.jsx)(e.code,{children:"Output"})," properties define:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"method"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"})]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For more information, see ",(0,s.jsx)(e.a,{href:"/components-custom-components#custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"."]}),"\n",(0,s.jsx)(e.h3,{id:"associated-methods",children:"Associated Methods"}),"\n",(0,s.jsx)(e.p,{children:"Each output is linked to a method:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"The output method name must match the method name."}),"\n",(0,s.jsx)(e.li,{children:"The method typically returns objects like Message, Data, or DataFrame."}),"\n",(0,s.jsxs)(e.li,{children:["The method can use inputs with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"File Contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"file_contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"read_file"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"#...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"read_file",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".filename",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" with ",props:{style:{color:"#FF7B72"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(path, ",props:{style:{color:"#C9D1D9"}}},{content:'"r"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" f:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" content ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" f.read()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Read ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(content)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" chars from ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"content"',props:{style:{color:"#A5D6FF"}}},{content:": content})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"components-with-multiple-outputs",children:"Components with multiple outputs"}),"\n",(0,s.jsx)(e.p,{children:"A component can define multiple outputs.\nEach output can have a different corresponding method.\nFor example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Processed Data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processed_data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_data"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Debug Info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"debug_info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"provide_debug_info"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"common-internal-patterns",children:"Common internal patterns"}),"\n",(0,s.jsx)(e.h4,{id:"_pre_run_setup",children:(0,s.jsx)(e.code,{children:"_pre_run_setup()"})}),"\n",(0,s.jsx)(e.p,{children:"To initialize a custom component with counters set:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"_pre_run_setup",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"hasattr",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"_initialized"',props:{style:{color:"#A5D6FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:"._initialized ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".iteration ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"0",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"override-run-or-_run",children:["Override ",(0,s.jsx)(e.code,{children:"run"})," or ",(0,s.jsx)(e.code,{children:"_run"})]}),"\n",(0,s.jsxs)(e.p,{children:["You can override ",(0,s.jsx)(e.code,{children:"async def _run(self): ..."})," to define custom execution logic, although the default behavior from the base class usually covers most cases."]}),"\n",(0,s.jsxs)(e.h4,{id:"store-data-in-selfctx",children:["Store data in ",(0,s.jsx)(e.code,{children:"self.ctx"})]}),"\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"self.ctx"})," as a shared storage for data or counters across the component's execution flow:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".ctx.get(",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".ctx[",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"+ ",props:{style:{color:"#FF7B72"}}},{content:"1",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"directory-structure-requirements",children:"Directory structure requirements"}),"\n",(0,s.jsxs)(e.p,{children:["By default, Langflow looks for custom components in the ",(0,s.jsx)(e.code,{children:"langflow/components"})," directory."]}),"\n",(0,s.jsxs)(e.p,{children:["If you're creating custom components in a different location using the ",(0,s.jsx)(e.a,{href:"/environment-variables#LANGFLOW_COMPONENTS_PATH",children:"LANGFLOW_COMPONENTS_PATH"})," environment variable, components must be organized in a specific directory structure to be properly loaded and displayed in the UI:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/your/custom/components/path/ # Base directory set by LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 category_name/ # Required category subfolder that determines menu name",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Component file",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Components must be placed inside ",(0,s.jsx)(e.strong,{children:"category folders"}),", not directly in the base directory.\nThe category folder name determines where the component appears in the Langflow ",(0,s.jsx)(e.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsxs)(e.p,{children:["For example, to add a component to the ",(0,s.jsx)(e.strong,{children:"Helpers"})," category, place it in a ",(0,s.jsx)(e.code,{children:"helpers"})," subfolder:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:' \u2514\u2500\u2500 helpers/ # Displayed within the "Helpers" category',props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Your component",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"You can have multiple category folders to organize components into different categories:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/",props:{}}]},{tokens:[{content:" \u251c\u2500\u2500 helpers/",props:{}}]},{tokens:[{content:" \u2502 \u2514\u2500\u2500 helper_component.py",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tools/",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tool_component.py",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"This folder structure is required for Langflow to properly discover and load your custom components. Components placed directly in the base directory will not be loaded."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Won't be loaded - missing category folder!",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Inputs and outputs define how data flows through the component, how it appears in the UI, and how connections to other components are validated."}),"\n",(0,s.jsx)(e.h3,{id:"inputs",children:"Inputs"}),"\n",(0,s.jsxs)(e.p,{children:["Inputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"inputs"})," list. When Langflow loads the component, it uses this list to render component fields and ",(0,s.jsx)(e.a,{href:"/concepts-components#component-ports",children:"ports"})," in the UI. Users or other components provide values or connections to fill these inputs."]}),"\n",(0,s.jsxs)(e.p,{children:["An input is usually an instance of a class from ",(0,s.jsx)(e.code,{children:"langflow.io"})," (such as ",(0,s.jsx)(e.code,{children:"StrInput"}),", ",(0,s.jsx)(e.code,{children:"DataInput"}),", or ",(0,s.jsx)(e.code,{children:"MessageTextInput"}),"). The most common constructor parameters are:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name, accessed via ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown to users in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": A tooltip or short description."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"value"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": The default value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"advanced"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),', moves the field into the "Advanced" section.']}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"required"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", forces the user to provide a value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"is_list"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", allows multiple values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"input_types"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Restricts allowed connection types (e.g., ",(0,s.jsx)(e.code,{children:'["Data"]'}),", ",(0,s.jsx)(e.code,{children:'["LanguageModel"]'}),")."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"Here are the most commonly used input classes and their typical usage."}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Text Inputs"}),": For simple text entries."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"StrInput"})})," creates a single-line text field."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})})," creates a multi-line text area."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Numeric and Boolean Inputs"}),": Ensures users can only enter valid numeric or boolean data."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"BoolInput"})}),", ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"IntInput"})}),", and ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FloatInput"})})," provide fields for boolean, integer, and float values, ensuring type consistency."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Dropdowns"}),": For selecting from predefined options, useful for modes or levels."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Secrets"}),": A specialized input for sensitive data, ensuring input is hidden in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"SecretStrInput"})})," for API keys and passwords."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Specialized Data Inputs"}),": Ensures type-checking and color-coded connections in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Data"})," object (typically with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Message"})," object, used in chat or agent-based flows."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})})," simplifies access to the ",(0,s.jsx)(e.code,{children:".text"})," field of a ",(0,s.jsx)(e.code,{children:"Message"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Handle-Based Inputs"}),": Used to connect outputs of specific types, ensuring correct pipeline connections."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"HandleInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"File Uploads"}),": Allows users to upload files directly through the UI or receive file paths from other components."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FileInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Lists"}),": Set ",(0,s.jsx)(e.code,{children:"is_list=True"})," to accept multiple values, ideal for batch or grouped operations."]}),"\n",(0,s.jsxs)(e.p,{children:["This example defines three inputs: a text field (",(0,s.jsx)(e.code,{children:"StrInput"}),"), a boolean toggle (",(0,s.jsx)(e.code,{children:"BoolInput"}),"), and a dropdown selection (",(0,s.jsx)(e.code,{children:"DropdownInput"}),")."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, BoolInput, DropdownInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"title"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Title"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" BoolInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Fast"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Experimental"',props:{style:{color:"#A5D6FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"outputs",children:"Outputs"}),"\n",(0,s.jsxs)(e.p,{children:["Outputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"outputs"})," list. When Langflow renders a component, each output becomes a connector point in the UI. When you connect something to an output, Langflow automatically calls the corresponding method and passes the returned object to the next component."]}),"\n",(0,s.jsxs)(e.p,{children:["An output is usually an instance of ",(0,s.jsx)(e.code,{children:"Output"})," from ",(0,s.jsx)(e.code,{children:"langflow.io"}),", with common parameters:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"method"})}),": The name of the method called to produce the output."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Help text shown on hover."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The method must exist in the class, and it is recommended to annotate its return type for better type checking.\nYou can also set a ",(0,s.jsx)(e.code,{children:"self.status"})," message inside the method to show progress or logs."]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Common Return Types"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})}),": Structured chat messages."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})}),": Flexible object with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})}),": Pandas-based tables (",(0,s.jsx)(e.code,{children:"langflow.schema.DataFrame"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Primitive types"}),": ",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"})," (not recommended if you need type/color consistency)."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the ",(0,s.jsx)(e.code,{children:"DataToDataFrame"})," component defines its output using the outputs list. The ",(0,s.jsx)(e.code,{children:"df_out"})," output is linked to the ",(0,s.jsx)(e.code,{children:"build_df"})," method, so when connected in the UI, Langflow calls this method and passes its returned DataFrame to the next node. This demonstrates how each output maps to a method that generates the actual output data."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Data, DataFrame",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DataToDataFrame",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Data to DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Convert multiple Data objects into a DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"table"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"DataToDataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Data Items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"List of Data objects to convert"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"df_out"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_df"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rows ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" item ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".items:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.data.copy() ",props:{style:{color:"#C9D1D9"}}},{content:"if",props:{style:{color:"#FF7B72"}}},{content:" item.data ",props:{style:{color:"#C9D1D9"}}},{content:"else",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict[",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.get_text() ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" rows.append(row_dict)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(rows)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Built DataFrame with ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" df",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tool-mode",children:"Tool mode"}),"\n",(0,s.jsxs)(e.p,{children:["You can configure a Custom Component to work as a ",(0,s.jsx)(e.strong,{children:"Tool"})," by setting the parameter ",(0,s.jsx)(e.code,{children:"tool_mode=True"}),". This allows the component to be used in Langflow's Tool Mode workflows, such as by Agent components."]}),"\n",(0,s.jsx)(e.p,{children:"Langflow currently supports the following input types for Tool Mode:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataFrameInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"PromptInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mensage"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter the message that will be processed directly by the tool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tool_mode",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"typed-annotations",children:"Typed annotations"}),"\n",(0,s.jsxs)(e.p,{children:["In Langflow, ",(0,s.jsx)(e.strong,{children:"typed annotations"})," allow Langflow to visually guide users and maintain flow consistency."]}),"\n",(0,s.jsx)(e.p,{children:"Typed annotations provide:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Color-coding"}),": Outputs like ",(0,s.jsx)(e.code,{children:"-> Data"})," or ",(0,s.jsx)(e.code,{children:"-> Message"})," get distinct colors."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation"}),": Langflow blocks incompatible connections automatically."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Readability"}),": Developers can quickly understand data flow."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Development tools"}),": Better code suggestions and error checking in your code editor."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-return-types",children:"Common Return Types"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})})}),"\n",(0,s.jsx)(e.p,{children:"For chat-style outputs."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"produce_message",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello! from typed method!"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"System"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to Message-compatible inputs."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})})}),"\n",(0,s.jsx)(e.p,{children:"For structured data like dicts or partial texts."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"get_processed_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"key1"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"value1"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"key2"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"123",props:{style:{color:"#79C0FF"}}},{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"processed)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only with DataInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})})}),"\n",(0,s.jsx)(e.p,{children:"For tabular data"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pdf ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}},{content:'"A"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:'"B"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:"]})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(pdf)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to DataFrameInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.strong,{children:["Primitive Types (",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"}),")"]})}),"\n",(0,s.jsx)(e.p,{children:"Returning primitives is allowed but wrapping in Data or Message is recommended for better UI consistency."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_sum",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"int",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"sum",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".numbers)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-typed-annotations",children:"Tips for typed annotations"}),"\n",(0,s.jsx)(e.p,{children:"When using typed annotations, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Always Annotate Outputs"}),": Specify return types like ",(0,s.jsx)(e.code,{children:"-> Data"}),", ",(0,s.jsx)(e.code,{children:"-> Message"}),", or ",(0,s.jsx)(e.code,{children:"-> DataFrame"})," to enable proper UI color-coding and validation."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Wrap Raw Data"}),": Use ",(0,s.jsx)(e.code,{children:"Data"}),", ",(0,s.jsx)(e.code,{children:"Message"}),", or ",(0,s.jsx)(e.code,{children:"DataFrame"})," wrappers instead of returning plain structures."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Primitives Carefully"}),": Direct ",(0,s.jsx)(e.code,{children:"str"})," or ",(0,s.jsx)(e.code,{children:"int"})," returns are fine for simple flows, but wrapping improves flexibility."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Annotate Helpers Too"}),": Even if internal, typing improves maintainability and clarity."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Handle Edge Cases"}),": Prefer returning structured ",(0,s.jsx)(e.code,{children:"Data"})," with error fields when needed."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stay Consistent"}),": Use the same types across your components to make flows predictable and easier to build."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"enable-dynamic-fields",children:"Enable dynamic fields"}),"\n",(0,s.jsxs)(e.p,{children:["In ",(0,s.jsx)(e.strong,{children:"Langflow"}),", dynamic fields allow inputs to change or appear based on user interactions. You can make an input dynamic by setting ",(0,s.jsx)(e.code,{children:"dynamic=True"}),".\nOptionally, setting ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," triggers the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method to adjust the input's visibility or properties in real time, creating a contextual UI that only displays relevant fields based on the user's choices."]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the operator field triggers updates via ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"}),".\nThe ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field is initially hidden and controlled via ",(0,s.jsx)(e.code,{children:"dynamic=True"}),"."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DropdownInput, StrInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RegexRouter",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Regex Router"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Demonstrates dynamic fields for regex input."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"contains"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" real_time_refresh",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Regex Pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"\"Used if operator='regex'\"",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" dynamic",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" show",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h3,{id:"implement-update_build_config",children:["Implement ",(0,s.jsx)(e.code,{children:"update_build_config"})]}),"\n",(0,s.jsxs)(e.p,{children:["When a field with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," is modified, Langflow calls the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method, passing the updated field name, value, and the component's configuration to dynamically adjust the visibility or properties of other fields based on user input."]}),"\n",(0,s.jsxs)(e.p,{children:["This example will show or hide the ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field when the user selects a different operator."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"update_build_config",props:{style:{color:"#D2A8FF"}}},{content:"(self, build_config: ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:", field_value: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", field_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:") -> ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_name ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_value ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" build_config",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"additional-dynamic-field-controls",children:"Additional Dynamic Field Controls"}),"\n",(0,s.jsxs)(e.p,{children:["You can also modify other properties within ",(0,s.jsx)(e.code,{children:"update_build_config"}),", such as:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"required"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["required"] = True/False'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"advanced"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["advanced"] = True'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"options"}),": Modify dynamic dropdown options."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-managing-dynamic-fields",children:"Tips for Managing Dynamic Fields"}),"\n",(0,s.jsx)(e.p,{children:"When working with dynamic fields, consider the following best practices to ensure a smooth user experience:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Minimize field changes"}),": Hide only fields that are truly irrelevant to avoid confusing users."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Test behavior"}),": Ensure that adding or removing fields doesn't accidentally erase user input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Preserve data"}),": Use ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["show"] = False'})," to hide fields without losing their values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Clarify logic"}),": Add ",(0,s.jsx)(e.code,{children:"info"})," notes to explain why fields appear or disappear based on conditions."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep it manageable"}),": If the dynamic logic becomes too complex, consider breaking it into smaller components, unless it serves a clear purpose in a single node."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"error-handling-and-logging",children:"Error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"In Langflow, robust error handling ensures that your components behave predictably, even when unexpected situations occur, such as invalid inputs, external API failures, or internal logic errors."}),"\n",(0,s.jsx)(e.h3,{id:"error-handling-techniques",children:"Error handling techniques"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Raise Exceptions"}),":\nIf a critical error occurs, you can raise standard Python exceptions such as ",(0,s.jsx)(e.code,{children:"ValueError"}),", or specialized exceptions like ",(0,s.jsx)(e.code,{children:"ToolException"}),". Langflow will automatically catch these and display appropriate error messages in the UI, helping users quickly identify what went wrong.","\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_result",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".user_input:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"No input provided."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return Structured Error Data"}),':\nInstead of stopping a flow abruptly, you can return a Data object containing an "error" field. This approach allows the flow to continue operating and enables downstream components to detect and handle the error gracefully.',"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"run_model",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"Exception ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(e)})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"improve-debugging-and-flow-management",children:"Improve debugging and flow management"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Use ",(0,s.jsx)(e.code,{children:"self.status"})]}),":\nEach component has a status field where you can store short messages about the execution result\u2014such as success summaries, partial progress, or error notifications. These appear directly in the UI, making troubleshooting easier for users."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"parse_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Parsed ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows successfully."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"rows"',props:{style:{color:"#A5D6FF"}}},{content:": rows})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Stop specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})]}),":\nYou can halt individual output paths when certain conditions fail, without affecting the entire component. This is especially useful when working with components that have multiple output branches."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if <",props:{style:{color:"#FF7B72"}}},{content:"some condition",props:{style:{color:"#C9D1D9"}}},{content:">",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".stop(",props:{style:{color:"#C9D1D9"}}},{content:'"some_output"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"# Tells Langflow no data flows",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Condition not met"',props:{style:{color:"#A5D6FF"}}},{content:"})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Log events"}),':\nYou can log key execution details inside components. Logs are displayed in the "Logs" or "Events" section of the component\'s detail view and can be accessed later through the flow\'s debug panel or exported files, providing a clear trace of the component\'s behavior for easier debugging.']}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"process_file",props:{style:{color:"#D2A8FF"}}},{content:"(self, file_path: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".log(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Processing file ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"file_path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-error-handling-and-logging",children:"Tips for error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"To build more reliable components, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validate inputs early"}),": Catch missing or invalid inputs at the start to prevent broken logic."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsxs)(e.strong,{children:["Summarize with ",(0,s.jsx)(e.code,{children:"self.status"})]}),": Use short success or error summaries to help users understand results quickly."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep logs concise"}),": Focus on meaningful messages to avoid cluttering the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return structured errors"}),": When appropriate, return ",(0,s.jsx)(e.code,{children:'Data(data={"error": ...})'})," instead of raising exceptions to allow downstream handling."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stop outputs selectively"}),": Only halt specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})," if necessary, to preserve correct flow behavior elsewhere."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute custom components to Langflow"}),"\n",(0,s.jsxs)(e.p,{children:["See ",(0,s.jsx)(e.a,{href:"/contributing-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function u(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(y,{...o})}):y(o)}function F(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/20177945.a97a329f.js b/assets/js/20177945.a97a329f.js
new file mode 100644
index 0000000000..7fe48b689c
--- /dev/null
+++ b/assets/js/20177945.a97a329f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8392],{58950:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>d,assets:()=>i,chCodeConfig:()=>a,contentTitle:()=>p,default:()=>y,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","source":"@site/docs/Components/components-custom-components.mdx","sourceDirName":"Components","slug":"/components-custom-components","permalink":"/components-custom-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create custom Python components","slug":"/components-custom-components"},"sidebar":"docs","previous":{"title":"Bundles","permalink":"/components-bundle-components"},"next":{"title":"Data","permalink":"/components-data"}}');var s=t(74848),r=t(28453),l=t(24754);const c={title:"Create custom Python components",slug:"/components-custom-components"},p=void 0,i={},d={annotations:l.hk,Code:l.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},h=[{value:"Class-level attributes",id:"class-level-attributes",level:2},{value:"Structure of a custom component",id:"structure-of-a-custom-component",level:3},{value:"Internal Lifecycle and Execution Flow",id:"internal-lifecycle-and-execution-flow",level:3},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Associated Methods",id:"associated-methods",level:3},{value:"Components with multiple outputs",id:"components-with-multiple-outputs",level:3},{value:"Output Grouping Behavior with group_outputs",id:"output-grouping-behavior-with-group_outputs",level:4},{value:"Example:",id:"example",level:4},{value:"When to Use",id:"when-to-use",level:4},{value:"Common internal patterns",id:"common-internal-patterns",level:3},{value:"_pre_run_setup()",id:"_pre_run_setup",level:4},{value:"Override run or _run",id:"override-run-or-_run",level:4},{value:"Store data in self.ctx",id:"store-data-in-selfctx",level:4},{value:"Directory structure requirements",id:"directory-structure-requirements",level:2},{value:"Custom component inputs and outputs",id:"custom-component-inputs-and-outputs",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Tool mode",id:"tool-mode",level:3},{value:"Typed annotations",id:"typed-annotations",level:2},{value:"Common Return Types",id:"common-return-types",level:3},{value:"Tips for typed annotations",id:"tips-for-typed-annotations",level:3},{value:"Enable dynamic fields",id:"enable-dynamic-fields",level:2},{value:"Implement update_build_config",id:"implement-update_build_config",level:3},{value:"Additional Dynamic Field Controls",id:"additional-dynamic-field-controls",level:3},{value:"Tips for Managing Dynamic Fields",id:"tips-for-managing-dynamic-fields",level:3},{value:"Error handling and logging",id:"error-handling-and-logging",level:2},{value:"Error handling techniques",id:"error-handling-techniques",level:3},{value:"Improve debugging and flow management",id:"improve-debugging-and-flow-management",level:3},{value:"Tips for error handling and logging",id:"tips-for-error-handling-and-logging",level:3},{value:"Contribute custom components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function u(o){const e={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return d||F("CH",!1),d.Code||F("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,s.jsxs)(e.p,{children:["Custom components extend Langflow's functionality through Python classes that inherit from ",(0,s.jsx)(e.code,{children:"Component"}),". This enables integration of new features, data manipulation, external services, and specialized tools."]}),"\n",(0,s.jsx)(e.p,{children:'In Langflow\'s node-based environment, each node is a "component" that performs discrete functions. Custom components are Python classes which define:'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Inputs"})," \u2014 Data or parameters your component requires."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs"})," \u2014 Data your component provides to downstream nodes."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Logic"})," \u2014 How you process inputs to produce outputs."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The benefits of creating custom components include unlimited extensibility, reusability, automatic UI field generation based on inputs, and type-safe connections between nodes."}),"\n",(0,s.jsx)(e.p,{children:"Create custom components for performing specialized tasks, calling APIs, or adding advanced logic."}),"\n",(0,s.jsx)(e.p,{children:"Custom components in Langflow are built upon:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["The Python class that inherits from ",(0,s.jsx)(e.code,{children:"Component"}),"."]}),"\n",(0,s.jsx)(e.li,{children:"Class-level attributes that identify and describe the component."}),"\n",(0,s.jsx)(e.li,{children:"Input and output lists that determine data flow."}),"\n",(0,s.jsx)(e.li,{children:"Internal variables for logging and advanced logic."}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"class-level-attributes",children:"Class-level attributes"}),"\n",(0,s.jsx)(e.p,{children:"Define these attributes to control a custom component's appearance and behavior:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCsvReader",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSV Reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Shown in node header",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Reads CSV files" ',props:{style:{color:"#A5D6FF"}}},{content:"# Tooltip text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"file-text" ',props:{style:{color:"#A5D6FF"}}},{content:"# Visual identifier",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSVReader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Unique internal ID",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" documentation ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.example.com/csv_reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Optional",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"display_name"}),": A user-friendly label in the node header."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"description"}),": A brief summary shown in tooltips."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"icon"}),": A visual identifier from Langflow's icon library."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"name"}),": A unique internal identifier."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"documentation"}),": An optional link to external docs."]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{title:"Icon usage",type:"tip",children:(0,s.jsxs)(e.p,{children:["Langflow uses ",(0,s.jsx)(e.a,{href:"https://lucide.dev/icons",children:"Lucide"})," for icons. To assign an icon to your component, set the icon attribute to the name of a Lucide icon as a string, such as ",(0,s.jsx)(e.code,{children:'icon = "file-text"'}),". Langflow renders icons from the Lucide library automatically."]})}),"\n",(0,s.jsx)(e.h3,{id:"structure-of-a-custom-component",children:"Structure of a custom component"}),"\n",(0,s.jsxs)(e.p,{children:["A ",(0,s.jsx)(e.strong,{children:"Langflow custom component"})," goes beyond a simple class with inputs and outputs. It includes an internal structure with optional lifecycle steps, output generation, front-end interaction, and logic organization."]}),"\n",(0,s.jsx)(e.p,{children:"A basic component:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Inherits from ",(0,s.jsx)(e.code,{children:"langflow.custom.Component"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:["Declares metadata like ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"description"}),", ",(0,s.jsx)(e.code,{children:"icon"}),", and more."]}),"\n",(0,s.jsxs)(e.li,{children:["Defines ",(0,s.jsx)(e.code,{children:"inputs"})," and ",(0,s.jsx)(e.code,{children:"outputs"})," lists."]}),"\n",(0,s.jsx)(e.li,{children:"Implements methods matching output specifications."}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"A minimal custom component skeleton contains the following:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"My Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"A short summary."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"sparkles"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"MyComponent"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"some_output_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"...",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"internal-lifecycle-and-execution-flow",children:"Internal Lifecycle and Execution Flow"}),"\n",(0,s.jsx)(e.p,{children:"Langflow's engine manages:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Instantiation"}),": A component is created and internal structures are initialized."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Assigning Inputs"}),": Values from the UI or connections are assigned to component fields."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation and Setup"}),": Optional hooks like ",(0,s.jsx)(e.code,{children:"_pre_run_setup"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs Generation"}),": ",(0,s.jsx)(e.code,{children:"run()"})," or ",(0,s.jsx)(e.code,{children:"build_results()"})," triggers output methods."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Optional Hooks"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"initialize_data"})," or ",(0,s.jsx)(e.code,{children:"_pre_run_setup"})," can run setup logic before the component's main execution."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"__call__"}),", ",(0,s.jsx)(e.code,{children:"run()"}),", or ",(0,s.jsx)(e.code,{children:"_run()"})," can be overridden to customize how the component is called or to define custom execution logic."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"inputs-and-outputs",children:"Inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Custom component inputs are defined with properties like:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"}),", ",(0,s.jsx)(e.code,{children:"value"}),", ",(0,s.jsx)(e.code,{children:"advanced"}),", ",(0,s.jsx)(e.code,{children:"is_list"}),", ",(0,s.jsx)(e.code,{children:"tool_mode"}),", ",(0,s.jsx)(e.code,{children:"real_time_refresh"})]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"StrInput"}),": simple text input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"DropdownInput"}),": selectable options."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"HandleInput"}),": specialized connections."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Custom component ",(0,s.jsx)(e.code,{children:"Output"})," properties define:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"method"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"})]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For more information, see ",(0,s.jsx)(e.a,{href:"/components-custom-components#custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"."]}),"\n",(0,s.jsx)(e.h3,{id:"associated-methods",children:"Associated Methods"}),"\n",(0,s.jsx)(e.p,{children:"Each output is linked to a method:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"The output method name must match the method name."}),"\n",(0,s.jsx)(e.li,{children:"The method typically returns objects like Message, Data, or DataFrame."}),"\n",(0,s.jsxs)(e.li,{children:["The method can use inputs with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"File Contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"file_contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"read_file"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"#...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"read_file",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".filename",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" with ",props:{style:{color:"#FF7B72"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(path, ",props:{style:{color:"#C9D1D9"}}},{content:'"r"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" f:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" content ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" f.read()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Read ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(content)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" chars from ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"content"',props:{style:{color:"#A5D6FF"}}},{content:": content})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"components-with-multiple-outputs",children:"Components with multiple outputs"}),"\n",(0,s.jsx)(e.p,{children:"A component can define multiple outputs.\nEach output can have a different corresponding method.\nFor example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Processed Data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processed_data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_data"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Debug Info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"debug_info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"provide_debug_info"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"output-grouping-behavior-with-group_outputs",children:["Output Grouping Behavior with ",(0,s.jsx)(e.code,{children:"group_outputs"})]}),"\n",(0,s.jsxs)(e.p,{children:["By default, components in Langflow that define multiple outputs will display them as a dropdown in the UI. This behavior is controlled by the ",(0,s.jsx)(e.code,{children:"group_outputs"})," parameter."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default):",(0,s.jsx)(e.br,{}),"\n","When a component has more than one output and ",(0,s.jsx)(e.code,{children:"group_outputs"})," is not specified (or set to ",(0,s.jsx)(e.code,{children:"False"}),"), the outputs are grouped into a dropdown. The user can choose only one output at a time from the UI."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=True"}),":",(0,s.jsx)(e.br,{}),"\n","All outputs will be shown simultaneously in the UI. This is useful when the component is expected to return multiple values that should be used in parallel downstream."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h4,{id:"example",children:"Example:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default behavior)"]}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Structured Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"dataframe_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_dataframe"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In this example, both outputs will be available via a dropdown selection in the UI."}),"\n",(0,s.jsxs)(e.p,{children:["Note: Since ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," is the default behavior, it does not need to be explicitly set in the component."]}),"\n",(0,s.jsxs)(e.ol,{start:"2",children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"group_outputs=True"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"True"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"False"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"Here, both outputs will appear independently and be selectable directly in the UI."}),"\n",(0,s.jsx)(e.h4,{id:"when-to-use",children:"When to Use"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," when the component is expected to return only one of the outputs depending on the flow logic."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=True"})," when the component should expose multiple outputs simultaneously, such as structured data and a table that are meant to be used in parallel."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-internal-patterns",children:"Common internal patterns"}),"\n",(0,s.jsx)(e.h4,{id:"_pre_run_setup",children:(0,s.jsx)(e.code,{children:"_pre_run_setup()"})}),"\n",(0,s.jsx)(e.p,{children:"To initialize a custom component with counters set:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"_pre_run_setup",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"hasattr",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"_initialized"',props:{style:{color:"#A5D6FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:"._initialized ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".iteration ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"0",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"override-run-or-_run",children:["Override ",(0,s.jsx)(e.code,{children:"run"})," or ",(0,s.jsx)(e.code,{children:"_run"})]}),"\n",(0,s.jsxs)(e.p,{children:["You can override ",(0,s.jsx)(e.code,{children:"async def _run(self): ..."})," to define custom execution logic, although the default behavior from the base class usually covers most cases."]}),"\n",(0,s.jsxs)(e.h4,{id:"store-data-in-selfctx",children:["Store data in ",(0,s.jsx)(e.code,{children:"self.ctx"})]}),"\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"self.ctx"})," as a shared storage for data or counters across the component's execution flow:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".ctx.get(",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".ctx[",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"+ ",props:{style:{color:"#FF7B72"}}},{content:"1",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"directory-structure-requirements",children:"Directory structure requirements"}),"\n",(0,s.jsxs)(e.p,{children:["By default, Langflow looks for custom components in the ",(0,s.jsx)(e.code,{children:"langflow/components"})," directory."]}),"\n",(0,s.jsxs)(e.p,{children:["If you're creating custom components in a different location using the ",(0,s.jsx)(e.a,{href:"/environment-variables#LANGFLOW_COMPONENTS_PATH",children:"LANGFLOW_COMPONENTS_PATH"})," environment variable, components must be organized in a specific directory structure to be properly loaded and displayed in the UI:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/your/custom/components/path/ # Base directory set by LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 category_name/ # Required category subfolder that determines menu name",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Component file",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Components must be placed inside ",(0,s.jsx)(e.strong,{children:"category folders"}),", not directly in the base directory.\nThe category folder name determines where the component appears in the Langflow ",(0,s.jsx)(e.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsxs)(e.p,{children:["For example, to add a component to the ",(0,s.jsx)(e.strong,{children:"Helpers"})," category, place it in a ",(0,s.jsx)(e.code,{children:"helpers"})," subfolder:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:' \u2514\u2500\u2500 helpers/ # Displayed within the "Helpers" category',props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Your component",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"You can have multiple category folders to organize components into different categories:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/",props:{}}]},{tokens:[{content:" \u251c\u2500\u2500 helpers/",props:{}}]},{tokens:[{content:" \u2502 \u2514\u2500\u2500 helper_component.py",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tools/",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tool_component.py",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"This folder structure is required for Langflow to properly discover and load your custom components. Components placed directly in the base directory will not be loaded."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Won't be loaded - missing category folder!",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Inputs and outputs define how data flows through the component, how it appears in the UI, and how connections to other components are validated."}),"\n",(0,s.jsx)(e.h3,{id:"inputs",children:"Inputs"}),"\n",(0,s.jsxs)(e.p,{children:["Inputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"inputs"})," list. When Langflow loads the component, it uses this list to render component fields and ",(0,s.jsx)(e.a,{href:"/concepts-components#component-ports",children:"ports"})," in the UI. Users or other components provide values or connections to fill these inputs."]}),"\n",(0,s.jsxs)(e.p,{children:["An input is usually an instance of a class from ",(0,s.jsx)(e.code,{children:"langflow.io"})," (such as ",(0,s.jsx)(e.code,{children:"StrInput"}),", ",(0,s.jsx)(e.code,{children:"DataInput"}),", or ",(0,s.jsx)(e.code,{children:"MessageTextInput"}),"). The most common constructor parameters are:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name, accessed via ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown to users in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": A tooltip or short description."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"value"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": The default value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"advanced"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),', moves the field into the "Advanced" section.']}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"required"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", forces the user to provide a value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"is_list"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", allows multiple values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"input_types"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Restricts allowed connection types (e.g., ",(0,s.jsx)(e.code,{children:'["Data"]'}),", ",(0,s.jsx)(e.code,{children:'["LanguageModel"]'}),")."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"Here are the most commonly used input classes and their typical usage."}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Text Inputs"}),": For simple text entries."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"StrInput"})})," creates a single-line text field."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})})," creates a multi-line text area."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Numeric and Boolean Inputs"}),": Ensures users can only enter valid numeric or boolean data."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"BoolInput"})}),", ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"IntInput"})}),", and ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FloatInput"})})," provide fields for boolean, integer, and float values, ensuring type consistency."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Dropdowns"}),": For selecting from predefined options, useful for modes or levels."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Secrets"}),": A specialized input for sensitive data, ensuring input is hidden in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"SecretStrInput"})})," for API keys and passwords."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Specialized Data Inputs"}),": Ensures type-checking and color-coded connections in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Data"})," object (typically with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Message"})," object, used in chat or agent-based flows."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})})," simplifies access to the ",(0,s.jsx)(e.code,{children:".text"})," field of a ",(0,s.jsx)(e.code,{children:"Message"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Handle-Based Inputs"}),": Used to connect outputs of specific types, ensuring correct pipeline connections."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"HandleInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"File Uploads"}),": Allows users to upload files directly through the UI or receive file paths from other components."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FileInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Lists"}),": Set ",(0,s.jsx)(e.code,{children:"is_list=True"})," to accept multiple values, ideal for batch or grouped operations."]}),"\n",(0,s.jsxs)(e.p,{children:["This example defines three inputs: a text field (",(0,s.jsx)(e.code,{children:"StrInput"}),"), a boolean toggle (",(0,s.jsx)(e.code,{children:"BoolInput"}),"), and a dropdown selection (",(0,s.jsx)(e.code,{children:"DropdownInput"}),")."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, BoolInput, DropdownInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"title"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Title"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" BoolInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Fast"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Experimental"',props:{style:{color:"#A5D6FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"outputs",children:"Outputs"}),"\n",(0,s.jsxs)(e.p,{children:["Outputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"outputs"})," list. When Langflow renders a component, each output becomes a connector point in the UI. When you connect something to an output, Langflow automatically calls the corresponding method and passes the returned object to the next component."]}),"\n",(0,s.jsxs)(e.p,{children:["An output is usually an instance of ",(0,s.jsx)(e.code,{children:"Output"})," from ",(0,s.jsx)(e.code,{children:"langflow.io"}),", with common parameters:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"method"})}),": The name of the method called to produce the output."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Help text shown on hover."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The method must exist in the class, and it is recommended to annotate its return type for better type checking.\nYou can also set a ",(0,s.jsx)(e.code,{children:"self.status"})," message inside the method to show progress or logs."]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Common Return Types"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})}),": Structured chat messages."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})}),": Flexible object with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})}),": Pandas-based tables (",(0,s.jsx)(e.code,{children:"langflow.schema.DataFrame"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Primitive types"}),": ",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"})," (not recommended if you need type/color consistency)."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the ",(0,s.jsx)(e.code,{children:"DataToDataFrame"})," component defines its output using the outputs list. The ",(0,s.jsx)(e.code,{children:"df_out"})," output is linked to the ",(0,s.jsx)(e.code,{children:"build_df"})," method, so when connected in the UI, Langflow calls this method and passes its returned DataFrame to the next node. This demonstrates how each output maps to a method that generates the actual output data."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Data, DataFrame",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DataToDataFrame",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Data to DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Convert multiple Data objects into a DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"table"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"DataToDataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Data Items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"List of Data objects to convert"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"df_out"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_df"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rows ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" item ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".items:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.data.copy() ",props:{style:{color:"#C9D1D9"}}},{content:"if",props:{style:{color:"#FF7B72"}}},{content:" item.data ",props:{style:{color:"#C9D1D9"}}},{content:"else",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict[",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.get_text() ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" rows.append(row_dict)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(rows)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Built DataFrame with ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" df",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tool-mode",children:"Tool mode"}),"\n",(0,s.jsxs)(e.p,{children:["You can configure a Custom Component to work as a ",(0,s.jsx)(e.strong,{children:"Tool"})," by setting the parameter ",(0,s.jsx)(e.code,{children:"tool_mode=True"}),". This allows the component to be used in Langflow's Tool Mode workflows, such as by Agent components."]}),"\n",(0,s.jsx)(e.p,{children:"Langflow currently supports the following input types for Tool Mode:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataFrameInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"PromptInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mensage"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter the message that will be processed directly by the tool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tool_mode",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"typed-annotations",children:"Typed annotations"}),"\n",(0,s.jsxs)(e.p,{children:["In Langflow, ",(0,s.jsx)(e.strong,{children:"typed annotations"})," allow Langflow to visually guide users and maintain flow consistency."]}),"\n",(0,s.jsx)(e.p,{children:"Typed annotations provide:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Color-coding"}),": Outputs like ",(0,s.jsx)(e.code,{children:"-> Data"})," or ",(0,s.jsx)(e.code,{children:"-> Message"})," get distinct colors."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation"}),": Langflow blocks incompatible connections automatically."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Readability"}),": Developers can quickly understand data flow."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Development tools"}),": Better code suggestions and error checking in your code editor."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-return-types",children:"Common Return Types"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})})}),"\n",(0,s.jsx)(e.p,{children:"For chat-style outputs."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"produce_message",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello! from typed method!"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"System"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to Message-compatible inputs."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})})}),"\n",(0,s.jsx)(e.p,{children:"For structured data like dicts or partial texts."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"get_processed_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"key1"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"value1"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"key2"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"123",props:{style:{color:"#79C0FF"}}},{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"processed)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only with DataInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})})}),"\n",(0,s.jsx)(e.p,{children:"For tabular data"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pdf ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}},{content:'"A"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:'"B"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:"]})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(pdf)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to DataFrameInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.strong,{children:["Primitive Types (",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"}),")"]})}),"\n",(0,s.jsx)(e.p,{children:"Returning primitives is allowed but wrapping in Data or Message is recommended for better UI consistency."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_sum",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"int",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"sum",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".numbers)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-typed-annotations",children:"Tips for typed annotations"}),"\n",(0,s.jsx)(e.p,{children:"When using typed annotations, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Always Annotate Outputs"}),": Specify return types like ",(0,s.jsx)(e.code,{children:"-> Data"}),", ",(0,s.jsx)(e.code,{children:"-> Message"}),", or ",(0,s.jsx)(e.code,{children:"-> DataFrame"})," to enable proper UI color-coding and validation."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Wrap Raw Data"}),": Use ",(0,s.jsx)(e.code,{children:"Data"}),", ",(0,s.jsx)(e.code,{children:"Message"}),", or ",(0,s.jsx)(e.code,{children:"DataFrame"})," wrappers instead of returning plain structures."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Primitives Carefully"}),": Direct ",(0,s.jsx)(e.code,{children:"str"})," or ",(0,s.jsx)(e.code,{children:"int"})," returns are fine for simple flows, but wrapping improves flexibility."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Annotate Helpers Too"}),": Even if internal, typing improves maintainability and clarity."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Handle Edge Cases"}),": Prefer returning structured ",(0,s.jsx)(e.code,{children:"Data"})," with error fields when needed."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stay Consistent"}),": Use the same types across your components to make flows predictable and easier to build."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"enable-dynamic-fields",children:"Enable dynamic fields"}),"\n",(0,s.jsxs)(e.p,{children:["In ",(0,s.jsx)(e.strong,{children:"Langflow"}),", dynamic fields allow inputs to change or appear based on user interactions. You can make an input dynamic by setting ",(0,s.jsx)(e.code,{children:"dynamic=True"}),".\nOptionally, setting ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," triggers the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method to adjust the input's visibility or properties in real time, creating a contextual UI that only displays relevant fields based on the user's choices."]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the operator field triggers updates via ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"}),".\nThe ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field is initially hidden and controlled via ",(0,s.jsx)(e.code,{children:"dynamic=True"}),"."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DropdownInput, StrInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RegexRouter",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Regex Router"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Demonstrates dynamic fields for regex input."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"contains"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" real_time_refresh",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Regex Pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"\"Used if operator='regex'\"",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" dynamic",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" show",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h3,{id:"implement-update_build_config",children:["Implement ",(0,s.jsx)(e.code,{children:"update_build_config"})]}),"\n",(0,s.jsxs)(e.p,{children:["When a field with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," is modified, Langflow calls the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method, passing the updated field name, value, and the component's configuration to dynamically adjust the visibility or properties of other fields based on user input."]}),"\n",(0,s.jsxs)(e.p,{children:["This example will show or hide the ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field when the user selects a different operator."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"update_build_config",props:{style:{color:"#D2A8FF"}}},{content:"(self, build_config: ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:", field_value: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", field_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:") -> ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_name ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_value ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" build_config",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"additional-dynamic-field-controls",children:"Additional Dynamic Field Controls"}),"\n",(0,s.jsxs)(e.p,{children:["You can also modify other properties within ",(0,s.jsx)(e.code,{children:"update_build_config"}),", such as:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"required"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["required"] = True/False'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"advanced"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["advanced"] = True'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"options"}),": Modify dynamic dropdown options."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-managing-dynamic-fields",children:"Tips for Managing Dynamic Fields"}),"\n",(0,s.jsx)(e.p,{children:"When working with dynamic fields, consider the following best practices to ensure a smooth user experience:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Minimize field changes"}),": Hide only fields that are truly irrelevant to avoid confusing users."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Test behavior"}),": Ensure that adding or removing fields doesn't accidentally erase user input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Preserve data"}),": Use ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["show"] = False'})," to hide fields without losing their values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Clarify logic"}),": Add ",(0,s.jsx)(e.code,{children:"info"})," notes to explain why fields appear or disappear based on conditions."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep it manageable"}),": If the dynamic logic becomes too complex, consider breaking it into smaller components, unless it serves a clear purpose in a single node."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"error-handling-and-logging",children:"Error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"In Langflow, robust error handling ensures that your components behave predictably, even when unexpected situations occur, such as invalid inputs, external API failures, or internal logic errors."}),"\n",(0,s.jsx)(e.h3,{id:"error-handling-techniques",children:"Error handling techniques"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Raise Exceptions"}),":\nIf a critical error occurs, you can raise standard Python exceptions such as ",(0,s.jsx)(e.code,{children:"ValueError"}),", or specialized exceptions like ",(0,s.jsx)(e.code,{children:"ToolException"}),". Langflow will automatically catch these and display appropriate error messages in the UI, helping users quickly identify what went wrong.","\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_result",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".user_input:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"No input provided."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return Structured Error Data"}),':\nInstead of stopping a flow abruptly, you can return a Data object containing an "error" field. This approach allows the flow to continue operating and enables downstream components to detect and handle the error gracefully.',"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"run_model",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"Exception ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(e)})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"improve-debugging-and-flow-management",children:"Improve debugging and flow management"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Use ",(0,s.jsx)(e.code,{children:"self.status"})]}),":\nEach component has a status field where you can store short messages about the execution result\u2014such as success summaries, partial progress, or error notifications. These appear directly in the UI, making troubleshooting easier for users."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"parse_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Parsed ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows successfully."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"rows"',props:{style:{color:"#A5D6FF"}}},{content:": rows})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Stop specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})]}),":\nYou can halt individual output paths when certain conditions fail, without affecting the entire component. This is especially useful when working with components that have multiple output branches."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if <",props:{style:{color:"#FF7B72"}}},{content:"some condition",props:{style:{color:"#C9D1D9"}}},{content:">",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".stop(",props:{style:{color:"#C9D1D9"}}},{content:'"some_output"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"# Tells Langflow no data flows",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Condition not met"',props:{style:{color:"#A5D6FF"}}},{content:"})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Log events"}),':\nYou can log key execution details inside components. Logs are displayed in the "Logs" or "Events" section of the component\'s detail view and can be accessed later through the flow\'s debug panel or exported files, providing a clear trace of the component\'s behavior for easier debugging.']}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"process_file",props:{style:{color:"#D2A8FF"}}},{content:"(self, file_path: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".log(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Processing file ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"file_path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-error-handling-and-logging",children:"Tips for error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"To build more reliable components, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validate inputs early"}),": Catch missing or invalid inputs at the start to prevent broken logic."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsxs)(e.strong,{children:["Summarize with ",(0,s.jsx)(e.code,{children:"self.status"})]}),": Use short success or error summaries to help users understand results quickly."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep logs concise"}),": Focus on meaningful messages to avoid cluttering the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return structured errors"}),": When appropriate, return ",(0,s.jsx)(e.code,{children:'Data(data={"error": ...})'})," instead of raising exceptions to allow downstream handling."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stop outputs selectively"}),": Only halt specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})," if necessary, to preserve correct flow behavior elsewhere."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute custom components to Langflow"}),"\n",(0,s.jsxs)(e.p,{children:["See ",(0,s.jsx)(e.a,{href:"/contributing-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function y(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(u,{...o})}):u(o)}function F(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/2ab0d4f5.8d4399d8.js b/assets/js/2ab0d4f5.f87ed04d.js
similarity index 50%
rename from assets/js/2ab0d4f5.8d4399d8.js
rename to assets/js/2ab0d4f5.f87ed04d.js
index cb9e23a302..4840933fd7 100644
--- a/assets/js/2ab0d4f5.8d4399d8.js
+++ b/assets/js/2ab0d4f5.f87ed04d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Simplified Run Flow","description":{"content":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","type":"text/plain"},"url":{"path":["api","v1","run",":flow_id_or_name"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"key":"stream","value":"false"},{"disabled":false,"key":"user_id","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id_or_name"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"input_value\\": \\"\\",\\n \\"input_type\\": \\"\\",\\n \\"output_type\\": \\"\\",\\n \\"output_component\\": \\"\\",\\n \\"tweaks\\": {\\n \\"sunt_df_\\": \\"\\",\\n \\"dolor1\\": \\"\\"\\n },\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/simplified-run-flow","previous":{"title":"Get All","permalink":"/api/get-all"},"next":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"}}');var s=t(74848),r=t(28453);const a={},o="Simplified Run Flow",l=[];function d(e){const n={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"simplified-run-flow",children:"Simplified Run Flow"})}),"\n",(0,s.jsx)(n.p,{children:"Executes a specified flow by ID with support for streaming and telemetry."}),"\n",(0,s.jsx)(n.p,{children:"This endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes."}),"\n",(0,s.jsx)(n.p,{children:"Args:\nbackground_tasks (BackgroundTasks): FastAPI background task manager\nflow (FlowRead | None): The flow to execute, loaded via dependency\ninput_request (SimplifiedAPIRequest | None): Input parameters for the flow\nstream (bool): Whether to stream the response\napi_key_user (UserRead): Authenticated user from API key\nrequest (Request): The incoming HTTP request"}),"\n",(0,s.jsx)(n.p,{children:"Returns:\nUnion[StreamingResponse, RunResponse]: Either a streaming response for real-time results\nor a RunResponse with the complete execution results"}),"\n",(0,s.jsx)(n.p,{children:"Raises:\nHTTPException: For flow not found (404) or invalid input (400)\nAPIException: For internal execution errors (500)"}),"\n",(0,s.jsx)(n.p,{children:"Notes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Supports both streaming and non-streaming execution modes"}),"\n",(0,s.jsx)(n.li,{children:"Tracks execution time and success/failure via telemetry"}),"\n",(0,s.jsx)(n.li,{children:"Handles graceful client disconnection in streaming mode"}),"\n",(0,s.jsx)(n.li,{children:"Provides detailed error handling with appropriate HTTP status codes"}),"\n",(0,s.jsxs)(n.li,{children:["In streaming mode, uses EventManager to handle events:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"add_message": New messages during execution'}),"\n",(0,s.jsx)(n.li,{children:'"token": Individual tokens during streaming'}),"\n",(0,s.jsx)(n.li,{children:'"end": Final execution result'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"flow_id_or_name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Flow Id Or Name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Query Parameters"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"stream"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"user_id"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" User Id"})]})})]})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Request Body "}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"200"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Successful Response"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]})})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"422"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Validation Error"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"detail"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"loc"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"msg"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"type"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Simplified Run Flow","description":{"content":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","type":"text/plain"},"url":{"path":["api","v1","run",":flow_id_or_name"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"key":"stream","value":"false"},{"disabled":false,"key":"user_id","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id_or_name"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"input_value\\": \\"\\",\\n \\"input_type\\": \\"\\",\\n \\"output_type\\": \\"\\",\\n \\"output_component\\": \\"\\",\\n \\"tweaks\\": {\\n \\"est2\\": \\"\\",\\n \\"do2\\": \\"\\"\\n },\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/simplified-run-flow","previous":{"title":"Get All","permalink":"/api/get-all"},"next":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"}}');var s=t(74848),r=t(28453);const a={},o="Simplified Run Flow",l=[];function d(e){const n={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"simplified-run-flow",children:"Simplified Run Flow"})}),"\n",(0,s.jsx)(n.p,{children:"Executes a specified flow by ID with support for streaming and telemetry."}),"\n",(0,s.jsx)(n.p,{children:"This endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes."}),"\n",(0,s.jsx)(n.p,{children:"Args:\nbackground_tasks (BackgroundTasks): FastAPI background task manager\nflow (FlowRead | None): The flow to execute, loaded via dependency\ninput_request (SimplifiedAPIRequest | None): Input parameters for the flow\nstream (bool): Whether to stream the response\napi_key_user (UserRead): Authenticated user from API key\nrequest (Request): The incoming HTTP request"}),"\n",(0,s.jsx)(n.p,{children:"Returns:\nUnion[StreamingResponse, RunResponse]: Either a streaming response for real-time results\nor a RunResponse with the complete execution results"}),"\n",(0,s.jsx)(n.p,{children:"Raises:\nHTTPException: For flow not found (404) or invalid input (400)\nAPIException: For internal execution errors (500)"}),"\n",(0,s.jsx)(n.p,{children:"Notes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Supports both streaming and non-streaming execution modes"}),"\n",(0,s.jsx)(n.li,{children:"Tracks execution time and success/failure via telemetry"}),"\n",(0,s.jsx)(n.li,{children:"Handles graceful client disconnection in streaming mode"}),"\n",(0,s.jsx)(n.li,{children:"Provides detailed error handling with appropriate HTTP status codes"}),"\n",(0,s.jsxs)(n.li,{children:["In streaming mode, uses EventManager to handle events:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"add_message": New messages during execution'}),"\n",(0,s.jsx)(n.li,{children:'"token": Individual tokens during streaming'}),"\n",(0,s.jsx)(n.li,{children:'"end": Final execution result'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"flow_id_or_name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Flow Id Or Name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Query Parameters"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"stream"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"user_id"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" User Id"})]})})]})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Request Body "}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"200"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Successful Response"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]})})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"422"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Validation Error"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"detail"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"loc"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"msg"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"type"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/e6c6a4d2.8d3f3031.js b/assets/js/e6c6a4d2.694e66f6.js
similarity index 56%
rename from assets/js/e6c6a4d2.8d3f3031.js
rename to assets/js/e6c6a4d2.694e66f6.js
index 12b4d20669..12bf4d9b66 100644
--- a/assets/js/e6c6a4d2.8d3f3031.js
+++ b/assets/js/e6c6a4d2.694e66f6.js
@@ -1 +1 @@
-"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8504],{28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(96540);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}},94910:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>r});const s=JSON.parse('{"type":"api","id":"experimental-run-flow","title":"Experimental Run Flow","description":"","slug":"/experimental-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","operationId":"experimental_run_flow_api_v1_run_advanced__flow_id__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Flow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"inputs":{"anyOf":[{"items":{"properties":{"components":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components","default":[]},"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value"},"session":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"},"type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Type","description":"Defines on which components the input value should be applied. \'any\' applies to all input components.","default":"any"}},"additionalProperties":false,"type":"object","title":"InputValueRequest","examples":[{"components":["components_id","Component Name"],"input_value":"input_value","session":"session_id"},{"components":["Component Name"],"input_value":"input_value"},{"input_value":"input_value"},{"components":["Component Name"],"input_value":"input_value","session":"session_id"},{"input_value":"input_value","session":"session_id"},{"input_value":"input_value","type":"chat"},{"input_value":"{\\"key\\": \\"value\\"}","type":"json"}]},"type":"array"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Outputs"},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}]},"stream":{"type":"boolean","title":"Stream","default":false},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"Body_experimental_run_flow_api_v1_run_advanced__flow_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"outputs":{"anyOf":[{"items":{"properties":{"inputs":{"type":"object","title":"Inputs"},"outputs":{"items":{"anyOf":[{"properties":{"results":{"anyOf":[{},{"type":"null"}],"title":"Results"},"artifacts":{"anyOf":[{},{"type":"null"}],"title":"Artifacts"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"},"logs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Logs"},"messages":{"anyOf":[{"items":{"properties":{"message":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"array"}],"title":"Message"},"sender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender","default":"Machine"},"sender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Name","default":"AI"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"stream_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stream Url"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"files":{"items":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"}},"type":"object","required":["path","name","type"],"title":"File","description":"File schema."},"type":"array","title":"Files","default":[]},"type":{"type":"string","title":"Type"}},"type":"object","required":["message","type"],"title":"ChatOutputResponse","description":"Chat output response schema."},"type":"array"},{"type":"null"}],"title":"Messages"},"timedelta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timedelta"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"component_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Display Name"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"used_frozen_result":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Frozen Result","default":false}},"type":"object","title":"ResultData"},{"type":"null"}]},"type":"array","title":"Outputs"}},"type":"object","title":"RunOutputs"},"type":"array"},{"type":"null"}],"title":"Outputs","default":[]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"RunResponse","description":"Run response schema."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/advanced/{flow_id}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"jsonRequestBodyExample":{"stream":false},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Experimental Run Flow","description":{"content":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","type":"text/plain"},"url":{"path":["api","v1","run","advanced",":flow_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"inputs\\": [\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n },\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n }\\n ],\\n \\"outputs\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"tweaks\\": {\\n \\"dolore__\\": \\"\\",\\n \\"ullamco1\\": \\"\\"\\n },\\n \\"stream\\": false,\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/experimental-run-flow","previous":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"},"next":{"title":"Process","permalink":"/api/process"}}');var i=n(74848),o=n(28453);const a={},l="Experimental Run Flow",r=[{value:"Parameters:",id:"parameters",level:3},{value:"Returns:",id:"returns",level:3},{value:"Raises:",id:"raises",level:3},{value:"Example usage:",id:"example-usage",level:3}];function p(e){const t={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"experimental-run-flow",children:"Experimental Run Flow"})}),"\n",(0,i.jsx)(t.p,{children:"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability."}),"\n",(0,i.jsx)(t.p,{children:"This endpoint supports running flows with caching to enhance performance and efficiency."}),"\n",(0,i.jsx)(t.h3,{id:"parameters",children:"Parameters:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"flow_id"})," (str): The unique identifier of the flow to be executed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"inputs"})," (List[InputValueRequest], optional): A list of inputs specifying the input values and components\nfor the flow. Each input can target specific components and provide custom values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"outputs"})," (List[str], optional): A list of output names to retrieve from the executed flow.\nIf not provided, all outputs are returned."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"tweaks"})," (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\nThe tweaks can be used to modify the flow's parameters and components.\nTweaks can be overridden by the input values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stream"})," (bool, optional): Specifies whether the results should be streamed. Defaults to False."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"session_id"})," (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\nexecution."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"api_key_user"})," (User): The user associated with the current API key. Automatically resolved from the API key."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"returns",children:"Returns:"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"RunResponse"})," object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input."]}),"\n",(0,i.jsx)(t.h3,{id:"raises",children:"Raises:"}),"\n",(0,i.jsx)(t.p,{children:"HTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution."}),"\n",(0,i.jsx)(t.h3,{id:"example-usage",children:"Example usage:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'POST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n "inputs": [\n {"components": ["component1"], "input_value": "value1"},\n {"components": ["component3"], "input_value": "value2"}\n ],\n "outputs": ["Component Name", "component_id"],\n "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}}\n "stream": false\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements."}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"flow_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" uuid"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Request Body "}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"inputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Inputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"tweaks"}),(0,i.jsx)("span",{style:{opacity:"0.6"}})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"stream"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"})]})})]})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"200"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Successful Response"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})})]})]})})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"422"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Validation Error"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"detail"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"loc"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"msg"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"type"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8504],{28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(96540);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}},94910:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>r});const s=JSON.parse('{"type":"api","id":"experimental-run-flow","title":"Experimental Run Flow","description":"","slug":"/experimental-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","operationId":"experimental_run_flow_api_v1_run_advanced__flow_id__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Flow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"inputs":{"anyOf":[{"items":{"properties":{"components":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components","default":[]},"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value"},"session":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"},"type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Type","description":"Defines on which components the input value should be applied. \'any\' applies to all input components.","default":"any"}},"additionalProperties":false,"type":"object","title":"InputValueRequest","examples":[{"components":["components_id","Component Name"],"input_value":"input_value","session":"session_id"},{"components":["Component Name"],"input_value":"input_value"},{"input_value":"input_value"},{"components":["Component Name"],"input_value":"input_value","session":"session_id"},{"input_value":"input_value","session":"session_id"},{"input_value":"input_value","type":"chat"},{"input_value":"{\\"key\\": \\"value\\"}","type":"json"}]},"type":"array"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Outputs"},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}]},"stream":{"type":"boolean","title":"Stream","default":false},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"Body_experimental_run_flow_api_v1_run_advanced__flow_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"outputs":{"anyOf":[{"items":{"properties":{"inputs":{"type":"object","title":"Inputs"},"outputs":{"items":{"anyOf":[{"properties":{"results":{"anyOf":[{},{"type":"null"}],"title":"Results"},"artifacts":{"anyOf":[{},{"type":"null"}],"title":"Artifacts"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"},"logs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Logs"},"messages":{"anyOf":[{"items":{"properties":{"message":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"array"}],"title":"Message"},"sender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender","default":"Machine"},"sender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Name","default":"AI"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"stream_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stream Url"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"files":{"items":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"}},"type":"object","required":["path","name","type"],"title":"File","description":"File schema."},"type":"array","title":"Files","default":[]},"type":{"type":"string","title":"Type"}},"type":"object","required":["message","type"],"title":"ChatOutputResponse","description":"Chat output response schema."},"type":"array"},{"type":"null"}],"title":"Messages"},"timedelta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timedelta"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"component_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Display Name"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"used_frozen_result":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Frozen Result","default":false}},"type":"object","title":"ResultData"},{"type":"null"}]},"type":"array","title":"Outputs"}},"type":"object","title":"RunOutputs"},"type":"array"},{"type":"null"}],"title":"Outputs","default":[]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"RunResponse","description":"Run response schema."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/advanced/{flow_id}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"jsonRequestBodyExample":{"stream":false},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Experimental Run Flow","description":{"content":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","type":"text/plain"},"url":{"path":["api","v1","run","advanced",":flow_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"inputs\\": [\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n },\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n }\\n ],\\n \\"outputs\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"tweaks\\": {\\n \\"doloreb3d\\": \\"\\"\\n },\\n \\"stream\\": false,\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/experimental-run-flow","previous":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"},"next":{"title":"Process","permalink":"/api/process"}}');var i=n(74848),o=n(28453);const a={},l="Experimental Run Flow",r=[{value:"Parameters:",id:"parameters",level:3},{value:"Returns:",id:"returns",level:3},{value:"Raises:",id:"raises",level:3},{value:"Example usage:",id:"example-usage",level:3}];function p(e){const t={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"experimental-run-flow",children:"Experimental Run Flow"})}),"\n",(0,i.jsx)(t.p,{children:"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability."}),"\n",(0,i.jsx)(t.p,{children:"This endpoint supports running flows with caching to enhance performance and efficiency."}),"\n",(0,i.jsx)(t.h3,{id:"parameters",children:"Parameters:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"flow_id"})," (str): The unique identifier of the flow to be executed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"inputs"})," (List[InputValueRequest], optional): A list of inputs specifying the input values and components\nfor the flow. Each input can target specific components and provide custom values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"outputs"})," (List[str], optional): A list of output names to retrieve from the executed flow.\nIf not provided, all outputs are returned."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"tweaks"})," (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\nThe tweaks can be used to modify the flow's parameters and components.\nTweaks can be overridden by the input values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stream"})," (bool, optional): Specifies whether the results should be streamed. Defaults to False."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"session_id"})," (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\nexecution."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"api_key_user"})," (User): The user associated with the current API key. Automatically resolved from the API key."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"returns",children:"Returns:"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"RunResponse"})," object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input."]}),"\n",(0,i.jsx)(t.h3,{id:"raises",children:"Raises:"}),"\n",(0,i.jsx)(t.p,{children:"HTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution."}),"\n",(0,i.jsx)(t.h3,{id:"example-usage",children:"Example usage:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'POST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n "inputs": [\n {"components": ["component1"], "input_value": "value1"},\n {"components": ["component3"], "input_value": "value2"}\n ],\n "outputs": ["Component Name", "component_id"],\n "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}}\n "stream": false\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements."}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"flow_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" uuid"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Request Body "}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"inputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Inputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"tweaks"}),(0,i.jsx)("span",{style:{opacity:"0.6"}})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"stream"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"})]})})]})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"200"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Successful Response"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})})]})]})})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"422"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Validation Error"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"detail"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"loc"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"msg"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"type"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.7074028a.js b/assets/js/runtime~main.b7091036.js
similarity index 98%
rename from assets/js/runtime~main.7074028a.js
rename to assets/js/runtime~main.b7091036.js
index a26dddc762..e51e0cdffe 100644
--- a/assets/js/runtime~main.7074028a.js
+++ b/assets/js/runtime~main.b7091036.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every(e=>r.O[e](d[o]))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,d)=>(r.f[d](e,a),a),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",31:"03e862ce",78:"b768a3a5",118:"650a6085",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",368:"07c30ae4",375:"3d81f1cf",416:"ccb2a150",417:"93e16042",548:"37f47bc1",598:"db4f3bbd",606:"1d59d55f",656:"e67e8b00",743:"e0f2017c",750:"33b5ee95",768:"6d684b63",785:"5f59ded8",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",957:"c141421f",964:"05d835b4",1006:"47e58a89",1013:"8d3cdb68",1022:"1f19c1a1",1035:"24d32e91",1068:"f4c28b6b",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1361:"ff296c8d",1399:"16ceb5d2",1408:"2fc7e024",1426:"220d55f5",1483:"af6600d9",1488:"ac3cc3f5",1500:"1e9025f7",1515:"2c05a87f",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1628:"07e388ca",1690:"41a97a99",1845:"2ab0d4f5",1895:"d375ca1d",1954:"6ffef3f1",1956:"fe6f9601",2073:"7b7db446",2089:"ad06d5f0",2100:"9cc9f218",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2307:"8bd4a540",2323:"b9f9404d",2360:"017d425f",2423:"19bcb67f",2475:"1ab69cbd",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2777:"b3ba68b4",2818:"a9b73094",2847:"080b9ac1",2901:"03aeaaab",3094:"46d346a5",3147:"4e56251d",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3263:"730da84e",3274:"564a0250",3347:"b5257597",3361:"8f633f11",3549:"6d20d6ec",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3930:"3a71638d",3934:"e190040d",3953:"238e6167",4036:"fbcfc90d",4056:"6ef91a5f",4218:"d5bb0e16",4223:"f01590dc",4314:"f6a246db",4341:"e1a0f423",4498:"24996c2f",4645:"fef056e9",4656:"b37620f5",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"f735f5f3",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5352:"e627b1b2",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5482:"9895db20",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5657:"e82d58ff",5673:"73af8c33",5716:"946d1cee",5739:"69079906",5742:"aba21aa0",5761:"7f193c41",5772:"4e7126f8",5799:"364e949f",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",5983:"28fb019d",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6063:"464a5f06",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6281:"c96ce3ed",6311:"cce672fb",6330:"5d73b2d0",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6541:"a03d4ed9",6559:"6f13807a",6608:"391afd3f",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6855:"0d8750f2",6920:"c817e236",6934:"d745f4e6",6947:"acebef04",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7142:"d0c1f670",7165:"547df4a1",7253:"709203b3",7257:"8321259f",7324:"ab072087",7339:"7a774ddf",7414:"7a88e433",7472:"744aaf8b",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7774:"8e9a8774",7800:"f48363a4",7807:"1a8a0a64",7824:"2b56b65e",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7968:"9b0af131",8064:"274fd934",8069:"e267ad05",8082:"08d5c80a",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8268:"a4b6c971",8298:"153f2b62",8304:"73d1a090",8323:"b109d082",8374:"261f8123",8392:"20177945",8401:"17896441",8483:"a84e1c02",8504:"e6c6a4d2",8593:"56350599",8641:"8a61012d",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8750:"8a484c94",8790:"bfca1e36",8978:"aeae39fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9592:"e24b341f",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9648:"e3230154",9705:"ee3b5967",9731:"52edee88",9751:"25255263",9752:"72d61395",9839:"54980a8a",9857:"09f5326a",9888:"be76515e",9905:"43df3697"}[e]||e)+"."+{11:"ee0a3ee3",31:"26dc4e99",78:"a2b07490",118:"decb0d18",188:"3754e235",191:"edff055d",230:"b57a23a7",253:"710f6a2e",299:"bdeb4e18",368:"fef33bfb",375:"63406bcd",416:"1a59d9e7",417:"fc55d568",548:"718b93e5",598:"6d6daee4",606:"80cda23c",656:"fa4717b0",743:"4b9153fa",750:"b2ba1ace",768:"99c78c40",785:"39f9122c",787:"341d64e3",800:"d44b313b",824:"87a2bea0",879:"6757f7b7",900:"7cc4aadf",957:"da9e1d2b",964:"ced13117",1006:"84de0fce",1013:"d918db7d",1022:"d46d4330",1035:"74d533fb",1068:"18a645fb",1162:"94f5d8fc",1185:"fd7f55b7",1193:"eb7f6e2a",1303:"266c70c4",1308:"660adba7",1361:"3c3f429c",1399:"65c85829",1408:"aa199180",1426:"2796edc7",1483:"08884a4f",1488:"feb8009a",1500:"1d36ec42",1515:"89bd0b57",1556:"c5e65a31",1567:"f16b727a",1625:"14cdddbe",1628:"e40e043f",1690:"dca3012e",1845:"8d4399d8",1895:"234f1abb",1954:"59f19c41",1956:"6cc326f3",2073:"a62c0e8f",2089:"6d2b6a9f",2100:"747a02c2",2138:"f62f93d0",2237:"8bc4ac99",2272:"d7347f64",2273:"1f2d928d",2307:"afac5822",2323:"654b4632",2360:"3c8c73c7",2423:"1889896a",2475:"482a6f09",2551:"4668f2c8",2565:"0862c177",2624:"270681fd",2642:"2b4802bc",2651:"63a3bcdb",2777:"f3f737db",2818:"1c1a2f0d",2847:"fd4285dc",2901:"12f90601",3094:"9949d432",3147:"14eef125",3164:"001eb3e6",3225:"f4c930e3",3240:"89c52171",3263:"9b6be8e0",3274:"2260e55a",3347:"0cb92093",3361:"91557f53",3477:"a7eba177",3549:"dfaf2e76",3576:"8a47b866",3694:"f8c0479d",3795:"185f4ac0",3832:"54c9637f",3859:"08f4a6d2",3930:"9e133460",3934:"c45617d7",3953:"a6992679",4036:"2711473f",4056:"7b2cb763",4058:"7658d33f",4218:"e29d0b76",4223:"7fbbd871",4314:"57d83837",4341:"c39b81ea",4498:"5458fc38",4645:"a81075b1",4656:"b2c39d04",4778:"0ab1de71",4784:"2850454f",4841:"11ff17e7",4867:"fd3a87c6",4876:"6791a1bf",4891:"a37b37df",4907:"cf6988a5",4954:"43103154",5107:"d00d19cd",5110:"89a5dc57",5138:"afe151cb",5144:"f0942dcd",5179:"ca564891",5281:"a41c4fe4",5284:"9a1ac6d4",5339:"bdef02a0",5352:"f40b102a",5412:"5778d6d9",5467:"f78004bb",5474:"074af722",5482:"affc11dd",5513:"5ed04f5c",5514:"5765db12",5628:"7f3691c6",5657:"5a813344",5673:"af9e481c",5716:"3e6dabc0",5739:"c37db3a8",5742:"60b1d5b2",5761:"824df9c5",5772:"6298bef5",5799:"76948292",5865:"5f49417d",5866:"e1a54aee",5883:"7d7b0c34",5894:"7b6c867a",5983:"cd3355c2",6003:"4371ec66",6006:"60de8093",6010:"c74728ad",6053:"62555e59",6063:"eca91535",6080:"d7040d78",6108:"13b6a8b1",6214:"85b870d8",6281:"2d0ca3f3",6311:"5b8b5899",6330:"c1cc298a",6332:"228b947b",6350:"4b95a419",6419:"e6eeb5a6",6445:"257386eb",6473:"b5e32ff9",6541:"1c2210e4",6559:"5d0db366",6608:"d532f0ce",6649:"0ea7221f",6682:"ee292934",6688:"a09e1894",6753:"5143c73f",6757:"168201ac",6801:"676be59f",6855:"46e9ac75",6920:"e0632a00",6934:"a578bc85",6947:"55d9b1b3",6949:"ef6c0edc",7098:"fc1f6434",7108:"a251e652",7142:"8f7d5522",7165:"1940f465",7253:"fd13bdcf",7257:"69a169c8",7324:"5eb84420",7339:"350f484c",7397:"385da999",7414:"cfbe2149",7472:"ec3ce7db",7507:"64b2ab53",7512:"a5eea792",7713:"0a9565a6",7774:"1b22f20b",7800:"4c99e1a1",7807:"3282c74d",7824:"a01f7410",7841:"735c4ee0",7859:"8e485694",7894:"a7021e43",7968:"b36f8529",8035:"87ec3f77",8064:"2b2c4924",8069:"b45894ee",8082:"d96e0513",8085:"51f6d0db",8102:"06a5c133",8158:"20de8b80",8184:"f223b902",8188:"4736ecea",8196:"8409b15b",8208:"000afae6",8268:"39c65e66",8298:"d9604336",8304:"1146f31c",8323:"81a62512",8374:"4b006095",8392:"95b0ee32",8401:"23c55f2d",8483:"21fb59b0",8504:"8d3f3031",8593:"aab616cc",8641:"1497af0e",8649:"d962d75c",8667:"a0f46cd3",8679:"b71a6a45",8750:"9ed09830",8790:"c24795d7",8913:"47209f3b",8978:"0825f88e",9036:"b970c848",9048:"bdc69ee3",9099:"decaeb70",9126:"3a0b3e32",9331:"a6e3ff48",9363:"04dac4f4",9371:"da2c97f3",9431:"5b4b6ef6",9459:"1dd237dc",9476:"f50300b7",9479:"c2b519f3",9483:"61933302",9495:"49162ef8",9509:"329a1685",9555:"362358d6",9592:"5edae105",9619:"5ab2715e",9640:"9c0437ec",9647:"5cb928a1",9648:"390406f2",9705:"097cca43",9731:"74089fe0",9751:"fd414b25",9752:"5f89276d",9839:"6a957b83",9857:"d319445c",9888:"9c7044bb",9905:"55d8058e"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="langflow-docs:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach(e=>e(d)),a)return a(d)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",20177945:"8392",25255263:"9751",56350599:"8593",64045095:"3576",69079906:"5739",86116998:"4907",d2df9b4e:"11","03e862ce":"31",b768a3a5:"78","650a6085":"118","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299","07c30ae4":"368","3d81f1cf":"375",ccb2a150:"416","93e16042":"417","37f47bc1":"548",db4f3bbd:"598","1d59d55f":"606",e67e8b00:"656",e0f2017c:"743","33b5ee95":"750","6d684b63":"768","5f59ded8":"785","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879",c141421f:"957","05d835b4":"964","47e58a89":"1006","8d3cdb68":"1013","1f19c1a1":"1022","24d32e91":"1035",f4c28b6b:"1068",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",ff296c8d:"1361","16ceb5d2":"1399","2fc7e024":"1408","220d55f5":"1426",af6600d9:"1483",ac3cc3f5:"1488","1e9025f7":"1500","2c05a87f":"1515","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","07e388ca":"1628","41a97a99":"1690","2ab0d4f5":"1845",d375ca1d:"1895","6ffef3f1":"1954",fe6f9601:"1956","7b7db446":"2073",ad06d5f0:"2089","9cc9f218":"2100","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273","8bd4a540":"2307",b9f9404d:"2323","017d425f":"2360","19bcb67f":"2423","1ab69cbd":"2475","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651",b3ba68b4:"2777",a9b73094:"2818","080b9ac1":"2847","03aeaaab":"2901","46d346a5":"3094","4e56251d":"3147","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240","730da84e":"3263","564a0250":"3274",b5257597:"3347","8f633f11":"3361","6d20d6ec":"3549",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859","3a71638d":"3930",e190040d:"3934","238e6167":"3953",fbcfc90d:"4036","6ef91a5f":"4056",d5bb0e16:"4218",f01590dc:"4223",f6a246db:"4314",e1a0f423:"4341","24996c2f":"4498",fef056e9:"4645",b37620f5:"4656",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",f735f5f3:"4876",ca67d85f:"4891",a71efd4a:"4954",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",e627b1b2:"5352",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","9895db20":"5482","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",e82d58ff:"5657","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","28fb019d":"5983","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","464a5f06":"6063","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",c96ce3ed:"6281",cce672fb:"6311","5d73b2d0":"6330","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",a03d4ed9:"6541","6f13807a":"6559","391afd3f":"6608","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801","0d8750f2":"6855",c817e236:"6920",d745f4e6:"6934",acebef04:"6947",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108",d0c1f670:"7142","547df4a1":"7165","709203b3":"7253","8321259f":"7257",ab072087:"7324","7a774ddf":"7339","7a88e433":"7414","744aaf8b":"7472","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","8e9a8774":"7774",f48363a4:"7800","1a8a0a64":"7807","2b56b65e":"7824","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","9b0af131":"7968","274fd934":"8064",e267ad05:"8069","08d5c80a":"8082",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208",a4b6c971:"8268","153f2b62":"8298","73d1a090":"8304",b109d082:"8323","261f8123":"8374",a84e1c02:"8483",e6c6a4d2:"8504","8a61012d":"8641","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","8a484c94":"8750",bfca1e36:"8790",aeae39fc:"8978","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555",e24b341f:"9592","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",e3230154:"9648",ee3b5967:"9705","52edee88":"9731","72d61395":"9752","54980a8a":"9839","09f5326a":"9857",be76515e:"9888","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise((d,c)=>f=e[a]=[d,c]);d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some(a=>0!==e[a])){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every(e=>r.O[e](d[o]))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,d)=>(r.f[d](e,a),a),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",31:"03e862ce",78:"b768a3a5",118:"650a6085",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",368:"07c30ae4",375:"3d81f1cf",416:"ccb2a150",417:"93e16042",548:"37f47bc1",598:"db4f3bbd",606:"1d59d55f",656:"e67e8b00",743:"e0f2017c",750:"33b5ee95",768:"6d684b63",785:"5f59ded8",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",957:"c141421f",964:"05d835b4",1006:"47e58a89",1013:"8d3cdb68",1022:"1f19c1a1",1035:"24d32e91",1068:"f4c28b6b",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1361:"ff296c8d",1399:"16ceb5d2",1408:"2fc7e024",1426:"220d55f5",1483:"af6600d9",1488:"ac3cc3f5",1500:"1e9025f7",1515:"2c05a87f",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1628:"07e388ca",1690:"41a97a99",1845:"2ab0d4f5",1895:"d375ca1d",1954:"6ffef3f1",1956:"fe6f9601",2073:"7b7db446",2089:"ad06d5f0",2100:"9cc9f218",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2307:"8bd4a540",2323:"b9f9404d",2360:"017d425f",2423:"19bcb67f",2475:"1ab69cbd",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2777:"b3ba68b4",2818:"a9b73094",2847:"080b9ac1",2901:"03aeaaab",3094:"46d346a5",3147:"4e56251d",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3263:"730da84e",3274:"564a0250",3347:"b5257597",3361:"8f633f11",3549:"6d20d6ec",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3930:"3a71638d",3934:"e190040d",3953:"238e6167",4036:"fbcfc90d",4056:"6ef91a5f",4218:"d5bb0e16",4223:"f01590dc",4314:"f6a246db",4341:"e1a0f423",4498:"24996c2f",4645:"fef056e9",4656:"b37620f5",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"f735f5f3",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5352:"e627b1b2",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5482:"9895db20",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5657:"e82d58ff",5673:"73af8c33",5716:"946d1cee",5739:"69079906",5742:"aba21aa0",5761:"7f193c41",5772:"4e7126f8",5799:"364e949f",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",5983:"28fb019d",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6063:"464a5f06",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6281:"c96ce3ed",6311:"cce672fb",6330:"5d73b2d0",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6541:"a03d4ed9",6559:"6f13807a",6608:"391afd3f",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6855:"0d8750f2",6920:"c817e236",6934:"d745f4e6",6947:"acebef04",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7142:"d0c1f670",7165:"547df4a1",7253:"709203b3",7257:"8321259f",7324:"ab072087",7339:"7a774ddf",7414:"7a88e433",7472:"744aaf8b",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7774:"8e9a8774",7800:"f48363a4",7807:"1a8a0a64",7824:"2b56b65e",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7968:"9b0af131",8064:"274fd934",8069:"e267ad05",8082:"08d5c80a",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8268:"a4b6c971",8298:"153f2b62",8304:"73d1a090",8323:"b109d082",8374:"261f8123",8392:"20177945",8401:"17896441",8483:"a84e1c02",8504:"e6c6a4d2",8593:"56350599",8641:"8a61012d",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8750:"8a484c94",8790:"bfca1e36",8978:"aeae39fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9592:"e24b341f",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9648:"e3230154",9705:"ee3b5967",9731:"52edee88",9751:"25255263",9752:"72d61395",9839:"54980a8a",9857:"09f5326a",9888:"be76515e",9905:"43df3697"}[e]||e)+"."+{11:"ee0a3ee3",31:"26dc4e99",78:"a2b07490",118:"decb0d18",188:"3754e235",191:"edff055d",230:"b57a23a7",253:"710f6a2e",299:"bdeb4e18",368:"fef33bfb",375:"63406bcd",416:"1a59d9e7",417:"fc55d568",548:"718b93e5",598:"6d6daee4",606:"80cda23c",656:"fa4717b0",743:"4b9153fa",750:"b2ba1ace",768:"99c78c40",785:"39f9122c",787:"341d64e3",800:"d44b313b",824:"87a2bea0",879:"6757f7b7",900:"7cc4aadf",957:"da9e1d2b",964:"ced13117",1006:"84de0fce",1013:"d918db7d",1022:"d46d4330",1035:"74d533fb",1068:"18a645fb",1162:"94f5d8fc",1185:"fd7f55b7",1193:"eb7f6e2a",1303:"266c70c4",1308:"660adba7",1361:"3c3f429c",1399:"65c85829",1408:"aa199180",1426:"2796edc7",1483:"08884a4f",1488:"feb8009a",1500:"1d36ec42",1515:"89bd0b57",1556:"c5e65a31",1567:"f16b727a",1625:"14cdddbe",1628:"e40e043f",1690:"dca3012e",1845:"f87ed04d",1895:"234f1abb",1954:"59f19c41",1956:"6cc326f3",2073:"a62c0e8f",2089:"6d2b6a9f",2100:"747a02c2",2138:"f62f93d0",2237:"8bc4ac99",2272:"d7347f64",2273:"1f2d928d",2307:"afac5822",2323:"654b4632",2360:"3c8c73c7",2423:"1889896a",2475:"482a6f09",2551:"4668f2c8",2565:"0862c177",2624:"270681fd",2642:"2b4802bc",2651:"63a3bcdb",2777:"f3f737db",2818:"1c1a2f0d",2847:"fd4285dc",2901:"12f90601",3094:"9949d432",3147:"14eef125",3164:"001eb3e6",3225:"f4c930e3",3240:"89c52171",3263:"9b6be8e0",3274:"2260e55a",3347:"0cb92093",3361:"91557f53",3477:"a7eba177",3549:"dfaf2e76",3576:"8a47b866",3694:"f8c0479d",3795:"185f4ac0",3832:"54c9637f",3859:"08f4a6d2",3930:"9e133460",3934:"c45617d7",3953:"a6992679",4036:"2711473f",4056:"7b2cb763",4058:"7658d33f",4218:"e29d0b76",4223:"7fbbd871",4314:"57d83837",4341:"c39b81ea",4498:"5458fc38",4645:"a81075b1",4656:"b2c39d04",4778:"0ab1de71",4784:"2850454f",4841:"11ff17e7",4867:"fd3a87c6",4876:"6791a1bf",4891:"a37b37df",4907:"cf6988a5",4954:"43103154",5107:"d00d19cd",5110:"89a5dc57",5138:"afe151cb",5144:"f0942dcd",5179:"ca564891",5281:"a41c4fe4",5284:"9a1ac6d4",5339:"bdef02a0",5352:"f40b102a",5412:"5778d6d9",5467:"f78004bb",5474:"074af722",5482:"affc11dd",5513:"5ed04f5c",5514:"5765db12",5628:"7f3691c6",5657:"5a813344",5673:"af9e481c",5716:"3e6dabc0",5739:"c37db3a8",5742:"60b1d5b2",5761:"824df9c5",5772:"6298bef5",5799:"76948292",5865:"5f49417d",5866:"e1a54aee",5883:"7d7b0c34",5894:"7b6c867a",5983:"cd3355c2",6003:"4371ec66",6006:"60de8093",6010:"c74728ad",6053:"62555e59",6063:"eca91535",6080:"d7040d78",6108:"13b6a8b1",6214:"85b870d8",6281:"2d0ca3f3",6311:"5b8b5899",6330:"c1cc298a",6332:"228b947b",6350:"4b95a419",6419:"e6eeb5a6",6445:"257386eb",6473:"b5e32ff9",6541:"1c2210e4",6559:"5d0db366",6608:"d532f0ce",6649:"0ea7221f",6682:"ee292934",6688:"a09e1894",6753:"5143c73f",6757:"168201ac",6801:"676be59f",6855:"46e9ac75",6920:"e0632a00",6934:"a578bc85",6947:"55d9b1b3",6949:"ef6c0edc",7098:"fc1f6434",7108:"a251e652",7142:"8f7d5522",7165:"1940f465",7253:"fd13bdcf",7257:"69a169c8",7324:"5eb84420",7339:"350f484c",7397:"385da999",7414:"cfbe2149",7472:"ec3ce7db",7507:"64b2ab53",7512:"a5eea792",7713:"0a9565a6",7774:"1b22f20b",7800:"4c99e1a1",7807:"3282c74d",7824:"a01f7410",7841:"735c4ee0",7859:"8e485694",7894:"a7021e43",7968:"b36f8529",8035:"87ec3f77",8064:"2b2c4924",8069:"b45894ee",8082:"d96e0513",8085:"51f6d0db",8102:"06a5c133",8158:"20de8b80",8184:"f223b902",8188:"4736ecea",8196:"8409b15b",8208:"000afae6",8268:"39c65e66",8298:"d9604336",8304:"1146f31c",8323:"81a62512",8374:"4b006095",8392:"a97a329f",8401:"23c55f2d",8483:"21fb59b0",8504:"694e66f6",8593:"aab616cc",8641:"1497af0e",8649:"d962d75c",8667:"a0f46cd3",8679:"b71a6a45",8750:"9ed09830",8790:"c24795d7",8913:"47209f3b",8978:"0825f88e",9036:"b970c848",9048:"bdc69ee3",9099:"decaeb70",9126:"3a0b3e32",9331:"a6e3ff48",9363:"04dac4f4",9371:"da2c97f3",9431:"5b4b6ef6",9459:"1dd237dc",9476:"f50300b7",9479:"c2b519f3",9483:"61933302",9495:"49162ef8",9509:"329a1685",9555:"362358d6",9592:"5edae105",9619:"5ab2715e",9640:"9c0437ec",9647:"5cb928a1",9648:"390406f2",9705:"097cca43",9731:"74089fe0",9751:"fd414b25",9752:"5f89276d",9839:"6a957b83",9857:"d319445c",9888:"9c7044bb",9905:"55d8058e"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="langflow-docs:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach(e=>e(d)),a)return a(d)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",20177945:"8392",25255263:"9751",56350599:"8593",64045095:"3576",69079906:"5739",86116998:"4907",d2df9b4e:"11","03e862ce":"31",b768a3a5:"78","650a6085":"118","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299","07c30ae4":"368","3d81f1cf":"375",ccb2a150:"416","93e16042":"417","37f47bc1":"548",db4f3bbd:"598","1d59d55f":"606",e67e8b00:"656",e0f2017c:"743","33b5ee95":"750","6d684b63":"768","5f59ded8":"785","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879",c141421f:"957","05d835b4":"964","47e58a89":"1006","8d3cdb68":"1013","1f19c1a1":"1022","24d32e91":"1035",f4c28b6b:"1068",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",ff296c8d:"1361","16ceb5d2":"1399","2fc7e024":"1408","220d55f5":"1426",af6600d9:"1483",ac3cc3f5:"1488","1e9025f7":"1500","2c05a87f":"1515","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","07e388ca":"1628","41a97a99":"1690","2ab0d4f5":"1845",d375ca1d:"1895","6ffef3f1":"1954",fe6f9601:"1956","7b7db446":"2073",ad06d5f0:"2089","9cc9f218":"2100","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273","8bd4a540":"2307",b9f9404d:"2323","017d425f":"2360","19bcb67f":"2423","1ab69cbd":"2475","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651",b3ba68b4:"2777",a9b73094:"2818","080b9ac1":"2847","03aeaaab":"2901","46d346a5":"3094","4e56251d":"3147","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240","730da84e":"3263","564a0250":"3274",b5257597:"3347","8f633f11":"3361","6d20d6ec":"3549",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859","3a71638d":"3930",e190040d:"3934","238e6167":"3953",fbcfc90d:"4036","6ef91a5f":"4056",d5bb0e16:"4218",f01590dc:"4223",f6a246db:"4314",e1a0f423:"4341","24996c2f":"4498",fef056e9:"4645",b37620f5:"4656",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",f735f5f3:"4876",ca67d85f:"4891",a71efd4a:"4954",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",e627b1b2:"5352",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","9895db20":"5482","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",e82d58ff:"5657","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","28fb019d":"5983","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","464a5f06":"6063","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",c96ce3ed:"6281",cce672fb:"6311","5d73b2d0":"6330","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",a03d4ed9:"6541","6f13807a":"6559","391afd3f":"6608","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801","0d8750f2":"6855",c817e236:"6920",d745f4e6:"6934",acebef04:"6947",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108",d0c1f670:"7142","547df4a1":"7165","709203b3":"7253","8321259f":"7257",ab072087:"7324","7a774ddf":"7339","7a88e433":"7414","744aaf8b":"7472","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","8e9a8774":"7774",f48363a4:"7800","1a8a0a64":"7807","2b56b65e":"7824","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","9b0af131":"7968","274fd934":"8064",e267ad05:"8069","08d5c80a":"8082",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208",a4b6c971:"8268","153f2b62":"8298","73d1a090":"8304",b109d082:"8323","261f8123":"8374",a84e1c02:"8483",e6c6a4d2:"8504","8a61012d":"8641","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","8a484c94":"8750",bfca1e36:"8790",aeae39fc:"8978","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555",e24b341f:"9592","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",e3230154:"9648",ee3b5967:"9705","52edee88":"9731","72d61395":"9752","54980a8a":"9839","09f5326a":"9857",be76515e:"9888","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise((d,c)=>f=e[a]=[d,c]);d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some(a=>0!==e[a])){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n
-
+
diff --git a/blog-writer.html b/blog-writer.html
index 79f97f9df4..dce6f4a740 100644
--- a/blog-writer.html
+++ b/blog-writer.html
@@ -23,7 +23,7 @@
-
+
diff --git a/chat-with-files.html b/chat-with-files.html
index 875a28c8f4..1e412f421a 100644
--- a/chat-with-files.html
+++ b/chat-with-files.html
@@ -23,7 +23,7 @@
-
+
diff --git a/chat-with-rag.html b/chat-with-rag.html
index 001da23a7a..eeffb4c21f 100644
--- a/chat-with-rag.html
+++ b/chat-with-rag.html
@@ -23,7 +23,7 @@
-
+
diff --git a/components-agents.html b/components-agents.html
index f0fd5fd3ea..bdf2a62893 100644
--- a/components-agents.html
+++ b/components-agents.html
@@ -23,7 +23,7 @@
-
+
diff --git a/components-bundle-components.html b/components-bundle-components.html
index 90f220c370..a775ca9d7b 100644
--- a/components-bundle-components.html
+++ b/components-bundle-components.html
@@ -23,7 +23,7 @@
-
+
diff --git a/components-custom-components.html b/components-custom-components.html
index 6cb8b1695e..b8c5d19bc2 100644
--- a/components-custom-components.html
+++ b/components-custom-components.html
@@ -23,7 +23,7 @@
-
+
@@ -131,6 +131,39 @@
Each output can have a different corresponding method.
For example:
By default, components in Langflow that define multiple outputs will display them as a dropdown in the UI. This behavior is controlled by the group_outputs parameter.
+
+
+
group_outputs=False (default):
+When a component has more than one output and group_outputs is not specified (or set to False), the outputs are grouped into a dropdown. The user can choose only one output at a time from the UI.
+
+
+
group_outputs=True:
+All outputs will be shown simultaneously in the UI. This is useful when the component is expected to return multiple values that should be used in parallel downstream.
Use group_outputs=False when the component is expected to return only one of the outputs depending on the flow logic.
+
+
+
Use group_outputs=True when the component should expose multiple outputs simultaneously, such as structured data and a table that are meant to be used in parallel.