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: Badgroup_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.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.
_10def some_method(self):_10 count = self.ctx.get("my_count", 0)_10 self.ctx["my_count"] = count + 1
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.By default, the maximum file size is 100 MB.
-To modify this value, change the --max-file-size-upload environment variable.
--max-file-size-upload environment variable.
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.
.bz2For videos, see the Twelve Labs and YouTube bundles in the Langflow Components menu.
By default, the maximum file size is 100 MB.
-To modify this value, change the --max-file-size-upload environment variable.
--max-file-size-upload environment variable.