From fee7c91fa5facb5d0bec26d87e0292f1038b3e4a Mon Sep 17 00:00:00 2001 From: mendonk Date: Wed, 11 Dec 2024 17:32:21 +0000 Subject: [PATCH] deploy: db641e70f6701ddeab35a76385bfbdbb32a28256 --- 404.html | 2 +- Components/components-memories.html | 2 +- Components/components-tools.html | 2 +- Configuration/configuration-custom-database.html | 2 +- agents-overview.html | 2 +- agents-tool-calling-agent-component.html | 2 +- api.html | 2 +- api/add-user.html | 2 +- api/auto-login.html | 2 +- api/build-flow.html | 2 +- api/build-vertex-stream.html | 2 +- api/build-vertex.html | 2 +- api/check-if-store-has-api-key.html | 2 +- api/check-if-store-is-enabled.html | 2 +- api/create-api-key-route.html | 2 +- api/create-flow.html | 2 +- api/create-flows.html | 2 +- api/create-folder.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-api-key-route.html | 2 +- api/delete-file.html | 2 +- api/delete-flow.html | 2 +- api/delete-folder.html | 2 +- api/delete-messages-session.html | 2 +- api/delete-messages.html | 2 +- api/delete-multiple-flows.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.html | 2 +- api/download-image.html | 2 +- api/download-multiple-file.html | 2 +- api/download-profile-picture.html | 2 +- api/experimental-run-flow.html | 2 +- api/get-all.html | 2 +- api/get-api-keys-route.html | 2 +- api/get-components.html | 2 +- api/get-config.html | 2 +- api/get-list-of-components-liked-by-user.html | 2 +- api/get-messages.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/health-check.html | 2 +- api/health.html | 2 +- api/like-component.html | 2 +- api/list-files.html | 2 +- api/list-profile-pictures.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.html | 2 +- api/read-folders.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.html | 2 +- api/update-message.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.html | 2 +- api/webhook-run-flow.html | 2 +- assets/js/22dd74f7.d3969978.js | 1 + assets/js/22dd74f7.d3c893ba.js | 1 - assets/js/873ebc27.2c03f163.js | 1 - assets/js/873ebc27.7b5d4ffc.js | 1 + assets/js/c329cc2b.31372bf9.js | 1 - assets/js/c329cc2b.8d1cf604.js | 1 + assets/js/{cacdc615.9b6f5f2f.js => cacdc615.62628bc5.js} | 2 +- .../{runtime~main.74aa1667.js => runtime~main.93e25b1e.js} | 2 +- components-agents.html | 2 +- components-custom-components.html | 6 +++--- components-data.html | 2 +- components-embedding-models.html | 2 +- components-helpers.html | 2 +- components-io.html | 2 +- components-loaders.html | 2 +- components-logic.html | 2 +- components-models.html | 2 +- components-overview.html | 2 +- components-prompts.html | 2 +- components-rag.html | 2 +- components-vector-stores.html | 2 +- configuration-api-keys.html | 4 ++-- configuration-authentication.html | 2 +- configuration-auto-save.html | 2 +- configuration-backend-only.html | 2 +- configuration-cli.html | 2 +- configuration-global-variables.html | 2 +- configuration-security-best-practices.html | 2 +- contributing-community.html | 2 +- contributing-components.html | 2 +- contributing-github-discussions.html | 2 +- contributing-github-issues.html | 2 +- contributing-how-to-contribute.html | 2 +- contributing-telemetry.html | 2 +- deployment-docker.html | 2 +- deployment-gcp.html | 2 +- deployment-hugging-face-spaces.html | 2 +- deployment-kubernetes.html | 2 +- deployment-railway.html | 2 +- deployment-render.html | 2 +- environment-variables.html | 2 +- get-started-installation.html | 2 +- get-started-quickstart.html | 2 +- guides-chat-memory.html | 4 ++-- guides-data-message.html | 2 +- guides-new-to-llms.html | 2 +- index.html | 2 +- integrations-assemblyai.html | 2 +- integrations-langfuse.html | 2 +- integrations-langsmith.html | 2 +- integrations-langwatch.html | 2 +- integrations-setup-google-cloud-vertex-ai-langflow.html | 2 +- integrations-setup-google-oauth-langflow.html | 2 +- integrations/notion/notion-agent-conversational.html | 2 +- integrations/notion/notion-agent-meeting-notes.html | 2 +- integrations/notion/setup.html | 2 +- sitemap.xml | 2 +- starter-projects-basic-prompting.html | 2 +- starter-projects-blog-writer.html | 2 +- starter-projects-document-qa.html | 2 +- starter-projects-memory-chatbot.html | 2 +- starter-projects-sequential-agent.html | 2 +- starter-projects-simple-agent.html | 2 +- starter-projects-travel-planning-agent.html | 2 +- starter-projects-vector-store-rag.html | 2 +- workspace-api.html | 2 +- workspace-logs.html | 2 +- workspace-overview.html | 2 +- workspace-playground.html | 2 +- 158 files changed, 159 insertions(+), 159 deletions(-) create mode 100644 assets/js/22dd74f7.d3969978.js delete mode 100644 assets/js/22dd74f7.d3c893ba.js delete mode 100644 assets/js/873ebc27.2c03f163.js create mode 100644 assets/js/873ebc27.7b5d4ffc.js delete mode 100644 assets/js/c329cc2b.31372bf9.js create mode 100644 assets/js/c329cc2b.8d1cf604.js rename assets/js/{cacdc615.9b6f5f2f.js => cacdc615.62628bc5.js} (97%) rename assets/js/{runtime~main.74aa1667.js => runtime~main.93e25b1e.js} (76%) diff --git a/404.html b/404.html index 25c107cc61..ac2b5f430c 100644 --- a/404.html +++ b/404.html @@ -10,7 +10,7 @@ - + diff --git a/Components/components-memories.html b/Components/components-memories.html index a8b019a01a..e303b8d03a 100644 --- a/Components/components-memories.html +++ b/Components/components-memories.html @@ -10,7 +10,7 @@ - + diff --git a/Components/components-tools.html b/Components/components-tools.html index a3aaa4aa55..15d023a1c0 100644 --- a/Components/components-tools.html +++ b/Components/components-tools.html @@ -10,7 +10,7 @@ - + diff --git a/Configuration/configuration-custom-database.html b/Configuration/configuration-custom-database.html index 9323720dff..7c568bc629 100644 --- a/Configuration/configuration-custom-database.html +++ b/Configuration/configuration-custom-database.html @@ -10,7 +10,7 @@ - + diff --git a/agents-overview.html b/agents-overview.html index a0d8213432..114f980d4e 100644 --- a/agents-overview.html +++ b/agents-overview.html @@ -10,7 +10,7 @@ - + diff --git a/agents-tool-calling-agent-component.html b/agents-tool-calling-agent-component.html index 1abe6baeb3..ee5a3e3b3e 100644 --- a/agents-tool-calling-agent-component.html +++ b/agents-tool-calling-agent-component.html @@ -10,7 +10,7 @@ - + diff --git a/api.html b/api.html index 0a98305bd2..2412b65bfd 100644 --- a/api.html +++ b/api.html @@ -10,7 +10,7 @@ - + diff --git a/api/add-user.html b/api/add-user.html index 55fdb0c438..f0abdf1875 100644 --- a/api/add-user.html +++ b/api/add-user.html @@ -10,7 +10,7 @@ - + diff --git a/api/auto-login.html b/api/auto-login.html index 6eb108359d..1cfe2b516c 100644 --- a/api/auto-login.html +++ b/api/auto-login.html @@ -10,7 +10,7 @@ - + diff --git a/api/build-flow.html b/api/build-flow.html index f84fde4015..035b820917 100644 --- a/api/build-flow.html +++ b/api/build-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/build-vertex-stream.html b/api/build-vertex-stream.html index 16bf1be241..2cf44cca7a 100644 --- a/api/build-vertex-stream.html +++ b/api/build-vertex-stream.html @@ -10,7 +10,7 @@ - + diff --git a/api/build-vertex.html b/api/build-vertex.html index 8367a82d83..5a4a5e84b8 100644 --- a/api/build-vertex.html +++ b/api/build-vertex.html @@ -10,7 +10,7 @@ - + diff --git a/api/check-if-store-has-api-key.html b/api/check-if-store-has-api-key.html index 969c9273f7..fa33d64a3e 100644 --- a/api/check-if-store-has-api-key.html +++ b/api/check-if-store-has-api-key.html @@ -10,7 +10,7 @@ - + diff --git a/api/check-if-store-is-enabled.html b/api/check-if-store-is-enabled.html index 1ae3241213..ce6a8cc476 100644 --- a/api/check-if-store-is-enabled.html +++ b/api/check-if-store-is-enabled.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-api-key-route.html b/api/create-api-key-route.html index 335ca5e180..b368b3053c 100644 --- a/api/create-api-key-route.html +++ b/api/create-api-key-route.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-flow.html b/api/create-flow.html index a53c910d9b..42524e3d72 100644 --- a/api/create-flow.html +++ b/api/create-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-flows.html b/api/create-flows.html index 8a826cc139..734e96d7d5 100644 --- a/api/create-flows.html +++ b/api/create-flows.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-folder.html b/api/create-folder.html index 45af454831..af57905f49 100644 --- a/api/create-folder.html +++ b/api/create-folder.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-upload-file.html b/api/create-upload-file.html index 2faf5b0d84..3da96643d8 100644 --- a/api/create-upload-file.html +++ b/api/create-upload-file.html @@ -10,7 +10,7 @@ - + diff --git a/api/create-variable.html b/api/create-variable.html index 39ebde8c6a..f1d398fac2 100644 --- a/api/create-variable.html +++ b/api/create-variable.html @@ -10,7 +10,7 @@ - + diff --git a/api/custom-component-update.html b/api/custom-component-update.html index 2b02d9e3b6..65c941674b 100644 --- a/api/custom-component-update.html +++ b/api/custom-component-update.html @@ -10,7 +10,7 @@ - + diff --git a/api/custom-component.html b/api/custom-component.html index 15f5919af4..b8fc54ee3e 100644 --- a/api/custom-component.html +++ b/api/custom-component.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-api-key-route.html b/api/delete-api-key-route.html index 14f5442deb..d97ec17830 100644 --- a/api/delete-api-key-route.html +++ b/api/delete-api-key-route.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-file.html b/api/delete-file.html index d9678320ea..6e76a2e865 100644 --- a/api/delete-file.html +++ b/api/delete-file.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-flow.html b/api/delete-flow.html index 4323a90ab0..285c70e015 100644 --- a/api/delete-flow.html +++ b/api/delete-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-folder.html b/api/delete-folder.html index a16c420580..b7db2d2c79 100644 --- a/api/delete-folder.html +++ b/api/delete-folder.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-messages-session.html b/api/delete-messages-session.html index c971e26700..e6e36a08da 100644 --- a/api/delete-messages-session.html +++ b/api/delete-messages-session.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-messages.html b/api/delete-messages.html index 9213fa32e5..d0a55d246f 100644 --- a/api/delete-messages.html +++ b/api/delete-messages.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-multiple-flows.html b/api/delete-multiple-flows.html index 17ac6616b9..1734a60d13 100644 --- a/api/delete-multiple-flows.html +++ b/api/delete-multiple-flows.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-user.html b/api/delete-user.html index 018bcf1c2c..c5f699b20b 100644 --- a/api/delete-user.html +++ b/api/delete-user.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-variable.html b/api/delete-variable.html index bd2f6fcdf6..67f0e7aa55 100644 --- a/api/delete-variable.html +++ b/api/delete-variable.html @@ -10,7 +10,7 @@ - + diff --git a/api/delete-vertex-builds.html b/api/delete-vertex-builds.html index cb0ac71547..62bff0d2f1 100644 --- a/api/delete-vertex-builds.html +++ b/api/delete-vertex-builds.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-component.html b/api/download-component.html index d3688eb25f..1f9227e58c 100644 --- a/api/download-component.html +++ b/api/download-component.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-file-1.html b/api/download-file-1.html index 9470ae1d3a..2c9d433710 100644 --- a/api/download-file-1.html +++ b/api/download-file-1.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-file.html b/api/download-file.html index 36b1345d44..25e5fe8627 100644 --- a/api/download-file.html +++ b/api/download-file.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-image.html b/api/download-image.html index 0a3428bf22..948d3c7682 100644 --- a/api/download-image.html +++ b/api/download-image.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-multiple-file.html b/api/download-multiple-file.html index 816e1d8ceb..273e41b6f1 100644 --- a/api/download-multiple-file.html +++ b/api/download-multiple-file.html @@ -10,7 +10,7 @@ - + diff --git a/api/download-profile-picture.html b/api/download-profile-picture.html index 8deee362ee..6a3cfd5471 100644 --- a/api/download-profile-picture.html +++ b/api/download-profile-picture.html @@ -10,7 +10,7 @@ - + diff --git a/api/experimental-run-flow.html b/api/experimental-run-flow.html index 863808f174..bcb29aa17a 100644 --- a/api/experimental-run-flow.html +++ b/api/experimental-run-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-all.html b/api/get-all.html index 60af832fe6..342f322a8e 100644 --- a/api/get-all.html +++ b/api/get-all.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-api-keys-route.html b/api/get-api-keys-route.html index a3da0f0e52..d9354ad745 100644 --- a/api/get-api-keys-route.html +++ b/api/get-api-keys-route.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-components.html b/api/get-components.html index 7296f03c78..15fede524f 100644 --- a/api/get-components.html +++ b/api/get-components.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-config.html b/api/get-config.html index 2e5a2f83f4..4179701413 100644 --- a/api/get-config.html +++ b/api/get-config.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-list-of-components-liked-by-user.html b/api/get-list-of-components-liked-by-user.html index bca4ec7120..04b5c8649f 100644 --- a/api/get-list-of-components-liked-by-user.html +++ b/api/get-list-of-components-liked-by-user.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-messages.html b/api/get-messages.html index 6c2654cb80..c90f214d7a 100644 --- a/api/get-messages.html +++ b/api/get-messages.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-starter-projects.html b/api/get-starter-projects.html index c11d02ca50..ac5cd3a969 100644 --- a/api/get-starter-projects.html +++ b/api/get-starter-projects.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-tags.html b/api/get-tags.html index a352c93e0a..a5aa766d37 100644 --- a/api/get-tags.html +++ b/api/get-tags.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-task-status.html b/api/get-task-status.html index c9617d2dab..9d0f2a63fb 100644 --- a/api/get-task-status.html +++ b/api/get-task-status.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-transactions.html b/api/get-transactions.html index f113cb59ae..fa28b82d99 100644 --- a/api/get-transactions.html +++ b/api/get-transactions.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-version.html b/api/get-version.html index 0dd3a23477..d1e07f58d0 100644 --- a/api/get-version.html +++ b/api/get-version.html @@ -10,7 +10,7 @@ - + diff --git a/api/get-vertex-builds.html b/api/get-vertex-builds.html index e4ca1378a2..ba59629e7a 100644 --- a/api/get-vertex-builds.html +++ b/api/get-vertex-builds.html @@ -10,7 +10,7 @@ - + diff --git a/api/health-check.html b/api/health-check.html index 989a61bf18..17d91d18f1 100644 --- a/api/health-check.html +++ b/api/health-check.html @@ -10,7 +10,7 @@ - + diff --git a/api/health.html b/api/health.html index 0d90d9cef6..cb63bce1a6 100644 --- a/api/health.html +++ b/api/health.html @@ -10,7 +10,7 @@ - + diff --git a/api/like-component.html b/api/like-component.html index c1296d112a..406792a5f1 100644 --- a/api/like-component.html +++ b/api/like-component.html @@ -10,7 +10,7 @@ - + diff --git a/api/list-files.html b/api/list-files.html index 745eb256d3..f86ca1210d 100644 --- a/api/list-files.html +++ b/api/list-files.html @@ -10,7 +10,7 @@ - + diff --git a/api/list-profile-pictures.html b/api/list-profile-pictures.html index 58bb3221fc..4eb3add156 100644 --- a/api/list-profile-pictures.html +++ b/api/list-profile-pictures.html @@ -10,7 +10,7 @@ - + diff --git a/api/login-to-get-access-token.html b/api/login-to-get-access-token.html index 153b705c01..2259a262fc 100644 --- a/api/login-to-get-access-token.html +++ b/api/login-to-get-access-token.html @@ -10,7 +10,7 @@ - + diff --git a/api/logout.html b/api/logout.html index 894a2b0cf9..cffff5cfaa 100644 --- a/api/logout.html +++ b/api/logout.html @@ -10,7 +10,7 @@ - + diff --git a/api/logs.html b/api/logs.html index 1f31068ef8..17b4cb5fbf 100644 --- a/api/logs.html +++ b/api/logs.html @@ -10,7 +10,7 @@ - + diff --git a/api/patch-user.html b/api/patch-user.html index f4ab164a96..ee6d1b2a1a 100644 --- a/api/patch-user.html +++ b/api/patch-user.html @@ -10,7 +10,7 @@ - + diff --git a/api/post-validate-code.html b/api/post-validate-code.html index f73684b1b8..04a4ffb766 100644 --- a/api/post-validate-code.html +++ b/api/post-validate-code.html @@ -10,7 +10,7 @@ - + diff --git a/api/post-validate-prompt.html b/api/post-validate-prompt.html index 9df72e781e..3799792df3 100644 --- a/api/post-validate-prompt.html +++ b/api/post-validate-prompt.html @@ -10,7 +10,7 @@ - + diff --git a/api/process-1.html b/api/process-1.html index abd9762cc3..177bf67075 100644 --- a/api/process-1.html +++ b/api/process-1.html @@ -10,7 +10,7 @@ - + diff --git a/api/process.html b/api/process.html index 114c68f81e..521066ea25 100644 --- a/api/process.html +++ b/api/process.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-all-users.html b/api/read-all-users.html index 50c7ebfccc..7ff47abf4b 100644 --- a/api/read-all-users.html +++ b/api/read-all-users.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-basic-examples.html b/api/read-basic-examples.html index 15178a6ad2..bee00dcc9f 100644 --- a/api/read-basic-examples.html +++ b/api/read-basic-examples.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-current-user.html b/api/read-current-user.html index 6d390602e3..f51c9e3908 100644 --- a/api/read-current-user.html +++ b/api/read-current-user.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-flow.html b/api/read-flow.html index 8cc25c5389..93ccbd62a0 100644 --- a/api/read-flow.html +++ b/api/read-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-flows.html b/api/read-flows.html index c8b444c9e9..6eec6f1055 100644 --- a/api/read-flows.html +++ b/api/read-flows.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-folder.html b/api/read-folder.html index 8ea7279ac8..b4250b046d 100644 --- a/api/read-folder.html +++ b/api/read-folder.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-folders.html b/api/read-folders.html index 3848a33f00..e28041c08c 100644 --- a/api/read-folders.html +++ b/api/read-folders.html @@ -10,7 +10,7 @@ - + diff --git a/api/read-variables.html b/api/read-variables.html index 3b09a30699..aab96bbecb 100644 --- a/api/read-variables.html +++ b/api/read-variables.html @@ -10,7 +10,7 @@ - + diff --git a/api/refresh-token.html b/api/refresh-token.html index d91504902a..e808e22425 100644 --- a/api/refresh-token.html +++ b/api/refresh-token.html @@ -10,7 +10,7 @@ - + diff --git a/api/reset-password.html b/api/reset-password.html index da21c6cf19..83cce2615b 100644 --- a/api/reset-password.html +++ b/api/reset-password.html @@ -10,7 +10,7 @@ - + diff --git a/api/retrieve-vertices-order.html b/api/retrieve-vertices-order.html index 7487d7f33c..854ea6d645 100644 --- a/api/retrieve-vertices-order.html +++ b/api/retrieve-vertices-order.html @@ -10,7 +10,7 @@ - + diff --git a/api/save-store-api-key.html b/api/save-store-api-key.html index 879c0c69ad..108ba65b78 100644 --- a/api/save-store-api-key.html +++ b/api/save-store-api-key.html @@ -10,7 +10,7 @@ - + diff --git a/api/share-component.html b/api/share-component.html index dc696ec27f..32c4d49a29 100644 --- a/api/share-component.html +++ b/api/share-component.html @@ -10,7 +10,7 @@ - + diff --git a/api/simplified-run-flow.html b/api/simplified-run-flow.html index 1c9146bf86..758a09bb8a 100644 --- a/api/simplified-run-flow.html +++ b/api/simplified-run-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/stream-logs.html b/api/stream-logs.html index 8554b503ad..7797990df9 100644 --- a/api/stream-logs.html +++ b/api/stream-logs.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-flow.html b/api/update-flow.html index a925aca046..3004ee4ad8 100644 --- a/api/update-flow.html +++ b/api/update-flow.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-folder.html b/api/update-folder.html index 68a1782b1b..40d0bbfac5 100644 --- a/api/update-folder.html +++ b/api/update-folder.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-message.html b/api/update-message.html index 83bcb439ec..72dfedf47f 100644 --- a/api/update-message.html +++ b/api/update-message.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-session-id.html b/api/update-session-id.html index 7cf4de1f51..d8878d9548 100644 --- a/api/update-session-id.html +++ b/api/update-session-id.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-shared-component.html b/api/update-shared-component.html index 84e9f5d76d..836ba71586 100644 --- a/api/update-shared-component.html +++ b/api/update-shared-component.html @@ -10,7 +10,7 @@ - + diff --git a/api/update-variable.html b/api/update-variable.html index 2d0ab44477..4264151b45 100644 --- a/api/update-variable.html +++ b/api/update-variable.html @@ -10,7 +10,7 @@ - + diff --git a/api/upload-file-1.html b/api/upload-file-1.html index 28030ee7b1..bff904cc94 100644 --- a/api/upload-file-1.html +++ b/api/upload-file-1.html @@ -10,7 +10,7 @@ - + diff --git a/api/upload-file-2.html b/api/upload-file-2.html index c38f642e95..14cb21b590 100644 --- a/api/upload-file-2.html +++ b/api/upload-file-2.html @@ -10,7 +10,7 @@ - + diff --git a/api/upload-file.html b/api/upload-file.html index 1f2432ffee..55a6e9471f 100644 --- a/api/upload-file.html +++ b/api/upload-file.html @@ -10,7 +10,7 @@ - + diff --git a/api/webhook-run-flow.html b/api/webhook-run-flow.html index 634ec72a06..3ddaa81097 100644 --- a/api/webhook-run-flow.html +++ b/api/webhook-run-flow.html @@ -10,7 +10,7 @@ - + diff --git a/assets/js/22dd74f7.d3969978.js b/assets/js/22dd74f7.d3969978.js new file mode 100644 index 0000000000..f6fcea9139 --- /dev/null +++ b/assets/js/22dd74f7.d3969978.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Langflow","href":"/","docId":"Get-Started/welcome-to-langflow","unlisted":false},{"type":"category","label":"Get Started","items":[{"type":"link","label":"Install Langflow","href":"/get-started-installation","docId":"Get-Started/get-started-installation","unlisted":false},{"type":"link","label":"Quickstart","href":"/get-started-quickstart","docId":"Get-Started/get-started-quickstart","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Starter Projects","items":[{"type":"link","label":"Basic Prompting","href":"/starter-projects-basic-prompting","docId":"Starter-Projects/starter-projects-basic-prompting","unlisted":false},{"type":"link","label":"Blog Writer","href":"/starter-projects-blog-writer","docId":"Starter-Projects/starter-projects-blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/starter-projects-document-qa","docId":"Starter-Projects/starter-projects-document-qa","unlisted":false},{"type":"link","label":"Memory Chatbot","href":"/starter-projects-memory-chatbot","docId":"Starter-Projects/starter-projects-memory-chatbot","unlisted":false},{"type":"link","label":"Simple agent","href":"/starter-projects-simple-agent","docId":"Starter-Projects/starter-projects-simple-agent","unlisted":false},{"type":"link","label":"Vector Store RAG","href":"/starter-projects-vector-store-rag","docId":"Starter-Projects/starter-projects-vector-store-rag","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/starter-projects-sequential-agent","docId":"Starter-Projects/starter-projects-sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/starter-projects-travel-planning-agent","docId":"Starter-Projects/starter-projects-travel-planning-agent","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Workspace","items":[{"type":"link","label":"Workspace concepts","href":"/workspace-overview","docId":"Workspace/workspace-overview","unlisted":false},{"type":"link","label":"API","href":"/workspace-api","docId":"Workspace/workspace-api","unlisted":false},{"type":"link","label":"Logs","href":"/workspace-logs","docId":"Workspace/workspace-logs","unlisted":false},{"type":"link","label":"Playground","href":"/workspace-playground","docId":"Workspace/workspace-playground","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Agents overview","href":"/agents-overview","docId":"Agents/agents-overview","unlisted":false},{"type":"link","label":"Create a problem-solving agent","href":"/agents-tool-calling-agent-component","docId":"Agents/agent-tool-calling-agent-component","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Configuration","items":[{"type":"link","label":"API keys","href":"/configuration-api-keys","docId":"Configuration/configuration-api-keys","unlisted":false},{"type":"link","label":"Authentication","href":"/configuration-authentication","docId":"Configuration/configuration-authentication","unlisted":false},{"type":"link","label":"Auto-saving","href":"/configuration-auto-save","docId":"Configuration/configuration-auto-saving","unlisted":false},{"type":"link","label":"Run Langflow in backend-only mode","href":"/configuration-backend-only","docId":"Configuration/configuration-backend-only","unlisted":false},{"type":"link","label":"Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false},{"type":"link","label":"Global variables","href":"/configuration-global-variables","docId":"Configuration/configuration-global-variables","unlisted":false},{"type":"link","label":"Environment variables","href":"/environment-variables","docId":"Configuration/environment-variables","unlisted":false},{"type":"link","label":"Security best practices","href":"/configuration-security-best-practices","docId":"Configuration/configuration-security-best-practices","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Components","items":[{"type":"link","label":"How to build flows with components","href":"/components-overview","docId":"Components/components-overview","unlisted":false},{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"link","label":"Custom Components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Embedding Models","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Inputs & Outputs","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Loaders","href":"/components-loaders","docId":"Components/components-loaders","unlisted":false},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Memories","href":"/Components/components-memories","docId":"Components/components-memories","unlisted":false},{"type":"link","label":"Models","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Prompts","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false},{"type":"link","label":"RAG","href":"/components-rag","docId":"Components/components-rag","unlisted":false},{"type":"link","label":"Tools","href":"/Components/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Vector Stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Guides","items":[{"type":"link","label":"Chat Memory","href":"/guides-chat-memory","docId":"Guides/guides-chat-memory","unlisted":false},{"type":"link","label":"Data & Message","href":"/guides-data-message","docId":"Guides/guides-data-message","unlisted":false},{"type":"link","label":"\ud83d\udcda New to LLMs?","href":"/guides-new-to-llms","docId":"Guides/guides-new-to-llms","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Deployment","items":[{"type":"link","label":"Docker","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"link","label":"GCP","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"HuggingFace\xa0Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","unlisted":false},{"type":"link","label":"Kubernetes","href":"/deployment-kubernetes","docId":"Deployment/deployment-kubernetes","unlisted":false},{"type":"link","label":"Railway","href":"/deployment-railway","docId":"Deployment/deployment-railway","unlisted":false},{"type":"link","label":"Render","href":"/deployment-render","docId":"Deployment/deployment-render","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Integrations","items":[{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Langfuse","href":"/integrations-langfuse","docId":"Integrations/integrations-langfuse","unlisted":false},{"type":"link","label":"LangSmith","href":"/integrations-langsmith","docId":"Integrations/integrations-langsmith","unlisted":false},{"type":"link","label":"LangWatch","href":"/integrations-langwatch","docId":"Integrations/integrations-langwatch","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Integrate Google OAuth with Langflow","href":"/integrations-setup-google-oauth-langflow","docId":"Integrations/Google/integrations-setup-google-oauth-langflow","unlisted":false},{"type":"link","label":"Integrate Google Cloud Vertex AI with Langflow","href":"/integrations-setup-google-cloud-vertex-ai-langflow","docId":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Notion","items":[{"type":"link","label":"Setup","href":"/integrations/notion/setup","docId":"Integrations/Notion/integrations-notion","unlisted":false},{"type":"link","label":"Notion Conversational Agent","href":"/integrations/notion/notion-agent-conversational","docId":"Integrations/Notion/notion-agent-conversational","unlisted":false},{"type":"link","label":"Notion Meeting Notes Agent","href":"/integrations/notion/notion-agent-meeting-notes","docId":"Integrations/Notion/notion-agent-meeting-notes","unlisted":false}],"collapsed":false,"collapsible":true}],"collapsed":false,"collapsible":true},{"type":"category","label":"Contributing","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Ask for help on the Discussions board","href":"/contributing-github-discussions","docId":"Contributing/contributing-github-discussion-board","unlisted":false},{"type":"link","label":"Request an enhancement or report a bug","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"API Reference","items":[{"type":"link","label":"API Documentation","href":"/api"}],"collapsed":false,"collapsible":true}]},"docs":{"Agents/agent-tool-calling-agent-component":{"id":"Agents/agent-tool-calling-agent-component","title":"Create a problem-solving agent","description":"Developing agents in Langchain is complex.","sidebar":"docs"},"Agents/agents-overview":{"id":"Agents/agents-overview","title":"Agents overview","description":"Agents are AI systems that use LLMs as a brain to analyze problems and select external tools.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Agent components are used to define the behavior and capabilities of AI agents in your flow. Agents can interact with APIs, databases, and other services and use LLMs as a reasoning engine to decide which course to take in your flow.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Custom Components","description":"Custom components are created within Langflow and extend the platform\'s functionality with custom, reusable Python code.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"API Request","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embedding Models","description":"Embeddings models are used to convert text into numerical vectors. These vectors can be used for various tasks such as similarity search, clustering, and classification.","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Inputs & Outputs","description":"This category of components defines where data enters and exits your flow. They dynamically alter the Playground and can be renamed to facilitate building and maintaining your flows.","sidebar":"docs"},"Components/components-loaders":{"id":"Components/components-loaders","title":"Loaders","description":"Loaders are components used to load documents from various sources, such as databases, websites, and local files. They can be used to fetch data from external sources and convert it into a format that can be processed by other components.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"Chat memory components store and retrieve chat messages by session_id.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Models","description":"Model components are used to generate text using language models. These components can be used to generate text for various tasks such as chatbots, content generation, and more.","sidebar":"docs"},"Components/components-overview":{"id":"Components/components-overview","title":"How to build flows with components","description":"A\xa0component\xa0is a single building block within a flow. It consists of inputs, outputs, and parameters that define their functionality. These elements provide a convenient and straightforward way to compose LLM-based applications. Learn more about components and how they work below.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompts","description":"A prompt serves as the input to a language model, comprising multiple components that can be parameterized using prompt templates.","sidebar":"docs"},"Components/components-rag":{"id":"Components/components-rag","title":"RAG","description":"RAG (Retrieval-Augmented Generation) components process a user query by retrieving relevant documents and generating a concise summary that addresses the user\'s question.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"Tool components are used to interact with external services, APIs, and tools. They can be used to search the web, query databases, and perform other tasks.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector Stores","description":"Vector databases are used to store and search for vectors. They can be used to store embeddings, search for similar vectors, and perform other vector operations.","sidebar":"docs"},"Configuration/configuration-api-keys":{"id":"Configuration/configuration-api-keys","title":"API keys","description":"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.","sidebar":"docs"},"Configuration/configuration-authentication":{"id":"Configuration/configuration-authentication","title":"Authentication","description":"The login functionality in Langflow serves to authenticate users and protect sensitive routes in the application.","sidebar":"docs"},"Configuration/configuration-auto-saving":{"id":"Configuration/configuration-auto-saving","title":"Auto-saving","description":"Langflow supports both manual and auto-saving functionality.","sidebar":"docs"},"Configuration/configuration-backend-only":{"id":"Configuration/configuration-backend-only","title":"Run Langflow in backend-only mode","description":"Langflow can run in --backend-only mode to expose a Langflow app as an API endpoint, without running the frontend UI.","sidebar":"docs"},"Configuration/configuration-cli":{"id":"Configuration/configuration-cli","title":"Langflow CLI","description":"The Langflow command line interface (Langflow CLI) is the main interface for managing and running the Langflow server.","sidebar":"docs"},"Configuration/configuration-custom-database":{"id":"Configuration/configuration-custom-database","title":"Configure an external PostgreSQL database","description":"Langflow\'s default database is SQLite, but you can configure Langflow to use PostgreSQL instead."},"Configuration/configuration-global-variables":{"id":"Configuration/configuration-global-variables","title":"Global variables","description":"Global variables let you store and reuse generic input values and credentials across your projects.","sidebar":"docs"},"Configuration/configuration-security-best-practices":{"id":"Configuration/configuration-security-best-practices","title":"Security best practices","description":"This guide outlines security best practices for deploying and managing Langflow.","sidebar":"docs"},"Configuration/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow lets you configure a number of settings using environment variables.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"Join the Langflow Discord server","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the\xa0CustomComponent\xa0class.","sidebar":"docs"},"Contributing/contributing-github-discussion-board":{"id":"Contributing/contributing-github-discussion-board","title":"Ask for help on the Discussions board","description":"If you\'re looking for help with your code, consider posting a question on the Langflow\xa0GitHub Discussions board. The Langflow team cannot provide individual support via email. The team also believes that help is much more valuable if it\'s\xa0shared publicly, so that more people can benefit from it.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Request an enhancement or report a bug","description":"The\xa0Issues page in the Langflow repo is kept up to date with bugs, improvements, and feature requests. Labels are used to help with sorting and discovery of issues of interest. For an overview of the system Langflow uses to tag issues and pull requests, see the Langflow repo\'s labels page.","sidebar":"docs"},"Contributing/contributing-how-to-contribute":{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","sidebar":"docs"},"Contributing/contributing-telemetry":{"id":"Contributing/contributing-telemetry","title":"Telemetry","description":"Langflow uses anonymous telemetry to collect essential usage statistics to enhance functionality and the user experience. This data helps us identify popular features and areas that need improvement, and ensures development efforts align with what you need.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Docker","description":"This guide will help you get LangFlow up and running using Docker and Docker Compose.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"GCP","description":"To deploy Langflow on Google Cloud Platform using Cloud Shell, use the below script.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"HuggingFace\xa0Spaces","description":"HuggingFace Spaces","sidebar":"docs"},"Deployment/deployment-kubernetes":{"id":"Deployment/deployment-kubernetes","title":"Kubernetes","description":"This guide will help you get LangFlow up and running in Kubernetes cluster, including the following steps:","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Railway","description":"Deploy on Railway","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Render","description":"Deploy on Render","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"You can deploy Langflow either locally or as a hosted service with Datastax Langflow.","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Prerequisites","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow is a new, visual framework for building multi-agent and RAG applications. It is open-source, Python-powered, fully customizable, and LLM and vector store agnostic.","sidebar":"docs"},"Guides/guides-chat-memory":{"id":"Guides/guides-chat-memory","title":"Chat Memory","description":"Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate memories for agents to store and recall information as needed.","sidebar":"docs"},"Guides/guides-data-message":{"id":"Guides/guides-data-message","title":"Data & Message","description":"In Langflow, the\xa0Data\xa0and\xa0Message\xa0objects serve as structured, functional representations of data that enhance the capabilities and reliability of the platform.","sidebar":"docs"},"Guides/guides-new-to-llms":{"id":"Guides/guides-new-to-llms","title":"\ud83d\udcda New to LLMs?","description":"Large Language Models, or LLMs, are part of an exciting new world in computing.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow":{"id":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","title":"Integrate Google Cloud Vertex AI with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-oauth-langflow":{"id":"Integrations/Google/integrations-setup-google-oauth-langflow","title":"Integrate Google OAuth with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/integrations-assemblyai":{"id":"Integrations/integrations-assemblyai","title":"AssemblyAI","description":"The AssemblyAI components allow you to apply powerful Speech AI models to your app for tasks like:","sidebar":"docs"},"Integrations/integrations-langfuse":{"id":"Integrations/integrations-langfuse","title":"Langfuse","description":"Langfuse is an observability and analytics platform specifically designed for language models and AI applications.","sidebar":"docs"},"Integrations/integrations-langsmith":{"id":"Integrations/integrations-langsmith","title":"LangSmith","description":"LangSmith is a full-lifecycle DevOps service from LangChain that provides monitoring and observability. To integrate with Langflow, just add your LangChain API key as a Langflow environment variable and you are good to go!","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"938674091aac4d9d9aa4aa6eb5c215b4}","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Setup","description":"To use Notion components in Langflow, you first need to create a Notion integration and configure it with the necessary capabilities. This guide will walk you through the process of setting up a Notion integration and granting it access to your Notion databases.","sidebar":"docs"},"Integrations/Notion/notion-agent-conversational":{"id":"Integrations/Notion/notion-agent-conversational","title":"Notion Conversational Agent","description":"The Notion Conversational Agent is an AI-powered assistant that interacts with your Notion workspace through natural language conversations. This flow performs Notion-related tasks like creating pages, searching for information, and managing content, all through a chat interface.","sidebar":"docs"},"Integrations/Notion/notion-agent-meeting-notes":{"id":"Integrations/Notion/notion-agent-meeting-notes","title":"Notion Meeting Notes Agent","description":"The Notion Agent for Meeting Notes is an AI-powered tool that automatically processes meeting transcripts and updates your Notion workspace. It identifies tasks, action items, and key points from your meetings, then creates new tasks or updates existing ones in Notion without manual input.","sidebar":"docs"},"Starter-Projects/starter-projects-basic-prompting":{"id":"Starter-Projects/starter-projects-basic-prompting","title":"Basic Prompting","description":"Prompts serve as the inputs to a large language model (LLM), acting as the interface between human instructions and computational tasks.","sidebar":"docs"},"Starter-Projects/starter-projects-blog-writer":{"id":"Starter-Projects/starter-projects-blog-writer","title":"Blog Writer","description":"Build a Blog Writer flow for a one-shot application using OpenAI.","sidebar":"docs"},"Starter-Projects/starter-projects-document-qa":{"id":"Starter-Projects/starter-projects-document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with a document loaded from local memory.","sidebar":"docs"},"Starter-Projects/starter-projects-memory-chatbot":{"id":"Starter-Projects/starter-projects-memory-chatbot","title":"Memory Chatbot","description":"This flow extends the\xa0basic prompting\xa0flow to include a chat memory. This makes the AI remember previous user inputs.","sidebar":"docs"},"Starter-Projects/starter-projects-sequential-agent":{"id":"Starter-Projects/starter-projects-sequential-agent","title":"Sequential tasks agent","description":"Build a Sequential Tasks Agent flow for a multi-agent application using multiple Agent components.","sidebar":"docs"},"Starter-Projects/starter-projects-simple-agent":{"id":"Starter-Projects/starter-projects-simple-agent","title":"Simple agent","description":"Build a Simple Agent flow for an agentic application using the Tool-calling agent.","sidebar":"docs"},"Starter-Projects/starter-projects-travel-planning-agent":{"id":"Starter-Projects/starter-projects-travel-planning-agent","title":"Travel planning agent","description":"Build a Travel Planning Agent flow for an agentic application using the multiple Tool-calling agents.","sidebar":"docs"},"Starter-Projects/starter-projects-vector-store-rag":{"id":"Starter-Projects/starter-projects-vector-store-rag","title":"Vector Store RAG","description":"Retrieval Augmented Generation, or RAG, is a pattern for training LLMs on your data and querying it.","sidebar":"docs"},"Workspace/workspace-api":{"id":"Workspace/workspace-api","title":"API","description":"The\xa0API\xa0section presents code templates for integrating your flow into external applications.","sidebar":"docs"},"Workspace/workspace-logs":{"id":"Workspace/workspace-logs","title":"Logs","description":"The\xa0Logs\xa0pane provides a detailed record of all component executions within a workspace. It is designed to help you track actions, debug issues, and understand the flow of data through various components.","sidebar":"docs"},"Workspace/workspace-overview":{"id":"Workspace/workspace-overview","title":"Workspace concepts","description":"The workspace is where you create AI applications by connecting and running components in flows.","sidebar":"docs"},"Workspace/workspace-playground":{"id":"Workspace/workspace-playground","title":"Playground","description":"The\xa0Playground\xa0is a dynamic interface designed for real-time interaction with AIs, allowing users to chat, access memories and monitor inputs and outputs. Here, users can directly prototype and their models, making adjustments and observing different outcomes.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.d3c893ba.js b/assets/js/22dd74f7.d3c893ba.js deleted file mode 100644 index 03f2cec718..0000000000 --- a/assets/js/22dd74f7.d3c893ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Langflow","href":"/","docId":"Get-Started/welcome-to-langflow","unlisted":false},{"type":"category","label":"Get Started","items":[{"type":"link","label":"Install Langflow","href":"/get-started-installation","docId":"Get-Started/get-started-installation","unlisted":false},{"type":"link","label":"Quickstart","href":"/get-started-quickstart","docId":"Get-Started/get-started-quickstart","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Starter Projects","items":[{"type":"link","label":"Basic Prompting","href":"/starter-projects-basic-prompting","docId":"Starter-Projects/starter-projects-basic-prompting","unlisted":false},{"type":"link","label":"Blog Writer","href":"/starter-projects-blog-writer","docId":"Starter-Projects/starter-projects-blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/starter-projects-document-qa","docId":"Starter-Projects/starter-projects-document-qa","unlisted":false},{"type":"link","label":"Memory Chatbot","href":"/starter-projects-memory-chatbot","docId":"Starter-Projects/starter-projects-memory-chatbot","unlisted":false},{"type":"link","label":"Simple agent","href":"/starter-projects-simple-agent","docId":"Starter-Projects/starter-projects-simple-agent","unlisted":false},{"type":"link","label":"Vector Store RAG","href":"/starter-projects-vector-store-rag","docId":"Starter-Projects/starter-projects-vector-store-rag","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/starter-projects-sequential-agent","docId":"Starter-Projects/starter-projects-sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/starter-projects-travel-planning-agent","docId":"Starter-Projects/starter-projects-travel-planning-agent","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Workspace","items":[{"type":"link","label":"Workspace concepts","href":"/workspace-overview","docId":"Workspace/workspace-overview","unlisted":false},{"type":"link","label":"API","href":"/workspace-api","docId":"Workspace/workspace-api","unlisted":false},{"type":"link","label":"Logs","href":"/workspace-logs","docId":"Workspace/workspace-logs","unlisted":false},{"type":"link","label":"Playground","href":"/workspace-playground","docId":"Workspace/workspace-playground","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Agents overview","href":"/agents-overview","docId":"Agents/agents-overview","unlisted":false},{"type":"link","label":"Create a problem-solving agent","href":"/agents-tool-calling-agent-component","docId":"Agents/agent-tool-calling-agent-component","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Configuration","items":[{"type":"link","label":"API keys","href":"/configuration-api-keys","docId":"Configuration/configuration-api-keys","unlisted":false},{"type":"link","label":"Authentication","href":"/configuration-authentication","docId":"Configuration/configuration-authentication","unlisted":false},{"type":"link","label":"Auto-saving","href":"/configuration-auto-save","docId":"Configuration/configuration-auto-saving","unlisted":false},{"type":"link","label":"Run Langflow in backend-only mode","href":"/configuration-backend-only","docId":"Configuration/configuration-backend-only","unlisted":false},{"type":"link","label":"Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false},{"type":"link","label":"Global variables","href":"/configuration-global-variables","docId":"Configuration/configuration-global-variables","unlisted":false},{"type":"link","label":"Environment variables","href":"/environment-variables","docId":"Configuration/environment-variables","unlisted":false},{"type":"link","label":"Security best practices","href":"/configuration-security-best-practices","docId":"Configuration/configuration-security-best-practices","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Components","items":[{"type":"link","label":"How to build flows with components","href":"/components-overview","docId":"Components/components-overview","unlisted":false},{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"link","label":"Custom Components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Embedding Models","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Inputs & Outputs","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Loaders","href":"/components-loaders","docId":"Components/components-loaders","unlisted":false},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Memories","href":"/Components/components-memories","docId":"Components/components-memories","unlisted":false},{"type":"link","label":"Models","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Prompts","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false},{"type":"link","label":"RAG","href":"/components-rag","docId":"Components/components-rag","unlisted":false},{"type":"link","label":"Tools","href":"/Components/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Vector Stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Guides","items":[{"type":"link","label":"Chat Memory","href":"/guides-chat-memory","docId":"Guides/guides-chat-memory","unlisted":false},{"type":"link","label":"Data & Message","href":"/guides-data-message","docId":"Guides/guides-data-message","unlisted":false},{"type":"link","label":"\ud83d\udcda New to LLMs?","href":"/guides-new-to-llms","docId":"Guides/guides-new-to-llms","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Deployment","items":[{"type":"link","label":"Docker","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"link","label":"GCP","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"HuggingFace\xa0Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","unlisted":false},{"type":"link","label":"Kubernetes","href":"/deployment-kubernetes","docId":"Deployment/deployment-kubernetes","unlisted":false},{"type":"link","label":"Railway","href":"/deployment-railway","docId":"Deployment/deployment-railway","unlisted":false},{"type":"link","label":"Render","href":"/deployment-render","docId":"Deployment/deployment-render","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Integrations","items":[{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Langfuse","href":"/integrations-langfuse","docId":"Integrations/integrations-langfuse","unlisted":false},{"type":"link","label":"LangSmith","href":"/integrations-langsmith","docId":"Integrations/integrations-langsmith","unlisted":false},{"type":"link","label":"LangWatch","href":"/integrations-langwatch","docId":"Integrations/integrations-langwatch","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Integrate Google OAuth with Langflow","href":"/integrations-setup-google-oauth-langflow","docId":"Integrations/Google/integrations-setup-google-oauth-langflow","unlisted":false},{"type":"link","label":"Integrate Google Cloud Vertex AI with Langflow","href":"/integrations-setup-google-cloud-vertex-ai-langflow","docId":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"Notion","items":[{"type":"link","label":"Setup","href":"/integrations/notion/setup","docId":"Integrations/Notion/integrations-notion","unlisted":false},{"type":"link","label":"Notion Conversational Agent","href":"/integrations/notion/notion-agent-conversational","docId":"Integrations/Notion/notion-agent-conversational","unlisted":false},{"type":"link","label":"Notion Meeting Notes Agent","href":"/integrations/notion/notion-agent-meeting-notes","docId":"Integrations/Notion/notion-agent-meeting-notes","unlisted":false}],"collapsed":false,"collapsible":true}],"collapsed":false,"collapsible":true},{"type":"category","label":"Contributing","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Ask for help on the Discussions board","href":"/contributing-github-discussions","docId":"Contributing/contributing-github-discussion-board","unlisted":false},{"type":"link","label":"Request an enhancement or report a bug","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":false,"collapsible":true},{"type":"category","label":"API Reference","items":[{"type":"link","label":"API Documentation","href":"/api"}],"collapsed":false,"collapsible":true}]},"docs":{"Agents/agent-tool-calling-agent-component":{"id":"Agents/agent-tool-calling-agent-component","title":"Create a problem-solving agent","description":"Developing agents in Langchain is complex.","sidebar":"docs"},"Agents/agents-overview":{"id":"Agents/agents-overview","title":"Agents overview","description":"Agents are AI systems that use LLMs as a brain to analyze problems and select external tools.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Agent components are used to define the behavior and capabilities of AI agents in your flow. Agents can interact with APIs, databases, and other services and use LLMs as a reasoning engine to decide which course to take in your flow.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Custom Components","description":"Custom components are created within Langflow and extend the platform\'s functionality with custom, resusable Python code.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"API Request","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embedding Models","description":"Embeddings models are used to convert text into numerical vectors. These vectors can be used for various tasks such as similarity search, clustering, and classification.","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Inputs & Outputs","description":"This category of components defines where data enters and exits your flow. They dynamically alter the Playground and can be renamed to facilitate building and maintaining your flows.","sidebar":"docs"},"Components/components-loaders":{"id":"Components/components-loaders","title":"Loaders","description":"Loaders are components used to load documents from various sources, such as databases, websites, and local files. They can be used to fetch data from external sources and convert it into a format that can be processed by other components.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"Chat memory components store and retrieve chat messages by session_id.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Models","description":"Model components are used to generate text using language models. These components can be used to generate text for various tasks such as chatbots, content generation, and more.","sidebar":"docs"},"Components/components-overview":{"id":"Components/components-overview","title":"How to build flows with components","description":"A\xa0component\xa0is a single building block within a flow. It consists of inputs, outputs, and parameters that define their functionality. These elements provide a convenient and straightforward way to compose LLM-based applications. Learn more about components and how they work below.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompts","description":"A prompt serves as the input to a language model, comprising multiple components that can be parameterized using prompt templates.","sidebar":"docs"},"Components/components-rag":{"id":"Components/components-rag","title":"RAG","description":"RAG (Retrieval-Augmented Generation) components process a user query by retrieving relevant documents and generating a concise summary that addresses the user\'s question.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"Tool components are used to interact with external services, APIs, and tools. They can be used to search the web, query databases, and perform other tasks.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector Stores","description":"Vector databases are used to store and search for vectors. They can be used to store embeddings, search for similar vectors, and perform other vector operations.","sidebar":"docs"},"Configuration/configuration-api-keys":{"id":"Configuration/configuration-api-keys","title":"API keys","description":"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.","sidebar":"docs"},"Configuration/configuration-authentication":{"id":"Configuration/configuration-authentication","title":"Authentication","description":"The login functionality in Langflow serves to authenticate users and protect sensitive routes in the application.","sidebar":"docs"},"Configuration/configuration-auto-saving":{"id":"Configuration/configuration-auto-saving","title":"Auto-saving","description":"Langflow supports both manual and auto-saving functionality.","sidebar":"docs"},"Configuration/configuration-backend-only":{"id":"Configuration/configuration-backend-only","title":"Run Langflow in backend-only mode","description":"Langflow can run in --backend-only mode to expose a Langflow app as an API endpoint, without running the frontend UI.","sidebar":"docs"},"Configuration/configuration-cli":{"id":"Configuration/configuration-cli","title":"Langflow CLI","description":"The Langflow command line interface (Langflow CLI) is the main interface for managing and running the Langflow server.","sidebar":"docs"},"Configuration/configuration-custom-database":{"id":"Configuration/configuration-custom-database","title":"Configure an external PostgreSQL database","description":"Langflow\'s default database is SQLite, but you can configure Langflow to use PostgreSQL instead."},"Configuration/configuration-global-variables":{"id":"Configuration/configuration-global-variables","title":"Global variables","description":"Global variables let you store and reuse generic input values and credentials across your projects.","sidebar":"docs"},"Configuration/configuration-security-best-practices":{"id":"Configuration/configuration-security-best-practices","title":"Security best practices","description":"This guide outlines security best practices for deploying and managing Langflow.","sidebar":"docs"},"Configuration/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow lets you configure a number of settings using environment variables.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"Join the Langflow Discord server","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the\xa0CustomComponent\xa0class.","sidebar":"docs"},"Contributing/contributing-github-discussion-board":{"id":"Contributing/contributing-github-discussion-board","title":"Ask for help on the Discussions board","description":"If you\'re looking for help with your code, consider posting a question on the Langflow\xa0GitHub Discussions board. The Langflow team cannot provide individual support via email. The team also believes that help is much more valuable if it\'s\xa0shared publicly, so that more people can benefit from it.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Request an enhancement or report a bug","description":"The\xa0Issues page in the Langflow repo is kept up to date with bugs, improvements, and feature requests. Labels are used to help with sorting and discovery of issues of interest. For an overview of the system Langflow uses to tag issues and pull requests, see the Langflow repo\'s labels page.","sidebar":"docs"},"Contributing/contributing-how-to-contribute":{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","sidebar":"docs"},"Contributing/contributing-telemetry":{"id":"Contributing/contributing-telemetry","title":"Telemetry","description":"Langflow uses anonymous telemetry to collect essential usage statistics to enhance functionality and the user experience. This data helps us identify popular features and areas that need improvement, and ensures development efforts align with what you need.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Docker","description":"This guide will help you get LangFlow up and running using Docker and Docker Compose.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"GCP","description":"To deploy Langflow on Google Cloud Platform using Cloud Shell, use the below script.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"HuggingFace\xa0Spaces","description":"HuggingFace Spaces","sidebar":"docs"},"Deployment/deployment-kubernetes":{"id":"Deployment/deployment-kubernetes","title":"Kubernetes","description":"This guide will help you get LangFlow up and running in Kubernetes cluster, including the following steps:","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Railway","description":"Deploy on Railway","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Render","description":"Deploy on Render","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"You can deploy Langflow either locally or as a hosted service with Datastax Langflow.","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Prerequisites","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow is a new, visual framework for building multi-agent and RAG applications. It is open-source, Python-powered, fully customizable, and LLM and vector store agnostic.","sidebar":"docs"},"Guides/guides-chat-memory":{"id":"Guides/guides-chat-memory","title":"Chat Memory","description":"Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate memories for agents to store and recall information as needed.","sidebar":"docs"},"Guides/guides-data-message":{"id":"Guides/guides-data-message","title":"Data & Message","description":"In Langflow, the\xa0Data\xa0and\xa0Message\xa0objects serve as structured, functional representations of data that enhance the capabilities and reliability of the platform.","sidebar":"docs"},"Guides/guides-new-to-llms":{"id":"Guides/guides-new-to-llms","title":"\ud83d\udcda New to LLMs?","description":"Large Language Models, or LLMs, are part of an exciting new world in computing.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow":{"id":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","title":"Integrate Google Cloud Vertex AI with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-oauth-langflow":{"id":"Integrations/Google/integrations-setup-google-oauth-langflow","title":"Integrate Google OAuth with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/integrations-assemblyai":{"id":"Integrations/integrations-assemblyai","title":"AssemblyAI","description":"The AssemblyAI components allow you to apply powerful Speech AI models to your app for tasks like:","sidebar":"docs"},"Integrations/integrations-langfuse":{"id":"Integrations/integrations-langfuse","title":"Langfuse","description":"Langfuse is an observability and analytics platform specifically designed for language models and AI applications.","sidebar":"docs"},"Integrations/integrations-langsmith":{"id":"Integrations/integrations-langsmith","title":"LangSmith","description":"LangSmith is a full-lifecycle DevOps service from LangChain that provides monitoring and observability. To integrate with Langflow, just add your LangChain API key as a Langflow environment variable and you are good to go!","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"938674091aac4d9d9aa4aa6eb5c215b4}","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Setup","description":"To use Notion components in Langflow, you first need to create a Notion integration and configure it with the necessary capabilities. This guide will walk you through the process of setting up a Notion integration and granting it access to your Notion databases.","sidebar":"docs"},"Integrations/Notion/notion-agent-conversational":{"id":"Integrations/Notion/notion-agent-conversational","title":"Notion Conversational Agent","description":"The Notion Conversational Agent is an AI-powered assistant that interacts with your Notion workspace through natural language conversations. This flow performs Notion-related tasks like creating pages, searching for information, and managing content, all through a chat interface.","sidebar":"docs"},"Integrations/Notion/notion-agent-meeting-notes":{"id":"Integrations/Notion/notion-agent-meeting-notes","title":"Notion Meeting Notes Agent","description":"The Notion Agent for Meeting Notes is an AI-powered tool that automatically processes meeting transcripts and updates your Notion workspace. It identifies tasks, action items, and key points from your meetings, then creates new tasks or updates existing ones in Notion without manual input.","sidebar":"docs"},"Starter-Projects/starter-projects-basic-prompting":{"id":"Starter-Projects/starter-projects-basic-prompting","title":"Basic Prompting","description":"Prompts serve as the inputs to a large language model (LLM), acting as the interface between human instructions and computational tasks.","sidebar":"docs"},"Starter-Projects/starter-projects-blog-writer":{"id":"Starter-Projects/starter-projects-blog-writer","title":"Blog Writer","description":"Build a Blog Writer flow for a one-shot application using OpenAI.","sidebar":"docs"},"Starter-Projects/starter-projects-document-qa":{"id":"Starter-Projects/starter-projects-document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with a document loaded from local memory.","sidebar":"docs"},"Starter-Projects/starter-projects-memory-chatbot":{"id":"Starter-Projects/starter-projects-memory-chatbot","title":"Memory Chatbot","description":"This flow extends the\xa0basic prompting\xa0flow to include a chat memory. This makes the AI remember previous user inputs.","sidebar":"docs"},"Starter-Projects/starter-projects-sequential-agent":{"id":"Starter-Projects/starter-projects-sequential-agent","title":"Sequential tasks agent","description":"Build a Sequential Tasks Agent flow for a multi-agent application using multiple Agent components.","sidebar":"docs"},"Starter-Projects/starter-projects-simple-agent":{"id":"Starter-Projects/starter-projects-simple-agent","title":"Simple agent","description":"Build a Simple Agent flow for an agentic application using the Tool-calling agent.","sidebar":"docs"},"Starter-Projects/starter-projects-travel-planning-agent":{"id":"Starter-Projects/starter-projects-travel-planning-agent","title":"Travel planning agent","description":"Build a Travel Planning Agent flow for an agentic application using the multiple Tool-calling agents.","sidebar":"docs"},"Starter-Projects/starter-projects-vector-store-rag":{"id":"Starter-Projects/starter-projects-vector-store-rag","title":"Vector Store RAG","description":"Retrieval Augmented Generation, or RAG, is a pattern for training LLMs on your data and querying it.","sidebar":"docs"},"Workspace/workspace-api":{"id":"Workspace/workspace-api","title":"API","description":"The\xa0API\xa0section presents code templates for integrating your flow into external applications.","sidebar":"docs"},"Workspace/workspace-logs":{"id":"Workspace/workspace-logs","title":"Logs","description":"The\xa0Logs\xa0pane provides a detailed record of all component executions within a workspace. It is designed to help you track actions, debug issues, and understand the flow of data through various components.","sidebar":"docs"},"Workspace/workspace-overview":{"id":"Workspace/workspace-overview","title":"Workspace concepts","description":"The workspace is where you create AI applications by connecting and running components in flows.","sidebar":"docs"},"Workspace/workspace-playground":{"id":"Workspace/workspace-playground","title":"Playground","description":"The\xa0Playground\xa0is a dynamic interface designed for real-time interaction with AIs, allowing users to chat, access memories and monitor inputs and outputs. Here, users can directly prototype and their models, making adjustments and observing different outcomes.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/873ebc27.2c03f163.js b/assets/js/873ebc27.2c03f163.js deleted file mode 100644 index e63384e97a..0000000000 --- a/assets/js/873ebc27.2c03f163.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5572],{82511:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>a,assets:()=>i,chCodeConfig:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>y});var n=e(74848),s=e(28453),r=e(24754);const l={title:"Custom Components",sidebar_position:8,slug:"/components-custom-components"},c="Custom Components",p={id:"Components/components-custom-components",title:"Custom Components",description:"Custom components are created within Langflow and extend the platform's functionality with custom, resusable Python code.",source:"@site/docs/Components/components-custom-components.md",sourceDirName:"Components",slug:"/components-custom-components",permalink:"/components-custom-components",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Custom Components",sidebar_position:8,slug:"/components-custom-components"},sidebar:"docs",previous:{title:"Agents",permalink:"/components-agents"},next:{title:"Data",permalink:"/components-data"}},i={},a={annotations:r.hk,Code:r.Cy},d={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},y=[{value:"How to Create Custom Components",id:"how-to-create-custom-components",level:2},{value:"Add inputs and modify output methods",id:"add-inputs-and-modify-output-methods",level:2},{value:"Input Types",id:"3815589831f24ab792328ed233c8b00d",level:2},{value:"HandleInput",id:"fb06c48a326043ffa46badc1ab3ba467",level:3},{value:"DataInput",id:"0e1dcb768e38487180d720b0884a90f5",level:3},{value:"StrInput",id:"4ec6e68ad9ab4cd194e8e607bc5b3411",level:3},{value:"MessageInput",id:"9292ac0105e14177af5eff2131b9c71b",level:3},{value:"MessageTextInput",id:"5511f5e32b944b4e973379a6bd5405e4",level:3},{value:"MultilineInput",id:"e6d8315b0fb44a2fb8c62c3f3184bbe9",level:3},{value:"SecretStrInput",id:"2283c13aa5f745b8b0009f7d40e59419",level:3},{value:"IntInput",id:"612680db6578451daef695bd19827a56",level:3},{value:"FloatInput",id:"a15e1fdae15b49fc9bfbf38f8bd7b203",level:3},{value:"BoolInput",id:"3083671e0e7f4390a03396485114be66",level:3},{value:"NestedDictInput",id:"2866fc4018e743d8a45afde53f1e57be",level:3},{value:"DictInput",id:"daa2c2398f694ec199b425e2ed4bcf93",level:3},{value:"DropdownInput",id:"14dcdef11bab4d3f8127eaf2e36a77b9",level:3},{value:"FileInput",id:"73e6377dc5f446f39517a558a1291410",level:3},{value:"Generic Input",id:"278e2027493e45b68746af0a5b6c06f6",level:3},{value:"Create a Custom Component with Generic Input",id:"create-a-custom-component-with-generic-input",level:2},{value:"Create a Custom Component with Multiple Outputs",id:"6f225be8a142450aa19ee8e46a3b3c8c",level:2},{value:"Special Operations",id:"special-operations",level:2},{value:"Contribute Custom Components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function F(o){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...o.components};return a||h("CH",!1),a.Code||h("CH.Code",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.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,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"custom-components",children:"Custom Components"})}),"\n",(0,n.jsx)(t.p,{children:"Custom components are created within Langflow and extend the platform's functionality with custom, resusable Python code."}),"\n",(0,n.jsxs)(t.p,{children:["Since Langflow operates with Python behind the scenes, you can implement any Python function within a Custom Component. This means you can leverage the power of libraries such as Pandas, Scikit-learn, Numpy, and thousands of other packages to create components that handle data processing in unlimited ways. You can use any type as long as the type is properly annotated in the output methods (e.g.,\xa0",(0,n.jsx)(t.code,{children:"> list[int]"}),")."]}),"\n",(0,n.jsx)(t.p,{children:"Custom Components create reusable and configurable components to enhance the capabilities of Langflow, making it a powerful tool for developing complex processing between user and AI messages."}),"\n",(0,n.jsx)(t.h2,{id:"how-to-create-custom-components",children:"How to Create Custom Components"}),"\n",(0,n.jsx)(t.p,{children:"Creating custom components in Langflow involves creating a Python class that defines the component's functionality, inputs, and outputs.\nThe default code provides a working structure for your custom component."}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# from langflow.field_typing import Data",props:{style:{color:"#8B949E"}}}]},{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:" MessageTextInput, 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",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"CustomComponent",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:'"Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Use as a template to create your own component."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.langflow.org/components/custom"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"custom_components"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CustomComponent"',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:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello, World!"',props:{style:{color:"#A5D6FF"}}},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_output"',props:{style:{color:"#A5D6FF"}}},{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_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"You can create your class in your favorite text editor outside of Langflow and paste it in later, or just follow along in the code pane."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["In Langflow, from under ",(0,n.jsx)(t.strong,{children:"Helpers"}),", drag a ",(0,n.jsx)(t.strong,{children:"Custom Component"})," into the workspace."]}),"\n",(0,n.jsx)(t.li,{children:"Open the component's code pane."}),"\n",(0,n.jsxs)(t.li,{children:["Import dependencies.\nYour custom component inherits from the langflow ",(0,n.jsx)(t.code,{children:"Component"})," class so you need to include it."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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:" MessageTextInput, 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",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"4",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Define the Class"}),": Start by defining a Python class that inherits from\xa0",(0,n.jsx)(t.code,{children:"Component"}),". This class will encapsulate the functionality of your custom component."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"CustomComponent",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:'"Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Use as a template to create your own component."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.langflow.org/components/custom"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"custom_components"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CustomComponent"',props:{style:{color:"#A5D6FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"5",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Specify Inputs and Outputs"}),": Use Langflow's input and output classes to define the inputs and outputs of your component. They should be declared as class attributes."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello, World!"',props:{style:{color:"#A5D6FF"}}},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_output"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"6",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Implement Output Methods"}),": Implement\xa0methods for each output, which contains the logic of your component. These methods can access input values using\xa0",(0,n.jsx)(t.code,{children:"self."})," , return processed values and define what to be displayed in the component with the\xa0",(0,n.jsx)(t.code,{children:"self.status"}),"\xa0attribute."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"7",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Use Proper Annotations"}),": Ensure that output methods are properly annotated with their types. Langflow uses these annotations to validate and handle data correctly. For example, this method is annotated to output ",(0,n.jsx)(t.code,{children:"Data"}),"."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"8",children:["\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Check & Save"})," to confirm your component works.\nYou now have an operational custom component."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"add-inputs-and-modify-output-methods",children:"Add inputs and modify output methods"}),"\n",(0,n.jsx)(t.p,{children:"This code defines a custom component that accepts 5 inputs and outputs a Message."}),"\n",(0,n.jsxs)(t.p,{children:["Copy and paste it into the Custom Component code pane and click ",(0,n.jsx)(t.strong,{children:"Check & Save."})]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, MultilineInput, SecretStrInput, IntInput, DropdownInput",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, Input",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema.message ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Message",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCustomComponent",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 Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"An example of a custom component with various input types."',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:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"username"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Username"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your username."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" SecretStrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"password"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Password"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your password."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{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:'"special_message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"special_message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter a special message."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"age"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Age"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your age."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{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:'"gender"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Gender"',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:'"Male"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Female"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Other"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Select your gender."',props:{style:{color:"#A5D6FF"}}}]},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Result"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"result"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_inputs"',props:{style:{color:"#A5D6FF"}}},{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:"process_inputs",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Process the user inputs and return a Message object.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Returns:",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Message: A Message object containing the processed information.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed_text ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"User ',props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".username",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" (Age: ",props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".age",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:", Gender: ",props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".gender",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:') "',props:{style:{color:"#A5D6FF"}}},{content:" \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" f",props:{style:{color:"#FF7B72"}}},{content:'"sent the following special message: ',props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".special_message",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{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:"processed_text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"AttributeError ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=f",props:{style:{color:"#FF7B72"}}},{content:'"Error processing inputs: ',props:{style:{color:"#A5D6FF"}}},{content:"{str",props:{style:{color:"#79C0FF"}}},{content:"(e)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.p,{children:["Since the component outputs a ",(0,n.jsx)(t.code,{children:"Message"}),", you can wire it into a chat and pass messages to yourself."]}),"\n",(0,n.jsxs)(t.p,{children:["Your Custom Component accepts the Chat Input message through ",(0,n.jsx)(t.code,{children:"MessageTextInput"}),", fills in the variables with the ",(0,n.jsx)(t.code,{children:"process_inputs"})," method, and finally passes the message ",(0,n.jsx)(t.code,{children:"User Username (Age: 49, Gender: Male) sent the following special message: Hello!"})," to Chat Output."]}),"\n",(0,n.jsx)(t.p,{children:"By defining inputs this way, Langflow can automatically handle the validation and display of these fields in the user interface, making it easier to create robust and user-friendly custom components."}),"\n",(0,n.jsxs)(t.p,{children:["All of the types detailed above derive from a general class that can also be accessed through the generic\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class."]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["Use ",(0,n.jsx)(t.code,{children:"MessageInput"})," to get the entire Message object instead of just the text."]})}),"\n",(0,n.jsx)(t.h2,{id:"3815589831f24ab792328ed233c8b00d",children:"Input Types"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.p,{children:"Langflow provides several higher-level input types to simplify the creation of custom components. These input types standardize how inputs are defined, validated, and used. Here\u2019s a guide on how to use these inputs and their primary purposes:"}),"\n",(0,n.jsx)(t.h3,{id:"fb06c48a326043ffa46badc1ab3ba467",children:(0,n.jsx)(t.strong,{children:"HandleInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input that has a handle to a specific type (e.g.,\xa0",(0,n.jsx)(t.code,{children:"BaseLanguageModel"}),",\xa0",(0,n.jsx)(t.code,{children:"BaseRetriever"}),", etc.)."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Useful for connecting to specific component types in a flow."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"0e1dcb768e38487180d720b0884a90f5",children:(0,n.jsx)(t.strong,{children:"DataInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input that receives a\xa0",(0,n.jsx)(t.code,{children:"Data"}),"\xa0object."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Ideal for components that process or manipulate data objects."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Data"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"4ec6e68ad9ab4cd194e8e607bc5b3411",children:(0,n.jsx)(t.strong,{children:"StrInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a standard string input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for any text input where the user needs to provide a string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"9292ac0105e14177af5eff2131b9c71b",children:(0,n.jsx)(t.strong,{children:"MessageInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input field specifically for\xa0",(0,n.jsx)(t.code,{children:"Message"}),"\xa0objects."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used in components that handle or process messages."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Message"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"5511f5e32b944b4e973379a6bd5405e4",children:(0,n.jsx)(t.strong,{children:"MessageTextInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a text input for messages."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Suitable for components that need to extract text from message objects."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Message"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"e6d8315b0fb44a2fb8c62c3f3184bbe9",children:(0,n.jsx)(t.strong,{children:"MultilineInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a text field that supports multiple lines."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Ideal for longer text inputs where the user might need to write extended text."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"multiline=True"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"2283c13aa5f745b8b0009f7d40e59419",children:(0,n.jsx)(t.strong,{children:"SecretStrInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a password input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for sensitive text inputs where the input should be hidden (e.g., passwords, API keys)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"password=True"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0Does not accept input types, meaning it has no input handles for previous nodes/components to connect to it."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"612680db6578451daef695bd19827a56",children:(0,n.jsx)(t.strong,{children:"IntInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an integer input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for numeric inputs where the value should be an integer."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Integer"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"a15e1fdae15b49fc9bfbf38f8bd7b203",children:(0,n.jsx)(t.strong,{children:"FloatInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a float input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for numeric inputs where the value should be a floating-point number."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Float"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"3083671e0e7f4390a03396485114be66",children:(0,n.jsx)(t.strong,{children:"BoolInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a boolean input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for true/false or yes/no type inputs."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Boolean"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"2866fc4018e743d8a45afde53f1e57be",children:(0,n.jsx)(t.strong,{children:"NestedDictInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an input field for nested dictionaries."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for more complex data structures where the input needs to be a dictionary."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["NestedDict"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"daa2c2398f694ec199b425e2ed4bcf93",children:(0,n.jsx)(t.strong,{children:"DictInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an input field for dictionaries."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Suitable for inputs that require a dictionary format."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Dict"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"14dcdef11bab4d3f8127eaf2e36a77b9",children:(0,n.jsx)(t.strong,{children:"DropdownInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a dropdown input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used where the user needs to select from a predefined list of options."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"options"}),"\xa0to define the list of selectable options."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"73e6377dc5f446f39517a558a1291410",children:(0,n.jsx)(t.strong,{children:"FileInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a file input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used to upload files."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"file_types"}),"\xa0to specify the types of files that can be uploaded."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["File"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"278e2027493e45b68746af0a5b6c06f6",children:"Generic Input"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["Langflow offers native input types, but you can use any type as long as they are properly annotated in the output methods (e.g.,\xa0",(0,n.jsx)(t.code,{children:"-> list[int]"}),")."]}),"\n",(0,n.jsxs)(t.p,{children:["The\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class is highly customizable, allowing you to specify a wide range of attributes for each input field. It has several attributes that can be customized:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"field_type"}),": Specifies the type of field (e.g.,\xa0",(0,n.jsx)(t.code,{children:"str"}),",\xa0",(0,n.jsx)(t.code,{children:"int"}),"). Default is\xa0",(0,n.jsx)(t.code,{children:"str"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"required"}),": Boolean indicating if the field is required. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"placeholder"}),": Placeholder text for the input field. Default is an empty string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"is_list"}),": Boolean indicating if the field should accept a list of values. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"show"}),": Boolean indicating if the field should be shown. Default is\xa0",(0,n.jsx)(t.code,{children:"True"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"multiline"}),": Boolean indicating if the field should allow multi-line input. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"value"}),": Default value for the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"file_types"}),": List of accepted file types (for file inputs). Default is an empty list."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"file_path"}),": File path if the field is a file input. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"password"}),": Boolean indicating if the field is a password. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"options"}),": List of options for the field (for dropdowns). Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"name"}),": Name of the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"display_name"}),": Display name for the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"advanced"}),": Boolean indicating if the field is an advanced parameter. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"input_types"}),": List of accepted input types. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"dynamic"}),": Boolean indicating if the field is dynamic. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"info"}),": Additional information or tooltip for the input field. Default is an empty string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"real_time_refresh"}),": Boolean indicating if the field should refresh in real-time. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"refresh_button"}),": Boolean indicating if the field should have a refresh button. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"refresh_button_text"}),": Text for the refresh button. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"range_spec"}),": Range specification for numeric fields. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"load_from_db"}),": Boolean indicating if the field should load from the database. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"title_case"}),": Boolean indicating if the display name should be in title case. Default is\xa0",(0,n.jsx)(t.code,{children:"True"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"create-a-custom-component-with-generic-input",children:"Create a Custom Component with Generic Input"}),"\n",(0,n.jsxs)(t.p,{children:["Here is an example of how to define inputs for a component using the\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class."]}),"\n",(0,n.jsxs)(t.p,{children:["Copy and paste it into the Custom Component code pane and click ",(0,n.jsx)(t.strong,{children:"Check & Save."})]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Input, Output",props:{style:{color:"#C9D1D9"}}}]},{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.field_typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema.message ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Message",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Dict, Any",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"TextAnalyzerComponent",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:'"Text Analyzer"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Analyzes input text and provides basic statistics."',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:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" placeholder",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter text to analyze"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" multiline",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The text you want to analyze."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_types",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Text"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"include_word_count"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Include Word Count"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"bool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Whether to include word count in the analysis."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"perform_sentiment_analysis"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Perform Sentiment Analysis"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"bool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Whether to perform basic sentiment analysis."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Analysis Results"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"results"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"analyze_text"',props:{style:{color:"#A5D6FF"}}},{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:"analyze_text",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Extract text from the Message object",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"isinstance",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text, Message):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text.text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "character_count"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"len",props:{style:{color:"#79C0FF"}}},{content:"(text),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "sentence_count"',props:{style:{color:"#A5D6FF"}}},{content:": text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'.'",props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"+",props:{style:{color:"#FF7B72"}}},{content:" text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'!'",props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"+",props:{style:{color:"#FF7B72"}}},{content:" text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'?'",props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".include_word_count:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results[",props:{style:{color:"#C9D1D9"}}},{content:'"word_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"len",props:{style:{color:"#79C0FF"}}},{content:"(text.split())",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".perform_sentiment_analysis:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Basic sentiment analysis",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" text.lower()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:'"happy" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'"good" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"positive"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" elif ",props:{style:{color:"#FF7B72"}}},{content:'"sad" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'"bad" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"negative"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"neutral"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results[",props:{style:{color:"#C9D1D9"}}},{content:'"sentiment"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" sentiment",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Convert the results dictionary to a formatted string",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" formatted_results ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:".join([",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"key",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:": ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"value",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" key, value ",props:{style:{color:"#C9D1D9"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" results.items()])",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Return a Message object",props:{style:{color:"#8B949E"}}}]},{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:"formatted_results)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Define how to use the inputs and outputs",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"component ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" TextAnalyzerComponent()",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"In this custom component:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"input_text"})," input is a required multi-line text field that accepts a Message object or a string. It's used to provide the text for analysis."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"include_word_count"})," input is an optional boolean field. When set to True, it adds a word count to the analysis results."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"perform_sentiment_analysis"})," input is an optional boolean field. When set to True, it triggers a basic sentiment analysis of the input text."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"The component performs basic text analysis, including character count and sentence count (based on punctuation marks). If word count is enabled, it splits the text and counts the words. If sentiment analysis is enabled, it performs a simple keyword-based sentiment classification (positive, negative, or neutral)."}),"\n",(0,n.jsxs)(t.p,{children:["Since the component inputs and outputs a ",(0,n.jsx)(t.code,{children:"Message"}),", you can wire the component into a chat and see how the basic custom component logic interacts with your input."]}),"\n",(0,n.jsx)(t.h2,{id:"6f225be8a142450aa19ee8e46a3b3c8c",children:"Create a Custom Component with Multiple Outputs"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.p,{children:"In Langflow, custom components can have multiple outputs. Each output can be associated with a specific method in the component, allowing you to define distinct behaviors for each output path. This feature is particularly useful when you want to route data based on certain conditions or process it in multiple ways."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Definition of Outputs"}),": Each output is defined in the\xa0",(0,n.jsx)(t.code,{children:"outputs"}),"\xa0list of the component. Each output is associated with a display name, an internal name, and a method that gets called to generate the output."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Output Methods"}),": The methods associated with outputs are responsible for generating the data for that particular output. These methods are called when the component is executed, and each method can independently produce its result."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This example component has two outputs:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"process_data"}),": Processes the input text (e.g., converts it to uppercase) and returns it."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"get_processing_function"}),": Returns the\xa0",(0,n.jsx)(t.code,{children:"process_data"}),"\xa0method itself to be reused in composition."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Callable",props:{style:{color:"#C9D1D9"}}}]},{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.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput",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:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.field_typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DualOutputComponent",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:'"Dual Output"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Processes input text and returns both the result and the processing function."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"double-arrow"',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:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The text input to be processed."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{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"}}},{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:'"Processing Function"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processing_function"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"get_processing_function"',props:{style:{color:"#A5D6FF"}}},{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:"process_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Text:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Process the input text (e.g., convert to uppercase)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text.upper()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" processed",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" processed",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"get_processing_function",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Callable[[], Text]:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Return the processing function itself",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".process_data",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"This example shows how to define multiple outputs in a custom component. The first output returns the processed data, while the second output returns the processing function itself."}),"\n",(0,n.jsxs)(t.p,{children:["The\xa0",(0,n.jsx)(t.code,{children:"processing_function"}),"\xa0output can be used in scenarios where the function itself is needed for further processing or dynamic flow control. Notice how both outputs are properly annotated with their respective types, ensuring clarity and type safety."]}),"\n",(0,n.jsx)(t.h2,{id:"special-operations",children:"Special Operations"}),"\n",(0,n.jsx)(t.p,{children:"Advanced methods and attributes offer additional control and functionality. Understanding how to leverage these can enhance your custom components' capabilities."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.inputs"}),": Access all defined inputs. Useful when an output method needs to interact with multiple inputs."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.outputs"}),": Access all defined outputs. This is particularly useful if an output function needs to trigger another output function."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.status"}),": Use this to update the component's status or intermediate results. It helps track the component's internal state or store temporary data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.graph.flow_id"}),": Retrieve the flow ID, useful for maintaining context or debugging."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:'self.stop("output_name")'}),": Use this method within an output function to prevent data from being sent through other components. This method stops next component execution and is particularly useful for specific operations where a component should stop from running based on specific conditions."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute Custom Components to Langflow"}),"\n",(0,n.jsxs)(t.p,{children:["See ",(0,n.jsx)(t.a,{href:"/contributing-how-to-contribute#submitting-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function u(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,n.jsx)(t,{...o,children:(0,n.jsx)(F,{...o})}):F(o)}function h(o,t){throw new Error("Expected "+(t?"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/873ebc27.7b5d4ffc.js b/assets/js/873ebc27.7b5d4ffc.js new file mode 100644 index 0000000000..7160530767 --- /dev/null +++ b/assets/js/873ebc27.7b5d4ffc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5572],{82511:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>a,assets:()=>i,chCodeConfig:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>y});var n=e(74848),s=e(28453),r=e(24754);const l={title:"Custom Components",sidebar_position:8,slug:"/components-custom-components"},c="Custom Components",p={id:"Components/components-custom-components",title:"Custom Components",description:"Custom components are created within Langflow and extend the platform's functionality with custom, reusable Python code.",source:"@site/docs/Components/components-custom-components.md",sourceDirName:"Components",slug:"/components-custom-components",permalink:"/components-custom-components",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Custom Components",sidebar_position:8,slug:"/components-custom-components"},sidebar:"docs",previous:{title:"Agents",permalink:"/components-agents"},next:{title:"Data",permalink:"/components-data"}},i={},a={annotations:r.hk,Code:r.Cy},d={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},y=[{value:"How to Create Custom Components",id:"how-to-create-custom-components",level:2},{value:"Add inputs and modify output methods",id:"add-inputs-and-modify-output-methods",level:2},{value:"Input Types",id:"3815589831f24ab792328ed233c8b00d",level:2},{value:"HandleInput",id:"fb06c48a326043ffa46badc1ab3ba467",level:3},{value:"DataInput",id:"0e1dcb768e38487180d720b0884a90f5",level:3},{value:"StrInput",id:"4ec6e68ad9ab4cd194e8e607bc5b3411",level:3},{value:"MessageInput",id:"9292ac0105e14177af5eff2131b9c71b",level:3},{value:"MessageTextInput",id:"5511f5e32b944b4e973379a6bd5405e4",level:3},{value:"MultilineInput",id:"e6d8315b0fb44a2fb8c62c3f3184bbe9",level:3},{value:"SecretStrInput",id:"2283c13aa5f745b8b0009f7d40e59419",level:3},{value:"IntInput",id:"612680db6578451daef695bd19827a56",level:3},{value:"FloatInput",id:"a15e1fdae15b49fc9bfbf38f8bd7b203",level:3},{value:"BoolInput",id:"3083671e0e7f4390a03396485114be66",level:3},{value:"NestedDictInput",id:"2866fc4018e743d8a45afde53f1e57be",level:3},{value:"DictInput",id:"daa2c2398f694ec199b425e2ed4bcf93",level:3},{value:"DropdownInput",id:"14dcdef11bab4d3f8127eaf2e36a77b9",level:3},{value:"FileInput",id:"73e6377dc5f446f39517a558a1291410",level:3},{value:"Generic Input",id:"278e2027493e45b68746af0a5b6c06f6",level:3},{value:"Create a Custom Component with Generic Input",id:"create-a-custom-component-with-generic-input",level:2},{value:"Create a Custom Component with Multiple Outputs",id:"6f225be8a142450aa19ee8e46a3b3c8c",level:2},{value:"Special Operations",id:"special-operations",level:2},{value:"Contribute Custom Components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function F(o){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...o.components};return a||h("CH",!1),a.Code||h("CH.Code",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.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,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"custom-components",children:"Custom Components"})}),"\n",(0,n.jsx)(t.p,{children:"Custom components are created within Langflow and extend the platform's functionality with custom, reusable Python code."}),"\n",(0,n.jsxs)(t.p,{children:["Since Langflow operates with Python behind the scenes, you can implement any Python function within a Custom Component. This means you can leverage the power of libraries such as Pandas, Scikit-learn, Numpy, and thousands of other packages to create components that handle data processing in unlimited ways. You can use any type as long as the type is properly annotated in the output methods (e.g.,\xa0",(0,n.jsx)(t.code,{children:"> list[int]"}),")."]}),"\n",(0,n.jsx)(t.p,{children:"Custom Components create reusable and configurable components to enhance the capabilities of Langflow, making it a powerful tool for developing complex processing between user and AI messages."}),"\n",(0,n.jsx)(t.h2,{id:"how-to-create-custom-components",children:"How to Create Custom Components"}),"\n",(0,n.jsx)(t.p,{children:"Creating custom components in Langflow involves creating a Python class that defines the component's functionality, inputs, and outputs.\nThe default code provides a working structure for your custom component."}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# from langflow.field_typing import Data",props:{style:{color:"#8B949E"}}}]},{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:" MessageTextInput, 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",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"CustomComponent",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:'"Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Use as a template to create your own component."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.langflow.org/components/custom"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"custom_components"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CustomComponent"',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:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello, World!"',props:{style:{color:"#A5D6FF"}}},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_output"',props:{style:{color:"#A5D6FF"}}},{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_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"You can create your class in your favorite text editor outside of Langflow and paste it in later, or just follow along in the code pane."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["In Langflow, from under ",(0,n.jsx)(t.strong,{children:"Helpers"}),", drag a ",(0,n.jsx)(t.strong,{children:"Custom Component"})," into the workspace."]}),"\n",(0,n.jsx)(t.li,{children:"Open the component's code pane."}),"\n",(0,n.jsxs)(t.li,{children:["Import dependencies.\nYour custom component inherits from the langflow ",(0,n.jsx)(t.code,{children:"Component"})," class so you need to include it."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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:" MessageTextInput, 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",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"4",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Define the Class"}),": Start by defining a Python class that inherits from\xa0",(0,n.jsx)(t.code,{children:"Component"}),". This class will encapsulate the functionality of your custom component."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"CustomComponent",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:'"Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Use as a template to create your own component."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.langflow.org/components/custom"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"custom_components"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CustomComponent"',props:{style:{color:"#A5D6FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"5",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Specify Inputs and Outputs"}),": Use Langflow's input and output classes to define the inputs and outputs of your component. They should be declared as class attributes."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Value"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello, World!"',props:{style:{color:"#A5D6FF"}}},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"output"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_output"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"6",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Implement Output Methods"}),": Implement\xa0methods for each output, which contains the logic of your component. These methods can access input values using\xa0",(0,n.jsx)(t.code,{children:"self."})," , return processed values and define what to be displayed in the component with the\xa0",(0,n.jsx)(t.code,{children:"self.status"}),"\xa0attribute."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" data",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"7",children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Use Proper Annotations"}),": Ensure that output methods are properly annotated with their types. Langflow uses these annotations to validate and handle data correctly. For example, this method is annotated to output ",(0,n.jsx)(t.code,{children:"Data"}),"."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"8",children:["\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Check & Save"})," to confirm your component works.\nYou now have an operational custom component."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"add-inputs-and-modify-output-methods",children:"Add inputs and modify output methods"}),"\n",(0,n.jsx)(t.p,{children:"This code defines a custom component that accepts 5 inputs and outputs a Message."}),"\n",(0,n.jsxs)(t.p,{children:["Copy and paste it into the Custom Component code pane and click ",(0,n.jsx)(t.strong,{children:"Check & Save."})]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,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.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, MultilineInput, SecretStrInput, IntInput, DropdownInput",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, Input",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema.message ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Message",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCustomComponent",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 Custom Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"An example of a custom component with various input types."',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:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"username"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Username"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your username."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" SecretStrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"password"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Password"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your password."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{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:'"special_message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"special_message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter a special message."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"age"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Age"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter your age."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{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:'"gender"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Gender"',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:'"Male"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Female"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Other"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Select your gender."',props:{style:{color:"#A5D6FF"}}}]},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Result"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"result"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_inputs"',props:{style:{color:"#A5D6FF"}}},{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:"process_inputs",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Process the user inputs and return a Message object.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Returns:",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Message: A Message object containing the processed information.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed_text ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"User ',props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".username",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" (Age: ",props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".age",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:", Gender: ",props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".gender",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:') "',props:{style:{color:"#A5D6FF"}}},{content:" \\",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" f",props:{style:{color:"#FF7B72"}}},{content:'"sent the following special message: ',props:{style:{color:"#A5D6FF"}}},{content:"{self",props:{style:{color:"#79C0FF"}}},{content:".special_message",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{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:"processed_text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"AttributeError ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=f",props:{style:{color:"#FF7B72"}}},{content:'"Error processing inputs: ',props:{style:{color:"#A5D6FF"}}},{content:"{str",props:{style:{color:"#79C0FF"}}},{content:"(e)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsxs)(t.p,{children:["Since the component outputs a ",(0,n.jsx)(t.code,{children:"Message"}),", you can wire it into a chat and pass messages to yourself."]}),"\n",(0,n.jsxs)(t.p,{children:["Your Custom Component accepts the Chat Input message through ",(0,n.jsx)(t.code,{children:"MessageTextInput"}),", fills in the variables with the ",(0,n.jsx)(t.code,{children:"process_inputs"})," method, and finally passes the message ",(0,n.jsx)(t.code,{children:"User Username (Age: 49, Gender: Male) sent the following special message: Hello!"})," to Chat Output."]}),"\n",(0,n.jsx)(t.p,{children:"By defining inputs this way, Langflow can automatically handle the validation and display of these fields in the user interface, making it easier to create robust and user-friendly custom components."}),"\n",(0,n.jsxs)(t.p,{children:["All of the types detailed above derive from a general class that can also be accessed through the generic\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class."]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["Use ",(0,n.jsx)(t.code,{children:"MessageInput"})," to get the entire Message object instead of just the text."]})}),"\n",(0,n.jsx)(t.h2,{id:"3815589831f24ab792328ed233c8b00d",children:"Input Types"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.p,{children:"Langflow provides several higher-level input types to simplify the creation of custom components. These input types standardize how inputs are defined, validated, and used. Here\u2019s a guide on how to use these inputs and their primary purposes:"}),"\n",(0,n.jsx)(t.h3,{id:"fb06c48a326043ffa46badc1ab3ba467",children:(0,n.jsx)(t.strong,{children:"HandleInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input that has a handle to a specific type (e.g.,\xa0",(0,n.jsx)(t.code,{children:"BaseLanguageModel"}),",\xa0",(0,n.jsx)(t.code,{children:"BaseRetriever"}),", etc.)."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Useful for connecting to specific component types in a flow."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"0e1dcb768e38487180d720b0884a90f5",children:(0,n.jsx)(t.strong,{children:"DataInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input that receives a\xa0",(0,n.jsx)(t.code,{children:"Data"}),"\xa0object."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Ideal for components that process or manipulate data objects."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Data"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"4ec6e68ad9ab4cd194e8e607bc5b3411",children:(0,n.jsx)(t.strong,{children:"StrInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a standard string input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for any text input where the user needs to provide a string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"9292ac0105e14177af5eff2131b9c71b",children:(0,n.jsx)(t.strong,{children:"MessageInput"})}),"\n",(0,n.jsxs)(t.p,{children:["Represents an input field specifically for\xa0",(0,n.jsx)(t.code,{children:"Message"}),"\xa0objects."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used in components that handle or process messages."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Message"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"5511f5e32b944b4e973379a6bd5405e4",children:(0,n.jsx)(t.strong,{children:"MessageTextInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a text input for messages."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Suitable for components that need to extract text from message objects."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Message"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"e6d8315b0fb44a2fb8c62c3f3184bbe9",children:(0,n.jsx)(t.strong,{children:"MultilineInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a text field that supports multiple lines."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Ideal for longer text inputs where the user might need to write extended text."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"multiline=True"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"2283c13aa5f745b8b0009f7d40e59419",children:(0,n.jsx)(t.strong,{children:"SecretStrInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a password input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for sensitive text inputs where the input should be hidden (e.g., passwords, API keys)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"password=True"})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0Does not accept input types, meaning it has no input handles for previous nodes/components to connect to it."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"612680db6578451daef695bd19827a56",children:(0,n.jsx)(t.strong,{children:"IntInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an integer input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for numeric inputs where the value should be an integer."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Integer"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"a15e1fdae15b49fc9bfbf38f8bd7b203",children:(0,n.jsx)(t.strong,{children:"FloatInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a float input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for numeric inputs where the value should be a floating-point number."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Float"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"3083671e0e7f4390a03396485114be66",children:(0,n.jsx)(t.strong,{children:"BoolInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a boolean input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for true/false or yes/no type inputs."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Boolean"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"2866fc4018e743d8a45afde53f1e57be",children:(0,n.jsx)(t.strong,{children:"NestedDictInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an input field for nested dictionaries."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used for more complex data structures where the input needs to be a dictionary."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["NestedDict"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"daa2c2398f694ec199b425e2ed4bcf93",children:(0,n.jsx)(t.strong,{children:"DictInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents an input field for dictionaries."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Suitable for inputs that require a dictionary format."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Dict"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"14dcdef11bab4d3f8127eaf2e36a77b9",children:(0,n.jsx)(t.strong,{children:"DropdownInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a dropdown input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used where the user needs to select from a predefined list of options."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"options"}),"\xa0to define the list of selectable options."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["Text"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"73e6377dc5f446f39517a558a1291410",children:(0,n.jsx)(t.strong,{children:"FileInput"})}),"\n",(0,n.jsx)(t.p,{children:"Represents a file input field."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Usage:"}),"\xa0Used to upload files."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Attributes:"}),"\xa0",(0,n.jsx)(t.code,{children:"file_types"}),"\xa0to specify the types of files that can be uploaded."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Input Types:"}),"\xa0",(0,n.jsx)(t.code,{children:'["File"]'})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"278e2027493e45b68746af0a5b6c06f6",children:"Generic Input"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["Langflow offers native input types, but you can use any type as long as they are properly annotated in the output methods (e.g.,\xa0",(0,n.jsx)(t.code,{children:"-> list[int]"}),")."]}),"\n",(0,n.jsxs)(t.p,{children:["The\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class is highly customizable, allowing you to specify a wide range of attributes for each input field. It has several attributes that can be customized:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"field_type"}),": Specifies the type of field (e.g.,\xa0",(0,n.jsx)(t.code,{children:"str"}),",\xa0",(0,n.jsx)(t.code,{children:"int"}),"). Default is\xa0",(0,n.jsx)(t.code,{children:"str"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"required"}),": Boolean indicating if the field is required. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"placeholder"}),": Placeholder text for the input field. Default is an empty string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"is_list"}),": Boolean indicating if the field should accept a list of values. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"show"}),": Boolean indicating if the field should be shown. Default is\xa0",(0,n.jsx)(t.code,{children:"True"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"multiline"}),": Boolean indicating if the field should allow multi-line input. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"value"}),": Default value for the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"file_types"}),": List of accepted file types (for file inputs). Default is an empty list."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"file_path"}),": File path if the field is a file input. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"password"}),": Boolean indicating if the field is a password. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"options"}),": List of options for the field (for dropdowns). Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"name"}),": Name of the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"display_name"}),": Display name for the input field. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"advanced"}),": Boolean indicating if the field is an advanced parameter. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"input_types"}),": List of accepted input types. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"dynamic"}),": Boolean indicating if the field is dynamic. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"info"}),": Additional information or tooltip for the input field. Default is an empty string."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"real_time_refresh"}),": Boolean indicating if the field should refresh in real-time. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"refresh_button"}),": Boolean indicating if the field should have a refresh button. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"refresh_button_text"}),": Text for the refresh button. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"range_spec"}),": Range specification for numeric fields. Default is\xa0",(0,n.jsx)(t.code,{children:"None"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"load_from_db"}),": Boolean indicating if the field should load from the database. Default is\xa0",(0,n.jsx)(t.code,{children:"False"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"title_case"}),": Boolean indicating if the display name should be in title case. Default is\xa0",(0,n.jsx)(t.code,{children:"True"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"create-a-custom-component-with-generic-input",children:"Create a Custom Component with Generic Input"}),"\n",(0,n.jsxs)(t.p,{children:["Here is an example of how to define inputs for a component using the\xa0",(0,n.jsx)(t.code,{children:"Input"}),"\xa0class."]}),"\n",(0,n.jsxs)(t.p,{children:["Copy and paste it into the Custom Component code pane and click ",(0,n.jsx)(t.strong,{children:"Check & Save."})]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Input, Output",props:{style:{color:"#C9D1D9"}}}]},{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.field_typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema.message ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Message",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Dict, Any",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"TextAnalyzerComponent",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:'"Text Analyzer"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Analyzes input text and provides basic statistics."',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:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" placeholder",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter text to analyze"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" multiline",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The text you want to analyze."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_types",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Text"',props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"include_word_count"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Include Word Count"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"bool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Whether to include word count in the analysis."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Input(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"perform_sentiment_analysis"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Perform Sentiment Analysis"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" field_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"bool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" required",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Whether to perform basic sentiment analysis."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{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"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Analysis Results"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"results"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"analyze_text"',props:{style:{color:"#A5D6FF"}}},{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:"analyze_text",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Extract text from the Message object",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"isinstance",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text, Message):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text.text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "character_count"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"len",props:{style:{color:"#79C0FF"}}},{content:"(text),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "sentence_count"',props:{style:{color:"#A5D6FF"}}},{content:": text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'.'",props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"+",props:{style:{color:"#FF7B72"}}},{content:" text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'!'",props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"+",props:{style:{color:"#FF7B72"}}},{content:" text.count(",props:{style:{color:"#C9D1D9"}}},{content:"'?'",props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".include_word_count:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results[",props:{style:{color:"#C9D1D9"}}},{content:'"word_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"len",props:{style:{color:"#79C0FF"}}},{content:"(text.split())",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".perform_sentiment_analysis:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Basic sentiment analysis",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" text.lower()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if ",props:{style:{color:"#FF7B72"}}},{content:'"happy" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'"good" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"positive"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" elif ",props:{style:{color:"#FF7B72"}}},{content:'"sad" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'"bad" ',props:{style:{color:"#A5D6FF"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" text_lower:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"negative"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sentiment ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"neutral"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" results[",props:{style:{color:"#C9D1D9"}}},{content:'"sentiment"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" sentiment",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Convert the results dictionary to a formatted string",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" formatted_results ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:".join([",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"key",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:": ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"value",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" key, value ",props:{style:{color:"#C9D1D9"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" results.items()])",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Return a Message object",props:{style:{color:"#8B949E"}}}]},{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:"formatted_results)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Define how to use the inputs and outputs",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"component ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" TextAnalyzerComponent()",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"In this custom component:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"input_text"})," input is a required multi-line text field that accepts a Message object or a string. It's used to provide the text for analysis."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"include_word_count"})," input is an optional boolean field. When set to True, it adds a word count to the analysis results."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"perform_sentiment_analysis"})," input is an optional boolean field. When set to True, it triggers a basic sentiment analysis of the input text."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"The component performs basic text analysis, including character count and sentence count (based on punctuation marks). If word count is enabled, it splits the text and counts the words. If sentiment analysis is enabled, it performs a simple keyword-based sentiment classification (positive, negative, or neutral)."}),"\n",(0,n.jsxs)(t.p,{children:["Since the component inputs and outputs a ",(0,n.jsx)(t.code,{children:"Message"}),", you can wire the component into a chat and see how the basic custom component logic interacts with your input."]}),"\n",(0,n.jsx)(t.h2,{id:"6f225be8a142450aa19ee8e46a3b3c8c",children:"Create a Custom Component with Multiple Outputs"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.p,{children:"In Langflow, custom components can have multiple outputs. Each output can be associated with a specific method in the component, allowing you to define distinct behaviors for each output path. This feature is particularly useful when you want to route data based on certain conditions or process it in multiple ways."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Definition of Outputs"}),": Each output is defined in the\xa0",(0,n.jsx)(t.code,{children:"outputs"}),"\xa0list of the component. Each output is associated with a display name, an internal name, and a method that gets called to generate the output."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Output Methods"}),": The methods associated with outputs are responsible for generating the data for that particular output. These methods are called when the component is executed, and each method can independently produce its result."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This example component has two outputs:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"process_data"}),": Processes the input text (e.g., converts it to uppercase) and returns it."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"get_processing_function"}),": Returns the\xa0",(0,n.jsx)(t.code,{children:"process_data"}),"\xa0method itself to be reused in composition."]}),"\n"]}),"\n",(0,n.jsx)(a.Code,{codeConfig:d,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Callable",props:{style:{color:"#C9D1D9"}}}]},{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.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput",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:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.field_typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Text",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DualOutputComponent",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:'"Dual Output"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Processes input text and returns both the result and the processing function."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"double-arrow"',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:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"input_text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input Text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The text input to be processed."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{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"}}},{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:'"Processing Function"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processing_function"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"get_processing_function"',props:{style:{color:"#A5D6FF"}}},{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:"process_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Text:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Process the input text (e.g., convert to uppercase)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_text.upper()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" processed",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" processed",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"get_processing_function",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Callable[[], Text]:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # Return the processing function itself",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".process_data",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"This example shows how to define multiple outputs in a custom component. The first output returns the processed data, while the second output returns the processing function itself."}),"\n",(0,n.jsxs)(t.p,{children:["The\xa0",(0,n.jsx)(t.code,{children:"processing_function"}),"\xa0output can be used in scenarios where the function itself is needed for further processing or dynamic flow control. Notice how both outputs are properly annotated with their respective types, ensuring clarity and type safety."]}),"\n",(0,n.jsx)(t.h2,{id:"special-operations",children:"Special Operations"}),"\n",(0,n.jsx)(t.p,{children:"Advanced methods and attributes offer additional control and functionality. Understanding how to leverage these can enhance your custom components' capabilities."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.inputs"}),": Access all defined inputs. Useful when an output method needs to interact with multiple inputs."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.outputs"}),": Access all defined outputs. This is particularly useful if an output function needs to trigger another output function."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.status"}),": Use this to update the component's status or intermediate results. It helps track the component's internal state or store temporary data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"self.graph.flow_id"}),": Retrieve the flow ID, useful for maintaining context or debugging."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:'self.stop("output_name")'}),": Use this method within an output function to prevent data from being sent through other components. This method stops next component execution and is particularly useful for specific operations where a component should stop from running based on specific conditions."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute Custom Components to Langflow"}),"\n",(0,n.jsxs)(t.p,{children:["See ",(0,n.jsx)(t.a,{href:"/contributing-how-to-contribute#submitting-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function u(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,n.jsx)(t,{...o,children:(0,n.jsx)(F,{...o})}):F(o)}function h(o,t){throw new Error("Expected "+(t?"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/c329cc2b.31372bf9.js b/assets/js/c329cc2b.31372bf9.js deleted file mode 100644 index ffbd259fa2..0000000000 --- a/assets/js/c329cc2b.31372bf9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[9304],{24905:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var n=t(74848),o=t(28453);const r={title:"Chat Memory",sidebar_position:1,slug:"/guides-chat-memory"},a=void 0,i={id:"Guides/guides-chat-memory",title:"Chat Memory",description:"Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate memories for agents to store and recall information as needed.",source:"@site/docs/Guides/guides-chat-memory.md",sourceDirName:"Guides",slug:"/guides-chat-memory",permalink:"/guides-chat-memory",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Chat Memory",sidebar_position:1,slug:"/guides-chat-memory"},sidebar:"docs",previous:{title:"Vector Stores",permalink:"/components-vector-stores"},next:{title:"Data & Message",permalink:"/guides-data-message"}},c={},h=[{value:"Session ID",id:"4ee86e27d1004e8288a72c633c323703",level:2},{value:"Store chat memory in an external database",id:"store-chat-memory-in-an-external-database",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Connect the chat memory component to an external database",id:"connect-the-chat-memory-component-to-an-external-database",level:3}];function l(e){const s={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate ",(0,n.jsx)(s.em,{children:"memories"})," for agents to store and recall information as needed."]}),"\n",(0,n.jsxs)(s.p,{children:["In any project, as long as there are ",(0,n.jsx)(s.a,{href:"/components-io",children:(0,n.jsx)(s.strong,{children:"Chat"})})," being used, memories are always being stored by default. These are messages from a user to the AI or vice-versa."]}),"\n",(0,n.jsxs)(s.p,{children:["To see and access this history of messages, Langflow features a component called ",(0,n.jsx)(s.strong,{children:"Chat Memory"}),". It retrieves previous messages and outputs them in structured format or parsed."]}),"\n",(0,n.jsxs)(s.p,{children:["To learn the basics about memory in Langflow, check out the ",(0,n.jsx)(s.a,{href:"/starter-projects-memory-chatbot",children:"Memory Chatbot"})," starter example."]}),"\n",(0,n.jsxs)(s.p,{children:["Memories can be visualized and managed directly from the ",(0,n.jsx)(s.strong,{children:"Playground"}),". You can edit and remove previous messages to inspect and validate the AI\u2019s response behavior. You can remove or edit previous messages to get your models acting just right."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(75918).A+"",width:"3244",height:"1776"})}),"\n",(0,n.jsx)(s.p,{children:"Modifying these memories will influence the behavior of the chatbot responses, as long as an agent uses them. Here you have the ability to remove or edit previous messages, allowing them to manipulate and explore how these changes affect model responses."}),"\n",(0,n.jsxs)(s.p,{children:["To modify chat memories, from the playground, click the ",(0,n.jsx)(s.strong,{children:"Options"})," menu of any session, and then select ",(0,n.jsx)(s.strong,{children:"Message Logs"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(77232).A+"",width:"3278",height:"1884"})}),"\n",(0,n.jsx)(s.h2,{id:"4ee86e27d1004e8288a72c633c323703",children:"Session ID"}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsxs)(s.p,{children:["Chat conversations store messages categorized by a ",(0,n.jsx)(s.code,{children:"Session ID"}),". A a single flow can host multiple session IDs, and different flows can also share the same one."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," component also retrieves message histories by ",(0,n.jsx)(s.code,{children:"Session ID"}),", which users can change in the component's ",(0,n.jsx)(s.strong,{children:"Controls"})," pane."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(86190).A+"",width:"3246",height:"1772"})}),"\n",(0,n.jsxs)(s.p,{children:["By default, if the ",(0,n.jsx)(s.code,{children:"Session ID"})," value is empty, it is set to the same value as ",(0,n.jsx)(s.code,{children:"Flow ID"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["You can also display all messages stored across every flow and session by going to\xa0",(0,n.jsx)(s.strong,{children:"Settings"}),"\xa0>\xa0",(0,n.jsx)(s.strong,{children:"Messages"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(25381).A+"",width:"2910",height:"1686"})}),"\n",(0,n.jsx)(s.h2,{id:"store-chat-memory-in-an-external-database",children:"Store chat memory in an external database"}),"\n",(0,n.jsxs)(s.p,{children:["Chat memory is retrieved from an external database or vector store using the ",(0,n.jsx)(s.a,{href:"/components-helpers#chat-memory",children:(0,n.jsx)(s.strong,{children:"Chat Memory"})})," component."]}),"\n",(0,n.jsxs)(s.p,{children:["Chat memory is stored to an external database or vector store using the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"/Components/components-memories",children:(0,n.jsx)(s.strong,{children:"Chat Memories"})})," components provide access to their respective external databases ",(0,n.jsx)(s.strong,{children:"as memory"}),". This allows AIs to access external memory for persistence and context retention. For example, connect the ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," component to an ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"}),"* component to store the message history in an external Astra DB database."]}),"\n",(0,n.jsxs)(s.p,{children:["This example stores and retrieves chat history from an ",(0,n.jsx)(s.a,{href:"/Components/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory"})," component with ",(0,n.jsx)(s.strong,{children:"Store Message"})," and ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," components."]}),"\n",(0,n.jsx)(s.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://platform.openai.com/",children:"An OpenAI API key"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://docs.datastax.com/en/astra-db-serverless/get-started/quickstart.html",children:"An Astra DB vector database"}),"\xa0with:","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Application Token"}),"\n",(0,n.jsx)(s.li,{children:"API Endpoint"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"connect-the-chat-memory-component-to-an-external-database",children:"Connect the chat memory component to an external database"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Load the ",(0,n.jsx)(s.a,{href:"/starter-projects-memory-chatbot",children:"Memory Chatbot"})," starter project.\nThis starter project extends the basic prompting flow to include a chat memory component."]}),"\n",(0,n.jsxs)(s.li,{children:["Add the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component to the flow.\nThe ",(0,n.jsx)(s.strong,{children:"Store message"})," component stores messages in the external database."]}),"\n",(0,n.jsxs)(s.li,{children:["Add the ",(0,n.jsx)(s.a,{href:"/Components/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory Component"})," to the flow.\nThe ",(0,n.jsx)(s.strong,{children:"Astra DB Chat Memory"})," component stores and retrieves messages from ",(0,n.jsx)(s.strong,{children:"Astra DB"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Configure the ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"})," component with your AstraDB instance details.","\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["In the ",(0,n.jsx)(s.strong,{children:"Astra DB Application Token"})," field, add your Astra token. (",(0,n.jsx)(s.code,{children:"AstraCS:..."}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["In the ",(0,n.jsx)(s.strong,{children:"API Endpoint"})," field, add your Astra database's endpoint. (for example, ",(0,n.jsx)(s.code,{children:"https://12adb-bc-5378c845f05a6-e0a12-bd889b4-us-east-2.apps.astra.datastax.com"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["Connect the ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"})," component output to the external memory inputs of the ",(0,n.jsx)(s.a,{href:"/components-helpers#chat-memory",children:"Chat Memory"})," and ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," components."]}),"\n",(0,n.jsxs)(s.li,{children:["Link the ",(0,n.jsx)(s.a,{href:"/components-io#chat-output",children:"Chat Output"})," component to the input of the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component."]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Your completed flow should look like this:"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:t(72654).A+"",width:"3178",height:"1228"})}),"\n",(0,n.jsxs)(s.ol,{start:"7",children:["\n",(0,n.jsx)(s.li,{children:"In Langflow, create message traffic by running a flow."}),"\n",(0,n.jsx)(s.li,{children:"Inspect your Astra database's tables and activity.\nYou will see new tables and traffic created."}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},72654:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"},86190:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/chat-input-controls-pane-b60b21c923aa47a2265ae1775e693cb0.png"},77232:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/logs-7deb7c1a822f826469d17856b9dcebb5.png"},75918:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/playground-b2c623fb6849024570bc9bd5285309f5.png"},25381:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/settings-messages-d0ad3a8e3bea5f8896565c041946a919.png"},28453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(96540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c329cc2b.8d1cf604.js b/assets/js/c329cc2b.8d1cf604.js new file mode 100644 index 0000000000..f274fb1921 --- /dev/null +++ b/assets/js/c329cc2b.8d1cf604.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[9304],{24905:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var n=t(74848),o=t(28453);const r={title:"Chat Memory",sidebar_position:1,slug:"/guides-chat-memory"},a=void 0,i={id:"Guides/guides-chat-memory",title:"Chat Memory",description:"Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate memories for agents to store and recall information as needed.",source:"@site/docs/Guides/guides-chat-memory.md",sourceDirName:"Guides",slug:"/guides-chat-memory",permalink:"/guides-chat-memory",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Chat Memory",sidebar_position:1,slug:"/guides-chat-memory"},sidebar:"docs",previous:{title:"Vector Stores",permalink:"/components-vector-stores"},next:{title:"Data & Message",permalink:"/guides-data-message"}},c={},h=[{value:"Session ID",id:"4ee86e27d1004e8288a72c633c323703",level:2},{value:"Store chat memory in an external database",id:"store-chat-memory-in-an-external-database",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Connect the chat memory component to an external database",id:"connect-the-chat-memory-component-to-an-external-database",level:3}];function l(e){const s={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Langflow allows every chat message to be stored, and a single flow can have multiple memory sessions. This enables you to create separate ",(0,n.jsx)(s.em,{children:"memories"})," for agents to store and recall information as needed."]}),"\n",(0,n.jsxs)(s.p,{children:["In any project, as long as there are ",(0,n.jsx)(s.a,{href:"/components-io",children:(0,n.jsx)(s.strong,{children:"Chat"})})," being used, memories are always being stored by default. These are messages from a user to the AI or vice-versa."]}),"\n",(0,n.jsxs)(s.p,{children:["To see and access this history of messages, Langflow features a component called ",(0,n.jsx)(s.strong,{children:"Chat Memory"}),". It retrieves previous messages and outputs them in structured format or parsed."]}),"\n",(0,n.jsxs)(s.p,{children:["To learn the basics about memory in Langflow, check out the ",(0,n.jsx)(s.a,{href:"/starter-projects-memory-chatbot",children:"Memory Chatbot"})," starter example."]}),"\n",(0,n.jsxs)(s.p,{children:["Memories can be visualized and managed directly from the ",(0,n.jsx)(s.strong,{children:"Playground"}),". You can edit and remove previous messages to inspect and validate the AI\u2019s response behavior. You can remove or edit previous messages to get your models acting just right."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(75918).A+"",width:"3244",height:"1776"})}),"\n",(0,n.jsx)(s.p,{children:"Modifying these memories will influence the behavior of the chatbot responses, as long as an agent uses them. Here you have the ability to remove or edit previous messages, allowing them to manipulate and explore how these changes affect model responses."}),"\n",(0,n.jsxs)(s.p,{children:["To modify chat memories, from the playground, click the ",(0,n.jsx)(s.strong,{children:"Options"})," menu of any session, and then select ",(0,n.jsx)(s.strong,{children:"Message Logs"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(77232).A+"",width:"3278",height:"1884"})}),"\n",(0,n.jsx)(s.h2,{id:"4ee86e27d1004e8288a72c633c323703",children:"Session ID"}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsxs)(s.p,{children:["Chat conversations store messages categorized by a ",(0,n.jsx)(s.code,{children:"Session ID"}),". A single flow can host multiple session IDs, and different flows can also share the same one."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," component also retrieves message histories by ",(0,n.jsx)(s.code,{children:"Session ID"}),", which users can change in the component's ",(0,n.jsx)(s.strong,{children:"Controls"})," pane."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(86190).A+"",width:"3246",height:"1772"})}),"\n",(0,n.jsxs)(s.p,{children:["By default, if the ",(0,n.jsx)(s.code,{children:"Session ID"})," value is empty, it is set to the same value as ",(0,n.jsx)(s.code,{children:"Flow ID"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["You can also display all messages stored across every flow and session by going to\xa0",(0,n.jsx)(s.strong,{children:"Settings"}),"\xa0>\xa0",(0,n.jsx)(s.strong,{children:"Messages"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(25381).A+"",width:"2910",height:"1686"})}),"\n",(0,n.jsx)(s.h2,{id:"store-chat-memory-in-an-external-database",children:"Store chat memory in an external database"}),"\n",(0,n.jsxs)(s.p,{children:["Chat memory is retrieved from an external database or vector store using the ",(0,n.jsx)(s.a,{href:"/components-helpers#chat-memory",children:(0,n.jsx)(s.strong,{children:"Chat Memory"})})," component."]}),"\n",(0,n.jsxs)(s.p,{children:["Chat memory is stored to an external database or vector store using the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"/Components/components-memories",children:(0,n.jsx)(s.strong,{children:"Chat Memories"})})," components provide access to their respective external databases ",(0,n.jsx)(s.strong,{children:"as memory"}),". This allows AIs to access external memory for persistence and context retention. For example, connect the ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," component to an ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"}),"* component to store the message history in an external Astra DB database."]}),"\n",(0,n.jsxs)(s.p,{children:["This example stores and retrieves chat history from an ",(0,n.jsx)(s.a,{href:"/Components/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory"})," component with ",(0,n.jsx)(s.strong,{children:"Store Message"})," and ",(0,n.jsx)(s.strong,{children:"Chat Memory"})," components."]}),"\n",(0,n.jsx)(s.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://platform.openai.com/",children:"An OpenAI API key"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://docs.datastax.com/en/astra-db-serverless/get-started/quickstart.html",children:"An Astra DB vector database"}),"\xa0with:","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Application Token"}),"\n",(0,n.jsx)(s.li,{children:"API Endpoint"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"connect-the-chat-memory-component-to-an-external-database",children:"Connect the chat memory component to an external database"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Load the ",(0,n.jsx)(s.a,{href:"/starter-projects-memory-chatbot",children:"Memory Chatbot"})," starter project.\nThis starter project extends the basic prompting flow to include a chat memory component."]}),"\n",(0,n.jsxs)(s.li,{children:["Add the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component to the flow.\nThe ",(0,n.jsx)(s.strong,{children:"Store message"})," component stores messages in the external database."]}),"\n",(0,n.jsxs)(s.li,{children:["Add the ",(0,n.jsx)(s.a,{href:"/Components/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory Component"})," to the flow.\nThe ",(0,n.jsx)(s.strong,{children:"Astra DB Chat Memory"})," component stores and retrieves messages from ",(0,n.jsx)(s.strong,{children:"Astra DB"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Configure the ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"})," component with your AstraDB instance details.","\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["In the ",(0,n.jsx)(s.strong,{children:"Astra DB Application Token"})," field, add your Astra token. (",(0,n.jsx)(s.code,{children:"AstraCS:..."}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["In the ",(0,n.jsx)(s.strong,{children:"API Endpoint"})," field, add your Astra database's endpoint. (for example, ",(0,n.jsx)(s.code,{children:"https://12adb-bc-5378c845f05a6-e0a12-bd889b4-us-east-2.apps.astra.datastax.com"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["Connect the ",(0,n.jsx)(s.strong,{children:"AstraDBChatMemory"})," component output to the external memory inputs of the ",(0,n.jsx)(s.a,{href:"/components-helpers#chat-memory",children:"Chat Memory"})," and ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," components."]}),"\n",(0,n.jsxs)(s.li,{children:["Link the ",(0,n.jsx)(s.a,{href:"/components-io#chat-output",children:"Chat Output"})," component to the input of the ",(0,n.jsx)(s.a,{href:"/components-helpers#store-message",children:"Store Message"})," component."]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Your completed flow should look like this:"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:t(72654).A+"",width:"3178",height:"1228"})}),"\n",(0,n.jsxs)(s.ol,{start:"7",children:["\n",(0,n.jsx)(s.li,{children:"In Langflow, create message traffic by running a flow."}),"\n",(0,n.jsx)(s.li,{children:"Inspect your Astra database's tables and activity.\nYou will see new tables and traffic created."}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},72654:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"},86190:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/chat-input-controls-pane-b60b21c923aa47a2265ae1775e693cb0.png"},77232:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/logs-7deb7c1a822f826469d17856b9dcebb5.png"},75918:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/playground-b2c623fb6849024570bc9bd5285309f5.png"},25381:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/settings-messages-d0ad3a8e3bea5f8896565c041946a919.png"},28453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(96540);const o={},r=n.createContext(o);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cacdc615.9b6f5f2f.js b/assets/js/cacdc615.62628bc5.js similarity index 97% rename from assets/js/cacdc615.9b6f5f2f.js rename to assets/js/cacdc615.62628bc5.js index c12b721f55..583667ee37 100644 --- a/assets/js/cacdc615.9b6f5f2f.js +++ b/assets/js/cacdc615.62628bc5.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7211],{5100:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>F,assets:()=>y,chCodeConfig:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>i});var n=e(74848),s=e(28453),r=e(24754);const l={title:"API keys",sidebar_position:1,slug:"/configuration-api-keys"},c=void 0,p={id:"Configuration/configuration-api-keys",title:"API keys",description:"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.",source:"@site/docs/Configuration/configuration-api-keys.md",sourceDirName:"Configuration",slug:"/configuration-api-keys",permalink:"/configuration-api-keys",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"API keys",sidebar_position:1,slug:"/configuration-api-keys"},sidebar:"docs",previous:{title:"Create a problem-solving agent",permalink:"/agents-tool-calling-agent-component"},next:{title:"Authentication",permalink:"/configuration-authentication"}},y={},F={annotations:r.hk,Code:r.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},i=[{value:"Generate an API key",id:"generate-an-api-key",level:2},{value:"Generate an API key with the Langflow UI",id:"generate-an-api-key-with-the-langflow-ui",level:3},{value:"Generate an API key with the Langflow CLI",id:"generate-an-api-key-with-the-langflow-cli",level:3},{value:"Authenticate requests with the Langflow API key",id:"authenticate-requests-with-the-langflow-api-key",level:2},{value:"Include the API key in the HTTP header",id:"include-the-api-key-in-the-http-header",level:3},{value:"Security considerations",id:"security-considerations",level:2},{value:"Custom API endpoint",id:"custom-api-endpoint",level:2},{value:"Revoke an API key",id:"revoke-an-api-key",level:2}];function D(o){const t={admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...o.components};return F||h("CH",!1),F.Code||h("CH.Code",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.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,n.jsx)(t.p,{children:"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow."}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["The default user and password are set using the LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD environment variables. The default values are ",(0,n.jsx)(t.code,{children:"langflow"})," and ",(0,n.jsx)(t.code,{children:"langflow"}),", respectively."]})}),"\n",(0,n.jsx)(t.h2,{id:"generate-an-api-key",children:"Generate an API key"}),"\n",(0,n.jsx)(t.p,{children:"Generate a user-specific token to use with Langflow."}),"\n",(0,n.jsx)(t.h3,{id:"generate-an-api-key-with-the-langflow-ui",children:"Generate an API key with the Langflow UI"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Click your user icon and select ",(0,n.jsx)(t.strong,{children:"Settings"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Langflow API"}),", and then click ",(0,n.jsx)(t.strong,{children:"Add New"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Name your key, and then click ",(0,n.jsx)(t.strong,{children:"Create Secret Key"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Copy the API key and store it in a secure location."}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"generate-an-api-key-with-the-langflow-cli",children:"Generate an API key with the Langflow CLI"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"langflow ",props:{style:{color:"#FFA657"}}},{content:"api-key",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"# or",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:"-m ",props:{style:{color:"#79C0FF"}}},{content:"langflow api-key",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"API Key Created Successfully: \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"sk-O0elzoWID1izAH8RUKrnnvyyMwIzHi2Wk-uXWoNJ2Ro \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"This is the only time the API key will be displayed. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"Make sure to store it in a secure location. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"The API key has been copied to your clipboard. Cmd + V to paste it. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.h2,{id:"authenticate-requests-with-the-langflow-api-key",children:"Authenticate requests with the Langflow API key"}),"\n",(0,n.jsx)(t.p,{children:"Include your API key in API requests to authenticate requests to Langflow."}),"\n",(0,n.jsx)(t.h3,{id:"include-the-api-key-in-the-http-header",children:"Include the API key in the HTTP header"}),"\n",(0,n.jsx)(t.p,{children:"To use the API key when making API requests with cURL, include the API key in the HTTP header."}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/run/*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_FLOW_ID",props:{style:{color:"#FFA657"}}},{content:'`*?stream=false" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'x-api-key: *`YOUR_API_KEY`*' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"inputs": {"text":""}, "tweaks": {}}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"To instead pass the API key as a query parameter, do the following:"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/run/*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_FLOW_ID",props:{style:{color:"#FFA657"}}},{content:"`*?x-api-key=*`",props:{style:{color:"#A5D6FF"}}},{content:"YOUR_API_KEY",props:{style:{color:"#FFA657"}}},{content:'`*?stream=false" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"inputs": {"text":""}, "tweaks": {}}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsxs)(t.p,{children:["To use the API key when making API requests with the Python ",(0,n.jsx)(t.code,{children:"requests"})," library, include the API key as a variable string."]}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" argparse",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" json",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" argparse ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" RawTextHelpFormatter",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" requests",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Optional",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" warnings",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" from",props:{style:{color:"#FF7B72"}}},{content:" langflow.load ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" upload_file",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"except ",props:{style:{color:"#FF7B72"}}},{content:"ImportError",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" warnings.warn(",props:{style:{color:"#C9D1D9"}}},{content:'"Langflow provides a function to help you upload files to the flow. Please install langflow to use it."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" upload_file ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"BASE_API_URL ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://127.0.0.1:7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"FLOW_ID ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"*`YOUR_FLOW_ID`*"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"ENDPOINT ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"" ',props:{style:{color:"#A5D6FF"}}},{content:"# You can set a specific endpoint name in the flow settings",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# You can tweak the flow by adding a tweaks dictionary",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:'# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}',props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"TWEAKS ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "ChatInput-8a86T"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "Prompt-pKfl9"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "ChatOutput-WcGpD"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "OpenAIModel-5UyvQ"',props:{style:{color:"#A5D6FF"}}},{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:"run_flow",props:{style:{color:"#D2A8FF"}}},{content:"(message: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" endpoint: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks: Optional[",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" api_key: Optional[",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{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:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Run a flow with a given message and optional tweaks.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param message: The message to send to the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param endpoint: The ID or the endpoint name of the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param tweaks: Optional tweaks to customize the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :return: The JSON response from the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" api_url ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{BASE_API_URL}",props:{style:{color:"#79C0FF"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"endpoint",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_value"',props:{style:{color:"#A5D6FF"}}},{content:": message,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "output_type"',props:{style:{color:"#A5D6FF"}}},{content:": output_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_type"',props:{style:{color:"#A5D6FF"}}},{content:": input_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" tweaks:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" payload[",props:{style:{color:"#C9D1D9"}}},{content:'"tweaks"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" tweaks",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" api_key:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"x-api-key"',props:{style:{color:"#A5D6FF"}}},{content:": api_key}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.post(api_url, ",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"payload, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"headers)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"main",props:{style:{color:"#D2A8FF"}}},{content:"():",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" argparse.ArgumentParser(",props:{style:{color:"#C9D1D9"}}},{content:"description",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"""Run a flow with a given message and optional tweaks.',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:'Run it like: python .py "your message here" --endpoint "your_endpoint" --tweaks \'{"key": "value"}\'"""',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" formatter_class",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"RawTextHelpFormatter)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The message to send to the flow"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--endpoint"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"ENDPOINT ",props:{style:{color:"#79C0FF"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:"FLOW_ID",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The ID or the endpoint name of the flow"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--tweaks"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"JSON string representing the tweaks to customize the flow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"json.dumps(",props:{style:{color:"#C9D1D9"}}},{content:"TWEAKS",props:{style:{color:"#79C0FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--api_key"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"API key for authentication"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--output_type"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The output type"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--input_type"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The input type"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--upload_file"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Path to the file to upload"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--components"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Components to upload the file to"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" args ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" parser.parse_args()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" json.loads(args.tweaks)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" except",props:{style:{color:"#FF7B72"}}},{content:" json.JSONDecodeError:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"Invalid tweaks JSON string"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" args.upload_file:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not",props:{style:{color:"#FF7B72"}}},{content:" upload_file:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ImportError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"Langflow is not installed. Please install it to use the upload_file function."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" elif not",props:{style:{color:"#FF7B72"}}},{content:" args.components:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"You need to provide the components to upload the file to."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" upload_file(",props:{style:{color:"#C9D1D9"}}},{content:"file_path",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.upload_file, ",props:{style:{color:"#C9D1D9"}}},{content:"host",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"BASE_API_URL",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"flow_id",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.endpoint, ",props:{style:{color:"#C9D1D9"}}},{content:"components",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[args.components], ",props:{style:{color:"#C9D1D9"}}},{content:"tweaks",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"tweaks)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" run_flow(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" message",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.message,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" endpoint",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.endpoint,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.output_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.input_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"tweaks,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" api_key",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.api_key",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" print",props:{style:{color:"#79C0FF"}}},{content:"(json.dumps(response, ",props:{style:{color:"#C9D1D9"}}},{content:"indent",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if ",props:{style:{color:"#FF7B72"}}},{content:"__name__ ",props:{style:{color:"#79C0FF"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"__main__"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" main()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"To pass the API key to your script with a command line argument, do the following:"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:'your_script.py "*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_INPUT_MESSAGE",props:{style:{color:"#FFA657"}}},{content:'`*" ',props:{style:{color:"#A5D6FF"}}},{content:"--api_key ",props:{style:{color:"#79C0FF"}}},{content:'"*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_API_KEY",props:{style:{color:"#FFA657"}}},{content:'`*"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.h2,{id:"security-considerations",children:"Security considerations"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Visibility"}),": For security reasons, the API key cannot be retrieved again through the UI."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Scope"}),": The key allows access only to the flows and components of the specific user to whom it was issued."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"custom-api-endpoint",children:"Custom API endpoint"}),"\n",(0,n.jsxs)(t.p,{children:["To choose a custom name for your API endpoint, select ",(0,n.jsx)(t.strong,{children:"Project Settings"})," > ",(0,n.jsx)(t.strong,{children:"Endpoint Name"})," and name your endpoint."]}),"\n",(0,n.jsx)(t.h2,{id:"revoke-an-api-key",children:"Revoke an API key"}),"\n",(0,n.jsxs)(t.p,{children:["To revoke an API key, delete it from the the list of keys in the ",(0,n.jsx)(t.strong,{children:"Settings"})," menu."]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Click your user icon and select ",(0,n.jsx)(t.strong,{children:"Settings"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Langflow API"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Select the keys you want to delete and click the trash can icon."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This action immediately invalidates the key and prevents it from being used again."})]})}function d(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,n.jsx)(t,{...o,children:(0,n.jsx)(D,{...o})}):D(o)}function h(o,t){throw new Error("Expected "+(t?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7211],{5100:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>F,assets:()=>y,chCodeConfig:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>i});var n=e(74848),s=e(28453),r=e(24754);const l={title:"API keys",sidebar_position:1,slug:"/configuration-api-keys"},c=void 0,p={id:"Configuration/configuration-api-keys",title:"API keys",description:"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow.",source:"@site/docs/Configuration/configuration-api-keys.md",sourceDirName:"Configuration",slug:"/configuration-api-keys",permalink:"/configuration-api-keys",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"API keys",sidebar_position:1,slug:"/configuration-api-keys"},sidebar:"docs",previous:{title:"Create a problem-solving agent",permalink:"/agents-tool-calling-agent-component"},next:{title:"Authentication",permalink:"/configuration-authentication"}},y={},F={annotations:r.hk,Code:r.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},i=[{value:"Generate an API key",id:"generate-an-api-key",level:2},{value:"Generate an API key with the Langflow UI",id:"generate-an-api-key-with-the-langflow-ui",level:3},{value:"Generate an API key with the Langflow CLI",id:"generate-an-api-key-with-the-langflow-cli",level:3},{value:"Authenticate requests with the Langflow API key",id:"authenticate-requests-with-the-langflow-api-key",level:2},{value:"Include the API key in the HTTP header",id:"include-the-api-key-in-the-http-header",level:3},{value:"Security considerations",id:"security-considerations",level:2},{value:"Custom API endpoint",id:"custom-api-endpoint",level:2},{value:"Revoke an API key",id:"revoke-an-api-key",level:2}];function D(o){const t={admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...o.components};return F||h("CH",!1),F.Code||h("CH.Code",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.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,n.jsx)(t.p,{children:"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication. The API key is a user-specific token that can be included in the request header, query parameter, or as a command line argument to authenticate API calls. This documentation outlines how to generate, use, and manage API keys in Langflow."}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["The default user and password are set using the LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD environment variables. The default values are ",(0,n.jsx)(t.code,{children:"langflow"})," and ",(0,n.jsx)(t.code,{children:"langflow"}),", respectively."]})}),"\n",(0,n.jsx)(t.h2,{id:"generate-an-api-key",children:"Generate an API key"}),"\n",(0,n.jsx)(t.p,{children:"Generate a user-specific token to use with Langflow."}),"\n",(0,n.jsx)(t.h3,{id:"generate-an-api-key-with-the-langflow-ui",children:"Generate an API key with the Langflow UI"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Click your user icon and select ",(0,n.jsx)(t.strong,{children:"Settings"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Langflow API"}),", and then click ",(0,n.jsx)(t.strong,{children:"Add New"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Name your key, and then click ",(0,n.jsx)(t.strong,{children:"Create Secret Key"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Copy the API key and store it in a secure location."}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"generate-an-api-key-with-the-langflow-cli",children:"Generate an API key with the Langflow CLI"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"langflow ",props:{style:{color:"#FFA657"}}},{content:"api-key",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"# or",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:"-m ",props:{style:{color:"#79C0FF"}}},{content:"langflow api-key",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"API Key Created Successfully: \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"sk-O0elzoWID1izAH8RUKrnnvyyMwIzHi2Wk-uXWoNJ2Ro \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"This is the only time the API key will be displayed. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"Make sure to store it in a secure location. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"\u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2502 ",props:{style:{color:"#FFA657"}}},{content:"The API key has been copied to your clipboard. Cmd + V to paste it. \u2502",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.h2,{id:"authenticate-requests-with-the-langflow-api-key",children:"Authenticate requests with the Langflow API key"}),"\n",(0,n.jsx)(t.p,{children:"Include your API key in API requests to authenticate requests to Langflow."}),"\n",(0,n.jsx)(t.h3,{id:"include-the-api-key-in-the-http-header",children:"Include the API key in the HTTP header"}),"\n",(0,n.jsx)(t.p,{children:"To use the API key when making API requests with cURL, include the API key in the HTTP header."}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/run/*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_FLOW_ID",props:{style:{color:"#FFA657"}}},{content:'`*?stream=false" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'x-api-key: *`YOUR_API_KEY`*' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"inputs": {"text":""}, "tweaks": {}}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"To instead pass the API key as a query parameter, do the following:"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/run/*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_FLOW_ID",props:{style:{color:"#FFA657"}}},{content:"`*?x-api-key=*`",props:{style:{color:"#A5D6FF"}}},{content:"YOUR_API_KEY",props:{style:{color:"#FFA657"}}},{content:'`*?stream=false" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"inputs": {"text":""}, "tweaks": {}}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsxs)(t.p,{children:["To use the API key when making API requests with the Python ",(0,n.jsx)(t.code,{children:"requests"})," library, include the API key as a variable string."]}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" argparse",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" json",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" argparse ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" RawTextHelpFormatter",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" requests",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Optional",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" warnings",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" from",props:{style:{color:"#FF7B72"}}},{content:" langflow.load ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" upload_file",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"except ",props:{style:{color:"#FF7B72"}}},{content:"ImportError",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" warnings.warn(",props:{style:{color:"#C9D1D9"}}},{content:'"Langflow provides a function to help you upload files to the flow. Please install langflow to use it."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" upload_file ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"BASE_API_URL ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://127.0.0.1:7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"FLOW_ID ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"*`YOUR_FLOW_ID`*"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"ENDPOINT ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"" ',props:{style:{color:"#A5D6FF"}}},{content:"# You can set a specific endpoint name in the flow settings",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# You can tweak the flow by adding a tweaks dictionary",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:'# e.g {"OpenAI-XXXXX": {"model_name": "gpt-4"}}',props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"TWEAKS ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "ChatInput-8a86T"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "Prompt-pKfl9"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "ChatOutput-WcGpD"',props:{style:{color:"#A5D6FF"}}},{content:": {},",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "OpenAIModel-5UyvQ"',props:{style:{color:"#A5D6FF"}}},{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:"run_flow",props:{style:{color:"#D2A8FF"}}},{content:"(message: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" endpoint: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks: Optional[",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" api_key: Optional[",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{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:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" Run a flow with a given message and optional tweaks.",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param message: The message to send to the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param endpoint: The ID or the endpoint name of the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :param tweaks: Optional tweaks to customize the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" :return: The JSON response from the flow",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' """',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" api_url ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{BASE_API_URL}",props:{style:{color:"#79C0FF"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"endpoint",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_value"',props:{style:{color:"#A5D6FF"}}},{content:": message,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "output_type"',props:{style:{color:"#A5D6FF"}}},{content:": output_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_type"',props:{style:{color:"#A5D6FF"}}},{content:": input_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" tweaks:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" payload[",props:{style:{color:"#C9D1D9"}}},{content:'"tweaks"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" tweaks",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" api_key:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"x-api-key"',props:{style:{color:"#A5D6FF"}}},{content:": api_key}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.post(api_url, ",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"payload, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"headers)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"main",props:{style:{color:"#D2A8FF"}}},{content:"():",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" argparse.ArgumentParser(",props:{style:{color:"#C9D1D9"}}},{content:"description",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"""Run a flow with a given message and optional tweaks.',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:'Run it like: python .py "your message here" --endpoint "your_endpoint" --tweaks \'{"key": "value"}\'"""',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" formatter_class",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"RawTextHelpFormatter)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The message to send to the flow"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--endpoint"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"ENDPOINT ",props:{style:{color:"#79C0FF"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:"FLOW_ID",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The ID or the endpoint name of the flow"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--tweaks"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"JSON string representing the tweaks to customize the flow"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"json.dumps(",props:{style:{color:"#C9D1D9"}}},{content:"TWEAKS",props:{style:{color:"#79C0FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--api_key"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"API key for authentication"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--output_type"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The output type"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--input_type"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The input type"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--upload_file"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Path to the file to upload"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" parser.add_argument(",props:{style:{color:"#C9D1D9"}}},{content:'"--components"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"help",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Components to upload the file to"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"default",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" args ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" parser.parse_args()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" json.loads(args.tweaks)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" except",props:{style:{color:"#FF7B72"}}},{content:" json.JSONDecodeError:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"Invalid tweaks JSON string"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" args.upload_file:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not",props:{style:{color:"#FF7B72"}}},{content:" upload_file:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ImportError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"Langflow is not installed. Please install it to use the upload_file function."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" elif not",props:{style:{color:"#FF7B72"}}},{content:" args.components:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"You need to provide the components to upload the file to."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" upload_file(",props:{style:{color:"#C9D1D9"}}},{content:"file_path",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.upload_file, ",props:{style:{color:"#C9D1D9"}}},{content:"host",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"BASE_API_URL",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"flow_id",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.endpoint, ",props:{style:{color:"#C9D1D9"}}},{content:"components",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[args.components], ",props:{style:{color:"#C9D1D9"}}},{content:"tweaks",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"tweaks)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" run_flow(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" message",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.message,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" endpoint",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.endpoint,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.output_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.input_type,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"tweaks,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" api_key",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"args.api_key",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" print",props:{style:{color:"#79C0FF"}}},{content:"(json.dumps(response, ",props:{style:{color:"#C9D1D9"}}},{content:"indent",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if ",props:{style:{color:"#FF7B72"}}},{content:"__name__ ",props:{style:{color:"#79C0FF"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"__main__"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" main()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,n.jsx)(t.p,{children:"To pass the API key to your script with a command line argument, do the following:"}),"\n",(0,n.jsx)(F.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:'your_script.py "*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_INPUT_MESSAGE",props:{style:{color:"#FFA657"}}},{content:'`*" ',props:{style:{color:"#A5D6FF"}}},{content:"--api_key ",props:{style:{color:"#79C0FF"}}},{content:'"*`',props:{style:{color:"#A5D6FF"}}},{content:"YOUR_API_KEY",props:{style:{color:"#FFA657"}}},{content:'`*"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,n.jsx)(t.h2,{id:"security-considerations",children:"Security considerations"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Visibility"}),": For security reasons, the API key cannot be retrieved again through the UI."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Scope"}),": The key allows access only to the flows and components of the specific user to whom it was issued."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"custom-api-endpoint",children:"Custom API endpoint"}),"\n",(0,n.jsxs)(t.p,{children:["To choose a custom name for your API endpoint, select ",(0,n.jsx)(t.strong,{children:"Project Settings"})," > ",(0,n.jsx)(t.strong,{children:"Endpoint Name"})," and name your endpoint."]}),"\n",(0,n.jsx)(t.h2,{id:"revoke-an-api-key",children:"Revoke an API key"}),"\n",(0,n.jsxs)(t.p,{children:["To revoke an API key, delete it from the list of keys in the ",(0,n.jsx)(t.strong,{children:"Settings"})," menu."]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Click your user icon and select ",(0,n.jsx)(t.strong,{children:"Settings"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"Langflow API"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Select the keys you want to delete and click the trash can icon."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This action immediately invalidates the key and prevents it from being used again."})]})}function d(o={}){const{wrapper:t}={...(0,s.R)(),...o.components};return t?(0,n.jsx)(t,{...o,children:(0,n.jsx)(D,{...o})}):D(o)}function h(o,t){throw new Error("Expected "+(t?"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/runtime~main.74aa1667.js b/assets/js/runtime~main.93e25b1e.js similarity index 76% rename from assets/js/runtime~main.74aa1667.js rename to assets/js/runtime~main.93e25b1e.js index f8a9f8972a..549474a2a0 100644 --- a/assets/js/runtime~main.74aa1667.js +++ b/assets/js/runtime~main.93e25b1e.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,c,f,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,c,f)=>{if(!d){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},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,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&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(f,b),f},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/"+({51:"b7251463",145:"0be1d5fe",191:"c643a6d5",230:"bc63ae25",417:"93e16042",768:"6d684b63",784:"fe965b62",787:"672a0eba",800:"a4c0ff01",868:"dc7b1ef3",964:"05d835b4",1022:"8a61012d",1035:"24d32e91",1039:"16d61ab3",1185:"c2de64b8",1227:"647965d5",1246:"1b523369",1258:"7da17ff3",1394:"8054effa",1488:"ac3cc3f5",1500:"1e9025f7",1563:"3ef76b56",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1845:"2ab0d4f5",1917:"c3616f7f",1956:"fe6f9601",2073:"7b7db446",2097:"338a6f8e",2273:"e756fa26",2431:"c0d3c6ab",2624:"8ff68e6f",2657:"a3ab51d1",2691:"2efb9d3a",2777:"b3ba68b4",2818:"a9b73094",3040:"2148ae42",3110:"6a2beaac",3247:"bd7ab245",3327:"6aa941bb",3347:"b5257597",3391:"f66238ae",3576:"64045095",3694:"c2b1730c",3758:"a963b3cb",3859:"7679ca6e",3917:"c8dad5f1",3964:"829ff4d2",4028:"c2ebd62a",4046:"9ac856ad",4133:"5cf11f26",4429:"32cedcea",4633:"c563aec0",4645:"fef056e9",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4891:"ca67d85f",4930:"d2ad385b",4931:"a9b4f8aa",4954:"a71efd4a",4973:"2d2c4fcb",5138:"309383dc",5179:"41e3c105",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5425:"ee32130c",5467:"40d13080",5474:"d175aa8b",5475:"18f3809a",5513:"20d49d07",5514:"02955c09",5562:"20e9af62",5572:"873ebc27",5628:"a83bc7c0",5634:"9822a706",5673:"73af8c33",5716:"946d1cee",5718:"5ccf4833",5742:"aba21aa0",5772:"4e7126f8",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5923:"73d1a090",5979:"a3a1efc2",6003:"4d983c8e",6008:"445668ec",6053:"dfc50084",6080:"4d15791b",6147:"ab17fe15",6281:"c96ce3ed",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6559:"6f13807a",6668:"18988c08",6682:"5a6d6120",6890:"8b85e1d0",6920:"c817e236",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7118:"4ce9199e",7165:"547df4a1",7211:"cacdc615",7258:"11478de3",7338:"c39b795e",7408:"3ae94ad4",7453:"fdefa9a8",7462:"921b5fc1",7472:"744aaf8b",7507:"be76515e",7713:"3a82b27e",7892:"790349b7",7894:"0f44198a",8031:"25bf2d67",8054:"85112c90",8064:"274fd934",8085:"cc44357e",8102:"019dbd1f",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8261:"474d53cd",8304:"3b356402",8356:"c6a5eaec",8401:"17896441",8504:"e6c6a4d2",8598:"44dfcf75",8661:"8f774222",8679:"3705a9c0",8921:"45476a69",8927:"ae68aa8b",8929:"172b3cfb",8953:"adef6868",9048:"a94703ab",9126:"ea3c040a",9141:"19136925",9304:"c329cc2b",9306:"667d0790",9371:"991799c5",9455:"54175a6c",9461:"23d0e682",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9555:"dedd5914",9580:"f81a91eb",9619:"29b8e27a",9642:"eae80ce0",9647:"5e95c892",9905:"43df3697"}[e]||e)+"."+{51:"170583e3",145:"79381adb",191:"5f273688",230:"04fbccf0",417:"099ab03e",768:"65469bf5",784:"b6a35b07",787:"7486d7e0",800:"9022588c",868:"dcdd6bc3",900:"f83a9a5d",964:"3893612e",1022:"11c801ab",1035:"1a6c2f56",1039:"69fae80f",1185:"9748a9a7",1227:"6e74c5d8",1246:"4186baef",1258:"a4bce530",1394:"e591c566",1488:"517c076b",1500:"6ea32b36",1563:"90358b4f",1567:"d3c893ba",1625:"14cdddbe",1690:"e0babedf",1845:"05da85d7",1917:"8eb62a8e",1956:"ba4da060",2073:"b3f8d739",2097:"ab549652",2237:"254217db",2273:"9499374f",2431:"c2a4a552",2624:"521e4384",2657:"0a14fc05",2691:"137f1b76",2777:"50ca02a1",2818:"807cd6bf",3040:"1a81b288",3110:"3dbd74ae",3247:"52c928ff",3327:"a94a2c25",3347:"a02e271f",3391:"a423a13f",3477:"5c645be2",3576:"da9c580a",3694:"af3527cf",3758:"8dca7900",3859:"51e75ae4",3917:"bdc0c146",3964:"0cd22fac",4028:"c46fe749",4046:"d82ce2df",4133:"709a34ca",4429:"d4f6479b",4633:"6fa1329f",4645:"e8d61841",4778:"88b91dab",4784:"942b7b69",4841:"ce23a523",4848:"03d25b14",4891:"b33e29f2",4930:"616ac30c",4931:"300ccd7e",4954:"e5b1d897",4973:"6543f011",5138:"8e4ae7ac",5179:"64e4c1f0",5281:"e84e8032",5284:"03bad459",5339:"a7de1f63",5425:"212e3898",5467:"1e54ecae",5474:"d264c1d9",5475:"41f624bc",5513:"5dafbef0",5514:"3b4a4736",5562:"88e5e3a2",5572:"2c03f163",5628:"5d209b33",5634:"91c6ae65",5673:"3b49b5ef",5716:"39697a86",5718:"36eb37b6",5742:"60b1d5b2",5772:"1fcd9acf",5865:"7ce0748f",5866:"82b75810",5883:"42922af9",5923:"929d7e31",5979:"16e1357e",6003:"61570841",6008:"adfa0d2f",6053:"da80e031",6080:"cbe50574",6147:"d40743e8",6281:"33a3c771",6332:"f2a4f3d5",6350:"620eb4c9",6419:"219b4ba9",6445:"48996318",6473:"f971cbc2",6559:"d1058175",6668:"73c6cd59",6682:"44a73ed9",6890:"1481bb90",6920:"02274d7b",6949:"f88bd12b",7098:"7a425922",7108:"685fe17f",7118:"05de067b",7165:"3ae4f8e5",7211:"9b6f5f2f",7258:"4eea06e3",7338:"3e8c79c0",7408:"c6de4fbc",7453:"9b7dd8c8",7462:"60236844",7472:"ce946c2a",7507:"cd4f7aad",7713:"cb6d0f3d",7892:"e97eef4c",7894:"5e157eb4",8031:"46f2eb17",8054:"a9dd4a34",8064:"c255462c",8085:"c3449534",8102:"d5229333",8188:"5e58698d",8196:"7af007ad",8208:"872c8aa4",8261:"6883b6d6",8304:"0f075a89",8356:"63481bd6",8401:"72b10a31",8504:"47593649",8598:"47a85797",8661:"098d5c8a",8679:"b99c1633",8921:"a78561cd",8927:"3a5836ad",8929:"27d12542",8953:"fda6291f",9048:"271808f7",9126:"108a0e55",9141:"89b0e034",9304:"31372bf9",9306:"203273db",9371:"4b41f654",9455:"7870fd22",9461:"5b63a573",9476:"d1729427",9479:"f58748d6",9483:"c57cc5af",9495:"b0827074",9555:"5269bca3",9580:"e76bfa8b",9619:"3d4e8dce",9642:"f8fc243a",9647:"7a7fae88",9905:"7d9e471a"}[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),c={},f="langflow-docs:",r.l=(e,a,d,b)=>{if(c[e])c[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 f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.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={17896441:"8401",19136925:"9141",64045095:"3576",b7251463:"51","0be1d5fe":"145",c643a6d5:"191",bc63ae25:"230","93e16042":"417","6d684b63":"768",fe965b62:"784","672a0eba":"787",a4c0ff01:"800",dc7b1ef3:"868","05d835b4":"964","8a61012d":"1022","24d32e91":"1035","16d61ab3":"1039",c2de64b8:"1185","647965d5":"1227","1b523369":"1246","7da17ff3":"1258","8054effa":"1394",ac3cc3f5:"1488","1e9025f7":"1500","3ef76b56":"1563","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690","2ab0d4f5":"1845",c3616f7f:"1917",fe6f9601:"1956","7b7db446":"2073","338a6f8e":"2097",e756fa26:"2273",c0d3c6ab:"2431","8ff68e6f":"2624",a3ab51d1:"2657","2efb9d3a":"2691",b3ba68b4:"2777",a9b73094:"2818","2148ae42":"3040","6a2beaac":"3110",bd7ab245:"3247","6aa941bb":"3327",b5257597:"3347",f66238ae:"3391",c2b1730c:"3694",a963b3cb:"3758","7679ca6e":"3859",c8dad5f1:"3917","829ff4d2":"3964",c2ebd62a:"4028","9ac856ad":"4046","5cf11f26":"4133","32cedcea":"4429",c563aec0:"4633",fef056e9:"4645",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",ca67d85f:"4891",d2ad385b:"4930",a9b4f8aa:"4931",a71efd4a:"4954","2d2c4fcb":"4973","309383dc":"5138","41e3c105":"5179",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",ee32130c:"5425","40d13080":"5467",d175aa8b:"5474","18f3809a":"5475","20d49d07":"5513","02955c09":"5514","20e9af62":"5562","873ebc27":"5572",a83bc7c0:"5628","9822a706":"5634","73af8c33":"5673","946d1cee":"5716","5ccf4833":"5718",aba21aa0:"5742","4e7126f8":"5772",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883","73d1a090":"5923",a3a1efc2:"5979","4d983c8e":"6003","445668ec":"6008",dfc50084:"6053","4d15791b":"6080",ab17fe15:"6147",c96ce3ed:"6281","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473","6f13807a":"6559","18988c08":"6668","5a6d6120":"6682","8b85e1d0":"6890",c817e236:"6920",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108","4ce9199e":"7118","547df4a1":"7165",cacdc615:"7211","11478de3":"7258",c39b795e:"7338","3ae94ad4":"7408",fdefa9a8:"7453","921b5fc1":"7462","744aaf8b":"7472",be76515e:"7507","3a82b27e":"7713","790349b7":"7892","0f44198a":"7894","25bf2d67":"8031","85112c90":"8054","274fd934":"8064",cc44357e:"8085","019dbd1f":"8102",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","474d53cd":"8261","3b356402":"8304",c6a5eaec:"8356",e6c6a4d2:"8504","44dfcf75":"8598","8f774222":"8661","3705a9c0":"8679","45476a69":"8921",ae68aa8b:"8927","172b3cfb":"8929",adef6868:"8953",a94703ab:"9048",ea3c040a:"9126",c329cc2b:"9304","667d0790":"9306","991799c5":"9371","54175a6c":"9455","23d0e682":"9461","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483",dedd5914:"9555",f81a91eb:"9580","29b8e27a":"9619",eae80ce0:"9642","5e95c892":"9647","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({51:"b7251463",145:"0be1d5fe",191:"c643a6d5",230:"bc63ae25",417:"93e16042",768:"6d684b63",784:"fe965b62",787:"672a0eba",800:"a4c0ff01",868:"dc7b1ef3",964:"05d835b4",1022:"8a61012d",1035:"24d32e91",1039:"16d61ab3",1185:"c2de64b8",1227:"647965d5",1246:"1b523369",1258:"7da17ff3",1394:"8054effa",1488:"ac3cc3f5",1500:"1e9025f7",1563:"3ef76b56",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1845:"2ab0d4f5",1917:"c3616f7f",1956:"fe6f9601",2073:"7b7db446",2097:"338a6f8e",2273:"e756fa26",2431:"c0d3c6ab",2624:"8ff68e6f",2657:"a3ab51d1",2691:"2efb9d3a",2777:"b3ba68b4",2818:"a9b73094",3040:"2148ae42",3110:"6a2beaac",3247:"bd7ab245",3327:"6aa941bb",3347:"b5257597",3391:"f66238ae",3576:"64045095",3694:"c2b1730c",3758:"a963b3cb",3859:"7679ca6e",3917:"c8dad5f1",3964:"829ff4d2",4028:"c2ebd62a",4046:"9ac856ad",4133:"5cf11f26",4429:"32cedcea",4633:"c563aec0",4645:"fef056e9",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4891:"ca67d85f",4930:"d2ad385b",4931:"a9b4f8aa",4954:"a71efd4a",4973:"2d2c4fcb",5138:"309383dc",5179:"41e3c105",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5425:"ee32130c",5467:"40d13080",5474:"d175aa8b",5475:"18f3809a",5513:"20d49d07",5514:"02955c09",5562:"20e9af62",5572:"873ebc27",5628:"a83bc7c0",5634:"9822a706",5673:"73af8c33",5716:"946d1cee",5718:"5ccf4833",5742:"aba21aa0",5772:"4e7126f8",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5923:"73d1a090",5979:"a3a1efc2",6003:"4d983c8e",6008:"445668ec",6053:"dfc50084",6080:"4d15791b",6147:"ab17fe15",6281:"c96ce3ed",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6559:"6f13807a",6668:"18988c08",6682:"5a6d6120",6890:"8b85e1d0",6920:"c817e236",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7118:"4ce9199e",7165:"547df4a1",7211:"cacdc615",7258:"11478de3",7338:"c39b795e",7408:"3ae94ad4",7453:"fdefa9a8",7462:"921b5fc1",7472:"744aaf8b",7507:"be76515e",7713:"3a82b27e",7892:"790349b7",7894:"0f44198a",8031:"25bf2d67",8054:"85112c90",8064:"274fd934",8085:"cc44357e",8102:"019dbd1f",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8261:"474d53cd",8304:"3b356402",8356:"c6a5eaec",8401:"17896441",8504:"e6c6a4d2",8598:"44dfcf75",8661:"8f774222",8679:"3705a9c0",8921:"45476a69",8927:"ae68aa8b",8929:"172b3cfb",8953:"adef6868",9048:"a94703ab",9126:"ea3c040a",9141:"19136925",9304:"c329cc2b",9306:"667d0790",9371:"991799c5",9455:"54175a6c",9461:"23d0e682",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9555:"dedd5914",9580:"f81a91eb",9619:"29b8e27a",9642:"eae80ce0",9647:"5e95c892",9905:"43df3697"}[e]||e)+"."+{51:"170583e3",145:"79381adb",191:"5f273688",230:"04fbccf0",417:"099ab03e",768:"65469bf5",784:"b6a35b07",787:"7486d7e0",800:"9022588c",868:"dcdd6bc3",900:"f83a9a5d",964:"3893612e",1022:"11c801ab",1035:"1a6c2f56",1039:"69fae80f",1185:"9748a9a7",1227:"6e74c5d8",1246:"4186baef",1258:"a4bce530",1394:"e591c566",1488:"517c076b",1500:"6ea32b36",1563:"90358b4f",1567:"d3969978",1625:"14cdddbe",1690:"e0babedf",1845:"05da85d7",1917:"8eb62a8e",1956:"ba4da060",2073:"b3f8d739",2097:"ab549652",2237:"254217db",2273:"9499374f",2431:"c2a4a552",2624:"521e4384",2657:"0a14fc05",2691:"137f1b76",2777:"50ca02a1",2818:"807cd6bf",3040:"1a81b288",3110:"3dbd74ae",3247:"52c928ff",3327:"a94a2c25",3347:"a02e271f",3391:"a423a13f",3477:"5c645be2",3576:"da9c580a",3694:"af3527cf",3758:"8dca7900",3859:"51e75ae4",3917:"bdc0c146",3964:"0cd22fac",4028:"c46fe749",4046:"d82ce2df",4133:"709a34ca",4429:"d4f6479b",4633:"6fa1329f",4645:"e8d61841",4778:"88b91dab",4784:"942b7b69",4841:"ce23a523",4848:"03d25b14",4891:"b33e29f2",4930:"616ac30c",4931:"300ccd7e",4954:"e5b1d897",4973:"6543f011",5138:"8e4ae7ac",5179:"64e4c1f0",5281:"e84e8032",5284:"03bad459",5339:"a7de1f63",5425:"212e3898",5467:"1e54ecae",5474:"d264c1d9",5475:"41f624bc",5513:"5dafbef0",5514:"3b4a4736",5562:"88e5e3a2",5572:"7b5d4ffc",5628:"5d209b33",5634:"91c6ae65",5673:"3b49b5ef",5716:"39697a86",5718:"36eb37b6",5742:"60b1d5b2",5772:"1fcd9acf",5865:"7ce0748f",5866:"82b75810",5883:"42922af9",5923:"929d7e31",5979:"16e1357e",6003:"61570841",6008:"adfa0d2f",6053:"da80e031",6080:"cbe50574",6147:"d40743e8",6281:"33a3c771",6332:"f2a4f3d5",6350:"620eb4c9",6419:"219b4ba9",6445:"48996318",6473:"f971cbc2",6559:"d1058175",6668:"73c6cd59",6682:"44a73ed9",6890:"1481bb90",6920:"02274d7b",6949:"f88bd12b",7098:"7a425922",7108:"685fe17f",7118:"05de067b",7165:"3ae4f8e5",7211:"62628bc5",7258:"4eea06e3",7338:"3e8c79c0",7408:"c6de4fbc",7453:"9b7dd8c8",7462:"60236844",7472:"ce946c2a",7507:"cd4f7aad",7713:"cb6d0f3d",7892:"e97eef4c",7894:"5e157eb4",8031:"46f2eb17",8054:"a9dd4a34",8064:"c255462c",8085:"c3449534",8102:"d5229333",8188:"5e58698d",8196:"7af007ad",8208:"872c8aa4",8261:"6883b6d6",8304:"0f075a89",8356:"63481bd6",8401:"72b10a31",8504:"47593649",8598:"47a85797",8661:"098d5c8a",8679:"b99c1633",8921:"a78561cd",8927:"3a5836ad",8929:"27d12542",8953:"fda6291f",9048:"271808f7",9126:"108a0e55",9141:"89b0e034",9304:"8d1cf604",9306:"203273db",9371:"4b41f654",9455:"7870fd22",9461:"5b63a573",9476:"d1729427",9479:"f58748d6",9483:"c57cc5af",9495:"b0827074",9555:"5269bca3",9580:"e76bfa8b",9619:"3d4e8dce",9642:"f8fc243a",9647:"7a7fae88",9905:"7d9e471a"}[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),d={},f="langflow-docs:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},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={17896441:"8401",19136925:"9141",64045095:"3576",b7251463:"51","0be1d5fe":"145",c643a6d5:"191",bc63ae25:"230","93e16042":"417","6d684b63":"768",fe965b62:"784","672a0eba":"787",a4c0ff01:"800",dc7b1ef3:"868","05d835b4":"964","8a61012d":"1022","24d32e91":"1035","16d61ab3":"1039",c2de64b8:"1185","647965d5":"1227","1b523369":"1246","7da17ff3":"1258","8054effa":"1394",ac3cc3f5:"1488","1e9025f7":"1500","3ef76b56":"1563","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690","2ab0d4f5":"1845",c3616f7f:"1917",fe6f9601:"1956","7b7db446":"2073","338a6f8e":"2097",e756fa26:"2273",c0d3c6ab:"2431","8ff68e6f":"2624",a3ab51d1:"2657","2efb9d3a":"2691",b3ba68b4:"2777",a9b73094:"2818","2148ae42":"3040","6a2beaac":"3110",bd7ab245:"3247","6aa941bb":"3327",b5257597:"3347",f66238ae:"3391",c2b1730c:"3694",a963b3cb:"3758","7679ca6e":"3859",c8dad5f1:"3917","829ff4d2":"3964",c2ebd62a:"4028","9ac856ad":"4046","5cf11f26":"4133","32cedcea":"4429",c563aec0:"4633",fef056e9:"4645",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",ca67d85f:"4891",d2ad385b:"4930",a9b4f8aa:"4931",a71efd4a:"4954","2d2c4fcb":"4973","309383dc":"5138","41e3c105":"5179",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",ee32130c:"5425","40d13080":"5467",d175aa8b:"5474","18f3809a":"5475","20d49d07":"5513","02955c09":"5514","20e9af62":"5562","873ebc27":"5572",a83bc7c0:"5628","9822a706":"5634","73af8c33":"5673","946d1cee":"5716","5ccf4833":"5718",aba21aa0:"5742","4e7126f8":"5772",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883","73d1a090":"5923",a3a1efc2:"5979","4d983c8e":"6003","445668ec":"6008",dfc50084:"6053","4d15791b":"6080",ab17fe15:"6147",c96ce3ed:"6281","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473","6f13807a":"6559","18988c08":"6668","5a6d6120":"6682","8b85e1d0":"6890",c817e236:"6920",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108","4ce9199e":"7118","547df4a1":"7165",cacdc615:"7211","11478de3":"7258",c39b795e:"7338","3ae94ad4":"7408",fdefa9a8:"7453","921b5fc1":"7462","744aaf8b":"7472",be76515e:"7507","3a82b27e":"7713","790349b7":"7892","0f44198a":"7894","25bf2d67":"8031","85112c90":"8054","274fd934":"8064",cc44357e:"8085","019dbd1f":"8102",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","474d53cd":"8261","3b356402":"8304",c6a5eaec:"8356",e6c6a4d2:"8504","44dfcf75":"8598","8f774222":"8661","3705a9c0":"8679","45476a69":"8921",ae68aa8b:"8927","172b3cfb":"8929",adef6868:"8953",a94703ab:"9048",ea3c040a:"9126",c329cc2b:"9304","667d0790":"9306","991799c5":"9371","54175a6c":"9455","23d0e682":"9461","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483",dedd5914:"9555",f81a91eb:"9580","29b8e27a":"9619",eae80ce0:"9642","5e95c892":"9647","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n - + diff --git a/components-custom-components.html b/components-custom-components.html index 4df173fdd2..e972d3c24f 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -3,14 +3,14 @@ -Custom Components | Langflow Documentation +Custom Components | Langflow Documentation - + @@ -20,7 +20,7 @@

Custom Components

-

Custom components are created within Langflow and extend the platform's functionality with custom, resusable Python code.

+

Custom components are created within Langflow and extend the platform's functionality with custom, reusable Python code.

Since Langflow operates with Python behind the scenes, you can implement any Python function within a Custom Component. This means you can leverage the power of libraries such as Pandas, Scikit-learn, Numpy, and thousands of other packages to create components that handle data processing in unlimited ways. You can use any type as long as the type is properly annotated in the output methods (e.g., > list[int]).

Custom Components create reusable and configurable components to enhance the capabilities of Langflow, making it a powerful tool for developing complex processing between user and AI messages.

How to Create Custom Components

diff --git a/components-data.html b/components-data.html index 5fcff5e664..dc2129e8e0 100644 --- a/components-data.html +++ b/components-data.html @@ -10,7 +10,7 @@ - + diff --git a/components-embedding-models.html b/components-embedding-models.html index 5e1d13494d..0dc0fc2ca3 100644 --- a/components-embedding-models.html +++ b/components-embedding-models.html @@ -10,7 +10,7 @@ - + diff --git a/components-helpers.html b/components-helpers.html index 2ea15fa5ad..92c2ec9119 100644 --- a/components-helpers.html +++ b/components-helpers.html @@ -10,7 +10,7 @@ - + diff --git a/components-io.html b/components-io.html index 609dc76646..024a7a2552 100644 --- a/components-io.html +++ b/components-io.html @@ -10,7 +10,7 @@ - + diff --git a/components-loaders.html b/components-loaders.html index bce5e14453..db880394fb 100644 --- a/components-loaders.html +++ b/components-loaders.html @@ -10,7 +10,7 @@ - + diff --git a/components-logic.html b/components-logic.html index f6bd62a248..f8d103da0a 100644 --- a/components-logic.html +++ b/components-logic.html @@ -10,7 +10,7 @@ - + diff --git a/components-models.html b/components-models.html index 8aca903845..6fafe942a2 100644 --- a/components-models.html +++ b/components-models.html @@ -10,7 +10,7 @@ - + diff --git a/components-overview.html b/components-overview.html index caffa28302..baae7a51f9 100644 --- a/components-overview.html +++ b/components-overview.html @@ -10,7 +10,7 @@ - + diff --git a/components-prompts.html b/components-prompts.html index 3a6593cbf4..4945d36b6f 100644 --- a/components-prompts.html +++ b/components-prompts.html @@ -10,7 +10,7 @@ - + diff --git a/components-rag.html b/components-rag.html index c729c0bc94..700772a879 100644 --- a/components-rag.html +++ b/components-rag.html @@ -10,7 +10,7 @@ - + diff --git a/components-vector-stores.html b/components-vector-stores.html index 8a27aa13b1..61bec74749 100644 --- a/components-vector-stores.html +++ b/components-vector-stores.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-api-keys.html b/configuration-api-keys.html index f33254d05a..b1d49062ba 100644 --- a/configuration-api-keys.html +++ b/configuration-api-keys.html @@ -10,7 +10,7 @@ - + @@ -51,7 +51,7 @@

Custom API endpoint

To choose a custom name for your API endpoint, select Project Settings > Endpoint Name and name your endpoint.

Revoke an API key

-

To revoke an API key, delete it from the the list of keys in the Settings menu.

+

To revoke an API key, delete it from the list of keys in the Settings menu.

  1. Click your user icon and select Settings.
  2. Click Langflow API.
  3. diff --git a/configuration-authentication.html b/configuration-authentication.html index 606cc28578..4343b05232 100644 --- a/configuration-authentication.html +++ b/configuration-authentication.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-auto-save.html b/configuration-auto-save.html index 8275c64a56..0022d0bd24 100644 --- a/configuration-auto-save.html +++ b/configuration-auto-save.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-backend-only.html b/configuration-backend-only.html index cb0c1d6be4..87e4f786a2 100644 --- a/configuration-backend-only.html +++ b/configuration-backend-only.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-cli.html b/configuration-cli.html index 968782b2c2..49037f8181 100644 --- a/configuration-cli.html +++ b/configuration-cli.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-global-variables.html b/configuration-global-variables.html index b4abf9cb53..b540affbbb 100644 --- a/configuration-global-variables.html +++ b/configuration-global-variables.html @@ -10,7 +10,7 @@ - + diff --git a/configuration-security-best-practices.html b/configuration-security-best-practices.html index 9022bf8d4d..5802f02c4b 100644 --- a/configuration-security-best-practices.html +++ b/configuration-security-best-practices.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-community.html b/contributing-community.html index 3dc4c990e8..f5d335105f 100644 --- a/contributing-community.html +++ b/contributing-community.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-components.html b/contributing-components.html index 3b8dab99a6..160a2aaf00 100644 --- a/contributing-components.html +++ b/contributing-components.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-github-discussions.html b/contributing-github-discussions.html index 01a251fd5f..89ba96e488 100644 --- a/contributing-github-discussions.html +++ b/contributing-github-discussions.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-github-issues.html b/contributing-github-issues.html index 6f3bcce982..c69860f9b8 100644 --- a/contributing-github-issues.html +++ b/contributing-github-issues.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-how-to-contribute.html b/contributing-how-to-contribute.html index b5550e9244..90a1d49e7a 100644 --- a/contributing-how-to-contribute.html +++ b/contributing-how-to-contribute.html @@ -10,7 +10,7 @@ - + diff --git a/contributing-telemetry.html b/contributing-telemetry.html index 54106b4dd7..6889c23b39 100644 --- a/contributing-telemetry.html +++ b/contributing-telemetry.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-docker.html b/deployment-docker.html index a59b2ad6c7..3765daca71 100644 --- a/deployment-docker.html +++ b/deployment-docker.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-gcp.html b/deployment-gcp.html index 6e926a8351..c00ff921e1 100644 --- a/deployment-gcp.html +++ b/deployment-gcp.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-hugging-face-spaces.html b/deployment-hugging-face-spaces.html index 8baa30b50e..f439eecfe6 100644 --- a/deployment-hugging-face-spaces.html +++ b/deployment-hugging-face-spaces.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-kubernetes.html b/deployment-kubernetes.html index 2e4dff7bab..74111a206a 100644 --- a/deployment-kubernetes.html +++ b/deployment-kubernetes.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-railway.html b/deployment-railway.html index ae43199fa3..810a0af792 100644 --- a/deployment-railway.html +++ b/deployment-railway.html @@ -10,7 +10,7 @@ - + diff --git a/deployment-render.html b/deployment-render.html index ebda5c409b..225d8c3ec0 100644 --- a/deployment-render.html +++ b/deployment-render.html @@ -10,7 +10,7 @@ - + diff --git a/environment-variables.html b/environment-variables.html index b3059c21bf..d1d1e8c84b 100644 --- a/environment-variables.html +++ b/environment-variables.html @@ -10,7 +10,7 @@ - + diff --git a/get-started-installation.html b/get-started-installation.html index 186b7a4327..77d728b1b6 100644 --- a/get-started-installation.html +++ b/get-started-installation.html @@ -10,7 +10,7 @@ - + diff --git a/get-started-quickstart.html b/get-started-quickstart.html index d02ec3a63e..eda794284e 100644 --- a/get-started-quickstart.html +++ b/get-started-quickstart.html @@ -10,7 +10,7 @@ - + diff --git a/guides-chat-memory.html b/guides-chat-memory.html index c388b810af..426b03313e 100644 --- a/guides-chat-memory.html +++ b/guides-chat-memory.html @@ -10,7 +10,7 @@ - + @@ -29,7 +29,7 @@

    Session ID


    -

    Chat conversations store messages categorized by a Session ID. A a single flow can host multiple session IDs, and different flows can also share the same one.

    +

    Chat conversations store messages categorized by a Session ID. A single flow can host multiple session IDs, and different flows can also share the same one.

    The Chat Memory component also retrieves message histories by Session ID, which users can change in the component's Controls pane.

    By default, if the Session ID value is empty, it is set to the same value as Flow ID.

    diff --git a/guides-data-message.html b/guides-data-message.html index e83a0e5f8c..b8459c7ca1 100644 --- a/guides-data-message.html +++ b/guides-data-message.html @@ -10,7 +10,7 @@ - + diff --git a/guides-new-to-llms.html b/guides-new-to-llms.html index 37c19d1c76..f8a722a2c3 100644 --- a/guides-new-to-llms.html +++ b/guides-new-to-llms.html @@ -10,7 +10,7 @@ - + diff --git a/index.html b/index.html index 7816195977..a36fe80cd5 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-assemblyai.html b/integrations-assemblyai.html index b8716f09c1..d027676a7d 100644 --- a/integrations-assemblyai.html +++ b/integrations-assemblyai.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-langfuse.html b/integrations-langfuse.html index 4490bd3ad5..8e192f668e 100644 --- a/integrations-langfuse.html +++ b/integrations-langfuse.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-langsmith.html b/integrations-langsmith.html index 119a744fee..6b69a4ae49 100644 --- a/integrations-langsmith.html +++ b/integrations-langsmith.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-langwatch.html b/integrations-langwatch.html index 4d92ac3beb..d874ce287e 100644 --- a/integrations-langwatch.html +++ b/integrations-langwatch.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-setup-google-cloud-vertex-ai-langflow.html b/integrations-setup-google-cloud-vertex-ai-langflow.html index 34270a811e..9ca486a3c5 100644 --- a/integrations-setup-google-cloud-vertex-ai-langflow.html +++ b/integrations-setup-google-cloud-vertex-ai-langflow.html @@ -10,7 +10,7 @@ - + diff --git a/integrations-setup-google-oauth-langflow.html b/integrations-setup-google-oauth-langflow.html index 7a50bd3e9a..97f2a7f974 100644 --- a/integrations-setup-google-oauth-langflow.html +++ b/integrations-setup-google-oauth-langflow.html @@ -10,7 +10,7 @@ - + diff --git a/integrations/notion/notion-agent-conversational.html b/integrations/notion/notion-agent-conversational.html index 8013e39f74..dfa596ac5a 100644 --- a/integrations/notion/notion-agent-conversational.html +++ b/integrations/notion/notion-agent-conversational.html @@ -10,7 +10,7 @@ - + diff --git a/integrations/notion/notion-agent-meeting-notes.html b/integrations/notion/notion-agent-meeting-notes.html index 6ab995ba21..e12fb30553 100644 --- a/integrations/notion/notion-agent-meeting-notes.html +++ b/integrations/notion/notion-agent-meeting-notes.html @@ -10,7 +10,7 @@ - + diff --git a/integrations/notion/setup.html b/integrations/notion/setup.html index 92fda7dd0e..9be326742f 100644 --- a/integrations/notion/setup.html +++ b/integrations/notion/setup.html @@ -10,7 +10,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 3b0013a814..f229a7e6da 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.langflow.org/apihttps://docs.langflow.org/api/add-userhttps://docs.langflow.org/api/auto-loginhttps://docs.langflow.org/api/build-flowhttps://docs.langflow.org/api/build-vertexhttps://docs.langflow.org/api/build-vertex-streamhttps://docs.langflow.org/api/check-if-store-has-api-keyhttps://docs.langflow.org/api/check-if-store-is-enabledhttps://docs.langflow.org/api/create-api-key-routehttps://docs.langflow.org/api/create-flowhttps://docs.langflow.org/api/create-flowshttps://docs.langflow.org/api/create-folderhttps://docs.langflow.org/api/create-upload-filehttps://docs.langflow.org/api/create-variablehttps://docs.langflow.org/api/custom-componenthttps://docs.langflow.org/api/custom-component-updatehttps://docs.langflow.org/api/delete-api-key-routehttps://docs.langflow.org/api/delete-filehttps://docs.langflow.org/api/delete-flowhttps://docs.langflow.org/api/delete-folderhttps://docs.langflow.org/api/delete-messageshttps://docs.langflow.org/api/delete-messages-sessionhttps://docs.langflow.org/api/delete-multiple-flowshttps://docs.langflow.org/api/delete-userhttps://docs.langflow.org/api/delete-variablehttps://docs.langflow.org/api/delete-vertex-buildshttps://docs.langflow.org/api/download-componenthttps://docs.langflow.org/api/download-filehttps://docs.langflow.org/api/download-file-1https://docs.langflow.org/api/download-imagehttps://docs.langflow.org/api/download-multiple-filehttps://docs.langflow.org/api/download-profile-picturehttps://docs.langflow.org/api/experimental-run-flowhttps://docs.langflow.org/api/get-allhttps://docs.langflow.org/api/get-api-keys-routehttps://docs.langflow.org/api/get-componentshttps://docs.langflow.org/api/get-confighttps://docs.langflow.org/api/get-list-of-components-liked-by-userhttps://docs.langflow.org/api/get-messageshttps://docs.langflow.org/api/get-starter-projectshttps://docs.langflow.org/api/get-tagshttps://docs.langflow.org/api/get-task-statushttps://docs.langflow.org/api/get-transactionshttps://docs.langflow.org/api/get-versionhttps://docs.langflow.org/api/get-vertex-buildshttps://docs.langflow.org/api/healthhttps://docs.langflow.org/api/health-checkhttps://docs.langflow.org/api/like-componenthttps://docs.langflow.org/api/list-fileshttps://docs.langflow.org/api/list-profile-pictureshttps://docs.langflow.org/api/login-to-get-access-tokenhttps://docs.langflow.org/api/logouthttps://docs.langflow.org/api/logshttps://docs.langflow.org/api/patch-userhttps://docs.langflow.org/api/post-validate-codehttps://docs.langflow.org/api/post-validate-prompthttps://docs.langflow.org/api/processhttps://docs.langflow.org/api/process-1https://docs.langflow.org/api/read-all-usershttps://docs.langflow.org/api/read-basic-exampleshttps://docs.langflow.org/api/read-current-userhttps://docs.langflow.org/api/read-flowhttps://docs.langflow.org/api/read-flowshttps://docs.langflow.org/api/read-folderhttps://docs.langflow.org/api/read-foldershttps://docs.langflow.org/api/read-variableshttps://docs.langflow.org/api/refresh-tokenhttps://docs.langflow.org/api/reset-passwordhttps://docs.langflow.org/api/retrieve-vertices-orderhttps://docs.langflow.org/api/save-store-api-keyhttps://docs.langflow.org/api/share-componenthttps://docs.langflow.org/api/simplified-run-flowhttps://docs.langflow.org/api/stream-logshttps://docs.langflow.org/api/update-flowhttps://docs.langflow.org/api/update-folderhttps://docs.langflow.org/api/update-messagehttps://docs.langflow.org/api/update-session-idhttps://docs.langflow.org/api/update-shared-componenthttps://docs.langflow.org/api/update-variablehttps://docs.langflow.org/api/upload-filehttps://docs.langflow.org/api/upload-file-1https://docs.langflow.org/api/upload-file-2https://docs.langflow.org/api/webhook-run-flowhttps://docs.langflow.org/agents-overview2024-12-11T17:21:26.000Zhttps://docs.langflow.org/agents-tool-calling-agent-component2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-agents2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-custom-components2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-data2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-embedding-models2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-helpers2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-io2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-loaders2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-logic2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-models2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-overview2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-prompts2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-rag2024-12-11T17:21:26.000Zhttps://docs.langflow.org/components-vector-stores2024-12-11T17:21:26.000Zhttps://docs.langflow.org/Components/components-memories2024-12-11T17:21:26.000Zhttps://docs.langflow.org/Components/components-tools2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-api-keys2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-authentication2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-auto-save2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-backend-only2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-cli2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-global-variables2024-12-11T17:21:26.000Zhttps://docs.langflow.org/configuration-security-best-practices2024-12-11T17:21:26.000Zhttps://docs.langflow.org/Configuration/configuration-custom-database2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-community2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-components2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-github-discussions2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-github-issues2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-how-to-contribute2024-12-11T17:21:26.000Zhttps://docs.langflow.org/contributing-telemetry2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-docker2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-gcp2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-kubernetes2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-railway2024-12-11T17:21:26.000Zhttps://docs.langflow.org/deployment-render2024-12-11T17:21:26.000Zhttps://docs.langflow.org/environment-variables2024-12-11T17:21:26.000Zhttps://docs.langflow.org/get-started-installation2024-12-11T17:21:26.000Zhttps://docs.langflow.org/get-started-quickstart2024-12-11T17:21:26.000Zhttps://docs.langflow.org/guides-chat-memory2024-12-11T17:21:26.000Zhttps://docs.langflow.org/guides-data-message2024-12-11T17:21:26.000Zhttps://docs.langflow.org/guides-new-to-llms2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-assemblyai2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-langfuse2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-langsmith2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-langwatch2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-setup-google-cloud-vertex-ai-langflow2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations-setup-google-oauth-langflow2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations/notion/notion-agent-conversational2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations/notion/notion-agent-meeting-notes2024-12-11T17:21:26.000Zhttps://docs.langflow.org/integrations/notion/setup2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-basic-prompting2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-blog-writer2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-document-qa2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-memory-chatbot2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-sequential-agent2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-simple-agent2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-travel-planning-agent2024-12-11T17:21:26.000Zhttps://docs.langflow.org/starter-projects-vector-store-rag2024-12-11T17:21:26.000Zhttps://docs.langflow.org/workspace-api2024-12-11T17:21:26.000Zhttps://docs.langflow.org/workspace-logs2024-12-11T17:21:26.000Zhttps://docs.langflow.org/workspace-overview2024-12-11T17:21:26.000Zhttps://docs.langflow.org/workspace-playground2024-12-11T17:21:26.000Zhttps://docs.langflow.org/2024-12-11T17:21:26.000Z \ No newline at end of file +https://docs.langflow.org/apihttps://docs.langflow.org/api/add-userhttps://docs.langflow.org/api/auto-loginhttps://docs.langflow.org/api/build-flowhttps://docs.langflow.org/api/build-vertexhttps://docs.langflow.org/api/build-vertex-streamhttps://docs.langflow.org/api/check-if-store-has-api-keyhttps://docs.langflow.org/api/check-if-store-is-enabledhttps://docs.langflow.org/api/create-api-key-routehttps://docs.langflow.org/api/create-flowhttps://docs.langflow.org/api/create-flowshttps://docs.langflow.org/api/create-folderhttps://docs.langflow.org/api/create-upload-filehttps://docs.langflow.org/api/create-variablehttps://docs.langflow.org/api/custom-componenthttps://docs.langflow.org/api/custom-component-updatehttps://docs.langflow.org/api/delete-api-key-routehttps://docs.langflow.org/api/delete-filehttps://docs.langflow.org/api/delete-flowhttps://docs.langflow.org/api/delete-folderhttps://docs.langflow.org/api/delete-messageshttps://docs.langflow.org/api/delete-messages-sessionhttps://docs.langflow.org/api/delete-multiple-flowshttps://docs.langflow.org/api/delete-userhttps://docs.langflow.org/api/delete-variablehttps://docs.langflow.org/api/delete-vertex-buildshttps://docs.langflow.org/api/download-componenthttps://docs.langflow.org/api/download-filehttps://docs.langflow.org/api/download-file-1https://docs.langflow.org/api/download-imagehttps://docs.langflow.org/api/download-multiple-filehttps://docs.langflow.org/api/download-profile-picturehttps://docs.langflow.org/api/experimental-run-flowhttps://docs.langflow.org/api/get-allhttps://docs.langflow.org/api/get-api-keys-routehttps://docs.langflow.org/api/get-componentshttps://docs.langflow.org/api/get-confighttps://docs.langflow.org/api/get-list-of-components-liked-by-userhttps://docs.langflow.org/api/get-messageshttps://docs.langflow.org/api/get-starter-projectshttps://docs.langflow.org/api/get-tagshttps://docs.langflow.org/api/get-task-statushttps://docs.langflow.org/api/get-transactionshttps://docs.langflow.org/api/get-versionhttps://docs.langflow.org/api/get-vertex-buildshttps://docs.langflow.org/api/healthhttps://docs.langflow.org/api/health-checkhttps://docs.langflow.org/api/like-componenthttps://docs.langflow.org/api/list-fileshttps://docs.langflow.org/api/list-profile-pictureshttps://docs.langflow.org/api/login-to-get-access-tokenhttps://docs.langflow.org/api/logouthttps://docs.langflow.org/api/logshttps://docs.langflow.org/api/patch-userhttps://docs.langflow.org/api/post-validate-codehttps://docs.langflow.org/api/post-validate-prompthttps://docs.langflow.org/api/processhttps://docs.langflow.org/api/process-1https://docs.langflow.org/api/read-all-usershttps://docs.langflow.org/api/read-basic-exampleshttps://docs.langflow.org/api/read-current-userhttps://docs.langflow.org/api/read-flowhttps://docs.langflow.org/api/read-flowshttps://docs.langflow.org/api/read-folderhttps://docs.langflow.org/api/read-foldershttps://docs.langflow.org/api/read-variableshttps://docs.langflow.org/api/refresh-tokenhttps://docs.langflow.org/api/reset-passwordhttps://docs.langflow.org/api/retrieve-vertices-orderhttps://docs.langflow.org/api/save-store-api-keyhttps://docs.langflow.org/api/share-componenthttps://docs.langflow.org/api/simplified-run-flowhttps://docs.langflow.org/api/stream-logshttps://docs.langflow.org/api/update-flowhttps://docs.langflow.org/api/update-folderhttps://docs.langflow.org/api/update-messagehttps://docs.langflow.org/api/update-session-idhttps://docs.langflow.org/api/update-shared-componenthttps://docs.langflow.org/api/update-variablehttps://docs.langflow.org/api/upload-filehttps://docs.langflow.org/api/upload-file-1https://docs.langflow.org/api/upload-file-2https://docs.langflow.org/api/webhook-run-flowhttps://docs.langflow.org/agents-overview2024-12-11T17:30:08.000Zhttps://docs.langflow.org/agents-tool-calling-agent-component2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-agents2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-custom-components2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-data2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-embedding-models2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-helpers2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-io2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-loaders2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-logic2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-models2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-overview2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-prompts2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-rag2024-12-11T17:30:08.000Zhttps://docs.langflow.org/components-vector-stores2024-12-11T17:30:08.000Zhttps://docs.langflow.org/Components/components-memories2024-12-11T17:30:08.000Zhttps://docs.langflow.org/Components/components-tools2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-api-keys2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-authentication2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-auto-save2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-backend-only2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-cli2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-global-variables2024-12-11T17:30:08.000Zhttps://docs.langflow.org/configuration-security-best-practices2024-12-11T17:30:08.000Zhttps://docs.langflow.org/Configuration/configuration-custom-database2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-community2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-components2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-github-discussions2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-github-issues2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-how-to-contribute2024-12-11T17:30:08.000Zhttps://docs.langflow.org/contributing-telemetry2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-docker2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-gcp2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-kubernetes2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-railway2024-12-11T17:30:08.000Zhttps://docs.langflow.org/deployment-render2024-12-11T17:30:08.000Zhttps://docs.langflow.org/environment-variables2024-12-11T17:30:08.000Zhttps://docs.langflow.org/get-started-installation2024-12-11T17:30:08.000Zhttps://docs.langflow.org/get-started-quickstart2024-12-11T17:30:08.000Zhttps://docs.langflow.org/guides-chat-memory2024-12-11T17:30:08.000Zhttps://docs.langflow.org/guides-data-message2024-12-11T17:30:08.000Zhttps://docs.langflow.org/guides-new-to-llms2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-assemblyai2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-langfuse2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-langsmith2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-langwatch2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-setup-google-cloud-vertex-ai-langflow2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations-setup-google-oauth-langflow2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations/notion/notion-agent-conversational2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations/notion/notion-agent-meeting-notes2024-12-11T17:30:08.000Zhttps://docs.langflow.org/integrations/notion/setup2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-basic-prompting2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-blog-writer2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-document-qa2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-memory-chatbot2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-sequential-agent2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-simple-agent2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-travel-planning-agent2024-12-11T17:30:08.000Zhttps://docs.langflow.org/starter-projects-vector-store-rag2024-12-11T17:30:08.000Zhttps://docs.langflow.org/workspace-api2024-12-11T17:30:08.000Zhttps://docs.langflow.org/workspace-logs2024-12-11T17:30:08.000Zhttps://docs.langflow.org/workspace-overview2024-12-11T17:30:08.000Zhttps://docs.langflow.org/workspace-playground2024-12-11T17:30:08.000Zhttps://docs.langflow.org/2024-12-11T17:30:08.000Z \ No newline at end of file diff --git a/starter-projects-basic-prompting.html b/starter-projects-basic-prompting.html index d7079be76c..3292053466 100644 --- a/starter-projects-basic-prompting.html +++ b/starter-projects-basic-prompting.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-blog-writer.html b/starter-projects-blog-writer.html index 2b310bab04..5cfd733a4c 100644 --- a/starter-projects-blog-writer.html +++ b/starter-projects-blog-writer.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-document-qa.html b/starter-projects-document-qa.html index d7d707c4d5..38e52d9f3a 100644 --- a/starter-projects-document-qa.html +++ b/starter-projects-document-qa.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-memory-chatbot.html b/starter-projects-memory-chatbot.html index c83d6500f2..cb0403cae5 100644 --- a/starter-projects-memory-chatbot.html +++ b/starter-projects-memory-chatbot.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-sequential-agent.html b/starter-projects-sequential-agent.html index 8b9e1864d6..b9ac797190 100644 --- a/starter-projects-sequential-agent.html +++ b/starter-projects-sequential-agent.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-simple-agent.html b/starter-projects-simple-agent.html index 5765352f28..32dd9e444b 100644 --- a/starter-projects-simple-agent.html +++ b/starter-projects-simple-agent.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-travel-planning-agent.html b/starter-projects-travel-planning-agent.html index 4fd63ee017..f1a4a83479 100644 --- a/starter-projects-travel-planning-agent.html +++ b/starter-projects-travel-planning-agent.html @@ -10,7 +10,7 @@ - + diff --git a/starter-projects-vector-store-rag.html b/starter-projects-vector-store-rag.html index d0a1fa633d..4def5cc5e8 100644 --- a/starter-projects-vector-store-rag.html +++ b/starter-projects-vector-store-rag.html @@ -10,7 +10,7 @@ - + diff --git a/workspace-api.html b/workspace-api.html index d7652ac4f3..51ebae1cb3 100644 --- a/workspace-api.html +++ b/workspace-api.html @@ -10,7 +10,7 @@ - + diff --git a/workspace-logs.html b/workspace-logs.html index 5f1eec8cba..4f1012622c 100644 --- a/workspace-logs.html +++ b/workspace-logs.html @@ -10,7 +10,7 @@ - + diff --git a/workspace-overview.html b/workspace-overview.html index 2c2b863783..9cfb500c24 100644 --- a/workspace-overview.html +++ b/workspace-overview.html @@ -10,7 +10,7 @@ - + diff --git a/workspace-playground.html b/workspace-playground.html index d5dfda13ee..5ac791a676 100644 --- a/workspace-playground.html +++ b/workspace-playground.html @@ -10,7 +10,7 @@ - +