diff --git a/404.html b/404.html index 034952a26e..57e56efcf8 100644 --- a/404.html +++ b/404.html @@ -23,7 +23,7 @@ - + diff --git a/about-langflow.html b/about-langflow.html index 48c1c7c497..6497cd3498 100644 --- a/about-langflow.html +++ b/about-langflow.html @@ -23,7 +23,7 @@ - + diff --git a/agent-tutorial.html b/agent-tutorial.html index 0b1f0e1c79..50d72def30 100644 --- a/agent-tutorial.html +++ b/agent-tutorial.html @@ -23,7 +23,7 @@ - + diff --git a/agents-tools.html b/agents-tools.html index 90e3826086..83cf060f90 100644 --- a/agents-tools.html +++ b/agents-tools.html @@ -23,7 +23,7 @@ - + diff --git a/agents.html b/agents.html index 0745b5c251..806eaa3f2a 100644 --- a/agents.html +++ b/agents.html @@ -23,7 +23,7 @@ - + diff --git a/api-build.html b/api-build.html index c9e30950f6..6f2ca6d7c3 100644 --- a/api-build.html +++ b/api-build.html @@ -23,7 +23,7 @@ - + diff --git a/api-files.html b/api-files.html index 39a8ab40fc..488cb04b25 100644 --- a/api-files.html +++ b/api-files.html @@ -23,7 +23,7 @@ - + diff --git a/api-flows-run.html b/api-flows-run.html index 9139696680..294c4b7a89 100644 --- a/api-flows-run.html +++ b/api-flows-run.html @@ -23,7 +23,7 @@ - + diff --git a/api-flows.html b/api-flows.html index 387259a3cf..8c7524997c 100644 --- a/api-flows.html +++ b/api-flows.html @@ -23,7 +23,7 @@ - + diff --git a/api-keys-and-authentication.html b/api-keys-and-authentication.html index 659e1b3d1e..cb1b8a8652 100644 --- a/api-keys-and-authentication.html +++ b/api-keys-and-authentication.html @@ -23,7 +23,7 @@ - + diff --git a/api-logs.html b/api-logs.html index 62a73c338e..6563c6138b 100644 --- a/api-logs.html +++ b/api-logs.html @@ -23,7 +23,7 @@ - + diff --git a/api-monitor.html b/api-monitor.html index 310f7fff38..9f75f6e5f7 100644 --- a/api-monitor.html +++ b/api-monitor.html @@ -23,7 +23,7 @@ - + diff --git a/api-projects.html b/api-projects.html index 83aa022a0a..53052c3385 100644 --- a/api-projects.html +++ b/api-projects.html @@ -23,7 +23,7 @@ - + diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html index 4c6540211f..11fec5e5f4 100644 --- a/api-reference-api-examples.html +++ b/api-reference-api-examples.html @@ -23,7 +23,7 @@ - + diff --git a/api-users.html b/api-users.html index 9347d6cd61..eaefea5cb0 100644 --- a/api-users.html +++ b/api-users.html @@ -23,7 +23,7 @@ - + diff --git a/api.html b/api.html index acdd92e3e2..95dd2eae87 100644 --- a/api.html +++ b/api.html @@ -23,7 +23,7 @@ - + diff --git a/api/add-server.html b/api/add-server.html index 1d3987cdd3..d9200c1f97 100644 --- a/api/add-server.html +++ b/api/add-server.html @@ -23,7 +23,7 @@ - + diff --git a/api/add-user.html b/api/add-user.html index 978217a086..a92d9c9d93 100644 --- a/api/add-user.html +++ b/api/add-user.html @@ -23,7 +23,7 @@ - + diff --git a/api/auto-login.html b/api/auto-login.html index f3e6929bf8..659dfe9873 100644 --- a/api/auto-login.html +++ b/api/auto-login.html @@ -23,7 +23,7 @@ - + diff --git a/api/build-flow.html b/api/build-flow.html index ba455e2875..5cf9f7da35 100644 --- a/api/build-flow.html +++ b/api/build-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/build-public-tmp.html b/api/build-public-tmp.html index 89e392c277..f6fe620925 100644 --- a/api/build-public-tmp.html +++ b/api/build-public-tmp.html @@ -23,7 +23,7 @@ - + diff --git a/api/build-vertex-stream.html b/api/build-vertex-stream.html index 44fb355caa..097205f850 100644 --- a/api/build-vertex-stream.html +++ b/api/build-vertex-stream.html @@ -23,7 +23,7 @@ - + diff --git a/api/build-vertex.html b/api/build-vertex.html index 327fa7f74e..e7674fbb7e 100644 --- a/api/build-vertex.html +++ b/api/build-vertex.html @@ -23,7 +23,7 @@ - + diff --git a/api/cancel-build.html b/api/cancel-build.html index a45b079a70..06e27d1ac4 100644 --- a/api/cancel-build.html +++ b/api/cancel-build.html @@ -23,7 +23,7 @@ - + diff --git a/api/check-if-store-has-api-key.html b/api/check-if-store-has-api-key.html index 2ce22c6eb9..b609c20f63 100644 --- a/api/check-if-store-has-api-key.html +++ b/api/check-if-store-has-api-key.html @@ -23,7 +23,7 @@ - + diff --git a/api/check-if-store-is-enabled.html b/api/check-if-store-is-enabled.html index 71e20be574..90c9e67752 100644 --- a/api/check-if-store-is-enabled.html +++ b/api/check-if-store-is-enabled.html @@ -23,7 +23,7 @@ - + diff --git a/api/check-installed-mcp-servers.html b/api/check-installed-mcp-servers.html index ed8de6a6b0..892e4a352c 100644 --- a/api/check-installed-mcp-servers.html +++ b/api/check-installed-mcp-servers.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-api-key-route.html b/api/create-api-key-route.html index cbb590830c..2cad5254e1 100644 --- a/api/create-api-key-route.html +++ b/api/create-api-key-route.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-flow.html b/api/create-flow.html index 8b8795a3cc..5f62c8d0ed 100644 --- a/api/create-flow.html +++ b/api/create-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-flows.html b/api/create-flows.html index f508df505b..bdd16c9b0a 100644 --- a/api/create-flows.html +++ b/api/create-flows.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-folder-redirect.html b/api/create-folder-redirect.html index e4db3f2875..021ec1f930 100644 --- a/api/create-folder-redirect.html +++ b/api/create-folder-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-project.html b/api/create-project.html index 6beef1ea75..c7325776e1 100644 --- a/api/create-project.html +++ b/api/create-project.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-upload-file.html b/api/create-upload-file.html index 8990b224e9..b719bb00e8 100644 --- a/api/create-upload-file.html +++ b/api/create-upload-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-variable.html b/api/create-variable.html index 742585bed7..32c665cec8 100644 --- a/api/create-variable.html +++ b/api/create-variable.html @@ -23,7 +23,7 @@ - + diff --git a/api/custom-component-update.html b/api/custom-component-update.html index 487df48535..4b15d210a3 100644 --- a/api/custom-component-update.html +++ b/api/custom-component-update.html @@ -23,7 +23,7 @@ - + diff --git a/api/custom-component.html b/api/custom-component.html index fe7cb3b747..3b21cf8b7a 100644 --- a/api/custom-component.html +++ b/api/custom-component.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-all-files-1.html b/api/delete-all-files-1.html index 0a05af5605..bb458cc8f5 100644 --- a/api/delete-all-files-1.html +++ b/api/delete-all-files-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-all-files.html b/api/delete-all-files.html index 743cf69ec6..4672fcb7ec 100644 --- a/api/delete-all-files.html +++ b/api/delete-all-files.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-api-key-route.html b/api/delete-api-key-route.html index aa56301228..3378a84de2 100644 --- a/api/delete-api-key-route.html +++ b/api/delete-api-key-route.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-file-1.html b/api/delete-file-1.html index 5a62ad73b2..19832e7665 100644 --- a/api/delete-file-1.html +++ b/api/delete-file-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-file.html b/api/delete-file.html index 13fef3e1a1..777c8ef298 100644 --- a/api/delete-file.html +++ b/api/delete-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-files-batch.html b/api/delete-files-batch.html index d33f266890..374f1cf0d4 100644 --- a/api/delete-files-batch.html +++ b/api/delete-files-batch.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-flow.html b/api/delete-flow.html index 715661d7bf..970f174901 100644 --- a/api/delete-flow.html +++ b/api/delete-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-folder-redirect.html b/api/delete-folder-redirect.html index d52163a630..cc754df171 100644 --- a/api/delete-folder-redirect.html +++ b/api/delete-folder-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-messages-session.html b/api/delete-messages-session.html index a4625ee13c..43373c215d 100644 --- a/api/delete-messages-session.html +++ b/api/delete-messages-session.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-messages.html b/api/delete-messages.html index 5ee4f1feb0..c421ab71ce 100644 --- a/api/delete-messages.html +++ b/api/delete-messages.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-multiple-flows.html b/api/delete-multiple-flows.html index 831fea10e6..6a16723c9e 100644 --- a/api/delete-multiple-flows.html +++ b/api/delete-multiple-flows.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-project.html b/api/delete-project.html index 9363d8afe2..27a0e8515e 100644 --- a/api/delete-project.html +++ b/api/delete-project.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-server.html b/api/delete-server.html index a2cd204a6a..b33e07bd1d 100644 --- a/api/delete-server.html +++ b/api/delete-server.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-user.html b/api/delete-user.html index 24aaa80e07..9a7bf41442 100644 --- a/api/delete-user.html +++ b/api/delete-user.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-variable.html b/api/delete-variable.html index 82aa56494f..c6a1ec719d 100644 --- a/api/delete-variable.html +++ b/api/delete-variable.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-vertex-builds.html b/api/delete-vertex-builds.html index 5d0f45df83..9ef0c2e0d4 100644 --- a/api/delete-vertex-builds.html +++ b/api/delete-vertex-builds.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-component.html b/api/download-component.html index 3941f3f59a..8dee5e7503 100644 --- a/api/download-component.html +++ b/api/download-component.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-file-1.html b/api/download-file-1.html index ccdcee0114..53d5b3e37f 100644 --- a/api/download-file-1.html +++ b/api/download-file-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-file-2.html b/api/download-file-2.html index 032b7f4c37..2242d2ceeb 100644 --- a/api/download-file-2.html +++ b/api/download-file-2.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-file-redirect.html b/api/download-file-redirect.html index dd08625458..4c005c360e 100644 --- a/api/download-file-redirect.html +++ b/api/download-file-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-file.html b/api/download-file.html index 10fff7aede..a23b8a8b7f 100644 --- a/api/download-file.html +++ b/api/download-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-files-batch.html b/api/download-files-batch.html index 6a8313de87..880b0beb1e 100644 --- a/api/download-files-batch.html +++ b/api/download-files-batch.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-image.html b/api/download-image.html index fcd9c0e53d..d660fdb3e8 100644 --- a/api/download-image.html +++ b/api/download-image.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-multiple-file.html b/api/download-multiple-file.html index 68853b7bc4..6d476bfc31 100644 --- a/api/download-multiple-file.html +++ b/api/download-multiple-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/download-profile-picture.html b/api/download-profile-picture.html index 6f1db82e06..8845b83617 100644 --- a/api/download-profile-picture.html +++ b/api/download-profile-picture.html @@ -23,7 +23,7 @@ - + diff --git a/api/edit-file-name.html b/api/edit-file-name.html index 0c851cf8e2..11c526f3a1 100644 --- a/api/edit-file-name.html +++ b/api/edit-file-name.html @@ -23,7 +23,7 @@ - + diff --git a/api/experimental-run-flow.html b/api/experimental-run-flow.html index 799486226d..d4f5ba63fd 100644 --- a/api/experimental-run-flow.html +++ b/api/experimental-run-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-all.html b/api/get-all.html index b2d25dc9c7..3aad3f69da 100644 --- a/api/get-all.html +++ b/api/get-all.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-api-keys-route.html b/api/get-api-keys-route.html index 04e7cc8b31..677feb4bd2 100644 --- a/api/get-api-keys-route.html +++ b/api/get-api-keys-route.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-build-events.html b/api/get-build-events.html index 6ee2f8a6d8..3615b70a9a 100644 --- a/api/get-build-events.html +++ b/api/get-build-events.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-components.html b/api/get-components.html index f2959a59b6..14ee7b57eb 100644 --- a/api/get-components.html +++ b/api/get-components.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-config.html b/api/get-config.html index e4eba1c566..02b48e590d 100644 --- a/api/get-config.html +++ b/api/get-config.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-elevenlabs-voice-ids.html b/api/get-elevenlabs-voice-ids.html index ec8537b1b9..cff52c77a5 100644 --- a/api/get-elevenlabs-voice-ids.html +++ b/api/get-elevenlabs-voice-ids.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-list-of-components-liked-by-user.html b/api/get-list-of-components-liked-by-user.html index 10caa5ce35..354e2cdb08 100644 --- a/api/get-list-of-components-liked-by-user.html +++ b/api/get-list-of-components-liked-by-user.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-message-sessions.html b/api/get-message-sessions.html index db31dbaf12..d1e738279f 100644 --- a/api/get-message-sessions.html +++ b/api/get-message-sessions.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-messages.html b/api/get-messages.html index 619158d08c..22b7d5b9d9 100644 --- a/api/get-messages.html +++ b/api/get-messages.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-server-endpoint.html b/api/get-server-endpoint.html index 4b2dd3609d..55d9133fc1 100644 --- a/api/get-server-endpoint.html +++ b/api/get-server-endpoint.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-servers.html b/api/get-servers.html index 671706a713..dafefdb685 100644 --- a/api/get-servers.html +++ b/api/get-servers.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-starter-projects.html b/api/get-starter-projects.html index 8bc06ffd10..46aea23d5b 100644 --- a/api/get-starter-projects.html +++ b/api/get-starter-projects.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-tags.html b/api/get-tags.html index 39b408e31b..a81a819df3 100644 --- a/api/get-tags.html +++ b/api/get-tags.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-task-status.html b/api/get-task-status.html index 4ff46ca225..033e55fa28 100644 --- a/api/get-task-status.html +++ b/api/get-task-status.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-transactions.html b/api/get-transactions.html index 19ad302737..bcf6a259ee 100644 --- a/api/get-transactions.html +++ b/api/get-transactions.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-version.html b/api/get-version.html index c0e45523d1..f10796b170 100644 --- a/api/get-version.html +++ b/api/get-version.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-vertex-builds.html b/api/get-vertex-builds.html index 03f5c4c804..43db4fca03 100644 --- a/api/get-vertex-builds.html +++ b/api/get-vertex-builds.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-messages-1.html b/api/handle-messages-1.html index eaaccdba6a..047423de9a 100644 --- a/api/handle-messages-1.html +++ b/api/handle-messages-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-messages.html b/api/handle-messages.html index ab4c15effa..bee2925776 100644 --- a/api/handle-messages.html +++ b/api/handle-messages.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-project-messages-with-slash.html b/api/handle-project-messages-with-slash.html index 409c3e5818..6ce02a7fdb 100644 --- a/api/handle-project-messages-with-slash.html +++ b/api/handle-project-messages-with-slash.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-project-messages.html b/api/handle-project-messages.html index 3ec43a9c02..0b392125f9 100644 --- a/api/handle-project-messages.html +++ b/api/handle-project-messages.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-project-sse.html b/api/handle-project-sse.html index ef01ae7b30..577f0dc902 100644 --- a/api/handle-project-sse.html +++ b/api/handle-project-sse.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-sse-1.html b/api/handle-sse-1.html index a62a173fdb..792c72b4ba 100644 --- a/api/handle-sse-1.html +++ b/api/handle-sse-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/handle-sse.html b/api/handle-sse.html index 80d086f939..14f1fe2e93 100644 --- a/api/handle-sse.html +++ b/api/handle-sse.html @@ -23,7 +23,7 @@ - + diff --git a/api/health-check.html b/api/health-check.html index aa9d0578ad..b2b48da25c 100644 --- a/api/health-check.html +++ b/api/health-check.html @@ -23,7 +23,7 @@ - + diff --git a/api/health.html b/api/health.html index b757b09039..1a466074db 100644 --- a/api/health.html +++ b/api/health.html @@ -23,7 +23,7 @@ - + diff --git a/api/install-mcp-config.html b/api/install-mcp-config.html index bc63b20221..297ad2b9e2 100644 --- a/api/install-mcp-config.html +++ b/api/install-mcp-config.html @@ -23,7 +23,7 @@ - + diff --git a/api/like-component.html b/api/like-component.html index 6d53fb55b2..dd2543fdc6 100644 --- a/api/like-component.html +++ b/api/like-component.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-files-1.html b/api/list-files-1.html index 19f3a7f8fa..8e15156dd2 100644 --- a/api/list-files-1.html +++ b/api/list-files-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-files-2.html b/api/list-files-2.html index 4534b1908a..ea73510a6e 100644 --- a/api/list-files-2.html +++ b/api/list-files-2.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-files.html b/api/list-files.html index 6f03f6ce95..6d8b05c5d2 100644 --- a/api/list-files.html +++ b/api/list-files.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-profile-pictures.html b/api/list-profile-pictures.html index f667a7cf9b..e67826d85d 100644 --- a/api/list-profile-pictures.html +++ b/api/list-profile-pictures.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-project-tools.html b/api/list-project-tools.html index 26456fe712..b13a76dfd3 100644 --- a/api/list-project-tools.html +++ b/api/list-project-tools.html @@ -23,7 +23,7 @@ - + diff --git a/api/login-to-get-access-token.html b/api/login-to-get-access-token.html index 1fd68f4b80..4797c63195 100644 --- a/api/login-to-get-access-token.html +++ b/api/login-to-get-access-token.html @@ -23,7 +23,7 @@ - + diff --git a/api/logout.html b/api/logout.html index 863cd6ed12..8d06627fde 100644 --- a/api/logout.html +++ b/api/logout.html @@ -23,7 +23,7 @@ - + diff --git a/api/logs.html b/api/logs.html index 4d9d6c6a51..46dc1984f5 100644 --- a/api/logs.html +++ b/api/logs.html @@ -23,7 +23,7 @@ - + diff --git a/api/patch-user.html b/api/patch-user.html index 0a14c1d658..3b906650db 100644 --- a/api/patch-user.html +++ b/api/patch-user.html @@ -23,7 +23,7 @@ - + diff --git a/api/post-validate-code.html b/api/post-validate-code.html index a7c14ad740..1fb2e4c942 100644 --- a/api/post-validate-code.html +++ b/api/post-validate-code.html @@ -23,7 +23,7 @@ - + diff --git a/api/post-validate-prompt.html b/api/post-validate-prompt.html index 2d4745bc32..9f062e55d4 100644 --- a/api/post-validate-prompt.html +++ b/api/post-validate-prompt.html @@ -23,7 +23,7 @@ - + diff --git a/api/process-1.html b/api/process-1.html index fcf1b811fe..a3eedffc77 100644 --- a/api/process-1.html +++ b/api/process-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/process.html b/api/process.html index f61c99a989..c76c237077 100644 --- a/api/process.html +++ b/api/process.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-all-users.html b/api/read-all-users.html index 090e064498..d489fd0044 100644 --- a/api/read-all-users.html +++ b/api/read-all-users.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-basic-examples.html b/api/read-basic-examples.html index 77332aa2fa..aba91f4864 100644 --- a/api/read-basic-examples.html +++ b/api/read-basic-examples.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-current-user.html b/api/read-current-user.html index 0c100f308b..1be4830c80 100644 --- a/api/read-current-user.html +++ b/api/read-current-user.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-flow.html b/api/read-flow.html index b8148d6778..dc14384515 100644 --- a/api/read-flow.html +++ b/api/read-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-flows.html b/api/read-flows.html index 74a68079c3..8fd625b031 100644 --- a/api/read-flows.html +++ b/api/read-flows.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-folder-redirect.html b/api/read-folder-redirect.html index 8e44433791..e6e8c832b2 100644 --- a/api/read-folder-redirect.html +++ b/api/read-folder-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-folders-redirect.html b/api/read-folders-redirect.html index d2de62ae6e..fa5142680d 100644 --- a/api/read-folders-redirect.html +++ b/api/read-folders-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-project.html b/api/read-project.html index 3eb1b5b41f..c013362007 100644 --- a/api/read-project.html +++ b/api/read-project.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-projects.html b/api/read-projects.html index d849d6bb3c..ecdcef5fbb 100644 --- a/api/read-projects.html +++ b/api/read-projects.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-public-flow.html b/api/read-public-flow.html index a32672ca33..9543bcb508 100644 --- a/api/read-public-flow.html +++ b/api/read-public-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/read-variables.html b/api/read-variables.html index 88df163836..c095e19fe0 100644 --- a/api/read-variables.html +++ b/api/read-variables.html @@ -23,7 +23,7 @@ - + diff --git a/api/refresh-token.html b/api/refresh-token.html index 5f5daba06c..fed3a0e0f7 100644 --- a/api/refresh-token.html +++ b/api/refresh-token.html @@ -23,7 +23,7 @@ - + diff --git a/api/reset-password.html b/api/reset-password.html index bc232f935a..f4963a74eb 100644 --- a/api/reset-password.html +++ b/api/reset-password.html @@ -23,7 +23,7 @@ - + diff --git a/api/retrieve-vertices-order.html b/api/retrieve-vertices-order.html index 09e7759bca..a63c0056c4 100644 --- a/api/retrieve-vertices-order.html +++ b/api/retrieve-vertices-order.html @@ -23,7 +23,7 @@ - + diff --git a/api/save-store-api-key.html b/api/save-store-api-key.html index 77f6285a0e..ee02a03757 100644 --- a/api/save-store-api-key.html +++ b/api/save-store-api-key.html @@ -23,7 +23,7 @@ - + diff --git a/api/share-component.html b/api/share-component.html index fad4e8f38f..92ef82eef3 100644 --- a/api/share-component.html +++ b/api/share-component.html @@ -23,7 +23,7 @@ - + diff --git a/api/simplified-run-flow.html b/api/simplified-run-flow.html index 1027a9d805..6224eebecf 100644 --- a/api/simplified-run-flow.html +++ b/api/simplified-run-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/stream-logs.html b/api/stream-logs.html index 6902b371e5..3ffe6b04bc 100644 --- a/api/stream-logs.html +++ b/api/stream-logs.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-flow.html b/api/update-flow.html index abce8d504f..e203a7ac13 100644 --- a/api/update-flow.html +++ b/api/update-flow.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-folder-redirect.html b/api/update-folder-redirect.html index baa37d7c48..6340f62e7a 100644 --- a/api/update-folder-redirect.html +++ b/api/update-folder-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-message.html b/api/update-message.html index db209e7806..9f3f8ac832 100644 --- a/api/update-message.html +++ b/api/update-message.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-project-mcp-settings.html b/api/update-project-mcp-settings.html index 5d55cbb4c4..72cefd672a 100644 --- a/api/update-project-mcp-settings.html +++ b/api/update-project-mcp-settings.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-project.html b/api/update-project.html index 1fac5ee3a2..f9e37da7c5 100644 --- a/api/update-project.html +++ b/api/update-project.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-server-endpoint.html b/api/update-server-endpoint.html index 952f200e08..75f219e58f 100644 --- a/api/update-server-endpoint.html +++ b/api/update-server-endpoint.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-session-id.html b/api/update-session-id.html index 9afde7d258..05f79b8629 100644 --- a/api/update-session-id.html +++ b/api/update-session-id.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-shared-component.html b/api/update-shared-component.html index a28278aeaa..dd54987b9f 100644 --- a/api/update-shared-component.html +++ b/api/update-shared-component.html @@ -23,7 +23,7 @@ - + diff --git a/api/update-variable.html b/api/update-variable.html index 526171aa70..76aa08e75f 100644 --- a/api/update-variable.html +++ b/api/update-variable.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-file-1.html b/api/upload-file-1.html index 779e6fb2af..62f0eb2b0a 100644 --- a/api/upload-file-1.html +++ b/api/upload-file-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-file-2.html b/api/upload-file-2.html index fc90317cc9..6a7f0e0b34 100644 --- a/api/upload-file-2.html +++ b/api/upload-file-2.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-file-redirect.html b/api/upload-file-redirect.html index 003d7360d1..7165acf4f6 100644 --- a/api/upload-file-redirect.html +++ b/api/upload-file-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-file.html b/api/upload-file.html index 4bdcc37d70..97496f32d6 100644 --- a/api/upload-file.html +++ b/api/upload-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-user-file-1.html b/api/upload-user-file-1.html index a372d1a824..70d35388ab 100644 --- a/api/upload-user-file-1.html +++ b/api/upload-user-file-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/upload-user-file.html b/api/upload-user-file.html index f1fc025453..55d38d5a80 100644 --- a/api/upload-user-file.html +++ b/api/upload-user-file.html @@ -23,7 +23,7 @@ - + diff --git a/api/webhook-run-flow.html b/api/webhook-run-flow.html index d4d6f50808..2c9edf7d84 100644 --- a/api/webhook-run-flow.html +++ b/api/webhook-run-flow.html @@ -23,7 +23,7 @@ - + diff --git a/assets/js/16ceb5d2.5d68e36e.js b/assets/js/16ceb5d2.5d68e36e.js deleted file mode 100644 index af93e74cc9..0000000000 --- a/assets/js/16ceb5d2.5d68e36e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1399],{11470:(e,o,n)=>{n.d(o,{A:()=>E});var t=n(96540),s=n(18215),r=n(23104),l=n(56347),c=n(205),i=n(57485),d=n(31682),a=n(70679);function p(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:o}=e;return!!o&&"object"==typeof o&&"value"in o}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function h(e){const{values:o,children:n}=e;return(0,t.useMemo)(()=>{const e=o??function(e){return p(e).map(({props:{value:e,label:o,attributes:n,default:t}})=>({value:e,label:o,attributes:n,default:t}))}(n);return function(e){const o=(0,d.XI)(e,(e,o)=>e.value===o.value);if(o.length>0)throw new Error(`Docusaurus error: Duplicate values "${o.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[o,n])}function x({value:e,tabValues:o}){return o.some(o=>o.value===e)}function j({queryString:e=!1,groupId:o}){const n=(0,l.W6)(),s=function({queryString:e=!1,groupId:o}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:e,groupId:o});return[(0,i.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const o=new URLSearchParams(n.location.search);o.set(s,e),n.replace({...n.location,search:o.toString()})},[s,n])]}function L(e){const{defaultValue:o,queryString:n=!1,groupId:s}=e,r=h(e),[l,i]=(0,t.useState)(()=>function({defaultValue:e,tabValues:o}){if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${o.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=o.find(e=>e.default)??o[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:o,tabValues:r})),[d,p]=j({queryString:n,groupId:s}),[L,u]=function({groupId:e}){const o=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,a.Dv)(o);return[n,(0,t.useCallback)(e=>{o&&s.set(e)},[o,s])]}({groupId:s}),y=(()=>{const e=d??L;return x({value:e,tabValues:r})?e:null})();(0,c.A)(()=>{y&&i(y)},[y]);return{selectedValue:l,selectValue:(0,t.useCallback)(e=>{if(!x({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),p(e),u(e)},[p,u,r]),tabValues:r}}var u=n(92303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var F=n(74848);function A({className:e,block:o,selectedValue:n,selectValue:t,tabValues:l}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,r.a_)(),d=e=>{const o=e.currentTarget,s=c.indexOf(o),r=l[s].value;r!==n&&(i(o),t(r))},a=e=>{let o=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;o=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;o=c[n]??c[c.length-1];break}}o?.focus()};return(0,F.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:l.map(({value:e,label:o,attributes:t})=>(0,F.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:a,onClick:d,...t,className:(0,s.A)("tabs__item",y.tabItem,t?.className,{"tabs__item--active":n===e}),children:o??e},e))})}function f({lazy:e,children:o,selectedValue:n}){const r=(Array.isArray(o)?o:[o]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===n);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,F.jsx)("div",{className:"margin-top--md",children:r.map((e,o)=>(0,t.cloneElement)(e,{key:o,hidden:e.props.value!==n}))})}function D(e){const o=L(e);return(0,F.jsxs)("div",{className:(0,s.A)("tabs-container",y.tabList),children:[(0,F.jsx)(A,{...o,...e}),(0,F.jsx)(f,{...o,...e})]})}function E(e){const o=(0,u.A)();return(0,F.jsx)(D,{...e,children:p(e.children)},String(o))}},19365:(e,o,n)=>{n.d(o,{A:()=>l});n(96540);var t=n(18215);const s={tabItem:"tabItem_Ymn6"};var r=n(74848);function l({children:e,hidden:o,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,n),hidden:o,children:e})}},28453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>c});var t=n(96540);const s={},r=t.createContext(s);function l(e){const o=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:o},e.children)}},33439:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>h,assets:()=>p,chCodeConfig:()=>x,contentTitle:()=>a,default:()=>u,frontMatter:()=>d,metadata:()=>t,toc:()=>j});const t=JSON.parse('{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow uses environment variables to configure certain settings.","source":"@site/docs/Configuration/environment-variables.mdx","sourceDirName":"Configuration","slug":"/environment-variables","permalink":"/environment-variables","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/environment-variables"},"sidebar":"docs","previous":{"title":"Global variables","permalink":"/configuration-global-variables"},"next":{"title":"Manage files","permalink":"/concepts-file-management"}}');var s=n(74848),r=n(28453),l=n(24754),c=n(11470),i=n(19365);n(28774);const d={title:"Environment variables",slug:"/environment-variables"},a=void 0,p={},h={annotations:l.hk,Code:l.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Precedence",id:"precedence",level:2},{value:"Configure environment variables",id:"configure-environment-variables",level:2},{value:"Set environment variables in your terminal",id:"configure-variables-terminal",level:3},{value:"Import environment variables from a .env file",id:"configure-variables-env-file",level:3},{value:"Supported environment variables",id:"supported-variables",level:2},{value:"Configure .env, override.conf, and tasks.json files",id:"configure-env-overrideconf-and-tasksjson-files",level:2},{value:"Set environment variables for Langflow Desktop",id:"set-environment-variables-for-langflow-desktop",level:2}];function L(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return h||y("CH",!1),h.Code||y("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(o.p,{children:"Langflow uses environment variables to configure certain settings.\nYou can also import environment variables for use in your deployment, such as environment variables used by certain components in your flows."}),"\n",(0,s.jsxs)(o.p,{children:["You can set Langflow environment variables in your terminal, in ",(0,s.jsx)(o.code,{children:".env"}),", and with the ",(0,s.jsx)(o.a,{href:"./configuration-cli",children:"Langflow CLI"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"precedence",children:"Precedence"}),"\n",(0,s.jsx)(o.p,{children:"If an environment variable is set in multiple places, the following hierarchy applies:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Langflow CLI options override ",(0,s.jsx)(o.code,{children:".env"})," and terminal variables."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:".env"})," overrides terminal variables."]}),"\n",(0,s.jsxs)(o.li,{children:["Terminal variables are used only if the variable isn't set in ",(0,s.jsx)(o.code,{children:".env"})," or Langflow CLI options."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["For example, if you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," in ",(0,s.jsx)(o.code,{children:".env"})," and your terminal, then Langflow uses the value from ",(0,s.jsx)(o.code,{children:".env"}),".\nSimilarly, if you run a Langflow CLI command with ",(0,s.jsx)(o.code,{children:"--port"}),", Langflow uses that port number instead of the ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," in ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"configure-environment-variables",children:"Configure environment variables"}),"\n",(0,s.jsxs)(o.p,{children:["Langflow recognizes ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"supported environment variables"})," from the following sources:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Environment variables that you've set in your terminal."}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables that you've imported from a ",(0,s.jsx)(o.code,{children:".env"})," file when starting Langflow or using the ",(0,s.jsx)(o.code,{children:"--env-file"})," option in the Langflow CLI."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["You can choose to use one or both sources.\nHowever, environment variables imported from a ",(0,s.jsx)(o.code,{children:".env"})," file take ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence"})," over those set in your terminal."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-terminal",children:"Set environment variables in your terminal"}),"\n",(0,s.jsx)(o.p,{children:"Run the following commands to set environment variables for your current terminal session:"}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"export",props:{style:{color:"#FF7B72"}}},{content:" VARIABLE_NAME",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'VALUE'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"windows",label:"Windows",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"set VARIABLE_NAME='VALUE'",props:{}}]}],lang:"text"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -e ",props:{style:{color:"#79C0FF"}}},{content:"VARIABLE_NAME='VALUE' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["When you start Langflow, it looks for environment variables that you've set in your terminal.\nIf it detects a supported environment variable, then it automatically adopts the specified value, subject to ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence rules"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-env-file",children:"Import environment variables from a .env file"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"If Langflow is running, quit Langflow."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create a ",(0,s.jsx)(o.code,{children:".env"})," file, and then open it in your preferred editor."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Define ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"Langflow environment variables"})," in the ",(0,s.jsx)(o.code,{children:".env"})," file. For example:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=false",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=false",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=false",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=false",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=false",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=false",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE=true",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["For additional examples, see the ",(0,s.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/blob/main/.env.example",children:(0,s.jsx)(o.code,{children:".env.example"})})," file in the Langflow repository."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Save and close ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Start Langflow with your ",(0,s.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"local",label:"Local",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:"-m ",props:{style:{color:"#79C0FF"}}},{content:"langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--env-file ",props:{style:{color:"#79C0FF"}}},{content:".env",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --env-file ",props:{style:{color:"#79C0FF"}}},{content:".env ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["If your ",(0,s.jsx)(o.code,{children:".env"})," file isn't in the same directory, provide the path to your ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["On startup, Langflow imports the environment variables from your ",(0,s.jsx)(o.code,{children:".env"})," file, as well as any others that you set in your terminal, and then adopts their specified values."]}),"\n",(0,s.jsx)(o.h2,{id:"supported-variables",children:"Supported environment variables"}),"\n",(0,s.jsx)(o.p,{children:"The following table lists the environment variables supported by Langflow."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"DO_NOT_TRACK"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If this option is enabled, Langflow does not track telemetry."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Enable flow auto-saving. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-auto-saving",children:(0,s.jsx)(o.code,{children:"--auto-saving"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsxs)(o.td,{children:["Set the interval for flow auto-saving in milliseconds. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-auto-saving-interval",children:(0,s.jsx)(o.code,{children:"--auto-saving-interval"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BACKEND_ONLY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Only run Langflow's backend server (no frontend). See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-backend-only",children:(0,s.jsx)(o.code,{children:"--backend-only"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BUNDLE_URLS"})}),(0,s.jsx)(o.td,{children:"List [String]"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"[]"})}),(0,s.jsx)(o.td,{children:"A list of URLs from which to load component bundles and flows. Supports GitHub URLs. If LANGFLOW_AUTO_LOGIN is enabled, flows from these bundles are loaded into the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"async"})}),(0,s.jsxs)(o.td,{children:["Set the cache type for Langflow. Possible values: ",(0,s.jsx)(o.code,{children:"async"}),", ",(0,s.jsx)(o.code,{children:"redis"}),", ",(0,s.jsx)(o.code,{children:"memory"}),", ",(0,s.jsx)(o.code,{children:"disk"}),". If you set the type to ",(0,s.jsx)(o.code,{children:"redis"}),", then you must also set the following environment variables: LANGFLOW_REDIS_HOST, LANGFLOW_REDIS_PORT, LANGFLOW_REDIS_DB, and LANGFLOW_REDIS_CACHE_EXPIRE."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_COMPONENTS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"/components"})}),(0,s.jsxs)(o.td,{children:["Path to the directory containing custom components. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-components-path",children:(0,s.jsx)(o.code,{children:"--components-path"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Varies"}),(0,s.jsxs)(o.td,{children:["Set the Langflow configuration directory where files, logs, and the Langflow database are stored. Default path depends on your installation. See ",(0,s.jsx)(o.a,{href:"/concepts-flows#flow-storage-and-logs",children:"Flow storage and logs"})]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DATABASE_URL"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Set the database URL for Langflow. If not provided, Langflow uses a SQLite database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_USE_NOOP_DATABASE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Use a no-op database, which avoids database connections and operations. Useful for running flows without a database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DATABASE_CONNECTION_RETRY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If True, Langflow tries to connect to the database again if it fails."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_POOL_SIZE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"10"})}),(0,s.jsxs)(o.td,{children:[(0,s.jsx)(o.strong,{children:"DEPRECATED:"})," Use ",(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})," instead. The number of connections to keep open in the connection pool."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_MAX_OVERFLOW"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"20"})}),(0,s.jsxs)(o.td,{children:[(0,s.jsx)(o.strong,{children:"DEPRECATED:"})," Use ",(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})," instead. The number of connections to allow that can be opened beyond the pool size."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECT_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"20"})}),(0,s.jsx)(o.td,{children:"The number of seconds to wait before giving up on a lock to be released or establishing a connection to the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})}),(0,s.jsx)(o.td,{children:"JSON"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["A JSON dictionary to centralize database connection parameters. Example: ",(0,s.jsx)(o.code,{children:'{"pool_size": 10, "max_overflow": 20}'})]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DISABLE_TRACK_APIKEY_USAGE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["If set to ",(0,s.jsx)(o.code,{children:"true"}),", disables tracking of API key usage (",(0,s.jsx)(o.code,{children:"total_uses"})," and ",(0,s.jsx)(o.code,{children:"last_used_at"}),") to avoid database contention under high concurrency."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_ENABLE_LOG_RETRIEVAL"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Enable log retrieval functionality."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FALLBACK_TO_ENV_VAR"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["If enabled, ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"})," set in the Langflow UI fall back to an environment variable with the same name when Langflow fails to retrieve the variable value."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FRONTEND_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"./frontend"})}),(0,s.jsxs)(o.td,{children:["Path to the frontend directory containing build files. This is for development purposes only. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-frontend-path",children:(0,s.jsx)(o.code,{children:"--frontend-path"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"5"})}),(0,s.jsxs)(o.td,{children:["Set the maximum number of retries for the health check. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-health-check-max-retries",children:(0,s.jsx)(o.code,{children:"--health-check-max-retries"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsxs)(o.td,{children:["The host on which the Langflow server will run. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-host",children:(0,s.jsx)(o.code,{children:"--host"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LANGCHAIN_CACHE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"InMemoryCache"})}),(0,s.jsxs)(o.td,{children:["Type of cache to use. Possible values: ",(0,s.jsx)(o.code,{children:"InMemoryCache"}),", ",(0,s.jsx)(o.code,{children:"SQLiteCache"}),". See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-cache",children:(0,s.jsx)(o.code,{children:"--cache"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_LEVEL"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"INFO"})}),(0,s.jsxs)(o.td,{children:["Set the logging level for Langflow. Possible values: ",(0,s.jsx)(o.code,{children:"DEBUG"}),", ",(0,s.jsx)(o.code,{children:"INFO"}),", ",(0,s.jsx)(o.code,{children:"WARNING"}),", ",(0,s.jsx)(o.code,{children:"ERROR"}),", ",(0,s.jsx)(o.code,{children:"CRITICAL"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the log file. If this option is not set, logs are written to stdout."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_RETRIEVER_BUFFER_SIZE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"10000"})}),(0,s.jsxs)(o.td,{children:["Set the buffer size for log retrieval. Only used if ",(0,s.jsx)(o.code,{children:"LANGFLOW_ENABLE_LOG_RETRIEVAL"})," is enabled."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_FILE_SIZE_UPLOAD"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsxs)(o.td,{children:["Set the maximum file size for the upload in megabytes. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-max-file-size-upload",children:(0,s.jsx)(o.code,{children:"--max-file-size-upload"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_ITEMS_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsx)(o.td,{children:"Maximum number of items to store and display in the UI. Lists longer than this will be truncated when displayed in the UI. Does not affect data passed between components nor outputs."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TEXT_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsx)(o.td,{children:"Maximum number of characters to store and display in the UI. Responses longer than this will be truncated when displayed in the UI. Does not truncate responses between components nor outputs."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MCP_SERVER_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsx)(o.td,{children:"If this option is set to False, Langflow does not enable the MCP server."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MCP_SERVER_ENABLE_PROGRESS_NOTIFICATIONS"})})})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If this option is set to True, Langflow sends progress notifications in the MCP server."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-new-user-is-active",children:(0,s.jsx)(o.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_OPEN_BROWSER"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Open the system web browser on startup. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-open-browser",children:(0,s.jsx)(o.code,{children:"--open-browser"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"7860"})}),(0,s.jsxs)(o.td,{children:["The port on which the Langflow server runs. The server automatically selects a free port if the specified port is in use. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-port",children:(0,s.jsx)(o.code,{children:"--port"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PROMETHEUS_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Expose Prometheus metrics."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PROMETHEUS_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"9090"})}),(0,s.jsx)(o.td,{children:"Set the port on which Langflow exposes Prometheus metrics."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_CACHE_EXPIRE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3600"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"#LANGFLOW_CACHE_TYPE",children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_DB"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"0"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"#LANGFLOW_CACHE_TYPE",children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"#LANGFLOW_CACHE_TYPE",children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_PORT"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"6379"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"#LANGFLOW_CACHE_TYPE",children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_PASSWORD"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Password for Redis authentication when using Redis cache type."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REMOVE_API_KEYS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Remove API keys from the projects saved in the database. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-remove-api-keys",children:(0,s.jsx)(o.code,{children:"--remove-api-keys"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Save the Langflow database in ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})," instead of in the Langflow package directory. Note, when this variable is set to default (",(0,s.jsx)(o.code,{children:"false"}),"), the database isn't shared between different virtual environments and the database is deleted when you uninstall Langflow."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SECRET_KEY"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Automated"}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-secret-key",children:(0,s.jsx)(o.code,{children:"LANGFLOW_SECRET_KEY"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_STORE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Enable the Langflow Store. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-store",children:(0,s.jsx)(o.code,{children:"--store"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES"})})})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Store environment variables as ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"})," in the database."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CREATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["If this option is enabled, Langflow creates starter projects during initialization. Set to ",(0,s.jsx)(o.code,{children:"false"})," to skip all starter project creation and updates."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsx)(o.td,{children:"If this option is enabled, Langflow updates starter projects with the latest component versions when initializing."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"langflow"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsxs)(o.a,{href:"/api-keys-and-authentication#langflow-superuser",children:[(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})," and ",(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"langflow"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsxs)(o.a,{href:"/api-keys-and-authentication#langflow-superuser",children:[(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})," and ",(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT"})})})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Comma-separated list of environment variables to get from the environment and store as ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOAD_FLOWS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to a directory containing flow JSON files to be loaded on startup. Note that this feature only works if ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})," is enabled."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKER_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"300"})}),(0,s.jsxs)(o.td,{children:["Worker timeout in seconds. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-worker-timeout",children:(0,s.jsx)(o.code,{children:"--worker-timeout"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKERS"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1"})}),(0,s.jsxs)(o.td,{children:["Number of worker processes. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-workers",children:(0,s.jsx)(o.code,{children:"--workers"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_CERT_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the SSL certificate file on the local system."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_KEY_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the SSL key file on the local system."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]})]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"configure-env-overrideconf-and-tasksjson-files",children:"Configure .env, override.conf, and tasks.json files"}),"\n",(0,s.jsx)(o.p,{children:"The following examples show how to configure Langflow using environment variables in different scenarios."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"env",label:".env file",default:!0,children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file is a text file that contains key-value pairs of environment variables."]}),(0,s.jsxs)(o.p,{children:["Create or edit a file named ",(0,s.jsx)(o.code,{children:".env"})," in your project root directory and add your configuration:"]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".env"',focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=false",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=false",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=false",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=false",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=false",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=false",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE=true",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]})]}),(0,s.jsxs)(i.A,{value:"systemd",label:"Systemd service",children:[(0,s.jsx)(o.p,{children:"A systemd service configuration file configures Linux system services."}),(0,s.jsxs)(o.p,{children:["To add environment variables, create or edit a service configuration file and add an ",(0,s.jsx)(o.code,{children:"override.conf"})," file. This file allows you to override the default environment variables for the service."]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'"override.conf"',focus:"",code:{lines:[{tokens:[{content:"[Service]",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"DO_NOT_TRACK=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_LOGIN=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING_INTERVAL=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BACKEND_ONLY=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BUNDLE_URLS=[\\"',props:{style:{color:"#A5D6FF"}}},{content:"https://github.com/user/repo/commit/hash\\",props:{style:{color:"#C9D1D9"}}},{content:'"]"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CACHE_TYPE=async"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_COMPONENTS_PATH=/path/to/components/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR=/path/to/config"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DEV=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_FALLBACK_TO_ENV_VAR=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HOST=localhost"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_ITEMS_LENGTH=100"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_TEXT_LENGTH=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_ENV=container_json"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_FILE=logs/langflow.log"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_LEVEL=error"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_OPEN_BROWSER=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_PORT=7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_REMOVE_API_KEYS=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SECRET_KEY=somesecretkey"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER=adminuser"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER_PASSWORD=adminpass"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKER_TIMEOUT=60000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKERS=3"',props:{style:{color:"#A5D6FF"}}}]}],lang:"ini"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["For more information on systemd, see the ",(0,s.jsx)(o.a,{href:"https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_systemd_unit_files_to_customize_and_optimize_your_system/assembly_working-with-systemd-unit-files_working-with-systemd",children:"Red Hat documentation"}),"."]})]}),(0,s.jsxs)(i.A,{value:"vscode",label:"VSCode tasks.json",children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"tasks.json"})," file located in ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," is a configuration file for development environments using Visual Studio Code."]}),(0,s.jsxs)(o.p,{children:["Create or edit the ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," file in your project root:"]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".vscode/tasks.json"',focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "version"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"2.0.0"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "options"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "env"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "DO_NOT_TRACK"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_LOGIN"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING_INTERVAL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BACKEND_ONLY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BUNDLE_URLS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"[',props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:"https://github.com/user/repo/commit/hash",props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:']"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CACHE_TYPE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"async"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_COMPONENTS_PATH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/components/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/config/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DATABASE_URL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"postgresql://postgres:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DEV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_FALLBACK_TO_ENV_VAR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HEALTH_CHECK_MAX_RETRIES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"5"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HOST"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"localhost"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LANGCHAIN_CACHE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"InMemoryCache"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_FILE_SIZE_UPLOAD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"10000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_ITEMS_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"100"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_TEXT_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_ENV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"container_csv"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_FILE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow.log"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_LEVEL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_OPEN_BROWSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_PORT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_REMOVE_API_KEYS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SAVE_DB_IN_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SECRET_KEY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"somesecretkey"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE_ENVIRONMENT_VARIABLES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminuser"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER_PASSWORD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminpass"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKER_TIMEOUT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"60000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKERS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"3"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tasks"',props:{style:{color:"#7EE787"}}},{content:": [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "label"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow backend"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "type"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"shell"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "command"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'". ./langflownightly/Scripts/activate && langflow run"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "isBackground"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "problemMatcher"',props:{style:{color:"#7EE787"}}},{content:": []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["To run Langflow using the above VSCode ",(0,s.jsx)(o.code,{children:"tasks.json"})," file, in the VSCode command palette, select ",(0,s.jsx)(o.strong,{children:"Tasks: Run Task"})," > ",(0,s.jsx)(o.strong,{children:"langflow backend"}),"."]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"\n",(0,s.jsx)(o.p,{children:"Environment variables set in your terminal aren't automatically available to GUI-based applications like Langflow Desktop when you launch them from the Windows or macOS GUI."}),"\n",(0,s.jsx)(o.p,{children:"For Windows, this means any GUI-based app launched from the Start menu, desktop shortcuts, or Windows Explorer."}),"\n",(0,s.jsx)(o.p,{children:"For macOS, this means any GUI-based app launched from Finder, Spotlight, Launchpad, or the Dock."}),"\n",(0,s.jsx)(o.p,{children:"To set environment variables for Langflow Desktop, you need to use specific commands or files, depending on your OS."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"macos",label:"macOS",default:!0,children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for macOS cannot automatically use variables set in your terminal, such as those in",(0,s.jsx)(o.code,{children:".zshrc"})," or ",(0,s.jsx)(o.code,{children:".bash_profile"}),", when launched from the macOS GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to GUI apps on macOS, you need to use ",(0,s.jsx)(o.code,{children:"launchctl"})," with a ",(0,s.jsx)(o.code,{children:"plist"})," file:"]}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory if it doesn't exist:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"~/Library/LaunchAgents",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["In the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory, create a ",(0,s.jsx)(o.code,{children:".plist"})," file called ",(0,s.jsx)(o.code,{children:"dev.langflow.env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add the following content to ",(0,s.jsx)(o.code,{children:"dev.langflow.env.plist"}),", and then add, change, or remove Langflow environment variables as needed for your configuration."]}),"\n",(0,s.jsxs)(o.p,{children:["This example sets the ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})," environment variable for all GUI apps launched from the macOS GUI."]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"',props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"<",props:{style:{color:"#C9D1D9"}}},{content:"plist ",props:{style:{color:"#7EE787"}}},{content:"version",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"1.0"',props:{style:{color:"#A5D6FF"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">Label",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">dev.langflow.env",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">ProgramArguments",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"array",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">launchctl",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">setenv",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">LANGFLOW_CONFIG_DIR",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">/Users/your_user/custom/config",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">RunAtLoad",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#7EE787"}}},{content:"/>",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"xml"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Load the file with ",(0,s.jsx)(o.code,{children:"launchctl"}),":"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"launchctl ",props:{style:{color:"#FFA657"}}},{content:"load ~/Library/LaunchAgents/dev.langflow.env.plist",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows1",label:"Window System Properties",children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for Windows cannot automatically use variables set in your terminal, such as those defined with ",(0,s.jsx)(o.code,{children:"set"})," in ",(0,s.jsx)(o.code,{children:"cmd"})," or ",(0,s.jsx)(o.code,{children:"$env:VAR=..."})," in PowerShell, when launched from the Windows GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to the Langflow Desktop app, you must set them at the user or system level using the ",(0,s.jsx)(o.strong,{children:"System Properties"})," interface or the Terminal."]}),(0,s.jsx)(o.p,{children:"To set environment variables using the System Properties interface, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Press ",(0,s.jsx)("kbd",{children:"Win + R"}),", enter ",(0,s.jsx)(o.code,{children:"SystemPropertiesAdvanced"}),", and then press ",(0,s.jsx)("kbd",{children:"Enter"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"Environment Variables"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Under ",(0,s.jsx)(o.strong,{children:"User variables"}),", click ",(0,s.jsx)(o.strong,{children:"New"}),"."]}),"\n",(0,s.jsx)(o.admonition,{type:"tip",children:(0,s.jsxs)(o.p,{children:["To apply the setting to all users, select ",(0,s.jsx)(o.strong,{children:"System variables"}),"."]})}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"OK"})," to save the variable."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows2",label:"Powershell",children:[(0,s.jsx)(o.p,{children:"To define environment variables for Windows using PowerShell, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for the current user:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Users\\your_user\\.langflow_config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"User"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for all users (you must have Administrator priveleges):"}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Langflow\\Config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"Machine"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]})]})]})}function u(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(L,{...e})}):L(e)}function y(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/16ceb5d2.a63b4bf7.js b/assets/js/16ceb5d2.a63b4bf7.js new file mode 100644 index 0000000000..d19b0f612e --- /dev/null +++ b/assets/js/16ceb5d2.a63b4bf7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1399],{11470:(e,o,n)=>{n.d(o,{A:()=>E});var t=n(96540),s=n(18215),r=n(23104),l=n(56347),c=n(205),i=n(57485),d=n(31682),a=n(70679);function p(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:o}=e;return!!o&&"object"==typeof o&&"value"in o}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function h(e){const{values:o,children:n}=e;return(0,t.useMemo)(()=>{const e=o??function(e){return p(e).map(({props:{value:e,label:o,attributes:n,default:t}})=>({value:e,label:o,attributes:n,default:t}))}(n);return function(e){const o=(0,d.XI)(e,(e,o)=>e.value===o.value);if(o.length>0)throw new Error(`Docusaurus error: Duplicate values "${o.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[o,n])}function x({value:e,tabValues:o}){return o.some(o=>o.value===e)}function j({queryString:e=!1,groupId:o}){const n=(0,l.W6)(),s=function({queryString:e=!1,groupId:o}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:e,groupId:o});return[(0,i.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const o=new URLSearchParams(n.location.search);o.set(s,e),n.replace({...n.location,search:o.toString()})},[s,n])]}function u(e){const{defaultValue:o,queryString:n=!1,groupId:s}=e,r=h(e),[l,i]=(0,t.useState)(()=>function({defaultValue:e,tabValues:o}){if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${o.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=o.find(e=>e.default)??o[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:o,tabValues:r})),[d,p]=j({queryString:n,groupId:s}),[u,L]=function({groupId:e}){const o=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,a.Dv)(o);return[n,(0,t.useCallback)(e=>{o&&s.set(e)},[o,s])]}({groupId:s}),y=(()=>{const e=d??u;return x({value:e,tabValues:r})?e:null})();(0,c.A)(()=>{y&&i(y)},[y]);return{selectedValue:l,selectValue:(0,t.useCallback)(e=>{if(!x({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),p(e),L(e)},[p,L,r]),tabValues:r}}var L=n(92303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var F=n(74848);function A({className:e,block:o,selectedValue:n,selectValue:t,tabValues:l}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,r.a_)(),d=e=>{const o=e.currentTarget,s=c.indexOf(o),r=l[s].value;r!==n&&(i(o),t(r))},a=e=>{let o=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;o=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;o=c[n]??c[c.length-1];break}}o?.focus()};return(0,F.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:l.map(({value:e,label:o,attributes:t})=>(0,F.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:a,onClick:d,...t,className:(0,s.A)("tabs__item",y.tabItem,t?.className,{"tabs__item--active":n===e}),children:o??e},e))})}function f({lazy:e,children:o,selectedValue:n}){const r=(Array.isArray(o)?o:[o]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===n);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,F.jsx)("div",{className:"margin-top--md",children:r.map((e,o)=>(0,t.cloneElement)(e,{key:o,hidden:e.props.value!==n}))})}function D(e){const o=u(e);return(0,F.jsxs)("div",{className:(0,s.A)("tabs-container",y.tabList),children:[(0,F.jsx)(A,{...o,...e}),(0,F.jsx)(f,{...o,...e})]})}function E(e){const o=(0,L.A)();return(0,F.jsx)(D,{...e,children:p(e.children)},String(o))}},19365:(e,o,n)=>{n.d(o,{A:()=>l});n(96540);var t=n(18215);const s={tabItem:"tabItem_Ymn6"};var r=n(74848);function l({children:e,hidden:o,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,n),hidden:o,children:e})}},28453:(e,o,n)=>{n.d(o,{R:()=>l,x:()=>c});var t=n(96540);const s={},r=t.createContext(s);function l(e){const o=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:o},e.children)}},33439:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>h,assets:()=>p,chCodeConfig:()=>x,contentTitle:()=>a,default:()=>L,frontMatter:()=>d,metadata:()=>t,toc:()=>j});const t=JSON.parse('{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow uses environment variables to configure certain settings.","source":"@site/docs/Configuration/environment-variables.mdx","sourceDirName":"Configuration","slug":"/environment-variables","permalink":"/environment-variables","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/environment-variables"},"sidebar":"docs","previous":{"title":"Global variables","permalink":"/configuration-global-variables"},"next":{"title":"Manage files","permalink":"/concepts-file-management"}}');var s=n(74848),r=n(28453),l=n(24754),c=n(11470),i=n(19365);n(28774);const d={title:"Environment variables",slug:"/environment-variables"},a=void 0,p={},h={annotations:l.hk,Code:l.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Precedence",id:"precedence",level:2},{value:"Configure environment variables",id:"configure-environment-variables",level:2},{value:"Set environment variables in your terminal",id:"configure-variables-terminal",level:3},{value:"Import environment variables from a .env file",id:"configure-variables-env-file",level:3},{value:"Supported environment variables",id:"supported-variables",level:2},{value:"Configure .env, override.conf, and tasks.json files",id:"configure-env-overrideconf-and-tasksjson-files",level:2},{value:"Set environment variables for Langflow Desktop",id:"set-environment-variables-for-langflow-desktop",level:2}];function u(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return h||y("CH",!1),h.Code||y("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(o.p,{children:"Langflow uses environment variables to configure certain settings.\nYou can also import environment variables for use in your deployment, such as environment variables used by certain components in your flows."}),"\n",(0,s.jsxs)(o.p,{children:["You can set Langflow environment variables in your terminal, in ",(0,s.jsx)(o.code,{children:".env"}),", and with the ",(0,s.jsx)(o.a,{href:"./configuration-cli",children:"Langflow CLI"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"precedence",children:"Precedence"}),"\n",(0,s.jsx)(o.p,{children:"If an environment variable is set in multiple places, the following hierarchy applies:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Langflow CLI options override ",(0,s.jsx)(o.code,{children:".env"})," and terminal variables."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:".env"})," overrides terminal variables."]}),"\n",(0,s.jsxs)(o.li,{children:["Terminal variables are used only if the variable isn't set in ",(0,s.jsx)(o.code,{children:".env"})," or Langflow CLI options."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["For example, if you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," in ",(0,s.jsx)(o.code,{children:".env"})," and your terminal, then Langflow uses the value from ",(0,s.jsx)(o.code,{children:".env"}),".\nSimilarly, if you run a Langflow CLI command with ",(0,s.jsx)(o.code,{children:"--port"}),", Langflow uses that port number instead of the ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," in ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"configure-environment-variables",children:"Configure environment variables"}),"\n",(0,s.jsxs)(o.p,{children:["Langflow recognizes ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"supported environment variables"})," from the following sources:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Environment variables that you've set in your terminal."}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables that you've imported from a ",(0,s.jsx)(o.code,{children:".env"})," file when starting Langflow or using the ",(0,s.jsx)(o.code,{children:"--env-file"})," option in the Langflow CLI."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["You can choose to use one or both sources.\nHowever, environment variables imported from a ",(0,s.jsx)(o.code,{children:".env"})," file take ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence"})," over those set in your terminal."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-terminal",children:"Set environment variables in your terminal"}),"\n",(0,s.jsx)(o.p,{children:"Run the following commands to set environment variables for your current terminal session:"}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"export",props:{style:{color:"#FF7B72"}}},{content:" VARIABLE_NAME",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'VALUE'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"windows",label:"Windows",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"set VARIABLE_NAME='VALUE'",props:{}}]}],lang:"text"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -e ",props:{style:{color:"#79C0FF"}}},{content:"VARIABLE_NAME='VALUE' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["When you start Langflow, it looks for environment variables that you've set in your terminal.\nIf it detects a supported environment variable, then it automatically adopts the specified value, subject to ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence rules"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-env-file",children:"Import environment variables from a .env file"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"If Langflow is running, quit Langflow."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create a ",(0,s.jsx)(o.code,{children:".env"})," file, and then open it in your preferred editor."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Define ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"Langflow environment variables"})," in the ",(0,s.jsx)(o.code,{children:".env"})," file. For example:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=false",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=false",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=false",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=false",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=false",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=false",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE=true",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["For additional examples, see the ",(0,s.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/blob/main/.env.example",children:(0,s.jsx)(o.code,{children:".env.example"})})," file in the Langflow repository."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Save and close ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Start Langflow with your ",(0,s.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"local",label:"Local",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"python ",props:{style:{color:"#FFA657"}}},{content:"-m ",props:{style:{color:"#79C0FF"}}},{content:"langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--env-file ",props:{style:{color:"#79C0FF"}}},{content:".env",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --env-file ",props:{style:{color:"#79C0FF"}}},{content:".env ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["If your ",(0,s.jsx)(o.code,{children:".env"})," file isn't in the same directory, provide the path to your ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["On startup, Langflow imports the environment variables from your ",(0,s.jsx)(o.code,{children:".env"})," file, as well as any others that you set in your terminal, and then adopts their specified values."]}),"\n",(0,s.jsx)(o.h2,{id:"supported-variables",children:"Supported environment variables"}),"\n",(0,s.jsx)(o.p,{children:"The following table lists the environment variables supported by Langflow."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"DO_NOT_TRACK"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If this option is enabled, Langflow does not track telemetry."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Enable flow auto-saving. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-auto-saving",children:(0,s.jsx)(o.code,{children:"--auto-saving"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsxs)(o.td,{children:["Set the interval for flow auto-saving in milliseconds. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-auto-saving-interval",children:(0,s.jsx)(o.code,{children:"--auto-saving-interval"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BACKEND_ONLY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Only run Langflow's backend server (no frontend). See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-backend-only",children:(0,s.jsx)(o.code,{children:"--backend-only"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BUNDLE_URLS"})}),(0,s.jsx)(o.td,{children:"List [String]"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"[]"})}),(0,s.jsx)(o.td,{children:"A list of URLs from which to load component bundles and flows. Supports GitHub URLs. If LANGFLOW_AUTO_LOGIN is enabled, flows from these bundles are loaded into the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"async"})}),(0,s.jsxs)(o.td,{children:["Set the cache type for Langflow. Possible values: ",(0,s.jsx)(o.code,{children:"async"}),", ",(0,s.jsx)(o.code,{children:"redis"}),", ",(0,s.jsx)(o.code,{children:"memory"}),", ",(0,s.jsx)(o.code,{children:"disk"}),". If you set the type to ",(0,s.jsx)(o.code,{children:"redis"}),", then you must also set the following environment variables: LANGFLOW_REDIS_HOST, LANGFLOW_REDIS_PORT, LANGFLOW_REDIS_DB, and LANGFLOW_REDIS_CACHE_EXPIRE."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_COMPONENTS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"/components"})}),(0,s.jsxs)(o.td,{children:["Path to the directory containing custom components. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-components-path",children:(0,s.jsx)(o.code,{children:"--components-path"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Varies"}),(0,s.jsxs)(o.td,{children:["Set the Langflow configuration directory where files, logs, and the Langflow database are stored. Default path depends on your installation. See ",(0,s.jsx)(o.a,{href:"/concepts-flows#flow-storage-and-logs",children:"Flow storage and logs"})]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DATABASE_URL"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Set the database URL for Langflow. If not provided, Langflow uses a SQLite database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_USE_NOOP_DATABASE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Use a no-op database, which avoids database connections and operations. Useful for running flows without a database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DATABASE_CONNECTION_RETRY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If True, Langflow tries to connect to the database again if it fails."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_POOL_SIZE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"10"})}),(0,s.jsxs)(o.td,{children:[(0,s.jsx)(o.strong,{children:"DEPRECATED:"})," Use ",(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})," instead. The number of connections to keep open in the connection pool."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_MAX_OVERFLOW"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"20"})}),(0,s.jsxs)(o.td,{children:[(0,s.jsx)(o.strong,{children:"DEPRECATED:"})," Use ",(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})," instead. The number of connections to allow that can be opened beyond the pool size."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECT_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"20"})}),(0,s.jsx)(o.td,{children:"The number of seconds to wait before giving up on a lock to be released or establishing a connection to the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DB_CONNECTION_SETTINGS"})}),(0,s.jsx)(o.td,{children:"JSON"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["A JSON dictionary to centralize database connection parameters. Example: ",(0,s.jsx)(o.code,{children:'{"pool_size": 10, "max_overflow": 20}'})]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DISABLE_TRACK_APIKEY_USAGE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["If set to ",(0,s.jsx)(o.code,{children:"true"}),", disables tracking of API key usage (",(0,s.jsx)(o.code,{children:"total_uses"})," and ",(0,s.jsx)(o.code,{children:"last_used_at"}),") to avoid database contention under high concurrency."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_ENABLE_LOG_RETRIEVAL"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Enable log retrieval functionality."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FALLBACK_TO_ENV_VAR"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["If enabled, ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"})," set in the Langflow UI fall back to an environment variable with the same name when Langflow fails to retrieve the variable value."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FRONTEND_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"./frontend"})}),(0,s.jsxs)(o.td,{children:["Path to the frontend directory containing build files. This is for development purposes only. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-frontend-path",children:(0,s.jsx)(o.code,{children:"--frontend-path"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"5"})}),(0,s.jsxs)(o.td,{children:["Set the maximum number of retries for the health check. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-health-check-max-retries",children:(0,s.jsx)(o.code,{children:"--health-check-max-retries"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsxs)(o.td,{children:["The host on which the Langflow server will run. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-host",children:(0,s.jsx)(o.code,{children:"--host"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LANGCHAIN_CACHE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"InMemoryCache"})}),(0,s.jsxs)(o.td,{children:["Type of cache to use. Possible values: ",(0,s.jsx)(o.code,{children:"InMemoryCache"}),", ",(0,s.jsx)(o.code,{children:"SQLiteCache"}),". See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-cache",children:(0,s.jsx)(o.code,{children:"--cache"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_LEVEL"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"INFO"})}),(0,s.jsxs)(o.td,{children:["Set the logging level for Langflow. Possible values: ",(0,s.jsx)(o.code,{children:"DEBUG"}),", ",(0,s.jsx)(o.code,{children:"INFO"}),", ",(0,s.jsx)(o.code,{children:"WARNING"}),", ",(0,s.jsx)(o.code,{children:"ERROR"}),", ",(0,s.jsx)(o.code,{children:"CRITICAL"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the log file. If this option is not set, logs are written to stdout."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_RETRIEVER_BUFFER_SIZE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"10000"})}),(0,s.jsxs)(o.td,{children:["Set the buffer size for log retrieval. Only used if ",(0,s.jsx)(o.code,{children:"LANGFLOW_ENABLE_LOG_RETRIEVAL"})," is enabled."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_FILE_SIZE_UPLOAD"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsxs)(o.td,{children:["Set the maximum file size for the upload in megabytes. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-max-file-size-upload",children:(0,s.jsx)(o.code,{children:"--max-file-size-upload"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_ITEMS_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsx)(o.td,{children:"Maximum number of items to store and display in the UI. Lists longer than this will be truncated when displayed in the UI. Does not affect data passed between components nor outputs."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TEXT_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsx)(o.td,{children:"Maximum number of characters to store and display in the UI. Responses longer than this will be truncated when displayed in the UI. Does not truncate responses between components nor outputs."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MCP_SERVER_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsx)(o.td,{children:"If this option is set to False, Langflow does not enable the MCP server."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MCP_SERVER_ENABLE_PROGRESS_NOTIFICATIONS"})})})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"If this option is set to True, Langflow sends progress notifications in the MCP server."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-new-user-is-active",children:(0,s.jsx)(o.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_OPEN_BROWSER"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Open the system web browser on startup. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-open-browser",children:(0,s.jsx)(o.code,{children:"--open-browser"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"7860"})}),(0,s.jsxs)(o.td,{children:["The port on which the Langflow server runs. The server automatically selects a free port if the specified port is in use. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-port",children:(0,s.jsx)(o.code,{children:"--port"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PROMETHEUS_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsx)(o.td,{children:"Expose Prometheus metrics."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PROMETHEUS_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"9090"})}),(0,s.jsx)(o.td,{children:"Set the port on which Langflow exposes Prometheus metrics."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_CACHE_EXPIRE"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3600"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_DB"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"0"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_PORT"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"6379"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REDIS_PASSWORD"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Password for Redis authentication when using Redis cache type."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_REMOVE_API_KEYS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Remove API keys from the projects saved in the database. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-remove-api-keys",children:(0,s.jsx)(o.code,{children:"--remove-api-keys"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"false"})}),(0,s.jsxs)(o.td,{children:["Save the Langflow database in ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})," instead of in the Langflow package directory. Note, when this variable is set to default (",(0,s.jsx)(o.code,{children:"false"}),"), the database isn't shared between different virtual environments and the database is deleted when you uninstall Langflow."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SECRET_KEY"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Automated"}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-secret-key",children:(0,s.jsx)(o.code,{children:"LANGFLOW_SECRET_KEY"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_STORE"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Enable the Langflow Store. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-store",children:(0,s.jsx)(o.code,{children:"--store"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES"})})})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["Store environment variables as ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"})," in the database."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CREATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["If this option is enabled, Langflow creates starter projects during initialization. Set to ",(0,s.jsx)(o.code,{children:"false"})," to skip all starter project creation and updates."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsx)(o.td,{children:"If this option is enabled, Langflow updates starter projects with the latest component versions when initializing."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"langflow"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsxs)(o.a,{href:"/api-keys-and-authentication#langflow-superuser",children:[(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})," and ",(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"langflow"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsxs)(o.a,{href:"/api-keys-and-authentication#langflow-superuser",children:[(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER"})," and ",(0,s.jsx)(o.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)("sup",{children:(0,s.jsx)("sup",{children:(0,s.jsx)(o.code,{children:"LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT"})})})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Comma-separated list of environment variables to get from the environment and store as ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"global variables"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOAD_FLOWS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to a directory containing flow JSON files to be loaded on startup. Note that this feature only works if ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})," is enabled."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKER_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"300"})}),(0,s.jsxs)(o.td,{children:["Worker timeout in seconds. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-worker-timeout",children:(0,s.jsx)(o.code,{children:"--worker-timeout"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKERS"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1"})}),(0,s.jsxs)(o.td,{children:["Number of worker processes. See ",(0,s.jsx)(o.a,{href:"/configuration-cli#run-workers",children:(0,s.jsx)(o.code,{children:"--workers"})}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_CERT_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the SSL certificate file on the local system."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_KEY_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to the SSL key file on the local system."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"true"})}),(0,s.jsxs)(o.td,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]})]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"configure-env-overrideconf-and-tasksjson-files",children:"Configure .env, override.conf, and tasks.json files"}),"\n",(0,s.jsx)(o.p,{children:"The following examples show how to configure Langflow using environment variables in different scenarios."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"env",label:".env file",default:!0,children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file is a text file that contains key-value pairs of environment variables."]}),(0,s.jsxs)(o.p,{children:["Create or edit a file named ",(0,s.jsx)(o.code,{children:".env"})," in your project root directory and add your configuration:"]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".env"',focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=false",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=true",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=false",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=false",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=false",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=false",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=false",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE=true",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]})]}),(0,s.jsxs)(i.A,{value:"systemd",label:"Systemd service",children:[(0,s.jsx)(o.p,{children:"A systemd service configuration file configures Linux system services."}),(0,s.jsxs)(o.p,{children:["To add environment variables, create or edit a service configuration file and add an ",(0,s.jsx)(o.code,{children:"override.conf"})," file. This file allows you to override the default environment variables for the service."]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'"override.conf"',focus:"",code:{lines:[{tokens:[{content:"[Service]",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"DO_NOT_TRACK=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_LOGIN=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING_INTERVAL=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BACKEND_ONLY=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BUNDLE_URLS=[\\"',props:{style:{color:"#A5D6FF"}}},{content:"https://github.com/user/repo/commit/hash\\",props:{style:{color:"#C9D1D9"}}},{content:'"]"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CACHE_TYPE=async"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_COMPONENTS_PATH=/path/to/components/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR=/path/to/config"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DEV=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_FALLBACK_TO_ENV_VAR=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HOST=localhost"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_ITEMS_LENGTH=100"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_TEXT_LENGTH=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_ENV=container_json"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_FILE=logs/langflow.log"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_LEVEL=error"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_OPEN_BROWSER=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_PORT=7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_REMOVE_API_KEYS=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SECRET_KEY=somesecretkey"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER=adminuser"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER_PASSWORD=adminpass"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKER_TIMEOUT=60000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKERS=3"',props:{style:{color:"#A5D6FF"}}}]}],lang:"ini"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["For more information on systemd, see the ",(0,s.jsx)(o.a,{href:"https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_systemd_unit_files_to_customize_and_optimize_your_system/assembly_working-with-systemd-unit-files_working-with-systemd",children:"Red Hat documentation"}),"."]})]}),(0,s.jsxs)(i.A,{value:"vscode",label:"VSCode tasks.json",children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"tasks.json"})," file located in ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," is a configuration file for development environments using Visual Studio Code."]}),(0,s.jsxs)(o.p,{children:["Create or edit the ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," file in your project root:"]}),(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".vscode/tasks.json"',focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "version"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"2.0.0"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "options"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "env"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "DO_NOT_TRACK"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_LOGIN"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING_INTERVAL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BACKEND_ONLY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BUNDLE_URLS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"[',props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:"https://github.com/user/repo/commit/hash",props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:']"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CACHE_TYPE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"async"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_COMPONENTS_PATH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/components/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/config/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DATABASE_URL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"postgresql://postgres:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DEV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_FALLBACK_TO_ENV_VAR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HEALTH_CHECK_MAX_RETRIES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"5"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HOST"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"localhost"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LANGCHAIN_CACHE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"InMemoryCache"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_FILE_SIZE_UPLOAD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"10000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_ITEMS_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"100"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_TEXT_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_ENV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"container_csv"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_FILE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow.log"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_LEVEL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_OPEN_BROWSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_PORT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_REMOVE_API_KEYS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SAVE_DB_IN_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SECRET_KEY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"somesecretkey"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE_ENVIRONMENT_VARIABLES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminuser"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER_PASSWORD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminpass"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKER_TIMEOUT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"60000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKERS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"3"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tasks"',props:{style:{color:"#7EE787"}}},{content:": [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "label"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow backend"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "type"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"shell"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "command"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'". ./langflownightly/Scripts/activate && langflow run"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "isBackground"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "problemMatcher"',props:{style:{color:"#7EE787"}}},{content:": []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["To run Langflow using the above VSCode ",(0,s.jsx)(o.code,{children:"tasks.json"})," file, in the VSCode command palette, select ",(0,s.jsx)(o.strong,{children:"Tasks: Run Task"})," > ",(0,s.jsx)(o.strong,{children:"langflow backend"}),"."]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"\n",(0,s.jsx)(o.p,{children:"Environment variables set in your terminal aren't automatically available to GUI-based applications like Langflow Desktop when you launch them from the Windows or macOS GUI."}),"\n",(0,s.jsx)(o.p,{children:"For Windows, this means any GUI-based app launched from the Start menu, desktop shortcuts, or Windows Explorer."}),"\n",(0,s.jsx)(o.p,{children:"For macOS, this means any GUI-based app launched from Finder, Spotlight, Launchpad, or the Dock."}),"\n",(0,s.jsx)(o.p,{children:"To set environment variables for Langflow Desktop, you need to use specific commands or files, depending on your OS."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"macos",label:"macOS",default:!0,children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for macOS cannot automatically use variables set in your terminal, such as those in",(0,s.jsx)(o.code,{children:".zshrc"})," or ",(0,s.jsx)(o.code,{children:".bash_profile"}),", when launched from the macOS GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to GUI apps on macOS, you need to use ",(0,s.jsx)(o.code,{children:"launchctl"})," with a ",(0,s.jsx)(o.code,{children:"plist"})," file:"]}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory if it doesn't exist:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"~/Library/LaunchAgents",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["In the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory, create a ",(0,s.jsx)(o.code,{children:".plist"})," file called ",(0,s.jsx)(o.code,{children:"dev.langflow.env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add the following content to ",(0,s.jsx)(o.code,{children:"dev.langflow.env.plist"}),", and then add, change, or remove Langflow environment variables as needed for your configuration."]}),"\n",(0,s.jsxs)(o.p,{children:["This example sets the ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"})," environment variable for all GUI apps launched from the macOS GUI."]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"',props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"<",props:{style:{color:"#C9D1D9"}}},{content:"plist ",props:{style:{color:"#7EE787"}}},{content:"version",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"1.0"',props:{style:{color:"#A5D6FF"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">Label",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">dev.langflow.env",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">ProgramArguments",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"array",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">launchctl",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">setenv",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">LANGFLOW_CONFIG_DIR",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">/Users/your_user/custom/config",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">RunAtLoad",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#7EE787"}}},{content:"/>",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"xml"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Load the file with ",(0,s.jsx)(o.code,{children:"launchctl"}),":"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"launchctl ",props:{style:{color:"#FFA657"}}},{content:"load ~/Library/LaunchAgents/dev.langflow.env.plist",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows1",label:"Window System Properties",children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for Windows cannot automatically use variables set in your terminal, such as those defined with ",(0,s.jsx)(o.code,{children:"set"})," in ",(0,s.jsx)(o.code,{children:"cmd"})," or ",(0,s.jsx)(o.code,{children:"$env:VAR=..."})," in PowerShell, when launched from the Windows GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to the Langflow Desktop app, you must set them at the user or system level using the ",(0,s.jsx)(o.strong,{children:"System Properties"})," interface or the Terminal."]}),(0,s.jsx)(o.p,{children:"To set environment variables using the System Properties interface, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Press ",(0,s.jsx)("kbd",{children:"Win + R"}),", enter ",(0,s.jsx)(o.code,{children:"SystemPropertiesAdvanced"}),", and then press ",(0,s.jsx)("kbd",{children:"Enter"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"Environment Variables"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Under ",(0,s.jsx)(o.strong,{children:"User variables"}),", click ",(0,s.jsx)(o.strong,{children:"New"}),"."]}),"\n",(0,s.jsx)(o.admonition,{type:"tip",children:(0,s.jsxs)(o.p,{children:["To apply the setting to all users, select ",(0,s.jsx)(o.strong,{children:"System variables"}),"."]})}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"OK"})," to save the variable."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows2",label:"Powershell",children:[(0,s.jsx)(o.p,{children:"To define environment variables for Windows using PowerShell, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for the current user:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Users\\your_user\\.langflow_config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"User"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for all users (you must have Administrator priveleges):"}),"\n",(0,s.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Langflow\\Config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"Machine"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]})]})]})}function L(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}function y(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/20177945.f1a62477.js b/assets/js/20177945.f1a62477.js deleted file mode 100644 index 4df38d0984..0000000000 --- a/assets/js/20177945.f1a62477.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8392],{28453:(o,e,t)=>{t.d(e,{R:()=>l,x:()=>c});var n=t(96540);const s={},r=n.createContext(s);function l(o){const e=n.useContext(r);return n.useMemo(function(){return"function"==typeof o?o(e):{...e,...o}},[e,o])}function c(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(s):o.components||s:l(o.components),n.createElement(r.Provider,{value:e},o.children)}},58950:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>d,assets:()=>i,chCodeConfig:()=>a,contentTitle:()=>p,default:()=>y,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","source":"@site/docs/Components/components-custom-components.mdx","sourceDirName":"Components","slug":"/components-custom-components","permalink":"/components-custom-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create custom Python components","slug":"/components-custom-components"},"sidebar":"docs","previous":{"title":"xAI","permalink":"/bundles-xai"},"next":{"title":"Get started with the Langflow API","permalink":"/api-reference-api-examples"}}');var s=t(74848),r=t(28453),l=t(24754);const c={title:"Create custom Python components",slug:"/components-custom-components"},p=void 0,i={},d={annotations:l.hk,Code:l.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},h=[{value:"Class-level attributes",id:"class-level-attributes",level:2},{value:"Structure of a custom component",id:"structure-of-a-custom-component",level:3},{value:"Internal Lifecycle and Execution Flow",id:"internal-lifecycle-and-execution-flow",level:3},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Associated Methods",id:"associated-methods",level:3},{value:"Components with multiple outputs",id:"components-with-multiple-outputs",level:3},{value:"Output Grouping Behavior with group_outputs",id:"output-grouping-behavior-with-group_outputs",level:4},{value:"Example:",id:"example",level:4},{value:"When to Use",id:"when-to-use",level:4},{value:"Common internal patterns",id:"common-internal-patterns",level:3},{value:"_pre_run_setup()",id:"_pre_run_setup",level:4},{value:"Override run or _run",id:"override-run-or-_run",level:4},{value:"Store data in self.ctx",id:"store-data-in-selfctx",level:4},{value:"Directory structure requirements",id:"directory-structure-requirements",level:2},{value:"Custom component inputs and outputs",id:"custom-component-inputs-and-outputs",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Tool mode",id:"tool-mode",level:3},{value:"Typed annotations",id:"typed-annotations",level:2},{value:"Common Return Types",id:"common-return-types",level:3},{value:"Tips for typed annotations",id:"tips-for-typed-annotations",level:3},{value:"Enable dynamic fields",id:"enable-dynamic-fields",level:2},{value:"Implement update_build_config",id:"implement-update_build_config",level:3},{value:"Additional Dynamic Field Controls",id:"additional-dynamic-field-controls",level:3},{value:"Tips for Managing Dynamic Fields",id:"tips-for-managing-dynamic-fields",level:3},{value:"Error handling and logging",id:"error-handling-and-logging",level:2},{value:"Error handling techniques",id:"error-handling-techniques",level:3},{value:"Improve debugging and flow management",id:"improve-debugging-and-flow-management",level:3},{value:"Tips for error handling and logging",id:"tips-for-error-handling-and-logging",level:3},{value:"Contribute custom components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function u(o){const e={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return d||F("CH",!1),d.Code||F("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,s.jsxs)(e.p,{children:["Custom components extend Langflow's functionality through Python classes that inherit from ",(0,s.jsx)(e.code,{children:"Component"}),". This enables integration of new features, data manipulation, external services, and specialized tools."]}),"\n",(0,s.jsx)(e.p,{children:'In Langflow\'s node-based environment, each node is a "component" that performs discrete functions. Custom components are Python classes which define:'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Inputs"})," \u2014 Data or parameters your component requires."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs"})," \u2014 Data your component provides to downstream nodes."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Logic"})," \u2014 How you process inputs to produce outputs."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The benefits of creating custom components include unlimited extensibility, reusability, automatic UI field generation based on inputs, and type-safe connections between nodes."}),"\n",(0,s.jsx)(e.p,{children:"Create custom components for performing specialized tasks, calling APIs, or adding advanced logic."}),"\n",(0,s.jsx)(e.p,{children:"Custom components in Langflow are built upon:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["The Python class that inherits from ",(0,s.jsx)(e.code,{children:"Component"}),"."]}),"\n",(0,s.jsx)(e.li,{children:"Class-level attributes that identify and describe the component."}),"\n",(0,s.jsx)(e.li,{children:"Input and output lists that determine data flow."}),"\n",(0,s.jsx)(e.li,{children:"Internal variables for logging and advanced logic."}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"class-level-attributes",children:"Class-level attributes"}),"\n",(0,s.jsx)(e.p,{children:"Define these attributes to control a custom component's appearance and behavior:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCsvReader",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSV Reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Shown in node header",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Reads CSV files" ',props:{style:{color:"#A5D6FF"}}},{content:"# Tooltip text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"file-text" ',props:{style:{color:"#A5D6FF"}}},{content:"# Visual identifier",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSVReader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Unique internal ID",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" documentation ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.example.com/csv_reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Optional",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"display_name"}),": A user-friendly label in the node header."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"description"}),": A brief summary shown in tooltips."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"icon"}),": A visual identifier from Langflow's icon library."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"name"}),": A unique internal identifier."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"documentation"}),": An optional link to external docs."]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{title:"Icon usage",type:"tip",children:(0,s.jsxs)(e.p,{children:["Langflow uses ",(0,s.jsx)(e.a,{href:"https://lucide.dev/icons",children:"Lucide"})," for icons. To assign an icon to your component, set the icon attribute to the name of a Lucide icon as a string, such as ",(0,s.jsx)(e.code,{children:'icon = "file-text"'}),". Langflow renders icons from the Lucide library automatically."]})}),"\n",(0,s.jsx)(e.h3,{id:"structure-of-a-custom-component",children:"Structure of a custom component"}),"\n",(0,s.jsxs)(e.p,{children:["A ",(0,s.jsx)(e.strong,{children:"Langflow custom component"})," goes beyond a simple class with inputs and outputs. It includes an internal structure with optional lifecycle steps, output generation, front-end interaction, and logic organization."]}),"\n",(0,s.jsx)(e.p,{children:"A basic component:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Inherits from ",(0,s.jsx)(e.code,{children:"langflow.custom.Component"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:["Declares metadata like ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"description"}),", ",(0,s.jsx)(e.code,{children:"icon"}),", and more."]}),"\n",(0,s.jsxs)(e.li,{children:["Defines ",(0,s.jsx)(e.code,{children:"inputs"})," and ",(0,s.jsx)(e.code,{children:"outputs"})," lists."]}),"\n",(0,s.jsx)(e.li,{children:"Implements methods matching output specifications."}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"A minimal custom component skeleton contains the following:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"My Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"A short summary."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"sparkles"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"MyComponent"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"some_output_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"...",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"internal-lifecycle-and-execution-flow",children:"Internal Lifecycle and Execution Flow"}),"\n",(0,s.jsx)(e.p,{children:"Langflow's engine manages:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Instantiation"}),": A component is created and internal structures are initialized."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Assigning Inputs"}),": Values from the UI or connections are assigned to component fields."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation and Setup"}),": Optional hooks like ",(0,s.jsx)(e.code,{children:"_pre_run_setup"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs Generation"}),": ",(0,s.jsx)(e.code,{children:"run()"})," or ",(0,s.jsx)(e.code,{children:"build_results()"})," triggers output methods."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Optional Hooks"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"initialize_data"})," or ",(0,s.jsx)(e.code,{children:"_pre_run_setup"})," can run setup logic before the component's main execution."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"__call__"}),", ",(0,s.jsx)(e.code,{children:"run()"}),", or ",(0,s.jsx)(e.code,{children:"_run()"})," can be overridden to customize how the component is called or to define custom execution logic."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"inputs-and-outputs",children:"Inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Custom component inputs are defined with properties like:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"}),", ",(0,s.jsx)(e.code,{children:"value"}),", ",(0,s.jsx)(e.code,{children:"advanced"}),", ",(0,s.jsx)(e.code,{children:"is_list"}),", ",(0,s.jsx)(e.code,{children:"tool_mode"}),", ",(0,s.jsx)(e.code,{children:"real_time_refresh"})]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"StrInput"}),": simple text input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"DropdownInput"}),": selectable options."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"HandleInput"}),": specialized connections."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Custom component ",(0,s.jsx)(e.code,{children:"Output"})," properties define:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"method"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"})]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For more information, see ",(0,s.jsx)(e.a,{href:"/components-custom-components#custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"."]}),"\n",(0,s.jsx)(e.h3,{id:"associated-methods",children:"Associated Methods"}),"\n",(0,s.jsx)(e.p,{children:"Each output is linked to a method:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"The output method name must match the method name."}),"\n",(0,s.jsx)(e.li,{children:"The method typically returns objects like Message, Data, or DataFrame."}),"\n",(0,s.jsxs)(e.li,{children:["The method can use inputs with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"File Contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"file_contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"read_file"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"#...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"read_file",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".filename",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" with ",props:{style:{color:"#FF7B72"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(path, ",props:{style:{color:"#C9D1D9"}}},{content:'"r"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" f:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" content ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" f.read()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Read ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(content)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" chars from ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"content"',props:{style:{color:"#A5D6FF"}}},{content:": content})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"components-with-multiple-outputs",children:"Components with multiple outputs"}),"\n",(0,s.jsx)(e.p,{children:"A component can define multiple outputs.\nEach output can have a different corresponding method.\nFor example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Processed Data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processed_data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_data"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Debug Info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"debug_info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"provide_debug_info"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"output-grouping-behavior-with-group_outputs",children:["Output Grouping Behavior with ",(0,s.jsx)(e.code,{children:"group_outputs"})]}),"\n",(0,s.jsxs)(e.p,{children:["By default, components in Langflow that define multiple outputs will display them as a dropdown in the UI. This behavior is controlled by the ",(0,s.jsx)(e.code,{children:"group_outputs"})," parameter."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default):",(0,s.jsx)(e.br,{}),"\n","When a component has more than one output and ",(0,s.jsx)(e.code,{children:"group_outputs"})," is not specified (or set to ",(0,s.jsx)(e.code,{children:"False"}),"), the outputs are grouped into a dropdown. The user can choose only one output at a time from the UI."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=True"}),":",(0,s.jsx)(e.br,{}),"\n","All outputs will be shown simultaneously in the UI. This is useful when the component is expected to return multiple values that should be used in parallel downstream."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h4,{id:"example",children:"Example:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default behavior)"]}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Structured Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"dataframe_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_dataframe"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In this example, both outputs are available through a dropdown menu in the Langflow UI."}),"\n",(0,s.jsxs)(e.p,{children:["Note: Since ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," is the default behavior, it does not need to be explicitly set in the component."]}),"\n",(0,s.jsxs)(e.ol,{start:"2",children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"group_outputs=True"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"True"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"False"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"Here, both outputs will appear independently and be selectable directly in the UI."}),"\n",(0,s.jsx)(e.h4,{id:"when-to-use",children:"When to Use"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," when the component is expected to return only one of the outputs depending on the flow logic."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=True"})," when the component should expose multiple outputs simultaneously, such as structured data and a table that are meant to be used in parallel."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-internal-patterns",children:"Common internal patterns"}),"\n",(0,s.jsx)(e.h4,{id:"_pre_run_setup",children:(0,s.jsx)(e.code,{children:"_pre_run_setup()"})}),"\n",(0,s.jsx)(e.p,{children:"To initialize a custom component with counters set:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"_pre_run_setup",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"hasattr",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"_initialized"',props:{style:{color:"#A5D6FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:"._initialized ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".iteration ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"0",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"override-run-or-_run",children:["Override ",(0,s.jsx)(e.code,{children:"run"})," or ",(0,s.jsx)(e.code,{children:"_run"})]}),"\n",(0,s.jsxs)(e.p,{children:["You can override ",(0,s.jsx)(e.code,{children:"async def _run(self): ..."})," to define custom execution logic, although the default behavior from the base class usually covers most cases."]}),"\n",(0,s.jsxs)(e.h4,{id:"store-data-in-selfctx",children:["Store data in ",(0,s.jsx)(e.code,{children:"self.ctx"})]}),"\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"self.ctx"})," as a shared storage for data or counters across the component's execution flow:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".ctx.get(",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".ctx[",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"+ ",props:{style:{color:"#FF7B72"}}},{content:"1",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"directory-structure-requirements",children:"Directory structure requirements"}),"\n",(0,s.jsxs)(e.p,{children:["By default, Langflow looks for custom components in the ",(0,s.jsx)(e.code,{children:"langflow/components"})," directory."]}),"\n",(0,s.jsxs)(e.p,{children:["If you're creating custom components in a different location using the ",(0,s.jsx)(e.a,{href:"/environment-variables#LANGFLOW_COMPONENTS_PATH",children:(0,s.jsx)(e.code,{children:"LANGFLOW_COMPONENTS_PATH"})})," environment variable, components must be organized in a specific directory structure to be properly loaded and displayed in the UI:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/your/custom/components/path/ # Base directory set by LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 category_name/ # Required category subfolder that determines menu name",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Component file",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Components must be placed inside ",(0,s.jsx)(e.strong,{children:"category folders"}),", not directly in the base directory.\nThe category folder name determines where the component appears in the Langflow ",(0,s.jsx)(e.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsxs)(e.p,{children:["For example, to add a component to the ",(0,s.jsx)(e.strong,{children:"Helpers"})," category, place it in a ",(0,s.jsx)(e.code,{children:"helpers"})," subfolder:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:' \u2514\u2500\u2500 helpers/ # Displayed within the "Helpers" category',props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Your component",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"You can have multiple category folders to organize components into different categories:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/",props:{}}]},{tokens:[{content:" \u251c\u2500\u2500 helpers/",props:{}}]},{tokens:[{content:" \u2502 \u2514\u2500\u2500 helper_component.py",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tools/",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tool_component.py",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"This folder structure is required for Langflow to properly discover and load your custom components. Components placed directly in the base directory will not be loaded."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Won't be loaded - missing category folder!",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Inputs and outputs define how data flows through the component, how it appears in the UI, and how connections to other components are validated."}),"\n",(0,s.jsx)(e.h3,{id:"inputs",children:"Inputs"}),"\n",(0,s.jsxs)(e.p,{children:["Inputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"inputs"})," list. When Langflow loads the component, it uses this list to render component fields and ",(0,s.jsx)(e.a,{href:"/concepts-components#component-ports",children:"ports"})," in the UI. Users or other components provide values or connections to fill these inputs."]}),"\n",(0,s.jsxs)(e.p,{children:["An input is usually an instance of a class from ",(0,s.jsx)(e.code,{children:"langflow.io"})," (such as ",(0,s.jsx)(e.code,{children:"StrInput"}),", ",(0,s.jsx)(e.code,{children:"DataInput"}),", or ",(0,s.jsx)(e.code,{children:"MessageTextInput"}),"). The most common constructor parameters are:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name, accessed with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown to users in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": A tooltip or short description."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"value"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": The default value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"advanced"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),', moves the field into the "Advanced" section.']}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"required"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", forces the user to provide a value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"is_list"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", allows multiple values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"input_types"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Restricts allowed connection types (e.g., ",(0,s.jsx)(e.code,{children:'["Data"]'}),", ",(0,s.jsx)(e.code,{children:'["LanguageModel"]'}),")."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"Here are the most commonly used input classes and their typical usage."}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Text Inputs"}),": For simple text entries."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"StrInput"})})," creates a single-line text field."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})})," creates a multi-line text area."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Numeric and Boolean Inputs"}),": Ensures users can only enter valid numeric or boolean data."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"BoolInput"})}),", ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"IntInput"})}),", and ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FloatInput"})})," provide fields for boolean, integer, and float values, ensuring type consistency."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Dropdowns"}),": For selecting from predefined options, useful for modes or levels."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Secrets"}),": A specialized input for sensitive data, ensuring input is hidden in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"SecretStrInput"})})," for API keys and passwords."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Specialized Data Inputs"}),": Ensures type-checking and color-coded connections in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Data"})," object (typically with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Message"})," object, used in chat or agent-based flows."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})})," simplifies access to the ",(0,s.jsx)(e.code,{children:".text"})," field of a ",(0,s.jsx)(e.code,{children:"Message"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Handle-Based Inputs"}),": Used to connect outputs of specific types, ensuring correct pipeline connections."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"HandleInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"File Uploads"}),": Allows users to upload files directly through the UI or receive file paths from other components."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FileInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Lists"}),": Set ",(0,s.jsx)(e.code,{children:"is_list=True"})," to accept multiple values, ideal for batch or grouped operations."]}),"\n",(0,s.jsxs)(e.p,{children:["This example defines three inputs: a text field (",(0,s.jsx)(e.code,{children:"StrInput"}),"), a boolean toggle (",(0,s.jsx)(e.code,{children:"BoolInput"}),"), and a dropdown selection (",(0,s.jsx)(e.code,{children:"DropdownInput"}),")."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, BoolInput, DropdownInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"title"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Title"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" BoolInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Fast"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Experimental"',props:{style:{color:"#A5D6FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"outputs",children:"Outputs"}),"\n",(0,s.jsxs)(e.p,{children:["Outputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"outputs"})," list. When Langflow renders a component, each output becomes a connector point in the UI. When you connect something to an output, Langflow automatically calls the corresponding method and passes the returned object to the next component."]}),"\n",(0,s.jsxs)(e.p,{children:["An output is usually an instance of ",(0,s.jsx)(e.code,{children:"Output"})," from ",(0,s.jsx)(e.code,{children:"langflow.io"}),", with common parameters:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"method"})}),": The name of the method called to produce the output."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Help text shown on hover."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The method must exist in the class, and it is recommended to annotate its return type for better type checking.\nYou can also set a ",(0,s.jsx)(e.code,{children:"self.status"})," message inside the method to show progress or logs."]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Common Return Types"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})}),": Structured chat messages."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})}),": Flexible object with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})}),": Pandas-based tables (",(0,s.jsx)(e.code,{children:"langflow.schema.DataFrame"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Primitive types"}),": ",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"})," (not recommended if you need type/color consistency)."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the ",(0,s.jsx)(e.code,{children:"DataToDataFrame"})," component defines its output using the outputs list. The ",(0,s.jsx)(e.code,{children:"df_out"})," output is linked to the ",(0,s.jsx)(e.code,{children:"build_df"})," method, so when connected in the UI, Langflow calls this method and passes its returned DataFrame to the next node. This demonstrates how each output maps to a method that generates the actual output data."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Data, DataFrame",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DataToDataFrame",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Data to DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Convert multiple Data objects into a DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"table"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"DataToDataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Data Items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"List of Data objects to convert"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"df_out"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_df"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rows ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" item ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".items:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.data.copy() ",props:{style:{color:"#C9D1D9"}}},{content:"if",props:{style:{color:"#FF7B72"}}},{content:" item.data ",props:{style:{color:"#C9D1D9"}}},{content:"else",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict[",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.get_text() ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" rows.append(row_dict)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(rows)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Built DataFrame with ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" df",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tool-mode",children:"Tool mode"}),"\n",(0,s.jsxs)(e.p,{children:["You can configure a Custom Component to work as a ",(0,s.jsx)(e.strong,{children:"Tool"})," by setting the parameter ",(0,s.jsx)(e.code,{children:"tool_mode=True"}),". This allows the component to be used in Langflow's Tool Mode workflows, such as by Agent components."]}),"\n",(0,s.jsx)(e.p,{children:"Langflow currently supports the following input types for Tool Mode:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataFrameInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"PromptInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mensage"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter the message that will be processed directly by the tool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tool_mode",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"typed-annotations",children:"Typed annotations"}),"\n",(0,s.jsxs)(e.p,{children:["In Langflow, ",(0,s.jsx)(e.strong,{children:"typed annotations"})," allow Langflow to visually guide users and maintain flow consistency."]}),"\n",(0,s.jsx)(e.p,{children:"Typed annotations provide:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Color-coding"}),": Outputs like ",(0,s.jsx)(e.code,{children:"-> Data"})," or ",(0,s.jsx)(e.code,{children:"-> Message"})," get distinct colors."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation"}),": Langflow blocks incompatible connections automatically."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Readability"}),": Developers can quickly understand data flow."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Development tools"}),": Better code suggestions and error checking in your code editor."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-return-types",children:"Common Return Types"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})})}),"\n",(0,s.jsx)(e.p,{children:"For chat-style outputs."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"produce_message",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello! from typed method!"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"System"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to Message-compatible inputs."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})})}),"\n",(0,s.jsx)(e.p,{children:"For structured data like dicts or partial texts."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"get_processed_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"key1"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"value1"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"key2"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"123",props:{style:{color:"#79C0FF"}}},{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"processed)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only with DataInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})})}),"\n",(0,s.jsx)(e.p,{children:"For tabular data"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pdf ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}},{content:'"A"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:'"B"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:"]})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(pdf)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to DataFrameInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.strong,{children:["Primitive Types (",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"}),")"]})}),"\n",(0,s.jsx)(e.p,{children:"Returning primitives is allowed but wrapping in Data or Message is recommended for better UI consistency."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_sum",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"int",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"sum",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".numbers)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-typed-annotations",children:"Tips for typed annotations"}),"\n",(0,s.jsx)(e.p,{children:"When using typed annotations, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Always Annotate Outputs"}),": Specify return types like ",(0,s.jsx)(e.code,{children:"-> Data"}),", ",(0,s.jsx)(e.code,{children:"-> Message"}),", or ",(0,s.jsx)(e.code,{children:"-> DataFrame"})," to enable proper UI color-coding and validation."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Wrap Raw Data"}),": Use ",(0,s.jsx)(e.code,{children:"Data"}),", ",(0,s.jsx)(e.code,{children:"Message"}),", or ",(0,s.jsx)(e.code,{children:"DataFrame"})," wrappers instead of returning plain structures."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Primitives Carefully"}),": Direct ",(0,s.jsx)(e.code,{children:"str"})," or ",(0,s.jsx)(e.code,{children:"int"})," returns are fine for simple flows, but wrapping improves flexibility."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Annotate Helpers Too"}),": Even if internal, typing improves maintainability and clarity."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Handle Edge Cases"}),": Prefer returning structured ",(0,s.jsx)(e.code,{children:"Data"})," with error fields when needed."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stay Consistent"}),": Use the same types across your components to make flows predictable and easier to build."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"enable-dynamic-fields",children:"Enable dynamic fields"}),"\n",(0,s.jsxs)(e.p,{children:["In ",(0,s.jsx)(e.strong,{children:"Langflow"}),", dynamic fields allow inputs to change or appear based on user interactions. You can make an input dynamic by setting ",(0,s.jsx)(e.code,{children:"dynamic=True"}),".\nOptionally, setting ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," triggers the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method to adjust the input's visibility or properties in real time, creating a contextual UI that only displays relevant fields based on the user's choices."]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the operator field triggers updates with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"}),".\nThe ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field is initially hidden and controlled with ",(0,s.jsx)(e.code,{children:"dynamic=True"}),"."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DropdownInput, StrInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RegexRouter",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Regex Router"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Demonstrates dynamic fields for regex input."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"contains"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" real_time_refresh",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Regex Pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"\"Used if operator='regex'\"",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" dynamic",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" show",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h3,{id:"implement-update_build_config",children:["Implement ",(0,s.jsx)(e.code,{children:"update_build_config"})]}),"\n",(0,s.jsxs)(e.p,{children:["When a field with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," is modified, Langflow calls the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method, passing the updated field name, value, and the component's configuration to dynamically adjust the visibility or properties of other fields based on user input."]}),"\n",(0,s.jsxs)(e.p,{children:["This example will show or hide the ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field when the user selects a different operator."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"update_build_config",props:{style:{color:"#D2A8FF"}}},{content:"(self, build_config: ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:", field_value: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", field_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:") -> ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_name ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_value ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" build_config",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"additional-dynamic-field-controls",children:"Additional Dynamic Field Controls"}),"\n",(0,s.jsxs)(e.p,{children:["You can also modify other properties within ",(0,s.jsx)(e.code,{children:"update_build_config"}),", such as:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"required"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["required"] = True/False'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"advanced"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["advanced"] = True'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"options"}),": Modify dynamic dropdown options."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-managing-dynamic-fields",children:"Tips for Managing Dynamic Fields"}),"\n",(0,s.jsx)(e.p,{children:"When working with dynamic fields, consider the following best practices to ensure a smooth user experience:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Minimize field changes"}),": Hide only fields that are truly irrelevant to avoid confusing users."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Test behavior"}),": Ensure that adding or removing fields doesn't accidentally erase user input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Preserve data"}),": Use ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["show"] = False'})," to hide fields without losing their values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Clarify logic"}),": Add ",(0,s.jsx)(e.code,{children:"info"})," notes to explain why fields appear or disappear based on conditions."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep it manageable"}),": If the dynamic logic becomes too complex, consider breaking it into smaller components, unless it serves a clear purpose in a single node."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"error-handling-and-logging",children:"Error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"In Langflow, robust error handling ensures that your components behave predictably, even when unexpected situations occur, such as invalid inputs, external API failures, or internal logic errors."}),"\n",(0,s.jsx)(e.h3,{id:"error-handling-techniques",children:"Error handling techniques"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Raise Exceptions"}),":\nIf a critical error occurs, you can raise standard Python exceptions such as ",(0,s.jsx)(e.code,{children:"ValueError"}),", or specialized exceptions like ",(0,s.jsx)(e.code,{children:"ToolException"}),". Langflow will automatically catch these and display appropriate error messages in the UI, helping users quickly identify what went wrong.","\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_result",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".user_input:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"No input provided."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return Structured Error Data"}),':\nInstead of stopping a flow abruptly, you can return a Data object containing an "error" field. This approach allows the flow to continue operating and enables downstream components to detect and handle the error gracefully.',"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"run_model",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"Exception ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(e)})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"improve-debugging-and-flow-management",children:"Improve debugging and flow management"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Use ",(0,s.jsx)(e.code,{children:"self.status"})]}),":\nEach component has a status field where you can store short messages about the execution result\u2014such as success summaries, partial progress, or error notifications. These appear directly in the UI, making troubleshooting easier for users."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"parse_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Parsed ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows successfully."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"rows"',props:{style:{color:"#A5D6FF"}}},{content:": rows})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Stop specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})]}),":\nYou can halt individual output paths when certain conditions fail, without affecting the entire component. This is especially useful when working with components that have multiple output branches."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if <",props:{style:{color:"#FF7B72"}}},{content:"some condition",props:{style:{color:"#C9D1D9"}}},{content:">",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".stop(",props:{style:{color:"#C9D1D9"}}},{content:'"some_output"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"# Tells Langflow no data flows",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Condition not met"',props:{style:{color:"#A5D6FF"}}},{content:"})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Log events"}),':\nYou can log key execution details inside components. Logs are displayed in the "Logs" or "Events" section of the component\'s detail view and can be accessed later through the flow\'s debug panel or exported files, providing a clear trace of the component\'s behavior for easier debugging.']}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"process_file",props:{style:{color:"#D2A8FF"}}},{content:"(self, file_path: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".log(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Processing file ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"file_path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-error-handling-and-logging",children:"Tips for error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"To build more reliable components, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validate inputs early"}),": Catch missing or invalid inputs at the start to prevent broken logic."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsxs)(e.strong,{children:["Summarize with ",(0,s.jsx)(e.code,{children:"self.status"})]}),": Use short success or error summaries to help users understand results quickly."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep logs concise"}),": Focus on meaningful messages to avoid cluttering the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return structured errors"}),": When appropriate, return ",(0,s.jsx)(e.code,{children:'Data(data={"error": ...})'})," instead of raising exceptions to allow downstream handling."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stop outputs selectively"}),": Only halt specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})," if necessary, to preserve correct flow behavior elsewhere."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute custom components to Langflow"}),"\n",(0,s.jsxs)(e.p,{children:["See ",(0,s.jsx)(e.a,{href:"/contributing-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function y(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(u,{...o})}):u(o)}function F(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/20177945.f35088b0.js b/assets/js/20177945.f35088b0.js new file mode 100644 index 0000000000..b95929d6f1 --- /dev/null +++ b/assets/js/20177945.f35088b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8392],{28453:(o,e,t)=>{t.d(e,{R:()=>l,x:()=>c});var n=t(96540);const s={},r=n.createContext(s);function l(o){const e=n.useContext(r);return n.useMemo(function(){return"function"==typeof o?o(e):{...e,...o}},[e,o])}function c(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(s):o.components||s:l(o.components),n.createElement(r.Provider,{value:e},o.children)}},58950:(o,e,t)=>{t.r(e),t.d(e,{CH:()=>d,assets:()=>i,chCodeConfig:()=>a,contentTitle:()=>p,default:()=>y,frontMatter:()=>c,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","source":"@site/docs/Components/components-custom-components.mdx","sourceDirName":"Components","slug":"/components-custom-components","permalink":"/components-custom-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create custom Python components","slug":"/components-custom-components"},"sidebar":"docs","previous":{"title":"xAI","permalink":"/bundles-xai"},"next":{"title":"Get started with the Langflow API","permalink":"/api-reference-api-examples"}}');var s=t(74848),r=t(28453),l=t(24754);const c={title:"Create custom Python components",slug:"/components-custom-components"},p=void 0,i={},d={annotations:l.hk,Code:l.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},h=[{value:"Class-level attributes",id:"class-level-attributes",level:2},{value:"Structure of a custom component",id:"structure-of-a-custom-component",level:3},{value:"Internal Lifecycle and Execution Flow",id:"internal-lifecycle-and-execution-flow",level:3},{value:"Inputs and outputs",id:"inputs-and-outputs",level:3},{value:"Associated Methods",id:"associated-methods",level:3},{value:"Components with multiple outputs",id:"components-with-multiple-outputs",level:3},{value:"Output Grouping Behavior with group_outputs",id:"output-grouping-behavior-with-group_outputs",level:4},{value:"Example:",id:"example",level:4},{value:"When to Use",id:"when-to-use",level:4},{value:"Common internal patterns",id:"common-internal-patterns",level:3},{value:"_pre_run_setup()",id:"_pre_run_setup",level:4},{value:"Override run or _run",id:"override-run-or-_run",level:4},{value:"Store data in self.ctx",id:"store-data-in-selfctx",level:4},{value:"Directory structure requirements",id:"directory-structure-requirements",level:2},{value:"Custom component inputs and outputs",id:"custom-component-inputs-and-outputs",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Tool mode",id:"tool-mode",level:3},{value:"Typed annotations",id:"typed-annotations",level:2},{value:"Common Return Types",id:"common-return-types",level:3},{value:"Tips for typed annotations",id:"tips-for-typed-annotations",level:3},{value:"Enable dynamic fields",id:"enable-dynamic-fields",level:2},{value:"Implement update_build_config",id:"implement-update_build_config",level:3},{value:"Additional Dynamic Field Controls",id:"additional-dynamic-field-controls",level:3},{value:"Tips for Managing Dynamic Fields",id:"tips-for-managing-dynamic-fields",level:3},{value:"Error handling and logging",id:"error-handling-and-logging",level:2},{value:"Error handling techniques",id:"error-handling-techniques",level:3},{value:"Improve debugging and flow management",id:"improve-debugging-and-flow-management",level:3},{value:"Tips for error handling and logging",id:"tips-for-error-handling-and-logging",level:3},{value:"Contribute custom components to Langflow",id:"contribute-custom-components-to-langflow",level:2}];function u(o){const e={a:"a",admonition:"admonition",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components};return d||F("CH",!1),d.Code||F("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,s.jsxs)(e.p,{children:["Custom components extend Langflow's functionality through Python classes that inherit from ",(0,s.jsx)(e.code,{children:"Component"}),". This enables integration of new features, data manipulation, external services, and specialized tools."]}),"\n",(0,s.jsx)(e.p,{children:'In Langflow\'s node-based environment, each node is a "component" that performs discrete functions. Custom components are Python classes which define:'}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Inputs"})," \u2014 Data or parameters your component requires."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs"})," \u2014 Data your component provides to downstream nodes."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Logic"})," \u2014 How you process inputs to produce outputs."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"The benefits of creating custom components include unlimited extensibility, reusability, automatic UI field generation based on inputs, and type-safe connections between nodes."}),"\n",(0,s.jsx)(e.p,{children:"Create custom components for performing specialized tasks, calling APIs, or adding advanced logic."}),"\n",(0,s.jsx)(e.p,{children:"Custom components in Langflow are built upon:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["The Python class that inherits from ",(0,s.jsx)(e.code,{children:"Component"}),"."]}),"\n",(0,s.jsx)(e.li,{children:"Class-level attributes that identify and describe the component."}),"\n",(0,s.jsx)(e.li,{children:"Input and output lists that determine data flow."}),"\n",(0,s.jsx)(e.li,{children:"Internal variables for logging and advanced logic."}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"class-level-attributes",children:"Class-level attributes"}),"\n",(0,s.jsx)(e.p,{children:"Define these attributes to control a custom component's appearance and behavior:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyCsvReader",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSV Reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Shown in node header",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Reads CSV files" ',props:{style:{color:"#A5D6FF"}}},{content:"# Tooltip text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"file-text" ',props:{style:{color:"#A5D6FF"}}},{content:"# Visual identifier",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"CSVReader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Unique internal ID",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" documentation ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://docs.example.com/csv_reader" ',props:{style:{color:"#A5D6FF"}}},{content:"# Optional",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"display_name"}),": A user-friendly label in the node header."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"description"}),": A brief summary shown in tooltips."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"icon"}),": A visual identifier from Langflow's icon library."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"name"}),": A unique internal identifier."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"documentation"}),": An optional link to external docs."]}),"\n"]}),"\n",(0,s.jsx)(e.admonition,{title:"Icon usage",type:"tip",children:(0,s.jsxs)(e.p,{children:["Langflow uses ",(0,s.jsx)(e.a,{href:"https://lucide.dev/icons",children:"Lucide"})," for icons. To assign an icon to your component, set the icon attribute to the name of a Lucide icon as a string, such as ",(0,s.jsx)(e.code,{children:'icon = "file-text"'}),". Langflow renders icons from the Lucide library automatically."]})}),"\n",(0,s.jsx)(e.h3,{id:"structure-of-a-custom-component",children:"Structure of a custom component"}),"\n",(0,s.jsxs)(e.p,{children:["A ",(0,s.jsx)(e.strong,{children:"Langflow custom component"})," goes beyond a simple class with inputs and outputs. It includes an internal structure with optional lifecycle steps, output generation, front-end interaction, and logic organization."]}),"\n",(0,s.jsx)(e.p,{children:"A basic component:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Inherits from ",(0,s.jsx)(e.code,{children:"langflow.custom.Component"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:["Declares metadata like ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"description"}),", ",(0,s.jsx)(e.code,{children:"icon"}),", and more."]}),"\n",(0,s.jsxs)(e.li,{children:["Defines ",(0,s.jsx)(e.code,{children:"inputs"})," and ",(0,s.jsx)(e.code,{children:"outputs"})," lists."]}),"\n",(0,s.jsx)(e.li,{children:"Implements methods matching output specifications."}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"A minimal custom component skeleton contains the following:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.template ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"MyComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"My Component"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"A short summary."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"sparkles"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"MyComponent"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"some_output_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"...",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"internal-lifecycle-and-execution-flow",children:"Internal Lifecycle and Execution Flow"}),"\n",(0,s.jsx)(e.p,{children:"Langflow's engine manages:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Instantiation"}),": A component is created and internal structures are initialized."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Assigning Inputs"}),": Values from the UI or connections are assigned to component fields."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation and Setup"}),": Optional hooks like ",(0,s.jsx)(e.code,{children:"_pre_run_setup"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Outputs Generation"}),": ",(0,s.jsx)(e.code,{children:"run()"})," or ",(0,s.jsx)(e.code,{children:"build_results()"})," triggers output methods."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Optional Hooks"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"initialize_data"})," or ",(0,s.jsx)(e.code,{children:"_pre_run_setup"})," can run setup logic before the component's main execution."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"__call__"}),", ",(0,s.jsx)(e.code,{children:"run()"}),", or ",(0,s.jsx)(e.code,{children:"_run()"})," can be overridden to customize how the component is called or to define custom execution logic."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"inputs-and-outputs",children:"Inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Custom component inputs are defined with properties like:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"}),", ",(0,s.jsx)(e.code,{children:"value"}),", ",(0,s.jsx)(e.code,{children:"advanced"}),", ",(0,s.jsx)(e.code,{children:"is_list"}),", ",(0,s.jsx)(e.code,{children:"tool_mode"}),", ",(0,s.jsx)(e.code,{children:"real_time_refresh"})]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"StrInput"}),": simple text input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"DropdownInput"}),": selectable options."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"HandleInput"}),": specialized connections."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["Custom component ",(0,s.jsx)(e.code,{children:"Output"})," properties define:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"name"}),", ",(0,s.jsx)(e.code,{children:"display_name"}),", ",(0,s.jsx)(e.code,{children:"method"})]}),"\n",(0,s.jsxs)(e.li,{children:["Optional: ",(0,s.jsx)(e.code,{children:"info"})]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["For more information, see ",(0,s.jsx)(e.a,{href:"/components-custom-components#custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"."]}),"\n",(0,s.jsx)(e.h3,{id:"associated-methods",children:"Associated Methods"}),"\n",(0,s.jsx)(e.p,{children:"Each output is linked to a method:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"The output method name must match the method name."}),"\n",(0,s.jsx)(e.li,{children:"The method typically returns objects like Message, Data, or DataFrame."}),"\n",(0,s.jsxs)(e.li,{children:["The method can use inputs with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"For example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"File Contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"file_contents"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"read_file"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"#...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"read_file",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".filename",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" with ",props:{style:{color:"#FF7B72"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(path, ",props:{style:{color:"#C9D1D9"}}},{content:'"r"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" f:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" content ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" f.read()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Read ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(content)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:" chars from ",props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"content"',props:{style:{color:"#A5D6FF"}}},{content:": content})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"components-with-multiple-outputs",children:"Components with multiple outputs"}),"\n",(0,s.jsx)(e.p,{children:"A component can define multiple outputs.\nEach output can have a different corresponding method.\nFor example:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Processed Data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"processed_data"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"process_data"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Debug Info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"debug_info"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"provide_debug_info"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"output-grouping-behavior-with-group_outputs",children:["Output Grouping Behavior with ",(0,s.jsx)(e.code,{children:"group_outputs"})]}),"\n",(0,s.jsxs)(e.p,{children:["By default, components in Langflow that define multiple outputs will display them as a dropdown in the UI. This behavior is controlled by the ",(0,s.jsx)(e.code,{children:"group_outputs"})," parameter."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default):",(0,s.jsx)(e.br,{}),"\n","When a component has more than one output and ",(0,s.jsx)(e.code,{children:"group_outputs"})," is not specified (or set to ",(0,s.jsx)(e.code,{children:"False"}),"), the outputs are grouped into a dropdown. The user can choose only one output at a time from the UI."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"group_outputs=True"}),":",(0,s.jsx)(e.br,{}),"\n","All outputs will be shown simultaneously in the UI. This is useful when the component is expected to return multiple values that should be used in parallel downstream."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h4,{id:"example",children:"Example:"}),"\n",(0,s.jsxs)(e.ol,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"group_outputs=False"})," (default behavior)"]}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Structured Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"dataframe_output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_structured_dataframe"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In this example, both outputs are available through a dropdown menu in the Langflow UI."}),"\n",(0,s.jsxs)(e.p,{children:["Note: Since ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," is the default behavior, it does not need to be explicitly set in the component."]}),"\n",(0,s.jsxs)(e.ol,{start:"2",children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"group_outputs=True"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"True"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"true_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_result"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"False"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"false_response"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" group_outputs",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"Here, both outputs will appear independently and be selectable directly in the UI."}),"\n",(0,s.jsx)(e.h4,{id:"when-to-use",children:"When to Use"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=False"})," when the component is expected to return only one of the outputs depending on the flow logic."]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"group_outputs=True"})," when the component should expose multiple outputs simultaneously, such as structured data and a table that are meant to be used in parallel."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-internal-patterns",children:"Common internal patterns"}),"\n",(0,s.jsx)(e.h4,{id:"_pre_run_setup",children:(0,s.jsx)(e.code,{children:"_pre_run_setup()"})}),"\n",(0,s.jsx)(e.p,{children:"To initialize a custom component with counters set:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"_pre_run_setup",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"hasattr",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"_initialized"',props:{style:{color:"#A5D6FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:"._initialized ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".iteration ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"0",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h4,{id:"override-run-or-_run",children:["Override ",(0,s.jsx)(e.code,{children:"run"})," or ",(0,s.jsx)(e.code,{children:"_run"})]}),"\n",(0,s.jsxs)(e.p,{children:["You can override ",(0,s.jsx)(e.code,{children:"async def _run(self): ..."})," to define custom execution logic, although the default behavior from the base class usually covers most cases."]}),"\n",(0,s.jsxs)(e.h4,{id:"store-data-in-selfctx",children:["Store data in ",(0,s.jsx)(e.code,{children:"self.ctx"})]}),"\n",(0,s.jsxs)(e.p,{children:["Use ",(0,s.jsx)(e.code,{children:"self.ctx"})," as a shared storage for data or counters across the component's execution flow:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_method",props:{style:{color:"#D2A8FF"}}},{content:"(self):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".ctx.get(",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".ctx[",props:{style:{color:"#C9D1D9"}}},{content:'"my_count"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" count ",props:{style:{color:"#C9D1D9"}}},{content:"+ ",props:{style:{color:"#FF7B72"}}},{content:"1",props:{style:{color:"#79C0FF"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"directory-structure-requirements",children:"Directory structure requirements"}),"\n",(0,s.jsxs)(e.p,{children:["By default, Langflow looks for custom components in the ",(0,s.jsx)(e.code,{children:"langflow/components"})," directory."]}),"\n",(0,s.jsxs)(e.p,{children:["If you're creating custom components in a different location using the ",(0,s.jsx)(e.code,{children:"LANGFLOW_COMPONENTS_PATH"})," ",(0,s.jsx)(e.a,{href:"/environment-variables",children:"environment variable"}),", components must be organized in a specific directory structure to be properly loaded and displayed in the UI:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/your/custom/components/path/ # Base directory set by LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 category_name/ # Required category subfolder that determines menu name",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Component file",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(e.p,{children:["Components must be placed inside ",(0,s.jsx)(e.strong,{children:"category folders"}),", not directly in the base directory.\nThe category folder name determines where the component appears in the Langflow ",(0,s.jsx)(e.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsxs)(e.p,{children:["For example, to add a component to the ",(0,s.jsx)(e.strong,{children:"Helpers"})," category, place it in a ",(0,s.jsx)(e.code,{children:"helpers"})," subfolder:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:' \u2514\u2500\u2500 helpers/ # Displayed within the "Helpers" category',props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Your component",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"You can have multiple category folders to organize components into different categories:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/",props:{}}]},{tokens:[{content:" \u251c\u2500\u2500 helpers/",props:{}}]},{tokens:[{content:" \u2502 \u2514\u2500\u2500 helper_component.py",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tools/",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 tool_component.py",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"This folder structure is required for Langflow to properly discover and load your custom components. Components placed directly in the base directory will not be loaded."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"/app/custom_components/ # LANGFLOW_COMPONENTS_PATH",props:{}}]},{tokens:[{content:" \u2514\u2500\u2500 custom_component.py # Won't be loaded - missing category folder!",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"custom-component-inputs-and-outputs",children:"Custom component inputs and outputs"}),"\n",(0,s.jsx)(e.p,{children:"Inputs and outputs define how data flows through the component, how it appears in the UI, and how connections to other components are validated."}),"\n",(0,s.jsx)(e.h3,{id:"inputs",children:"Inputs"}),"\n",(0,s.jsxs)(e.p,{children:["Inputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"inputs"})," list. When Langflow loads the component, it uses this list to render component fields and ",(0,s.jsx)(e.a,{href:"/concepts-components#component-ports",children:"ports"})," in the UI. Users or other components provide values or connections to fill these inputs."]}),"\n",(0,s.jsxs)(e.p,{children:["An input is usually an instance of a class from ",(0,s.jsx)(e.code,{children:"langflow.io"})," (such as ",(0,s.jsx)(e.code,{children:"StrInput"}),", ",(0,s.jsx)(e.code,{children:"DataInput"}),", or ",(0,s.jsx)(e.code,{children:"MessageTextInput"}),"). The most common constructor parameters are:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name, accessed with ",(0,s.jsx)(e.code,{children:"self."}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown to users in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": A tooltip or short description."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"value"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": The default value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"advanced"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),', moves the field into the "Advanced" section.']}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"required"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", forces the user to provide a value."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"is_list"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": If ",(0,s.jsx)(e.code,{children:"True"}),", allows multiple values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"input_types"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Restricts allowed connection types (e.g., ",(0,s.jsx)(e.code,{children:'["Data"]'}),", ",(0,s.jsx)(e.code,{children:'["LanguageModel"]'}),")."]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"Here are the most commonly used input classes and their typical usage."}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Text Inputs"}),": For simple text entries."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"StrInput"})})," creates a single-line text field."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})})," creates a multi-line text area."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Numeric and Boolean Inputs"}),": Ensures users can only enter valid numeric or boolean data."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"BoolInput"})}),", ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"IntInput"})}),", and ",(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FloatInput"})})," provide fields for boolean, integer, and float values, ensuring type consistency."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Dropdowns"}),": For selecting from predefined options, useful for modes or levels."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Secrets"}),": A specialized input for sensitive data, ensuring input is hidden in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"SecretStrInput"})})," for API keys and passwords."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Specialized Data Inputs"}),": Ensures type-checking and color-coded connections in the UI."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Data"})," object (typically with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageInput"})})," expects a ",(0,s.jsx)(e.code,{children:"Message"})," object, used in chat or agent-based flows."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})})," simplifies access to the ",(0,s.jsx)(e.code,{children:".text"})," field of a ",(0,s.jsx)(e.code,{children:"Message"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Handle-Based Inputs"}),": Used to connect outputs of specific types, ensuring correct pipeline connections."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"HandleInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"File Uploads"}),": Allows users to upload files directly through the UI or receive file paths from other components."]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"FileInput"})})}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Lists"}),": Set ",(0,s.jsx)(e.code,{children:"is_list=True"})," to accept multiple values, ideal for batch or grouped operations."]}),"\n",(0,s.jsxs)(e.p,{children:["This example defines three inputs: a text field (",(0,s.jsx)(e.code,{children:"StrInput"}),"), a boolean toggle (",(0,s.jsx)(e.code,{children:"BoolInput"}),"), and a dropdown selection (",(0,s.jsx)(e.code,{children:"DropdownInput"}),")."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" StrInput, BoolInput, DropdownInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"title"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Title"',props:{style:{color:"#A5D6FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" BoolInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enabled"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:"),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}},{content:"name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mode"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Fast"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Experimental"',props:{style:{color:"#A5D6FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:"value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Safe"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"outputs",children:"Outputs"}),"\n",(0,s.jsxs)(e.p,{children:["Outputs are defined in a class-level ",(0,s.jsx)(e.code,{children:"outputs"})," list. When Langflow renders a component, each output becomes a connector point in the UI. When you connect something to an output, Langflow automatically calls the corresponding method and passes the returned object to the next component."]}),"\n",(0,s.jsxs)(e.p,{children:["An output is usually an instance of ",(0,s.jsx)(e.code,{children:"Output"})," from ",(0,s.jsx)(e.code,{children:"langflow.io"}),", with common parameters:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"name"})}),": The internal variable name."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"display_name"})}),": The label shown in the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"method"})}),": The name of the method called to produce the output."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"info"})})," ",(0,s.jsx)(e.em,{children:"(optional)"}),": Help text shown on hover."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["The method must exist in the class, and it is recommended to annotate its return type for better type checking.\nYou can also set a ",(0,s.jsx)(e.code,{children:"self.status"})," message inside the method to show progress or logs."]}),"\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Common Return Types"}),":"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})}),": Structured chat messages."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})}),": Flexible object with ",(0,s.jsx)(e.code,{children:".data"})," and optional ",(0,s.jsx)(e.code,{children:".text"}),"."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})}),": Pandas-based tables (",(0,s.jsx)(e.code,{children:"langflow.schema.DataFrame"}),")."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Primitive types"}),": ",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"})," (not recommended if you need type/color consistency)."]}),"\n"]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the ",(0,s.jsx)(e.code,{children:"DataToDataFrame"})," component defines its output using the outputs list. The ",(0,s.jsx)(e.code,{children:"df_out"})," output is linked to the ",(0,s.jsx)(e.code,{children:"build_df"})," method, so when connected in the UI, Langflow calls this method and passes its returned DataFrame to the next node. This demonstrates how each output maps to a method that generates the actual output data."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.custom ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Component",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, Output",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.schema ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Data, DataFrame",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"DataToDataFrame",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Data to DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Convert multiple Data objects into a DataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"table"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"DataToDataFrame"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Data Items"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"List of Data objects to convert"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" outputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" Output(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"df_out"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"DataFrame Output"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"build_df"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rows ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" item ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".items:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.data.copy() ",props:{style:{color:"#C9D1D9"}}},{content:"if",props:{style:{color:"#FF7B72"}}},{content:" item.data ",props:{style:{color:"#C9D1D9"}}},{content:"else",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" row_dict[",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" item.get_text() ",props:{style:{color:"#C9D1D9"}}},{content:"or ",props:{style:{color:"#FF7B72"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" rows.append(row_dict)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(rows)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Built DataFrame with ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" df",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tool-mode",children:"Tool mode"}),"\n",(0,s.jsxs)(e.p,{children:["You can configure a Custom Component to work as a ",(0,s.jsx)(e.strong,{children:"Tool"})," by setting the parameter ",(0,s.jsx)(e.code,{children:"tool_mode=True"}),". This allows the component to be used in Langflow's Tool Mode workflows, such as by Agent components."]}),"\n",(0,s.jsx)(e.p,{children:"Langflow currently supports the following input types for Tool Mode:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DataFrameInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"PromptInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MessageTextInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"MultilineInput"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"DropdownInput"})}),"\n"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"message"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Mensage"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Enter the message that will be processed directly by the tool"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tool_mode",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h2,{id:"typed-annotations",children:"Typed annotations"}),"\n",(0,s.jsxs)(e.p,{children:["In Langflow, ",(0,s.jsx)(e.strong,{children:"typed annotations"})," allow Langflow to visually guide users and maintain flow consistency."]}),"\n",(0,s.jsx)(e.p,{children:"Typed annotations provide:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Color-coding"}),": Outputs like ",(0,s.jsx)(e.code,{children:"-> Data"})," or ",(0,s.jsx)(e.code,{children:"-> Message"})," get distinct colors."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validation"}),": Langflow blocks incompatible connections automatically."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Readability"}),": Developers can quickly understand data flow."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Development tools"}),": Better code suggestions and error checking in your code editor."]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"common-return-types",children:"Common Return Types"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Message"})})}),"\n",(0,s.jsx)(e.p,{children:"For chat-style outputs."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"produce_message",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Message:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Message(",props:{style:{color:"#C9D1D9"}}},{content:"text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Hello! from typed method!"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"System"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to Message-compatible inputs."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"Data"})})}),"\n",(0,s.jsx)(e.p,{children:"For structured data like dicts or partial texts."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"get_processed_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" processed ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"key1"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"value1"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"key2"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"123",props:{style:{color:"#79C0FF"}}},{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"processed)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only with DataInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:(0,s.jsx)(e.code,{children:"DataFrame"})})}),"\n",(0,s.jsx)(e.p,{children:"For tabular data"}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"build_df",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> DataFrame:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pdf ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}},{content:'"A"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"2",props:{style:{color:"#79C0FF"}}},{content:"], ",props:{style:{color:"#C9D1D9"}}},{content:'"B"',props:{style:{color:"#A5D6FF"}}},{content:": [",props:{style:{color:"#C9D1D9"}}},{content:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:"]})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" DataFrame(pdf)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.p,{children:"In the UI, connects only to DataFrameInput."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsxs)(e.strong,{children:["Primitive Types (",(0,s.jsx)(e.code,{children:"str"}),", ",(0,s.jsx)(e.code,{children:"int"}),", ",(0,s.jsx)(e.code,{children:"bool"}),")"]})}),"\n",(0,s.jsx)(e.p,{children:"Returning primitives is allowed but wrapping in Data or Message is recommended for better UI consistency."}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_sum",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"int",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"sum",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".numbers)",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-typed-annotations",children:"Tips for typed annotations"}),"\n",(0,s.jsx)(e.p,{children:"When using typed annotations, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Always Annotate Outputs"}),": Specify return types like ",(0,s.jsx)(e.code,{children:"-> Data"}),", ",(0,s.jsx)(e.code,{children:"-> Message"}),", or ",(0,s.jsx)(e.code,{children:"-> DataFrame"})," to enable proper UI color-coding and validation."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Wrap Raw Data"}),": Use ",(0,s.jsx)(e.code,{children:"Data"}),", ",(0,s.jsx)(e.code,{children:"Message"}),", or ",(0,s.jsx)(e.code,{children:"DataFrame"})," wrappers instead of returning plain structures."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Primitives Carefully"}),": Direct ",(0,s.jsx)(e.code,{children:"str"})," or ",(0,s.jsx)(e.code,{children:"int"})," returns are fine for simple flows, but wrapping improves flexibility."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Annotate Helpers Too"}),": Even if internal, typing improves maintainability and clarity."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Handle Edge Cases"}),": Prefer returning structured ",(0,s.jsx)(e.code,{children:"Data"})," with error fields when needed."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stay Consistent"}),": Use the same types across your components to make flows predictable and easier to build."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"enable-dynamic-fields",children:"Enable dynamic fields"}),"\n",(0,s.jsxs)(e.p,{children:["In ",(0,s.jsx)(e.strong,{children:"Langflow"}),", dynamic fields allow inputs to change or appear based on user interactions. You can make an input dynamic by setting ",(0,s.jsx)(e.code,{children:"dynamic=True"}),".\nOptionally, setting ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," triggers the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method to adjust the input's visibility or properties in real time, creating a contextual UI that only displays relevant fields based on the user's choices."]}),"\n",(0,s.jsxs)(e.p,{children:["In this example, the operator field triggers updates with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"}),".\nThe ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field is initially hidden and controlled with ",(0,s.jsx)(e.code,{children:"dynamic=True"}),"."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.io ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DropdownInput, StrInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RegexRouter",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"Component",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Regex Router"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Demonstrates dynamic fields for regex input."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DropdownInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Operator"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" options",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"contains"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"equals"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" real_time_refresh",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" StrInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Regex Pattern"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"\"Used if operator='regex'\"",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" dynamic",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" show",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(e.h3,{id:"implement-update_build_config",children:["Implement ",(0,s.jsx)(e.code,{children:"update_build_config"})]}),"\n",(0,s.jsxs)(e.p,{children:["When a field with ",(0,s.jsx)(e.code,{children:"real_time_refresh=True"})," is modified, Langflow calls the ",(0,s.jsx)(e.code,{children:"update_build_config"})," method, passing the updated field name, value, and the component's configuration to dynamically adjust the visibility or properties of other fields based on user input."]}),"\n",(0,s.jsxs)(e.p,{children:["This example will show or hide the ",(0,s.jsx)(e.code,{children:"regex_pattern"})," field when the user selects a different operator."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"update_build_config",props:{style:{color:"#D2A8FF"}}},{content:"(self, build_config: ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:", field_value: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:", field_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}},{content:") -> ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_name ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"operator"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" field_value ",props:{style:{color:"#C9D1D9"}}},{content:"== ",props:{style:{color:"#FF7B72"}}},{content:'"regex"',props:{style:{color:"#A5D6FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" build_config[",props:{style:{color:"#C9D1D9"}}},{content:'"regex_pattern"',props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:'"show"',props:{style:{color:"#A5D6FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"False",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" build_config",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(e.h3,{id:"additional-dynamic-field-controls",children:"Additional Dynamic Field Controls"}),"\n",(0,s.jsxs)(e.p,{children:["You can also modify other properties within ",(0,s.jsx)(e.code,{children:"update_build_config"}),", such as:"]}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"required"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["required"] = True/False'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"advanced"}),": Set ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["advanced"] = True'})]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.code,{children:"options"}),": Modify dynamic dropdown options."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-managing-dynamic-fields",children:"Tips for Managing Dynamic Fields"}),"\n",(0,s.jsx)(e.p,{children:"When working with dynamic fields, consider the following best practices to ensure a smooth user experience:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Minimize field changes"}),": Hide only fields that are truly irrelevant to avoid confusing users."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Test behavior"}),": Ensure that adding or removing fields doesn't accidentally erase user input."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Preserve data"}),": Use ",(0,s.jsx)(e.code,{children:'build_config["some_field"]["show"] = False'})," to hide fields without losing their values."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Clarify logic"}),": Add ",(0,s.jsx)(e.code,{children:"info"})," notes to explain why fields appear or disappear based on conditions."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep it manageable"}),": If the dynamic logic becomes too complex, consider breaking it into smaller components, unless it serves a clear purpose in a single node."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"error-handling-and-logging",children:"Error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"In Langflow, robust error handling ensures that your components behave predictably, even when unexpected situations occur, such as invalid inputs, external API failures, or internal logic errors."}),"\n",(0,s.jsx)(e.h3,{id:"error-handling-techniques",children:"Error handling techniques"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Raise Exceptions"}),":\nIf a critical error occurs, you can raise standard Python exceptions such as ",(0,s.jsx)(e.code,{children:"ValueError"}),", or specialized exceptions like ",(0,s.jsx)(e.code,{children:"ToolException"}),". Langflow will automatically catch these and display appropriate error messages in the UI, helping users quickly identify what went wrong.","\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"compute_result",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".user_input:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" raise ",props:{style:{color:"#FF7B72"}}},{content:"ValueError",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'"No input provided."',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return Structured Error Data"}),':\nInstead of stopping a flow abruptly, you can return a Data object containing an "error" field. This approach allows the flow to continue operating and enables downstream components to detect and handle the error gracefully.',"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"run_model",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" except ",props:{style:{color:"#FF7B72"}}},{content:"Exception ",props:{style:{color:"#79C0FF"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" e:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"(e)})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"improve-debugging-and-flow-management",children:"Improve debugging and flow management"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Use ",(0,s.jsx)(e.code,{children:"self.status"})]}),":\nEach component has a status field where you can store short messages about the execution result\u2014such as success summaries, partial progress, or error notifications. These appear directly in the UI, making troubleshooting easier for users."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"parse_data",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".status ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"Parsed ',props:{style:{color:"#A5D6FF"}}},{content:"{len",props:{style:{color:"#79C0FF"}}},{content:"(rows)",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:' rows successfully."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"rows"',props:{style:{color:"#A5D6FF"}}},{content:": rows})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsxs)(e.strong,{children:["Stop specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})]}),":\nYou can halt individual output paths when certain conditions fail, without affecting the entire component. This is especially useful when working with components that have multiple output branches."]}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"some_output",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Data:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"if <",props:{style:{color:"#FF7B72"}}},{content:"some condition",props:{style:{color:"#C9D1D9"}}},{content:">",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" self",props:{style:{color:"#79C0FF"}}},{content:".stop(",props:{style:{color:"#C9D1D9"}}},{content:'"some_output"',props:{style:{color:"#A5D6FF"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"# Tells Langflow no data flows",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" Data(",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Condition not met"',props:{style:{color:"#A5D6FF"}}},{content:"})",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsxs)(e.p,{children:[(0,s.jsx)(e.strong,{children:"Log events"}),':\nYou can log key execution details inside components. Logs are displayed in the "Logs" or "Events" section of the component\'s detail view and can be accessed later through the flow\'s debug panel or exported files, providing a clear trace of the component\'s behavior for easier debugging.']}),"\n",(0,s.jsx)(d.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"process_file",props:{style:{color:"#D2A8FF"}}},{content:"(self, file_path: ",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"self",props:{style:{color:"#79C0FF"}}},{content:".log(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Processing file ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"file_path",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ...",props:{style:{color:"#8B949E"}}}]}],lang:"python"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"tips-for-error-handling-and-logging",children:"Tips for error handling and logging"}),"\n",(0,s.jsx)(e.p,{children:"To build more reliable components, consider the following best practices:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Validate inputs early"}),": Catch missing or invalid inputs at the start to prevent broken logic."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsxs)(e.strong,{children:["Summarize with ",(0,s.jsx)(e.code,{children:"self.status"})]}),": Use short success or error summaries to help users understand results quickly."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Keep logs concise"}),": Focus on meaningful messages to avoid cluttering the UI."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Return structured errors"}),": When appropriate, return ",(0,s.jsx)(e.code,{children:'Data(data={"error": ...})'})," instead of raising exceptions to allow downstream handling."]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Stop outputs selectively"}),": Only halt specific outputs with ",(0,s.jsx)(e.code,{children:"self.stop(...)"})," if necessary, to preserve correct flow behavior elsewhere."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"contribute-custom-components-to-langflow",children:"Contribute custom components to Langflow"}),"\n",(0,s.jsxs)(e.p,{children:["See ",(0,s.jsx)(e.a,{href:"/contributing-components",children:"How to Contribute"})," to contribute your custom component to Langflow."]})]})}function y(o={}){const{wrapper:e}={...(0,r.R)(),...o.components};return e?(0,s.jsx)(e,{...o,children:(0,s.jsx)(u,{...o})}):u(o)}function F(o,e){throw new Error("Expected "+(e?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.6fca9812.js b/assets/js/22dd74f7.6fca9812.js new file mode 100644 index 0000000000..d726146c66 --- /dev/null +++ b/assets/js/22dd74f7.6fca9812.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":"About Langflow","href":"/about-langflow","docId":"Get-Started/about-langflow","unlisted":false},{"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},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Create a vector RAG chatbot","href":"/chat-with-rag","docId":"Tutorials/chat-with-rag","unlisted":false},{"type":"link","label":"Create a chatbot that can ingest files","href":"/chat-with-files","docId":"Tutorials/chat-with-files","unlisted":false},{"type":"link","label":"Connect applications to agents","href":"/agent-tutorial","docId":"Tutorials/agent","unlisted":false},{"type":"link","label":"Connect to MCP servers from your application","href":"/mcp-tutorial","docId":"Tutorials/mcp-tutorial","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Flows","items":[{"type":"link","label":"Use the visual editor","href":"/concepts-overview","docId":"Concepts/concepts-overview","unlisted":false},{"type":"link","label":"Build flows","href":"/concepts-flows","docId":"Concepts/concepts-flows","unlisted":false},{"type":"category","label":"Flow templates","items":[{"type":"link","label":"Basic prompting","href":"/basic-prompting","docId":"Templates/basic-prompting","unlisted":false},{"type":"link","label":"Simple agent","href":"/simple-agent","docId":"Templates/simple-agent","unlisted":false},{"type":"link","label":"Blog writer","href":"/blog-writer","docId":"Templates/blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/document-qa","docId":"Templates/document-qa","unlisted":false},{"type":"link","label":"Memory chatbot","href":"/memory-chatbot","docId":"Templates/memory-chatbot","unlisted":false},{"type":"link","label":"Vector store RAG","href":"/vector-store-rag","docId":"Templates/vector-store-rag","unlisted":false},{"type":"link","label":"Financial report parser","href":"/financial-report-parser","docId":"Templates/financial-report-parser","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/sequential-agent","docId":"Templates/sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/travel-planning-agent","docId":"Templates/travel-planning-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Run flows","items":[{"type":"link","label":"Trigger flows with the Langflow API","href":"/concepts-publish","docId":"Concepts/concepts-publish","unlisted":false},{"type":"link","label":"Trigger flows with webhooks","href":"/webhook","docId":"Develop/webhook","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Test flows","href":"/concepts-playground","docId":"Concepts/concepts-playground","unlisted":false},{"type":"link","label":"Import and export flows","href":"/concepts-flows-import","docId":"Concepts/concepts-flows-import","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Use Langflow agents","href":"/agents","docId":"Agents/agents","unlisted":false},{"type":"link","label":"Configure tools for agents","href":"/agents-tools","docId":"Agents/agents-tools","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Model Context Protocol (MCP)","items":[{"type":"link","label":"Use Langflow as an MCP client","href":"/mcp-client","docId":"Components/mcp-client","unlisted":false},{"type":"link","label":"Use Langflow as an MCP server","href":"/mcp-server","docId":"Concepts/mcp-server","unlisted":false},{"type":"link","label":"Connect an Astra DB MCP server to Langflow","href":"/mcp-component-astra","docId":"Integrations/mcp-component-astra","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Develop","items":[{"type":"link","label":"API keys and authentication","href":"/api-keys-and-authentication","docId":"Configuration/api-keys-and-authentication","unlisted":false},{"type":"link","label":"Install custom dependencies","href":"/install-custom-dependencies","docId":"Develop/install-custom-dependencies","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":"category","label":"Storage and memory","items":[{"type":"link","label":"Manage files","href":"/concepts-file-management","docId":"Concepts/concepts-file-management","unlisted":false},{"type":"link","label":"Manage memory","href":"/memory","docId":"Develop/memory","unlisted":false},{"type":"link","label":"Use Session IDs","href":"/session-id","docId":"Develop/session-id","unlisted":false},{"type":"link","label":"Configure an external PostgreSQL database","href":"/configuration-custom-database","docId":"Configuration/configuration-custom-database","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Observability","items":[{"type":"link","label":"Logs","href":"/logging","docId":"Develop/logging","unlisted":false},{"type":"category","label":"Monitoring","items":[{"type":"link","label":"Arize","href":"/integrations-arize","docId":"Integrations/Arize/integrations-arize","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":"link","label":"Opik","href":"/integrations-opik","docId":"Integrations/integrations-opik","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Use Langflow data types","href":"/data-types","docId":"Concepts/data-types","unlisted":false},{"type":"link","label":"Use voice mode","href":"/concepts-voice-mode","docId":"Concepts/concepts-voice-mode","unlisted":false},{"type":"link","label":"Use the Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Deploy","items":[{"type":"link","label":"Langflow deployment overview","href":"/deployment-overview","docId":"Deployment/deployment-overview","unlisted":false},{"type":"link","label":"Deploy a public Langflow server","href":"/deployment-public-server","docId":"Deployment/deployment-public-server","unlisted":false},{"type":"category","label":"Containerized deployments","items":[{"type":"link","label":"Containerize a Langflow application","href":"/develop-application","docId":"Develop/develop-application","unlisted":false},{"type":"link","label":"Langflow Docker images","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"link","label":"Deploy Langflow on a remote server","href":"/deployment-caddyfile","docId":"Deployment/deployment-caddyfile","unlisted":false},{"type":"category","label":"Kubernetes","items":[{"type":"link","label":"Langflow architecture and best practices","href":"/deployment-prod-best-practices","docId":"Deployment/deployment-prod-best-practices","unlisted":false},{"type":"link","label":"Deploy in development","href":"/deployment-kubernetes-dev","docId":"Deployment/deployment-kubernetes-dev","unlisted":false},{"type":"link","label":"Deploy in production","href":"/deployment-kubernetes-prod","docId":"Deployment/deployment-kubernetes-prod","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Cloud platforms","items":[{"type":"link","label":"Google Cloud Platform","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"Hugging Face Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","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":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Components reference","items":[{"type":"link","label":"Components overview","href":"/concepts-components","docId":"Concepts/concepts-components","unlisted":false},{"type":"category","label":"Core components","items":[{"type":"link","label":"Input / Output","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"category","label":"Models","items":[{"type":"link","label":"Language Model","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Embedding Model","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Vector Stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false},{"type":"category","label":"Processing","items":[{"type":"link","label":"Processing components","href":"/components-processing","docId":"Components/components-processing","unlisted":false},{"type":"link","label":"Prompt Template","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Tools","href":"/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Memories","href":"/components-memories","docId":"Components/components-memories","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bundles","items":[{"type":"link","label":"About bundles","href":"/components-bundle-components","docId":"Components/components-bundles","unlisted":false},{"type":"link","label":"AI/ML API","href":"/bundles-aiml","docId":"Components/bundles-aiml","unlisted":false},{"type":"link","label":"Amazon","href":"/bundles-amazon","docId":"Components/bundles-amazon","unlisted":false},{"type":"link","label":"Anthropic","href":"/bundles-anthropic","docId":"Components/bundles-anthropic","unlisted":false},{"type":"link","label":"Apify","href":"/integrations-apify","docId":"Integrations/Apify/integrations-apify","unlisted":false},{"type":"link","label":"arXiv","href":"/bundles-arxiv","docId":"Components/bundles-arxiv","unlisted":false},{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Azure","href":"/bundles-azure","docId":"Components/bundles-azure","unlisted":false},{"type":"link","label":"Baidu","href":"/bundles-baidu","docId":"Components/bundles-baidu","unlisted":false},{"type":"link","label":"Bing","href":"/bundles-bing","docId":"Components/bundles-bing","unlisted":false},{"type":"link","label":"Cleanlab","href":"/integrations-cleanlab","docId":"Integrations/Cleanlab/integrations-cleanlab","unlisted":false},{"type":"link","label":"Cloudflare","href":"/bundles-cloudflare","docId":"Components/bundles-cloudflare","unlisted":false},{"type":"link","label":"Cohere","href":"/bundles-cohere","docId":"Components/bundles-cohere","unlisted":false},{"type":"link","label":"Composio","href":"/integrations-composio","docId":"Integrations/Composio/integrations-composio","unlisted":false},{"type":"link","label":"DataStax","href":"/bundles-datastax","docId":"Components/bundles-datastax","unlisted":false},{"type":"link","label":"DeepSeek","href":"/bundles-deepseek","docId":"Components/bundles-deepseek","unlisted":false},{"type":"link","label":"Docling","href":"/integrations-docling","docId":"Integrations/Docling/integrations-docling","unlisted":false},{"type":"link","label":"DuckDuckGo","href":"/bundles-duckduckgo","docId":"Components/bundles-duckduckgo","unlisted":false},{"type":"link","label":"Exa","href":"/bundles-exa","docId":"Components/bundles-exa","unlisted":false},{"type":"link","label":"Glean","href":"/bundles-glean","docId":"Components/bundles-glean","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Google components","href":"/bundles-google","docId":"Components/bundles-google","unlisted":false},{"type":"link","label":"Google BigQuery","href":"/integrations-google-big-query","docId":"Integrations/Google/integrations-google-big-query","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Groq","href":"/bundles-groq","docId":"Components/bundles-groq","unlisted":false},{"type":"link","label":"Hugging Face","href":"/bundles-huggingface","docId":"Components/bundles-huggingface","unlisted":false},{"type":"link","label":"IBM","href":"/bundles-ibm","docId":"Components/bundles-ibm","unlisted":false},{"type":"link","label":"Icosa Computing","href":"/bundles-icosacomputing","docId":"Components/bundles-icosacomputing","unlisted":false},{"type":"link","label":"LangChain","href":"/bundles-langchain","docId":"Components/bundles-langchain","unlisted":false},{"type":"link","label":"LM Studio","href":"/bundles-lmstudio","docId":"Components/bundles-lmstudio","unlisted":false},{"type":"link","label":"MariTalk","href":"/bundles-maritalk","docId":"Components/bundles-maritalk","unlisted":false},{"type":"link","label":"Mem0","href":"/bundles-mem0","docId":"Components/bundles-mem0","unlisted":false},{"type":"link","label":"MistralAI","href":"/bundles-mistralai","docId":"Components/bundles-mistralai","unlisted":false},{"type":"category","label":"Notion","items":[{"type":"link","label":"Set up a Notion App","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":true,"collapsible":true},{"type":"link","label":"Novita","href":"/bundles-novita","docId":"Components/bundles-novita","unlisted":false},{"type":"category","label":"NVIDIA","items":[{"type":"link","label":"NVIDIA components","href":"/bundles-nvidia","docId":"Components/bundles-nvidia","unlisted":false},{"type":"link","label":"NVIDIA Ingest","href":"/integrations-nvidia-ingest","docId":"Integrations/Nvidia/integrations-nvidia-ingest","unlisted":false},{"type":"link","label":"NVIDIA NIM on WSL2","href":"/integrations-nvidia-ingest-wsl2","docId":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","unlisted":false},{"type":"link","label":"NVIDIA G-Assist","href":"/integrations-nvidia-g-assist","docId":"Integrations/Nvidia/integrations-nvidia-g-assist","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Ollama","href":"/bundles-ollama","docId":"Components/bundles-ollama","unlisted":false},{"type":"link","label":"OpenAI","href":"/bundles-openai","docId":"Components/bundles-openai","unlisted":false},{"type":"link","label":"OpenRouter","href":"/bundles-openrouter","docId":"Components/bundles-openrouter","unlisted":false},{"type":"link","label":"Perplexity","href":"/bundles-perplexity","docId":"Components/bundles-perplexity","unlisted":false},{"type":"link","label":"Redis","href":"/bundles-redis","docId":"Components/bundles-redis","unlisted":false},{"type":"link","label":"SambaNova","href":"/bundles-sambanova","docId":"Components/bundles-sambanova","unlisted":false},{"type":"link","label":"SearchApi","href":"/bundles-searchapi","docId":"Components/bundles-searchapi","unlisted":false},{"type":"link","label":"Vertex AI","href":"/bundles-vertexai","docId":"Components/bundles-vertexai","unlisted":false},{"type":"link","label":"Wikipedia","href":"/bundles-wikipedia","docId":"Components/bundles-wikipedia","unlisted":false},{"type":"link","label":"xAI","href":"/bundles-xai","docId":"Components/bundles-xai","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Create custom Python components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"API reference","items":[{"type":"link","label":"Get started with the Langflow API","href":"/api-reference-api-examples","docId":"API-Reference/api-reference-api-examples","unlisted":false},{"type":"link","label":"Use the TypeScript client","href":"/typescript-client","docId":"Develop/Clients/typescript-client","unlisted":false},{"type":"link","label":"Flow trigger endpoints","href":"/api-flows-run","docId":"API-Reference/api-flows-run","unlisted":false},{"type":"link","label":"Flow management endpoints","href":"/api-flows","docId":"API-Reference/api-flows","unlisted":false},{"type":"link","label":"Files endpoints","href":"/api-files","docId":"API-Reference/api-files","unlisted":false},{"type":"link","label":"Projects endpoints","href":"/api-projects","docId":"API-Reference/api-projects","unlisted":false},{"type":"link","label":"Logs endpoints","href":"/api-logs","docId":"API-Reference/api-logs","unlisted":false},{"type":"link","label":"Monitor endpoints","href":"/api-monitor","docId":"API-Reference/api-monitor","unlisted":false},{"type":"link","label":"Build endpoints","href":"/api-build","docId":"API-Reference/api-build","unlisted":false},{"type":"link","label":"Users endpoints","href":"/api-users","docId":"API-Reference/api-users","unlisted":false},{"type":"link","label":"Langflow API specification","href":"/api"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contribute","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Contribute component tests","href":"/contributing-component-tests","docId":"Contributing/contributing-component-tests","unlisted":false},{"type":"link","label":"Contribute templates","href":"/contributing-templates","docId":"Contributing/contributing-templates","unlisted":false},{"type":"link","label":"Contribute bundles","href":"/contributing-bundles","docId":"Contributing/contributing-bundles","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Release notes","items":[{"type":"link","label":"Release notes","href":"/release-notes","docId":"Support/release-notes","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Support","items":[{"type":"link","label":"Troubleshoot","href":"/troubleshoot","docId":"Support/troubleshooting","unlisted":false},{"type":"link","label":"Get help and request enhancements","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Enterprise support","href":"/luna-for-langflow","docId":"Support/luna-for-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"html","className":"sidebar-ad","value":"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n Get started in minutes\\n Download Langflow Desktop\\n
\\n
\\n "}]},"docs":{"Agents/agents":{"id":"Agents/agents","title":"Use Langflow agents","description":"Langflow\'s Agent component is critical for building agentic flows.","sidebar":"docs"},"Agents/agents-tools":{"id":"Agents/agents-tools","title":"Configure tools for agents","description":"Configure tools connected to agents to extend their capabilities.","sidebar":"docs"},"API-Reference/api-build":{"id":"API-Reference/api-build","title":"Build endpoints","description":"The /build endpoints are used by Langflow\'s frontend Workspace and Playground code.","sidebar":"docs"},"API-Reference/api-files":{"id":"API-Reference/api-files","title":"Files endpoints","description":"Use the /files endpoints to move files between your local machine and Langflow.","sidebar":"docs"},"API-Reference/api-flows":{"id":"API-Reference/api-flows","title":"Flow management endpoints","description":"Use the /flows endpoint to create, read, update, and delete flows.","sidebar":"docs"},"API-Reference/api-flows-run":{"id":"API-Reference/api-flows-run","title":"Flow trigger endpoints","description":"Use the /run and /webhook endpoints to run flows.","sidebar":"docs"},"API-Reference/api-logs":{"id":"API-Reference/api-logs","title":"Logs endpoints","description":"Retrieve logs for your Langflow flow.","sidebar":"docs"},"API-Reference/api-monitor":{"id":"API-Reference/api-monitor","title":"Monitor endpoints","description":"Use the /monitor endpoint to monitor and modify messages passed between Langflow components, vertex builds, and transactions.","sidebar":"docs"},"API-Reference/api-projects":{"id":"API-Reference/api-projects","title":"Projects endpoints","description":"Use the /projects endpoint to create, read, update, and delete Langflow projects.","sidebar":"docs"},"API-Reference/api-reference-api-examples":{"id":"API-Reference/api-reference-api-examples","title":"Get started with the Langflow API","description":"You can use the Langflow API for programmatic interactions with Langflow, such as the following:","sidebar":"docs"},"API-Reference/api-users":{"id":"API-Reference/api-users","title":"Users endpoints","description":"Use the /users endpoint to manage user accounts in Langflow.","sidebar":"docs"},"Components/bundles-aiml":{"id":"Components/bundles-aiml","title":"AI/ML API","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-amazon":{"id":"Components/bundles-amazon","title":"Amazon","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-anthropic":{"id":"Components/bundles-anthropic","title":"Anthropic","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-arxiv":{"id":"Components/bundles-arxiv","title":"arXiv","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-azure":{"id":"Components/bundles-azure","title":"Azure","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-baidu":{"id":"Components/bundles-baidu","title":"Baidu","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-bing":{"id":"Components/bundles-bing","title":"Bing","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-cloudflare":{"id":"Components/bundles-cloudflare","title":"Cloudflare","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-cohere":{"id":"Components/bundles-cohere","title":"Cohere","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-datastax":{"id":"Components/bundles-datastax","title":"DataStax","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-deepseek":{"id":"Components/bundles-deepseek","title":"DeepSeek","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-duckduckgo":{"id":"Components/bundles-duckduckgo","title":"DuckDuckGo","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-exa":{"id":"Components/bundles-exa","title":"Exa","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-glean":{"id":"Components/bundles-glean","title":"Glean","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-google":{"id":"Components/bundles-google","title":"Google components","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-groq":{"id":"Components/bundles-groq","title":"Groq","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-huggingface":{"id":"Components/bundles-huggingface","title":"Hugging Face","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-ibm":{"id":"Components/bundles-ibm","title":"IBM","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-icosacomputing":{"id":"Components/bundles-icosacomputing","title":"Icosa Computing","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-langchain":{"id":"Components/bundles-langchain","title":"LangChain","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-lmstudio":{"id":"Components/bundles-lmstudio","title":"LM Studio","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-maritalk":{"id":"Components/bundles-maritalk","title":"MariTalk","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-mem0":{"id":"Components/bundles-mem0","title":"Mem0","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-mistralai":{"id":"Components/bundles-mistralai","title":"MistralAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-novita":{"id":"Components/bundles-novita","title":"Novita","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-nvidia":{"id":"Components/bundles-nvidia","title":"NVIDIA components","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-ollama":{"id":"Components/bundles-ollama","title":"Ollama","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-openai":{"id":"Components/bundles-openai","title":"OpenAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-openrouter":{"id":"Components/bundles-openrouter","title":"OpenRouter","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-perplexity":{"id":"Components/bundles-perplexity","title":"Perplexity","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-redis":{"id":"Components/bundles-redis","title":"Redis","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-sambanova":{"id":"Components/bundles-sambanova","title":"SambaNova","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-searchapi":{"id":"Components/bundles-searchapi","title":"SearchApi","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-vertexai":{"id":"Components/bundles-vertexai","title":"Vertex AI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-wikipedia":{"id":"Components/bundles-wikipedia","title":"Wikipedia","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-xai":{"id":"Components/bundles-xai","title":"xAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Langflow\'s Agent and MCP Tools components are critical for building agentic flows.","sidebar":"docs"},"Components/components-bundles":{"id":"Components/components-bundles","title":"About bundles","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"You can use Langflow\'s Data components to bring data into your flows from various sources like files, API endpoints, and URLs.","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embedding Model","description":"Embedding model components in Langflow generate text embeddings using a specified Large Language Model (LLM).","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data and perform simple tasks in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Input / Output","description":"Langflow\'s input and output components define where data enters and exits your flow, but they don\'t have identical functionality.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Langflow\'s logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"In Langflow version 1.5, the Memory category was removed.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Language Model","description":"Language model components in Langflow generate text using a specified Large Language Model (LLM).","sidebar":"docs"},"Components/components-processing":{"id":"Components/components-processing","title":"Processing components","description":"Langflow\'s processing components process and transform data within a flow.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompt Template","description":"Use the Prompt Template core component to create a prompt that supplies instructions and context to an LLM or agent, separate from other input like chat messages and file uploads.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"In Langflow version 1.5, the Tools category was deprecated.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector Stores","description":"Langflow\'s vector store components connect to your vector databases or create in-memory vector stores for storing and retrieving vector data in flows.","sidebar":"docs"},"Components/mcp-client":{"id":"Components/mcp-client","title":"Use Langflow as an MCP client","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Concepts/concepts-components":{"id":"Concepts/concepts-components","title":"Components overview","description":"Components are the building blocks of your flows.","sidebar":"docs"},"Concepts/concepts-file-management":{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Each Langflow server has a file management system where you can store files that you want to use in your flows.","sidebar":"docs"},"Concepts/concepts-flows":{"id":"Concepts/concepts-flows","title":"Build flows","description":"A flow is a functional representation of an application workflow.","sidebar":"docs"},"Concepts/concepts-flows-import":{"id":"Concepts/concepts-flows-import","title":"Import and export flows","description":"You can export flows to transfer them between Langflow instances, share them with others, or create backups.","sidebar":"docs"},"Concepts/concepts-overview":{"id":"Concepts/concepts-overview","title":"Use the visual editor","description":"You use Langflow\'s visual editor to create, test, and share flows, which are functional representations of application workflows.","sidebar":"docs"},"Concepts/concepts-playground":{"id":"Concepts/concepts-playground","title":"Test flows in the Playground","description":"Langflow\'s Playground is a dynamic interface you can use to test your LLM-based flows in real-time.","sidebar":"docs"},"Concepts/concepts-publish":{"id":"Concepts/concepts-publish","title":"Trigger flows with the Langflow API","description":"After you build a flow, you probably want to run it within an application, such as a chatbot within a mobile app or website.","sidebar":"docs"},"Concepts/concepts-voice-mode":{"id":"Concepts/concepts-voice-mode","title":"Use voice mode","description":"You can use Langflow\'s voice mode to interact with your flows verbally through a microphone and speakers.","sidebar":"docs"},"Concepts/data-types":{"id":"Concepts/data-types","title":"Langflow data types","description":"Langflow components are designed to accept and produce specific types of inputs and outputs.","sidebar":"docs"},"Concepts/mcp-server":{"id":"Concepts/mcp-server","title":"Use Langflow as an MCP server","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Configuration/api-keys-and-authentication":{"id":"Configuration/api-keys-and-authentication","title":"API keys and authentication","description":"Never expose Langflow ports directly to the internet without proper security measures.","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.","sidebar":"docs"},"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/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow uses environment variables to configure certain settings.","sidebar":"docs"},"Contributing/contributing-bundles":{"id":"Contributing/contributing-bundles","title":"Contribute bundles","description":"Follow these steps to add new component bundles to the Langflow sidebar.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"There are several ways you can interact with the Langflow community and learn more about the Langflow codebase.","sidebar":"docs"},"Contributing/contributing-component-tests":{"id":"Contributing/contributing-component-tests","title":"Contribute component tests","description":"This guide outlines how to structure and implement tests for application components to ensure consistency and adequate coverage.","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the Component class.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Get help and request enhancements","description":"The Langflow GitHub repository is an integral part of the Langflow community.","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"},"Contributing/contributing-templates":{"id":"Contributing/contributing-templates","title":"Contribute templates","description":"Follow these best practices when submitting a template to Langflow.","sidebar":"docs"},"Deployment/deployment-caddyfile":{"id":"Deployment/deployment-caddyfile","title":"Deploy Langflow on a remote server","description":"Learn how to deploy Langflow on your own remote server with secure web access.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates how to deploy Langflow on Google Cloud Platform with a Cloud Shell script that walks through the process of setting up a Debian-based VM with the Langflow package, Nginx, and the necessary configurations to run the Langflow development environment in GCP.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on Hugging Face Spaces","description":"This guide explains how to deploy Langflow on Hugging Face Spaces.","sidebar":"docs"},"Deployment/deployment-kubernetes-dev":{"id":"Deployment/deployment-kubernetes-dev","title":"Deploy the Langflow development environment on Kubernetes","description":"The Langflow Integrated Development Environment (IDE) Helm chart is designed to provide a complete environment for developers to create, test, and debug their flows. It includes both the API and the UI.","sidebar":"docs"},"Deployment/deployment-kubernetes-prod":{"id":"Deployment/deployment-kubernetes-prod","title":"Deploy the Langflow production environment on Kubernetes","description":"The Langflow Runtime chart is tailored for deploying applications in a production environment. It is focused on stability, performance, isolation, and security to ensure that applications run reliably and efficiently.","sidebar":"docs"},"Deployment/deployment-overview":{"id":"Deployment/deployment-overview","title":"Langflow deployment overview","description":"This section includes the different ways to bring your locally-built flows to the world.","sidebar":"docs"},"Deployment/deployment-prod-best-practices":{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"Langflow can be deployed in two distinct environments.","sidebar":"docs"},"Deployment/deployment-public-server":{"id":"Deployment/deployment-public-server","title":"Deploy a public Langflow server","description":"By default, your Langflow server at http7860 isn\'t exposed to the public internet.","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"Deploy Langflow to Railway using a one-click template","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","sidebar":"docs"},"Develop/Clients/typescript-client":{"id":"Develop/Clients/typescript-client","title":"Langflow TypeScript client","description":"The Langflow TypeScript client allows your TypeScript applications to programmatically interact with the Langflow API.","sidebar":"docs"},"Develop/develop-application":{"id":"Develop/develop-application","title":"Containerize a Langflow application","description":"Designing flows in the visual editor is only the first step in building an application that uses Langflow.","sidebar":"docs"},"Develop/install-custom-dependencies":{"id":"Develop/install-custom-dependencies","title":"Install custom dependencies","description":"Langflow provides optional dependency groups and support for custom dependencies to extend Langflow functionality.","sidebar":"docs"},"Develop/logging":{"id":"Develop/logging","title":"Logs","description":"This page provides information about Langflow logs, including logs for individual flows and the Langflow application itself.","sidebar":"docs"},"Develop/memory":{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.","sidebar":"docs"},"Develop/session-id":{"id":"Develop/session-id","title":"Use session ID to manage communication between components","description":"Session ID is a unique identifier for client/server connections. A single session equals the duration of a client\'s connection to a server.","sidebar":"docs"},"Develop/webhook":{"id":"Develop/webhook","title":"Trigger flows with webhooks","description":"You can use the Webhook component to start a flow run in response to an external event.","sidebar":"docs"},"Get-Started/about-langflow":{"id":"Get-Started/about-langflow","title":"What is Langflow?","description":"Langflow is an open-source, Python-based, customizable framework for building AI applications.","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"Langflow can be installed in multiple ways:","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Get started with Langflow by loading a template flow, running it, and then serving it at the /run API endpoint.","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow empowers developers to rapidly prototype and build AI applications with a user-friendly visual interface and support for important AI functionality like agents and the MCP.","sidebar":"docs"},"Integrations/Apify/integrations-apify":{"id":"Integrations/Apify/integrations-apify","title":"Apify","description":"Apify is a web scraping and data extraction platform with more than 3,000 ready-made cloud tools called Actors.","sidebar":"docs"},"Integrations/Arize/integrations-arize":{"id":"Integrations/Arize/integrations-arize","title":"Arize","description":"Arize is a tool built on OpenTelemetry and OpenInference for monitoring and optimizing LLM applications.","sidebar":"docs"},"Integrations/Cleanlab/integrations-cleanlab":{"id":"Integrations/Cleanlab/integrations-cleanlab","title":"Cleanlab","description":"Cleanlab adds automation and trust to every data point going in and every prediction coming out of AI and RAG solutions.","sidebar":"docs"},"Integrations/Composio/integrations-composio":{"id":"Integrations/Composio/integrations-composio","title":"Composio","description":"Composio components in Langflow provide Composio tools to your Agent components.","sidebar":"docs"},"Integrations/Docling/integrations-docling":{"id":"Integrations/Docling/integrations-docling","title":"Docling","description":"Langflow integrates with Docling through a bundle of components for parsing documents.","sidebar":"docs"},"Integrations/Google/integrations-google-big-query":{"id":"Integrations/Google/integrations-google-big-query","title":"Google BigQuery","description":"Langflow integrates with Google BigQuery through the BigQuery component in the Google bundle, allowing you to execute SQL queries and retrieve data from your BigQuery datasets.","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 open-source platform for LLM observability. It provides tracing and monitoring capabilities for AI applications, helping developers debug, analyze, and optimize their AI systems. Langfuse integrates with various tools and frameworks, including workflow builders and runtimes like Langflow.","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, add your LangChain API key and configuration as Langflow environment variables, and then start Langflow.","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"LangWatch is an all-in-one LLMOps platform for monitoring, observability, analytics, evaluations and alerting for getting user insights and improve your LLM workflows.","sidebar":"docs"},"Integrations/integrations-opik":{"id":"Integrations/integrations-opik","title":"Opik","description":"Opik is an open-source platform designed for evaluating, testing, and monitoring large language model (LLM) applications. Developed by Comet, it aims to facilitate more intuitive collaboration, testing, and monitoring of LLM-based applications.","sidebar":"docs"},"Integrations/mcp-component-astra":{"id":"Integrations/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"This guide demonstrates how to use Langflow as an MCP client by using the MCP Tools component to run a DataStax Astra DB MCP server in an agentic flow.","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Set up a Notion App","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"},"Integrations/Nvidia/integrations-nvidia-g-assist":{"id":"Integrations/Nvidia/integrations-nvidia-g-assist","title":"Integrate NVIDIA G-Assist with Langflow","description":"This component is available only for Langflow users with NVIDIA GPUs on Windows systems.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-ingest":{"id":"Integrations/Nvidia/integrations-nvidia-ingest","title":"Integrate NVIDIA Retriever Extraction with Langflow","description":"The NVIDIA Retriever Extraction component integrates with the NVIDIA nv-ingest microservice for data ingestion, processing, and extraction of text files.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-nim-wsl2":{"id":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","title":"Integrate NVIDIA NIMs with Langflow","description":"Connect Langflow with NVIDIA NIM on an RTX Windows system with Windows Subsystem for Linux 2 (WSL2) installed.","sidebar":"docs"},"Support/luna-for-langflow":{"id":"Support/luna-for-langflow","title":"Enterprise support for Langflow","description":"With Luna for Langflow support, you can develop and deploy Langflow applications with confidence.","sidebar":"docs"},"Support/release-notes":{"id":"Support/release-notes","title":"Langflow release notes","description":"This page summarizes significant changes to Langflow in each release.","sidebar":"docs"},"Support/troubleshooting":{"id":"Support/troubleshooting","title":"Troubleshoot Langflow","description":"This page provides troubleshooting advice for issues you might encounter when using Langflow or contributing to Langflow.","sidebar":"docs"},"Templates/basic-prompting":{"id":"Templates/basic-prompting","title":"Basic prompting","description":"This flow is a starting point for understanding Langflow.","sidebar":"docs"},"Templates/blog-writer":{"id":"Templates/blog-writer","title":"Blog writer","description":"This flow demonstrates adding an additional input to the Prompt component to capture input from the URL and Parser components.","sidebar":"docs"},"Templates/document-qa":{"id":"Templates/document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with document analysis capabilities using a document loaded from local memory.","sidebar":"docs"},"Templates/financial-report-parser":{"id":"Templates/financial-report-parser","title":"Financial report parser","description":"This flow demonstrates how to parse LLM responses into a structured format.","sidebar":"docs"},"Templates/memory-chatbot":{"id":"Templates/memory-chatbot","title":"Memory chatbot","description":"This flow extends the Basic Prompting flow template with a Message History component that stores previous chat messages and uses them to provide context for the current conversation.","sidebar":"docs"},"Templates/sequential-agent":{"id":"Templates/sequential-agent","title":"Sequential tasks agent","description":"This flow demonstrates using multiple Agent components in a single flow.","sidebar":"docs"},"Templates/simple-agent":{"id":"Templates/simple-agent","title":"Simple agent","description":"This flow demonstrates using an Agent in a flow.","sidebar":"docs"},"Templates/travel-planning-agent":{"id":"Templates/travel-planning-agent","title":"Travel planning agent","description":"This flow demonstrates using multiple Agent components in a single flow.","sidebar":"docs"},"Templates/vector-store-rag":{"id":"Templates/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"},"Tutorials/agent":{"id":"Tutorials/agent","title":"Connect applications to agents","description":"This tutorial shows you how to connect a JavaScript application to a Langflow agent.","sidebar":"docs"},"Tutorials/chat-with-files":{"id":"Tutorials/chat-with-files","title":"Create a chatbot that can ingest files","description":"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications.","sidebar":"docs"},"Tutorials/chat-with-rag":{"id":"Tutorials/chat-with-rag","title":"Create a vector RAG chatbot","description":"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data.","sidebar":"docs"},"Tutorials/mcp-tutorial":{"id":"Tutorials/mcp-tutorial","title":"Connect to MCP servers from your application","description":"This tutorial shows you how to connect MCP tools to your applications using Langflow\'s MCP Tools component.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.ec65a843.js b/assets/js/22dd74f7.ec65a843.js deleted file mode 100644 index 4de1854f3c..0000000000 --- a/assets/js/22dd74f7.ec65a843.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":"About Langflow","href":"/about-langflow","docId":"Get-Started/about-langflow","unlisted":false},{"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},{"type":"category","label":"Tutorials","items":[{"type":"link","label":"Create a vector RAG chatbot","href":"/chat-with-rag","docId":"Tutorials/chat-with-rag","unlisted":false},{"type":"link","label":"Create a chatbot that can ingest files","href":"/chat-with-files","docId":"Tutorials/chat-with-files","unlisted":false},{"type":"link","label":"Connect applications to agents","href":"/agent-tutorial","docId":"Tutorials/agent","unlisted":false},{"type":"link","label":"Connect to MCP servers from your application","href":"/mcp-tutorial","docId":"Tutorials/mcp-tutorial","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Flows","items":[{"type":"link","label":"Use the visual editor","href":"/concepts-overview","docId":"Concepts/concepts-overview","unlisted":false},{"type":"link","label":"Build flows","href":"/concepts-flows","docId":"Concepts/concepts-flows","unlisted":false},{"type":"category","label":"Flow templates","items":[{"type":"link","label":"Basic prompting","href":"/basic-prompting","docId":"Templates/basic-prompting","unlisted":false},{"type":"link","label":"Simple agent","href":"/simple-agent","docId":"Templates/simple-agent","unlisted":false},{"type":"link","label":"Blog writer","href":"/blog-writer","docId":"Templates/blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/document-qa","docId":"Templates/document-qa","unlisted":false},{"type":"link","label":"Memory chatbot","href":"/memory-chatbot","docId":"Templates/memory-chatbot","unlisted":false},{"type":"link","label":"Vector store RAG","href":"/vector-store-rag","docId":"Templates/vector-store-rag","unlisted":false},{"type":"link","label":"Financial report parser","href":"/financial-report-parser","docId":"Templates/financial-report-parser","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/sequential-agent","docId":"Templates/sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/travel-planning-agent","docId":"Templates/travel-planning-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Run flows","items":[{"type":"link","label":"Trigger flows with the Langflow API","href":"/concepts-publish","docId":"Concepts/concepts-publish","unlisted":false},{"type":"link","label":"Trigger flows with webhooks","href":"/webhook","docId":"Develop/webhook","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Test flows","href":"/concepts-playground","docId":"Concepts/concepts-playground","unlisted":false},{"type":"link","label":"Import and export flows","href":"/concepts-flows-import","docId":"Concepts/concepts-flows-import","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Use Langflow agents","href":"/agents","docId":"Agents/agents","unlisted":false},{"type":"link","label":"Configure tools for agents","href":"/agents-tools","docId":"Agents/agents-tools","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Model Context Protocol (MCP)","items":[{"type":"link","label":"Use Langflow as an MCP client","href":"/mcp-client","docId":"Components/mcp-client","unlisted":false},{"type":"link","label":"Use Langflow as an MCP server","href":"/mcp-server","docId":"Concepts/mcp-server","unlisted":false},{"type":"link","label":"Connect an Astra DB MCP server to Langflow","href":"/mcp-component-astra","docId":"Integrations/mcp-component-astra","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Develop","items":[{"type":"link","label":"API keys and authentication","href":"/api-keys-and-authentication","docId":"Configuration/api-keys-and-authentication","unlisted":false},{"type":"link","label":"Install custom dependencies","href":"/install-custom-dependencies","docId":"Develop/install-custom-dependencies","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":"category","label":"Storage and memory","items":[{"type":"link","label":"Manage files","href":"/concepts-file-management","docId":"Concepts/concepts-file-management","unlisted":false},{"type":"link","label":"Manage memory","href":"/memory","docId":"Develop/memory","unlisted":false},{"type":"link","label":"Use Session IDs","href":"/session-id","docId":"Develop/session-id","unlisted":false},{"type":"link","label":"Configure an external PostgreSQL database","href":"/configuration-custom-database","docId":"Configuration/configuration-custom-database","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Observability","items":[{"type":"link","label":"Logs","href":"/logging","docId":"Develop/logging","unlisted":false},{"type":"category","label":"Monitoring","items":[{"type":"link","label":"Arize","href":"/integrations-arize","docId":"Integrations/Arize/integrations-arize","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":"link","label":"Opik","href":"/integrations-opik","docId":"Integrations/integrations-opik","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Use Langflow data types","href":"/data-types","docId":"Concepts/data-types","unlisted":false},{"type":"link","label":"Use voice mode","href":"/concepts-voice-mode","docId":"Concepts/concepts-voice-mode","unlisted":false},{"type":"link","label":"Use the Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Deploy","items":[{"type":"link","label":"Langflow deployment overview","href":"/deployment-overview","docId":"Deployment/deployment-overview","unlisted":false},{"type":"link","label":"Deploy a public Langflow server","href":"/deployment-public-server","docId":"Deployment/deployment-public-server","unlisted":false},{"type":"category","label":"Containerized deployments","items":[{"type":"link","label":"Containerize a Langflow application","href":"/develop-application","docId":"Develop/develop-application","unlisted":false},{"type":"link","label":"Langflow Docker images","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"link","label":"Deploy Langflow on a remote server","href":"/deployment-caddyfile","docId":"Deployment/deployment-caddyfile","unlisted":false},{"type":"category","label":"Kubernetes","items":[{"type":"link","label":"Langflow architecture and best practices","href":"/deployment-prod-best-practices","docId":"Deployment/deployment-prod-best-practices","unlisted":false},{"type":"link","label":"Deploy in development","href":"/deployment-kubernetes-dev","docId":"Deployment/deployment-kubernetes-dev","unlisted":false},{"type":"link","label":"Deploy in production","href":"/deployment-kubernetes-prod","docId":"Deployment/deployment-kubernetes-prod","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Google Cloud Platform","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"Hugging Face Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","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":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Components reference","items":[{"type":"link","label":"Components overview","href":"/concepts-components","docId":"Concepts/concepts-components","unlisted":false},{"type":"category","label":"Core components","items":[{"type":"link","label":"Input / Output","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"category","label":"Models","items":[{"type":"link","label":"Language Model","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Embedding Model","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Vector Stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false},{"type":"category","label":"Processing","items":[{"type":"link","label":"Processing components","href":"/components-processing","docId":"Components/components-processing","unlisted":false},{"type":"link","label":"Prompt Template","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Tools","href":"/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Memories","href":"/components-memories","docId":"Components/components-memories","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bundles","items":[{"type":"link","label":"About bundles","href":"/components-bundle-components","docId":"Components/components-bundles","unlisted":false},{"type":"link","label":"AI/ML API","href":"/bundles-aiml","docId":"Components/bundles-aiml","unlisted":false},{"type":"link","label":"Amazon","href":"/bundles-amazon","docId":"Components/bundles-amazon","unlisted":false},{"type":"link","label":"Anthropic","href":"/bundles-anthropic","docId":"Components/bundles-anthropic","unlisted":false},{"type":"link","label":"Apify","href":"/integrations-apify","docId":"Integrations/Apify/integrations-apify","unlisted":false},{"type":"link","label":"arXiv","href":"/bundles-arxiv","docId":"Components/bundles-arxiv","unlisted":false},{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Azure","href":"/bundles-azure","docId":"Components/bundles-azure","unlisted":false},{"type":"link","label":"Baidu","href":"/bundles-baidu","docId":"Components/bundles-baidu","unlisted":false},{"type":"link","label":"Bing","href":"/bundles-bing","docId":"Components/bundles-bing","unlisted":false},{"type":"link","label":"Cleanlab","href":"/integrations-cleanlab","docId":"Integrations/Cleanlab/integrations-cleanlab","unlisted":false},{"type":"link","label":"Cloudflare","href":"/bundles-cloudflare","docId":"Components/bundles-cloudflare","unlisted":false},{"type":"link","label":"Cohere","href":"/bundles-cohere","docId":"Components/bundles-cohere","unlisted":false},{"type":"link","label":"Composio","href":"/integrations-composio","docId":"Integrations/Composio/integrations-composio","unlisted":false},{"type":"link","label":"DataStax","href":"/bundles-datastax","docId":"Components/bundles-datastax","unlisted":false},{"type":"link","label":"DeepSeek","href":"/bundles-deepseek","docId":"Components/bundles-deepseek","unlisted":false},{"type":"link","label":"Docling","href":"/integrations-docling","docId":"Integrations/Docling/integrations-docling","unlisted":false},{"type":"link","label":"DuckDuckGo","href":"/bundles-duckduckgo","docId":"Components/bundles-duckduckgo","unlisted":false},{"type":"link","label":"Exa","href":"/bundles-exa","docId":"Components/bundles-exa","unlisted":false},{"type":"link","label":"Glean","href":"/bundles-glean","docId":"Components/bundles-glean","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Google components","href":"/bundles-google","docId":"Components/bundles-google","unlisted":false},{"type":"link","label":"Google BigQuery","href":"/integrations-google-big-query","docId":"Integrations/Google/integrations-google-big-query","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Groq","href":"/bundles-groq","docId":"Components/bundles-groq","unlisted":false},{"type":"link","label":"Hugging Face","href":"/bundles-huggingface","docId":"Components/bundles-huggingface","unlisted":false},{"type":"link","label":"IBM","href":"/bundles-ibm","docId":"Components/bundles-ibm","unlisted":false},{"type":"link","label":"Icosa Computing","href":"/bundles-icosacomputing","docId":"Components/bundles-icosacomputing","unlisted":false},{"type":"link","label":"LangChain","href":"/bundles-langchain","docId":"Components/bundles-langchain","unlisted":false},{"type":"link","label":"LM Studio","href":"/bundles-lmstudio","docId":"Components/bundles-lmstudio","unlisted":false},{"type":"link","label":"MariTalk","href":"/bundles-maritalk","docId":"Components/bundles-maritalk","unlisted":false},{"type":"link","label":"Mem0","href":"/bundles-mem0","docId":"Components/bundles-mem0","unlisted":false},{"type":"link","label":"MistralAI","href":"/bundles-mistralai","docId":"Components/bundles-mistralai","unlisted":false},{"type":"category","label":"Notion","items":[{"type":"link","label":"Set up a Notion App","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":true,"collapsible":true},{"type":"link","label":"Novita","href":"/bundles-novita","docId":"Components/bundles-novita","unlisted":false},{"type":"category","label":"NVIDIA","items":[{"type":"link","label":"NVIDIA components","href":"/bundles-nvidia","docId":"Components/bundles-nvidia","unlisted":false},{"type":"link","label":"NVIDIA Ingest","href":"/integrations-nvidia-ingest","docId":"Integrations/Nvidia/integrations-nvidia-ingest","unlisted":false},{"type":"link","label":"NVIDIA NIM on WSL2","href":"/integrations-nvidia-ingest-wsl2","docId":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","unlisted":false},{"type":"link","label":"NVIDIA G-Assist","href":"/integrations-nvidia-g-assist","docId":"Integrations/Nvidia/integrations-nvidia-g-assist","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Ollama","href":"/bundles-ollama","docId":"Components/bundles-ollama","unlisted":false},{"type":"link","label":"OpenAI","href":"/bundles-openai","docId":"Components/bundles-openai","unlisted":false},{"type":"link","label":"OpenRouter","href":"/bundles-openrouter","docId":"Components/bundles-openrouter","unlisted":false},{"type":"link","label":"Perplexity","href":"/bundles-perplexity","docId":"Components/bundles-perplexity","unlisted":false},{"type":"link","label":"Redis","href":"/bundles-redis","docId":"Components/bundles-redis","unlisted":false},{"type":"link","label":"SambaNova","href":"/bundles-sambanova","docId":"Components/bundles-sambanova","unlisted":false},{"type":"link","label":"SearchApi","href":"/bundles-searchapi","docId":"Components/bundles-searchapi","unlisted":false},{"type":"link","label":"Vertex AI","href":"/bundles-vertexai","docId":"Components/bundles-vertexai","unlisted":false},{"type":"link","label":"Wikipedia","href":"/bundles-wikipedia","docId":"Components/bundles-wikipedia","unlisted":false},{"type":"link","label":"xAI","href":"/bundles-xai","docId":"Components/bundles-xai","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Create custom Python components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"API reference","items":[{"type":"link","label":"Get started with the Langflow API","href":"/api-reference-api-examples","docId":"API-Reference/api-reference-api-examples","unlisted":false},{"type":"link","label":"Use the TypeScript client","href":"/typescript-client","docId":"Develop/Clients/typescript-client","unlisted":false},{"type":"link","label":"Flow trigger endpoints","href":"/api-flows-run","docId":"API-Reference/api-flows-run","unlisted":false},{"type":"link","label":"Flow management endpoints","href":"/api-flows","docId":"API-Reference/api-flows","unlisted":false},{"type":"link","label":"Files endpoints","href":"/api-files","docId":"API-Reference/api-files","unlisted":false},{"type":"link","label":"Projects endpoints","href":"/api-projects","docId":"API-Reference/api-projects","unlisted":false},{"type":"link","label":"Logs endpoints","href":"/api-logs","docId":"API-Reference/api-logs","unlisted":false},{"type":"link","label":"Monitor endpoints","href":"/api-monitor","docId":"API-Reference/api-monitor","unlisted":false},{"type":"link","label":"Build endpoints","href":"/api-build","docId":"API-Reference/api-build","unlisted":false},{"type":"link","label":"Users endpoints","href":"/api-users","docId":"API-Reference/api-users","unlisted":false},{"type":"link","label":"Langflow API specification","href":"/api"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contribute","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Contribute component tests","href":"/contributing-component-tests","docId":"Contributing/contributing-component-tests","unlisted":false},{"type":"link","label":"Contribute templates","href":"/contributing-templates","docId":"Contributing/contributing-templates","unlisted":false},{"type":"link","label":"Contribute bundles","href":"/contributing-bundles","docId":"Contributing/contributing-bundles","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Release notes","items":[{"type":"link","label":"Release notes","href":"/release-notes","docId":"Support/release-notes","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Support","items":[{"type":"link","label":"Troubleshoot","href":"/troubleshoot","docId":"Support/troubleshooting","unlisted":false},{"type":"link","label":"Get help and request enhancements","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Enterprise support","href":"/luna-for-langflow","docId":"Support/luna-for-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"html","className":"sidebar-ad","value":"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n Get started in minutes\\n Download Langflow Desktop\\n
\\n
\\n "}]},"docs":{"Agents/agents":{"id":"Agents/agents","title":"Use Langflow agents","description":"Langflow\'s Agent component is critical for building agentic flows.","sidebar":"docs"},"Agents/agents-tools":{"id":"Agents/agents-tools","title":"Configure tools for agents","description":"Configure tools connected to agents to extend their capabilities.","sidebar":"docs"},"API-Reference/api-build":{"id":"API-Reference/api-build","title":"Build endpoints","description":"The /build endpoints are used by Langflow\'s frontend Workspace and Playground code.","sidebar":"docs"},"API-Reference/api-files":{"id":"API-Reference/api-files","title":"Files endpoints","description":"Use the /files endpoints to move files between your local machine and Langflow.","sidebar":"docs"},"API-Reference/api-flows":{"id":"API-Reference/api-flows","title":"Flow management endpoints","description":"Use the /flows endpoint to create, read, update, and delete flows.","sidebar":"docs"},"API-Reference/api-flows-run":{"id":"API-Reference/api-flows-run","title":"Flow trigger endpoints","description":"Use the /run and /webhook endpoints to run flows.","sidebar":"docs"},"API-Reference/api-logs":{"id":"API-Reference/api-logs","title":"Logs endpoints","description":"Retrieve logs for your Langflow flow.","sidebar":"docs"},"API-Reference/api-monitor":{"id":"API-Reference/api-monitor","title":"Monitor endpoints","description":"Use the /monitor endpoint to monitor and modify messages passed between Langflow components, vertex builds, and transactions.","sidebar":"docs"},"API-Reference/api-projects":{"id":"API-Reference/api-projects","title":"Projects endpoints","description":"Use the /projects endpoint to create, read, update, and delete Langflow projects.","sidebar":"docs"},"API-Reference/api-reference-api-examples":{"id":"API-Reference/api-reference-api-examples","title":"Get started with the Langflow API","description":"You can use the Langflow API for programmatic interactions with Langflow, such as the following:","sidebar":"docs"},"API-Reference/api-users":{"id":"API-Reference/api-users","title":"Users endpoints","description":"Use the /users endpoint to manage user accounts in Langflow.","sidebar":"docs"},"Components/bundles-aiml":{"id":"Components/bundles-aiml","title":"AI/ML API","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-amazon":{"id":"Components/bundles-amazon","title":"Amazon","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-anthropic":{"id":"Components/bundles-anthropic","title":"Anthropic","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-arxiv":{"id":"Components/bundles-arxiv","title":"arXiv","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-azure":{"id":"Components/bundles-azure","title":"Azure","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-baidu":{"id":"Components/bundles-baidu","title":"Baidu","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-bing":{"id":"Components/bundles-bing","title":"Bing","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-cloudflare":{"id":"Components/bundles-cloudflare","title":"Cloudflare","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-cohere":{"id":"Components/bundles-cohere","title":"Cohere","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-datastax":{"id":"Components/bundles-datastax","title":"DataStax","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-deepseek":{"id":"Components/bundles-deepseek","title":"DeepSeek","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-duckduckgo":{"id":"Components/bundles-duckduckgo","title":"DuckDuckGo","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-exa":{"id":"Components/bundles-exa","title":"Exa","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-glean":{"id":"Components/bundles-glean","title":"Glean","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-google":{"id":"Components/bundles-google","title":"Google components","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-groq":{"id":"Components/bundles-groq","title":"Groq","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-huggingface":{"id":"Components/bundles-huggingface","title":"Hugging Face","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-ibm":{"id":"Components/bundles-ibm","title":"IBM","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-icosacomputing":{"id":"Components/bundles-icosacomputing","title":"Icosa Computing","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-langchain":{"id":"Components/bundles-langchain","title":"LangChain","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-lmstudio":{"id":"Components/bundles-lmstudio","title":"LM Studio","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-maritalk":{"id":"Components/bundles-maritalk","title":"MariTalk","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-mem0":{"id":"Components/bundles-mem0","title":"Mem0","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-mistralai":{"id":"Components/bundles-mistralai","title":"MistralAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-novita":{"id":"Components/bundles-novita","title":"Novita","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-nvidia":{"id":"Components/bundles-nvidia","title":"NVIDIA components","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-ollama":{"id":"Components/bundles-ollama","title":"Ollama","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-openai":{"id":"Components/bundles-openai","title":"OpenAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-openrouter":{"id":"Components/bundles-openrouter","title":"OpenRouter","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-perplexity":{"id":"Components/bundles-perplexity","title":"Perplexity","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-redis":{"id":"Components/bundles-redis","title":"Redis","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-sambanova":{"id":"Components/bundles-sambanova","title":"SambaNova","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-searchapi":{"id":"Components/bundles-searchapi","title":"SearchApi","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-vertexai":{"id":"Components/bundles-vertexai","title":"Vertex AI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-wikipedia":{"id":"Components/bundles-wikipedia","title":"Wikipedia","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/bundles-xai":{"id":"Components/bundles-xai","title":"xAI","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Langflow\'s Agent and MCP Tools components are critical for building agentic flows.","sidebar":"docs"},"Components/components-bundles":{"id":"Components/components-bundles","title":"About bundles","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"You can use Langflow\'s Data components to bring data into your flows from various sources like files, API endpoints, and URLs.","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embedding Model","description":"Embedding model components in Langflow generate text embeddings using a specified Large Language Model (LLM).","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data and perform simple tasks in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Input / Output","description":"Langflow\'s input and output components define where data enters and exits your flow, but they don\'t have identical functionality.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Langflow\'s logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"In Langflow version 1.5, the Memory category was removed.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Language Model","description":"Language model components in Langflow generate text using a specified Large Language Model (LLM).","sidebar":"docs"},"Components/components-processing":{"id":"Components/components-processing","title":"Processing components","description":"Langflow\'s processing components process and transform data within a flow.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompt Template","description":"Use the Prompt Template core component to create a prompt that supplies instructions and context to an LLM or agent, separate from other input like chat messages and file uploads.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"In Langflow version 1.5, the Tools category was deprecated.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector Stores","description":"Langflow\'s vector store components connect to your vector databases or create in-memory vector stores for storing and retrieving vector data in flows.","sidebar":"docs"},"Components/mcp-client":{"id":"Components/mcp-client","title":"Use Langflow as an MCP client","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Concepts/concepts-components":{"id":"Concepts/concepts-components","title":"Components overview","description":"Components are the building blocks of your flows.","sidebar":"docs"},"Concepts/concepts-file-management":{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Each Langflow server has a file management system where you can store files that you want to use in your flows.","sidebar":"docs"},"Concepts/concepts-flows":{"id":"Concepts/concepts-flows","title":"Build flows","description":"A flow is a functional representation of an application workflow.","sidebar":"docs"},"Concepts/concepts-flows-import":{"id":"Concepts/concepts-flows-import","title":"Import and export flows","description":"You can export flows to transfer them between Langflow instances, share them with others, or create backups.","sidebar":"docs"},"Concepts/concepts-overview":{"id":"Concepts/concepts-overview","title":"Use the visual editor","description":"You use Langflow\'s visual editor to create, test, and share flows, which are functional representations of application workflows.","sidebar":"docs"},"Concepts/concepts-playground":{"id":"Concepts/concepts-playground","title":"Test flows in the Playground","description":"Langflow\'s Playground is a dynamic interface you can use to test your LLM-based flows in real-time.","sidebar":"docs"},"Concepts/concepts-publish":{"id":"Concepts/concepts-publish","title":"Trigger flows with the Langflow API","description":"After you build a flow, you probably want to run it within an application, such as a chatbot within a mobile app or website.","sidebar":"docs"},"Concepts/concepts-voice-mode":{"id":"Concepts/concepts-voice-mode","title":"Use voice mode","description":"You can use Langflow\'s voice mode to interact with your flows verbally through a microphone and speakers.","sidebar":"docs"},"Concepts/data-types":{"id":"Concepts/data-types","title":"Langflow data types","description":"Langflow components are designed to accept and produce specific types of inputs and outputs.","sidebar":"docs"},"Concepts/mcp-server":{"id":"Concepts/mcp-server","title":"Use Langflow as an MCP server","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Configuration/api-keys-and-authentication":{"id":"Configuration/api-keys-and-authentication","title":"API keys and authentication","description":"Never expose Langflow ports directly to the internet without proper security measures.","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.","sidebar":"docs"},"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/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow uses environment variables to configure certain settings.","sidebar":"docs"},"Contributing/contributing-bundles":{"id":"Contributing/contributing-bundles","title":"Contribute bundles","description":"Follow these steps to add new component bundles to the Langflow sidebar.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"There are several ways you can interact with the Langflow community and learn more about the Langflow codebase.","sidebar":"docs"},"Contributing/contributing-component-tests":{"id":"Contributing/contributing-component-tests","title":"Contribute component tests","description":"This guide outlines how to structure and implement tests for application components to ensure consistency and adequate coverage.","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the Component class.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Get help and request enhancements","description":"The Langflow GitHub repository is an integral part of the Langflow community.","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"},"Contributing/contributing-templates":{"id":"Contributing/contributing-templates","title":"Contribute templates","description":"Follow these best practices when submitting a template to Langflow.","sidebar":"docs"},"Deployment/deployment-caddyfile":{"id":"Deployment/deployment-caddyfile","title":"Deploy Langflow on a remote server","description":"Learn how to deploy Langflow on your own remote server with secure web access.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"Running applications in Docker containers ensures consistent behavior across different systems and eliminates dependency conflicts.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates deploying Langflow on Google Cloud Platform.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on HuggingFace Spaces","description":"This guide explains how to deploy Langflow on HuggingFace Spaces.","sidebar":"docs"},"Deployment/deployment-kubernetes-dev":{"id":"Deployment/deployment-kubernetes-dev","title":"Deploy the Langflow development environment on Kubernetes","description":"The Langflow Integrated Development Environment (IDE) Helm chart is designed to provide a complete environment for developers to create, test, and debug their flows. It includes both the API and the UI.","sidebar":"docs"},"Deployment/deployment-kubernetes-prod":{"id":"Deployment/deployment-kubernetes-prod","title":"Deploy the Langflow production environment on Kubernetes","description":"The Langflow Runtime chart is tailored for deploying applications in a production environment. It is focused on stability, performance, isolation, and security to ensure that applications run reliably and efficiently.","sidebar":"docs"},"Deployment/deployment-overview":{"id":"Deployment/deployment-overview","title":"Langflow deployment overview","description":"This section includes the different ways to bring your locally-built flows to the world.","sidebar":"docs"},"Deployment/deployment-prod-best-practices":{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"Langflow can be deployed in two distinct environments.","sidebar":"docs"},"Deployment/deployment-public-server":{"id":"Deployment/deployment-public-server","title":"Deploy a public Langflow server","description":"By default, your Langflow server at http7860 isn\'t exposed to the public internet.","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"This guide explains how to deploy Langflow on Railway, a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling.","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","sidebar":"docs"},"Develop/Clients/typescript-client":{"id":"Develop/Clients/typescript-client","title":"Langflow TypeScript client","description":"The Langflow TypeScript client allows your TypeScript applications to programmatically interact with the Langflow API.","sidebar":"docs"},"Develop/develop-application":{"id":"Develop/develop-application","title":"Containerize a Langflow application","description":"Designing flows in the visual editor is only the first step in building an application that uses Langflow.","sidebar":"docs"},"Develop/install-custom-dependencies":{"id":"Develop/install-custom-dependencies","title":"Install custom dependencies","description":"Langflow provides optional dependency groups and support for custom dependencies to extend Langflow functionality.","sidebar":"docs"},"Develop/logging":{"id":"Develop/logging","title":"Logs","description":"This page provides information about Langflow logs, including logs for individual flows and the Langflow application itself.","sidebar":"docs"},"Develop/memory":{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.","sidebar":"docs"},"Develop/session-id":{"id":"Develop/session-id","title":"Use session ID to manage communication between components","description":"Session ID is a unique identifier for client/server connections. A single session equals the duration of a client\'s connection to a server.","sidebar":"docs"},"Develop/webhook":{"id":"Develop/webhook","title":"Trigger flows with webhooks","description":"You can use the Webhook component to start a flow run in response to an external event.","sidebar":"docs"},"Get-Started/about-langflow":{"id":"Get-Started/about-langflow","title":"What is Langflow?","description":"Langflow is an open-source, Python-based, customizable framework for building AI applications.","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"Langflow can be installed in multiple ways:","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Get started with Langflow by loading a template flow, running it, and then serving it at the /run API endpoint.","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow empowers developers to rapidly prototype and build AI applications with a user-friendly visual interface and support for important AI functionality like agents and the MCP.","sidebar":"docs"},"Integrations/Apify/integrations-apify":{"id":"Integrations/Apify/integrations-apify","title":"Apify","description":"Apify is a web scraping and data extraction platform with more than 3,000 ready-made cloud tools called Actors.","sidebar":"docs"},"Integrations/Arize/integrations-arize":{"id":"Integrations/Arize/integrations-arize","title":"Arize","description":"Arize is a tool built on OpenTelemetry and OpenInference for monitoring and optimizing LLM applications.","sidebar":"docs"},"Integrations/Cleanlab/integrations-cleanlab":{"id":"Integrations/Cleanlab/integrations-cleanlab","title":"Cleanlab","description":"Cleanlab adds automation and trust to every data point going in and every prediction coming out of AI and RAG solutions.","sidebar":"docs"},"Integrations/Composio/integrations-composio":{"id":"Integrations/Composio/integrations-composio","title":"Composio","description":"Composio components in Langflow provide Composio tools to your Agent components.","sidebar":"docs"},"Integrations/Docling/integrations-docling":{"id":"Integrations/Docling/integrations-docling","title":"Docling","description":"Langflow integrates with Docling through a bundle of components for parsing documents.","sidebar":"docs"},"Integrations/Google/integrations-google-big-query":{"id":"Integrations/Google/integrations-google-big-query","title":"Google BigQuery","description":"Langflow integrates with Google BigQuery through the BigQuery component in the Google bundle, allowing you to execute SQL queries and retrieve data from your BigQuery datasets.","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 open-source platform for LLM observability. It provides tracing and monitoring capabilities for AI applications, helping developers debug, analyze, and optimize their AI systems. Langfuse integrates with various tools and frameworks, including workflow builders and runtimes like Langflow.","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, add your LangChain API key and configuration as Langflow environment variables, and then start Langflow.","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"LangWatch is an all-in-one LLMOps platform for monitoring, observability, analytics, evaluations and alerting for getting user insights and improve your LLM workflows.","sidebar":"docs"},"Integrations/integrations-opik":{"id":"Integrations/integrations-opik","title":"Opik","description":"Opik is an open-source platform designed for evaluating, testing, and monitoring large language model (LLM) applications. Developed by Comet, it aims to facilitate more intuitive collaboration, testing, and monitoring of LLM-based applications.","sidebar":"docs"},"Integrations/mcp-component-astra":{"id":"Integrations/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"This guide demonstrates how to use Langflow as an MCP client by using the MCP Tools component to run a DataStax Astra DB MCP server in an agentic flow.","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Set up a Notion App","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"},"Integrations/Nvidia/integrations-nvidia-g-assist":{"id":"Integrations/Nvidia/integrations-nvidia-g-assist","title":"Integrate NVIDIA G-Assist with Langflow","description":"This component is available only for Langflow users with NVIDIA GPUs on Windows systems.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-ingest":{"id":"Integrations/Nvidia/integrations-nvidia-ingest","title":"Integrate NVIDIA Retriever Extraction with Langflow","description":"The NVIDIA Retriever Extraction component integrates with the NVIDIA nv-ingest microservice for data ingestion, processing, and extraction of text files.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-nim-wsl2":{"id":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","title":"Integrate NVIDIA NIMs with Langflow","description":"Connect Langflow with NVIDIA NIM on an RTX Windows system with Windows Subsystem for Linux 2 (WSL2) installed.","sidebar":"docs"},"Support/luna-for-langflow":{"id":"Support/luna-for-langflow","title":"Enterprise support for Langflow","description":"With Luna for Langflow support, you can develop and deploy Langflow applications with confidence.","sidebar":"docs"},"Support/release-notes":{"id":"Support/release-notes","title":"Langflow release notes","description":"This page summarizes significant changes to Langflow in each release.","sidebar":"docs"},"Support/troubleshooting":{"id":"Support/troubleshooting","title":"Troubleshoot Langflow","description":"This page provides troubleshooting advice for issues you might encounter when using Langflow or contributing to Langflow.","sidebar":"docs"},"Templates/basic-prompting":{"id":"Templates/basic-prompting","title":"Basic prompting","description":"This flow is a starting point for understanding Langflow.","sidebar":"docs"},"Templates/blog-writer":{"id":"Templates/blog-writer","title":"Blog writer","description":"This flow demonstrates adding an additional input to the Prompt component to capture input from the URL and Parser components.","sidebar":"docs"},"Templates/document-qa":{"id":"Templates/document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with document analysis capabilities using a document loaded from local memory.","sidebar":"docs"},"Templates/financial-report-parser":{"id":"Templates/financial-report-parser","title":"Financial report parser","description":"This flow demonstrates how to parse LLM responses into a structured format.","sidebar":"docs"},"Templates/memory-chatbot":{"id":"Templates/memory-chatbot","title":"Memory chatbot","description":"This flow extends the Basic Prompting flow template with a Message History component that stores previous chat messages and uses them to provide context for the current conversation.","sidebar":"docs"},"Templates/sequential-agent":{"id":"Templates/sequential-agent","title":"Sequential tasks agent","description":"This flow demonstrates using multiple Agent components in a single flow.","sidebar":"docs"},"Templates/simple-agent":{"id":"Templates/simple-agent","title":"Simple agent","description":"This flow demonstrates using an Agent in a flow.","sidebar":"docs"},"Templates/travel-planning-agent":{"id":"Templates/travel-planning-agent","title":"Travel planning agent","description":"This flow demonstrates using multiple Agent components in a single flow.","sidebar":"docs"},"Templates/vector-store-rag":{"id":"Templates/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"},"Tutorials/agent":{"id":"Tutorials/agent","title":"Connect applications to agents","description":"This tutorial shows you how to connect a JavaScript application to a Langflow agent.","sidebar":"docs"},"Tutorials/chat-with-files":{"id":"Tutorials/chat-with-files","title":"Create a chatbot that can ingest files","description":"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications.","sidebar":"docs"},"Tutorials/chat-with-rag":{"id":"Tutorials/chat-with-rag","title":"Create a vector RAG chatbot","description":"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data.","sidebar":"docs"},"Tutorials/mcp-tutorial":{"id":"Tutorials/mcp-tutorial","title":"Connect to MCP servers from your application","description":"This tutorial shows you how to connect MCP tools to your applications using Langflow\'s MCP Tools component.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/2ab0d4f5.ed5746c5.js b/assets/js/2ab0d4f5.7f0b74b8.js similarity index 50% rename from assets/js/2ab0d4f5.ed5746c5.js rename to assets/js/2ab0d4f5.7f0b74b8.js index 87a04f19c8..25b36a6566 100644 --- a/assets/js/2ab0d4f5.ed5746c5.js +++ b/assets/js/2ab0d4f5.7f0b74b8.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Simplified Run Flow","description":{"content":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","type":"text/plain"},"url":{"path":["api","v1","run",":flow_id_or_name"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"key":"stream","value":"false"},{"disabled":false,"key":"user_id","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id_or_name"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"input_value\\": \\"\\",\\n \\"input_type\\": \\"\\",\\n \\"output_type\\": \\"\\",\\n \\"output_component\\": \\"\\",\\n \\"tweaks\\": {\\n \\"in_6\\": \\"\\",\\n \\"nullad\\": \\"\\"\\n },\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/simplified-run-flow","previous":{"title":"Get All","permalink":"/api/get-all"},"next":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"}}');var s=t(74848),r=t(28453);const a={},o="Simplified Run Flow",l=[];function d(e){const n={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"simplified-run-flow",children:"Simplified Run Flow"})}),"\n",(0,s.jsx)(n.p,{children:"Executes a specified flow by ID with support for streaming and telemetry."}),"\n",(0,s.jsx)(n.p,{children:"This endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes."}),"\n",(0,s.jsx)(n.p,{children:"Args:\nbackground_tasks (BackgroundTasks): FastAPI background task manager\nflow (FlowRead | None): The flow to execute, loaded via dependency\ninput_request (SimplifiedAPIRequest | None): Input parameters for the flow\nstream (bool): Whether to stream the response\napi_key_user (UserRead): Authenticated user from API key\nrequest (Request): The incoming HTTP request"}),"\n",(0,s.jsx)(n.p,{children:"Returns:\nUnion[StreamingResponse, RunResponse]: Either a streaming response for real-time results\nor a RunResponse with the complete execution results"}),"\n",(0,s.jsx)(n.p,{children:"Raises:\nHTTPException: For flow not found (404) or invalid input (400)\nAPIException: For internal execution errors (500)"}),"\n",(0,s.jsx)(n.p,{children:"Notes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Supports both streaming and non-streaming execution modes"}),"\n",(0,s.jsx)(n.li,{children:"Tracks execution time and success/failure via telemetry"}),"\n",(0,s.jsx)(n.li,{children:"Handles graceful client disconnection in streaming mode"}),"\n",(0,s.jsx)(n.li,{children:"Provides detailed error handling with appropriate HTTP status codes"}),"\n",(0,s.jsxs)(n.li,{children:["In streaming mode, uses EventManager to handle events:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"add_message": New messages during execution'}),"\n",(0,s.jsx)(n.li,{children:'"token": Individual tokens during streaming'}),"\n",(0,s.jsx)(n.li,{children:'"end": Final execution result'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"flow_id_or_name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Flow Id Or Name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Query Parameters"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"stream"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"user_id"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" User Id"})]})})]})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Request Body "}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"200"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Successful Response"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]})})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"422"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Validation Error"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"detail"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"loc"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"msg"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"type"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Simplified Run Flow","description":{"content":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","type":"text/plain"},"url":{"path":["api","v1","run",":flow_id_or_name"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"key":"stream","value":"false"},{"disabled":false,"key":"user_id","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id_or_name"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"input_value\\": \\"\\",\\n \\"input_type\\": \\"\\",\\n \\"output_type\\": \\"\\",\\n \\"output_component\\": \\"\\",\\n \\"tweaks\\": {\\n \\"laboris3\\": \\"\\"\\n },\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/simplified-run-flow","previous":{"title":"Get All","permalink":"/api/get-all"},"next":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"}}');var s=t(74848),r=t(28453);const a={},o="Simplified Run Flow",l=[];function d(e){const n={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"simplified-run-flow",children:"Simplified Run Flow"})}),"\n",(0,s.jsx)(n.p,{children:"Executes a specified flow by ID with support for streaming and telemetry."}),"\n",(0,s.jsx)(n.p,{children:"This endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes."}),"\n",(0,s.jsx)(n.p,{children:"Args:\nbackground_tasks (BackgroundTasks): FastAPI background task manager\nflow (FlowRead | None): The flow to execute, loaded via dependency\ninput_request (SimplifiedAPIRequest | None): Input parameters for the flow\nstream (bool): Whether to stream the response\napi_key_user (UserRead): Authenticated user from API key\nrequest (Request): The incoming HTTP request"}),"\n",(0,s.jsx)(n.p,{children:"Returns:\nUnion[StreamingResponse, RunResponse]: Either a streaming response for real-time results\nor a RunResponse with the complete execution results"}),"\n",(0,s.jsx)(n.p,{children:"Raises:\nHTTPException: For flow not found (404) or invalid input (400)\nAPIException: For internal execution errors (500)"}),"\n",(0,s.jsx)(n.p,{children:"Notes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Supports both streaming and non-streaming execution modes"}),"\n",(0,s.jsx)(n.li,{children:"Tracks execution time and success/failure via telemetry"}),"\n",(0,s.jsx)(n.li,{children:"Handles graceful client disconnection in streaming mode"}),"\n",(0,s.jsx)(n.li,{children:"Provides detailed error handling with appropriate HTTP status codes"}),"\n",(0,s.jsxs)(n.li,{children:["In streaming mode, uses EventManager to handle events:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"add_message": New messages during execution'}),"\n",(0,s.jsx)(n.li,{children:'"token": Individual tokens during streaming'}),"\n",(0,s.jsx)(n.li,{children:'"end": Final execution result'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"flow_id_or_name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Flow Id Or Name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Query Parameters"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"stream"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"user_id"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" User Id"})]})})]})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Request Body "}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"200"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Successful Response"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]})})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"422"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Validation Error"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"detail"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"loc"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"msg"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"type"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/assets/js/2fed9fb3.61ef4fb2.js b/assets/js/2fed9fb3.61ef4fb2.js new file mode 100644 index 0000000000..935329e094 --- /dev/null +++ b/assets/js/2fed9fb3.61ef4fb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[6108],{9080:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"Langflow can be deployed in two distinct environments.","source":"@site/docs/Deployment/deployment-prod-best-practices.mdx","sourceDirName":"Deployment","slug":"/deployment-prod-best-practices","permalink":"/deployment-prod-best-practices","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Langflow architecture and best practices on Kubernetes","slug":"/deployment-prod-best-practices"},"sidebar":"docs","previous":{"title":"Deploy Langflow on a remote server","permalink":"/deployment-caddyfile"},"next":{"title":"Deploy in development","permalink":"/deployment-kubernetes-dev"}}');var o=t(74848),s=t(28453);t(11470),t(19365);const a={title:"Langflow architecture and best practices on Kubernetes",slug:"/deployment-prod-best-practices"},l=void 0,i={},c=[{value:"Langflow deployment",id:"langflow-deployment",level:2},{value:"Environment isolation",id:"environment-isolation",level:2},{value:"Why is it important to have separate deployments?",id:"why-is-it-important-to-have-separate-deployments",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Langflow can be deployed in two distinct environments."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/deployment-kubernetes-dev",children:(0,o.jsx)(n.strong,{children:"Langflow IDE"})}),": The ",(0,o.jsx)(n.strong,{children:"Langflow IDE"})," includes the frontend for visual development of your flow. The default ",(0,o.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/blob/main/docker_example/docker-compose.yml",children:"docker-compose.yml"})," file hosted in the Langflow repository builds the Langflow IDE image. The Langflow IDE can be deployed on ",(0,o.jsx)(n.a,{href:"/deployment-docker",children:"Docker"})," or ",(0,o.jsx)(n.a,{href:"/deployment-kubernetes-dev",children:"Kubernetes"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/deployment-kubernetes-prod",children:(0,o.jsx)(n.strong,{children:"Langflow runtime"})}),": The ",(0,o.jsx)(n.strong,{children:"Langflow runtime"})," is a headless or backend-only mode. The server exposes your flow as an endpoint, and runs only the processes necessary to serve your flow, with PostgreSQL as the database for improved scalability. Use the Langflow ",(0,o.jsx)(n.strong,{children:"runtime"})," to deploy your flows if you don't require the frontend for visual development. The Langflow runtime can be deployed on ",(0,o.jsx)(n.a,{href:"/deployment-docker",children:"Docker"})," or ",(0,o.jsx)(n.a,{href:"/deployment-kubernetes-prod",children:"Kubernetes"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["You can start Langflow in headless mode with the ",(0,o.jsx)(n.code,{children:"LANGFLOW_BACKEND_ONLY"})," ",(0,o.jsx)(n.a,{href:"/environment-variables",children:"environment variable"}),"."]})}),"\n",(0,o.jsx)(n.p,{children:"Deploying on Kubernetes offers the following advantages:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Scalability"}),": Kubernetes allows you to scale the Langflow service to meet the demands of your workload."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Availability and resilience"}),": Kubernetes provides built-in resilience features, such as automatic failover and self-healing, to ensure that the Langflow service is always available."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Security"}),": Kubernetes provides security features, such as role-based access control and network isolation, to protect the Langflow service and its data."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Portability"}),": Kubernetes is a portable platform, which means that you can deploy the Langflow service to any Kubernetes cluster, on-premises or in the cloud."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Langflow can be deployed on cloud deployments like ",(0,o.jsx)(n.strong,{children:"AWS EKS, Google GKE, or Azure AKS"}),". For more information about deploying Langflow on AWS EKS, Google GKE, or Azure AKS, see the ",(0,o.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow-helm-charts",children:"Langflow Helm charts repository"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"langflow-deployment",children:"Langflow deployment"}),"\n",(0,o.jsx)(n.p,{children:"A typical Langflow deployment includes:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Langflow API and UI"}),": The Langflow service is the core component of the Langflow platform. It provides a RESTful API for executing flows."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Kubernetes cluster"}),": The Kubernetes cluster provides a platform for deploying and managing the Langflow service and its supporting components."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Persistent storage"}),": Persistent storage is used to store the Langflow service's data, such as models and training data."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Ingress controller"}),": The ingress controller provides a single entry point for traffic to the Langflow service."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Load balancer"}),": Balances traffic across multiple Langflow replicas."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Vector database"}),": If you are using Langflow for RAG, you can integrate with the vector database in Astra Serverless."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Langflow reference architecture on Kubernetes",src:t(48109).A+"",width:"671",height:"361"})}),"\n",(0,o.jsx)(n.h2,{id:"environment-isolation",children:"Environment isolation"}),"\n",(0,o.jsx)(n.p,{children:"It is recommended to deploy and run two separate environments for Langflow, with one environment reserved for development use and another for production use."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Langflow environments",src:t(26023).A+"",width:"601",height:"491"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"The Langflow development environment"})," must include the Integrated Development Environment (IDE) for the full experience of Langflow, optimized for prototyping and testing new flows."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"The Langflow production environment"})," executes the flow logic in production and enables Langflow flows as standalone services."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"why-is-it-important-to-have-separate-deployments",children:"Why is it important to have separate deployments?"}),"\n",(0,o.jsx)(n.p,{children:"This separation is designed to enhance security, optimize resource allocation, and streamline management."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Security"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Isolation"}),": By separating the development and production environments, you can better isolate different phases of the application lifecycle. This isolation minimizes the risk of development-related issues impacting the production environments."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Access control"}),": Different security policies and access controls can be applied to each environment. Developers may require broader access in the IDE for testing and debugging, while the runtime environment can be locked down with stricter security measures."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Reduced attack surface"}),": The runtime environment is configured to include only essential components, reducing the attack surface and potential vulnerabilities."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Resource allocation"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Optimized resource usage and cost efficiency"}),": By separating the two environments, you can allocate resources more effectively. Each flow can be deployed independently, providing fine-grained resource control."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Scalability"}),": The runtime environment can be scaled independently based on application load and performance requirements, without affecting the development environment."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11470:(e,n,t)=>{t.d(n,{A:()=>j});var r=t(96540),o=t(18215),s=t(23104),a=t(56347),l=t(205),i=t(57485),c=t(31682),d=t(70679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r}))}(t);return function(e){const n=(0,c.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,t])}function p({value:e,tabValues:n}){return n.some(n=>n.value===e)}function f({queryString:e=!1,groupId:n}){const t=(0,a.W6)(),o=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,i.aZ)(o),(0,r.useCallback)(e=>{if(!o)return;const n=new URLSearchParams(t.location.search);n.set(o,e),t.replace({...t.location,search:n.toString()})},[o,t])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,s=h(e),[a,i]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s})),[c,u]=f({queryString:t,groupId:o}),[m,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,o]=(0,d.Dv)(n);return[t,(0,r.useCallback)(e=>{n&&o.set(e)},[n,o])]}({groupId:o}),b=(()=>{const e=c??m;return p({value:e,tabValues:s})?e:null})();(0,l.A)(()=>{b&&i(b)},[b]);return{selectedValue:a,selectValue:(0,r.useCallback)(e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),g(e)},[u,g,s]),tabValues:s}}var g=t(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(74848);function y({className:e,block:n,selectedValue:t,selectValue:r,tabValues:a}){const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.a_)(),c=e=>{const n=e.currentTarget,o=l.indexOf(n),s=a[o].value;s!==t&&(i(n),r(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":n},e),children:a.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...r,className:(0,o.A)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function x({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find(e=>e.props.value===t);return e?(0,r.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t}))})}function w(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,o.A)("tabs-container",b.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(x,{...n,...e})]})}function j(e){const n=(0,g.A)();return(0,v.jsx)(w,{...e,children:u(e.children)},String(n))}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var r=t(18215);const o={tabItem:"tabItem_Ymn6"};var s=t(74848);function a({children:e,hidden:n,className:t}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(o.tabItem,t),hidden:n,children:e})}},26023:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/langflow-env-f22dcd672ba806af9fec3968171a4700.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var r=t(96540);const o={},s=r.createContext(o);function a(e){const n=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:n},e.children)}},48109:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/langflow-reference-architecture-49ff76b7f84ce43f5626edd5cb3fa7fa.png"}}]); \ No newline at end of file diff --git a/assets/js/2fed9fb3.fb8d8b42.js b/assets/js/2fed9fb3.fb8d8b42.js deleted file mode 100644 index 3c10c7bd97..0000000000 --- a/assets/js/2fed9fb3.fb8d8b42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[6108],{9080:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"Langflow can be deployed in two distinct environments.","source":"@site/docs/Deployment/deployment-prod-best-practices.mdx","sourceDirName":"Deployment","slug":"/deployment-prod-best-practices","permalink":"/deployment-prod-best-practices","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Langflow architecture and best practices on Kubernetes","slug":"/deployment-prod-best-practices"},"sidebar":"docs","previous":{"title":"Deploy Langflow on a remote server","permalink":"/deployment-caddyfile"},"next":{"title":"Deploy in development","permalink":"/deployment-kubernetes-dev"}}');var o=t(74848),s=t(28453);t(11470),t(19365);const a={title:"Langflow architecture and best practices on Kubernetes",slug:"/deployment-prod-best-practices"},l=void 0,i={},c=[{value:"Langflow deployment",id:"langflow-deployment",level:2},{value:"Environment isolation",id:"environment-isolation",level:2},{value:"Why is it important to have separate deployments?",id:"why-is-it-important-to-have-separate-deployments",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Langflow can be deployed in two distinct environments."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/deployment-kubernetes-dev",children:(0,o.jsx)(n.strong,{children:"Langflow IDE"})}),": The ",(0,o.jsx)(n.strong,{children:"Langflow IDE"})," includes the frontend for visual development of your flow. The default ",(0,o.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/blob/main/docker_example/docker-compose.yml",children:"docker-compose.yml"})," file hosted in the Langflow repository builds the Langflow IDE image. The Langflow IDE can be deployed on ",(0,o.jsx)(n.a,{href:"/deployment-docker",children:"Docker"})," or ",(0,o.jsx)(n.a,{href:"/deployment-kubernetes-dev",children:"Kubernetes"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/deployment-kubernetes-prod",children:(0,o.jsx)(n.strong,{children:"Langflow runtime"})}),": The ",(0,o.jsx)(n.strong,{children:"Langflow runtime"})," is a headless or backend-only mode. The server exposes your flow as an endpoint, and runs only the processes necessary to serve your flow, with PostgreSQL as the database for improved scalability. Use the Langflow ",(0,o.jsx)(n.strong,{children:"runtime"})," to deploy your flows if you don't require the frontend for visual development. The Langflow runtime can be deployed on ",(0,o.jsx)(n.a,{href:"/deployment-docker",children:"Docker"})," or ",(0,o.jsx)(n.a,{href:"/deployment-kubernetes-prod",children:"Kubernetes"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["You can start Langflow in headless mode with the ",(0,o.jsx)(n.a,{href:"/environment-variables#LANGFLOW_BACKEND_ONLY",children:(0,o.jsx)(n.code,{children:"LANGFLOW_BACKEND_ONLY"})})," environment variable."]})}),"\n",(0,o.jsx)(n.p,{children:"Deploying on Kubernetes offers the following advantages:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Scalability"}),": Kubernetes allows you to scale the Langflow service to meet the demands of your workload."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Availability and resilience"}),": Kubernetes provides built-in resilience features, such as automatic failover and self-healing, to ensure that the Langflow service is always available."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Security"}),": Kubernetes provides security features, such as role-based access control and network isolation, to protect the Langflow service and its data."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Portability"}),": Kubernetes is a portable platform, which means that you can deploy the Langflow service to any Kubernetes cluster, on-premises or in the cloud."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Langflow can be deployed on cloud deployments like ",(0,o.jsx)(n.strong,{children:"AWS EKS, Google GKE, or Azure AKS"}),". For more information about deploying Langflow on AWS EKS, Google GKE, or Azure AKS, see the ",(0,o.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow-helm-charts",children:"Langflow Helm charts repository"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"langflow-deployment",children:"Langflow deployment"}),"\n",(0,o.jsx)(n.p,{children:"A typical Langflow deployment includes:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Langflow API and UI"}),": The Langflow service is the core component of the Langflow platform. It provides a RESTful API for executing flows."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Kubernetes cluster"}),": The Kubernetes cluster provides a platform for deploying and managing the Langflow service and its supporting components."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Persistent storage"}),": Persistent storage is used to store the Langflow service's data, such as models and training data."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Ingress controller"}),": The ingress controller provides a single entry point for traffic to the Langflow service."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Load balancer"}),": Balances traffic across multiple Langflow replicas."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Vector database"}),": If you are using Langflow for RAG, you can integrate with the vector database in Astra Serverless."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Langflow reference architecture on Kubernetes",src:t(48109).A+"",width:"671",height:"361"})}),"\n",(0,o.jsx)(n.h2,{id:"environment-isolation",children:"Environment isolation"}),"\n",(0,o.jsx)(n.p,{children:"It is recommended to deploy and run two separate environments for Langflow, with one environment reserved for development use and another for production use."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Langflow environments",src:t(26023).A+"",width:"601",height:"491"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"The Langflow development environment"})," must include the Integrated Development Environment (IDE) for the full experience of Langflow, optimized for prototyping and testing new flows."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"The Langflow production environment"})," executes the flow logic in production and enables Langflow flows as standalone services."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"why-is-it-important-to-have-separate-deployments",children:"Why is it important to have separate deployments?"}),"\n",(0,o.jsx)(n.p,{children:"This separation is designed to enhance security, optimize resource allocation, and streamline management."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Security"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Isolation"}),": By separating the development and production environments, you can better isolate different phases of the application lifecycle. This isolation minimizes the risk of development-related issues impacting the production environments."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Access control"}),": Different security policies and access controls can be applied to each environment. Developers may require broader access in the IDE for testing and debugging, while the runtime environment can be locked down with stricter security measures."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Reduced attack surface"}),": The runtime environment is configured to include only essential components, reducing the attack surface and potential vulnerabilities."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Resource allocation"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Optimized resource usage and cost efficiency"}),": By separating the two environments, you can allocate resources more effectively. Each flow can be deployed independently, providing fine-grained resource control."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Scalability"}),": The runtime environment can be scaled independently based on application load and performance requirements, without affecting the development environment."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11470:(e,n,t)=>{t.d(n,{A:()=>j});var r=t(96540),o=t(18215),s=t(23104),a=t(56347),l=t(205),i=t(57485),c=t(31682),d=t(70679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r}))}(t);return function(e){const n=(0,c.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,t])}function p({value:e,tabValues:n}){return n.some(n=>n.value===e)}function f({queryString:e=!1,groupId:n}){const t=(0,a.W6)(),o=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,i.aZ)(o),(0,r.useCallback)(e=>{if(!o)return;const n=new URLSearchParams(t.location.search);n.set(o,e),t.replace({...t.location,search:n.toString()})},[o,t])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,s=h(e),[a,i]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s})),[c,u]=f({queryString:t,groupId:o}),[m,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,o]=(0,d.Dv)(n);return[t,(0,r.useCallback)(e=>{n&&o.set(e)},[n,o])]}({groupId:o}),b=(()=>{const e=c??m;return p({value:e,tabValues:s})?e:null})();(0,l.A)(()=>{b&&i(b)},[b]);return{selectedValue:a,selectValue:(0,r.useCallback)(e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),g(e)},[u,g,s]),tabValues:s}}var g=t(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(74848);function y({className:e,block:n,selectedValue:t,selectValue:r,tabValues:a}){const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.a_)(),c=e=>{const n=e.currentTarget,o=l.indexOf(n),s=a[o].value;s!==t&&(i(n),r(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":n},e),children:a.map(({value:e,label:n,attributes:r})=>(0,v.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...r,className:(0,o.A)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function x({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find(e=>e.props.value===t);return e?(0,r.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t}))})}function w(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,o.A)("tabs-container",b.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(x,{...n,...e})]})}function j(e){const n=(0,g.A)();return(0,v.jsx)(w,{...e,children:u(e.children)},String(n))}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var r=t(18215);const o={tabItem:"tabItem_Ymn6"};var s=t(74848);function a({children:e,hidden:n,className:t}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(o.tabItem,t),hidden:n,children:e})}},26023:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/langflow-env-f22dcd672ba806af9fec3968171a4700.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var r=t(96540);const o={},s=r.createContext(o);function a(e){const n=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:n},e.children)}},48109:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/langflow-reference-architecture-49ff76b7f84ce43f5626edd5cb3fa7fa.png"}}]); \ No newline at end of file diff --git a/assets/js/47e58a89.471aa9f9.js b/assets/js/47e58a89.707a09c8.js similarity index 64% rename from assets/js/47e58a89.471aa9f9.js rename to assets/js/47e58a89.707a09c8.js index 11ec9b9ed5..434ccd9add 100644 --- a/assets/js/47e58a89.471aa9f9.js +++ b/assets/js/47e58a89.707a09c8.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1006],{28453:(e,o,n)=>{n.d(o,{R:()=>a,x:()=>i});var s=n(96540);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}},33354:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>d,assets:()=>l,chCodeConfig:()=>h,contentTitle:()=>c,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>m});const s=JSON.parse('{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.","source":"@site/docs/Develop/memory.mdx","sourceDirName":"Develop","slug":"/memory","permalink":"/memory","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Memory management options","slug":"/memory"},"sidebar":"docs","previous":{"title":"Manage files","permalink":"/concepts-file-management"},"next":{"title":"Use Session IDs","permalink":"/session-id"}}');var t=n(74848),r=n(28453),a=n(24754);const i={title:"Memory management options",slug:"/memory"},c=void 0,l={},d={annotations:a.hk,Code:a.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},m=[{value:"Storage options and paths",id:"storage-options-and-paths",level:2},{value:"Local Langflow database tables",id:"local-langflow-database-tables",level:2},{value:"Configure external memory",id:"configure-external-memory",level:2},{value:"Configure the external database connection",id:"configure-the-external-database-connection",level:3},{value:"Configure cache memory",id:"configure-cache-memory",level:2},{value:"Store chat memory",id:"store-chat-memory",level:2},{value:"Session ID and chat memory",id:"session-id-and-chat-memory",level:3},{value:"Chat memory options",id:"chat-memory-options",level:3},{value:"See also",id:"see-also",level:2}];function g(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return d||u("CH",!1),d.Code||u("CH.Code",!0),n||u("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.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,t.jsx)(o.p,{children:"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.\nThis includes essential Langflow database tables, file management, and caching, as well as chat memory."}),"\n",(0,t.jsx)(o.h2,{id:"storage-options-and-paths",children:"Storage options and paths"}),"\n",(0,t.jsx)(o.p,{children:"Langflow supports both local memory and external memory options."}),"\n",(0,t.jsxs)(o.p,{children:["Langflow's default storage option is a ",(0,t.jsx)(o.a,{href:"https://www.sqlite.org/",children:"SQLite"})," database stored in your system's cache directory.\nThe default storage path depends on your operation system and installation method:"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"macOS Desktop"}),": ",(0,t.jsx)(o.code,{children:"/Users//.langflow/data/database.db"})]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Windows Desktop"}),": ",(0,t.jsx)(o.code,{children:"C:\\Users\\\\AppData\\Roaming\\com.Langflow\\data\\langflow.db"})]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsxs)(o.strong,{children:["OSS macOS/Windows/Linux/WSL (",(0,t.jsx)(o.code,{children:"uv pip install"}),")"]}),": ",(0,t.jsx)(o.code,{children:"/lib/python3.12/site-packages/langflow/langflow.db"})," (Python version may vary)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsxs)(o.strong,{children:["OSS macOS/Windows/Linux/WSL (",(0,t.jsx)(o.code,{children:"git clone"}),")"]}),": ",(0,t.jsx)(o.code,{children:"/src/backend/base/langflow/langflow.db"})]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["Alternatively, you can use an external PostgreSQL database for all of your Langflow storage.\nYou can also selectively use external storage for chat memory, separate from other Langflow storage.\nFor more information, see ",(0,t.jsx)(o.a,{href:"#configure-external-memory",children:"Configure external memory"})," and ",(0,t.jsx)(o.a,{href:"#store-chat-memory",children:"Store chat memory"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"local-langflow-database-tables",children:"Local Langflow database tables"}),"\n",(0,t.jsxs)(o.p,{children:["The following tables are stored in ",(0,t.jsx)(o.code,{children:"langflow.db"}),":"]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"User"}),": Stores user account information including credentials, permissions, and profiles. For more information, see ",(0,t.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Flow"}),": Contains flow configurations. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-flows",children:"Build flows"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Message"}),": Stores chat messages and interactions that occur between components. For more information, see ",(0,t.jsx)(o.a,{href:"/data-types#message",children:"Message objects"})," and ",(0,t.jsx)(o.a,{href:"#store-chat-memory",children:"Store chat memory"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Transaction"}),": Records execution history and results of flow runs. This information is used for ",(0,t.jsx)(o.a,{href:"/logging",children:"logging"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"ApiKey"}),": Manages API authentication keys for Langflow users. Component API keys are stored in the ",(0,t.jsx)(o.strong,{children:"Variables"})," table. For more information, see ",(0,t.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Project"}),": Provides a structure for flow storage. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-flows#projects",children:"Projects"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Variables"}),": Stores global encrypted values and credentials. For more information, see ",(0,t.jsx)(o.a,{href:"/configuration-global-variables",children:"Global variables"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"VertexBuild"}),": Tracks the build status of individual nodes within flows. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-playground",children:"Run a flow in the Playground"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["For more information, see the database models in the ",(0,t.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/tree/main/src/backend/base/langflow/services/database/models",children:"source code"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"configure-external-memory",children:"Configure external memory"}),"\n",(0,t.jsxs)(o.p,{children:["To replace the default Langflow SQLite database with another database, modify the ",(0,t.jsx)(o.code,{children:"LANGFLOW_DATABASE_URL"})," environment variable, and then start Langflow with your ",(0,t.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsxs)(o.p,{children:["For an example, see ",(0,t.jsx)(o.a,{href:"/configuration-custom-database",children:"Configure an external PostgreSQL database"}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"configure-the-external-database-connection",children:"Configure the external database connection"}),"\n",(0,t.jsx)(o.p,{children:"The following settings allow you to fine-tune your database connection pool and timeout settings:"}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'LANGFLOW_DB_CONNECTION_SETTINGS=\'{"pool_size": 20, "max_overflow": 30, "pool_timeout": 30, "pool_pre_ping": true, "pool_recycle": 1800, "echo": false}\'',props:{}}]},{tokens:[{content:"LANGFLOW_DB_CONNECT_TIMEOUT=20",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_size"}),": Maximum number of database connections to keep in the pool (default: 20)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"max_overflow"}),": Maximum number of connections that can be created beyond the pool_size (default: 30)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_timeout"}),": Number of seconds to wait before timing out on getting a connection from the pool (default: 30)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_pre_ping"}),": If true, the pool tests connections for liveness upon each checkout (default: true)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_recycle"}),": Number of seconds after which a connection is automatically recycled (default: 1800, or 30 minutes)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"echo"}),": If true, SQL queries are logged for debugging purposes (default: false)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"LANGFLOW_DB_CONNECT_TIMEOUT"}),": Maximum number of seconds to wait when establishing a new database connection (default: 20)"]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"configure-cache-memory",children:"Configure cache memory"}),"\n",(0,t.jsx)(o.p,{children:"The default Langflow caching behavior is an asynchronous, in-memory cache."}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=Async",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsx)(o.p,{children:"Alternative caching options can be configured, but options other than the default asynchronous, in-memory cache are not supported.\nThe default behavior is suitable for most use cases."}),"\n",(0,t.jsxs)(o.p,{children:["For other options, see ",(0,t.jsx)(o.a,{href:"/environment-variables#LANGFLOW_CACHE_TYPE",children:(0,t.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"store-chat-memory",children:"Store chat memory"}),"\n",(0,t.jsxs)(o.p,{children:["Chat-based flows with a ",(0,t.jsx)(o.strong,{children:"Language Model"})," or ",(0,t.jsx)(o.strong,{children:"Agent"})," component have built-in chat memory that is enabled by default.\nThis memory allows them to retrieve and reference messages from previous conversations associated with the same session ID."]}),"\n",(0,t.jsxs)(o.p,{children:["Built-in chat memory stores memories in the Langflow ",(0,t.jsx)(o.code,{children:"messages"})," table."]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"How does chat memory work?"}),(0,t.jsx)(o.p,{children:"Chat memory is a cache for the LLM or agent to preserve past conversations to retain and reference that context in future interactions.\nFor example, if a user has already told the LLM their name, the LLM can retrieve that information from chat memory rather than asking the user to repeat themselves in future conversations or messages."}),(0,t.jsx)(o.p,{children:"Chat memory is distinct from vector store memory because it is built specifically for storing and retrieving chat messages from databases."}),(0,t.jsxs)(o.p,{children:["Components that support chat memory (such as the ",(0,t.jsx)(o.strong,{children:"Agent"}),", ",(0,t.jsx)(o.strong,{children:"Language Model"}),", ",(0,t.jsx)(o.strong,{children:"Message History"}),", or third-party ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," components) provide access to their respective databases ",(0,t.jsx)(o.em,{children:"as memory"}),".\nRetrieval as memory is an important distinction for LLMs and agents because this storage and retrieval mechanism is specifically designed to recall context from past conversations.\nUnlike vector stores, which are designed for semantic search and retrieval of text chunks, chat memory is designed to store and retrieve chat messages in a way that is optimized for conversation history."]})]}),"\n",(0,t.jsx)(o.h3,{id:"session-id-and-chat-memory",children:"Session ID and chat memory"}),"\n",(0,t.jsxs)(o.p,{children:["Chat memories are grouped by ",(0,t.jsxs)(o.a,{href:"/session-id",children:["session ID (",(0,t.jsx)(o.code,{children:"session_id"}),")"]}),"."]}),"\n",(0,t.jsx)(o.p,{children:"The default session ID is the flow ID, which means that all chat messages for a flow are stored under the same session ID as one large chat session."}),"\n",(0,t.jsx)(o.p,{children:"For better segregation of chat memory, especially in flows used by multiple users, consider using custom session IDs.\nFor example, if you use user IDs as session IDs, then each user's chat history is stored separately, isolating the context of their chats from other users' chats."}),"\n",(0,t.jsx)(o.h3,{id:"chat-memory-options",children:"Chat memory options"}),"\n",(0,t.jsx)(o.p,{children:"Where and how chat memory is stored depends on the components used in your flow:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Language Model and Agent components"}),": All messages are stored in ",(0,t.jsx)(o.a,{href:"#storage-options-and-paths",children:"Langflow storage"}),".\nThe ",(0,t.jsx)(o.strong,{children:"Agent"})," component provides some memory configuration options, such as ",(0,t.jsx)(o.strong,{children:"Number of Chat History Messages"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["The ",(0,t.jsx)(o.strong,{children:"Language Model"})," and ",(0,t.jsx)(o.strong,{children:"Agent"})," component's built-in chat memory are sufficient for most use cases."]}),"\n",(0,t.jsxs)(o.p,{children:["If you prefer to use dedicated, external chat memory storage, or you need to retrieve memories outside the context of a chat, you can add ",(0,t.jsx)(o.strong,{children:"Message History"})," and ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," components to your flow."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Message History component"}),": By default, this component stores and retrieves memories from Langflow storage, unless you attach a ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," component. It provides a few more options for sorting and filtering memories, although most of these options are built-in to the ",(0,t.jsx)(o.strong,{children:"Agent"})," component as configurable or fixed parameters."]}),"\n",(0,t.jsxs)(o.p,{children:["You can use the ",(0,t.jsx)(o.strong,{children:"Message History"})," component with or without a ",(0,t.jsx)(o.strong,{children:"Language Model"})," or ",(0,t.jsx)(o.strong,{children:"Agent"})," component.\nFor example, if you need to retrieve data from memories outside of chat, you can use the ",(0,t.jsx)(o.strong,{children:"Message History"})," component to fetch that data directly from your chat memory database without feeding it into a chat."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Third-party Chat Memory components"}),": Use one of these components only if you need to specifically store or retrieve chat memories from a dedicated chat memory database.\nTypically, this is necessary only if you have specific storage needs that aren't met by Langflow storage.\nFor example, if you want to manage chat memory data by directly working with the database, or if you want to use a different database than the default Langflow storage."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["For more information and examples, see ",(0,t.jsxs)(o.a,{href:"/components-helpers#message-history",children:[(0,t.jsx)(o.strong,{children:"Message History"})," component"]})," and ",(0,t.jsx)(o.a,{href:"/agents#agent-memory",children:"Agent memory"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.a,{href:"/concepts-file-management",children:"Langflow file management"})}),"\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.a,{href:"/logging",children:"Langflow logs"})}),"\n"]})]})}function f(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}function u(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` 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([[1006],{28453:(e,o,n)=>{n.d(o,{R:()=>a,x:()=>i});var s=n(96540);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}},33354:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>d,assets:()=>l,chCodeConfig:()=>h,contentTitle:()=>c,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>m});const s=JSON.parse('{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.","source":"@site/docs/Develop/memory.mdx","sourceDirName":"Develop","slug":"/memory","permalink":"/memory","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Memory management options","slug":"/memory"},"sidebar":"docs","previous":{"title":"Manage files","permalink":"/concepts-file-management"},"next":{"title":"Use Session IDs","permalink":"/session-id"}}');var t=n(74848),r=n(28453),a=n(24754);const i={title:"Memory management options",slug:"/memory"},c=void 0,l={},d={annotations:a.hk,Code:a.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},m=[{value:"Storage options and paths",id:"storage-options-and-paths",level:2},{value:"Local Langflow database tables",id:"local-langflow-database-tables",level:2},{value:"Configure external memory",id:"configure-external-memory",level:2},{value:"Configure the external database connection",id:"configure-the-external-database-connection",level:3},{value:"Configure cache memory",id:"configure-cache-memory",level:2},{value:"Store chat memory",id:"store-chat-memory",level:2},{value:"Session ID and chat memory",id:"session-id-and-chat-memory",level:3},{value:"Chat memory options",id:"chat-memory-options",level:3},{value:"See also",id:"see-also",level:2}];function g(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return d||u("CH",!1),d.Code||u("CH.Code",!0),n||u("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.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,t.jsx)(o.p,{children:"Langflow provides flexible memory management options for storage and retrieval of data relevant to your flows and your Langflow server.\nThis includes essential Langflow database tables, file management, and caching, as well as chat memory."}),"\n",(0,t.jsx)(o.h2,{id:"storage-options-and-paths",children:"Storage options and paths"}),"\n",(0,t.jsx)(o.p,{children:"Langflow supports both local memory and external memory options."}),"\n",(0,t.jsxs)(o.p,{children:["Langflow's default storage option is a ",(0,t.jsx)(o.a,{href:"https://www.sqlite.org/",children:"SQLite"})," database stored in your system's cache directory.\nThe default storage path depends on your operation system and installation method:"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"macOS Desktop"}),": ",(0,t.jsx)(o.code,{children:"/Users//.langflow/data/database.db"})]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Windows Desktop"}),": ",(0,t.jsx)(o.code,{children:"C:\\Users\\\\AppData\\Roaming\\com.Langflow\\data\\langflow.db"})]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsxs)(o.strong,{children:["OSS macOS/Windows/Linux/WSL (",(0,t.jsx)(o.code,{children:"uv pip install"}),")"]}),": ",(0,t.jsx)(o.code,{children:"/lib/python3.12/site-packages/langflow/langflow.db"})," (Python version may vary)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsxs)(o.strong,{children:["OSS macOS/Windows/Linux/WSL (",(0,t.jsx)(o.code,{children:"git clone"}),")"]}),": ",(0,t.jsx)(o.code,{children:"/src/backend/base/langflow/langflow.db"})]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["Alternatively, you can use an external PostgreSQL database for all of your Langflow storage.\nYou can also selectively use external storage for chat memory, separate from other Langflow storage.\nFor more information, see ",(0,t.jsx)(o.a,{href:"#configure-external-memory",children:"Configure external memory"})," and ",(0,t.jsx)(o.a,{href:"#store-chat-memory",children:"Store chat memory"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"local-langflow-database-tables",children:"Local Langflow database tables"}),"\n",(0,t.jsxs)(o.p,{children:["The following tables are stored in ",(0,t.jsx)(o.code,{children:"langflow.db"}),":"]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"User"}),": Stores user account information including credentials, permissions, and profiles. For more information, see ",(0,t.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Flow"}),": Contains flow configurations. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-flows",children:"Build flows"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Message"}),": Stores chat messages and interactions that occur between components. For more information, see ",(0,t.jsx)(o.a,{href:"/data-types#message",children:"Message objects"})," and ",(0,t.jsx)(o.a,{href:"#store-chat-memory",children:"Store chat memory"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Transaction"}),": Records execution history and results of flow runs. This information is used for ",(0,t.jsx)(o.a,{href:"/logging",children:"logging"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"ApiKey"}),": Manages API authentication keys for Langflow users. Component API keys are stored in the ",(0,t.jsx)(o.strong,{children:"Variables"})," table. For more information, see ",(0,t.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Project"}),": Provides a structure for flow storage. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-flows#projects",children:"Projects"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"Variables"}),": Stores global encrypted values and credentials. For more information, see ",(0,t.jsx)(o.a,{href:"/configuration-global-variables",children:"Global variables"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["\u2022 ",(0,t.jsx)(o.strong,{children:"VertexBuild"}),": Tracks the build status of individual nodes within flows. For more information, see ",(0,t.jsx)(o.a,{href:"/concepts-playground",children:"Run a flow in the Playground"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["For more information, see the database models in the ",(0,t.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/tree/main/src/backend/base/langflow/services/database/models",children:"source code"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"configure-external-memory",children:"Configure external memory"}),"\n",(0,t.jsxs)(o.p,{children:["To replace the default Langflow SQLite database with another database, modify the ",(0,t.jsx)(o.code,{children:"LANGFLOW_DATABASE_URL"})," environment variable, and then start Langflow with your ",(0,t.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsxs)(o.p,{children:["For an example, see ",(0,t.jsx)(o.a,{href:"/configuration-custom-database",children:"Configure an external PostgreSQL database"}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"configure-the-external-database-connection",children:"Configure the external database connection"}),"\n",(0,t.jsx)(o.p,{children:"The following settings allow you to fine-tune your database connection pool and timeout settings:"}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'LANGFLOW_DB_CONNECTION_SETTINGS=\'{"pool_size": 20, "max_overflow": 30, "pool_timeout": 30, "pool_pre_ping": true, "pool_recycle": 1800, "echo": false}\'',props:{}}]},{tokens:[{content:"LANGFLOW_DB_CONNECT_TIMEOUT=20",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_size"}),": Maximum number of database connections to keep in the pool (default: 20)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"max_overflow"}),": Maximum number of connections that can be created beyond the pool_size (default: 30)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_timeout"}),": Number of seconds to wait before timing out on getting a connection from the pool (default: 30)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_pre_ping"}),": If true, the pool tests connections for liveness upon each checkout (default: true)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"pool_recycle"}),": Number of seconds after which a connection is automatically recycled (default: 1800, or 30 minutes)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"echo"}),": If true, SQL queries are logged for debugging purposes (default: false)"]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.code,{children:"LANGFLOW_DB_CONNECT_TIMEOUT"}),": Maximum number of seconds to wait when establishing a new database connection (default: 20)"]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"configure-cache-memory",children:"Configure cache memory"}),"\n",(0,t.jsx)(o.p,{children:"The default Langflow caching behavior is an asynchronous, in-memory cache."}),"\n",(0,t.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=Async",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,t.jsx)(o.p,{children:"Alternative caching options can be configured, but options other than the default asynchronous, in-memory cache are not supported.\nThe default behavior is suitable for most use cases."}),"\n",(0,t.jsxs)(o.p,{children:["For other options, see the ",(0,t.jsx)(o.code,{children:"LANGFLOW_CACHE_TYPE"})," ",(0,t.jsx)(o.a,{href:"/environment-variables",children:"environment variable"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"store-chat-memory",children:"Store chat memory"}),"\n",(0,t.jsxs)(o.p,{children:["Chat-based flows with a ",(0,t.jsx)(o.strong,{children:"Language Model"})," or ",(0,t.jsx)(o.strong,{children:"Agent"})," component have built-in chat memory that is enabled by default.\nThis memory allows them to retrieve and reference messages from previous conversations associated with the same session ID."]}),"\n",(0,t.jsxs)(o.p,{children:["Built-in chat memory stores memories in the Langflow ",(0,t.jsx)(o.code,{children:"messages"})," table."]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"How does chat memory work?"}),(0,t.jsx)(o.p,{children:"Chat memory is a cache for the LLM or agent to preserve past conversations to retain and reference that context in future interactions.\nFor example, if a user has already told the LLM their name, the LLM can retrieve that information from chat memory rather than asking the user to repeat themselves in future conversations or messages."}),(0,t.jsx)(o.p,{children:"Chat memory is distinct from vector store memory because it is built specifically for storing and retrieving chat messages from databases."}),(0,t.jsxs)(o.p,{children:["Components that support chat memory (such as the ",(0,t.jsx)(o.strong,{children:"Agent"}),", ",(0,t.jsx)(o.strong,{children:"Language Model"}),", ",(0,t.jsx)(o.strong,{children:"Message History"}),", or third-party ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," components) provide access to their respective databases ",(0,t.jsx)(o.em,{children:"as memory"}),".\nRetrieval as memory is an important distinction for LLMs and agents because this storage and retrieval mechanism is specifically designed to recall context from past conversations.\nUnlike vector stores, which are designed for semantic search and retrieval of text chunks, chat memory is designed to store and retrieve chat messages in a way that is optimized for conversation history."]})]}),"\n",(0,t.jsx)(o.h3,{id:"session-id-and-chat-memory",children:"Session ID and chat memory"}),"\n",(0,t.jsxs)(o.p,{children:["Chat memories are grouped by ",(0,t.jsxs)(o.a,{href:"/session-id",children:["session ID (",(0,t.jsx)(o.code,{children:"session_id"}),")"]}),"."]}),"\n",(0,t.jsx)(o.p,{children:"The default session ID is the flow ID, which means that all chat messages for a flow are stored under the same session ID as one large chat session."}),"\n",(0,t.jsx)(o.p,{children:"For better segregation of chat memory, especially in flows used by multiple users, consider using custom session IDs.\nFor example, if you use user IDs as session IDs, then each user's chat history is stored separately, isolating the context of their chats from other users' chats."}),"\n",(0,t.jsx)(o.h3,{id:"chat-memory-options",children:"Chat memory options"}),"\n",(0,t.jsx)(o.p,{children:"Where and how chat memory is stored depends on the components used in your flow:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Language Model and Agent components"}),": All messages are stored in ",(0,t.jsx)(o.a,{href:"#storage-options-and-paths",children:"Langflow storage"}),".\nThe ",(0,t.jsx)(o.strong,{children:"Agent"})," component provides some memory configuration options, such as ",(0,t.jsx)(o.strong,{children:"Number of Chat History Messages"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["The ",(0,t.jsx)(o.strong,{children:"Language Model"})," and ",(0,t.jsx)(o.strong,{children:"Agent"})," component's built-in chat memory are sufficient for most use cases."]}),"\n",(0,t.jsxs)(o.p,{children:["If you prefer to use dedicated, external chat memory storage, or you need to retrieve memories outside the context of a chat, you can add ",(0,t.jsx)(o.strong,{children:"Message History"})," and ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," components to your flow."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Message History component"}),": By default, this component stores and retrieves memories from Langflow storage, unless you attach a ",(0,t.jsx)(o.strong,{children:"Chat Memory"})," component. It provides a few more options for sorting and filtering memories, although most of these options are built-in to the ",(0,t.jsx)(o.strong,{children:"Agent"})," component as configurable or fixed parameters."]}),"\n",(0,t.jsxs)(o.p,{children:["You can use the ",(0,t.jsx)(o.strong,{children:"Message History"})," component with or without a ",(0,t.jsx)(o.strong,{children:"Language Model"})," or ",(0,t.jsx)(o.strong,{children:"Agent"})," component.\nFor example, if you need to retrieve data from memories outside of chat, you can use the ",(0,t.jsx)(o.strong,{children:"Message History"})," component to fetch that data directly from your chat memory database without feeding it into a chat."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Third-party Chat Memory components"}),": Use one of these components only if you need to specifically store or retrieve chat memories from a dedicated chat memory database.\nTypically, this is necessary only if you have specific storage needs that aren't met by Langflow storage.\nFor example, if you want to manage chat memory data by directly working with the database, or if you want to use a different database than the default Langflow storage."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["For more information and examples, see ",(0,t.jsxs)(o.a,{href:"/components-helpers#message-history",children:[(0,t.jsx)(o.strong,{children:"Message History"})," component"]})," and ",(0,t.jsx)(o.a,{href:"/agents#agent-memory",children:"Agent memory"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.a,{href:"/concepts-file-management",children:"Langflow file management"})}),"\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.a,{href:"/logging",children:"Langflow logs"})}),"\n"]})]})}function f(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}function u(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]); \ No newline at end of file diff --git a/assets/js/67f2dc6c.001eb3e6.js b/assets/js/67f2dc6c.001eb3e6.js deleted file mode 100644 index 61c563d2be..0000000000 --- a/assets/js/67f2dc6c.001eb3e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3164],{28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var o=t(96540);const s={},l=o.createContext(s);function i(e){const n=o.useContext(l);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(l.Provider,{value:n},e.children)}},42438:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>r});const o=JSON.parse('{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on HuggingFace Spaces","description":"This guide explains how to deploy Langflow on HuggingFace Spaces.","source":"@site/docs/Deployment/deployment-hugging-face-spaces.mdx","sourceDirName":"Deployment","slug":"/deployment-hugging-face-spaces","permalink":"/deployment-hugging-face-spaces","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on HuggingFace Spaces","slug":"/deployment-hugging-face-spaces"},"sidebar":"docs","previous":{"title":"Google Cloud Platform","permalink":"/deployment-gcp"},"next":{"title":"Railway","permalink":"/deployment-railway"}}');var s=t(74848),l=t(28453);const i={title:"Deploy Langflow on HuggingFace Spaces",slug:"/deployment-hugging-face-spaces"},c=void 0,a={},r=[];function g(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["This guide explains how to deploy Langflow on ",(0,s.jsx)(n.a,{href:"https://huggingface.co/spaces/",children:"HuggingFace Spaces"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to the ",(0,s.jsx)(n.a,{href:"https://huggingface.co/spaces/Langflow/Langflow?duplicate=true",children:"Langflow Space"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.strong,{children:"Duplicate Space"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the configuration dialog, do the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Enter a name for your Space."}),"\n",(0,s.jsx)(n.li,{children:"Select either public or private visibility."}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.strong,{children:"Duplicate Space"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Hugging Face deployment dialog",src:t(87862).A+"",width:"3008",height:"1692"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Wait for the setup to complete. You'll be redirected to your new Space automatically."}),"\n",(0,s.jsx)(n.p,{children:"Your Langflow instance is now ready to use."})]})}function p(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}},87862:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/hugging-face-deployment-fa1554738ef6c3249ba3fec70b2134cb.png"}}]); \ No newline at end of file diff --git a/assets/js/67f2dc6c.c41fea74.js b/assets/js/67f2dc6c.c41fea74.js new file mode 100644 index 0000000000..f30296b8d3 --- /dev/null +++ b/assets/js/67f2dc6c.c41fea74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3164],{28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(96540);const o={},c=s.createContext(o);function i(e){const n=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(c.Provider,{value:n},e.children)}},42438:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>r});const s=JSON.parse('{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on Hugging Face Spaces","description":"This guide explains how to deploy Langflow on Hugging Face Spaces.","source":"@site/docs/Deployment/deployment-hugging-face-spaces.mdx","sourceDirName":"Deployment","slug":"/deployment-hugging-face-spaces","permalink":"/deployment-hugging-face-spaces","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Hugging Face Spaces","slug":"/deployment-hugging-face-spaces"},"sidebar":"docs","previous":{"title":"Google Cloud Platform","permalink":"/deployment-gcp"},"next":{"title":"Railway","permalink":"/deployment-railway"}}');var o=t(74848),c=t(28453);const i={title:"Deploy Langflow on Hugging Face Spaces",slug:"/deployment-hugging-face-spaces"},l=void 0,a={},r=[];function p(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,c.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(n.p,{children:["This guide explains how to deploy Langflow on ",(0,o.jsx)(n.a,{href:"https://huggingface.co/spaces/",children:"Hugging Face Spaces"}),"."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Go to the ",(0,o.jsx)(n.a,{href:"https://huggingface.co/spaces/Langflow/Langflow?duplicate=true",children:"Langflow Space"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.strong,{children:"Duplicate Space"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Configure the duplicated Space:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Enter a name for your Space."}),"\n",(0,o.jsx)(n.li,{children:"Select either public or private visibility."}),"\n",(0,o.jsxs)(n.li,{children:["Click ",(0,o.jsx)(n.strong,{children:"Duplicate Space"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Hugging Face deployment dialog",src:t(87862).A+"",width:"3008",height:"1692"})}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"When setup is complete, you're redirected to your new Space automatically, and your Langflow instance is ready to use."})]})}function g(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},87862:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/hugging-face-deployment-fa1554738ef6c3249ba3fec70b2134cb.png"}}]); \ No newline at end of file diff --git a/assets/js/69079906.57e7703f.js b/assets/js/69079906.fc012235.js similarity index 88% rename from assets/js/69079906.57e7703f.js rename to assets/js/69079906.fc012235.js index abc3480698..873eaa2d15 100644 --- a/assets/js/69079906.57e7703f.js +++ b/assets/js/69079906.fc012235.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5739],{1975:(M,j,N)=>{N.d(j,{A:()=>D});const D="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTUzIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTUzIiBoZWlnaHQ9IjQwIiBmaWxsPSIjOEEwNUZGIi8+CjxwYXRoIGQ9Ik0xNy41MDAxIDIxTDE4LjIwNTEgMjEuNzA1TDE5LjUwMDEgMjAuNDE1VjI2LjVIMjAuNTAwMVYyMC40MTVMMjEuNzk1MSAyMS43MDVMMjIuNTAwMSAyMUwyMC4wMDAxIDE4LjVMMTcuNTAwMSAyMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yMy43NTAxIDIzSDIzLjUwMDFWMjJIMjMuNzUwMUMyNC4zNDY4IDIyLjAyMzkgMjQuOTI4NiAyMS44MDk3IDI1LjM2NzQgMjEuNDA0N0MyNS44MDYyIDIwLjk5OTYgMjYuMDY2MiAyMC40MzY4IDI2LjA5MDEgMTkuODRDMjYuMTEzOSAxOS4yNDMzIDI1Ljg5OTggMTguNjYxNSAyNS40OTQ3IDE4LjIyMjdDMjUuMDg5NiAxNy43ODM4IDI0LjUyNjggMTcuNTIzOSAyMy45MzAxIDE3LjVIMjMuNTAwMUwyMy40NTAxIDE3LjA5QzIzLjMzOTEgMTYuMjQ4MyAyMi45MjYgMTUuNDc1NSAyMi4yODc2IDE0LjkxNTdDMjEuNjQ5MiAxNC4zNTU5IDIwLjgyOTEgMTQuMDQ3MyAxOS45ODAxIDE0LjA0NzNDMTkuMTMxIDE0LjA0NzMgMTguMzEwOSAxNC4zNTU5IDE3LjY3MjUgMTQuOTE1N0MxNy4wMzQxIDE1LjQ3NTUgMTYuNjIxIDE2LjI0ODMgMTYuNTEwMSAxNy4wOUwxNi41MDAxIDE3LjVIMTYuMDcwMUMxNS40NzMzIDE3LjUyMzkgMTQuOTEwNSAxNy43ODM4IDE0LjUwNTQgMTguMjIyN0MxNC4xMDAzIDE4LjY2MTUgMTMuODg2MiAxOS4yNDMzIDEzLjkxMDEgMTkuODRDMTMuOTMzOSAyMC40MzY4IDE0LjE5MzkgMjAuOTk5NiAxNC42MzI3IDIxLjQwNDdDMTUuMDcxNSAyMS44MDk3IDE1LjY1MzMgMjIuMDIzOSAxNi4yNTAxIDIySDE2LjUwMDFWMjNIMTYuMjUwMUMxNS40NDgzIDIyLjk5NSAxNC42NzY2IDIyLjY5MzcgMTQuMDgzNSAyMi4xNTQxQzEzLjQ5MDUgMjEuNjE0NSAxMy4xMTc4IDIwLjg3NDcgMTMuMDM3MSAyMC4wNzdDMTIuOTU2NSAxOS4yNzkyIDEzLjE3MzYgMTguNDc5OCAxMy42NDY3IDE3LjgzMjVDMTQuMTE5OCAxNy4xODUxIDE0LjgxNTUgMTYuNzM1NSAxNS42MDAxIDE2LjU3QzE1LjgxNTkgMTUuNTYzMyAxNi4zNzA1IDE0LjY2MSAxNy4xNzEyIDE0LjAxMzhDMTcuOTcxOSAxMy4zNjY1IDE4Ljk3MDQgMTMuMDEzNCAyMC4wMDAxIDEzLjAxMzRDMjEuMDI5NyAxMy4wMTM0IDIyLjAyODIgMTMuMzY2NSAyMi44Mjg5IDE0LjAxMzhDMjMuNjI5NiAxNC42NjEgMjQuMTg0MiAxNS41NjMzIDI0LjQwMDEgMTYuNTdDMjUuMTg0NiAxNi43MzU1IDI1Ljg4MDMgMTcuMTg1MSAyNi4zNTM0IDE3LjgzMjVDMjYuODI2NSAxOC40Nzk4IDI3LjA0MzYgMTkuMjc5MiAyNi45NjMgMjAuMDc3QzI2Ljg4MjMgMjAuODc0NyAyNi41MDk2IDIxLjYxNDUgMjUuOTE2NiAyMi4xNTQxQzI1LjMyMzUgMjIuNjkzNyAyNC41NTE4IDIyLjk5NSAyMy43NTAxIDIzWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM5LjA2MzIgMjVIMzUuNDM3MlYxNC45OUgzOS4wNjMyQzQxLjgyMTIgMTQuOTkgNDMuNTE1MiAxNi43ODIgNDMuNTE1MiAyMC4wMDJDNDMuNTE1MiAyMy4yMjIgNDEuODIxMiAyNSAzOS4wNjMyIDI1Wk0zNi42OTcyIDIzLjg4SDM5LjA2MzJDNDEuNjExMiAyMy44OCA0Mi4xOTkyIDIxLjk2MiA0Mi4xOTkyIDIwLjAwMkM0Mi4xOTkyIDE4LjA0MiA0MS42MTEyIDE2LjExIDM5LjA2MzIgMTYuMTFIMzYuNjk3MlYyMy44OFpNNTEuNDMwOSAyMS4xNjRDNTEuNDMwOSAyMS4zNzQgNTEuNDMwOSAyMS42MTIgNTEuNDE2OSAyMS43MjRINDUuODMwOUM0NS44NTg5IDIyLjk4NCA0Ni41NTg5IDI0LjI0NCA0OC4xNDA5IDI0LjI0NEM0OS41NDA5IDI0LjI0NCA1MC4wNzI5IDIzLjMwNiA1MC4xOTg5IDIyLjgwMkg1MS4zMzI5QzUwLjk2ODkgMjQuMTMyIDQ5Ljk2MDkgMjUuMjEgNDguMTI2OSAyNS4yMUM0NS44NzI5IDI1LjIxIDQ0LjY1NDkgMjMuNTg2IDQ0LjY1NDkgMjEuNDE2QzQ0LjY1NDkgMTkuMTM0IDQ2LjAxMjkgMTcuNjUgNDguMTI2OSAxNy42NUM1MC4yMTI5IDE3LjY1IDUxLjQzMDkgMTkuMDc4IDUxLjQzMDkgMjEuMTY0Wk00NS44MzA5IDIwLjc0NEg1MC4yNDA5QzUwLjI0MDkgMTkuNTY4IDQ5LjQwMDkgMTguNjE2IDQ4LjA3MDkgMTguNjE2QzQ2LjgzODkgMTguNjE2IDQ1LjkwMDkgMTkuNDk4IDQ1LjgzMDkgMjAuNzQ0Wk01Ni4xODk4IDE3LjY2NEM1Ny45ODE4IDE3LjY2NCA1OS40MDk4IDE5LjA3OCA1OS40MDk4IDIxLjQzQzU5LjQwOTggMjMuNzgyIDU3Ljk4MTggMjUuMTk2IDU2LjE4OTggMjUuMTk2QzU1LjA0MTggMjUuMTk2IDU0LjM2OTggMjQuNjkyIDUzLjk0OTggMjQuMDc2SDUzLjkyMThWMjcuNDc4SDUyLjgwMThWMTcuODZINTMuOTIxOFYxOC43NDJINTMuOTQ5OEM1NC4zNjk4IDE4LjE5NiA1NS4wNDE4IDE3LjY2NCA1Ni4xODk4IDE3LjY2NFpNNTYuMDc3OCAyNC4yMTZDNTcuNTQ3OCAyNC4yMTYgNTguMjMzOCAyMi44MyA1OC4yMzM4IDIxLjQzQzU4LjIzMzggMjAuMDMgNTcuNTQ3OCAxOC42NDQgNTYuMDc3OCAxOC42NDRDNTQuNzQ3OCAxOC42NDQgNTMuOTIxOCAxOS43NSA1My45MjE4IDIxLjQzQzUzLjkyMTggMjMuMTEgNTQuNzQ3OCAyNC4yMTYgNTYuMDc3OCAyNC4yMTZaTTYxLjkwOTQgMjVINjAuNzg5NFYxNC45OUg2MS45MDk0VjI1Wk02Ni43ODU1IDI1LjIxQzY0LjYwMTUgMjUuMjEgNjMuMjg1NSAyMy42NTYgNjMuMjg1NSAyMS40M0M2My4yODU1IDE5LjIwNCA2NC42MDE1IDE3LjY1IDY2Ljc4NTUgMTcuNjVDNjguOTU1NSAxNy42NSA3MC4yNzE1IDE5LjIwNCA3MC4yNzE1IDIxLjQzQzcwLjI3MTUgMjMuNjU2IDY4Ljk1NTUgMjUuMjEgNjYuNzg1NSAyNS4yMVpNNjYuNzg1NSAyNC4yM0M2OC4zODE1IDI0LjIzIDY5LjA5NTUgMjIuOTU2IDY5LjA5NTUgMjEuNDNDNjkuMDk1NSAxOS45MDQgNjguMzgxNSAxOC42MyA2Ni43ODU1IDE4LjYzQzY1LjE3NTUgMTguNjMgNjQuNDYxNSAxOS45MDQgNjQuNDYxNSAyMS40M0M2NC40NjE1IDIyLjk1NiA2NS4xNzU1IDI0LjIzIDY2Ljc4NTUgMjQuMjNaTTcyLjIwMiAyNy41MDZDNzEuOTUgMjcuNTA2IDcxLjc4MiAyNy40OTIgNzEuNDYgMjcuNDM2VjI2LjQ4NEM3MS42OTggMjYuNTEyIDcxLjgxIDI2LjUyNiA3Mi4wMiAyNi41MjZDNzIuNjA4IDI2LjUyNiA3My4yNTIgMjYuMTYyIDczLjU2IDI0LjkzTDcwLjY2MiAxNy44Nkg3MS45MjJMNzQuMTIgMjMuNTQ0SDc0LjE0OEw3Ni4yNDggMTcuODZINzcuNDUyTDc0LjU2OCAyNS4yMUM3My44NTQgMjcuMDE2IDczLjE2OCAyNy41MDYgNzIuMjAyIDI3LjUwNlpNODQuMjM3IDE3Ljg2VjE4Ljg0SDgyLjgzN1YyMy4xMzhDODIuODM3IDIzLjg5NCA4My4wMTkgMjQuMDkgODMuNjQ5IDI0LjA5QzgzLjg4NyAyNC4wOSA4My45OTkgMjQuMDc2IDg0LjIzNyAyNC4wNDhWMjVDODMuOTE1IDI1LjA1NiA4My43NDcgMjUuMDcgODMuNDk1IDI1LjA3QzgyLjQ0NSAyNS4wNyA4MS43MTcgMjQuNzA2IDgxLjcxNyAyMy4wODJWMTguODRIODAuNjY3VjE3Ljg2SDgxLjcxN1YxNS40OEg4Mi44MzdWMTcuODZIODQuMjM3Wk04OC41MDk1IDI1LjIxQzg2LjMyNTUgMjUuMjEgODUuMDA5NSAyMy42NTYgODUuMDA5NSAyMS40M0M4NS4wMDk1IDE5LjIwNCA4Ni4zMjU1IDE3LjY1IDg4LjUwOTUgMTcuNjVDOTAuNjc5NSAxNy42NSA5MS45OTU1IDE5LjIwNCA5MS45OTU1IDIxLjQzQzkxLjk5NTUgMjMuNjU2IDkwLjY3OTUgMjUuMjEgODguNTA5NSAyNS4yMVpNODguNTA5NSAyNC4yM0M5MC4xMDU1IDI0LjIzIDkwLjgxOTUgMjIuOTU2IDkwLjgxOTUgMjEuNDNDOTAuODE5NSAxOS45MDQgOTAuMTA1NSAxOC42MyA4OC41MDk1IDE4LjYzQzg2Ljg5OTUgMTguNjMgODYuMTg1NSAxOS45MDQgODYuMTg1NSAyMS40M0M4Ni4xODU1IDIyLjk1NiA4Ni44OTk1IDI0LjIzIDg4LjUwOTUgMjQuMjNaTTk3Ljk4IDI1SDk2LjcyVjE0Ljk5SDEwMC43MzhDMTAyLjkzNiAxNC45OSAxMDQuMDg0IDE2LjAyNiAxMDQuMDg0IDE3Ljg3NEMxMDQuMDg0IDE5LjEyIDEwMy4zMTQgMjAuMDcyIDEwMi4yNjQgMjAuMzI0VjIwLjM1MkMxMDQuNTE4IDIwLjc4NiAxMDMuNjkyIDI0Ljc0OCAxMDQuMjI0IDI0LjkxNlYyNUgxMDIuODY2QzEwMi40MzIgMjQuNTggMTAzLjM4NCAyMC45NTQgMTAwLjg1IDIwLjk1NEg5Ny45OFYyNVpNOTcuOTggMTkuODM0SDEwMC40NDRDMTAxLjk3IDE5LjgzNCAxMDIuODI0IDE5LjE0OCAxMDIuODI0IDE3LjkwMkMxMDIuODI0IDE2Ljc1NCAxMDIuMTggMTYuMTEgMTAwLjQ4NiAxNi4xMUg5Ny45OFYxOS44MzRaTTExMS45NjIgMjEuMTY0QzExMS45NjIgMjEuMzc0IDExMS45NjIgMjEuNjEyIDExMS45NDggMjEuNzI0SDEwNi4zNjJDMTA2LjM5IDIyLjk4NCAxMDcuMDkgMjQuMjQ0IDEwOC42NzIgMjQuMjQ0QzExMC4wNzIgMjQuMjQ0IDExMC42MDQgMjMuMzA2IDExMC43MyAyMi44MDJIMTExLjg2NEMxMTEuNSAyNC4xMzIgMTEwLjQ5MiAyNS4yMSAxMDguNjU4IDI1LjIxQzEwNi40MDQgMjUuMjEgMTA1LjE4NiAyMy41ODYgMTA1LjE4NiAyMS40MTZDMTA1LjE4NiAxOS4xMzQgMTA2LjU0NCAxNy42NSAxMDguNjU4IDE3LjY1QzExMC43NDQgMTcuNjUgMTExLjk2MiAxOS4wNzggMTExLjk2MiAyMS4xNjRaTTEwNi4zNjIgMjAuNzQ0SDExMC43NzJDMTEwLjc3MiAxOS41NjggMTA5LjkzMiAxOC42MTYgMTA4LjYwMiAxOC42MTZDMTA3LjM3IDE4LjYxNiAxMDYuNDMyIDE5LjQ5OCAxMDYuMzYyIDIwLjc0NFpNMTE2LjgzMyAxNy42NjRDMTE4LjEzNSAxNy42NjQgMTE5LjIyNyAxOC4zNzggMTE5LjIyNyAyMC4wMTZWMjVIMTE4LjEwN1YyMC4yOTZDMTE4LjEwNyAxOS4zNzIgMTE3LjY3MyAxOC42NDQgMTE2LjU1MyAxOC42NDRDMTE1LjI5MyAxOC42NDQgMTE0LjQ1MyAxOS40NDIgMTE0LjQ1MyAyMC41NDhWMjVIMTEzLjMzM1YxNy44NkgxMTQuNDUzVjE4LjcxNEgxMTQuNDgxQzExNC44NTkgMTguMjEgMTE1LjYxNSAxNy42NjQgMTE2LjgzMyAxNy42NjRaTTEyNi4wNDcgMTguNzg0VjE0Ljk5SDEyNy4xNjdWMjVIMTI2LjA0N1YyNC4xMThIMTI2LjAxOUMxMjUuNTk5IDI0LjY2NCAxMjQuOTI3IDI1LjE5NiAxMjMuNzc5IDI1LjE5NkMxMjEuOTg3IDI1LjE5NiAxMjAuNTU5IDIzLjc4MiAxMjAuNTU5IDIxLjQzQzEyMC41NTkgMTkuMDc4IDEyMS45ODcgMTcuNjY0IDEyMy43NzkgMTcuNjY0QzEyNC45MjcgMTcuNjY0IDEyNS41OTkgMTguMTY4IDEyNi4wMTkgMTguNzg0SDEyNi4wNDdaTTEyMy44OTEgMjQuMjE2QzEyNS4yMjEgMjQuMjE2IDEyNi4wNDcgMjMuMTEgMTI2LjA0NyAyMS40M0MxMjYuMDQ3IDE5Ljc1IDEyNS4yMjEgMTguNjQ0IDEyMy44OTEgMTguNjQ0QzEyMi40MjEgMTguNjQ0IDEyMS43MzUgMjAuMDMgMTIxLjczNSAyMS40M0MxMjEuNzM1IDIyLjgzIDEyMi40MjEgMjQuMjE2IDEyMy44OTEgMjQuMjE2Wk0xMzUuMzIzIDIxLjE2NEMxMzUuMzIzIDIxLjM3NCAxMzUuMzIzIDIxLjYxMiAxMzUuMzA5IDIxLjcyNEgxMjkuNzIzQzEyOS43NTEgMjIuOTg0IDEzMC40NTEgMjQuMjQ0IDEzMi4wMzMgMjQuMjQ0QzEzMy40MzMgMjQuMjQ0IDEzMy45NjUgMjMuMzA2IDEzNC4wOTEgMjIuODAySDEzNS4yMjVDMTM0Ljg2MSAyNC4xMzIgMTMzLjg1MyAyNS4yMSAxMzIuMDE5IDI1LjIxQzEyOS43NjUgMjUuMjEgMTI4LjU0NyAyMy41ODYgMTI4LjU0NyAyMS40MTZDMTI4LjU0NyAxOS4xMzQgMTI5LjkwNSAxNy42NSAxMzIuMDE5IDE3LjY1QzEzNC4xMDUgMTcuNjUgMTM1LjMyMyAxOS4wNzggMTM1LjMyMyAyMS4xNjRaTTEyOS43MjMgMjAuNzQ0SDEzNC4xMzNDMTM0LjEzMyAxOS41NjggMTMzLjI5MyAxOC42MTYgMTMxLjk2MyAxOC42MTZDMTMwLjczMSAxOC42MTYgMTI5Ljc5MyAxOS40OTggMTI5LjcyMyAyMC43NDRaTTEzOS44MTYgMTcuNjY0QzE0MC4wODIgMTcuNjY0IDE0MC4yNzggMTcuNjc4IDE0MC40NzQgMTcuNzA2VjE4LjgyNkMxNDAuMzA2IDE4Ljc5OCAxNDAuMTggMTguNzg0IDE0MC4wMTIgMTguNzg0QzEzOC42OTYgMTguNzg0IDEzNy44MTQgMTkuODIgMTM3LjgxNCAyMS4xOTJWMjVIMTM2LjY5NFYxNy44NkgxMzcuODE0VjE5LjI3NEgxMzcuODQyQzEzOC4yMiAxOC4zMzYgMTM4Ljc5NCAxNy42NjQgMTM5LjgxNiAxNy42NjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"},28453:(M,j,N)=>{N.d(j,{R:()=>T,x:()=>y});var D=N(96540);const I={},g=D.createContext(I);function T(M){const j=D.useContext(g);return D.useMemo(function(){return"function"==typeof M?M(j):{...j,...M}},[j,M])}function y(M){let j;return j=M.disableParentContext?"function"==typeof M.components?M.components(I):M.components||I:T(M.components),D.createElement(g.Provider,{value:j},M.children)}},59397:(M,j,N)=>{N.r(j),N.d(j,{assets:()=>u,contentTitle:()=>y,default:()=>E,frontMatter:()=>T,metadata:()=>D,toc:()=>A});const D=JSON.parse('{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","source":"@site/docs/Deployment/deployment-render.mdx","sourceDirName":"Deployment","slug":"/deployment-render","permalink":"/deployment-render","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Render","slug":"/deployment-render"},"sidebar":"docs","previous":{"title":"Railway","permalink":"/deployment-railway"},"next":{"title":"Components overview","permalink":"/concepts-components"}}');var I=N(74848),g=N(28453);const T={title:"Deploy Langflow on Render",slug:"/deployment-render"},y=void 0,u={},A=[];function x(M){const j={a:"a",code:"code",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,g.R)(),...M.components};return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(j.p,{children:["This guide explains how to deploy Langflow on ",(0,I.jsx)(j.a,{href:"https://render.com/",children:"Render"}),", a cloud platform for deploying web applications and APIs."]}),"\n",(0,I.jsxs)(j.ol,{children:["\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsx)(j.p,{children:"Prepare a Render instance that can support Langflow."}),"\n",(0,I.jsxs)(j.p,{children:["Langflow requires at least 2 GB of RAM to run, so you must use a ",(0,I.jsx)(j.strong,{children:"Standard"})," or better Render instance type.\nThis requires a paid Render account.\nFor more information, see ",(0,I.jsx)(j.a,{href:"https://render.com/docs/web-services",children:"Render Web Services"})," and ",(0,I.jsx)(j.a,{href:"https://render.com/pricing",children:"Render pricing"}),"."]}),"\n"]}),"\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsx)(j.p,{children:"Click the following button to go to Render:"}),"\n",(0,I.jsx)(j.p,{children:(0,I.jsx)(j.a,{href:"https://render.com/deploy?repo=https%3A%2F%2Fgithub.com%2Flangflow-ai%2Flangflow%2Ftree%2Fdev",children:(0,I.jsx)(j.img,{alt:"Deploy to Render",src:N(1975).A+"",width:"153",height:"40"})})}),"\n"]}),"\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsxs)(j.p,{children:["Enter a blueprint name, and then select the branch for your ",(0,I.jsx)(j.code,{children:"render.yaml"})," file."]}),"\n"]}),"\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsxs)(j.p,{children:["Click ",(0,I.jsx)(j.strong,{children:"Deploy Blueprint"}),", and then wait for the deployment to complete.\nOnce complete, your Langflow instance is ready to use."]}),"\n"]}),"\n"]})]})}function E(M={}){const{wrapper:j}={...(0,g.R)(),...M.components};return j?(0,I.jsx)(j,{...M,children:(0,I.jsx)(x,{...M})}):x(M)}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5739],{1975:(M,j,N)=>{N.d(j,{A:()=>D});const D="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTUzIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTUzIiBoZWlnaHQ9IjQwIiBmaWxsPSIjOEEwNUZGIi8+CjxwYXRoIGQ9Ik0xNy41MDAxIDIxTDE4LjIwNTEgMjEuNzA1TDE5LjUwMDEgMjAuNDE1VjI2LjVIMjAuNTAwMVYyMC40MTVMMjEuNzk1MSAyMS43MDVMMjIuNTAwMSAyMUwyMC4wMDAxIDE4LjVMMTcuNTAwMSAyMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yMy43NTAxIDIzSDIzLjUwMDFWMjJIMjMuNzUwMUMyNC4zNDY4IDIyLjAyMzkgMjQuOTI4NiAyMS44MDk3IDI1LjM2NzQgMjEuNDA0N0MyNS44MDYyIDIwLjk5OTYgMjYuMDY2MiAyMC40MzY4IDI2LjA5MDEgMTkuODRDMjYuMTEzOSAxOS4yNDMzIDI1Ljg5OTggMTguNjYxNSAyNS40OTQ3IDE4LjIyMjdDMjUuMDg5NiAxNy43ODM4IDI0LjUyNjggMTcuNTIzOSAyMy45MzAxIDE3LjVIMjMuNTAwMUwyMy40NTAxIDE3LjA5QzIzLjMzOTEgMTYuMjQ4MyAyMi45MjYgMTUuNDc1NSAyMi4yODc2IDE0LjkxNTdDMjEuNjQ5MiAxNC4zNTU5IDIwLjgyOTEgMTQuMDQ3MyAxOS45ODAxIDE0LjA0NzNDMTkuMTMxIDE0LjA0NzMgMTguMzEwOSAxNC4zNTU5IDE3LjY3MjUgMTQuOTE1N0MxNy4wMzQxIDE1LjQ3NTUgMTYuNjIxIDE2LjI0ODMgMTYuNTEwMSAxNy4wOUwxNi41MDAxIDE3LjVIMTYuMDcwMUMxNS40NzMzIDE3LjUyMzkgMTQuOTEwNSAxNy43ODM4IDE0LjUwNTQgMTguMjIyN0MxNC4xMDAzIDE4LjY2MTUgMTMuODg2MiAxOS4yNDMzIDEzLjkxMDEgMTkuODRDMTMuOTMzOSAyMC40MzY4IDE0LjE5MzkgMjAuOTk5NiAxNC42MzI3IDIxLjQwNDdDMTUuMDcxNSAyMS44MDk3IDE1LjY1MzMgMjIuMDIzOSAxNi4yNTAxIDIySDE2LjUwMDFWMjNIMTYuMjUwMUMxNS40NDgzIDIyLjk5NSAxNC42NzY2IDIyLjY5MzcgMTQuMDgzNSAyMi4xNTQxQzEzLjQ5MDUgMjEuNjE0NSAxMy4xMTc4IDIwLjg3NDcgMTMuMDM3MSAyMC4wNzdDMTIuOTU2NSAxOS4yNzkyIDEzLjE3MzYgMTguNDc5OCAxMy42NDY3IDE3LjgzMjVDMTQuMTE5OCAxNy4xODUxIDE0LjgxNTUgMTYuNzM1NSAxNS42MDAxIDE2LjU3QzE1LjgxNTkgMTUuNTYzMyAxNi4zNzA1IDE0LjY2MSAxNy4xNzEyIDE0LjAxMzhDMTcuOTcxOSAxMy4zNjY1IDE4Ljk3MDQgMTMuMDEzNCAyMC4wMDAxIDEzLjAxMzRDMjEuMDI5NyAxMy4wMTM0IDIyLjAyODIgMTMuMzY2NSAyMi44Mjg5IDE0LjAxMzhDMjMuNjI5NiAxNC42NjEgMjQuMTg0MiAxNS41NjMzIDI0LjQwMDEgMTYuNTdDMjUuMTg0NiAxNi43MzU1IDI1Ljg4MDMgMTcuMTg1MSAyNi4zNTM0IDE3LjgzMjVDMjYuODI2NSAxOC40Nzk4IDI3LjA0MzYgMTkuMjc5MiAyNi45NjMgMjAuMDc3QzI2Ljg4MjMgMjAuODc0NyAyNi41MDk2IDIxLjYxNDUgMjUuOTE2NiAyMi4xNTQxQzI1LjMyMzUgMjIuNjkzNyAyNC41NTE4IDIyLjk5NSAyMy43NTAxIDIzWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM5LjA2MzIgMjVIMzUuNDM3MlYxNC45OUgzOS4wNjMyQzQxLjgyMTIgMTQuOTkgNDMuNTE1MiAxNi43ODIgNDMuNTE1MiAyMC4wMDJDNDMuNTE1MiAyMy4yMjIgNDEuODIxMiAyNSAzOS4wNjMyIDI1Wk0zNi42OTcyIDIzLjg4SDM5LjA2MzJDNDEuNjExMiAyMy44OCA0Mi4xOTkyIDIxLjk2MiA0Mi4xOTkyIDIwLjAwMkM0Mi4xOTkyIDE4LjA0MiA0MS42MTEyIDE2LjExIDM5LjA2MzIgMTYuMTFIMzYuNjk3MlYyMy44OFpNNTEuNDMwOSAyMS4xNjRDNTEuNDMwOSAyMS4zNzQgNTEuNDMwOSAyMS42MTIgNTEuNDE2OSAyMS43MjRINDUuODMwOUM0NS44NTg5IDIyLjk4NCA0Ni41NTg5IDI0LjI0NCA0OC4xNDA5IDI0LjI0NEM0OS41NDA5IDI0LjI0NCA1MC4wNzI5IDIzLjMwNiA1MC4xOTg5IDIyLjgwMkg1MS4zMzI5QzUwLjk2ODkgMjQuMTMyIDQ5Ljk2MDkgMjUuMjEgNDguMTI2OSAyNS4yMUM0NS44NzI5IDI1LjIxIDQ0LjY1NDkgMjMuNTg2IDQ0LjY1NDkgMjEuNDE2QzQ0LjY1NDkgMTkuMTM0IDQ2LjAxMjkgMTcuNjUgNDguMTI2OSAxNy42NUM1MC4yMTI5IDE3LjY1IDUxLjQzMDkgMTkuMDc4IDUxLjQzMDkgMjEuMTY0Wk00NS44MzA5IDIwLjc0NEg1MC4yNDA5QzUwLjI0MDkgMTkuNTY4IDQ5LjQwMDkgMTguNjE2IDQ4LjA3MDkgMTguNjE2QzQ2LjgzODkgMTguNjE2IDQ1LjkwMDkgMTkuNDk4IDQ1LjgzMDkgMjAuNzQ0Wk01Ni4xODk4IDE3LjY2NEM1Ny45ODE4IDE3LjY2NCA1OS40MDk4IDE5LjA3OCA1OS40MDk4IDIxLjQzQzU5LjQwOTggMjMuNzgyIDU3Ljk4MTggMjUuMTk2IDU2LjE4OTggMjUuMTk2QzU1LjA0MTggMjUuMTk2IDU0LjM2OTggMjQuNjkyIDUzLjk0OTggMjQuMDc2SDUzLjkyMThWMjcuNDc4SDUyLjgwMThWMTcuODZINTMuOTIxOFYxOC43NDJINTMuOTQ5OEM1NC4zNjk4IDE4LjE5NiA1NS4wNDE4IDE3LjY2NCA1Ni4xODk4IDE3LjY2NFpNNTYuMDc3OCAyNC4yMTZDNTcuNTQ3OCAyNC4yMTYgNTguMjMzOCAyMi44MyA1OC4yMzM4IDIxLjQzQzU4LjIzMzggMjAuMDMgNTcuNTQ3OCAxOC42NDQgNTYuMDc3OCAxOC42NDRDNTQuNzQ3OCAxOC42NDQgNTMuOTIxOCAxOS43NSA1My45MjE4IDIxLjQzQzUzLjkyMTggMjMuMTEgNTQuNzQ3OCAyNC4yMTYgNTYuMDc3OCAyNC4yMTZaTTYxLjkwOTQgMjVINjAuNzg5NFYxNC45OUg2MS45MDk0VjI1Wk02Ni43ODU1IDI1LjIxQzY0LjYwMTUgMjUuMjEgNjMuMjg1NSAyMy42NTYgNjMuMjg1NSAyMS40M0M2My4yODU1IDE5LjIwNCA2NC42MDE1IDE3LjY1IDY2Ljc4NTUgMTcuNjVDNjguOTU1NSAxNy42NSA3MC4yNzE1IDE5LjIwNCA3MC4yNzE1IDIxLjQzQzcwLjI3MTUgMjMuNjU2IDY4Ljk1NTUgMjUuMjEgNjYuNzg1NSAyNS4yMVpNNjYuNzg1NSAyNC4yM0M2OC4zODE1IDI0LjIzIDY5LjA5NTUgMjIuOTU2IDY5LjA5NTUgMjEuNDNDNjkuMDk1NSAxOS45MDQgNjguMzgxNSAxOC42MyA2Ni43ODU1IDE4LjYzQzY1LjE3NTUgMTguNjMgNjQuNDYxNSAxOS45MDQgNjQuNDYxNSAyMS40M0M2NC40NjE1IDIyLjk1NiA2NS4xNzU1IDI0LjIzIDY2Ljc4NTUgMjQuMjNaTTcyLjIwMiAyNy41MDZDNzEuOTUgMjcuNTA2IDcxLjc4MiAyNy40OTIgNzEuNDYgMjcuNDM2VjI2LjQ4NEM3MS42OTggMjYuNTEyIDcxLjgxIDI2LjUyNiA3Mi4wMiAyNi41MjZDNzIuNjA4IDI2LjUyNiA3My4yNTIgMjYuMTYyIDczLjU2IDI0LjkzTDcwLjY2MiAxNy44Nkg3MS45MjJMNzQuMTIgMjMuNTQ0SDc0LjE0OEw3Ni4yNDggMTcuODZINzcuNDUyTDc0LjU2OCAyNS4yMUM3My44NTQgMjcuMDE2IDczLjE2OCAyNy41MDYgNzIuMjAyIDI3LjUwNlpNODQuMjM3IDE3Ljg2VjE4Ljg0SDgyLjgzN1YyMy4xMzhDODIuODM3IDIzLjg5NCA4My4wMTkgMjQuMDkgODMuNjQ5IDI0LjA5QzgzLjg4NyAyNC4wOSA4My45OTkgMjQuMDc2IDg0LjIzNyAyNC4wNDhWMjVDODMuOTE1IDI1LjA1NiA4My43NDcgMjUuMDcgODMuNDk1IDI1LjA3QzgyLjQ0NSAyNS4wNyA4MS43MTcgMjQuNzA2IDgxLjcxNyAyMy4wODJWMTguODRIODAuNjY3VjE3Ljg2SDgxLjcxN1YxNS40OEg4Mi44MzdWMTcuODZIODQuMjM3Wk04OC41MDk1IDI1LjIxQzg2LjMyNTUgMjUuMjEgODUuMDA5NSAyMy42NTYgODUuMDA5NSAyMS40M0M4NS4wMDk1IDE5LjIwNCA4Ni4zMjU1IDE3LjY1IDg4LjUwOTUgMTcuNjVDOTAuNjc5NSAxNy42NSA5MS45OTU1IDE5LjIwNCA5MS45OTU1IDIxLjQzQzkxLjk5NTUgMjMuNjU2IDkwLjY3OTUgMjUuMjEgODguNTA5NSAyNS4yMVpNODguNTA5NSAyNC4yM0M5MC4xMDU1IDI0LjIzIDkwLjgxOTUgMjIuOTU2IDkwLjgxOTUgMjEuNDNDOTAuODE5NSAxOS45MDQgOTAuMTA1NSAxOC42MyA4OC41MDk1IDE4LjYzQzg2Ljg5OTUgMTguNjMgODYuMTg1NSAxOS45MDQgODYuMTg1NSAyMS40M0M4Ni4xODU1IDIyLjk1NiA4Ni44OTk1IDI0LjIzIDg4LjUwOTUgMjQuMjNaTTk3Ljk4IDI1SDk2LjcyVjE0Ljk5SDEwMC43MzhDMTAyLjkzNiAxNC45OSAxMDQuMDg0IDE2LjAyNiAxMDQuMDg0IDE3Ljg3NEMxMDQuMDg0IDE5LjEyIDEwMy4zMTQgMjAuMDcyIDEwMi4yNjQgMjAuMzI0VjIwLjM1MkMxMDQuNTE4IDIwLjc4NiAxMDMuNjkyIDI0Ljc0OCAxMDQuMjI0IDI0LjkxNlYyNUgxMDIuODY2QzEwMi40MzIgMjQuNTggMTAzLjM4NCAyMC45NTQgMTAwLjg1IDIwLjk1NEg5Ny45OFYyNVpNOTcuOTggMTkuODM0SDEwMC40NDRDMTAxLjk3IDE5LjgzNCAxMDIuODI0IDE5LjE0OCAxMDIuODI0IDE3LjkwMkMxMDIuODI0IDE2Ljc1NCAxMDIuMTggMTYuMTEgMTAwLjQ4NiAxNi4xMUg5Ny45OFYxOS44MzRaTTExMS45NjIgMjEuMTY0QzExMS45NjIgMjEuMzc0IDExMS45NjIgMjEuNjEyIDExMS45NDggMjEuNzI0SDEwNi4zNjJDMTA2LjM5IDIyLjk4NCAxMDcuMDkgMjQuMjQ0IDEwOC42NzIgMjQuMjQ0QzExMC4wNzIgMjQuMjQ0IDExMC42MDQgMjMuMzA2IDExMC43MyAyMi44MDJIMTExLjg2NEMxMTEuNSAyNC4xMzIgMTEwLjQ5MiAyNS4yMSAxMDguNjU4IDI1LjIxQzEwNi40MDQgMjUuMjEgMTA1LjE4NiAyMy41ODYgMTA1LjE4NiAyMS40MTZDMTA1LjE4NiAxOS4xMzQgMTA2LjU0NCAxNy42NSAxMDguNjU4IDE3LjY1QzExMC43NDQgMTcuNjUgMTExLjk2MiAxOS4wNzggMTExLjk2MiAyMS4xNjRaTTEwNi4zNjIgMjAuNzQ0SDExMC43NzJDMTEwLjc3MiAxOS41NjggMTA5LjkzMiAxOC42MTYgMTA4LjYwMiAxOC42MTZDMTA3LjM3IDE4LjYxNiAxMDYuNDMyIDE5LjQ5OCAxMDYuMzYyIDIwLjc0NFpNMTE2LjgzMyAxNy42NjRDMTE4LjEzNSAxNy42NjQgMTE5LjIyNyAxOC4zNzggMTE5LjIyNyAyMC4wMTZWMjVIMTE4LjEwN1YyMC4yOTZDMTE4LjEwNyAxOS4zNzIgMTE3LjY3MyAxOC42NDQgMTE2LjU1MyAxOC42NDRDMTE1LjI5MyAxOC42NDQgMTE0LjQ1MyAxOS40NDIgMTE0LjQ1MyAyMC41NDhWMjVIMTEzLjMzM1YxNy44NkgxMTQuNDUzVjE4LjcxNEgxMTQuNDgxQzExNC44NTkgMTguMjEgMTE1LjYxNSAxNy42NjQgMTE2LjgzMyAxNy42NjRaTTEyNi4wNDcgMTguNzg0VjE0Ljk5SDEyNy4xNjdWMjVIMTI2LjA0N1YyNC4xMThIMTI2LjAxOUMxMjUuNTk5IDI0LjY2NCAxMjQuOTI3IDI1LjE5NiAxMjMuNzc5IDI1LjE5NkMxMjEuOTg3IDI1LjE5NiAxMjAuNTU5IDIzLjc4MiAxMjAuNTU5IDIxLjQzQzEyMC41NTkgMTkuMDc4IDEyMS45ODcgMTcuNjY0IDEyMy43NzkgMTcuNjY0QzEyNC45MjcgMTcuNjY0IDEyNS41OTkgMTguMTY4IDEyNi4wMTkgMTguNzg0SDEyNi4wNDdaTTEyMy44OTEgMjQuMjE2QzEyNS4yMjEgMjQuMjE2IDEyNi4wNDcgMjMuMTEgMTI2LjA0NyAyMS40M0MxMjYuMDQ3IDE5Ljc1IDEyNS4yMjEgMTguNjQ0IDEyMy44OTEgMTguNjQ0QzEyMi40MjEgMTguNjQ0IDEyMS43MzUgMjAuMDMgMTIxLjczNSAyMS40M0MxMjEuNzM1IDIyLjgzIDEyMi40MjEgMjQuMjE2IDEyMy44OTEgMjQuMjE2Wk0xMzUuMzIzIDIxLjE2NEMxMzUuMzIzIDIxLjM3NCAxMzUuMzIzIDIxLjYxMiAxMzUuMzA5IDIxLjcyNEgxMjkuNzIzQzEyOS43NTEgMjIuOTg0IDEzMC40NTEgMjQuMjQ0IDEzMi4wMzMgMjQuMjQ0QzEzMy40MzMgMjQuMjQ0IDEzMy45NjUgMjMuMzA2IDEzNC4wOTEgMjIuODAySDEzNS4yMjVDMTM0Ljg2MSAyNC4xMzIgMTMzLjg1MyAyNS4yMSAxMzIuMDE5IDI1LjIxQzEyOS43NjUgMjUuMjEgMTI4LjU0NyAyMy41ODYgMTI4LjU0NyAyMS40MTZDMTI4LjU0NyAxOS4xMzQgMTI5LjkwNSAxNy42NSAxMzIuMDE5IDE3LjY1QzEzNC4xMDUgMTcuNjUgMTM1LjMyMyAxOS4wNzggMTM1LjMyMyAyMS4xNjRaTTEyOS43MjMgMjAuNzQ0SDEzNC4xMzNDMTM0LjEzMyAxOS41NjggMTMzLjI5MyAxOC42MTYgMTMxLjk2MyAxOC42MTZDMTMwLjczMSAxOC42MTYgMTI5Ljc5MyAxOS40OTggMTI5LjcyMyAyMC43NDRaTTEzOS44MTYgMTcuNjY0QzE0MC4wODIgMTcuNjY0IDE0MC4yNzggMTcuNjc4IDE0MC40NzQgMTcuNzA2VjE4LjgyNkMxNDAuMzA2IDE4Ljc5OCAxNDAuMTggMTguNzg0IDE0MC4wMTIgMTguNzg0QzEzOC42OTYgMTguNzg0IDEzNy44MTQgMTkuODIgMTM3LjgxNCAyMS4xOTJWMjVIMTM2LjY5NFYxNy44NkgxMzcuODE0VjE5LjI3NEgxMzcuODQyQzEzOC4yMiAxOC4zMzYgMTM4Ljc5NCAxNy42NjQgMTM5LjgxNiAxNy42NjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"},28453:(M,j,N)=>{N.d(j,{R:()=>T,x:()=>y});var D=N(96540);const I={},g=D.createContext(I);function T(M){const j=D.useContext(g);return D.useMemo(function(){return"function"==typeof M?M(j):{...j,...M}},[j,M])}function y(M){let j;return j=M.disableParentContext?"function"==typeof M.components?M.components(I):M.components||I:T(M.components),D.createElement(g.Provider,{value:j},M.children)}},59397:(M,j,N)=>{N.r(j),N.d(j,{assets:()=>u,contentTitle:()=>y,default:()=>E,frontMatter:()=>T,metadata:()=>D,toc:()=>A});const D=JSON.parse('{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","source":"@site/docs/Deployment/deployment-render.mdx","sourceDirName":"Deployment","slug":"/deployment-render","permalink":"/deployment-render","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Render","slug":"/deployment-render"},"sidebar":"docs","previous":{"title":"Railway","permalink":"/deployment-railway"},"next":{"title":"Components overview","permalink":"/concepts-components"}}');var I=N(74848),g=N(28453);const T={title:"Deploy Langflow on Render",slug:"/deployment-render"},y=void 0,u={},A=[];function x(M){const j={a:"a",code:"code",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,g.R)(),...M.components};return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(j.p,{children:["This guide explains how to deploy Langflow on ",(0,I.jsx)(j.a,{href:"https://render.com/",children:"Render"}),", a cloud platform for deploying web applications and APIs."]}),"\n",(0,I.jsxs)(j.ol,{children:["\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsx)(j.p,{children:"Prepare a Render instance that can support Langflow."}),"\n",(0,I.jsxs)(j.p,{children:["Langflow requires at least 2 GB of RAM to run, so you must use a Render instance type of ",(0,I.jsx)(j.strong,{children:"Standard"})," or better.\nThis requires a paid Render account.\nFor more information, see ",(0,I.jsx)(j.a,{href:"https://render.com/docs/web-services",children:"Render Web Services"})," and ",(0,I.jsx)(j.a,{href:"https://render.com/pricing",children:"Render pricing"}),"."]}),"\n"]}),"\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsx)(j.p,{children:"Follow this link to start a Langflow deployment on Render:"}),"\n",(0,I.jsx)(j.p,{children:(0,I.jsx)(j.a,{href:"https://render.com/deploy?repo=https%3A%2F%2Fgithub.com%2Flangflow-ai%2Flangflow%2Ftree%2Fdev",children:(0,I.jsx)(j.img,{alt:"Deploy to Render",src:N(1975).A+"",width:"153",height:"40"})})}),"\n"]}),"\n",(0,I.jsxs)(j.li,{children:["\n",(0,I.jsxs)(j.p,{children:["Enter a blueprint name, select the branch for your ",(0,I.jsx)(j.code,{children:"render.yaml"})," file, and then click ",(0,I.jsx)(j.strong,{children:"Deploy Blueprint"}),"."]}),"\n"]}),"\n"]}),"\n",(0,I.jsx)(j.p,{children:"When deployment is complete, your Langflow instance is ready to use."})]})}function E(M={}){const{wrapper:j}={...(0,g.R)(),...M.components};return j?(0,I.jsx)(j,{...M,children:(0,I.jsx)(x,{...M})}):x(M)}}}]); \ No newline at end of file diff --git a/assets/js/7f193c41.1ee56d1a.js b/assets/js/7f193c41.1ee56d1a.js new file mode 100644 index 0000000000..c1d8d8e97e --- /dev/null +++ b/assets/js/7f193c41.1ee56d1a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5761],{14876:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>h,assets:()=>l,chCodeConfig:()=>p,contentTitle:()=>c,default:()=>j,frontMatter:()=>d,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-data","title":"Data","description":"You can use Langflow\'s Data components to bring data into your flows from various sources like files, API endpoints, and URLs.","source":"@site/docs/Components/components-data.mdx","sourceDirName":"Components","slug":"/components-data","permalink":"/components-data","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Data","slug":"/components-data"},"sidebar":"docs","previous":{"title":"Embedding Model","permalink":"/components-embedding-models"},"next":{"title":"Vector Stores","permalink":"/components-vector-stores"}}');var r=t(74848),o=t(28453),a=t(24754),i=t(17886);const d={title:"Data",slug:"/components-data"},c=void 0,l={},h={annotations:a.hk,Code:a.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Use data components in flows",id:"use-data-components-in-flows",level:2},{value:"API Request",id:"api-request",level:2},{value:"API Request parameters",id:"api-request-parameters",level:3},{value:"Directory",id:"directory",level:2},{value:"Directory parameters",id:"directory-parameters",level:3},{value:"File",id:"file",level:2},{value:"File type and size limits",id:"file-type-and-size-limits",level:3},{value:"File parameters",id:"file-parameters",level:3},{value:"File output",id:"file-output",level:3},{value:"News Search",id:"news-search",level:2},{value:"News Search parameters",id:"news-search-parameters",level:3},{value:"RSS Reader",id:"rss-reader",level:2},{value:"RSS Reader parameters",id:"rss-reader-parameters",level:3},{value:"SQL Database",id:"sql-database",level:2},{value:"Query an SQL database with natural language prompts",id:"query-an-sql-database-with-natural-language-prompts",level:3},{value:"SQL Database parameters",id:"sql-database-parameters",level:3},{value:"URL",id:"url",level:2},{value:"URL parameters",id:"url-parameters",level:3},{value:"URL output",id:"url-output",level:3},{value:"Web Search",id:"web-search",level:2},{value:"Use the Web Search component in a flow",id:"use-the-web-search-component-in-a-flow",level:3},{value:"Web Search parameters",id:"web-search-parameters",level:3},{value:"Web Search output",id:"web-search-output",level:3},{value:"Webhook",id:"webhook",level:2},{value:"Trigger the webhook",id:"trigger-the-webhook",level:3},{value:"Webhook parameters",id:"webhook-parameters",level:3},{value:"Additional data components",id:"additional-data-components",level:2},{value:"Legacy data components",id:"legacy-data-components",level:2},{value:"See also",id:"see-also",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components},{Details:s}=n;return h||m("CH",!1),h.Code||m("CH.Code",!0),s||m("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.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","\n",(0,r.jsxs)(n.p,{children:["You can use Langflow's ",(0,r.jsx)(n.strong,{children:"Data"})," components to bring data into your flows from various sources like files, API endpoints, and URLs.\nFor example:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Load files"}),": Import data from a file or directory with the ",(0,r.jsx)(n.a,{href:"#file",children:(0,r.jsx)(n.strong,{children:"File"})})," and ",(0,r.jsx)(n.a,{href:"#directory",children:(0,r.jsx)(n.strong,{children:"Directory"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Search the web"}),": Fetch data from the web with components like the ",(0,r.jsx)(n.a,{href:"#news-search",children:(0,r.jsx)(n.strong,{children:"News Search"})}),", ",(0,r.jsx)(n.a,{href:"#rss-reader",children:(0,r.jsx)(n.strong,{children:"RSS Reader"})}),", ",(0,r.jsx)(n.a,{href:"#web-search",children:(0,r.jsx)(n.strong,{children:"Web Search"})}),", and ",(0,r.jsx)(n.a,{href:"#url",children:(0,r.jsx)(n.strong,{children:"URL"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Make API calls"}),": Use APIs to trigger flows or perform actions with the ",(0,r.jsx)(n.a,{href:"#api-request",children:(0,r.jsx)(n.strong,{children:"API Request"})})," and ",(0,r.jsx)(n.a,{href:"#webhook",children:(0,r.jsx)(n.strong,{children:"Webhook"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run SQL queries"}),": Query an SQL database with the ",(0,r.jsx)(n.a,{href:"#sql-database",children:(0,r.jsx)(n.strong,{children:"SQL Database"})})," component."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Each component runs different commands for retrieval, processing, and type checking.\nSome components are a minimal wrapper for a command that you provide, and others include built-in scripts to fetch and process data based on variable inputs.\nAdditionally, some components return raw data, whereas others can convert, restructure, or validate the data before outputting it.\nThis means that some similar components might produce different results."}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Data"})," components pair well with ",(0,r.jsxs)(n.a,{href:"/components-processing",children:[(0,r.jsx)(n.strong,{children:"Processing"})," components"]})," that can perform additional parsing, transformation, and validation after retrieving the data."]}),(0,r.jsxs)(n.p,{children:["This can include basic operations, like saving a file in a specific format, or more complex tasks, like using a ",(0,r.jsx)(n.strong,{children:"Text Splitter"})," component to break down a large document into smaller chunks before generating embeddings for vector search."]})]}),"\n",(0,r.jsx)(n.h2,{id:"use-data-components-in-flows",children:"Use data components in flows"}),"\n",(0,r.jsx)(n.p,{children:"Data components are used often in flows because they offer a versatile way to perform common, basic functions."}),"\n",(0,r.jsxs)(n.p,{children:["You can use data components to perform their base functions as isolated steps in your flow, or you can connect them to an ",(0,r.jsx)(n.strong,{children:"Agent"})," component as tools."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"An agentic flow with three data components connected to the agent as tools",src:t(84987).A+"",width:"4000",height:"3028"})}),"\n",(0,r.jsx)(n.p,{children:"For examples of data components in flows, see the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),": Learn how to use a ",(0,r.jsx)(n.strong,{children:"File"})," component to load a file as context for a chatbot.\nThe file and user input are both passed to the LLM so you can ask questions about the file you uploaded."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/chat-with-rag",children:"Create a vector RAG chatbot"}),": Learn how to ingest files for use in Retrieval-Augmented Generation (RAG), and then set up a chatbot that can use the ingested files as context.\nThe two flows in this tutorial prepare files for RAG, and then let your LLM use vector search to retrieve contextually relevant data during a chat session."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/agents-tools",children:"Configure tools for agents"}),": Learn how to use any component as a tool for an agent.\nWhen used as tools, the agent autonomously decides when to call a component based on the user's query."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),": Learn how to use the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component to trigger a flow run in response to an external event."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"api-request",children:"API Request"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"API Request"})," component constructs and sends an HTTP requests using URLs or curl commands:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"URL mode"}),": Enter one or more comma-separated URLs, and then select the method for the request to each URL."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"curl mode"}),": Enter the curl command to execute."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You can enable additional request options and fields in the component's parameters."}),"\n",(0,r.jsxs)(n.p,{children:["Returns a ",(0,r.jsxs)(n.a,{href:"/data-types#data",children:[(0,r.jsx)(n.code,{children:"Data"})," object"]})," containing the response."]}),"\n",(0,r.jsxs)(n.p,{children:["For provider-specific API components, see ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"Bundles"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"api-request-parameters",children:"API Request parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"API Request"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"mode"}),(0,r.jsx)(n.td,{children:"Mode"}),(0,r.jsxs)(n.td,{children:["Input parameter. Set the mode to either ",(0,r.jsx)(n.strong,{children:"URL"})," or ",(0,r.jsx)(n.strong,{children:"curl"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"urls"}),(0,r.jsx)(n.td,{children:"URL"}),(0,r.jsx)(n.td,{children:"Input parameter. Enter one or more comma-separated URLs for the request."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"curl"}),(0,r.jsx)(n.td,{children:"cURL"}),(0,r.jsxs)(n.td,{children:["Input parameter. ",(0,r.jsx)(n.strong,{children:"curl mode"})," only. Enter a complete curl command. Other component parameters are populated from the command arguments."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"method"}),(0,r.jsx)(n.td,{children:"Method"}),(0,r.jsx)(n.td,{children:"Input parameter. The HTTP method to use."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query_params"}),(0,r.jsx)(n.td,{children:"Query Parameters"}),(0,r.jsx)(n.td,{children:"Input parameter. The query parameters to append to the URL."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"body"}),(0,r.jsx)(n.td,{children:"Body"}),(0,r.jsx)(n.td,{children:"Input parameter. The body to send with POST, PATCH, and PUT requests as a dictionary."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"headers"}),(0,r.jsx)(n.td,{children:"Headers"}),(0,r.jsx)(n.td,{children:"Input parameter. The headers to send with the request as a dictionary."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. The timeout to use for the request."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"follow_redirects"}),(0,r.jsx)(n.td,{children:"Follow Redirects"}),(0,r.jsx)(n.td,{children:"Input parameter. Whether to follow http redirects. Default: Enabled/true"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"save_to_file"}),(0,r.jsx)(n.td,{children:"Save to File"}),(0,r.jsx)(n.td,{children:"Input parameter. Whether to save the API response to a temporary file. Default: Disabled/false"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"include_httpx_metadata"}),(0,r.jsx)(n.td,{children:"Include HTTPx Metadata"}),(0,r.jsxs)(n.td,{children:["Input parameter. Whether to include properties such as ",(0,r.jsx)(n.code,{children:"headers"}),", ",(0,r.jsx)(n.code,{children:"status_code"}),", ",(0,r.jsx)(n.code,{children:"response_headers"}),", and ",(0,r.jsx)(n.code,{children:"redirection_history"})," in the output. Default: Disabled/false"]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"directory",children:"Directory"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Directory"})," component recursively loads files from a directory, with options for file types, depth, and concurrency."]}),"\n",(0,r.jsxs)(n.p,{children:["Files must be of a ",(0,r.jsx)(n.a,{href:"#file-type-and-size-limits",children:"supported type and size"})," to be loaded."]}),"\n",(0,r.jsxs)(n.p,{children:["Outputs either a ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," or ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," object, depending on the directory contents."]}),"\n",(0,r.jsx)(n.h3,{id:"directory-parameters",children:"Directory parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Many ",(0,r.jsx)(n.strong,{children:"Directory"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"path"}),(0,r.jsx)(n.td,{children:"MessageTextInput"}),(0,r.jsxs)(n.td,{children:["Input parameter. The path to the directory to load files from. Default: Current directory (",(0,r.jsx)(n.code,{children:"."}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"types"}),(0,r.jsx)(n.td,{children:"MessageTextInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The file types to load. Select one or more, or leave empty to attempt to load all files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"depth"}),(0,r.jsx)(n.td,{children:"IntInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The depth to search for files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_concurrency"}),(0,r.jsx)(n.td,{children:"IntInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The maximum concurrency for loading multiple files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"load_hidden"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, hidden files are loaded."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"recursive"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, the search is recursive."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"silent_errors"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, errors do not raise an exception."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"use_multithreading"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, multithreading is used."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"file",children:"File"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"File"})," component loads and parses files, converts the content into a ",(0,r.jsx)(n.code,{children:"Data"}),", ",(0,r.jsx)(n.code,{children:"DataFrame"}),", or ",(0,r.jsx)(n.code,{children:"Message"})," object.\nIt supports multiple file types and provides parameters for parallel processing and error handling."]}),"\n",(0,r.jsxs)(n.p,{children:["You can add files to the ",(0,r.jsx)(n.strong,{children:"File"})," component in the visual editor or at runtime, and you can upload multiple files at once.\nFor more information about uploading files and working with files in flows, see ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"File management"})," and ",(0,r.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"file-type-and-size-limits",children:"File type and size limits"}),"\n",(0,r.jsxs)(n.p,{children:["By default, the maximum file size is 100 MB.\nTo modify this value, change the ",(0,r.jsx)(n.code,{children:"--max-file-size-upload"})," ",(0,r.jsx)(n.a,{href:"/environment-variables",children:"environment variable"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Supported file types"}),(0,r.jsxs)(n.p,{children:["The following file types are supported by the ",(0,r.jsx)(n.strong,{children:"File"})," component.\nUse archive and compressed formats to bundle multiple files together, or use the ",(0,r.jsxs)(n.a,{href:"#directory",children:[(0,r.jsx)(n.strong,{children:"Directory"})," component"]})," to load all files in a directory."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".bz2"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".csv"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".docx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".gz"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".htm"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".html"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".json"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".js"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".md"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".mdx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".pdf"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".py"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".sh"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".sql"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tar"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tgz"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".ts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tsx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".txt"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".xml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".yaml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".yml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".zip"})}),"\n"]})]}),"\n",(0,r.jsx)(n.p,{children:"If you need to load an unsupported file type, you must use a different component that supports that file type and, potentially, parses it outside Langflow, or you must convert it to a supported type before uploading it."}),"\n",(0,r.jsxs)(n.p,{children:["For images, see ",(0,r.jsx)(n.a,{href:"/concepts-file-management#upload-images",children:"Upload images"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["For videos, see the ",(0,r.jsx)(n.strong,{children:"Twelve Labs"})," and ",(0,r.jsx)(n.strong,{children:"YouTube"})," ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," in the Langflow ",(0,r.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,r.jsx)(n.h3,{id:"file-parameters",children:"File parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"File"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"path"}),(0,r.jsx)(n.td,{children:"Files"}),(0,r.jsxs)(n.td,{children:["Input parameter. The path to files to load. Can be local or in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"}),". Supports individual files and bundled archives."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"file_path"}),(0,r.jsx)(n.td,{children:"Server File Path"}),(0,r.jsxs)(n.td,{children:["Input parameter. A ",(0,r.jsx)(n.code,{children:"Data"})," object with a ",(0,r.jsx)(n.code,{children:"file_path"})," property pointing to a file in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"})," or a ",(0,r.jsx)(n.code,{children:"Message"})," object with a path to the file. Supersedes ",(0,r.jsx)(n.strong,{children:"Files"})," (",(0,r.jsx)(n.code,{children:"path"}),") but supports the same file types."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"separator"}),(0,r.jsx)(n.td,{children:"Separator"}),(0,r.jsxs)(n.td,{children:["Input parameter. The separator to use between multiple outputs in ",(0,r.jsx)(n.code,{children:"Message"})," format."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"silent_errors"}),(0,r.jsx)(n.td,{children:"Silent Errors"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, errors in the component don't raise an exception. The default is false/disabled."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"delete_server_file_after_processing"}),(0,r.jsx)(n.td,{children:"Delete Server File After Processing"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true (default), the ",(0,r.jsx)(n.strong,{children:"Server File Path"})," (",(0,r.jsx)(n.code,{children:"file_path"}),") is deleted after processing."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ignore_unsupported_extensions"}),(0,r.jsx)(n.td,{children:"Ignore Unsupported Extensions"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true/enabled (default), files with unsupported extensions are accepted but not processed. If false/disabled, the ",(0,r.jsx)(n.strong,{children:"File"})," component either can throw an error if an unsupported file type is provided."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ignore_unspecified_files"}),(0,r.jsx)(n.td,{children:"Ignore Unspecified Files"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true, ",(0,r.jsx)(n.code,{children:"Data"})," with no ",(0,r.jsx)(n.code,{children:"file_path"})," property is ignored. If false (default), the component errors when a file is not specified."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"concurrency_multithreading"}),(0,r.jsx)(n.td,{children:"Processing Concurrency"}),(0,r.jsx)(n.td,{children:"Input parameter. The number of files to process concurrently if multiple files are uploaded. Default is 1. Values greater than 1 enable parallel processing for 2 or more files."})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"file-output",children:"File output"}),"\n",(0,r.jsxs)(n.p,{children:["The output of the ",(0,r.jsx)(n.strong,{children:"File"})," component depends on the number and type of files loaded:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No files"}),": Throws an error or, if ",(0,r.jsx)(n.strong,{children:"Silent Errors"})," is enabled, produces no output."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"One file"}),": Produces one of the following depending on the file type. If multiple types are available, you can select the output type by clicking the output field (near the component's output port)."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Structured Content"}),": Available for some tabular and structured data.\nFor ",(0,r.jsx)(n.code,{children:".csv"})," files, produces a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," representing the table data.\nFor ",(0,r.jsx)(n.code,{children:".json"})," files, produces a ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," object with the parsed JSON data."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Raw Content"}),": A ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the file's raw text content."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"File Path"}),": A ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the path to the file in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Multiple files"}),": Produces a ",(0,r.jsx)(n.strong,{children:"Files"})," ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing the content and metadata of all selected files."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"news-search",children:"News Search"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"News Search"})," component searches Google News through RSS, and then returns clean article data as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing article titles, links, publication dates, and summaries.\nThe component's ",(0,r.jsx)(n.code,{children:"clean_html"})," method parses the HTML content with the BeautifulSoup library, removes HTML markup, and strips whitespace to output clean data."]}),"\n",(0,r.jsxs)(n.p,{children:["For other RSS feeds, use the ",(0,r.jsxs)(n.a,{href:"#rss-reader",children:[(0,r.jsx)(n.strong,{children:"RSS Reader"})," component"]}),", and for other searches use the ",(0,r.jsxs)(n.a,{href:"#web-search",children:[(0,r.jsx)(n.strong,{children:"Web Search"})," component"]})," or a provider-specific ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundle"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"News Search"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input.\nYou can connect the ",(0,r.jsx)(n.strong,{children:"News Search"})," component directly to a compatible component, or you can use a ",(0,r.jsx)(n.a,{href:"/components-processing",children:"processing component"})," to convert or extract data of a different type between components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"News Search"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"News Search"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h3,{id:"news-search-parameters",children:"News Search parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"News Search"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"Search Query"}),(0,r.jsx)(n.td,{children:"Input parameter. Search keywords for news articles."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"hl"}),(0,r.jsx)(n.td,{children:"Language (hl)"}),(0,r.jsxs)(n.td,{children:["Input parameter. Language code, such as en-US, fr, de. Default: ",(0,r.jsx)(n.code,{children:"en-US"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"gl"}),(0,r.jsx)(n.td,{children:"Country (gl)"}),(0,r.jsxs)(n.td,{children:["Input parameter. Country code, such as US, FR, DE. Default: ",(0,r.jsx)(n.code,{children:"US"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ceid"}),(0,r.jsxs)(n.td,{children:["Country",":Language"," (ceid)"]}),(0,r.jsxs)(n.td,{children:["Input parameter. Language, such as US",":en",", FR",":fr",". Default: ",(0,r.jsx)(n.code,{children:"US:en"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"topic"}),(0,r.jsx)(n.td,{children:"Topic"}),(0,r.jsxs)(n.td,{children:["Input parameter. One of: ",(0,r.jsx)(n.code,{children:"WORLD"}),", ",(0,r.jsx)(n.code,{children:"NATION"}),", ",(0,r.jsx)(n.code,{children:"BUSINESS"}),", ",(0,r.jsx)(n.code,{children:"TECHNOLOGY"}),", ",(0,r.jsx)(n.code,{children:"ENTERTAINMENT"}),", ",(0,r.jsx)(n.code,{children:"SCIENCE"}),", ",(0,r.jsx)(n.code,{children:"SPORTS"}),", ",(0,r.jsx)(n.code,{children:"HEALTH"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"location"}),(0,r.jsx)(n.td,{children:"Location (Geo)"}),(0,r.jsx)(n.td,{children:"Input parameter. City, state, or country for location-based news. Leave blank for keyword search."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. Timeout for the request in seconds."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"articles"}),(0,r.jsx)(n.td,{children:"News Articles"}),(0,r.jsxs)(n.td,{children:["Output parameter. A ",(0,r.jsx)(n.code,{children:"DataFrame"})," with the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"link"}),", ",(0,r.jsx)(n.code,{children:"published"})," and ",(0,r.jsx)(n.code,{children:"summary"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"rss-reader",children:"RSS Reader"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component fetches and parses RSS feeds from any valid RSS feed URL, and then returns the feed content as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing article titles, links, publication dates, and summaries."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input.\nYou can connect the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component directly to a compatible component, or you can use a ",(0,r.jsx)(n.a,{href:"/components-processing",children:"processing component"})," to convert or extract data of a different type between components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h3,{id:"rss-reader-parameters",children:"RSS Reader parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"rss_url"}),(0,r.jsx)(n.td,{children:"RSS Feed URL"}),(0,r.jsxs)(n.td,{children:["Input parameter. URL of the RSS feed to parse, such as ",(0,r.jsx)(n.code,{children:"https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsxs)(n.td,{children:["Input parameter. Timeout for the RSS feed request in seconds. Default: ",(0,r.jsx)(n.code,{children:"5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"articles"}),(0,r.jsx)(n.td,{children:"Articles"}),(0,r.jsxs)(n.td,{children:["Output parameter. A ",(0,r.jsx)(n.code,{children:"DataFrame"})," containing the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"link"}),", ",(0,r.jsx)(n.code,{children:"published"})," and ",(0,r.jsx)(n.code,{children:"summary"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"sql-database",children:"SQL Database"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component executes SQL queries on ",(0,r.jsx)(n.a,{href:"https://docs.sqlalchemy.org/en/20/",children:"SQLAlchemy-compatible databases"}),".\nIt supports any SQLAlchemy-compatible database, such as PostgreSQL, MySQL, and SQLite."]}),"\n",(0,r.jsxs)(n.p,{children:["For CQL queries, see the ",(0,r.jsxs)(n.a,{href:"/bundles-datastax",children:[(0,r.jsx)(n.strong,{children:"DataStax"})," bundle"]}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"query-an-sql-database-with-natural-language-prompts",children:"Query an SQL database with natural language prompts"}),"\n",(0,r.jsxs)(n.p,{children:["The following example demonstrates how to use the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component in a flow, and then modify the component to support natural language queries through an ",(0,r.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,r.jsxs)(n.p,{children:["This allows you to use the same ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component for any query, rather than limiting it to a single manually entered query or requiring the user, application, or another component to provide valid SQL syntax as input.\nUsers don't need to master SQL syntax because the ",(0,r.jsx)(n.strong,{children:"Agent"})," component translates the users' natural language prompts into SQL queries, passes the query to the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component, and then returns the results to the user."]}),"\n",(0,r.jsx)(n.p,{children:"Additionally, input from applications and other components doesn't have to be extracted and transformed to exact SQL queries.\nInstead, you only need to provide enough context for the agent to understand that it should create and run a SQL query according to the incoming data."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Use your own sample database or create a test database."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Create a test SQL database"}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a database called ",(0,r.jsx)(n.code,{children:"test.db"}),":"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:"test.db",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add some values to the database:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:'test.db "',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"CREATE TABLE users (",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" id INTEGER PRIMARY KEY,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name TEXT,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" email TEXT,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" age INTEGER",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:");",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"INSERT INTO users (name, email, age) VALUES",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('John Doe', 'john@example.com', 30),",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('Jane Smith', 'jane@example.com', 25),",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('Bob Johnson', 'bob@example.com', 35);",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:'"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Verify that the database has been created and contains your data:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:'test.db "SELECT * FROM users;"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,r.jsx)(n.p,{children:"The result should list the text data you entered in the previous step:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"1",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"John ",props:{style:{color:"#FFA657"}}},{content:"Doe",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"john@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"2",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"Jane ",props:{style:{color:"#FFA657"}}},{content:"Smith",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"jane@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"3",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"John ",props:{style:{color:"#FFA657"}}},{content:"Doe",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"john@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"4",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"Jane ",props:{style:{color:"#FFA657"}}},{content:"Smith",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"jane@example.com",props:{style:{color:"#FFA657"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n"]})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add an ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component to your flow."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Database URL"})," field, add the connection string for your database, such as ",(0,r.jsx)(n.code,{children:"sqlite:///test.db"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["At this point, you can enter an SQL query in the ",(0,r.jsx)(n.strong,{children:"SQL Query"})," field or use the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-ports",children:"port"})," to pass a query from another component, such as a ",(0,r.jsx)(n.strong,{children:"Chat Input"})," component.\nIf you need more space, click ",(0,r.jsx)(i.A,{name:"Expand","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Expand"})," to open a full-screen text field."]}),"\n",(0,r.jsxs)(n.p,{children:["However, to make this component more dynamic in an agentic context, use an ",(0,r.jsx)(n.strong,{children:"Agent"})," component to transform natural language input to SQL queries, as explained in the following steps."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component to expose the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", and then enable ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can now use this component as a tool for an agent.\nIn ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),", no query is set in the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component because the agent will generate and send one if it determines that the tool is required to complete the user's request.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/agents-tools",children:"Configure tools for agents"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add an ",(0,r.jsx)(n.strong,{children:"Agent"})," component to your flow, and then enter your OpenAI API key."]}),"\n",(0,r.jsxs)(n.p,{children:["The default model is an OpenAI model.\nIf you want to use a different model, edit the ",(0,r.jsx)(n.strong,{children:"Model Provider"}),", ",(0,r.jsx)(n.strong,{children:"Model Name"}),", and ",(0,r.jsx)(n.strong,{children:"API Key"})," fields accordingly."]}),"\n",(0,r.jsxs)(n.p,{children:["If you need to execute highly specialized queries, consider selecting a model that is trained for tasks like advanced SQL queries.\nIf your preferred model isn't in the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's built-in model list, select the ",(0,r.jsx)(n.strong,{children:"Custom"})," model provider, and then use a ",(0,r.jsxs)(n.a,{href:"/components-models",children:[(0,r.jsx)(n.strong,{children:"Language Model"})," component"]})," to attach a specific model."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Connect the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component's ",(0,r.jsx)(n.strong,{children:"Toolset"})," output to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," input."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"SQL database connected to agent",src:t(52189).A+"",width:"4000",height:"2400"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Playground"}),", and then ask the agent a question about the data in your database, such as ",(0,r.jsx)(n.code,{children:"Which users are in my database?"})]}),"\n",(0,r.jsxs)(n.p,{children:["The agent determines that it needs to query the database to answer the question, uses the LLM to generate an SQL query, and then uses the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component's ",(0,r.jsx)(n.code,{children:"RUN_SQL_QUERY"})," action to run the query on your database.\nFinally, it returns the results in a conversational format, unless you provide instructions to return raw results or a different format."]}),"\n",(0,r.jsx)(n.p,{children:"The following example queried a test database with little data, but with a more robust dataset you could ask more detailed or complex questions."}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Here are the users in your database:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"1. **John Doe** - Email: john@example.com",props:{}}]},{tokens:[{content:"2. **Jane Smith** - Email: jane@example.com",props:{}}]},{tokens:[{content:"3. **John Doe** - Email: john@example.com",props:{}}]},{tokens:[{content:"4. **Jane Smith** - Email: jane@example.com",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"It seems there are duplicate entries for the users.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"sql-database-parameters",children:"SQL Database parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Some ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"database_url"}),(0,r.jsx)(n.td,{children:"Database URL"}),(0,r.jsx)(n.td,{children:"Input parameter. The SQLAlchemy-compatible database connection URL."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"SQL Query"}),(0,r.jsxs)(n.td,{children:["Input parameter. The SQL query to execute, which can be entered directly, passed in from another component, or, in ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),", automatically provided by an ",(0,r.jsx)(n.strong,{children:"Agent"})," component."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"include_columns"}),(0,r.jsx)(n.td,{children:"Include Columns"}),(0,r.jsxs)(n.td,{children:["Input parameter. If enabled, includes column names in the result. The default is enabled (",(0,r.jsx)(n.code,{children:"true"}),")."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"add_error"}),(0,r.jsx)(n.td,{children:"Add Error"}),(0,r.jsxs)(n.td,{children:["Input parameter. If enabled, adds any error messages to the result, if any are returned. The default is disabled (",(0,r.jsx)(n.code,{children:"false"}),")."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"run_sql_query"}),(0,r.jsx)(n.td,{children:"Result Table"}),(0,r.jsxs)(n.td,{children:["Output parameter. The query results as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"url",children:"URL"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"URL"})," component fetches content from one or more URLs, processes the content, and returns it in various formats.\nIt follows links recursively to a given depth, and it supports output in plain text or raw HTML."]}),"\n",(0,r.jsx)(n.h3,{id:"url-parameters",children:"URL parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"URL"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Some of the available parameters include the following:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"urls"}),(0,r.jsx)(n.td,{children:"URLs"}),(0,r.jsxs)(n.td,{children:["Input parameter. One or more URLs to crawl recursively. In the visual editor, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Add URL"})," to add multiple URLs."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_depth"}),(0,r.jsx)(n.td,{children:"Depth"}),(0,r.jsx)(n.td,{children:'Input parameter. Controls link traversal: how many "clicks" away from the initial page the crawler will go. A depth of 1 limits the crawl to the first page at the given URL only. A depth of 2 means the crawler crawls the first page plus each page directly linked from the first page, then stops. This setting exclusively controls link traversal; it doesn\'t limit the number of URL path segments or the domain.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"prevent_outside"}),(0,r.jsx)(n.td,{children:"Prevent Outside"}),(0,r.jsx)(n.td,{children:"Input parameter. If enabled, only crawls URLs within the same domain as the root URL. This prevents the crawler from accessing sites outside the given URL's domain, even if they are linked from one of the crawled pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"use_async"}),(0,r.jsx)(n.td,{children:"Use Async"}),(0,r.jsx)(n.td,{children:"Input parameter. If enabled, uses asynchronous loading which can be significantly faster but might use more system resources."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"format"}),(0,r.jsx)(n.td,{children:"Output Format"}),(0,r.jsxs)(n.td,{children:["Input parameter. Sets the desired output format as ",(0,r.jsx)(n.strong,{children:"Text"})," or ",(0,r.jsx)(n.strong,{children:"HTML"}),". The default is ",(0,r.jsx)(n.strong,{children:"Text"}),". For more information, see ",(0,r.jsx)(n.a,{href:"#url-output",children:"URL output"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. Timeout for the request in seconds."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"headers"}),(0,r.jsx)(n.td,{children:"Headers"}),(0,r.jsx)(n.td,{children:"Input parameter. The headers to send with the request if needed for authentication or otherwise."})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Additional input parameters are available for error handling and encoding."}),"\n",(0,r.jsx)(n.h3,{id:"url-output",children:"URL output"}),"\n",(0,r.jsxs)(n.p,{children:["There are two settings that control the output of the ",(0,r.jsx)(n.strong,{children:"URL"})," component at different stages:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Output Format"}),": This optional parameter controls the content extracted from the crawled pages:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Text (default)"}),": The component extracts only the text from the HTML of the crawled pages."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"HTML"}),": The component extracts the entire raw HTML content of the crawled pages."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Output data type"}),": In the component's output field (near the output port) you can select the structure of the outgoing data when it is passed to other components:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Extracted Pages"}),": Outputs a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," that breaks the crawled pages into columns for the entire page content (",(0,r.jsx)(n.code,{children:"text"}),") and metadata like ",(0,r.jsx)(n.code,{children:"url"})," and ",(0,r.jsx)(n.code,{children:"title"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Raw Content"}),": Outputs a ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the entire text or HTML from the crawled pages, including metadata, in a single block of text."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"URL"})," component must be connected to a component that accepts the selected output data type (",(0,r.jsx)(n.code,{children:"DataFrame"})," or ",(0,r.jsx)(n.code,{children:"Message"}),").\nYou can connect the ",(0,r.jsx)(n.strong,{children:"URL"})," component directly to a compatible component, or you can use a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]})," to convert the output to another type before passing the data to other components if the data types aren't directly compatible."]}),"\n",(0,r.jsxs)(n.p,{children:["Processing components, like the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component, are useful with the ",(0,r.jsx)(n.strong,{children:"URL"})," component because it can extract a large amount of data from the crawled pages.\nFor example, if you only want to pass specific fields to other components, you can use a ",(0,r.jsxs)(n.a,{href:"/components-processing#parser",children:[(0,r.jsx)(n.strong,{children:"Parser"})," component"]})," to extract only that data from the crawled pages before passing the data to other components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"URL"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"URL"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," or ",(0,r.jsx)(n.code,{children:"Message"})," output directly."]}),"\n",(0,r.jsx)(n.h2,{id:"web-search",children:"Web Search"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component performs a basic web search using DuckDuckGo's HTML scraping interface.\nFor other search APIs, see ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"Bundles"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"important",children:[(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component uses web scraping that can be subject to rate limits."]}),(0,r.jsxs)(n.p,{children:["For production use, consider using another search component with more robust API support, such as a provider-specific ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundle"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"use-the-web-search-component-in-a-flow",children:"Use the Web Search component in a flow"}),"\n",(0,r.jsxs)(n.p,{children:["The following steps demonstrate one way that you can use a ",(0,r.jsx)(n.strong,{children:"Web Search"})," component in a flow:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a flow based on the ",(0,r.jsxs)(n.a,{href:"/basic-prompting",children:[(0,r.jsx)(n.strong,{children:"Basic Prompting"})," template"]}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.strong,{children:"Web Search"})," component, and then enter a search query, such as ",(0,r.jsx)(n.code,{children:"environmental news"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]}),", set the ",(0,r.jsx)(n.strong,{children:"Output Type"})," to ",(0,r.jsx)(n.strong,{children:"Message"}),", and then connect the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component's output to the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component's input."]}),"\n",(0,r.jsxs)(n.p,{children:["By default, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component outputs a ",(0,r.jsx)(n.code,{children:"DataFrame"}),".\nBecause the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component only accepts ",(0,r.jsx)(n.code,{children:"Message"})," data, this conversion is required so that the flow can pass the search results to the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component.\nFor more information, see ",(0,r.jsx)(n.a,{href:"#web-search-output",children:"Web Search output"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component's ",(0,r.jsx)(n.strong,{children:"Template"})," field, add a variable like ",(0,r.jsx)(n.code,{children:"{searchresults}"})," or ",(0,r.jsx)(n.code,{children:"{context}"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["This adds a field to the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component that you can use to pass the converted search results to the prompt."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Connect the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component's output to the new variable field on the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Type convert web search output to chat",src:t(42547).A+"",width:"4000",height:"1826"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Language Model"})," component, add your OpenAI API key, or select a different provider and model."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Playground"}),", and then enter ",(0,r.jsx)(n.code,{children:"latest news"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The LLM processes the request, including the context passed through the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component, and then prints the response in the ",(0,r.jsx)(n.strong,{children:"Playground"})," chat interface."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Result"}),(0,r.jsx)(n.p,{children:"The following is an example of a possible response.\nYour response may vary based on the current state of the web, your specific query, the model, and other factors."}),(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Here are some of the latest news articles related to the environment:",props:{}}]},{tokens:[{content:"Ozone Pollution and Global Warming: A recent study highlights that ozone pollution is a significant global environmental concern, threatening human health and crop production while exacerbating global warming. Read more",props:{}}]},{tokens:[{content:"...",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"web-search-parameters",children:"Web Search parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"Search Query"}),(0,r.jsx)(n.td,{children:"Input parameter. Keywords to search for."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsxs)(n.td,{children:["Input parameter. Timeout for the web search request in seconds. Default: ",(0,r.jsx)(n.code,{children:"5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"results"}),(0,r.jsx)(n.td,{children:"Search Results"}),(0,r.jsxs)(n.td,{children:["Output parameter. Returns a ",(0,r.jsx)(n.code,{children:"DataFrame"})," containing ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"links"}),", and ",(0,r.jsx)(n.code,{children:"snippets"}),". For more information, see ",(0,r.jsx)(n.a,{href:"#web-search-output",children:"Web Search output"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"web-search-output",children:"Web Search output"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component outputs a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"links"}),", and ",(0,r.jsx)(n.code,{children:"snippets"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input, or you must use a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]})," to convert the output to ",(0,r.jsx)(n.code,{children:"Data"})," or ",(0,r.jsx)(n.code,{children:"Message"})," type before passing the data to other components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h2,{id:"webhook",children:"Webhook"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Webhook"})," component defines a webhook trigger that runs a flow when it receives an HTTP POST request."]}),"\n",(0,r.jsx)(n.h3,{id:"trigger-the-webhook",children:"Trigger the webhook"}),"\n",(0,r.jsxs)(n.p,{children:["When you add a ",(0,r.jsx)(n.strong,{children:"Webhook"})," component to your flow, a ",(0,r.jsx)(n.strong,{children:"Webhook cURL"})," tab is added to the flow's ",(0,r.jsxs)(n.a,{href:"/concepts-publish#api-access",children:[(0,r.jsx)(n.strong,{children:"API Access"})," pane"]}),".\nThis tab automatically generates an HTTP POST request code snippet that you can use to trigger your flow through the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component.\nFor example:"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,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://',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_ADDRESS",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/webhook/",props:{style:{color:"#A5D6FF"}}},{content:"$FLOW_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',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: $LANGFLOW_API_KEY' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"any": "data"}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"webhook-parameters",children:"Webhook parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"data"}),(0,r.jsx)(n.td,{children:"Payload"}),(0,r.jsx)(n.td,{children:"Input parameter. Receives a payload from external systems through HTTP POST requests."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"curl"}),(0,r.jsx)(n.td,{children:"cURL"}),(0,r.jsx)(n.td,{children:"Input parameter. The cURL command template for making requests to this webhook."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"endpoint"}),(0,r.jsx)(n.td,{children:"Endpoint"}),(0,r.jsx)(n.td,{children:"Input parameter. The endpoint URL where this webhook receives requests."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"output_data"}),(0,r.jsx)(n.td,{children:"Data"}),(0,r.jsxs)(n.td,{children:["Output parameter. The processed data from the webhook input. Returns an empty ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," object if no input is provided. If the input is not valid JSON, the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component wraps it in a ",(0,r.jsx)(n.code,{children:"payload"})," object so that it can be accepted as input to trigger the flow."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"additional-data-components",children:"Additional data components"}),"\n",(0,r.jsx)(n.p,{children:"Langflow's core components are meant to be generic and support a range of use cases.\nCore components are typically not limited to a single provider."}),"\n",(0,r.jsxs)(n.p,{children:["If the core data components don't meet your needs, you can find provider-specific components in the ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})})," section of the ",(0,r.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,r.jsxs)(n.p,{children:["For example, the ",(0,r.jsxs)(n.a,{href:"/bundles-datastax",children:[(0,r.jsx)(n.strong,{children:"DataStax"})," bundle"]})," includes components for CQL queries, and the ",(0,r.jsxs)(n.a,{href:"/bundles-google",children:[(0,r.jsx)(n.strong,{children:"Google"})," bundle"]})," includes components for Google Search APIs."]}),"\n",(0,r.jsx)(n.h2,{id:"legacy-data-components",children:"Legacy data components"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Load CSV"})," and ",(0,r.jsx)(n.strong,{children:"Load JSON"})," components are legacy components.\nYou can still use them in your flows, but they are no longer maintained and can be removed in a future release."]}),"\n",(0,r.jsxs)(n.p,{children:["Replace these components with the ",(0,r.jsx)(n.strong,{children:"File"})," component, which supports loading CSV and JSON files, as well as many other file types."]}),"\n",(0,r.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/bundles-google",children:"Google components"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/integrations-composio",children:"Composio components"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"File management"})}),"\n"]})]})}function j(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}function m(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},17886:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var s=t(64058),r=t(74848);function o({name:e,...n}){const t=s[e];return t?(0,r.jsx)(t,{...n}):null}},42547:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-type-convert-and-web-search-1eef7b9a7c1a243f4a08d9717728d0e1.png"},52189:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-sql-database-3d2c985aee2dd9970874cb85e1d2b570.png"},84987:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/connect-data-components-to-agent-a8cd8c94d0474ae434aeb5d507a803e8.png"}}]); \ No newline at end of file diff --git a/assets/js/7f193c41.905d0004.js b/assets/js/7f193c41.905d0004.js deleted file mode 100644 index d9ae9ed1ca..0000000000 --- a/assets/js/7f193c41.905d0004.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5761],{14876:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>h,assets:()=>l,chCodeConfig:()=>p,contentTitle:()=>c,default:()=>j,frontMatter:()=>d,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-data","title":"Data","description":"You can use Langflow\'s Data components to bring data into your flows from various sources like files, API endpoints, and URLs.","source":"@site/docs/Components/components-data.mdx","sourceDirName":"Components","slug":"/components-data","permalink":"/components-data","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Data","slug":"/components-data"},"sidebar":"docs","previous":{"title":"Embedding Model","permalink":"/components-embedding-models"},"next":{"title":"Vector Stores","permalink":"/components-vector-stores"}}');var r=t(74848),o=t(28453),a=t(24754),i=t(17886);const d={title:"Data",slug:"/components-data"},c=void 0,l={},h={annotations:a.hk,Code:a.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Use data components in flows",id:"use-data-components-in-flows",level:2},{value:"API Request",id:"api-request",level:2},{value:"API Request parameters",id:"api-request-parameters",level:3},{value:"Directory",id:"directory",level:2},{value:"Directory parameters",id:"directory-parameters",level:3},{value:"File",id:"file",level:2},{value:"File type and size limits",id:"file-type-and-size-limits",level:3},{value:"File parameters",id:"file-parameters",level:3},{value:"File output",id:"file-output",level:3},{value:"News Search",id:"news-search",level:2},{value:"News Search parameters",id:"news-search-parameters",level:3},{value:"RSS Reader",id:"rss-reader",level:2},{value:"RSS Reader parameters",id:"rss-reader-parameters",level:3},{value:"SQL Database",id:"sql-database",level:2},{value:"Query an SQL database with natural language prompts",id:"query-an-sql-database-with-natural-language-prompts",level:3},{value:"SQL Database parameters",id:"sql-database-parameters",level:3},{value:"URL",id:"url",level:2},{value:"URL parameters",id:"url-parameters",level:3},{value:"URL output",id:"url-output",level:3},{value:"Web Search",id:"web-search",level:2},{value:"Use the Web Search component in a flow",id:"use-the-web-search-component-in-a-flow",level:3},{value:"Web Search parameters",id:"web-search-parameters",level:3},{value:"Web Search output",id:"web-search-output",level:3},{value:"Webhook",id:"webhook",level:2},{value:"Trigger the webhook",id:"trigger-the-webhook",level:3},{value:"Webhook parameters",id:"webhook-parameters",level:3},{value:"Additional data components",id:"additional-data-components",level:2},{value:"Legacy data components",id:"legacy-data-components",level:2},{value:"See also",id:"see-also",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components},{Details:s}=n;return h||m("CH",!1),h.Code||m("CH.Code",!0),s||m("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.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","\n",(0,r.jsxs)(n.p,{children:["You can use Langflow's ",(0,r.jsx)(n.strong,{children:"Data"})," components to bring data into your flows from various sources like files, API endpoints, and URLs.\nFor example:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Load files"}),": Import data from a file or directory with the ",(0,r.jsx)(n.a,{href:"#file",children:(0,r.jsx)(n.strong,{children:"File"})})," and ",(0,r.jsx)(n.a,{href:"#directory",children:(0,r.jsx)(n.strong,{children:"Directory"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Search the web"}),": Fetch data from the web with components like the ",(0,r.jsx)(n.a,{href:"#news-search",children:(0,r.jsx)(n.strong,{children:"News Search"})}),", ",(0,r.jsx)(n.a,{href:"#rss-reader",children:(0,r.jsx)(n.strong,{children:"RSS Reader"})}),", ",(0,r.jsx)(n.a,{href:"#web-search",children:(0,r.jsx)(n.strong,{children:"Web Search"})}),", and ",(0,r.jsx)(n.a,{href:"#url",children:(0,r.jsx)(n.strong,{children:"URL"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Make API calls"}),": Use APIs to trigger flows or perform actions with the ",(0,r.jsx)(n.a,{href:"#api-request",children:(0,r.jsx)(n.strong,{children:"API Request"})})," and ",(0,r.jsx)(n.a,{href:"#webhook",children:(0,r.jsx)(n.strong,{children:"Webhook"})})," components."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Run SQL queries"}),": Query an SQL database with the ",(0,r.jsx)(n.a,{href:"#sql-database",children:(0,r.jsx)(n.strong,{children:"SQL Database"})})," component."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Each component runs different commands for retrieval, processing, and type checking.\nSome components are a minimal wrapper for a command that you provide, and others include built-in scripts to fetch and process data based on variable inputs.\nAdditionally, some components return raw data, whereas others can convert, restructure, or validate the data before outputting it.\nThis means that some similar components might produce different results."}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Data"})," components pair well with ",(0,r.jsxs)(n.a,{href:"/components-processing",children:[(0,r.jsx)(n.strong,{children:"Processing"})," components"]})," that can perform additional parsing, transformation, and validation after retrieving the data."]}),(0,r.jsxs)(n.p,{children:["This can include basic operations, like saving a file in a specific format, or more complex tasks, like using a ",(0,r.jsx)(n.strong,{children:"Text Splitter"})," component to break down a large document into smaller chunks before generating embeddings for vector search."]})]}),"\n",(0,r.jsx)(n.h2,{id:"use-data-components-in-flows",children:"Use data components in flows"}),"\n",(0,r.jsx)(n.p,{children:"Data components are used often in flows because they offer a versatile way to perform common, basic functions."}),"\n",(0,r.jsxs)(n.p,{children:["You can use data components to perform their base functions as isolated steps in your flow, or you can connect them to an ",(0,r.jsx)(n.strong,{children:"Agent"})," component as tools."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"An agentic flow with three data components connected to the agent as tools",src:t(84987).A+"",width:"4000",height:"3028"})}),"\n",(0,r.jsx)(n.p,{children:"For examples of data components in flows, see the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),": Learn how to use a ",(0,r.jsx)(n.strong,{children:"File"})," component to load a file as context for a chatbot.\nThe file and user input are both passed to the LLM so you can ask questions about the file you uploaded."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/chat-with-rag",children:"Create a vector RAG chatbot"}),": Learn how to ingest files for use in Retrieval-Augmented Generation (RAG), and then set up a chatbot that can use the ingested files as context.\nThe two flows in this tutorial prepare files for RAG, and then let your LLM use vector search to retrieve contextually relevant data during a chat session."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/agents-tools",children:"Configure tools for agents"}),": Learn how to use any component as a tool for an agent.\nWhen used as tools, the agent autonomously decides when to call a component based on the user's query."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),": Learn how to use the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component to trigger a flow run in response to an external event."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"api-request",children:"API Request"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"API Request"})," component constructs and sends an HTTP requests using URLs or curl commands:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"URL mode"}),": Enter one or more comma-separated URLs, and then select the method for the request to each URL."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"curl mode"}),": Enter the curl command to execute."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You can enable additional request options and fields in the component's parameters."}),"\n",(0,r.jsxs)(n.p,{children:["Returns a ",(0,r.jsxs)(n.a,{href:"/data-types#data",children:[(0,r.jsx)(n.code,{children:"Data"})," object"]})," containing the response."]}),"\n",(0,r.jsxs)(n.p,{children:["For provider-specific API components, see ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"Bundles"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"api-request-parameters",children:"API Request parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"API Request"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"mode"}),(0,r.jsx)(n.td,{children:"Mode"}),(0,r.jsxs)(n.td,{children:["Input parameter. Set the mode to either ",(0,r.jsx)(n.strong,{children:"URL"})," or ",(0,r.jsx)(n.strong,{children:"curl"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"urls"}),(0,r.jsx)(n.td,{children:"URL"}),(0,r.jsx)(n.td,{children:"Input parameter. Enter one or more comma-separated URLs for the request."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"curl"}),(0,r.jsx)(n.td,{children:"cURL"}),(0,r.jsxs)(n.td,{children:["Input parameter. ",(0,r.jsx)(n.strong,{children:"curl mode"})," only. Enter a complete curl command. Other component parameters are populated from the command arguments."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"method"}),(0,r.jsx)(n.td,{children:"Method"}),(0,r.jsx)(n.td,{children:"Input parameter. The HTTP method to use."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query_params"}),(0,r.jsx)(n.td,{children:"Query Parameters"}),(0,r.jsx)(n.td,{children:"Input parameter. The query parameters to append to the URL."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"body"}),(0,r.jsx)(n.td,{children:"Body"}),(0,r.jsx)(n.td,{children:"Input parameter. The body to send with POST, PATCH, and PUT requests as a dictionary."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"headers"}),(0,r.jsx)(n.td,{children:"Headers"}),(0,r.jsx)(n.td,{children:"Input parameter. The headers to send with the request as a dictionary."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. The timeout to use for the request."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"follow_redirects"}),(0,r.jsx)(n.td,{children:"Follow Redirects"}),(0,r.jsx)(n.td,{children:"Input parameter. Whether to follow http redirects. Default: Enabled/true"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"save_to_file"}),(0,r.jsx)(n.td,{children:"Save to File"}),(0,r.jsx)(n.td,{children:"Input parameter. Whether to save the API response to a temporary file. Default: Disabled/false"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"include_httpx_metadata"}),(0,r.jsx)(n.td,{children:"Include HTTPx Metadata"}),(0,r.jsxs)(n.td,{children:["Input parameter. Whether to include properties such as ",(0,r.jsx)(n.code,{children:"headers"}),", ",(0,r.jsx)(n.code,{children:"status_code"}),", ",(0,r.jsx)(n.code,{children:"response_headers"}),", and ",(0,r.jsx)(n.code,{children:"redirection_history"})," in the output. Default: Disabled/false"]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"directory",children:"Directory"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Directory"})," component recursively loads files from a directory, with options for file types, depth, and concurrency."]}),"\n",(0,r.jsxs)(n.p,{children:["Files must be of a ",(0,r.jsx)(n.a,{href:"#file-type-and-size-limits",children:"supported type and size"})," to be loaded."]}),"\n",(0,r.jsxs)(n.p,{children:["Outputs either a ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," or ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," object, depending on the directory contents."]}),"\n",(0,r.jsx)(n.h3,{id:"directory-parameters",children:"Directory parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Many ",(0,r.jsx)(n.strong,{children:"Directory"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"path"}),(0,r.jsx)(n.td,{children:"MessageTextInput"}),(0,r.jsxs)(n.td,{children:["Input parameter. The path to the directory to load files from. Default: Current directory (",(0,r.jsx)(n.code,{children:"."}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"types"}),(0,r.jsx)(n.td,{children:"MessageTextInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The file types to load. Select one or more, or leave empty to attempt to load all files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"depth"}),(0,r.jsx)(n.td,{children:"IntInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The depth to search for files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_concurrency"}),(0,r.jsx)(n.td,{children:"IntInput"}),(0,r.jsx)(n.td,{children:"Input parameter. The maximum concurrency for loading multiple files."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"load_hidden"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, hidden files are loaded."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"recursive"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, the search is recursive."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"silent_errors"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, errors do not raise an exception."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"use_multithreading"}),(0,r.jsx)(n.td,{children:"BoolInput"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, multithreading is used."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"file",children:"File"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"File"})," component loads and parses files, converts the content into a ",(0,r.jsx)(n.code,{children:"Data"}),", ",(0,r.jsx)(n.code,{children:"DataFrame"}),", or ",(0,r.jsx)(n.code,{children:"Message"})," object.\nIt supports multiple file types and provides parameters for parallel processing and error handling."]}),"\n",(0,r.jsxs)(n.p,{children:["You can add files to the ",(0,r.jsx)(n.strong,{children:"File"})," component in the visual editor or at runtime, and you can upload multiple files at once.\nFor more information about uploading files and working with files in flows, see ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"File management"})," and ",(0,r.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"file-type-and-size-limits",children:"File type and size limits"}),"\n",(0,r.jsxs)(n.p,{children:["By default, the maximum file size is 100 MB.\nTo modify this value, change the ",(0,r.jsxs)(n.a,{href:"/environment-variables#LANGFLOW_MAX_FILE_SIZE_UPLOAD",children:[(0,r.jsx)(n.code,{children:"--max-file-size-upload"})," environment variable"]}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Supported file types"}),(0,r.jsxs)(n.p,{children:["The following file types are supported by the ",(0,r.jsx)(n.strong,{children:"File"})," component.\nUse archive and compressed formats to bundle multiple files together, or use the ",(0,r.jsxs)(n.a,{href:"#directory",children:[(0,r.jsx)(n.strong,{children:"Directory"})," component"]})," to load all files in a directory."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".bz2"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".csv"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".docx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".gz"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".htm"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".html"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".json"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".js"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".md"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".mdx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".pdf"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".py"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".sh"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".sql"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tar"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tgz"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".ts"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".tsx"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".txt"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".xml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".yaml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".yml"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:".zip"})}),"\n"]})]}),"\n",(0,r.jsx)(n.p,{children:"If you need to load an unsupported file type, you must use a different component that supports that file type and, potentially, parses it outside Langflow, or you must convert it to a supported type before uploading it."}),"\n",(0,r.jsxs)(n.p,{children:["For images, see ",(0,r.jsx)(n.a,{href:"/concepts-file-management#upload-images",children:"Upload images"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["For videos, see the ",(0,r.jsx)(n.strong,{children:"Twelve Labs"})," and ",(0,r.jsx)(n.strong,{children:"YouTube"})," ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," in the Langflow ",(0,r.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,r.jsx)(n.h3,{id:"file-parameters",children:"File parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"File"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"path"}),(0,r.jsx)(n.td,{children:"Files"}),(0,r.jsxs)(n.td,{children:["Input parameter. The path to files to load. Can be local or in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"}),". Supports individual files and bundled archives."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"file_path"}),(0,r.jsx)(n.td,{children:"Server File Path"}),(0,r.jsxs)(n.td,{children:["Input parameter. A ",(0,r.jsx)(n.code,{children:"Data"})," object with a ",(0,r.jsx)(n.code,{children:"file_path"})," property pointing to a file in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"})," or a ",(0,r.jsx)(n.code,{children:"Message"})," object with a path to the file. Supersedes ",(0,r.jsx)(n.strong,{children:"Files"})," (",(0,r.jsx)(n.code,{children:"path"}),") but supports the same file types."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"separator"}),(0,r.jsx)(n.td,{children:"Separator"}),(0,r.jsxs)(n.td,{children:["Input parameter. The separator to use between multiple outputs in ",(0,r.jsx)(n.code,{children:"Message"})," format."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"silent_errors"}),(0,r.jsx)(n.td,{children:"Silent Errors"}),(0,r.jsx)(n.td,{children:"Input parameter. If true, errors in the component don't raise an exception. The default is false/disabled."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"delete_server_file_after_processing"}),(0,r.jsx)(n.td,{children:"Delete Server File After Processing"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true (default), the ",(0,r.jsx)(n.strong,{children:"Server File Path"})," (",(0,r.jsx)(n.code,{children:"file_path"}),") is deleted after processing."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ignore_unsupported_extensions"}),(0,r.jsx)(n.td,{children:"Ignore Unsupported Extensions"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true/enabled (default), files with unsupported extensions are accepted but not processed. If false/disabled, the ",(0,r.jsx)(n.strong,{children:"File"})," component either can throw an error if an unsupported file type is provided."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ignore_unspecified_files"}),(0,r.jsx)(n.td,{children:"Ignore Unspecified Files"}),(0,r.jsxs)(n.td,{children:["Input parameter. If true, ",(0,r.jsx)(n.code,{children:"Data"})," with no ",(0,r.jsx)(n.code,{children:"file_path"})," property is ignored. If false (default), the component errors when a file is not specified."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"concurrency_multithreading"}),(0,r.jsx)(n.td,{children:"Processing Concurrency"}),(0,r.jsx)(n.td,{children:"Input parameter. The number of files to process concurrently if multiple files are uploaded. Default is 1. Values greater than 1 enable parallel processing for 2 or more files."})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"file-output",children:"File output"}),"\n",(0,r.jsxs)(n.p,{children:["The output of the ",(0,r.jsx)(n.strong,{children:"File"})," component depends on the number and type of files loaded:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"No files"}),": Throws an error or, if ",(0,r.jsx)(n.strong,{children:"Silent Errors"})," is enabled, produces no output."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"One file"}),": Produces one of the following depending on the file type. If multiple types are available, you can select the output type by clicking the output field (near the component's output port)."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Structured Content"}),": Available for some tabular and structured data.\nFor ",(0,r.jsx)(n.code,{children:".csv"})," files, produces a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," representing the table data.\nFor ",(0,r.jsx)(n.code,{children:".json"})," files, produces a ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," object with the parsed JSON data."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Raw Content"}),": A ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the file's raw text content."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"File Path"}),": A ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the path to the file in ",(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"Langflow file management"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Multiple files"}),": Produces a ",(0,r.jsx)(n.strong,{children:"Files"})," ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing the content and metadata of all selected files."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"news-search",children:"News Search"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"News Search"})," component searches Google News through RSS, and then returns clean article data as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing article titles, links, publication dates, and summaries.\nThe component's ",(0,r.jsx)(n.code,{children:"clean_html"})," method parses the HTML content with the BeautifulSoup library, removes HTML markup, and strips whitespace to output clean data."]}),"\n",(0,r.jsxs)(n.p,{children:["For other RSS feeds, use the ",(0,r.jsxs)(n.a,{href:"#rss-reader",children:[(0,r.jsx)(n.strong,{children:"RSS Reader"})," component"]}),", and for other searches use the ",(0,r.jsxs)(n.a,{href:"#web-search",children:[(0,r.jsx)(n.strong,{children:"Web Search"})," component"]})," or a provider-specific ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundle"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"News Search"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input.\nYou can connect the ",(0,r.jsx)(n.strong,{children:"News Search"})," component directly to a compatible component, or you can use a ",(0,r.jsx)(n.a,{href:"/components-processing",children:"processing component"})," to convert or extract data of a different type between components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"News Search"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"News Search"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h3,{id:"news-search-parameters",children:"News Search parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"News Search"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"Search Query"}),(0,r.jsx)(n.td,{children:"Input parameter. Search keywords for news articles."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"hl"}),(0,r.jsx)(n.td,{children:"Language (hl)"}),(0,r.jsxs)(n.td,{children:["Input parameter. Language code, such as en-US, fr, de. Default: ",(0,r.jsx)(n.code,{children:"en-US"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"gl"}),(0,r.jsx)(n.td,{children:"Country (gl)"}),(0,r.jsxs)(n.td,{children:["Input parameter. Country code, such as US, FR, DE. Default: ",(0,r.jsx)(n.code,{children:"US"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"ceid"}),(0,r.jsxs)(n.td,{children:["Country",":Language"," (ceid)"]}),(0,r.jsxs)(n.td,{children:["Input parameter. Language, such as US",":en",", FR",":fr",". Default: ",(0,r.jsx)(n.code,{children:"US:en"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"topic"}),(0,r.jsx)(n.td,{children:"Topic"}),(0,r.jsxs)(n.td,{children:["Input parameter. One of: ",(0,r.jsx)(n.code,{children:"WORLD"}),", ",(0,r.jsx)(n.code,{children:"NATION"}),", ",(0,r.jsx)(n.code,{children:"BUSINESS"}),", ",(0,r.jsx)(n.code,{children:"TECHNOLOGY"}),", ",(0,r.jsx)(n.code,{children:"ENTERTAINMENT"}),", ",(0,r.jsx)(n.code,{children:"SCIENCE"}),", ",(0,r.jsx)(n.code,{children:"SPORTS"}),", ",(0,r.jsx)(n.code,{children:"HEALTH"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"location"}),(0,r.jsx)(n.td,{children:"Location (Geo)"}),(0,r.jsx)(n.td,{children:"Input parameter. City, state, or country for location-based news. Leave blank for keyword search."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. Timeout for the request in seconds."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"articles"}),(0,r.jsx)(n.td,{children:"News Articles"}),(0,r.jsxs)(n.td,{children:["Output parameter. A ",(0,r.jsx)(n.code,{children:"DataFrame"})," with the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"link"}),", ",(0,r.jsx)(n.code,{children:"published"})," and ",(0,r.jsx)(n.code,{children:"summary"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"rss-reader",children:"RSS Reader"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component fetches and parses RSS feeds from any valid RSS feed URL, and then returns the feed content as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing article titles, links, publication dates, and summaries."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input.\nYou can connect the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component directly to a compatible component, or you can use a ",(0,r.jsx)(n.a,{href:"/components-processing",children:"processing component"})," to convert or extract data of a different type between components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h3,{id:"rss-reader-parameters",children:"RSS Reader parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"rss_url"}),(0,r.jsx)(n.td,{children:"RSS Feed URL"}),(0,r.jsxs)(n.td,{children:["Input parameter. URL of the RSS feed to parse, such as ",(0,r.jsx)(n.code,{children:"https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsxs)(n.td,{children:["Input parameter. Timeout for the RSS feed request in seconds. Default: ",(0,r.jsx)(n.code,{children:"5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"articles"}),(0,r.jsx)(n.td,{children:"Articles"}),(0,r.jsxs)(n.td,{children:["Output parameter. A ",(0,r.jsx)(n.code,{children:"DataFrame"})," containing the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"link"}),", ",(0,r.jsx)(n.code,{children:"published"})," and ",(0,r.jsx)(n.code,{children:"summary"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"sql-database",children:"SQL Database"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component executes SQL queries on ",(0,r.jsx)(n.a,{href:"https://docs.sqlalchemy.org/en/20/",children:"SQLAlchemy-compatible databases"}),".\nIt supports any SQLAlchemy-compatible database, such as PostgreSQL, MySQL, and SQLite."]}),"\n",(0,r.jsxs)(n.p,{children:["For CQL queries, see the ",(0,r.jsxs)(n.a,{href:"/bundles-datastax",children:[(0,r.jsx)(n.strong,{children:"DataStax"})," bundle"]}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"query-an-sql-database-with-natural-language-prompts",children:"Query an SQL database with natural language prompts"}),"\n",(0,r.jsxs)(n.p,{children:["The following example demonstrates how to use the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component in a flow, and then modify the component to support natural language queries through an ",(0,r.jsx)(n.strong,{children:"Agent"})," component."]}),"\n",(0,r.jsxs)(n.p,{children:["This allows you to use the same ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component for any query, rather than limiting it to a single manually entered query or requiring the user, application, or another component to provide valid SQL syntax as input.\nUsers don't need to master SQL syntax because the ",(0,r.jsx)(n.strong,{children:"Agent"})," component translates the users' natural language prompts into SQL queries, passes the query to the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component, and then returns the results to the user."]}),"\n",(0,r.jsx)(n.p,{children:"Additionally, input from applications and other components doesn't have to be extracted and transformed to exact SQL queries.\nInstead, you only need to provide enough context for the agent to understand that it should create and run a SQL query according to the incoming data."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Use your own sample database or create a test database."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Create a test SQL database"}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a database called ",(0,r.jsx)(n.code,{children:"test.db"}),":"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:"test.db",props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add some values to the database:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:'test.db "',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"CREATE TABLE users (",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" id INTEGER PRIMARY KEY,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name TEXT,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" email TEXT,",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" age INTEGER",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:");",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"INSERT INTO users (name, email, age) VALUES",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('John Doe', 'john@example.com', 30),",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('Jane Smith', 'jane@example.com', 25),",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" ('Bob Johnson', 'bob@example.com', 35);",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:'"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Verify that the database has been created and contains your data:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"sqlite3 ",props:{style:{color:"#FFA657"}}},{content:'test.db "SELECT * FROM users;"',props:{style:{color:"#A5D6FF"}}}]}],lang:"shell"},annotations:[]}]}),"\n",(0,r.jsx)(n.p,{children:"The result should list the text data you entered in the previous step:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"1",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"John ",props:{style:{color:"#FFA657"}}},{content:"Doe",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"john@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"2",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"Jane ",props:{style:{color:"#FFA657"}}},{content:"Smith",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"jane@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"3",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"John ",props:{style:{color:"#FFA657"}}},{content:"Doe",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"john@example.com",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"4",props:{style:{color:"#FFA657"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"Jane ",props:{style:{color:"#FFA657"}}},{content:"Smith",props:{style:{color:"#A5D6FF"}}},{content:"|",props:{style:{color:"#FF7B72"}}},{content:"jane@example.com",props:{style:{color:"#FFA657"}}}]}],lang:"shell"},annotations:[]}]}),"\n"]}),"\n"]})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add an ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component to your flow."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Database URL"})," field, add the connection string for your database, such as ",(0,r.jsx)(n.code,{children:"sqlite:///test.db"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["At this point, you can enter an SQL query in the ",(0,r.jsx)(n.strong,{children:"SQL Query"})," field or use the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-ports",children:"port"})," to pass a query from another component, such as a ",(0,r.jsx)(n.strong,{children:"Chat Input"})," component.\nIf you need more space, click ",(0,r.jsx)(i.A,{name:"Expand","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Expand"})," to open a full-screen text field."]}),"\n",(0,r.jsxs)(n.p,{children:["However, to make this component more dynamic in an agentic context, use an ",(0,r.jsx)(n.strong,{children:"Agent"})," component to transform natural language input to SQL queries, as explained in the following steps."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component to expose the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", and then enable ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can now use this component as a tool for an agent.\nIn ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),", no query is set in the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component because the agent will generate and send one if it determines that the tool is required to complete the user's request.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/agents-tools",children:"Configure tools for agents"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add an ",(0,r.jsx)(n.strong,{children:"Agent"})," component to your flow, and then enter your OpenAI API key."]}),"\n",(0,r.jsxs)(n.p,{children:["The default model is an OpenAI model.\nIf you want to use a different model, edit the ",(0,r.jsx)(n.strong,{children:"Model Provider"}),", ",(0,r.jsx)(n.strong,{children:"Model Name"}),", and ",(0,r.jsx)(n.strong,{children:"API Key"})," fields accordingly."]}),"\n",(0,r.jsxs)(n.p,{children:["If you need to execute highly specialized queries, consider selecting a model that is trained for tasks like advanced SQL queries.\nIf your preferred model isn't in the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's built-in model list, select the ",(0,r.jsx)(n.strong,{children:"Custom"})," model provider, and then use a ",(0,r.jsxs)(n.a,{href:"/components-models",children:[(0,r.jsx)(n.strong,{children:"Language Model"})," component"]})," to attach a specific model."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Connect the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component's ",(0,r.jsx)(n.strong,{children:"Toolset"})," output to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," input."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"SQL database connected to agent",src:t(52189).A+"",width:"4000",height:"2400"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Playground"}),", and then ask the agent a question about the data in your database, such as ",(0,r.jsx)(n.code,{children:"Which users are in my database?"})]}),"\n",(0,r.jsxs)(n.p,{children:["The agent determines that it needs to query the database to answer the question, uses the LLM to generate an SQL query, and then uses the ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component's ",(0,r.jsx)(n.code,{children:"RUN_SQL_QUERY"})," action to run the query on your database.\nFinally, it returns the results in a conversational format, unless you provide instructions to return raw results or a different format."]}),"\n",(0,r.jsx)(n.p,{children:"The following example queried a test database with little data, but with a more robust dataset you could ask more detailed or complex questions."}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Here are the users in your database:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"1. **John Doe** - Email: john@example.com",props:{}}]},{tokens:[{content:"2. **Jane Smith** - Email: jane@example.com",props:{}}]},{tokens:[{content:"3. **John Doe** - Email: john@example.com",props:{}}]},{tokens:[{content:"4. **Jane Smith** - Email: jane@example.com",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"It seems there are duplicate entries for the users.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"sql-database-parameters",children:"SQL Database parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Some ",(0,r.jsx)(n.strong,{children:"SQL Database"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"database_url"}),(0,r.jsx)(n.td,{children:"Database URL"}),(0,r.jsx)(n.td,{children:"Input parameter. The SQLAlchemy-compatible database connection URL."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"SQL Query"}),(0,r.jsxs)(n.td,{children:["Input parameter. The SQL query to execute, which can be entered directly, passed in from another component, or, in ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),", automatically provided by an ",(0,r.jsx)(n.strong,{children:"Agent"})," component."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"include_columns"}),(0,r.jsx)(n.td,{children:"Include Columns"}),(0,r.jsxs)(n.td,{children:["Input parameter. If enabled, includes column names in the result. The default is enabled (",(0,r.jsx)(n.code,{children:"true"}),")."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"add_error"}),(0,r.jsx)(n.td,{children:"Add Error"}),(0,r.jsxs)(n.td,{children:["Input parameter. If enabled, adds any error messages to the result, if any are returned. The default is disabled (",(0,r.jsx)(n.code,{children:"false"}),")."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"run_sql_query"}),(0,r.jsx)(n.td,{children:"Result Table"}),(0,r.jsxs)(n.td,{children:["Output parameter. The query results as a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"url",children:"URL"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"URL"})," component fetches content from one or more URLs, processes the content, and returns it in various formats.\nIt follows links recursively to a given depth, and it supports output in plain text or raw HTML."]}),"\n",(0,r.jsx)(n.h3,{id:"url-parameters",children:"URL parameters"}),"\n",(0,r.jsxs)(n.p,{children:["Most ",(0,r.jsx)(n.strong,{children:"URL"})," component input parameters are hidden by default in the visual editor.\nYou can toggle parameters through the ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Controls"})," in the ",(0,r.jsx)(n.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Some of the available parameters include the following:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"urls"}),(0,r.jsx)(n.td,{children:"URLs"}),(0,r.jsxs)(n.td,{children:["Input parameter. One or more URLs to crawl recursively. In the visual editor, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Add URL"})," to add multiple URLs."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_depth"}),(0,r.jsx)(n.td,{children:"Depth"}),(0,r.jsx)(n.td,{children:'Input parameter. Controls link traversal: how many "clicks" away from the initial page the crawler will go. A depth of 1 limits the crawl to the first page at the given URL only. A depth of 2 means the crawler crawls the first page plus each page directly linked from the first page, then stops. This setting exclusively controls link traversal; it doesn\'t limit the number of URL path segments or the domain.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"prevent_outside"}),(0,r.jsx)(n.td,{children:"Prevent Outside"}),(0,r.jsx)(n.td,{children:"Input parameter. If enabled, only crawls URLs within the same domain as the root URL. This prevents the crawler from accessing sites outside the given URL's domain, even if they are linked from one of the crawled pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"use_async"}),(0,r.jsx)(n.td,{children:"Use Async"}),(0,r.jsx)(n.td,{children:"Input parameter. If enabled, uses asynchronous loading which can be significantly faster but might use more system resources."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"format"}),(0,r.jsx)(n.td,{children:"Output Format"}),(0,r.jsxs)(n.td,{children:["Input parameter. Sets the desired output format as ",(0,r.jsx)(n.strong,{children:"Text"})," or ",(0,r.jsx)(n.strong,{children:"HTML"}),". The default is ",(0,r.jsx)(n.strong,{children:"Text"}),". For more information, see ",(0,r.jsx)(n.a,{href:"#url-output",children:"URL output"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsx)(n.td,{children:"Input parameter. Timeout for the request in seconds."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"headers"}),(0,r.jsx)(n.td,{children:"Headers"}),(0,r.jsx)(n.td,{children:"Input parameter. The headers to send with the request if needed for authentication or otherwise."})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Additional input parameters are available for error handling and encoding."}),"\n",(0,r.jsx)(n.h3,{id:"url-output",children:"URL output"}),"\n",(0,r.jsxs)(n.p,{children:["There are two settings that control the output of the ",(0,r.jsx)(n.strong,{children:"URL"})," component at different stages:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Output Format"}),": This optional parameter controls the content extracted from the crawled pages:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Text (default)"}),": The component extracts only the text from the HTML of the crawled pages."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"HTML"}),": The component extracts the entire raw HTML content of the crawled pages."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Output data type"}),": In the component's output field (near the output port) you can select the structure of the outgoing data when it is passed to other components:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Extracted Pages"}),": Outputs a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," that breaks the crawled pages into columns for the entire page content (",(0,r.jsx)(n.code,{children:"text"}),") and metadata like ",(0,r.jsx)(n.code,{children:"url"})," and ",(0,r.jsx)(n.code,{children:"title"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Raw Content"}),": Outputs a ",(0,r.jsx)(n.a,{href:"/data-types#message",children:(0,r.jsx)(n.code,{children:"Message"})})," containing the entire text or HTML from the crawled pages, including metadata, in a single block of text."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"URL"})," component must be connected to a component that accepts the selected output data type (",(0,r.jsx)(n.code,{children:"DataFrame"})," or ",(0,r.jsx)(n.code,{children:"Message"}),").\nYou can connect the ",(0,r.jsx)(n.strong,{children:"URL"})," component directly to a compatible component, or you can use a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]})," to convert the output to another type before passing the data to other components if the data types aren't directly compatible."]}),"\n",(0,r.jsxs)(n.p,{children:["Processing components, like the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component, are useful with the ",(0,r.jsx)(n.strong,{children:"URL"})," component because it can extract a large amount of data from the crawled pages.\nFor example, if you only want to pass specific fields to other components, you can use a ",(0,r.jsxs)(n.a,{href:"/components-processing#parser",children:[(0,r.jsx)(n.strong,{children:"Parser"})," component"]})," to extract only that data from the crawled pages before passing the data to other components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"URL"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"URL"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," or ",(0,r.jsx)(n.code,{children:"Message"})," output directly."]}),"\n",(0,r.jsx)(n.h2,{id:"web-search",children:"Web Search"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component performs a basic web search using DuckDuckGo's HTML scraping interface.\nFor other search APIs, see ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"Bundles"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"important",children:[(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component uses web scraping that can be subject to rate limits."]}),(0,r.jsxs)(n.p,{children:["For production use, consider using another search component with more robust API support, such as a provider-specific ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:"bundle"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"use-the-web-search-component-in-a-flow",children:"Use the Web Search component in a flow"}),"\n",(0,r.jsxs)(n.p,{children:["The following steps demonstrate one way that you can use a ",(0,r.jsx)(n.strong,{children:"Web Search"})," component in a flow:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a flow based on the ",(0,r.jsxs)(n.a,{href:"/basic-prompting",children:[(0,r.jsx)(n.strong,{children:"Basic Prompting"})," template"]}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.strong,{children:"Web Search"})," component, and then enter a search query, such as ",(0,r.jsx)(n.code,{children:"environmental news"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]}),", set the ",(0,r.jsx)(n.strong,{children:"Output Type"})," to ",(0,r.jsx)(n.strong,{children:"Message"}),", and then connect the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component's output to the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component's input."]}),"\n",(0,r.jsxs)(n.p,{children:["By default, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component outputs a ",(0,r.jsx)(n.code,{children:"DataFrame"}),".\nBecause the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component only accepts ",(0,r.jsx)(n.code,{children:"Message"})," data, this conversion is required so that the flow can pass the search results to the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component.\nFor more information, see ",(0,r.jsx)(n.a,{href:"#web-search-output",children:"Web Search output"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component's ",(0,r.jsx)(n.strong,{children:"Template"})," field, add a variable like ",(0,r.jsx)(n.code,{children:"{searchresults}"})," or ",(0,r.jsx)(n.code,{children:"{context}"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["This adds a field to the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component that you can use to pass the converted search results to the prompt."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Connect the ",(0,r.jsx)(n.strong,{children:"Type Convert"})," component's output to the new variable field on the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Type convert web search output to chat",src:t(42547).A+"",width:"4000",height:"1826"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Language Model"})," component, add your OpenAI API key, or select a different provider and model."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Playground"}),", and then enter ",(0,r.jsx)(n.code,{children:"latest news"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The LLM processes the request, including the context passed through the ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component, and then prints the response in the ",(0,r.jsx)(n.strong,{children:"Playground"})," chat interface."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Result"}),(0,r.jsx)(n.p,{children:"The following is an example of a possible response.\nYour response may vary based on the current state of the web, your specific query, the model, and other factors."}),(0,r.jsx)(h.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Here are some of the latest news articles related to the environment:",props:{}}]},{tokens:[{content:"Ozone Pollution and Global Warming: A recent study highlights that ozone pollution is a significant global environmental concern, threatening human health and crop production while exacerbating global warming. Read more",props:{}}]},{tokens:[{content:"...",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"web-search-parameters",children:"Web Search parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Info"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"query"}),(0,r.jsx)(n.td,{children:"Search Query"}),(0,r.jsx)(n.td,{children:"Input parameter. Keywords to search for."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Timeout"}),(0,r.jsxs)(n.td,{children:["Input parameter. Timeout for the web search request in seconds. Default: ",(0,r.jsx)(n.code,{children:"5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"results"}),(0,r.jsx)(n.td,{children:"Search Results"}),(0,r.jsxs)(n.td,{children:["Output parameter. Returns a ",(0,r.jsx)(n.code,{children:"DataFrame"})," containing ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"links"}),", and ",(0,r.jsx)(n.code,{children:"snippets"}),". For more information, see ",(0,r.jsx)(n.a,{href:"#web-search-output",children:"Web Search output"}),"."]})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"web-search-output",children:"Web Search output"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Web Search"})," component outputs a ",(0,r.jsx)(n.a,{href:"/data-types#dataframe",children:(0,r.jsx)(n.code,{children:"DataFrame"})})," containing the key columns ",(0,r.jsx)(n.code,{children:"title"}),", ",(0,r.jsx)(n.code,{children:"links"}),", and ",(0,r.jsx)(n.code,{children:"snippets"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When used as a standard component in a flow, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component must be connected to a component that accepts ",(0,r.jsx)(n.code,{children:"DataFrame"})," input, or you must use a ",(0,r.jsxs)(n.a,{href:"/components-processing#type-convert",children:[(0,r.jsx)(n.strong,{children:"Type Convert"})," component"]})," to convert the output to ",(0,r.jsx)(n.code,{children:"Data"})," or ",(0,r.jsx)(n.code,{children:"Message"})," type before passing the data to other components."]}),"\n",(0,r.jsxs)(n.p,{children:["When used in ",(0,r.jsx)(n.strong,{children:"Tool Mode"})," with an ",(0,r.jsx)(n.strong,{children:"Agent"})," component, the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component can be connected directly to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component's ",(0,r.jsx)(n.strong,{children:"Tools"})," port without converting the data.\nThe agent decides whether to use the ",(0,r.jsx)(n.strong,{children:"Web Search"})," component based on the user's query, and it can process the ",(0,r.jsx)(n.code,{children:"DataFrame"})," output directly."]}),"\n",(0,r.jsx)(n.h2,{id:"webhook",children:"Webhook"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Webhook"})," component defines a webhook trigger that runs a flow when it receives an HTTP POST request."]}),"\n",(0,r.jsx)(n.h3,{id:"trigger-the-webhook",children:"Trigger the webhook"}),"\n",(0,r.jsxs)(n.p,{children:["When you add a ",(0,r.jsx)(n.strong,{children:"Webhook"})," component to your flow, a ",(0,r.jsx)(n.strong,{children:"Webhook cURL"})," tab is added to the flow's ",(0,r.jsxs)(n.a,{href:"/concepts-publish#api-access",children:[(0,r.jsx)(n.strong,{children:"API Access"})," pane"]}),".\nThis tab automatically generates an HTTP POST request code snippet that you can use to trigger your flow through the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component.\nFor example:"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:p,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://',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_ADDRESS",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/webhook/",props:{style:{color:"#A5D6FF"}}},{content:"$FLOW_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',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: $LANGFLOW_API_KEY' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"any": "data"}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"webhook-parameters",children:"Webhook parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Display Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"data"}),(0,r.jsx)(n.td,{children:"Payload"}),(0,r.jsx)(n.td,{children:"Input parameter. Receives a payload from external systems through HTTP POST requests."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"curl"}),(0,r.jsx)(n.td,{children:"cURL"}),(0,r.jsx)(n.td,{children:"Input parameter. The cURL command template for making requests to this webhook."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"endpoint"}),(0,r.jsx)(n.td,{children:"Endpoint"}),(0,r.jsx)(n.td,{children:"Input parameter. The endpoint URL where this webhook receives requests."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"output_data"}),(0,r.jsx)(n.td,{children:"Data"}),(0,r.jsxs)(n.td,{children:["Output parameter. The processed data from the webhook input. Returns an empty ",(0,r.jsx)(n.a,{href:"/data-types#data",children:(0,r.jsx)(n.code,{children:"Data"})})," object if no input is provided. If the input is not valid JSON, the ",(0,r.jsx)(n.strong,{children:"Webhook"})," component wraps it in a ",(0,r.jsx)(n.code,{children:"payload"})," object so that it can be accepted as input to trigger the flow."]})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"additional-data-components",children:"Additional data components"}),"\n",(0,r.jsx)(n.p,{children:"Langflow's core components are meant to be generic and support a range of use cases.\nCore components are typically not limited to a single provider."}),"\n",(0,r.jsxs)(n.p,{children:["If the core data components don't meet your needs, you can find provider-specific components in the ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})})," section of the ",(0,r.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,r.jsxs)(n.p,{children:["For example, the ",(0,r.jsxs)(n.a,{href:"/bundles-datastax",children:[(0,r.jsx)(n.strong,{children:"DataStax"})," bundle"]})," includes components for CQL queries, and the ",(0,r.jsxs)(n.a,{href:"/bundles-google",children:[(0,r.jsx)(n.strong,{children:"Google"})," bundle"]})," includes components for Google Search APIs."]}),"\n",(0,r.jsx)(n.h2,{id:"legacy-data-components",children:"Legacy data components"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Load CSV"})," and ",(0,r.jsx)(n.strong,{children:"Load JSON"})," components are legacy components.\nYou can still use them in your flows, but they are no longer maintained and can be removed in a future release."]}),"\n",(0,r.jsxs)(n.p,{children:["Replace these components with the ",(0,r.jsx)(n.strong,{children:"File"})," component, which supports loading CSV and JSON files, as well as many other file types."]}),"\n",(0,r.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/bundles-google",children:"Google components"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/integrations-composio",children:"Composio components"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/concepts-file-management",children:"File management"})}),"\n"]})]})}function j(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}function m(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},17886:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var s=t(64058),r=t(74848);function o({name:e,...n}){const t=s[e];return t?(0,r.jsx)(t,{...n}):null}},42547:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-type-convert-and-web-search-1eef7b9a7c1a243f4a08d9717728d0e1.png"},52189:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-sql-database-3d2c985aee2dd9970874cb85e1d2b570.png"},84987:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/connect-data-components-to-agent-a8cd8c94d0474ae434aeb5d507a803e8.png"}}]); \ No newline at end of file diff --git a/assets/js/944c5f91.3195e200.js b/assets/js/944c5f91.3195e200.js new file mode 100644 index 0000000000..142e89359e --- /dev/null +++ b/assets/js/944c5f91.3195e200.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5144],{7704:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates how to deploy Langflow on Google Cloud Platform with a Cloud Shell script that walks through the process of setting up a Debian-based VM with the Langflow package, Nginx, and the necessary configurations to run the Langflow development environment in GCP.","source":"@site/docs/Deployment/deployment-gcp.mdx","sourceDirName":"Deployment","slug":"/deployment-gcp","permalink":"/deployment-gcp","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Google Cloud Platform","slug":"/deployment-gcp"},"sidebar":"docs","previous":{"title":"Deploy in production","permalink":"/deployment-kubernetes-prod"},"next":{"title":"Hugging Face Spaces","permalink":"/deployment-hugging-face-spaces"}}');var l=n(74848),s=n(28453);const r={title:"Deploy Langflow on Google Cloud Platform",slug:"/deployment-gcp"},i=void 0,c={},a=[];function d(e){const o={a:"a",admonition:"admonition",code:"code",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(o.p,{children:"This guide demonstrates how to deploy Langflow on Google Cloud Platform with a Cloud Shell script that walks through the process of setting up a Debian-based VM with the Langflow package, Nginx, and the necessary configurations to run the Langflow development environment in GCP."}),"\n",(0,l.jsxs)(o.p,{children:["To use this script, you need a ",(0,l.jsx)(o.a,{href:"https://console.cloud.google.com/",children:"Google Cloud"})," project with the necessary permissions to create resources."]}),"\n",(0,l.jsxs)(o.ol,{children:["\n",(0,l.jsxs)(o.li,{children:["\n",(0,l.jsx)(o.p,{children:"Follow this link to launch the Cloud Shell with the GCP deployment script from the Langflow repository:"}),"\n",(0,l.jsx)(o.p,{children:(0,l.jsx)(o.a,{href:"https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/langflow-ai/langflow&working_dir=scripts/gcp&shellonly=true&tutorial=walkthroughtutorial.md",children:(0,l.jsx)(o.img,{src:"https://gstatic.com/cloudssh/images/open-btn.svg",alt:"Deploy to Google Cloud"})})}),"\n"]}),"\n",(0,l.jsxs)(o.li,{children:["\n",(0,l.jsxs)(o.p,{children:["Click ",(0,l.jsx)(o.strong,{children:"Trust repo"}),"."]}),"\n",(0,l.jsxs)(o.p,{children:["Some ",(0,l.jsx)(o.code,{children:"gcloud"})," commands may not run in an ephemeral Cloud Shell environment."]}),"\n"]}),"\n",(0,l.jsxs)(o.li,{children:["\n",(0,l.jsxs)(o.p,{children:["Click ",(0,l.jsx)(o.strong,{children:"Start"}),", and then follow the tutorial to deploy Langflow."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(o.admonition,{type:"info",children:[(0,l.jsxs)(o.p,{children:["This deployment uses a ",(0,l.jsx)(o.a,{href:"https://cloud.google.com/compute/docs/instances/preemptible",children:"spot (preemptible) instance"})," as a cost-effective option to demonstrate how to deploy Langflow on GCP.\nHowever, due to the nature of spot instances, the VM can be terminated at any time if Google Cloud needs to reclaim the resources."]}),(0,l.jsx)(o.p,{children:"For a more stable deployment, consider using a regular VM instance instead of a spot instance."}),(0,l.jsxs)(o.p,{children:["For more information, see the ",(0,l.jsx)(o.a,{href:"https://cloud.google.com/products/calculator?hl=en",children:"GCP pricing calculator"}),"."]})]})]})}function p(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,l.jsx)(o,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>i});var t=n(96540);const l={},s=t.createContext(l);function r(e){const o=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/944c5f91.f0942dcd.js b/assets/js/944c5f91.f0942dcd.js deleted file mode 100644 index 3483b97c62..0000000000 --- a/assets/js/944c5f91.f0942dcd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5144],{7704:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>a});const l=JSON.parse('{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates deploying Langflow on Google Cloud Platform.","source":"@site/docs/Deployment/deployment-gcp.mdx","sourceDirName":"Deployment","slug":"/deployment-gcp","permalink":"/deployment-gcp","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Google Cloud Platform","slug":"/deployment-gcp"},"sidebar":"docs","previous":{"title":"Deploy in production","permalink":"/deployment-kubernetes-prod"},"next":{"title":"Hugging Face Spaces","permalink":"/deployment-hugging-face-spaces"}}');var t=n(74848),s=n(28453);const i={title:"Deploy Langflow on Google Cloud Platform",slug:"/deployment-gcp"},r=void 0,c={},a=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Deploy Langflow in GCP",id:"deploy-langflow-in-gcp",level:2},{value:"Pricing",id:"pricing",level:2}];function d(e){const o={a:"a",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.p,{children:"This guide demonstrates deploying Langflow on Google Cloud Platform."}),"\n",(0,t.jsx)(o.p,{children:"To deploy Langflow on Google Cloud Platform using Cloud Shell, use the below script."}),"\n",(0,t.jsx)(o.p,{children:"The script guides you through setting up a Debian-based VM with the Langflow package, Nginx, and the necessary configurations to run the Langflow dev environment in GCP."}),"\n",(0,t.jsx)(o.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["A ",(0,t.jsx)(o.a,{href:"https://console.cloud.google.com/",children:"Google Cloud"})," project with the necessary permissions to create resources"]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"deploy-langflow-in-gcp",children:"Deploy Langflow in GCP"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsx)(o.p,{children:"Click the following button to launch Cloud Shell:"}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.a,{href:"https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/langflow-ai/langflow&working_dir=scripts/gcp&shellonly=true&tutorial=walkthroughtutorial.md",children:(0,t.jsx)(o.img,{src:"https://gstatic.com/cloudssh/images/open-btn.svg",alt:"Deploy to Google Cloud"})})}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:["Click ",(0,t.jsx)(o.strong,{children:"Trust repo"}),". Some gcloud commands may not run in an ephemeral Cloud Shell environment."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:["Click ",(0,t.jsx)(o.strong,{children:"Start"})," and follow the tutorial to deploy Langflow."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"pricing",children:"Pricing"}),"\n",(0,t.jsxs)(o.p,{children:["This deployment uses a ",(0,t.jsx)(o.a,{href:"https://cloud.google.com/compute/docs/instances/preemptible",children:"spot (preemptible) instance"}),", which is a cost-effective option for running Langflow. However, ",(0,t.jsx)(o.strong,{children:"due to the nature of spot instances, the VM may be terminated at any time if Google Cloud needs to reclaim the resources"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["For more information, see the ",(0,t.jsx)(o.a,{href:"https://cloud.google.com/products/calculator?hl=en",children:"GCP pricing calculator"}),"."]})]})}function p(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>i,x:()=>r});var l=n(96540);const t={},s=l.createContext(t);function i(e){const o=l.useContext(s);return l.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function r(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),l.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e6c6a4d2.ce5c6831.js b/assets/js/e6c6a4d2.f9bf0dfe.js similarity index 56% rename from assets/js/e6c6a4d2.ce5c6831.js rename to assets/js/e6c6a4d2.f9bf0dfe.js index 7f7601fa17..306ef278dc 100644 --- a/assets/js/e6c6a4d2.ce5c6831.js +++ b/assets/js/e6c6a4d2.f9bf0dfe.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8504],{28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(96540);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}},94910:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>r});const s=JSON.parse('{"type":"api","id":"experimental-run-flow","title":"Experimental Run Flow","description":"","slug":"/experimental-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","operationId":"experimental_run_flow_api_v1_run_advanced__flow_id__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Flow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"inputs":{"anyOf":[{"items":{"properties":{"components":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components","default":[]},"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value"},"session":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"},"type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Type","description":"Defines on which components the input value should be applied. \'any\' applies to all input components.","default":"any"}},"additionalProperties":false,"type":"object","title":"InputValueRequest","examples":[{"components":["components_id","Component Name"],"input_value":"input_value","session":"session_id"},{"components":["Component Name"],"input_value":"input_value"},{"input_value":"input_value"},{"components":["Component Name"],"input_value":"input_value","session":"session_id"},{"input_value":"input_value","session":"session_id"},{"input_value":"input_value","type":"chat"},{"input_value":"{\\"key\\": \\"value\\"}","type":"json"}]},"type":"array"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Outputs"},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}]},"stream":{"type":"boolean","title":"Stream","default":false},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"Body_experimental_run_flow_api_v1_run_advanced__flow_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"outputs":{"anyOf":[{"items":{"properties":{"inputs":{"type":"object","title":"Inputs"},"outputs":{"items":{"anyOf":[{"properties":{"results":{"anyOf":[{},{"type":"null"}],"title":"Results"},"artifacts":{"anyOf":[{},{"type":"null"}],"title":"Artifacts"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"},"logs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Logs"},"messages":{"anyOf":[{"items":{"properties":{"message":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"array"}],"title":"Message"},"sender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender","default":"Machine"},"sender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Name","default":"AI"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"stream_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stream Url"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"files":{"items":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"}},"type":"object","required":["path","name","type"],"title":"File","description":"File schema."},"type":"array","title":"Files","default":[]},"type":{"type":"string","title":"Type"}},"type":"object","required":["message","type"],"title":"ChatOutputResponse","description":"Chat output response schema."},"type":"array"},{"type":"null"}],"title":"Messages"},"timedelta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timedelta"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"component_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Display Name"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"used_frozen_result":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Frozen Result","default":false}},"type":"object","title":"ResultData"},{"type":"null"}]},"type":"array","title":"Outputs"}},"type":"object","title":"RunOutputs"},"type":"array"},{"type":"null"}],"title":"Outputs","default":[]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"RunResponse","description":"Run response schema."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/advanced/{flow_id}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"jsonRequestBodyExample":{"stream":false},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Experimental Run Flow","description":{"content":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","type":"text/plain"},"url":{"path":["api","v1","run","advanced",":flow_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"inputs\\": [\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n },\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n }\\n ],\\n \\"outputs\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"tweaks\\": {\\n \\"officiad\\": \\"\\"\\n },\\n \\"stream\\": false,\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/experimental-run-flow","previous":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"},"next":{"title":"Process","permalink":"/api/process"}}');var i=n(74848),o=n(28453);const a={},l="Experimental Run Flow",r=[{value:"Parameters:",id:"parameters",level:3},{value:"Returns:",id:"returns",level:3},{value:"Raises:",id:"raises",level:3},{value:"Example usage:",id:"example-usage",level:3}];function p(e){const t={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"experimental-run-flow",children:"Experimental Run Flow"})}),"\n",(0,i.jsx)(t.p,{children:"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability."}),"\n",(0,i.jsx)(t.p,{children:"This endpoint supports running flows with caching to enhance performance and efficiency."}),"\n",(0,i.jsx)(t.h3,{id:"parameters",children:"Parameters:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"flow_id"})," (str): The unique identifier of the flow to be executed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"inputs"})," (List[InputValueRequest], optional): A list of inputs specifying the input values and components\nfor the flow. Each input can target specific components and provide custom values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"outputs"})," (List[str], optional): A list of output names to retrieve from the executed flow.\nIf not provided, all outputs are returned."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"tweaks"})," (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\nThe tweaks can be used to modify the flow's parameters and components.\nTweaks can be overridden by the input values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stream"})," (bool, optional): Specifies whether the results should be streamed. Defaults to False."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"session_id"})," (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\nexecution."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"api_key_user"})," (User): The user associated with the current API key. Automatically resolved from the API key."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"returns",children:"Returns:"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"RunResponse"})," object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input."]}),"\n",(0,i.jsx)(t.h3,{id:"raises",children:"Raises:"}),"\n",(0,i.jsx)(t.p,{children:"HTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution."}),"\n",(0,i.jsx)(t.h3,{id:"example-usage",children:"Example usage:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'POST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n "inputs": [\n {"components": ["component1"], "input_value": "value1"},\n {"components": ["component3"], "input_value": "value2"}\n ],\n "outputs": ["Component Name", "component_id"],\n "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}}\n "stream": false\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements."}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"flow_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" uuid"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Request Body "}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"inputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Inputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"tweaks"}),(0,i.jsx)("span",{style:{opacity:"0.6"}})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"stream"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"})]})})]})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"200"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Successful Response"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})})]})]})})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"422"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Validation Error"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"detail"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"loc"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"msg"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"type"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8504],{28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(96540);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}},94910:(e,t,n)=>{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>r});const s=JSON.parse('{"type":"api","id":"experimental-run-flow","title":"Experimental Run Flow","description":"","slug":"/experimental-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","operationId":"experimental_run_flow_api_v1_run_advanced__flow_id__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Flow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"inputs":{"anyOf":[{"items":{"properties":{"components":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components","default":[]},"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value"},"session":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"},"type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Type","description":"Defines on which components the input value should be applied. \'any\' applies to all input components.","default":"any"}},"additionalProperties":false,"type":"object","title":"InputValueRequest","examples":[{"components":["components_id","Component Name"],"input_value":"input_value","session":"session_id"},{"components":["Component Name"],"input_value":"input_value"},{"input_value":"input_value"},{"components":["Component Name"],"input_value":"input_value","session":"session_id"},{"input_value":"input_value","session":"session_id"},{"input_value":"input_value","type":"chat"},{"input_value":"{\\"key\\": \\"value\\"}","type":"json"}]},"type":"array"},{"type":"null"}],"title":"Inputs"},"outputs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Outputs"},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}]},"stream":{"type":"boolean","title":"Stream","default":false},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"Body_experimental_run_flow_api_v1_run_advanced__flow_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"outputs":{"anyOf":[{"items":{"properties":{"inputs":{"type":"object","title":"Inputs"},"outputs":{"items":{"anyOf":[{"properties":{"results":{"anyOf":[{},{"type":"null"}],"title":"Results"},"artifacts":{"anyOf":[{},{"type":"null"}],"title":"Artifacts"},"outputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Outputs"},"logs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Logs"},"messages":{"anyOf":[{"items":{"properties":{"message":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"array"}],"title":"Message"},"sender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender","default":"Machine"},"sender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sender Name","default":"AI"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"stream_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stream Url"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"files":{"items":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"}},"type":"object","required":["path","name","type"],"title":"File","description":"File schema."},"type":"array","title":"Files","default":[]},"type":{"type":"string","title":"Type"}},"type":"object","required":["message","type"],"title":"ChatOutputResponse","description":"Chat output response schema."},"type":"array"},{"type":"null"}],"title":"Messages"},"timedelta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timedelta"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"component_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Display Name"},"component_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Id"},"used_frozen_result":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Used Frozen Result","default":false}},"type":"object","title":"ResultData"},{"type":"null"}]},"type":"array","title":"Outputs"}},"type":"object","title":"RunOutputs"},"type":"array"},{"type":"null"}],"title":"Outputs","default":[]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"RunResponse","description":"Run response schema."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/advanced/{flow_id}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"jsonRequestBodyExample":{"stream":false},"info":{"title":"Langflow","version":"1.5.0.post1"},"postman":{"name":"Experimental Run Flow","description":{"content":"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\\n\\nThis endpoint supports running flows with caching to enhance performance and efficiency.\\n\\n### Parameters:\\n- `flow_id` (str): The unique identifier of the flow to be executed.\\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\\n for the flow. Each input can target specific components and provide custom values.\\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\\n If not provided, all outputs are returned.\\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\\n The tweaks can be used to modify the flow\'s parameters and components.\\n Tweaks can be overridden by the input values.\\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\\n execution.\\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\\n\\n### Returns:\\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\\nand the session ID.\\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\\n\\n### Raises:\\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\\nflow execution.\\n\\n### Example usage:\\n```json\\nPOST /run/flow_id\\nx-api-key: YOUR_API_KEY\\nPayload:\\n{\\n \\"inputs\\": [\\n {\\"components\\": [\\"component1\\"], \\"input_value\\": \\"value1\\"},\\n {\\"components\\": [\\"component3\\"], \\"input_value\\": \\"value2\\"}\\n ],\\n \\"outputs\\": [\\"Component Name\\", \\"component_id\\"],\\n \\"tweaks\\": {\\"parameter_name\\": \\"value\\", \\"Component Name\\": {\\"parameter_name\\": \\"value\\"}, \\"component_id\\": {\\"parameter_name\\": \\"value\\"}}\\n \\"stream\\": false\\n}\\n```\\n\\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\\ncatering to diverse application requirements.","type":"text/plain"},"url":{"path":["api","v1","run","advanced",":flow_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"flow_id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"{\\n \\"inputs\\": [\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n },\\n {\\n \\"components\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"input_value\\": \\"\\",\\n \\"session\\": \\"\\",\\n \\"type\\": \\"\\"\\n }\\n ],\\n \\"outputs\\": [\\n \\"\\",\\n \\"\\"\\n ],\\n \\"tweaks\\": {\\n \\"irure_b13\\": \\"\\",\\n \\"dolor_f5c\\": \\"\\"\\n },\\n \\"stream\\": false,\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/experimental-run-flow","previous":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"},"next":{"title":"Process","permalink":"/api/process"}}');var i=n(74848),o=n(28453);const a={},l="Experimental Run Flow",r=[{value:"Parameters:",id:"parameters",level:3},{value:"Returns:",id:"returns",level:3},{value:"Raises:",id:"raises",level:3},{value:"Example usage:",id:"example-usage",level:3}];function p(e){const t={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"experimental-run-flow",children:"Experimental Run Flow"})}),"\n",(0,i.jsx)(t.p,{children:"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability."}),"\n",(0,i.jsx)(t.p,{children:"This endpoint supports running flows with caching to enhance performance and efficiency."}),"\n",(0,i.jsx)(t.h3,{id:"parameters",children:"Parameters:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"flow_id"})," (str): The unique identifier of the flow to be executed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"inputs"})," (List[InputValueRequest], optional): A list of inputs specifying the input values and components\nfor the flow. Each input can target specific components and provide custom values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"outputs"})," (List[str], optional): A list of output names to retrieve from the executed flow.\nIf not provided, all outputs are returned."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"tweaks"})," (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\nThe tweaks can be used to modify the flow's parameters and components.\nTweaks can be overridden by the input values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stream"})," (bool, optional): Specifies whether the results should be streamed. Defaults to False."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"session_id"})," (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\nexecution."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"api_key_user"})," (User): The user associated with the current API key. Automatically resolved from the API key."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"returns",children:"Returns:"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"RunResponse"})," object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input."]}),"\n",(0,i.jsx)(t.h3,{id:"raises",children:"Raises:"}),"\n",(0,i.jsx)(t.p,{children:"HTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution."}),"\n",(0,i.jsx)(t.h3,{id:"example-usage",children:"Example usage:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'POST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n "inputs": [\n {"components": ["component1"], "input_value": "value1"},\n {"components": ["component3"], "input_value": "value2"}\n ],\n "outputs": ["Component Name", "component_id"],\n "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}}\n "stream": false\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements."}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"flow_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" uuid"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Request Body "}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"inputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Inputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"tweaks"}),(0,i.jsx)("span",{style:{opacity:"0.6"}})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"stream"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"})]})})]})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"200"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Successful Response"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})})]})]})})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"422"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Validation Error"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"detail"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"loc"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"msg"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"type"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/f6a246db.499c51f9.js b/assets/js/f6a246db.499c51f9.js new file mode 100644 index 0000000000..da77fe7b10 --- /dev/null +++ b/assets/js/f6a246db.499c51f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[4314],{24692:(M,j,L)=>{L.r(j),L.d(j,{assets:()=>I,contentTitle:()=>t,default:()=>g,frontMatter:()=>T,metadata:()=>N,toc:()=>i});const N=JSON.parse('{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"Deploy Langflow to Railway using a one-click template","source":"@site/docs/Deployment/deployment-railway.mdx","sourceDirName":"Deployment","slug":"/deployment-railway","permalink":"/deployment-railway","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Railway","description":"Deploy Langflow to Railway using a one-click template","slug":"/deployment-railway"},"sidebar":"docs","previous":{"title":"Hugging Face Spaces","permalink":"/deployment-hugging-face-spaces"},"next":{"title":"Render","permalink":"/deployment-render"}}');var u=L(74848),D=L(28453);const T={title:"Deploy Langflow on Railway",description:"Deploy Langflow to Railway using a one-click template",slug:"/deployment-railway"},t=void 0,I={},i=[];function y(M){const j={a:"a",code:"code",img:"img",li:"li",ol:"ol",p:"p",...(0,D.R)(),...M.components};return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(j.p,{children:["This guide explains how to ",(0,u.jsx)(j.a,{href:"https://railway.com/?utm_medium=integration&utm_source=docs&utm_campaign=langflow",children:"deploy Langflow on Railway"}),", a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling."]}),"\n",(0,u.jsxs)(j.ol,{children:["\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsx)(j.p,{children:"Create a Railway account."}),"\n",(0,u.jsxs)(j.p,{children:["A Hobby account on Railway is sufficient for Langflow's dual-core CPU and 2 GB RAM requirements. For more information, see ",(0,u.jsx)(j.a,{href:"https://railway.com/pricing?utm_medium=integration&utm_source=docs&utm_campaign=langflow",children:"Railway pricing"}),"."]}),"\n"]}),"\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsx)(j.p,{children:"Follow this link to deploy the Langflow template on Railway:"}),"\n",(0,u.jsx)(j.p,{children:(0,u.jsx)(j.a,{href:"https://railway.com/new/template/JMXEWp?referralCode=MnPSdg&utm_medium=integration&utm_source=docs&utm_campaign=langflow",children:(0,u.jsx)(j.img,{alt:"Deploy on Railway",src:L(70234).A+"",width:"183",height:"40"})})}),"\n"]}),"\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsx)(j.p,{children:"Optional: Add any custom configuration for your Langflow deployment."}),"\n",(0,u.jsx)(j.p,{children:"The Langflow Railway template automatically sets up the infrastructure, deploys Langflow, and then starts the application."}),"\n"]}),"\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsx)(j.p,{children:"Wait for the deployment to complete."}),"\n"]}),"\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsxs)(j.p,{children:["Navigate to your Langflow instance at your deployment's public URL, such as ",(0,u.jsx)(j.code,{children:"https://APP-NAME.up.railway.app"}),"."]}),"\n"]}),"\n"]})]})}function g(M={}){const{wrapper:j}={...(0,D.R)(),...M.components};return j?(0,u.jsx)(j,{...M,children:(0,u.jsx)(y,{...M})}):y(M)}},28453:(M,j,L)=>{L.d(j,{R:()=>T,x:()=>t});var N=L(96540);const u={},D=N.createContext(u);function T(M){const j=N.useContext(D);return N.useMemo(function(){return"function"==typeof M?M(j):{...j,...M}},[j,M])}function t(M){let j;return j=M.disableParentContext?"function"==typeof M.components?M.components(u):M.components||u:T(M.components),N.createElement(D.Provider,{value:j},M.children)}},70234:(M,j,L)=>{L.d(j,{A:()=>N});const N="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgzIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTgzIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDZhNiA2IDAgMCAxIDYtNmgxNzFhNiA2IDAgMCAxIDYgNnYyOGE2IDYgMCAwIDEtNiA2SDZhNiA2IDAgMCAxLTYtNlY2WiIgZmlsbD0idXJsKCM1NXo4YXBmeHZhKSIvPjxwYXRoIGQ9Ik01MC40OTQgMjVjMy4xMDMgMCA0Ljk4Mi0xLjkxOSA0Ljk4Mi01LjEgMC0zLjE3My0xLjg4LTUuMDgyLTQuOTUyLTUuMDgyaC0zLjY0VjI1aDMuNjFabS0xLjQ1Ni0xLjg0NXYtNi40OTJoMS4zNzJjMS45MDkgMCAyLjkxOC45NzQgMi45MTggMy4yMzYgMCAyLjI3Mi0xLjAxIDMuMjU2LTIuOTIzIDMuMjU2aC0xLjM2N1pNNjAuNTEgMjUuMTVjMS44ODkgMCAzLjE2Mi0uOTIgMy40Ni0yLjMzN2wtMS45NTktLjEyOWMtLjIxNC41ODItLjc2Ljg4NS0xLjQ2Ni44ODUtMS4wNiAwLTEuNzMtLjctMS43My0xLjg0di0uMDA0aDUuMnYtLjU4MmMwLTIuNTk1LTEuNTcxLTMuODc4LTMuNTktMy44NzgtMi4yNDcgMC0zLjcwNCAxLjU5Ni0zLjcwNCAzLjk1MyAwIDIuNDIgMS40MzcgMy45MzIgMy43ODkgMy45MzJabS0xLjY5Ni00LjczOGMuMDQ1LS44Ny43MDctMS41NjYgMS42NDYtMS41NjYuOTIgMCAxLjU1Ni42NTYgMS41NjEgMS41NjZoLTMuMjA2Wm02LjU4MyA3LjQ1M2gyLjExOHYtNC4wODdoLjA2NGMuMjk0LjYzNi45MzUgMS4zNDcgMi4xNjggMS4zNDcgMS43NCAwIDMuMDk3LTEuMzc3IDMuMDk3LTMuOTMyIDAtMi42MjUtMS40MTctMy45MjgtMy4wOTItMy45MjgtMS4yNzggMC0xLjg5Ljc2LTIuMTczIDEuMzgyaC0uMDk0di0xLjI4MmgtMi4wODh2MTAuNVptMi4wNzMtNi42ODJjMC0xLjM2Mi41NzctMi4yMzIgMS42MDYtMi4yMzIgMS4wNDkgMCAxLjYwNi45MSAxLjYwNiAyLjIzMiAwIDEuMzMyLS41NjcgMi4yNTctMS42MDYgMi4yNTctMS4wMiAwLTEuNjA2LS44OTUtMS42MDYtMi4yNTdabTguOTA0LTYuMzY0aC0yLjExOFYyNWgyLjExOFYxNC44MThabTUuMTQ3IDEwLjMzMWMyLjMxNyAwIDMuNzU4LTEuNTg2IDMuNzU4LTMuOTM3IDAtMi4zNjctMS40NDEtMy45NDgtMy43NTgtMy45NDhzLTMuNzU5IDEuNTgxLTMuNzU5IDMuOTQ4YzAgMi4zNTEgMS40NDIgMy45MzcgMy43NTkgMy45MzdabS4wMS0xLjY0Yy0xLjA2OSAwLTEuNjE2LS45OC0xLjYxNi0yLjMxMiAwLTEuMzMzLjU0Ny0yLjMxNyAxLjYxNi0yLjMxNyAxLjA0OSAwIDEuNTk2Ljk4NCAxLjU5NiAyLjMxNyAwIDEuMzMyLS41NDcgMi4zMTItMS41OTYgMi4zMTJabTYuMTczIDQuMzU1YzEuNTc2IDAgMi40MTItLjgwNiAyLjg0NC0yLjAzOWwyLjk2OC04LjQ1MS0yLjI0Mi0uMDEtMS41OTYgNS42MDhoLS4wOGwtMS41OC01LjYwOEg4NS43OWwyLjc0IDcuODU1LS4xMjUuMzIzYy0uMjc4LjcxNi0uODEuNzUtMS41NTYuNTIybC0uNDc3IDEuNThjLjMwMy4xMy43OTUuMjIgMS4zMzIuMjJabTEzLjU4Ny0yLjcxNWMyLjMxNiAwIDMuNzU4LTEuNTg2IDMuNzU4LTMuOTM3IDAtMi4zNjctMS40NDItMy45NDgtMy43NTgtMy45NDgtMi4zMTcgMC0zLjc1OSAxLjU4MS0zLjc1OSAzLjk0OCAwIDIuMzUxIDEuNDQyIDMuOTM3IDMuNzU5IDMuOTM3Wm0uMDA5LTEuNjRjLTEuMDY4IDAtMS42MTUtLjk4LTEuNjE1LTIuMzEyIDAtMS4zMzMuNTQ3LTIuMzE3IDEuNjE1LTIuMzE3IDEuMDQ5IDAgMS41OTYuOTg0IDEuNTk2IDIuMzE3IDAgMS4zMzItLjU0NyAyLjMxMi0xLjU5NiAyLjMxMlptNy4yNDQtMi45MjRjLjAwNS0uOTg0LjU5Mi0xLjU2IDEuNDQ3LTEuNTYuODUgMCAxLjM2Mi41NTYgMS4zNTcgMS40OVYyNWgyLjExOHYtNC44NjJjMC0xLjc4LTEuMDQ0LTIuODc0LTIuNjM1LTIuODc0LTEuMTMzIDAtMS45NTQuNTU3LTIuMjk3IDEuNDQ3aC0uMDg5di0xLjM0N2gtMi4wMTlWMjVoMi4xMTh2LTQuNDE1Wk0xMTguNDE2IDI1aDIuMTUzdi0zLjYxaDEuNTcxbDEuOTI5IDMuNjFoMi4zNzZsLTIuMTYyLTMuOTU3YzEuMTU4LS40OTcgMS43OTktMS41MDcgMS43OTktMi44OTkgMC0yLjAyMy0xLjMzNy0zLjMyNi0zLjY0OS0zLjMyNmgtNC4wMTdWMjVabTIuMTUzLTUuMzR2LTMuMDgyaDEuNDUyYzEuMjQyIDAgMS44NDQuNTUyIDEuODQ0IDEuNTY2IDAgMS4wMS0uNjAyIDEuNTE3LTEuODM0IDEuNTE3aC0xLjQ2MlptOS4xNzIgNS40ODRjMS4xMjkgMCAxLjg2LS40OTIgMi4yMzMtMS4yMDNoLjA1OVYyNWgyLjAwOXYtNS4xNWMwLTEuODItMS41NDEtMi41ODYtMy4yNDItMi41ODYtMS44MjkgMC0zLjAzMi44NzUtMy4zMjYgMi4yNjdsMS45NTkuMTZjLjE0NC0uNTA4LjU5Ny0uODggMS4zNTctLjg4LjcyMSAwIDEuMTM0LjM2MiAxLjEzNC45ODl2LjAzYzAgLjQ5Mi0uNTIyLjU1Ni0xLjg0OS42ODYtMS41MTIuMTM5LTIuODY5LjY0Ni0yLjg2OSAyLjM1MSAwIDEuNTEyIDEuMDc5IDIuMjc3IDIuNTM1IDIuMjc3Wm0uNjA3LTEuNDYxYy0uNjUxIDAtMS4xMTktLjMwNC0xLjExOS0uODg1IDAtLjU5Ny40OTMtLjg5IDEuMjM4LS45OTUuNDYzLS4wNjQgMS4yMTgtLjE3NCAxLjQ3Mi0uMzQzdi44MWMwIC44MDEtLjY2MSAxLjQxMy0xLjU5MSAxLjQxM1pNMTM1LjY4NSAyNWgyLjExOHYtNy42MzZoLTIuMTE4VjI1Wm0xLjA2NC04LjYyYy42MzEgMCAxLjE0OC0uNDgzIDEuMTQ4LTEuMDc1IDAtLjU4Ni0uNTE3LTEuMDY5LTEuMTQ4LTEuMDY5LS42MjYgMC0xLjE0NC40ODMtMS4xNDQgMS4wNyAwIC41OTEuNTE4IDEuMDczIDEuMTQ0IDEuMDczWm00Ljg2OC0xLjU2MmgtMi4xMThWMjVoMi4xMThWMTQuODE4Wk0xNDQuODIgMjVoMi4yMzhsMS4zMTItNC44MDNoLjA5NEwxNDkuNzc3IDI1aDIuMjQybDIuMDczLTcuNjM2aC0yLjEzN2wtMS4xNjQgNS4xaC0uMDY0bC0xLjI1My01LjFoLTIuMTAzbC0xLjIzMyA1LjEzaC0uMDdsLTEuMTgzLTUuMTNoLTIuMTQzTDE0NC44MiAyNVptMTIuNTguMTQ0YzEuMTI4IDAgMS44NTktLjQ5MiAyLjIzMi0xLjIwM2guMDZWMjVoMi4wMDh2LTUuMTVjMC0xLjgyLTEuNTQxLTIuNTg2LTMuMjQxLTIuNTg2LTEuODMgMC0zLjAzMy44NzUtMy4zMjYgMi4yNjdsMS45NTguMTZjLjE0NS0uNTA4LjU5Ny0uODggMS4zNTgtLjg4LjcyMSAwIDEuMTMzLjM2MiAxLjEzMy45ODl2LjAzYzAgLjQ5Mi0uNTIyLjU1Ni0xLjg0OS42ODYtMS41MTIuMTM5LTIuODY5LjY0Ni0yLjg2OSAyLjM1MSAwIDEuNTEyIDEuMDc5IDIuMjc3IDIuNTM2IDIuMjc3Wm0uNjA2LTEuNDYxYy0uNjUxIDAtMS4xMTgtLjMwNC0xLjExOC0uODg1IDAtLjU5Ny40OTItLjg5IDEuMjM4LS45OTUuNDYyLS4wNjQgMS4yMTgtLjE3NCAxLjQ3MS0uMzQzdi44MWMwIC44MDEtLjY2MSAxLjQxMy0xLjU5MSAxLjQxM1ptNi4zNzEgNC4xOGMxLjU3NiAwIDIuNDEyLS44MDUgMi44NDQtMi4wMzhsMi45NjgtOC40NTEtMi4yNDItLjAxLTEuNTk2IDUuNjA4aC0uMDhsLTEuNTgtNS42MDhoLTIuMjI4bDIuNzQgNy44NTUtLjEyNS4zMjNjLS4yNzguNzE2LS44MS43NS0xLjU1Ni41MjJsLS40NzcgMS41OGMuMzAzLjEzLjc5NS4yMiAxLjMzMi4yMloiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEzLjU1NCAxNC4xMDVDMTUuNjE0IDEwLjQ2NCAxOS41MTYgOCAyNCA4YzYuNjI4IDAgMTIgNS4zNzMgMTIgMTJhMTEuOTY3IDExLjk2NyAwIDAgMS0uNjEgMy43NjRIMTIuNjFhMTEuODk2IDExLjg5NiAwIDAgMS0uNDUxLTEuODkzbC4yMTIgMS4wMDhoMTYuNjkzYzEuMDY0IDAgMS45NDMtLjU0NSAyLjM1LTEuNDU3LjQ0NC0uOTk0LjI1Ny0yLjAzLS4zOTYtMi45MzMtLjcwNS0uOTc1LTEuODg5LTIuMzQzLTIuNzA5LTIuOTY0LTEuNTEtMS4xNDMtMy40My0xLjMxLTQuOTkxLTEuMzYzbC0uNDQ5LS4wMTYtLjEzLS4wMDZjLS42MjUtLjAyNy0uOTY1LS4wNDEtNC40MzgtLjA0MXYuMDAxcy0zLjEzNy4wMDItNC43NDcuMDA1Wm0tMS41MjggNS4zNzljLjAxNy0uNDA1LjA1NC0uODA4LjExMS0xLjIwOGg5LjU3M1YxNy4wNmgtOS4zMzJhLjE0NS4xNDUgMCAwIDEtLjAwMy4wMTJsLS4wMDMuMDEtLjIxNCAxLjA1NWExMi4wNiAxMi4wNiAwIDAgMSAuNzk3LTIuODE0YzEuNzk4LS4wMDUgMy42NDUtLjAxIDUuMzQzLS4wMSAzLjE4IDAgMy43MjEuMDE0IDQuNTIuMDQ3LjIxNy4wMDkuNDI4LjAxNS42MzUuMDIgMi4wNzYuMDU1IDMuNzE4LjA5OCA2LjU0OSAzLjc1OC4wODYuMTEuMTcyLjIyMS4yMzUuMzQ2SDEyLjAyNlptMS40ODQtNS4zMDNjLS4yMDUuMzctLjM5Ljc1LS41NTUgMS4xNDJoLS4wMWMuMTY2LS4zOTMuMzU5LS43NzEuNTY1LTEuMTQyWm0uMDQxLS4wNzNabS0xLjUxNiA2LjU5M2gxOC4zNDZjLS4xMzguNTMyLS41Ni45Ni0xLjMxNS45NkgxMi4xMjhhMTIuMzE1IDEyLjMxNSAwIDAgMS0uMDkzLS45NlptLjU4MiAzLjA3OWMuMTM4LjQwNy4yOTYuODA4LjQ3NSAxLjE5OUgzNC45MUMzMy4wMTcgMjkuMTE5IDI4Ljg1IDMyIDI0IDMyYy01LjMwNSAwLTkuNzk4LTMuNDQ3LTExLjM4NC04LjIyWm0tLjYwNy00LjAwNS4wMS0uMTU4di43NjNjLS4wMDItLjA1NC0uMDA2LS4xMDctLjAxLS4xNi0uMDA1LS4wNzQtLjAxLS4xNDctLjAxLS4yMjIgMC0uMDc1LjAwNS0uMTQ5LjAxLS4yMjNaIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy41NTQgMTQuMTA1QzE1LjYxNCAxMC40NjQgMTkuNTE2IDggMjQgOGM2LjYyOCAwIDEyIDUuMzczIDEyIDEyYTExLjk2NyAxMS45NjcgMCAwIDEtLjYxIDMuNzY0SDEyLjYxYTExLjg5NiAxMS44OTYgMCAwIDEtLjQ1MS0xLjg5M2wuMjEyIDEuMDA4aDE2LjY5M2MxLjA2NCAwIDEuOTQzLS41NDUgMi4zNS0xLjQ1Ny40NDQtLjk5NC4yNTctMi4wMy0uMzk2LTIuOTMzLS43MDUtLjk3NS0xLjg4OS0yLjM0My0yLjcwOS0yLjk2NC0xLjUxLTEuMTQzLTMuNDMtMS4zMS00Ljk5MS0xLjM2M2wtLjQ0OS0uMDE2LS4xMy0uMDA2Yy0uNjI1LS4wMjctLjk2NS0uMDQxLTQuNDM4LS4wNDF2LjAwMXMtMy4xMzcuMDAyLTQuNzQ3LjAwNVptLTEuNTI4IDUuMzc5Yy4wMTctLjQwNS4wNTQtLjgwOC4xMTEtMS4yMDhoOS41NzNWMTcuMDZoLTkuMzMyYS4xNDUuMTQ1IDAgMCAxLS4wMDMuMDEybC0uMDAzLjAxLS4yMTQgMS4wNTVhMTIuMDYgMTIuMDYgMCAwIDEgLjc5Ny0yLjgxNGMxLjc5OC0uMDA1IDMuNjQ1LS4wMSA1LjM0My0uMDEgMy4xOCAwIDMuNzIxLjAxNCA0LjUyLjA0Ny4yMTcuMDA5LjQyOC4wMTUuNjM1LjAyIDIuMDc2LjA1NSAzLjcxOC4wOTggNi41NDkgMy43NTguMDg2LjExLjE3Mi4yMjEuMjM1LjM0NkgxMi4wMjZabTEuNDg0LTUuMzAzYy0uMjA1LjM3LS4zOS43NS0uNTU1IDEuMTQyaC0uMDFjLjE2Ni0uMzkzLjM1OS0uNzcxLjU2NS0xLjE0MlptLjA0MS0uMDczWm0tMS41MTYgNi41OTNoMTguMzQ2Yy0uMTM4LjUzMi0uNTYuOTYtMS4zMTUuOTZIMTIuMTI4YTEyLjMxNSAxMi4zMTUgMCAwIDEtLjA5My0uOTZabS41ODIgMy4wNzljLjEzOC40MDcuMjk2LjgwOC40NzUgMS4xOTlIMzQuOTFDMzMuMDE3IDI5LjExOSAyOC44NSAzMiAyNCAzMmMtNS4zMDUgMC05Ljc5OC0zLjQ0Ny0xMS4zODQtOC4yMlptLS42MDctNC4wMDUuMDEtLjE1OHYuNzYzYy0uMDAyLS4wNTQtLjAwNi0uMTA3LS4wMS0uMTYtLjAwNS0uMDc0LS4wMS0uMTQ3LS4wMS0uMjIyIDAtLjA3NS4wMDUtLjE0OS4wMS0uMjIzWiIgZmlsbD0idXJsKCM3ZnFyN3Btb2tiKSIgZmlsbC1vcGFjaXR5PSIuMSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iNTV6OGFwZnh2YSIgeDE9IjE4MSIgeTE9IjAiIHgyPSIyNiIgeTI9IjM3LjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjQjYzQkNFIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNTAxNkExIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjdmcXI3cG1va2IiIHgxPSIxOS41IiB5MT0iMzIiIHgyPSIxOS41IiB5Mj0iOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM1QjFCQTciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="}}]); \ No newline at end of file diff --git a/assets/js/f6a246db.57d83837.js b/assets/js/f6a246db.57d83837.js deleted file mode 100644 index 5910d50659..0000000000 --- a/assets/js/f6a246db.57d83837.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[4314],{24692:(M,j,L)=>{L.r(j),L.d(j,{assets:()=>t,contentTitle:()=>I,default:()=>i,frontMatter:()=>T,metadata:()=>N,toc:()=>y});const N=JSON.parse('{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"This guide explains how to deploy Langflow on Railway, a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling.","source":"@site/docs/Deployment/deployment-railway.mdx","sourceDirName":"Deployment","slug":"/deployment-railway","permalink":"/deployment-railway","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Deploy Langflow on Railway","slug":"/deployment-railway"},"sidebar":"docs","previous":{"title":"Hugging Face Spaces","permalink":"/deployment-hugging-face-spaces"},"next":{"title":"Render","permalink":"/deployment-render"}}');var u=L(74848),D=L(28453);const T={title:"Deploy Langflow on Railway",slug:"/deployment-railway"},I=void 0,t={},y=[];function g(M){const j={a:"a",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,D.R)(),...M.components};return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(j.p,{children:["This guide explains how to deploy Langflow on ",(0,u.jsx)(j.a,{href:"https://railway.app/",children:"Railway"}),", a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling."]}),"\n",(0,u.jsxs)(j.ol,{children:["\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsx)(j.p,{children:"Click the following button to go to Railway:"}),"\n",(0,u.jsx)(j.p,{children:(0,u.jsx)(j.a,{href:"https://railway.app/template/JMXEWp?referralCode=MnPSdg",children:(0,u.jsx)(j.img,{alt:"Deploy on Railway",src:L(70234).A+"",width:"183",height:"40"})})}),"\n"]}),"\n",(0,u.jsxs)(j.li,{children:["\n",(0,u.jsxs)(j.p,{children:["Click ",(0,u.jsx)(j.strong,{children:"Deploy Now"}),".\nRailway automatically does the following:"]}),"\n",(0,u.jsxs)(j.ul,{children:["\n",(0,u.jsx)(j.li,{children:"Sets up the infrastructure."}),"\n",(0,u.jsx)(j.li,{children:"Deploys Langflow."}),"\n",(0,u.jsx)(j.li,{children:"Starts the application."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,u.jsx)(j.p,{children:"Wait for the deployment to complete."}),"\n",(0,u.jsx)(j.p,{children:"Your Langflow instance is now ready to use."})]})}function i(M={}){const{wrapper:j}={...(0,D.R)(),...M.components};return j?(0,u.jsx)(j,{...M,children:(0,u.jsx)(g,{...M})}):g(M)}},28453:(M,j,L)=>{L.d(j,{R:()=>T,x:()=>I});var N=L(96540);const u={},D=N.createContext(u);function T(M){const j=N.useContext(D);return N.useMemo(function(){return"function"==typeof M?M(j):{...j,...M}},[j,M])}function I(M){let j;return j=M.disableParentContext?"function"==typeof M.components?M.components(u):M.components||u:T(M.components),N.createElement(D.Provider,{value:j},M.children)}},70234:(M,j,L)=>{L.d(j,{A:()=>N});const N="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgzIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMTgzIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDZhNiA2IDAgMCAxIDYtNmgxNzFhNiA2IDAgMCAxIDYgNnYyOGE2IDYgMCAwIDEtNiA2SDZhNiA2IDAgMCAxLTYtNlY2WiIgZmlsbD0idXJsKCM1NXo4YXBmeHZhKSIvPjxwYXRoIGQ9Ik01MC40OTQgMjVjMy4xMDMgMCA0Ljk4Mi0xLjkxOSA0Ljk4Mi01LjEgMC0zLjE3My0xLjg4LTUuMDgyLTQuOTUyLTUuMDgyaC0zLjY0VjI1aDMuNjFabS0xLjQ1Ni0xLjg0NXYtNi40OTJoMS4zNzJjMS45MDkgMCAyLjkxOC45NzQgMi45MTggMy4yMzYgMCAyLjI3Mi0xLjAxIDMuMjU2LTIuOTIzIDMuMjU2aC0xLjM2N1pNNjAuNTEgMjUuMTVjMS44ODkgMCAzLjE2Mi0uOTIgMy40Ni0yLjMzN2wtMS45NTktLjEyOWMtLjIxNC41ODItLjc2Ljg4NS0xLjQ2Ni44ODUtMS4wNiAwLTEuNzMtLjctMS43My0xLjg0di0uMDA0aDUuMnYtLjU4MmMwLTIuNTk1LTEuNTcxLTMuODc4LTMuNTktMy44NzgtMi4yNDcgMC0zLjcwNCAxLjU5Ni0zLjcwNCAzLjk1MyAwIDIuNDIgMS40MzcgMy45MzIgMy43ODkgMy45MzJabS0xLjY5Ni00LjczOGMuMDQ1LS44Ny43MDctMS41NjYgMS42NDYtMS41NjYuOTIgMCAxLjU1Ni42NTYgMS41NjEgMS41NjZoLTMuMjA2Wm02LjU4MyA3LjQ1M2gyLjExOHYtNC4wODdoLjA2NGMuMjk0LjYzNi45MzUgMS4zNDcgMi4xNjggMS4zNDcgMS43NCAwIDMuMDk3LTEuMzc3IDMuMDk3LTMuOTMyIDAtMi42MjUtMS40MTctMy45MjgtMy4wOTItMy45MjgtMS4yNzggMC0xLjg5Ljc2LTIuMTczIDEuMzgyaC0uMDk0di0xLjI4MmgtMi4wODh2MTAuNVptMi4wNzMtNi42ODJjMC0xLjM2Mi41NzctMi4yMzIgMS42MDYtMi4yMzIgMS4wNDkgMCAxLjYwNi45MSAxLjYwNiAyLjIzMiAwIDEuMzMyLS41NjcgMi4yNTctMS42MDYgMi4yNTctMS4wMiAwLTEuNjA2LS44OTUtMS42MDYtMi4yNTdabTguOTA0LTYuMzY0aC0yLjExOFYyNWgyLjExOFYxNC44MThabTUuMTQ3IDEwLjMzMWMyLjMxNyAwIDMuNzU4LTEuNTg2IDMuNzU4LTMuOTM3IDAtMi4zNjctMS40NDEtMy45NDgtMy43NTgtMy45NDhzLTMuNzU5IDEuNTgxLTMuNzU5IDMuOTQ4YzAgMi4zNTEgMS40NDIgMy45MzcgMy43NTkgMy45MzdabS4wMS0xLjY0Yy0xLjA2OSAwLTEuNjE2LS45OC0xLjYxNi0yLjMxMiAwLTEuMzMzLjU0Ny0yLjMxNyAxLjYxNi0yLjMxNyAxLjA0OSAwIDEuNTk2Ljk4NCAxLjU5NiAyLjMxNyAwIDEuMzMyLS41NDcgMi4zMTItMS41OTYgMi4zMTJabTYuMTczIDQuMzU1YzEuNTc2IDAgMi40MTItLjgwNiAyLjg0NC0yLjAzOWwyLjk2OC04LjQ1MS0yLjI0Mi0uMDEtMS41OTYgNS42MDhoLS4wOGwtMS41OC01LjYwOEg4NS43OWwyLjc0IDcuODU1LS4xMjUuMzIzYy0uMjc4LjcxNi0uODEuNzUtMS41NTYuNTIybC0uNDc3IDEuNThjLjMwMy4xMy43OTUuMjIgMS4zMzIuMjJabTEzLjU4Ny0yLjcxNWMyLjMxNiAwIDMuNzU4LTEuNTg2IDMuNzU4LTMuOTM3IDAtMi4zNjctMS40NDItMy45NDgtMy43NTgtMy45NDgtMi4zMTcgMC0zLjc1OSAxLjU4MS0zLjc1OSAzLjk0OCAwIDIuMzUxIDEuNDQyIDMuOTM3IDMuNzU5IDMuOTM3Wm0uMDA5LTEuNjRjLTEuMDY4IDAtMS42MTUtLjk4LTEuNjE1LTIuMzEyIDAtMS4zMzMuNTQ3LTIuMzE3IDEuNjE1LTIuMzE3IDEuMDQ5IDAgMS41OTYuOTg0IDEuNTk2IDIuMzE3IDAgMS4zMzItLjU0NyAyLjMxMi0xLjU5NiAyLjMxMlptNy4yNDQtMi45MjRjLjAwNS0uOTg0LjU5Mi0xLjU2IDEuNDQ3LTEuNTYuODUgMCAxLjM2Mi41NTYgMS4zNTcgMS40OVYyNWgyLjExOHYtNC44NjJjMC0xLjc4LTEuMDQ0LTIuODc0LTIuNjM1LTIuODc0LTEuMTMzIDAtMS45NTQuNTU3LTIuMjk3IDEuNDQ3aC0uMDg5di0xLjM0N2gtMi4wMTlWMjVoMi4xMTh2LTQuNDE1Wk0xMTguNDE2IDI1aDIuMTUzdi0zLjYxaDEuNTcxbDEuOTI5IDMuNjFoMi4zNzZsLTIuMTYyLTMuOTU3YzEuMTU4LS40OTcgMS43OTktMS41MDcgMS43OTktMi44OTkgMC0yLjAyMy0xLjMzNy0zLjMyNi0zLjY0OS0zLjMyNmgtNC4wMTdWMjVabTIuMTUzLTUuMzR2LTMuMDgyaDEuNDUyYzEuMjQyIDAgMS44NDQuNTUyIDEuODQ0IDEuNTY2IDAgMS4wMS0uNjAyIDEuNTE3LTEuODM0IDEuNTE3aC0xLjQ2MlptOS4xNzIgNS40ODRjMS4xMjkgMCAxLjg2LS40OTIgMi4yMzMtMS4yMDNoLjA1OVYyNWgyLjAwOXYtNS4xNWMwLTEuODItMS41NDEtMi41ODYtMy4yNDItMi41ODYtMS44MjkgMC0zLjAzMi44NzUtMy4zMjYgMi4yNjdsMS45NTkuMTZjLjE0NC0uNTA4LjU5Ny0uODggMS4zNTctLjg4LjcyMSAwIDEuMTM0LjM2MiAxLjEzNC45ODl2LjAzYzAgLjQ5Mi0uNTIyLjU1Ni0xLjg0OS42ODYtMS41MTIuMTM5LTIuODY5LjY0Ni0yLjg2OSAyLjM1MSAwIDEuNTEyIDEuMDc5IDIuMjc3IDIuNTM1IDIuMjc3Wm0uNjA3LTEuNDYxYy0uNjUxIDAtMS4xMTktLjMwNC0xLjExOS0uODg1IDAtLjU5Ny40OTMtLjg5IDEuMjM4LS45OTUuNDYzLS4wNjQgMS4yMTgtLjE3NCAxLjQ3Mi0uMzQzdi44MWMwIC44MDEtLjY2MSAxLjQxMy0xLjU5MSAxLjQxM1pNMTM1LjY4NSAyNWgyLjExOHYtNy42MzZoLTIuMTE4VjI1Wm0xLjA2NC04LjYyYy42MzEgMCAxLjE0OC0uNDgzIDEuMTQ4LTEuMDc1IDAtLjU4Ni0uNTE3LTEuMDY5LTEuMTQ4LTEuMDY5LS42MjYgMC0xLjE0NC40ODMtMS4xNDQgMS4wNyAwIC41OTEuNTE4IDEuMDczIDEuMTQ0IDEuMDczWm00Ljg2OC0xLjU2MmgtMi4xMThWMjVoMi4xMThWMTQuODE4Wk0xNDQuODIgMjVoMi4yMzhsMS4zMTItNC44MDNoLjA5NEwxNDkuNzc3IDI1aDIuMjQybDIuMDczLTcuNjM2aC0yLjEzN2wtMS4xNjQgNS4xaC0uMDY0bC0xLjI1My01LjFoLTIuMTAzbC0xLjIzMyA1LjEzaC0uMDdsLTEuMTgzLTUuMTNoLTIuMTQzTDE0NC44MiAyNVptMTIuNTguMTQ0YzEuMTI4IDAgMS44NTktLjQ5MiAyLjIzMi0xLjIwM2guMDZWMjVoMi4wMDh2LTUuMTVjMC0xLjgyLTEuNTQxLTIuNTg2LTMuMjQxLTIuNTg2LTEuODMgMC0zLjAzMy44NzUtMy4zMjYgMi4yNjdsMS45NTguMTZjLjE0NS0uNTA4LjU5Ny0uODggMS4zNTgtLjg4LjcyMSAwIDEuMTMzLjM2MiAxLjEzMy45ODl2LjAzYzAgLjQ5Mi0uNTIyLjU1Ni0xLjg0OS42ODYtMS41MTIuMTM5LTIuODY5LjY0Ni0yLjg2OSAyLjM1MSAwIDEuNTEyIDEuMDc5IDIuMjc3IDIuNTM2IDIuMjc3Wm0uNjA2LTEuNDYxYy0uNjUxIDAtMS4xMTgtLjMwNC0xLjExOC0uODg1IDAtLjU5Ny40OTItLjg5IDEuMjM4LS45OTUuNDYyLS4wNjQgMS4yMTgtLjE3NCAxLjQ3MS0uMzQzdi44MWMwIC44MDEtLjY2MSAxLjQxMy0xLjU5MSAxLjQxM1ptNi4zNzEgNC4xOGMxLjU3NiAwIDIuNDEyLS44MDUgMi44NDQtMi4wMzhsMi45NjgtOC40NTEtMi4yNDItLjAxLTEuNTk2IDUuNjA4aC0uMDhsLTEuNTgtNS42MDhoLTIuMjI4bDIuNzQgNy44NTUtLjEyNS4zMjNjLS4yNzguNzE2LS44MS43NS0xLjU1Ni41MjJsLS40NzcgMS41OGMuMzAzLjEzLjc5NS4yMiAxLjMzMi4yMloiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEzLjU1NCAxNC4xMDVDMTUuNjE0IDEwLjQ2NCAxOS41MTYgOCAyNCA4YzYuNjI4IDAgMTIgNS4zNzMgMTIgMTJhMTEuOTY3IDExLjk2NyAwIDAgMS0uNjEgMy43NjRIMTIuNjFhMTEuODk2IDExLjg5NiAwIDAgMS0uNDUxLTEuODkzbC4yMTIgMS4wMDhoMTYuNjkzYzEuMDY0IDAgMS45NDMtLjU0NSAyLjM1LTEuNDU3LjQ0NC0uOTk0LjI1Ny0yLjAzLS4zOTYtMi45MzMtLjcwNS0uOTc1LTEuODg5LTIuMzQzLTIuNzA5LTIuOTY0LTEuNTEtMS4xNDMtMy40My0xLjMxLTQuOTkxLTEuMzYzbC0uNDQ5LS4wMTYtLjEzLS4wMDZjLS42MjUtLjAyNy0uOTY1LS4wNDEtNC40MzgtLjA0MXYuMDAxcy0zLjEzNy4wMDItNC43NDcuMDA1Wm0tMS41MjggNS4zNzljLjAxNy0uNDA1LjA1NC0uODA4LjExMS0xLjIwOGg5LjU3M1YxNy4wNmgtOS4zMzJhLjE0NS4xNDUgMCAwIDEtLjAwMy4wMTJsLS4wMDMuMDEtLjIxNCAxLjA1NWExMi4wNiAxMi4wNiAwIDAgMSAuNzk3LTIuODE0YzEuNzk4LS4wMDUgMy42NDUtLjAxIDUuMzQzLS4wMSAzLjE4IDAgMy43MjEuMDE0IDQuNTIuMDQ3LjIxNy4wMDkuNDI4LjAxNS42MzUuMDIgMi4wNzYuMDU1IDMuNzE4LjA5OCA2LjU0OSAzLjc1OC4wODYuMTEuMTcyLjIyMS4yMzUuMzQ2SDEyLjAyNlptMS40ODQtNS4zMDNjLS4yMDUuMzctLjM5Ljc1LS41NTUgMS4xNDJoLS4wMWMuMTY2LS4zOTMuMzU5LS43NzEuNTY1LTEuMTQyWm0uMDQxLS4wNzNabS0xLjUxNiA2LjU5M2gxOC4zNDZjLS4xMzguNTMyLS41Ni45Ni0xLjMxNS45NkgxMi4xMjhhMTIuMzE1IDEyLjMxNSAwIDAgMS0uMDkzLS45NlptLjU4MiAzLjA3OWMuMTM4LjQwNy4yOTYuODA4LjQ3NSAxLjE5OUgzNC45MUMzMy4wMTcgMjkuMTE5IDI4Ljg1IDMyIDI0IDMyYy01LjMwNSAwLTkuNzk4LTMuNDQ3LTExLjM4NC04LjIyWm0tLjYwNy00LjAwNS4wMS0uMTU4di43NjNjLS4wMDItLjA1NC0uMDA2LS4xMDctLjAxLS4xNi0uMDA1LS4wNzQtLjAxLS4xNDctLjAxLS4yMjIgMC0uMDc1LjAwNS0uMTQ5LjAxLS4yMjNaIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy41NTQgMTQuMTA1QzE1LjYxNCAxMC40NjQgMTkuNTE2IDggMjQgOGM2LjYyOCAwIDEyIDUuMzczIDEyIDEyYTExLjk2NyAxMS45NjcgMCAwIDEtLjYxIDMuNzY0SDEyLjYxYTExLjg5NiAxMS44OTYgMCAwIDEtLjQ1MS0xLjg5M2wuMjEyIDEuMDA4aDE2LjY5M2MxLjA2NCAwIDEuOTQzLS41NDUgMi4zNS0xLjQ1Ny40NDQtLjk5NC4yNTctMi4wMy0uMzk2LTIuOTMzLS43MDUtLjk3NS0xLjg4OS0yLjM0My0yLjcwOS0yLjk2NC0xLjUxLTEuMTQzLTMuNDMtMS4zMS00Ljk5MS0xLjM2M2wtLjQ0OS0uMDE2LS4xMy0uMDA2Yy0uNjI1LS4wMjctLjk2NS0uMDQxLTQuNDM4LS4wNDF2LjAwMXMtMy4xMzcuMDAyLTQuNzQ3LjAwNVptLTEuNTI4IDUuMzc5Yy4wMTctLjQwNS4wNTQtLjgwOC4xMTEtMS4yMDhoOS41NzNWMTcuMDZoLTkuMzMyYS4xNDUuMTQ1IDAgMCAxLS4wMDMuMDEybC0uMDAzLjAxLS4yMTQgMS4wNTVhMTIuMDYgMTIuMDYgMCAwIDEgLjc5Ny0yLjgxNGMxLjc5OC0uMDA1IDMuNjQ1LS4wMSA1LjM0My0uMDEgMy4xOCAwIDMuNzIxLjAxNCA0LjUyLjA0Ny4yMTcuMDA5LjQyOC4wMTUuNjM1LjAyIDIuMDc2LjA1NSAzLjcxOC4wOTggNi41NDkgMy43NTguMDg2LjExLjE3Mi4yMjEuMjM1LjM0NkgxMi4wMjZabTEuNDg0LTUuMzAzYy0uMjA1LjM3LS4zOS43NS0uNTU1IDEuMTQyaC0uMDFjLjE2Ni0uMzkzLjM1OS0uNzcxLjU2NS0xLjE0MlptLjA0MS0uMDczWm0tMS41MTYgNi41OTNoMTguMzQ2Yy0uMTM4LjUzMi0uNTYuOTYtMS4zMTUuOTZIMTIuMTI4YTEyLjMxNSAxMi4zMTUgMCAwIDEtLjA5My0uOTZabS41ODIgMy4wNzljLjEzOC40MDcuMjk2LjgwOC40NzUgMS4xOTlIMzQuOTFDMzMuMDE3IDI5LjExOSAyOC44NSAzMiAyNCAzMmMtNS4zMDUgMC05Ljc5OC0zLjQ0Ny0xMS4zODQtOC4yMlptLS42MDctNC4wMDUuMDEtLjE1OHYuNzYzYy0uMDAyLS4wNTQtLjAwNi0uMTA3LS4wMS0uMTYtLjAwNS0uMDc0LS4wMS0uMTQ3LS4wMS0uMjIyIDAtLjA3NS4wMDUtLjE0OS4wMS0uMjIzWiIgZmlsbD0idXJsKCM3ZnFyN3Btb2tiKSIgZmlsbC1vcGFjaXR5PSIuMSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iNTV6OGFwZnh2YSIgeDE9IjE4MSIgeTE9IjAiIHgyPSIyNiIgeTI9IjM3LjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjQjYzQkNFIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNTAxNkExIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjdmcXI3cG1va2IiIHgxPSIxOS41IiB5MT0iMzIiIHgyPSIxOS41IiB5Mj0iOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM1QjFCQTciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="}}]); \ No newline at end of file diff --git a/assets/js/f735f5f3.c7b910ec.js b/assets/js/f735f5f3.74045de8.js similarity index 94% rename from assets/js/f735f5f3.c7b910ec.js rename to assets/js/f735f5f3.74045de8.js index f7ecea4b0d..d289c0924b 100644 --- a/assets/js/f735f5f3.c7b910ec.js +++ b/assets/js/f735f5f3.74045de8.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[2495],{17886:(e,n,o)=>{o.d(n,{A:()=>l});o(96540);var t=o(64058),s=o(74848);function l({name:e,...n}){const o=t[e];return o?(0,s.jsx)(o,{...n}):null}},41884:(e,n,o)=>{o.r(n),o.d(n,{CH:()=>h,assets:()=>d,chCodeConfig:()=>p,contentTitle:()=>c,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Each Langflow server has a file management system where you can store files that you want to use in your flows.","source":"@site/docs/Concepts/concepts-file-management.mdx","sourceDirName":"Concepts","slug":"/concepts-file-management","permalink":"/concepts-file-management","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Manage files","slug":"/concepts-file-management"},"sidebar":"docs","previous":{"title":"Environment variables","permalink":"/environment-variables"},"next":{"title":"Manage memory","permalink":"/memory"}}');var s=o(74848),l=o(28453),i=o(24754),a=o(17886);const r={title:"Manage files",slug:"/concepts-file-management"},c=void 0,d={},h={annotations:i.hk,Code:i.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[{value:"Use the file management UI",id:"use-the-file-management-ui",level:2},{value:"Upload and manage files with the Langflow API",id:"upload-and-manage-files-with-the-langflow-api",level:2},{value:"Use files in a flow",id:"use-files-in-a-flow",level:2},{value:"Load files at runtime",id:"load-files-at-runtime",level:3},{value:"Upload images",id:"upload-images",level:2},{value:"Work with video files",id:"work-with-video-files",level:2},{value:"Set the maximum file size",id:"set-the-maximum-file-size",level:2},{value:"See also",id:"see-also",level:2}];function f(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return h||g("CH",!1),h.Code||g("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(n.p,{children:"Each Langflow server has a file management system where you can store files that you want to use in your flows."}),"\n",(0,s.jsx)(n.p,{children:"Files uploaded to Langflow file management are stored locally to your Langflow server, and they are available to all of your flows."}),"\n",(0,s.jsx)(n.p,{children:"Uploading files to Langflow file management keeps your files in a central location, and allows you to reuse files across flows without repeated manual uploads."}),"\n",(0,s.jsx)(n.h2,{id:"use-the-file-management-ui",children:"Use the file management UI"}),"\n",(0,s.jsx)(n.p,{children:"You can use the file management UI to upload files from your local machine to your own Langflow server.\nYou can also manage all files that have been uploaded to your Langflow server."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Navigate to Langflow file management:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["In the Langflow UI, on the ",(0,s.jsxs)(n.a,{href:"/concepts-flows#projects",children:[(0,s.jsx)(n.strong,{children:"Projects"})," page"]})," page, click ",(0,s.jsx)(n.strong,{children:"My Files"})," below the list of projects."]}),"\n",(0,s.jsxs)(n.li,{children:["From a browser, navigate to your Langflow server's ",(0,s.jsx)(n.code,{children:"/files"})," endpoint, such as ",(0,s.jsx)(n.code,{children:"http://localhost:7860/files"}),". Modify the base URL as needed for your Langflow server."]}),"\n",(0,s.jsxs)(n.li,{children:["For programmatic file management, use the ",(0,s.jsx)(n.a,{href:"/api-files",children:"Langflow API files endpoints"}),". However, the following steps assume you're using the file management UI."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["On the ",(0,s.jsx)(n.strong,{children:"My Files"})," page, click ",(0,s.jsx)(n.strong,{children:"Upload"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select one or more files to upload."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After uploading files, you can rename, download, copy, or delete files within the file management UI:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To delete a file, hover over a file's icon, select it, and then click ",(0,s.jsx)(a.A,{name:"Trash2","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Delete"}),".\nYou can delete multiple files in a single action."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To download a file, hover over a file's icon, select it, and then click ",(0,s.jsx)(a.A,{name:"Download","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Download"}),".\nIf you download multiple files in a single action, they are saved together in a zip file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"upload-and-manage-files-with-the-langflow-api",children:"Upload and manage files with the Langflow API"}),"\n",(0,s.jsx)(n.p,{children:"With the Langflow API, you can upload and manage files in Langflow file management, and you can send files to flows programmatically at runtime."}),"\n",(0,s.jsxs)(n.p,{children:["For more information and examples, see ",(0,s.jsx)(n.a,{href:"/api-files",children:"Files endpoints"})," and ",(0,s.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"use-files-in-a-flow",children:"Use files in a flow"}),"\n",(0,s.jsxs)(n.p,{children:["To use files in your Langflow file management system in a flow, add a component that accepts file input to your flow, such as the ",(0,s.jsx)(n.strong,{children:"File"})," component."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, add a ",(0,s.jsx)(n.strong,{children:"File"})," component to your flow, click ",(0,s.jsx)(n.strong,{children:"Select files"}),", and then select files from the ",(0,s.jsx)(n.strong,{children:"My Files"})," list."]}),"\n",(0,s.jsxs)(n.p,{children:["This list includes all files in your server's file management system, but you can only select ",(0,s.jsxs)(n.a,{href:"/components-data#file",children:["file types that are supported by the ",(0,s.jsx)(n.strong,{children:"File"})," component"]}),".\nIf you need another file type, you must use a different component that supports that file type, or you need to convert it to a supported type before uploading it."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information about the ",(0,s.jsx)(n.strong,{children:"File"})," component and other data loading components, see ",(0,s.jsx)(n.a,{href:"/components-data",children:"Data components"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"load-files-at-runtime",children:"Load files at runtime"}),"\n",(0,s.jsxs)(n.p,{children:["You can use preloaded files in your flows, and you can load files at runtime, if your flow accepts file input.\nFor an example, see ",(0,s.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"upload-images",children:"Upload images"}),"\n",(0,s.jsx)(n.p,{children:"Langflow supports base64 images in the following formats:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"PNG"}),"\n",(0,s.jsx)(n.li,{children:"JPG/JPEG"}),"\n",(0,s.jsx)(n.li,{children:"GIF"}),"\n",(0,s.jsx)(n.li,{children:"BMP"}),"\n",(0,s.jsx)(n.li,{children:"WebP"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can upload images to the ",(0,s.jsx)(n.strong,{children:"Playground"})," chat interface and as runtime input with the Langflow API."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.strong,{children:"Playground"}),", you can drag-and-drop images into the chat input area, or you can click the ",(0,s.jsx)(n.strong,{children:"Attach image"})," icon to select an image to upload."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When you trigger a flow with the ",(0,s.jsx)(n.code,{children:"/api/v1/run/$FLOW_ID"})," endpoint, you can use the ",(0,s.jsx)(n.code,{children:"files"})," parameter to attach the base64-encoded image data to the request payload:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:p,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 "http://',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_ADDRESS",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"$FLOW_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-H ",props:{style:{color:"#C9D1D9"}}},{content:'"Content-Type: application/json" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-H ",props:{style:{color:"#C9D1D9"}}},{content:'"x-api-key: ',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_API_KEY",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-d ",props:{style:{color:"#C9D1D9"}}},{content:"'{",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "session_id": "custom_session_123",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_value": "What is in this image?",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "output_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "files": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."]',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more specialized image processing, browse third-party ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," or ",(0,s.jsx)(n.a,{href:"/components-custom-components",children:"create your own components"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"work-with-video-files",children:"Work with video files"}),"\n",(0,s.jsxs)(n.p,{children:["For videos, see the ",(0,s.jsx)(n.strong,{children:"Twelve Labs"})," and ",(0,s.jsx)(n.strong,{children:"YouTube"})," ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," in the Langflow ",(0,s.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsx)(n.h2,{id:"set-the-maximum-file-size",children:"Set the maximum file size"}),"\n",(0,s.jsxs)(n.p,{children:["By default, the maximum file size is 100 MB.\nTo modify this value, change the ",(0,s.jsxs)(n.a,{href:"/environment-variables#LANGFLOW_MAX_FILE_SIZE_UPLOAD",children:[(0,s.jsx)(n.code,{children:"--max-file-size-upload"})," environment variable"]}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/components-data",children:"Data components"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/components-processing",children:"Processing components"})}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(f,{...e})}):f(e)}function g(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` 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([[2495],{17886:(e,n,o)=>{o.d(n,{A:()=>l});o(96540);var t=o(64058),s=o(74848);function l({name:e,...n}){const o=t[e];return o?(0,s.jsx)(o,{...n}):null}},41884:(e,n,o)=>{o.r(n),o.d(n,{CH:()=>h,assets:()=>d,chCodeConfig:()=>p,contentTitle:()=>c,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Each Langflow server has a file management system where you can store files that you want to use in your flows.","source":"@site/docs/Concepts/concepts-file-management.mdx","sourceDirName":"Concepts","slug":"/concepts-file-management","permalink":"/concepts-file-management","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Manage files","slug":"/concepts-file-management"},"sidebar":"docs","previous":{"title":"Environment variables","permalink":"/environment-variables"},"next":{"title":"Manage memory","permalink":"/memory"}}');var s=o(74848),l=o(28453),i=o(24754),a=o(17886);const r={title:"Manage files",slug:"/concepts-file-management"},c=void 0,d={},h={annotations:i.hk,Code:i.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[{value:"Use the file management UI",id:"use-the-file-management-ui",level:2},{value:"Upload and manage files with the Langflow API",id:"upload-and-manage-files-with-the-langflow-api",level:2},{value:"Use files in a flow",id:"use-files-in-a-flow",level:2},{value:"Load files at runtime",id:"load-files-at-runtime",level:3},{value:"Upload images",id:"upload-images",level:2},{value:"Work with video files",id:"work-with-video-files",level:2},{value:"Set the maximum file size",id:"set-the-maximum-file-size",level:2},{value:"See also",id:"see-also",level:2}];function f(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return h||g("CH",!1),h.Code||g("CH.Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(n.p,{children:"Each Langflow server has a file management system where you can store files that you want to use in your flows."}),"\n",(0,s.jsx)(n.p,{children:"Files uploaded to Langflow file management are stored locally to your Langflow server, and they are available to all of your flows."}),"\n",(0,s.jsx)(n.p,{children:"Uploading files to Langflow file management keeps your files in a central location, and allows you to reuse files across flows without repeated manual uploads."}),"\n",(0,s.jsx)(n.h2,{id:"use-the-file-management-ui",children:"Use the file management UI"}),"\n",(0,s.jsx)(n.p,{children:"You can use the file management UI to upload files from your local machine to your own Langflow server.\nYou can also manage all files that have been uploaded to your Langflow server."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Navigate to Langflow file management:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["In the Langflow UI, on the ",(0,s.jsxs)(n.a,{href:"/concepts-flows#projects",children:[(0,s.jsx)(n.strong,{children:"Projects"})," page"]})," page, click ",(0,s.jsx)(n.strong,{children:"My Files"})," below the list of projects."]}),"\n",(0,s.jsxs)(n.li,{children:["From a browser, navigate to your Langflow server's ",(0,s.jsx)(n.code,{children:"/files"})," endpoint, such as ",(0,s.jsx)(n.code,{children:"http://localhost:7860/files"}),". Modify the base URL as needed for your Langflow server."]}),"\n",(0,s.jsxs)(n.li,{children:["For programmatic file management, use the ",(0,s.jsx)(n.a,{href:"/api-files",children:"Langflow API files endpoints"}),". However, the following steps assume you're using the file management UI."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["On the ",(0,s.jsx)(n.strong,{children:"My Files"})," page, click ",(0,s.jsx)(n.strong,{children:"Upload"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Select one or more files to upload."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After uploading files, you can rename, download, copy, or delete files within the file management UI:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To delete a file, hover over a file's icon, select it, and then click ",(0,s.jsx)(a.A,{name:"Trash2","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Delete"}),".\nYou can delete multiple files in a single action."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To download a file, hover over a file's icon, select it, and then click ",(0,s.jsx)(a.A,{name:"Download","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Download"}),".\nIf you download multiple files in a single action, they are saved together in a zip file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"upload-and-manage-files-with-the-langflow-api",children:"Upload and manage files with the Langflow API"}),"\n",(0,s.jsx)(n.p,{children:"With the Langflow API, you can upload and manage files in Langflow file management, and you can send files to flows programmatically at runtime."}),"\n",(0,s.jsxs)(n.p,{children:["For more information and examples, see ",(0,s.jsx)(n.a,{href:"/api-files",children:"Files endpoints"})," and ",(0,s.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"use-files-in-a-flow",children:"Use files in a flow"}),"\n",(0,s.jsxs)(n.p,{children:["To use files in your Langflow file management system in a flow, add a component that accepts file input to your flow, such as the ",(0,s.jsx)(n.strong,{children:"File"})," component."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, add a ",(0,s.jsx)(n.strong,{children:"File"})," component to your flow, click ",(0,s.jsx)(n.strong,{children:"Select files"}),", and then select files from the ",(0,s.jsx)(n.strong,{children:"My Files"})," list."]}),"\n",(0,s.jsxs)(n.p,{children:["This list includes all files in your server's file management system, but you can only select ",(0,s.jsxs)(n.a,{href:"/components-data#file",children:["file types that are supported by the ",(0,s.jsx)(n.strong,{children:"File"})," component"]}),".\nIf you need another file type, you must use a different component that supports that file type, or you need to convert it to a supported type before uploading it."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information about the ",(0,s.jsx)(n.strong,{children:"File"})," component and other data loading components, see ",(0,s.jsx)(n.a,{href:"/components-data",children:"Data components"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"load-files-at-runtime",children:"Load files at runtime"}),"\n",(0,s.jsxs)(n.p,{children:["You can use preloaded files in your flows, and you can load files at runtime, if your flow accepts file input.\nFor an example, see ",(0,s.jsx)(n.a,{href:"/chat-with-files",children:"Create a chatbot that can ingest files"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"upload-images",children:"Upload images"}),"\n",(0,s.jsx)(n.p,{children:"Langflow supports base64 images in the following formats:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"PNG"}),"\n",(0,s.jsx)(n.li,{children:"JPG/JPEG"}),"\n",(0,s.jsx)(n.li,{children:"GIF"}),"\n",(0,s.jsx)(n.li,{children:"BMP"}),"\n",(0,s.jsx)(n.li,{children:"WebP"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can upload images to the ",(0,s.jsx)(n.strong,{children:"Playground"})," chat interface and as runtime input with the Langflow API."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.strong,{children:"Playground"}),", you can drag-and-drop images into the chat input area, or you can click the ",(0,s.jsx)(n.strong,{children:"Attach image"})," icon to select an image to upload."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When you trigger a flow with the ",(0,s.jsx)(n.code,{children:"/api/v1/run/$FLOW_ID"})," endpoint, you can use the ",(0,s.jsx)(n.code,{children:"files"})," parameter to attach the base64-encoded image data to the request payload:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:p,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 "http://',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_ADDRESS",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"$FLOW_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-H ",props:{style:{color:"#C9D1D9"}}},{content:'"Content-Type: application/json" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-H ",props:{style:{color:"#C9D1D9"}}},{content:'"x-api-key: ',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_API_KEY",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"-d ",props:{style:{color:"#C9D1D9"}}},{content:"'{",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "session_id": "custom_session_123",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_value": "What is in this image?",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "input_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "output_type": "chat",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "files": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."]',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more specialized image processing, browse third-party ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," or ",(0,s.jsx)(n.a,{href:"/components-custom-components",children:"create your own components"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"work-with-video-files",children:"Work with video files"}),"\n",(0,s.jsxs)(n.p,{children:["For videos, see the ",(0,s.jsx)(n.strong,{children:"Twelve Labs"})," and ",(0,s.jsx)(n.strong,{children:"YouTube"})," ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:"bundles"})," in the Langflow ",(0,s.jsx)(n.strong,{children:"Components"})," menu."]}),"\n",(0,s.jsx)(n.h2,{id:"set-the-maximum-file-size",children:"Set the maximum file size"}),"\n",(0,s.jsxs)(n.p,{children:["By default, the maximum file size is 100 MB.\nTo modify this value, change the ",(0,s.jsx)(n.code,{children:"--max-file-size-upload"})," ",(0,s.jsx)(n.a,{href:"/environment-variables",children:"environment variable"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/components-data",children:"Data components"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/components-processing",children:"Processing components"})}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(f,{...e})}):f(e)}function g(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` 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.46cc88d4.js b/assets/js/runtime~main.c27ec185.js similarity index 95% rename from assets/js/runtime~main.46cc88d4.js rename to assets/js/runtime~main.c27ec185.js index 65d8c5813e..17c77854cf 100644 --- a/assets/js/runtime~main.46cc88d4.js +++ b/assets/js/runtime~main.c27ec185.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=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 c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",15:"d803fa53",31:"03e862ce",38:"a99a45c9",78:"b768a3a5",118:"650a6085",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",351:"b9acb8d9",368:"07c30ae4",375:"3d81f1cf",416:"ccb2a150",417:"93e16042",548:"37f47bc1",598:"db4f3bbd",606:"1d59d55f",692:"393c45a3",743:"e0f2017c",750:"33b5ee95",768:"6d684b63",785:"5f59ded8",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",957:"c141421f",964:"05d835b4",1006:"47e58a89",1022:"1f19c1a1",1035:"24d32e91",1068:"f4c28b6b",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1361:"ff296c8d",1399:"16ceb5d2",1408:"2fc7e024",1426:"220d55f5",1483:"af6600d9",1488:"ac3cc3f5",1490:"0f761898",1500:"1e9025f7",1515:"2c05a87f",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1628:"07e388ca",1690:"41a97a99",1845:"2ab0d4f5",1895:"d375ca1d",1954:"6ffef3f1",1956:"fe6f9601",2073:"7b7db446",2089:"ad06d5f0",2100:"9cc9f218",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2307:"8bd4a540",2323:"b9f9404d",2348:"f2da9399",2360:"017d425f",2423:"19bcb67f",2457:"46abd5bb",2469:"cd086441",2475:"1ab69cbd",2495:"f735f5f3",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2777:"b3ba68b4",2818:"a9b73094",2901:"03aeaaab",3094:"46d346a5",3147:"4e56251d",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3274:"564a0250",3347:"b5257597",3361:"8f633f11",3468:"c76bd485",3549:"6d20d6ec",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3934:"e190040d",3953:"238e6167",4036:"fbcfc90d",4056:"6ef91a5f",4085:"cb17b4e0",4218:"d5bb0e16",4223:"f01590dc",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4498:"24996c2f",4573:"baacc2a1",4614:"e55b8e98",4645:"fef056e9",4656:"b37620f5",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"44691977",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5200:"ff7f32ba",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5352:"e627b1b2",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5482:"9895db20",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5657:"e82d58ff",5673:"73af8c33",5716:"946d1cee",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5761:"7f193c41",5772:"4e7126f8",5799:"364e949f",5838:"bbb8ec1d",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",5983:"28fb019d",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6063:"464a5f06",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6224:"ef9aa223",6281:"c96ce3ed",6311:"cce672fb",6330:"5d73b2d0",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6541:"a03d4ed9",6559:"6f13807a",6608:"391afd3f",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6855:"0d8750f2",6920:"c817e236",6934:"d745f4e6",6947:"acebef04",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7142:"d0c1f670",7165:"547df4a1",7253:"709203b3",7257:"8321259f",7324:"ab072087",7339:"7a774ddf",7356:"2ea623f2",7414:"7a88e433",7472:"744aaf8b",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7774:"8e9a8774",7800:"f48363a4",7807:"1a8a0a64",7824:"2b56b65e",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7902:"619c7267",7968:"9b0af131",8064:"274fd934",8069:"e267ad05",8082:"08d5c80a",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8268:"a4b6c971",8298:"153f2b62",8304:"73d1a090",8323:"b109d082",8374:"261f8123",8392:"20177945",8401:"17896441",8483:"a84e1c02",8504:"e6c6a4d2",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8641:"8a61012d",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8702:"42962acd",8750:"8a484c94",8790:"bfca1e36",8963:"56c23a02",8978:"aeae39fc",8990:"5f1a63c6",9033:"9f55b2fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9592:"e24b341f",9610:"453ae64a",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9648:"e3230154",9705:"ee3b5967",9712:"d8c8efb9",9731:"52edee88",9751:"25255263",9752:"72d61395",9781:"b796be74",9839:"54980a8a",9857:"09f5326a",9888:"be76515e",9905:"43df3697",9976:"230d5fdc"}[e]||e)+"."+{11:"ee0a3ee3",15:"de4e342e",31:"26dc4e99",38:"12b12fae",78:"e0881ef5",118:"21566c98",126:"cb14c9cb",129:"7127ec5b",188:"0c447bcb",191:"edff055d",230:"b57a23a7",253:"58737783",299:"bdeb4e18",351:"7d92181c",368:"fef33bfb",375:"57ca40a5",416:"51c976e0",417:"fc55d568",548:"eeed0a2c",598:"f25781b8",606:"7567be2b",692:"ba229eb7",743:"d28ebffd",750:"707f8e8a",768:"99c78c40",785:"ddbc79b6",787:"341d64e3",800:"d44b313b",824:"adcc1ff3",879:"4d8ad049",957:"da9e1d2b",964:"ced13117",1006:"471aa9f9",1022:"d46d4330",1035:"74d533fb",1068:"1aa07666",1162:"846917f8",1185:"fd7f55b7",1193:"54c68c9d",1303:"3d43a265",1308:"054eca2b",1361:"3c3f429c",1399:"5d68e36e",1408:"9e601af2",1426:"83c9e864",1483:"a6ea9005",1488:"feb8009a",1490:"23c60cea",1500:"1d36ec42",1515:"6f02ae90",1556:"c5e65a31",1567:"ec65a843",1625:"14cdddbe",1628:"b8735815",1690:"dca3012e",1845:"ed5746c5",1895:"2d13013d",1954:"8a036d4a",1956:"6cc326f3",2073:"a62c0e8f",2089:"141eb33f",2100:"747a02c2",2138:"f62f93d0",2237:"8bc4ac99",2272:"5af6bdf1",2273:"1f2d928d",2307:"877f7b20",2323:"9fadf67f",2348:"f0b98e96",2360:"4f50633d",2423:"78329784",2457:"80d26efc",2469:"960c2e83",2475:"30fb7928",2495:"c7b910ec",2551:"4668f2c8",2565:"dde8d0f5",2624:"270681fd",2642:"2b4802bc",2651:"ca72ef0a",2777:"f3f737db",2818:"1c1a2f0d",2901:"d796b54e",3094:"57a484bb",3147:"92f4c7df",3164:"001eb3e6",3225:"f4c930e3",3240:"dcc19a85",3247:"dda1940a",3263:"1a9cc7d0",3274:"2260e55a",3347:"0cb92093",3361:"f3fe7af4",3468:"261e627c",3477:"a7eba177",3549:"8bbef2b3",3576:"8a47b866",3694:"f8c0479d",3795:"185f4ac0",3832:"54c9637f",3859:"08f4a6d2",3934:"40be77f8",3953:"df7f0bae",4036:"064e994a",4056:"99379452",4085:"bea8818a",4218:"7bfbfdf9",4223:"6e9a76ac",4314:"57d83837",4341:"e6a1bb02",4384:"46125b86",4498:"a9a8cfd5",4573:"e7ddc6f8",4614:"f80d2f4d",4645:"a81075b1",4656:"0af3186e",4754:"5b9f9c4a",4778:"0ab1de71",4784:"2850454f",4841:"11ff17e7",4867:"fd3a87c6",4876:"0577edc0",4891:"a37b37df",4907:"bead07c1",4954:"43103154",5107:"d00d19cd",5110:"ddaf1493",5138:"afe151cb",5144:"f0942dcd",5179:"ca564891",5200:"ac2c7408",5281:"a41c4fe4",5284:"9a1ac6d4",5339:"bdef02a0",5352:"9fcb9075",5412:"b3f7d55a",5467:"f78004bb",5474:"074af722",5482:"88ea0285",5513:"5ed04f5c",5514:"5765db12",5628:"7f3691c6",5657:"d82dec92",5673:"af9e481c",5716:"3e6dabc0",5739:"57e7703f",5742:"60b1d5b2",5757:"efbc375f",5761:"905d0004",5772:"6298bef5",5799:"76948292",5838:"5766cfc9",5865:"5f49417d",5866:"e1a54aee",5883:"7d7b0c34",5894:"7b6c867a",5983:"b0926c31",6003:"4371ec66",6006:"479877b1",6010:"c74728ad",6053:"62555e59",6063:"23a00398",6080:"d7040d78",6108:"fb8d8b42",6214:"85b870d8",6224:"b0360895",6281:"2d0ca3f3",6311:"5008d06d",6330:"c1cc298a",6332:"228b947b",6350:"4b95a419",6419:"e6eeb5a6",6445:"257386eb",6473:"b5e32ff9",6541:"7560c6d2",6559:"5d0db366",6608:"5959ef12",6649:"0ea7221f",6682:"ee292934",6688:"a09e1894",6753:"5143c73f",6757:"168201ac",6801:"b7d69f09",6855:"f6f280b2",6920:"e0632a00",6934:"a578bc85",6947:"1ae6a891",6949:"ef6c0edc",7098:"fc1f6434",7108:"a251e652",7142:"8f7d5522",7165:"1940f465",7253:"26f982ab",7257:"69a169c8",7324:"641a3484",7339:"350f484c",7356:"d381c765",7397:"385da999",7414:"eab03115",7472:"ec3ce7db",7507:"64b2ab53",7512:"251c514e",7713:"0a9565a6",7774:"1b22f20b",7800:"f92863e9",7807:"db46a006",7824:"8081cbe9",7841:"faf804a1",7859:"a94b7977",7894:"a7021e43",7902:"ac0023f6",7968:"b36f8529",8035:"87ec3f77",8064:"2b2c4924",8069:"3ed09d85",8082:"2b9a015f",8085:"51f6d0db",8102:"06a5c133",8158:"20de8b80",8184:"f223b902",8188:"4736ecea",8196:"8409b15b",8208:"000afae6",8268:"ede8bab6",8298:"d9604336",8304:"1146f31c",8323:"4bd39e3a",8374:"4b006095",8392:"f1a62477",8401:"23c55f2d",8483:"a656161d",8504:"ce5c6831",8571:"7ba5573d",8593:"c126b5fb",8607:"097e3679",8641:"1497af0e",8649:"f40201c4",8667:"a0f46cd3",8679:"b71a6a45",8702:"a7523d67",8750:"785e40a0",8790:"c24795d7",8913:"47209f3b",8963:"520f842a",8978:"641ff1a5",8990:"55e64b78",9033:"61d4719f",9036:"b970c848",9048:"bdc69ee3",9099:"decaeb70",9126:"3a0b3e32",9148:"2b76b49f",9213:"a6fc8fd4",9227:"1f2c6944",9264:"f2a5ff70",9315:"20691811",9331:"d44ba3be",9363:"6be68f79",9371:"da2c97f3",9431:"5b4b6ef6",9459:"99f76493",9476:"f50300b7",9479:"c2b519f3",9483:"61933302",9495:"49162ef8",9509:"329a1685",9555:"362358d6",9592:"762928fe",9610:"bbebb079",9619:"5ab2715e",9640:"b45c3017",9647:"5cb928a1",9648:"61222d5c",9705:"097cca43",9712:"48987fcd",9731:"74089fe0",9751:"fd414b25",9752:"5f89276d",9781:"207b4d64",9839:"032b81a6",9857:"d319445c",9888:"9c7044bb",9905:"55d8058e",9976:"40ae1afa"}[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={},c="langflow-docs:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",20177945:"8392",25255263:"9751",44691977:"4876",56350599:"8593",64045095:"3576",69079906:"5739",86116998:"4907",d2df9b4e:"11",d803fa53:"15","03e862ce":"31",a99a45c9:"38",b768a3a5:"78","650a6085":"118",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299",b9acb8d9:"351","07c30ae4":"368","3d81f1cf":"375",ccb2a150:"416","93e16042":"417","37f47bc1":"548",db4f3bbd:"598","1d59d55f":"606","393c45a3":"692",e0f2017c:"743","33b5ee95":"750","6d684b63":"768","5f59ded8":"785","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879",c141421f:"957","05d835b4":"964","47e58a89":"1006","1f19c1a1":"1022","24d32e91":"1035",f4c28b6b:"1068",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",ff296c8d:"1361","16ceb5d2":"1399","2fc7e024":"1408","220d55f5":"1426",af6600d9:"1483",ac3cc3f5:"1488","0f761898":"1490","1e9025f7":"1500","2c05a87f":"1515","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","07e388ca":"1628","41a97a99":"1690","2ab0d4f5":"1845",d375ca1d:"1895","6ffef3f1":"1954",fe6f9601:"1956","7b7db446":"2073",ad06d5f0:"2089","9cc9f218":"2100","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273","8bd4a540":"2307",b9f9404d:"2323",f2da9399:"2348","017d425f":"2360","19bcb67f":"2423","46abd5bb":"2457",cd086441:"2469","1ab69cbd":"2475",f735f5f3:"2495","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651",b3ba68b4:"2777",a9b73094:"2818","03aeaaab":"2901","46d346a5":"3094","4e56251d":"3147","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240",f0b67137:"3247","730da84e":"3263","564a0250":"3274",b5257597:"3347","8f633f11":"3361",c76bd485:"3468","6d20d6ec":"3549",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",e190040d:"3934","238e6167":"3953",fbcfc90d:"4036","6ef91a5f":"4056",cb17b4e0:"4085",d5bb0e16:"4218",f01590dc:"4223",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384","24996c2f":"4498",baacc2a1:"4573",e55b8e98:"4614",fef056e9:"4645",b37620f5:"4656",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",a71efd4a:"4954",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",ff7f32ba:"5200",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",e627b1b2:"5352",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","9895db20":"5482","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",e82d58ff:"5657","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",bbb8ec1d:"5838",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","28fb019d":"5983","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","464a5f06":"6063","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",ef9aa223:"6224",c96ce3ed:"6281",cce672fb:"6311","5d73b2d0":"6330","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",a03d4ed9:"6541","6f13807a":"6559","391afd3f":"6608","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801","0d8750f2":"6855",c817e236:"6920",d745f4e6:"6934",acebef04:"6947",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108",d0c1f670:"7142","547df4a1":"7165","709203b3":"7253","8321259f":"7257",ab072087:"7324","7a774ddf":"7339","2ea623f2":"7356","7a88e433":"7414","744aaf8b":"7472","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","8e9a8774":"7774",f48363a4:"7800","1a8a0a64":"7807","2b56b65e":"7824","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","619c7267":"7902","9b0af131":"7968","274fd934":"8064",e267ad05:"8069","08d5c80a":"8082",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208",a4b6c971:"8268","153f2b62":"8298","73d1a090":"8304",b109d082:"8323","261f8123":"8374",a84e1c02:"8483",e6c6a4d2:"8504",da1ad91e:"8571","681e5335":"8607","8a61012d":"8641","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","42962acd":"8702","8a484c94":"8750",bfca1e36:"8790","56c23a02":"8963",aeae39fc:"8978","5f1a63c6":"8990","9f55b2fc":"9033","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555",e24b341f:"9592","453ae64a":"9610","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",e3230154:"9648",ee3b5967:"9705",d8c8efb9:"9712","52edee88":"9731","72d61395":"9752",b796be74:"9781","54980a8a":"9839","09f5326a":"9857",be76515e:"9888","43df3697":"9905","230d5fdc":"9976"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise((f,c)=>d=e[a]=[f,c]);f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[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(f);n{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=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 c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",15:"d803fa53",31:"03e862ce",38:"a99a45c9",78:"b768a3a5",118:"650a6085",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",351:"b9acb8d9",368:"07c30ae4",375:"3d81f1cf",416:"ccb2a150",417:"93e16042",548:"37f47bc1",598:"db4f3bbd",606:"1d59d55f",692:"393c45a3",743:"e0f2017c",750:"33b5ee95",768:"6d684b63",785:"5f59ded8",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",957:"c141421f",964:"05d835b4",1006:"47e58a89",1022:"1f19c1a1",1035:"24d32e91",1068:"f4c28b6b",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1361:"ff296c8d",1399:"16ceb5d2",1408:"2fc7e024",1426:"220d55f5",1483:"af6600d9",1488:"ac3cc3f5",1490:"0f761898",1500:"1e9025f7",1515:"2c05a87f",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1628:"07e388ca",1690:"41a97a99",1845:"2ab0d4f5",1895:"d375ca1d",1954:"6ffef3f1",1956:"fe6f9601",2073:"7b7db446",2089:"ad06d5f0",2100:"9cc9f218",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2307:"8bd4a540",2323:"b9f9404d",2348:"f2da9399",2360:"017d425f",2423:"19bcb67f",2457:"46abd5bb",2469:"cd086441",2475:"1ab69cbd",2495:"f735f5f3",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2777:"b3ba68b4",2818:"a9b73094",2901:"03aeaaab",3094:"46d346a5",3147:"4e56251d",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3274:"564a0250",3347:"b5257597",3361:"8f633f11",3468:"c76bd485",3549:"6d20d6ec",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3934:"e190040d",3953:"238e6167",4036:"fbcfc90d",4056:"6ef91a5f",4085:"cb17b4e0",4218:"d5bb0e16",4223:"f01590dc",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4498:"24996c2f",4573:"baacc2a1",4614:"e55b8e98",4645:"fef056e9",4656:"b37620f5",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"44691977",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5200:"ff7f32ba",5281:"a0511a5b",5284:"64ca91f1",5339:"9447891f",5352:"e627b1b2",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5482:"9895db20",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5657:"e82d58ff",5673:"73af8c33",5716:"946d1cee",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5761:"7f193c41",5772:"4e7126f8",5799:"364e949f",5838:"bbb8ec1d",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",5983:"28fb019d",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6063:"464a5f06",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6224:"ef9aa223",6281:"c96ce3ed",6311:"cce672fb",6330:"5d73b2d0",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6541:"a03d4ed9",6559:"6f13807a",6608:"391afd3f",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6855:"0d8750f2",6920:"c817e236",6934:"d745f4e6",6947:"acebef04",6949:"b36bb719",7098:"a7bd4aaa",7108:"688feaef",7142:"d0c1f670",7165:"547df4a1",7253:"709203b3",7257:"8321259f",7324:"ab072087",7339:"7a774ddf",7356:"2ea623f2",7414:"7a88e433",7472:"744aaf8b",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7774:"8e9a8774",7800:"f48363a4",7807:"1a8a0a64",7824:"2b56b65e",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7902:"619c7267",7968:"9b0af131",8064:"274fd934",8069:"e267ad05",8082:"08d5c80a",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8268:"a4b6c971",8298:"153f2b62",8304:"73d1a090",8323:"b109d082",8374:"261f8123",8392:"20177945",8401:"17896441",8483:"a84e1c02",8504:"e6c6a4d2",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8641:"8a61012d",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8702:"42962acd",8750:"8a484c94",8790:"bfca1e36",8963:"56c23a02",8978:"aeae39fc",8990:"5f1a63c6",9033:"9f55b2fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9592:"e24b341f",9610:"453ae64a",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9648:"e3230154",9705:"ee3b5967",9712:"d8c8efb9",9731:"52edee88",9751:"25255263",9752:"72d61395",9781:"b796be74",9839:"54980a8a",9857:"09f5326a",9888:"be76515e",9905:"43df3697",9976:"230d5fdc"}[e]||e)+"."+{11:"ee0a3ee3",15:"de4e342e",31:"26dc4e99",38:"12b12fae",78:"e0881ef5",118:"21566c98",126:"cb14c9cb",129:"7127ec5b",188:"0c447bcb",191:"edff055d",230:"b57a23a7",253:"58737783",299:"bdeb4e18",351:"7d92181c",368:"fef33bfb",375:"57ca40a5",416:"51c976e0",417:"fc55d568",548:"eeed0a2c",598:"f25781b8",606:"7567be2b",692:"ba229eb7",743:"d28ebffd",750:"707f8e8a",768:"99c78c40",785:"ddbc79b6",787:"341d64e3",800:"d44b313b",824:"adcc1ff3",879:"4d8ad049",957:"da9e1d2b",964:"ced13117",1006:"707a09c8",1022:"d46d4330",1035:"74d533fb",1068:"1aa07666",1162:"846917f8",1185:"fd7f55b7",1193:"54c68c9d",1303:"3d43a265",1308:"054eca2b",1361:"3c3f429c",1399:"a63b4bf7",1408:"9e601af2",1426:"83c9e864",1483:"a6ea9005",1488:"feb8009a",1490:"23c60cea",1500:"1d36ec42",1515:"6f02ae90",1556:"c5e65a31",1567:"6fca9812",1625:"14cdddbe",1628:"b8735815",1690:"dca3012e",1845:"7f0b74b8",1895:"2d13013d",1954:"8a036d4a",1956:"6cc326f3",2073:"a62c0e8f",2089:"141eb33f",2100:"747a02c2",2138:"f62f93d0",2237:"8bc4ac99",2272:"5af6bdf1",2273:"1f2d928d",2307:"877f7b20",2323:"9fadf67f",2348:"f0b98e96",2360:"4f50633d",2423:"78329784",2457:"80d26efc",2469:"960c2e83",2475:"30fb7928",2495:"74045de8",2551:"4668f2c8",2565:"dde8d0f5",2624:"270681fd",2642:"2b4802bc",2651:"ca72ef0a",2777:"f3f737db",2818:"1c1a2f0d",2901:"d796b54e",3094:"57a484bb",3147:"92f4c7df",3164:"c41fea74",3225:"f4c930e3",3240:"dcc19a85",3247:"dda1940a",3263:"1a9cc7d0",3274:"2260e55a",3347:"0cb92093",3361:"f3fe7af4",3468:"261e627c",3477:"a7eba177",3549:"8bbef2b3",3576:"8a47b866",3694:"f8c0479d",3795:"185f4ac0",3832:"54c9637f",3859:"08f4a6d2",3934:"40be77f8",3953:"df7f0bae",4036:"064e994a",4056:"99379452",4085:"bea8818a",4218:"7bfbfdf9",4223:"6e9a76ac",4314:"499c51f9",4341:"e6a1bb02",4384:"46125b86",4498:"a9a8cfd5",4573:"e7ddc6f8",4614:"f80d2f4d",4645:"a81075b1",4656:"0af3186e",4754:"5b9f9c4a",4778:"0ab1de71",4784:"2850454f",4841:"11ff17e7",4867:"fd3a87c6",4876:"0577edc0",4891:"a37b37df",4907:"bead07c1",4954:"43103154",5107:"d00d19cd",5110:"ddaf1493",5138:"afe151cb",5144:"3195e200",5179:"ca564891",5200:"ac2c7408",5281:"a41c4fe4",5284:"9a1ac6d4",5339:"bdef02a0",5352:"9fcb9075",5412:"b3f7d55a",5467:"f78004bb",5474:"074af722",5482:"88ea0285",5513:"5ed04f5c",5514:"5765db12",5628:"7f3691c6",5657:"d82dec92",5673:"af9e481c",5716:"3e6dabc0",5739:"fc012235",5742:"60b1d5b2",5757:"efbc375f",5761:"1ee56d1a",5772:"6298bef5",5799:"76948292",5838:"5766cfc9",5865:"5f49417d",5866:"e1a54aee",5883:"7d7b0c34",5894:"7b6c867a",5983:"b0926c31",6003:"4371ec66",6006:"479877b1",6010:"c74728ad",6053:"62555e59",6063:"23a00398",6080:"d7040d78",6108:"61ef4fb2",6214:"85b870d8",6224:"b0360895",6281:"2d0ca3f3",6311:"5008d06d",6330:"c1cc298a",6332:"228b947b",6350:"4b95a419",6419:"e6eeb5a6",6445:"257386eb",6473:"b5e32ff9",6541:"7560c6d2",6559:"5d0db366",6608:"5959ef12",6649:"0ea7221f",6682:"ee292934",6688:"a09e1894",6753:"5143c73f",6757:"168201ac",6801:"b7d69f09",6855:"f6f280b2",6920:"e0632a00",6934:"a578bc85",6947:"1ae6a891",6949:"ef6c0edc",7098:"fc1f6434",7108:"a251e652",7142:"8f7d5522",7165:"1940f465",7253:"26f982ab",7257:"69a169c8",7324:"641a3484",7339:"350f484c",7356:"d381c765",7397:"385da999",7414:"eab03115",7472:"ec3ce7db",7507:"64b2ab53",7512:"251c514e",7713:"0a9565a6",7774:"1b22f20b",7800:"f92863e9",7807:"db46a006",7824:"8081cbe9",7841:"faf804a1",7859:"a94b7977",7894:"a7021e43",7902:"ac0023f6",7968:"b36f8529",8035:"87ec3f77",8064:"2b2c4924",8069:"3ed09d85",8082:"2b9a015f",8085:"51f6d0db",8102:"06a5c133",8158:"20de8b80",8184:"f223b902",8188:"4736ecea",8196:"8409b15b",8208:"000afae6",8268:"ede8bab6",8298:"d9604336",8304:"1146f31c",8323:"4bd39e3a",8374:"4b006095",8392:"f35088b0",8401:"23c55f2d",8483:"a656161d",8504:"f9bf0dfe",8571:"7ba5573d",8593:"c126b5fb",8607:"097e3679",8641:"1497af0e",8649:"f40201c4",8667:"a0f46cd3",8679:"b71a6a45",8702:"a7523d67",8750:"785e40a0",8790:"c24795d7",8913:"47209f3b",8963:"520f842a",8978:"641ff1a5",8990:"55e64b78",9033:"61d4719f",9036:"b970c848",9048:"bdc69ee3",9099:"decaeb70",9126:"3a0b3e32",9148:"2b76b49f",9213:"a6fc8fd4",9227:"1f2c6944",9264:"f2a5ff70",9315:"20691811",9331:"d44ba3be",9363:"6be68f79",9371:"da2c97f3",9431:"5b4b6ef6",9459:"99f76493",9476:"f50300b7",9479:"c2b519f3",9483:"61933302",9495:"49162ef8",9509:"329a1685",9555:"362358d6",9592:"762928fe",9610:"bbebb079",9619:"5ab2715e",9640:"b45c3017",9647:"5cb928a1",9648:"61222d5c",9705:"097cca43",9712:"48987fcd",9731:"74089fe0",9751:"fd414b25",9752:"5f89276d",9781:"207b4d64",9839:"032b81a6",9857:"d319445c",9888:"9c7044bb",9905:"55d8058e",9976:"40ae1afa"}[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={},c="langflow-docs:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",20177945:"8392",25255263:"9751",44691977:"4876",56350599:"8593",64045095:"3576",69079906:"5739",86116998:"4907",d2df9b4e:"11",d803fa53:"15","03e862ce":"31",a99a45c9:"38",b768a3a5:"78","650a6085":"118",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299",b9acb8d9:"351","07c30ae4":"368","3d81f1cf":"375",ccb2a150:"416","93e16042":"417","37f47bc1":"548",db4f3bbd:"598","1d59d55f":"606","393c45a3":"692",e0f2017c:"743","33b5ee95":"750","6d684b63":"768","5f59ded8":"785","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879",c141421f:"957","05d835b4":"964","47e58a89":"1006","1f19c1a1":"1022","24d32e91":"1035",f4c28b6b:"1068",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",ff296c8d:"1361","16ceb5d2":"1399","2fc7e024":"1408","220d55f5":"1426",af6600d9:"1483",ac3cc3f5:"1488","0f761898":"1490","1e9025f7":"1500","2c05a87f":"1515","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","07e388ca":"1628","41a97a99":"1690","2ab0d4f5":"1845",d375ca1d:"1895","6ffef3f1":"1954",fe6f9601:"1956","7b7db446":"2073",ad06d5f0:"2089","9cc9f218":"2100","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273","8bd4a540":"2307",b9f9404d:"2323",f2da9399:"2348","017d425f":"2360","19bcb67f":"2423","46abd5bb":"2457",cd086441:"2469","1ab69cbd":"2475",f735f5f3:"2495","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651",b3ba68b4:"2777",a9b73094:"2818","03aeaaab":"2901","46d346a5":"3094","4e56251d":"3147","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240",f0b67137:"3247","730da84e":"3263","564a0250":"3274",b5257597:"3347","8f633f11":"3361",c76bd485:"3468","6d20d6ec":"3549",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",e190040d:"3934","238e6167":"3953",fbcfc90d:"4036","6ef91a5f":"4056",cb17b4e0:"4085",d5bb0e16:"4218",f01590dc:"4223",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384","24996c2f":"4498",baacc2a1:"4573",e55b8e98:"4614",fef056e9:"4645",b37620f5:"4656",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",a71efd4a:"4954",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",ff7f32ba:"5200",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",e627b1b2:"5352",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","9895db20":"5482","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",e82d58ff:"5657","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",bbb8ec1d:"5838",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","28fb019d":"5983","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","464a5f06":"6063","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",ef9aa223:"6224",c96ce3ed:"6281",cce672fb:"6311","5d73b2d0":"6330","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",a03d4ed9:"6541","6f13807a":"6559","391afd3f":"6608","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801","0d8750f2":"6855",c817e236:"6920",d745f4e6:"6934",acebef04:"6947",b36bb719:"6949",a7bd4aaa:"7098","688feaef":"7108",d0c1f670:"7142","547df4a1":"7165","709203b3":"7253","8321259f":"7257",ab072087:"7324","7a774ddf":"7339","2ea623f2":"7356","7a88e433":"7414","744aaf8b":"7472","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","8e9a8774":"7774",f48363a4:"7800","1a8a0a64":"7807","2b56b65e":"7824","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","619c7267":"7902","9b0af131":"7968","274fd934":"8064",e267ad05:"8069","08d5c80a":"8082",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208",a4b6c971:"8268","153f2b62":"8298","73d1a090":"8304",b109d082:"8323","261f8123":"8374",a84e1c02:"8483",e6c6a4d2:"8504",da1ad91e:"8571","681e5335":"8607","8a61012d":"8641","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","42962acd":"8702","8a484c94":"8750",bfca1e36:"8790","56c23a02":"8963",aeae39fc:"8978","5f1a63c6":"8990","9f55b2fc":"9033","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555",e24b341f:"9592","453ae64a":"9610","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",e3230154:"9648",ee3b5967:"9705",d8c8efb9:"9712","52edee88":"9731","72d61395":"9752",b796be74:"9781","54980a8a":"9839","09f5326a":"9857",be76515e:"9888","43df3697":"9905","230d5fdc":"9976"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise((f,c)=>d=e[a]=[f,c]);f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[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(f);n - + diff --git a/blog-writer.html b/blog-writer.html index ef35aeb99d..c3a8cb88e8 100644 --- a/blog-writer.html +++ b/blog-writer.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-aiml.html b/bundles-aiml.html index 6793a27fdc..c1763905d2 100644 --- a/bundles-aiml.html +++ b/bundles-aiml.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-amazon.html b/bundles-amazon.html index 79eb161220..ff56801188 100644 --- a/bundles-amazon.html +++ b/bundles-amazon.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-anthropic.html b/bundles-anthropic.html index d88e223621..8d1592a182 100644 --- a/bundles-anthropic.html +++ b/bundles-anthropic.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-arxiv.html b/bundles-arxiv.html index cb4938745c..e8f0a47257 100644 --- a/bundles-arxiv.html +++ b/bundles-arxiv.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-azure.html b/bundles-azure.html index 41486a6cac..0169ddea74 100644 --- a/bundles-azure.html +++ b/bundles-azure.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-baidu.html b/bundles-baidu.html index 9c17e754bf..2e9ba2b117 100644 --- a/bundles-baidu.html +++ b/bundles-baidu.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-bing.html b/bundles-bing.html index 36efda693e..22019c70c4 100644 --- a/bundles-bing.html +++ b/bundles-bing.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cloudflare.html b/bundles-cloudflare.html index 6a040321d3..26f9ffd6df 100644 --- a/bundles-cloudflare.html +++ b/bundles-cloudflare.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cohere.html b/bundles-cohere.html index c40f08f46d..bf60577caf 100644 --- a/bundles-cohere.html +++ b/bundles-cohere.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-datastax.html b/bundles-datastax.html index 34b68066c1..ab6d45b750 100644 --- a/bundles-datastax.html +++ b/bundles-datastax.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-deepseek.html b/bundles-deepseek.html index 255e2a7112..9ef3bafce8 100644 --- a/bundles-deepseek.html +++ b/bundles-deepseek.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-duckduckgo.html b/bundles-duckduckgo.html index 22df618c3e..d5fd4f4e18 100644 --- a/bundles-duckduckgo.html +++ b/bundles-duckduckgo.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-exa.html b/bundles-exa.html index 90860e7a2c..9c895788f3 100644 --- a/bundles-exa.html +++ b/bundles-exa.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-glean.html b/bundles-glean.html index e1b52f8037..adda92f032 100644 --- a/bundles-glean.html +++ b/bundles-glean.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-google.html b/bundles-google.html index c8d608896b..a3b44e5aa0 100644 --- a/bundles-google.html +++ b/bundles-google.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-groq.html b/bundles-groq.html index f504a8cabb..cf72117195 100644 --- a/bundles-groq.html +++ b/bundles-groq.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-huggingface.html b/bundles-huggingface.html index e4f18b3ab2..7eb33e48d0 100644 --- a/bundles-huggingface.html +++ b/bundles-huggingface.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-ibm.html b/bundles-ibm.html index 4b8d4c0e02..4aafe035e6 100644 --- a/bundles-ibm.html +++ b/bundles-ibm.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-icosacomputing.html b/bundles-icosacomputing.html index ee45e58f7c..8bd3575d31 100644 --- a/bundles-icosacomputing.html +++ b/bundles-icosacomputing.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-langchain.html b/bundles-langchain.html index b50b6c2c1b..5f16a56bf2 100644 --- a/bundles-langchain.html +++ b/bundles-langchain.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-lmstudio.html b/bundles-lmstudio.html index abdc1c0982..7441163eca 100644 --- a/bundles-lmstudio.html +++ b/bundles-lmstudio.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-maritalk.html b/bundles-maritalk.html index 5723a5f7ac..2c535d6420 100644 --- a/bundles-maritalk.html +++ b/bundles-maritalk.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-mem0.html b/bundles-mem0.html index 043eea54ba..b5c310d970 100644 --- a/bundles-mem0.html +++ b/bundles-mem0.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-mistralai.html b/bundles-mistralai.html index 5ab953ccc3..6ce4967784 100644 --- a/bundles-mistralai.html +++ b/bundles-mistralai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-novita.html b/bundles-novita.html index c09026d920..ae0ec9033e 100644 --- a/bundles-novita.html +++ b/bundles-novita.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-nvidia.html b/bundles-nvidia.html index 313f7c46b2..f65957e49c 100644 --- a/bundles-nvidia.html +++ b/bundles-nvidia.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-ollama.html b/bundles-ollama.html index 010f49d154..a0dc4a37bd 100644 --- a/bundles-ollama.html +++ b/bundles-ollama.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-openai.html b/bundles-openai.html index 381f084d93..f890cae77e 100644 --- a/bundles-openai.html +++ b/bundles-openai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-openrouter.html b/bundles-openrouter.html index 8e064c3f2a..e517d3e6f6 100644 --- a/bundles-openrouter.html +++ b/bundles-openrouter.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-perplexity.html b/bundles-perplexity.html index 83b16230cf..195e5d5b8e 100644 --- a/bundles-perplexity.html +++ b/bundles-perplexity.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-redis.html b/bundles-redis.html index 99935c109e..b6bf1f6c16 100644 --- a/bundles-redis.html +++ b/bundles-redis.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-sambanova.html b/bundles-sambanova.html index 32170d8226..e3a932a90c 100644 --- a/bundles-sambanova.html +++ b/bundles-sambanova.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-searchapi.html b/bundles-searchapi.html index 615e51ce7f..a40f4569e4 100644 --- a/bundles-searchapi.html +++ b/bundles-searchapi.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-vertexai.html b/bundles-vertexai.html index 02f30c7fb2..1505505dfd 100644 --- a/bundles-vertexai.html +++ b/bundles-vertexai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-wikipedia.html b/bundles-wikipedia.html index 64a25c2a28..dd57601540 100644 --- a/bundles-wikipedia.html +++ b/bundles-wikipedia.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-xai.html b/bundles-xai.html index 83b61cac27..9f6eaef62b 100644 --- a/bundles-xai.html +++ b/bundles-xai.html @@ -23,7 +23,7 @@ - + diff --git a/chat-with-files.html b/chat-with-files.html index 8b9a32c1fd..5e6fcb1331 100644 --- a/chat-with-files.html +++ b/chat-with-files.html @@ -23,7 +23,7 @@ - + diff --git a/chat-with-rag.html b/chat-with-rag.html index 0756dfc559..fd087a96cd 100644 --- a/chat-with-rag.html +++ b/chat-with-rag.html @@ -23,7 +23,7 @@ - + diff --git a/components-agents.html b/components-agents.html index 760ba77185..0f0377151a 100644 --- a/components-agents.html +++ b/components-agents.html @@ -23,7 +23,7 @@ - + diff --git a/components-bundle-components.html b/components-bundle-components.html index dc0e588113..325b8a0992 100644 --- a/components-bundle-components.html +++ b/components-bundle-components.html @@ -23,7 +23,7 @@ - + diff --git a/components-custom-components.html b/components-custom-components.html index 2bcbe0e744..9bec12a5e3 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -23,7 +23,7 @@ - + @@ -175,7 +175,7 @@ For example:


_10
def some_method(self):
_10
count = self.ctx.get("my_count", 0)
_10
self.ctx["my_count"] = count + 1

Directory structure requirements

By default, Langflow looks for custom components in the langflow/components directory.

-

If you're creating custom components in a different location using the LANGFLOW_COMPONENTS_PATH environment variable, components must be organized in a specific directory structure to be properly loaded and displayed in the UI:

+

If you're creating custom components in a different location using the LANGFLOW_COMPONENTS_PATH environment variable, components must be organized in a specific directory structure to be properly loaded and displayed in the UI:


_10
/your/custom/components/path/ # Base directory set by LANGFLOW_COMPONENTS_PATH
_10
└── category_name/ # Required category subfolder that determines menu name
_10
└── custom_component.py # Component file

Components must be placed inside category folders, not directly in the base directory. The category folder name determines where the component appears in the Langflow Components menu.

diff --git a/components-data.html b/components-data.html index ba13968ebc..cde4225e80 100644 --- a/components-data.html +++ b/components-data.html @@ -23,7 +23,7 @@ - + @@ -120,7 +120,7 @@ It supports multiple file types and provides parameters for parallel processing For more information about uploading files and working with files in flows, see File management and Create a chatbot that can ingest files.

File type and size limits

By default, the maximum file size is 100 MB. -To modify this value, change the --max-file-size-upload environment variable.

+To modify this value, change the --max-file-size-upload environment variable.

Supported file types

The following file types are supported by the File component. Use archive and compressed formats to bundle multiple files together, or use the Directory component to load all files in a directory.

  • .bz2
  • diff --git a/components-embedding-models.html b/components-embedding-models.html index ac5a6bb8f4..d5fb12230b 100644 --- a/components-embedding-models.html +++ b/components-embedding-models.html @@ -23,7 +23,7 @@ - + diff --git a/components-helpers.html b/components-helpers.html index 698dac3579..f0eb91be2c 100644 --- a/components-helpers.html +++ b/components-helpers.html @@ -23,7 +23,7 @@ - + diff --git a/components-io.html b/components-io.html index d35b011022..9f06145f14 100644 --- a/components-io.html +++ b/components-io.html @@ -23,7 +23,7 @@ - + diff --git a/components-logic.html b/components-logic.html index 81c63c6d87..6c984f0a9c 100644 --- a/components-logic.html +++ b/components-logic.html @@ -23,7 +23,7 @@ - + diff --git a/components-memories.html b/components-memories.html index 0b0c3aeab6..744ea50b4a 100644 --- a/components-memories.html +++ b/components-memories.html @@ -23,7 +23,7 @@ - + diff --git a/components-models.html b/components-models.html index c6e88657b9..3ada297af9 100644 --- a/components-models.html +++ b/components-models.html @@ -23,7 +23,7 @@ - + diff --git a/components-processing.html b/components-processing.html index 2ec7037faf..3206f07e56 100644 --- a/components-processing.html +++ b/components-processing.html @@ -23,7 +23,7 @@ - + diff --git a/components-prompts.html b/components-prompts.html index 53c29d498e..67c5e6ab7b 100644 --- a/components-prompts.html +++ b/components-prompts.html @@ -23,7 +23,7 @@ - + diff --git a/components-tools.html b/components-tools.html index 280e048c4a..b1efb4bcdb 100644 --- a/components-tools.html +++ b/components-tools.html @@ -23,7 +23,7 @@ - + diff --git a/components-vector-stores.html b/components-vector-stores.html index 1249ddb2e3..2147b49428 100644 --- a/components-vector-stores.html +++ b/components-vector-stores.html @@ -23,7 +23,7 @@ - + diff --git a/concepts-components.html b/concepts-components.html index 2ecf33140f..2eb2abf31e 100644 --- a/concepts-components.html +++ b/concepts-components.html @@ -23,7 +23,7 @@ - + diff --git a/concepts-file-management.html b/concepts-file-management.html index fa72ed767c..ccb30f3a88 100644 --- a/concepts-file-management.html +++ b/concepts-file-management.html @@ -23,7 +23,7 @@ - + @@ -118,7 +118,7 @@ For an example, see Create a chatbot that can ingest

    For videos, see the Twelve Labs and YouTube bundles in the Langflow Components menu.

    Set the maximum file size

    By default, the maximum file size is 100 MB. -To modify this value, change the --max-file-size-upload environment variable.

    +To modify this value, change the --max-file-size-upload environment variable.

    See also